visualfries 0.1.0

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.
Files changed (219) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +213 -0
  3. package/dist/DIContainer.d.ts +4 -0
  4. package/dist/DIContainer.js +145 -0
  5. package/dist/SceneBuilder.svelte.d.ts +8574 -0
  6. package/dist/SceneBuilder.svelte.js +409 -0
  7. package/dist/adapters/subtitleHelpers.d.ts +2 -0
  8. package/dist/adapters/subtitleHelpers.js +187 -0
  9. package/dist/animations/AnimationContext.d.ts +17 -0
  10. package/dist/animations/AnimationContext.js +72 -0
  11. package/dist/animations/AnimationPresetsRegister.d.ts +362 -0
  12. package/dist/animations/AnimationPresetsRegister.js +20 -0
  13. package/dist/animations/AnimationSetup.d.ts +8 -0
  14. package/dist/animations/AnimationSetup.js +30 -0
  15. package/dist/animations/SplitTextCache.d.ts +28 -0
  16. package/dist/animations/SplitTextCache.js +68 -0
  17. package/dist/animations/animationBuilder.d.ts +31 -0
  18. package/dist/animations/animationBuilder.js +255 -0
  19. package/dist/animations/animationPreset.d.ts +7 -0
  20. package/dist/animations/animationPreset.js +31 -0
  21. package/dist/animations/builders/AnimationPresetFactory.d.ts +43 -0
  22. package/dist/animations/builders/AnimationPresetFactory.js +139 -0
  23. package/dist/animations/builders/LineHighlighterAnimationBuilder.d.ts +16 -0
  24. package/dist/animations/builders/LineHighlighterAnimationBuilder.js +183 -0
  25. package/dist/animations/builders/WordHighlighterAnimationBuilder.d.ts +15 -0
  26. package/dist/animations/builders/WordHighlighterAnimationBuilder.js +180 -0
  27. package/dist/animations/engines/AnimationEngineAdaptor.d.ts +107 -0
  28. package/dist/animations/engines/AnimationEngineAdaptor.js +1 -0
  29. package/dist/animations/engines/GSAPEngineAdaptor.d.ts +21 -0
  30. package/dist/animations/engines/GSAPEngineAdaptor.js +145 -0
  31. package/dist/animations/presets/index.d.ts +2 -0
  32. package/dist/animations/presets/index.js +3 -0
  33. package/dist/animations/presets/lines.d.ts +52 -0
  34. package/dist/animations/presets/lines.js +547 -0
  35. package/dist/animations/presets/words.d.ts +31 -0
  36. package/dist/animations/presets/words.js +268 -0
  37. package/dist/animations/transformers/AnimationReferenceTransformer.d.ts +9 -0
  38. package/dist/animations/transformers/AnimationReferenceTransformer.js +114 -0
  39. package/dist/builders/PixiComponentBuilder.d.ts +63 -0
  40. package/dist/builders/PixiComponentBuilder.js +112 -0
  41. package/dist/builders/_ComponentState.svelte.d.ts +795 -0
  42. package/dist/builders/_ComponentState.svelte.js +203 -0
  43. package/dist/builders/html/HtmlBuilder.d.ts +66 -0
  44. package/dist/builders/html/HtmlBuilder.js +171 -0
  45. package/dist/builders/html/HtmlBuilderFactory.d.ts +27 -0
  46. package/dist/builders/html/HtmlBuilderFactory.js +30 -0
  47. package/dist/builders/html/StyleBuilder.d.ts +13 -0
  48. package/dist/builders/html/StyleBuilder.js +133 -0
  49. package/dist/builders/html/StyleProcessor.d.ts +9 -0
  50. package/dist/builders/html/StyleProcessor.js +1 -0
  51. package/dist/builders/html/TextComponentHtmlBuilder.d.ts +16 -0
  52. package/dist/builders/html/TextComponentHtmlBuilder.js +93 -0
  53. package/dist/builders/html/TextShadowBuilder.d.ts +60 -0
  54. package/dist/builders/html/TextShadowBuilder.js +227 -0
  55. package/dist/builders/html/processors/AppearanceStyleProcessor.d.ts +5 -0
  56. package/dist/builders/html/processors/AppearanceStyleProcessor.js +57 -0
  57. package/dist/builders/html/processors/TextAppearanceStyleProcessor.d.ts +5 -0
  58. package/dist/builders/html/processors/TextAppearanceStyleProcessor.js +37 -0
  59. package/dist/builders/html/processors/TextEffectsStyleProcessor.d.ts +6 -0
  60. package/dist/builders/html/processors/TextEffectsStyleProcessor.js +68 -0
  61. package/dist/commands/Command.d.ts +6 -0
  62. package/dist/commands/Command.js +1 -0
  63. package/dist/commands/CommandRunner.d.ts +28 -0
  64. package/dist/commands/CommandRunner.js +81 -0
  65. package/dist/commands/CommandTypes.d.ts +11 -0
  66. package/dist/commands/CommandTypes.js +13 -0
  67. package/dist/commands/PauseCommand.d.ts +4 -0
  68. package/dist/commands/PauseCommand.js +5 -0
  69. package/dist/commands/PlayCommand.d.ts +4 -0
  70. package/dist/commands/PlayCommand.js +6 -0
  71. package/dist/commands/RenderCommand.d.ts +15 -0
  72. package/dist/commands/RenderCommand.js +18 -0
  73. package/dist/commands/RenderFrameCommand.d.ts +17 -0
  74. package/dist/commands/RenderFrameCommand.js +93 -0
  75. package/dist/commands/ReplaceSourceOnTimeCommand.d.ts +4 -0
  76. package/dist/commands/ReplaceSourceOnTimeCommand.js +22 -0
  77. package/dist/commands/SeekCommand.d.ts +15 -0
  78. package/dist/commands/SeekCommand.js +39 -0
  79. package/dist/commands/UpdateComponentCommand.d.ts +4 -0
  80. package/dist/commands/UpdateComponentCommand.js +17 -0
  81. package/dist/components/AnimatedGIF.d.ts +201 -0
  82. package/dist/components/AnimatedGIF.js +391 -0
  83. package/dist/components/Component.svelte.d.ts +33 -0
  84. package/dist/components/Component.svelte.js +152 -0
  85. package/dist/components/ComponentContext.svelte.d.ts +33 -0
  86. package/dist/components/ComponentContext.svelte.js +105 -0
  87. package/dist/components/hooks/AnimationHook.d.ts +25 -0
  88. package/dist/components/hooks/AnimationHook.js +180 -0
  89. package/dist/components/hooks/CanvasShapeHook.d.ts +12 -0
  90. package/dist/components/hooks/CanvasShapeHook.js +229 -0
  91. package/dist/components/hooks/HtmlAnimationHook.d.ts +8 -0
  92. package/dist/components/hooks/HtmlAnimationHook.js +70 -0
  93. package/dist/components/hooks/HtmlTextHook.d.ts +16 -0
  94. package/dist/components/hooks/HtmlTextHook.js +102 -0
  95. package/dist/components/hooks/HtmlToCanvasHook.d.ts +16 -0
  96. package/dist/components/hooks/HtmlToCanvasHook.js +148 -0
  97. package/dist/components/hooks/ImageHook.d.ts +10 -0
  98. package/dist/components/hooks/ImageHook.js +45 -0
  99. package/dist/components/hooks/MediaHook.d.ts +15 -0
  100. package/dist/components/hooks/MediaHook.js +252 -0
  101. package/dist/components/hooks/MediaSeekingHook.d.ts +12 -0
  102. package/dist/components/hooks/MediaSeekingHook.js +204 -0
  103. package/dist/components/hooks/PixiDisplayObjectHook.d.ts +15 -0
  104. package/dist/components/hooks/PixiDisplayObjectHook.js +77 -0
  105. package/dist/components/hooks/PixiGifHook.d.ts +15 -0
  106. package/dist/components/hooks/PixiGifHook.js +97 -0
  107. package/dist/components/hooks/PixiProgressShapeHook.d.ts +12 -0
  108. package/dist/components/hooks/PixiProgressShapeHook.js +128 -0
  109. package/dist/components/hooks/PixiSplitScreenDisplayObjectHook.d.ts +21 -0
  110. package/dist/components/hooks/PixiSplitScreenDisplayObjectHook.js +210 -0
  111. package/dist/components/hooks/PixiTextureHook.d.ts +7 -0
  112. package/dist/components/hooks/PixiTextureHook.js +29 -0
  113. package/dist/components/hooks/PixiVideoTextureHook.d.ts +10 -0
  114. package/dist/components/hooks/PixiVideoTextureHook.js +35 -0
  115. package/dist/components/hooks/SubtitlesHook.d.ts +88 -0
  116. package/dist/components/hooks/SubtitlesHook.js +199 -0
  117. package/dist/components/hooks/VerifyGifHook.d.ts +7 -0
  118. package/dist/components/hooks/VerifyGifHook.js +27 -0
  119. package/dist/components/hooks/VerifyImageHook.d.ts +7 -0
  120. package/dist/components/hooks/VerifyImageHook.js +27 -0
  121. package/dist/components/hooks/VerifyMediaHook.d.ts +7 -0
  122. package/dist/components/hooks/VerifyMediaHook.js +21 -0
  123. package/dist/components/hooks/shapes/progress/CustomProgressRenderer.d.ts +8 -0
  124. package/dist/components/hooks/shapes/progress/CustomProgressRenderer.js +53 -0
  125. package/dist/components/hooks/shapes/progress/DoubleProgressRenderer.d.ts +8 -0
  126. package/dist/components/hooks/shapes/progress/DoubleProgressRenderer.js +69 -0
  127. package/dist/components/hooks/shapes/progress/LinearProgressRenderer.d.ts +8 -0
  128. package/dist/components/hooks/shapes/progress/LinearProgressRenderer.js +60 -0
  129. package/dist/components/hooks/shapes/progress/PerimeterProgressRenderer.d.ts +9 -0
  130. package/dist/components/hooks/shapes/progress/PerimeterProgressRenderer.js +213 -0
  131. package/dist/components/hooks/shapes/progress/ProgressRenderer.d.ts +17 -0
  132. package/dist/components/hooks/shapes/progress/ProgressRenderer.js +75 -0
  133. package/dist/components/hooks/shapes/progress/RadialProgressRenderer.d.ts +8 -0
  134. package/dist/components/hooks/shapes/progress/RadialProgressRenderer.js +50 -0
  135. package/dist/components/hooks/shapes/progress/index.d.ts +6 -0
  136. package/dist/components/hooks/shapes/progress/index.js +6 -0
  137. package/dist/composers/componentComposer.d.ts +55 -0
  138. package/dist/composers/componentComposer.js +118 -0
  139. package/dist/composers/layerComposer.d.ts +46 -0
  140. package/dist/composers/layerComposer.js +79 -0
  141. package/dist/composers/sceneComposer.d.ts +48 -0
  142. package/dist/composers/sceneComposer.js +92 -0
  143. package/dist/constants.d.ts +12 -0
  144. package/dist/constants.js +14 -0
  145. package/dist/directors/ComponentDirector.d.ts +20 -0
  146. package/dist/directors/ComponentDirector.js +86 -0
  147. package/dist/factories/SceneBuilderFactory.d.ts +15 -0
  148. package/dist/factories/SceneBuilderFactory.js +51 -0
  149. package/dist/fonts/GoogleFontsProvider.d.ts +12 -0
  150. package/dist/fonts/GoogleFontsProvider.js +125 -0
  151. package/dist/fonts/fontLoader.d.ts +15 -0
  152. package/dist/fonts/fontLoader.js +41 -0
  153. package/dist/fonts/types.d.ts +1 -0
  154. package/dist/fonts/types.js +1 -0
  155. package/dist/index.d.ts +11 -0
  156. package/dist/index.js +14 -0
  157. package/dist/layers/Layer.svelte.d.ts +8492 -0
  158. package/dist/layers/Layer.svelte.js +125 -0
  159. package/dist/managers/AppManager.svelte.d.ts +23 -0
  160. package/dist/managers/AppManager.svelte.js +89 -0
  161. package/dist/managers/ComponentsManager.svelte.d.ts +49 -0
  162. package/dist/managers/ComponentsManager.svelte.js +247 -0
  163. package/dist/managers/DomManager.d.ts +18 -0
  164. package/dist/managers/DomManager.js +73 -0
  165. package/dist/managers/EventManager.d.ts +7 -0
  166. package/dist/managers/EventManager.js +22 -0
  167. package/dist/managers/LayersManager.svelte.d.ts +8499 -0
  168. package/dist/managers/LayersManager.svelte.js +176 -0
  169. package/dist/managers/MediaManager.d.ts +32 -0
  170. package/dist/managers/MediaManager.js +243 -0
  171. package/dist/managers/RenderManager.d.ts +23 -0
  172. package/dist/managers/RenderManager.js +59 -0
  173. package/dist/managers/StateManager.svelte.d.ts +8746 -0
  174. package/dist/managers/StateManager.svelte.js +272 -0
  175. package/dist/managers/SubtitlesManager.svelte.d.ts +261 -0
  176. package/dist/managers/SubtitlesManager.svelte.js +1385 -0
  177. package/dist/managers/TimeManager.svelte.d.ts +6 -0
  178. package/dist/managers/TimeManager.svelte.js +18 -0
  179. package/dist/managers/TimelineManager.svelte.d.ts +25 -0
  180. package/dist/managers/TimelineManager.svelte.js +152 -0
  181. package/dist/registers.d.ts +12 -0
  182. package/dist/registers.js +29 -0
  183. package/dist/schemas/runtime/index.d.ts +3 -0
  184. package/dist/schemas/runtime/index.js +4 -0
  185. package/dist/schemas/runtime/types.d.ts +323 -0
  186. package/dist/schemas/runtime/types.js +12 -0
  187. package/dist/schemas/scene/animations.d.ts +89738 -0
  188. package/dist/schemas/scene/animations.js +211 -0
  189. package/dist/schemas/scene/components.js +515 -0
  190. package/dist/schemas/scene/core.js +160 -0
  191. package/dist/schemas/scene/index.d.ts +22 -0
  192. package/dist/schemas/scene/index.js +10 -0
  193. package/dist/schemas/scene/properties.d.ts +914 -0
  194. package/dist/schemas/scene/properties.js +398 -0
  195. package/dist/schemas/scene/subtitles.d.ts +1141 -0
  196. package/dist/schemas/scene/subtitles.js +111 -0
  197. package/dist/schemas/scene/utils.d.ts +1 -0
  198. package/dist/schemas/scene/utils.js +5 -0
  199. package/dist/seeds/SeedFactory.d.ts +59 -0
  200. package/dist/seeds/SeedFactory.js +99 -0
  201. package/dist/seeds/index.d.ts +8 -0
  202. package/dist/seeds/index.js +8 -0
  203. package/dist/transformers/ColorTransformer.d.ts +5 -0
  204. package/dist/transformers/ColorTransformer.js +67 -0
  205. package/dist/transformers/PixiColorTransformer.d.ts +22 -0
  206. package/dist/transformers/PixiColorTransformer.js +104 -0
  207. package/dist/utils/canvas.d.ts +6 -0
  208. package/dist/utils/canvas.js +18 -0
  209. package/dist/utils/document.d.ts +2 -0
  210. package/dist/utils/document.js +36 -0
  211. package/dist/utils/emoji.d.ts +10 -0
  212. package/dist/utils/emoji.js +51 -0
  213. package/dist/utils/html.d.ts +4 -0
  214. package/dist/utils/html.js +45 -0
  215. package/dist/utils/svgGenerator.d.ts +20 -0
  216. package/dist/utils/svgGenerator.js +103 -0
  217. package/dist/utils/utils.d.ts +5 -0
  218. package/dist/utils/utils.js +125 -0
  219. package/package.json +96 -0
@@ -0,0 +1,55 @@
1
+ import { type Component, type ComponentInput, type AnimationInput, type AppearanceInput } from '..';
2
+ import type { ComponentEffect, ComponentSourceInput } from '..';
3
+ /**
4
+ * A fluent composer for a single Component object.
5
+ */
6
+ declare class ComponentComposer {
7
+ private readonly _component;
8
+ constructor(id: string, type: ComponentInput['type'], timeline: ComponentInput['timeline']);
9
+ /**
10
+ * Deeply merges new appearance settings into the existing ones using lodash.
11
+ * Allows for updating nested properties like `text.color` without overwriting the whole `text` object.
12
+ * @param appearance A partial object of appearance settings to merge.
13
+ * @returns The ComponentComposer instance for further chaining.
14
+ */
15
+ setAppearance(appearance: Partial<AppearanceInput>): this;
16
+ setText(text: string): this;
17
+ setSource(source: Partial<ComponentSourceInput>): this;
18
+ /**
19
+ * Adds an animation to the component's animation list.
20
+ * @param animation The animation object to add.
21
+ * @returns The ComponentComposer instance for further chaining.
22
+ */
23
+ addAnimation(animation: AnimationInput): this;
24
+ /**
25
+ * Adds an effect to the component's effects map.
26
+ * @param key A unique key for the effect (e.g., "mainBlur", "layoutSplit").
27
+ * @param effect The effect object.
28
+ * @returns The ComponentComposer instance for further chaining.
29
+ */
30
+ addEffect(key: string, effect: ComponentEffect): this;
31
+ /**
32
+ * Sets extra properties on the component (e.g., `text`, `source`, `shape`).
33
+ * @param props A partial object of component properties to merge.
34
+ * @returns The ComponentComposer instance for further chaining.
35
+ */
36
+ setProps(props: Partial<ComponentInput>): this;
37
+ setName(name: string): this;
38
+ setOrder(order: number): this;
39
+ setVisible(visible: boolean): this;
40
+ /**
41
+ * Validates and finalizes the component object.
42
+ * @returns A fully formed and validated Component object.
43
+ */
44
+ compose(): Component;
45
+ safeCompose(): Component | undefined;
46
+ }
47
+ /**
48
+ * Factory function to create a new ComponentComposer.
49
+ * @param id The component's unique ID.
50
+ * @param type The component's type (e.g., 'TEXT', 'IMAGE').
51
+ * @param timeline The component's timeline.
52
+ * @returns A new instance of ComponentComposer.
53
+ */
54
+ export declare function createComponentComposer(id: string, type: ComponentInput['type'], timeline: ComponentInput['timeline']): ComponentComposer;
55
+ export {};
@@ -0,0 +1,118 @@
1
+ import { merge } from 'lodash-es';
2
+ import { ComponentShape } from '..';
3
+ /**
4
+ * A fluent composer for a single Component object.
5
+ */
6
+ class ComponentComposer {
7
+ _component;
8
+ constructor(id, type, timeline) {
9
+ this._component = {
10
+ id,
11
+ type,
12
+ timeline,
13
+ name: type.charAt(0).toUpperCase() + type.slice(1).toLowerCase(),
14
+ // Appearance is initialized as an empty object and built up
15
+ appearance: {}
16
+ };
17
+ }
18
+ /**
19
+ * Deeply merges new appearance settings into the existing ones using lodash.
20
+ * Allows for updating nested properties like `text.color` without overwriting the whole `text` object.
21
+ * @param appearance A partial object of appearance settings to merge.
22
+ * @returns The ComponentComposer instance for further chaining.
23
+ */
24
+ setAppearance(appearance) {
25
+ // Use lodash's merge for a robust deep merge.
26
+ // It mutates the first argument, which is exactly what we want here.
27
+ merge(this._component.appearance, appearance);
28
+ return this;
29
+ }
30
+ setText(text) {
31
+ if (this._component.type === 'TEXT') {
32
+ this._component.text = text;
33
+ }
34
+ return this;
35
+ }
36
+ setSource(source) {
37
+ if (this._component.type === 'IMAGE' ||
38
+ this._component.type === 'GIF' ||
39
+ this._component.type === 'VIDEO' ||
40
+ this._component.type === 'SUBTITLES') {
41
+ this._component.source = source;
42
+ }
43
+ return this;
44
+ }
45
+ /**
46
+ * Adds an animation to the component's animation list.
47
+ * @param animation The animation object to add.
48
+ * @returns The ComponentComposer instance for further chaining.
49
+ */
50
+ addAnimation(animation) {
51
+ if (!this._component.animations)
52
+ this._component.animations = { enabled: true, list: [] };
53
+ if (!this._component.animations.list)
54
+ this._component.animations.list = [];
55
+ this._component.animations.list.push(animation);
56
+ return this;
57
+ }
58
+ /**
59
+ * Adds an effect to the component's effects map.
60
+ * @param key A unique key for the effect (e.g., "mainBlur", "layoutSplit").
61
+ * @param effect The effect object.
62
+ * @returns The ComponentComposer instance for further chaining.
63
+ */
64
+ addEffect(key, effect) {
65
+ if (!this._component.effects)
66
+ this._component.effects = { enabled: true, map: {} };
67
+ if (!this._component.effects.map)
68
+ this._component.effects.map = {};
69
+ this._component.effects.map[key] = effect;
70
+ return this;
71
+ }
72
+ /**
73
+ * Sets extra properties on the component (e.g., `text`, `source`, `shape`).
74
+ * @param props A partial object of component properties to merge.
75
+ * @returns The ComponentComposer instance for further chaining.
76
+ */
77
+ setProps(props) {
78
+ Object.assign(this._component, props);
79
+ return this;
80
+ }
81
+ setName(name) {
82
+ this._component.name = name;
83
+ return this;
84
+ }
85
+ setOrder(order) {
86
+ this._component.order = order;
87
+ return this;
88
+ }
89
+ setVisible(visible) {
90
+ this._component.visible = visible;
91
+ return this;
92
+ }
93
+ /**
94
+ * Validates and finalizes the component object.
95
+ * @returns A fully formed and validated Component object.
96
+ */
97
+ compose() {
98
+ return ComponentShape.parse(this._component);
99
+ }
100
+ safeCompose() {
101
+ const resp = ComponentShape.safeParse(this._component);
102
+ if (!resp.success) {
103
+ console.error('Invalid component input:', resp.error.format());
104
+ return undefined;
105
+ }
106
+ return resp.data;
107
+ }
108
+ }
109
+ /**
110
+ * Factory function to create a new ComponentComposer.
111
+ * @param id The component's unique ID.
112
+ * @param type The component's type (e.g., 'TEXT', 'IMAGE').
113
+ * @param timeline The component's timeline.
114
+ * @returns A new instance of ComponentComposer.
115
+ */
116
+ export function createComponentComposer(id, type, timeline) {
117
+ return new ComponentComposer(id, type, timeline);
118
+ }
@@ -0,0 +1,46 @@
1
+ import { type SceneLayer, type Component } from '..';
2
+ /**
3
+ * A fluent composer for a single SceneLayer object.
4
+ */
5
+ declare class LayerComposer {
6
+ private readonly _layer;
7
+ constructor(id: string);
8
+ /**
9
+ * Adds a pre-composed component to the layer.
10
+ * @param component The final component object, typically from `componentComposer.compose()`.
11
+ * @returns The LayerComposer instance for further chaining.
12
+ */
13
+ addComponent(component: Component): this;
14
+ /**
15
+ * Sets the visibility of the layer.
16
+ * @param isVisible Whether the layer should be visible.
17
+ * @returns The LayerComposer instance for further chaining.
18
+ */
19
+ setVisible(isVisible: boolean): this;
20
+ /**
21
+ * Sets the stacking order of the layer. Higher numbers are on top.
22
+ * @param order The numerical order.
23
+ * @returns The LayerComposer instance for further chaining.
24
+ */
25
+ setOrder(order: number): this;
26
+ /**
27
+ * Sets the name of the layer.
28
+ * @param name The desired name.
29
+ * @returns The LayerComposer instance for further chaining.
30
+ */
31
+ setName(name: string): this;
32
+ setMuted(muted: boolean): this;
33
+ /**
34
+ * Validates and finalizes the layer object.
35
+ * @returns A fully formed and validated SceneLayer object.
36
+ */
37
+ compose(): SceneLayer;
38
+ safeCompose(): SceneLayer | undefined;
39
+ }
40
+ /**
41
+ * Factory function to create a new LayerComposer.
42
+ * @param id The layer's unique ID.
43
+ * @returns A new instance of LayerComposer.
44
+ */
45
+ export declare function createLayerComposer(id: string): LayerComposer;
46
+ export {};
@@ -0,0 +1,79 @@
1
+ import { SceneLayerShape } from '..'; // Adjust path as needed
2
+ /**
3
+ * A fluent composer for a single SceneLayer object.
4
+ */
5
+ class LayerComposer {
6
+ _layer;
7
+ constructor(id) {
8
+ this._layer = {
9
+ id,
10
+ components: []
11
+ };
12
+ }
13
+ /**
14
+ * Adds a pre-composed component to the layer.
15
+ * @param component The final component object, typically from `componentComposer.compose()`.
16
+ * @returns The LayerComposer instance for further chaining.
17
+ */
18
+ addComponent(component) {
19
+ if (!this._layer.components) {
20
+ this._layer.components = [];
21
+ }
22
+ this._layer.components.push(component);
23
+ return this;
24
+ }
25
+ /**
26
+ * Sets the visibility of the layer.
27
+ * @param isVisible Whether the layer should be visible.
28
+ * @returns The LayerComposer instance for further chaining.
29
+ */
30
+ setVisible(isVisible) {
31
+ this._layer.visible = isVisible;
32
+ return this;
33
+ }
34
+ /**
35
+ * Sets the stacking order of the layer. Higher numbers are on top.
36
+ * @param order The numerical order.
37
+ * @returns The LayerComposer instance for further chaining.
38
+ */
39
+ setOrder(order) {
40
+ this._layer.order = order;
41
+ return this;
42
+ }
43
+ /**
44
+ * Sets the name of the layer.
45
+ * @param name The desired name.
46
+ * @returns The LayerComposer instance for further chaining.
47
+ */
48
+ setName(name) {
49
+ this._layer.name = name;
50
+ return this;
51
+ }
52
+ setMuted(muted) {
53
+ this._layer.muted = muted;
54
+ return this;
55
+ }
56
+ /**
57
+ * Validates and finalizes the layer object.
58
+ * @returns A fully formed and validated SceneLayer object.
59
+ */
60
+ compose() {
61
+ return SceneLayerShape.parse(this._layer);
62
+ }
63
+ safeCompose() {
64
+ const resp = SceneLayerShape.safeParse(this._layer);
65
+ if (!resp.success) {
66
+ console.error('Invalid layer input:', resp.error.format());
67
+ return undefined;
68
+ }
69
+ return resp.data;
70
+ }
71
+ }
72
+ /**
73
+ * Factory function to create a new LayerComposer.
74
+ * @param id The layer's unique ID.
75
+ * @returns A new instance of LayerComposer.
76
+ */
77
+ export function createLayerComposer(id) {
78
+ return new LayerComposer(id);
79
+ }
@@ -0,0 +1,48 @@
1
+ import { type Scene, type SceneSettingsInput, type SceneLayer, type SceneAssetInput, type AudioTrackInput, type SceneSubtitlesSettings } from '..';
2
+ /**
3
+ * A fluent, composable builder for creating a valid Scene object.
4
+ */
5
+ declare class SceneComposer {
6
+ private _scene;
7
+ constructor(id: string, settings: SceneSettingsInput);
8
+ /**
9
+ * Merges new settings into the existing scene settings.
10
+ * @param settings A partial object of scene settings to update.
11
+ * @returns The SceneComposer instance for further chaining.
12
+ */
13
+ setSettings(settings: Partial<SceneSettingsInput>): this;
14
+ setName(name: string): this;
15
+ setSubtitles(subtitles: SceneSubtitlesSettings): this;
16
+ /**
17
+ * Adds a pre-composed layer to the scene.
18
+ * @param layer The final layer object, from `layerComposer.compose()`.
19
+ * @returns The SceneComposer instance for further chaining.
20
+ */
21
+ addLayer(layer: SceneLayer): this;
22
+ /**
23
+ * Adds an asset to the scene's asset registry.
24
+ * @param asset The asset object to add.
25
+ * @returns The SceneComposer instance for further chaining.
26
+ */
27
+ addAsset(asset: SceneAssetInput): this;
28
+ /**
29
+ * Adds a global audio track to the scene.
30
+ * @param audioTrack The audio track object to add.
31
+ * @returns The SceneComposer instance for further chaining.
32
+ */
33
+ addAudioTrack(audioTrack: AudioTrackInput): this;
34
+ /**
35
+ * Validates and finalizes the entire scene object.
36
+ * @returns A fully formed and validated Scene object.
37
+ */
38
+ compose(): Scene;
39
+ safeCompose(): Scene | undefined;
40
+ }
41
+ /**
42
+ * Factory function to create a new SceneComposer.
43
+ * @param id The scene's unique ID.
44
+ * @param settings The initial scene settings.
45
+ * @returns A new instance of SceneComposer.
46
+ */
47
+ export declare function createSceneComposer(id: string, settings: SceneSettingsInput): SceneComposer;
48
+ export {};
@@ -0,0 +1,92 @@
1
+ import { SceneShape } from '..'; // Adjust path as needed
2
+ /**
3
+ * A fluent, composable builder for creating a valid Scene object.
4
+ */
5
+ class SceneComposer {
6
+ _scene;
7
+ constructor(id, settings) {
8
+ this._scene = {
9
+ id,
10
+ settings,
11
+ layers: [],
12
+ };
13
+ }
14
+ /**
15
+ * Merges new settings into the existing scene settings.
16
+ * @param settings A partial object of scene settings to update.
17
+ * @returns The SceneComposer instance for further chaining.
18
+ */
19
+ setSettings(settings) {
20
+ // Perform a shallow merge to update settings
21
+ this._scene.settings = { ...this._scene.settings, ...settings };
22
+ return this;
23
+ }
24
+ setName(name) {
25
+ this._scene.name = name;
26
+ return this;
27
+ }
28
+ setSubtitles(subtitles) {
29
+ this._scene.settings.subtitles = subtitles;
30
+ return this;
31
+ }
32
+ /**
33
+ * Adds a pre-composed layer to the scene.
34
+ * @param layer The final layer object, from `layerComposer.compose()`.
35
+ * @returns The SceneComposer instance for further chaining.
36
+ */
37
+ addLayer(layer) {
38
+ if (!this._scene.layers) {
39
+ this._scene.layers = [];
40
+ }
41
+ this._scene.layers.push(layer);
42
+ return this;
43
+ }
44
+ /**
45
+ * Adds an asset to the scene's asset registry.
46
+ * @param asset The asset object to add.
47
+ * @returns The SceneComposer instance for further chaining.
48
+ */
49
+ addAsset(asset) {
50
+ if (!this._scene.assets) {
51
+ this._scene.assets = [];
52
+ }
53
+ this._scene.assets.push(asset);
54
+ return this;
55
+ }
56
+ /**
57
+ * Adds a global audio track to the scene.
58
+ * @param audioTrack The audio track object to add.
59
+ * @returns The SceneComposer instance for further chaining.
60
+ */
61
+ addAudioTrack(audioTrack) {
62
+ if (!this._scene.audioTracks) {
63
+ this._scene.audioTracks = [];
64
+ }
65
+ this._scene.audioTracks.push(audioTrack);
66
+ return this;
67
+ }
68
+ /**
69
+ * Validates and finalizes the entire scene object.
70
+ * @returns A fully formed and validated Scene object.
71
+ */
72
+ compose() {
73
+ return SceneShape.parse(this._scene);
74
+ }
75
+ safeCompose() {
76
+ const resp = SceneShape.safeParse(this._scene);
77
+ if (!resp.success) {
78
+ console.error('Invalid scene input:', resp.error.format());
79
+ return undefined;
80
+ }
81
+ return resp.data;
82
+ }
83
+ }
84
+ /**
85
+ * Factory function to create a new SceneComposer.
86
+ * @param id The scene's unique ID.
87
+ * @param settings The initial scene settings.
88
+ * @returns A new instance of SceneComposer.
89
+ */
90
+ export function createSceneComposer(id, settings) {
91
+ return new SceneComposer(id, settings);
92
+ }
@@ -0,0 +1,12 @@
1
+ export declare const PIXI_DEFAULTS: {
2
+ eventMode: "none";
3
+ autoStart: boolean;
4
+ backgroundAlpha: number;
5
+ eventFeatures: {
6
+ move: boolean;
7
+ /** disables the global move events which can be expensive in large scenes */
8
+ globalMove: boolean;
9
+ click: boolean;
10
+ wheel: boolean;
11
+ };
12
+ };
@@ -0,0 +1,14 @@
1
+ export const PIXI_DEFAULTS = {
2
+ // preference: "webgl" as const, // webgpu
3
+ eventMode: 'none',
4
+ autoStart: false,
5
+ backgroundAlpha: 0,
6
+ // antialias: false,
7
+ eventFeatures: {
8
+ move: false,
9
+ /** disables the global move events which can be expensive in large scenes */
10
+ globalMove: false,
11
+ click: false,
12
+ wheel: false
13
+ }
14
+ };
@@ -0,0 +1,20 @@
1
+ import type { IComponentBuilder, ComponentData } from '..';
2
+ import { StateManager } from '../managers/StateManager.svelte.js';
3
+ export declare class ComponentDirector {
4
+ private builder;
5
+ private data;
6
+ private sceneState;
7
+ constructor(cradle: {
8
+ stateManager: StateManager;
9
+ });
10
+ setBuilder(builder: IComponentBuilder): void;
11
+ setComponentData(data: ComponentData): void;
12
+ constructAuto(): import("..").IComponent;
13
+ constructVideo(): import("..").IComponent;
14
+ constructAudio(): import("..").IComponent;
15
+ constructImage(): import("..").IComponent;
16
+ constructGif(): import("..").IComponent;
17
+ constructShape(): import("..").IComponent;
18
+ constructSubtitle(): import("..").IComponent;
19
+ constructText(): import("..").IComponent;
20
+ }
@@ -0,0 +1,86 @@
1
+ import { StateManager } from '../managers/StateManager.svelte.js';
2
+ export class ComponentDirector {
3
+ builder;
4
+ data;
5
+ sceneState;
6
+ constructor(cradle) {
7
+ this.sceneState = cradle.stateManager;
8
+ }
9
+ setBuilder(builder) {
10
+ this.builder = builder;
11
+ }
12
+ setComponentData(data) {
13
+ this.data = data;
14
+ }
15
+ constructAuto() {
16
+ switch (this.data.type) {
17
+ case 'VIDEO':
18
+ return this.constructVideo();
19
+ case 'AUDIO':
20
+ return this.constructAudio();
21
+ case 'IMAGE':
22
+ return this.constructImage();
23
+ case 'GIF':
24
+ return this.constructGif();
25
+ case 'SHAPE':
26
+ return this.constructShape();
27
+ case 'SUBTITLES':
28
+ return this.constructSubtitle();
29
+ case 'TEXT':
30
+ return this.constructText();
31
+ case 'COLOR':
32
+ case 'GRADIENT':
33
+ return this.builder.getComponent();
34
+ default:
35
+ throw new Error(`Unsupported component type`);
36
+ }
37
+ }
38
+ constructVideo() {
39
+ this.builder.withMedia().withMediaSeeking();
40
+ // if (this.sceneState.environment === 'server') {
41
+ // this.builder.withMediaSeeking();
42
+ // }
43
+ this.builder.withVideoTexture().withSplitScreen();
44
+ return this.builder.getComponent();
45
+ }
46
+ constructAudio() {
47
+ this.builder.withMedia();
48
+ return this.builder.getComponent();
49
+ }
50
+ constructImage() {
51
+ this.builder.withImage().withTexture().withDisplayObject();
52
+ return this.builder.getComponent();
53
+ }
54
+ constructGif() {
55
+ this.builder.withGif(); //.withDisplayObject();
56
+ return this.builder.getComponent();
57
+ }
58
+ constructShape() {
59
+ // Check if this is a progress shape to use the appropriate hook
60
+ const shapeData = this.data;
61
+ if (shapeData.shape?.type === 'progress') {
62
+ // Progress shapes use GPU-based PIXI Graphics rendering
63
+ // Still need DisplayObjectHook to add the progress display object to the stage
64
+ this.builder.withProgressShape().withDisplayObject();
65
+ }
66
+ else {
67
+ // Regular shapes use canvas-based rendering
68
+ this.builder.withCanvasShape().withTexture().withDisplayObject();
69
+ }
70
+ return this.builder.getComponent();
71
+ }
72
+ constructSubtitle() {
73
+ this.builder.withSubtitles().withHtmlText().withAnimation();
74
+ if (this.sceneState.environment === 'server') {
75
+ this.builder.withHtmlToCanvasHook();
76
+ }
77
+ return this.builder.getComponent();
78
+ }
79
+ constructText() {
80
+ this.builder.withHtmlText().withAnimation();
81
+ if (this.sceneState.environment === 'server') {
82
+ this.builder.withHtmlToCanvasHook();
83
+ }
84
+ return this.builder.getComponent();
85
+ }
86
+ }
@@ -0,0 +1,15 @@
1
+ import type { Scene, RenderEnvironment, Subtitle, FontType, SubtitleCollection } from '..';
2
+ import { SceneBuilder } from '../SceneBuilder.svelte.js';
3
+ import type { FontProvider } from '../fonts/types.js';
4
+ type Config = {
5
+ environment: RenderEnvironment;
6
+ subtitles: Record<string, Subtitle[]> | Record<string, SubtitleCollection>;
7
+ fonts: FontType[];
8
+ forceCanvas: boolean;
9
+ scale: number;
10
+ autoPlay?: boolean;
11
+ loop?: boolean;
12
+ fontProviders?: FontProvider[];
13
+ };
14
+ export declare const createSceneBuilder: (sceneData: Scene, container: HTMLDivElement, config?: Partial<Config>) => Promise<SceneBuilder>;
15
+ export {};
@@ -0,0 +1,51 @@
1
+ import { asClass, Lifetime } from 'awilix/browser';
2
+ import { registerNewContainer } from '../DIContainer.js';
3
+ import { SceneBuilder } from '../SceneBuilder.svelte.js';
4
+ import { get } from 'lodash-es';
5
+ import { setFontProviders } from '../fonts/fontLoader.js';
6
+ class SceneBuilderFactory {
7
+ scene;
8
+ constructor(cradle) {
9
+ this.scene = cradle.sceneBuilder;
10
+ }
11
+ getInstance() {
12
+ return this.scene;
13
+ }
14
+ }
15
+ const defaultConfig = {
16
+ environment: 'client',
17
+ subtitles: {},
18
+ fonts: [],
19
+ forceCanvas: false,
20
+ scale: 1,
21
+ autoPlay: false,
22
+ loop: false
23
+ };
24
+ export const createSceneBuilder = async function (sceneData, container, config) {
25
+ setFontProviders(config?.fontProviders);
26
+ const sceneConfig = config ? { ...defaultConfig, ...config } : defaultConfig;
27
+ const sceneSubs = get(sceneData, 'settings.subtitles.data', null);
28
+ const subs = sceneSubs ? sceneSubs : sceneConfig.subtitles;
29
+ const childContainer = registerNewContainer(sceneData, [
30
+ ['environment', sceneConfig.environment],
31
+ ['containerElement', container],
32
+ ['subtitles', subs],
33
+ ['fonts', sceneConfig.fonts],
34
+ ['forceCanvas', sceneConfig.forceCanvas],
35
+ ['scale', sceneConfig.scale],
36
+ ['autoPlay', sceneConfig.autoPlay],
37
+ ['loop', sceneConfig.loop]
38
+ ]);
39
+ // Register the factory
40
+ childContainer.register({
41
+ sceneBuilderFactory: asClass(SceneBuilderFactory, { lifetime: Lifetime.SINGLETON })
42
+ });
43
+ const factory = childContainer.resolve('sceneBuilderFactory');
44
+ const instance = factory.getInstance();
45
+ instance.buildCharactersList();
46
+ await instance.initialize();
47
+ if (sceneConfig.autoPlay) {
48
+ instance.play();
49
+ }
50
+ return instance;
51
+ };
@@ -0,0 +1,12 @@
1
+ import type { FontProvider } from './types.js';
2
+ /**
3
+ * Creates a browser-only font provider for Google Fonts.
4
+ *
5
+ * This provider fetches fonts in the woff2 format, as it cannot
6
+ * set the User-Agent header to request TTF files. For environments
7
+ * that strictly require TTF (like server-side rendering with some libraries),
8
+ * a custom server-backed provider is necessary.
9
+ *
10
+ * @returns A FontProvider function with its own internal cache.
11
+ */
12
+ export declare const createGoogleFontsProvider: () => FontProvider;