@stevejtrettel/shader-sandbox 0.1.2 → 0.1.4

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 (113) hide show
  1. package/README.md +259 -235
  2. package/bin/cli.js +106 -14
  3. package/dist-lib/app/App.d.ts +143 -15
  4. package/dist-lib/app/App.d.ts.map +1 -1
  5. package/dist-lib/app/App.js +1343 -108
  6. package/dist-lib/app/app.css +349 -24
  7. package/dist-lib/app/types.d.ts +48 -5
  8. package/dist-lib/app/types.d.ts.map +1 -1
  9. package/dist-lib/editor/EditorPanel.d.ts +2 -2
  10. package/dist-lib/editor/EditorPanel.d.ts.map +1 -1
  11. package/dist-lib/editor/EditorPanel.js +1 -1
  12. package/dist-lib/editor/editor-panel.css +55 -32
  13. package/dist-lib/editor/prism-editor.css +16 -16
  14. package/dist-lib/embed.js +1 -1
  15. package/dist-lib/engine/{ShadertoyEngine.d.ts → ShaderEngine.d.ts} +134 -10
  16. package/dist-lib/engine/ShaderEngine.d.ts.map +1 -0
  17. package/dist-lib/engine/ShaderEngine.js +1523 -0
  18. package/dist-lib/engine/glHelpers.d.ts +24 -0
  19. package/dist-lib/engine/glHelpers.d.ts.map +1 -1
  20. package/dist-lib/engine/glHelpers.js +88 -0
  21. package/dist-lib/engine/std140.d.ts +47 -0
  22. package/dist-lib/engine/std140.d.ts.map +1 -0
  23. package/dist-lib/engine/std140.js +119 -0
  24. package/dist-lib/engine/types.d.ts +55 -5
  25. package/dist-lib/engine/types.d.ts.map +1 -1
  26. package/dist-lib/engine/types.js +1 -1
  27. package/dist-lib/index.d.ts +4 -3
  28. package/dist-lib/index.d.ts.map +1 -1
  29. package/dist-lib/index.js +2 -1
  30. package/dist-lib/layouts/SplitLayout.d.ts +2 -1
  31. package/dist-lib/layouts/SplitLayout.d.ts.map +1 -1
  32. package/dist-lib/layouts/SplitLayout.js +3 -0
  33. package/dist-lib/layouts/TabbedLayout.d.ts.map +1 -1
  34. package/dist-lib/layouts/UILayout.d.ts +55 -0
  35. package/dist-lib/layouts/UILayout.d.ts.map +1 -0
  36. package/dist-lib/layouts/UILayout.js +147 -0
  37. package/dist-lib/layouts/default.css +2 -2
  38. package/dist-lib/layouts/index.d.ts +11 -1
  39. package/dist-lib/layouts/index.d.ts.map +1 -1
  40. package/dist-lib/layouts/index.js +17 -1
  41. package/dist-lib/layouts/split.css +33 -31
  42. package/dist-lib/layouts/tabbed.css +127 -74
  43. package/dist-lib/layouts/types.d.ts +14 -3
  44. package/dist-lib/layouts/types.d.ts.map +1 -1
  45. package/dist-lib/main.js +33 -0
  46. package/dist-lib/project/configHelpers.d.ts +45 -0
  47. package/dist-lib/project/configHelpers.d.ts.map +1 -0
  48. package/dist-lib/project/configHelpers.js +196 -0
  49. package/dist-lib/project/generatedLoader.d.ts +2 -2
  50. package/dist-lib/project/generatedLoader.d.ts.map +1 -1
  51. package/dist-lib/project/generatedLoader.js +23 -5
  52. package/dist-lib/project/loadProject.d.ts +6 -6
  53. package/dist-lib/project/loadProject.d.ts.map +1 -1
  54. package/dist-lib/project/loadProject.js +396 -144
  55. package/dist-lib/project/loaderHelper.d.ts +4 -4
  56. package/dist-lib/project/loaderHelper.d.ts.map +1 -1
  57. package/dist-lib/project/loaderHelper.js +278 -116
  58. package/dist-lib/project/types.d.ts +292 -13
  59. package/dist-lib/project/types.d.ts.map +1 -1
  60. package/dist-lib/project/types.js +13 -1
  61. package/dist-lib/styles/base.css +5 -1
  62. package/dist-lib/uniforms/UniformControls.d.ts +60 -0
  63. package/dist-lib/uniforms/UniformControls.d.ts.map +1 -0
  64. package/dist-lib/uniforms/UniformControls.js +518 -0
  65. package/dist-lib/uniforms/UniformStore.d.ts +74 -0
  66. package/dist-lib/uniforms/UniformStore.d.ts.map +1 -0
  67. package/dist-lib/uniforms/UniformStore.js +145 -0
  68. package/dist-lib/uniforms/UniformsPanel.d.ts +53 -0
  69. package/dist-lib/uniforms/UniformsPanel.d.ts.map +1 -0
  70. package/dist-lib/uniforms/UniformsPanel.js +124 -0
  71. package/dist-lib/uniforms/index.d.ts +11 -0
  72. package/dist-lib/uniforms/index.d.ts.map +1 -0
  73. package/dist-lib/uniforms/index.js +8 -0
  74. package/package.json +16 -1
  75. package/src/app/App.ts +1469 -126
  76. package/src/app/app.css +349 -24
  77. package/src/app/types.ts +53 -5
  78. package/src/editor/EditorPanel.ts +5 -5
  79. package/src/editor/editor-panel.css +55 -32
  80. package/src/editor/prism-editor.css +16 -16
  81. package/src/embed.ts +1 -1
  82. package/src/engine/ShaderEngine.ts +1934 -0
  83. package/src/engine/glHelpers.ts +117 -0
  84. package/src/engine/std140.ts +136 -0
  85. package/src/engine/types.ts +69 -5
  86. package/src/index.ts +4 -3
  87. package/src/layouts/SplitLayout.ts +8 -3
  88. package/src/layouts/TabbedLayout.ts +3 -3
  89. package/src/layouts/UILayout.ts +185 -0
  90. package/src/layouts/default.css +2 -2
  91. package/src/layouts/index.ts +20 -1
  92. package/src/layouts/split.css +33 -31
  93. package/src/layouts/tabbed.css +127 -74
  94. package/src/layouts/types.ts +19 -3
  95. package/src/layouts/ui.css +289 -0
  96. package/src/main.ts +39 -1
  97. package/src/project/configHelpers.ts +225 -0
  98. package/src/project/generatedLoader.ts +27 -6
  99. package/src/project/loadProject.ts +459 -173
  100. package/src/project/loaderHelper.ts +377 -130
  101. package/src/project/types.ts +360 -14
  102. package/src/styles/base.css +5 -1
  103. package/src/styles/theme.css +292 -0
  104. package/src/uniforms/UniformControls.ts +660 -0
  105. package/src/uniforms/UniformStore.ts +166 -0
  106. package/src/uniforms/UniformsPanel.ts +163 -0
  107. package/src/uniforms/index.ts +13 -0
  108. package/src/uniforms/uniform-controls.css +342 -0
  109. package/src/uniforms/uniforms-panel.css +277 -0
  110. package/templates/shaders/example-buffer/config.json +1 -0
  111. package/dist-lib/engine/ShadertoyEngine.d.ts.map +0 -1
  112. package/dist-lib/engine/ShadertoyEngine.js +0 -704
  113. package/src/engine/ShadertoyEngine.ts +0 -929
package/bin/cli.js CHANGED
@@ -63,24 +63,41 @@ function copyDir(src, dest, skipFiles = []) {
63
63
  }
64
64
  }
65
65
 
66
- function listShaders(cwd) {
66
+ function getShaderList(cwd) {
67
67
  const shadersDir = path.join(cwd, 'shaders');
68
68
  if (!fs.existsSync(shadersDir)) {
69
- console.error('Error: shaders/ directory not found');
70
- console.error('Run "shader init" first');
71
- process.exit(1);
69
+ return null;
72
70
  }
73
71
 
74
72
  const entries = fs.readdirSync(shadersDir, { withFileTypes: true });
75
- const shaders = entries.filter(e => e.isDirectory()).map(e => e.name);
73
+ return entries.filter(e => e.isDirectory()).map(e => e.name);
74
+ }
75
+
76
+ function listShaders(cwd) {
77
+ const shaders = getShaderList(cwd);
78
+
79
+ if (shaders === null) {
80
+ console.error('Error: shaders/ directory not found');
81
+ console.error('');
82
+ console.error('To get started:');
83
+ console.error(' shader init Initialize shaders in current directory');
84
+ console.error(' shader create Create a new shader project');
85
+ process.exit(1);
86
+ }
76
87
 
77
88
  if (shaders.length === 0) {
78
- console.log('No shaders found. Run "shader new <name>" to create one.');
89
+ console.log('No shaders found.');
90
+ console.log('');
91
+ console.log('Create your first shader:');
92
+ console.log(' shader new my-shader');
79
93
  return;
80
94
  }
81
95
 
82
96
  console.log('Available shaders:');
83
97
  shaders.forEach(s => console.log(` ${s}`));
98
+ console.log('');
99
+ console.log('Run a shader:');
100
+ console.log(` shader dev ${shaders[0]}`);
84
101
  }
85
102
 
86
103
  async function create(projectName) {
@@ -328,18 +345,61 @@ switch (command) {
328
345
 
329
346
  case 'dev': {
330
347
  const shaderName = args[1];
348
+ const cwd = process.cwd();
349
+
331
350
  if (!shaderName) {
332
- console.error('Error: Specify a shader name');
333
- console.error(' shader dev <shader-name>');
334
- console.error(' shader list');
351
+ const shaders = getShaderList(cwd);
352
+
353
+ if (shaders === null) {
354
+ console.error('Error: shaders/ directory not found');
355
+ console.error('');
356
+ console.error('To get started:');
357
+ console.error(' shader init Initialize shaders in current directory');
358
+ console.error(' shader create Create a new shader project');
359
+ process.exit(1);
360
+ }
361
+
362
+ if (shaders.length === 0) {
363
+ console.error('Error: No shaders found');
364
+ console.error('');
365
+ console.error('Create your first shader:');
366
+ console.error(' shader new my-shader');
367
+ process.exit(1);
368
+ }
369
+
370
+ console.error('Error: Specify which shader to run');
371
+ console.error('');
372
+ console.error('Available shaders:');
373
+ shaders.forEach(s => console.error(` ${s}`));
374
+ console.error('');
375
+ console.error('Usage:');
376
+ console.error(` shader dev ${shaders[0]}`);
335
377
  process.exit(1);
336
378
  }
337
379
 
338
- const cwd = process.cwd();
339
380
  const shaderPath = path.join(cwd, 'shaders', shaderName);
340
381
  if (!fs.existsSync(shaderPath)) {
382
+ const shaders = getShaderList(cwd);
383
+
341
384
  console.error(`Error: Shader "${shaderName}" not found`);
342
- console.error('Run "shader list" to see available shaders');
385
+
386
+ if (shaders && shaders.length > 0) {
387
+ // Check for similar names (typo detection)
388
+ const similar = shaders.filter(s =>
389
+ s.toLowerCase().includes(shaderName.toLowerCase()) ||
390
+ shaderName.toLowerCase().includes(s.toLowerCase())
391
+ );
392
+
393
+ if (similar.length > 0) {
394
+ console.error('');
395
+ console.error('Did you mean:');
396
+ similar.forEach(s => console.error(` ${s}`));
397
+ } else {
398
+ console.error('');
399
+ console.error('Available shaders:');
400
+ shaders.forEach(s => console.error(` ${s}`));
401
+ }
402
+ }
343
403
  process.exit(1);
344
404
  }
345
405
 
@@ -350,16 +410,48 @@ switch (command) {
350
410
 
351
411
  case 'build': {
352
412
  const shaderName = args[1];
413
+ const cwd = process.cwd();
414
+
353
415
  if (!shaderName) {
354
- console.error('Error: Specify a shader name');
355
- console.error(' shader build <shader-name>');
416
+ const shaders = getShaderList(cwd);
417
+
418
+ if (shaders && shaders.length > 0) {
419
+ console.error('Error: Specify which shader to build');
420
+ console.error('');
421
+ console.error('Available shaders:');
422
+ shaders.forEach(s => console.error(` ${s}`));
423
+ console.error('');
424
+ console.error('Usage:');
425
+ console.error(` shader build ${shaders[0]}`);
426
+ } else {
427
+ console.error('Error: Specify a shader name');
428
+ console.error(' shader build <shader-name>');
429
+ }
356
430
  process.exit(1);
357
431
  }
358
432
 
359
- const cwd = process.cwd();
360
433
  const shaderPath = path.join(cwd, 'shaders', shaderName);
361
434
  if (!fs.existsSync(shaderPath)) {
435
+ const shaders = getShaderList(cwd);
436
+
362
437
  console.error(`Error: Shader "${shaderName}" not found`);
438
+
439
+ if (shaders && shaders.length > 0) {
440
+ const similar = shaders.filter(s =>
441
+ s.toLowerCase().includes(shaderName.toLowerCase()) ||
442
+ shaderName.toLowerCase().includes(s.toLowerCase())
443
+ );
444
+
445
+ if (similar.length > 0) {
446
+ console.error('');
447
+ console.error('Did you mean:');
448
+ similar.forEach(s => console.error(` ${s}`));
449
+ } else {
450
+ console.error('');
451
+ console.error('Available shaders:');
452
+ shaders.forEach(s => console.error(` ${s}`));
453
+ }
454
+ }
363
455
  process.exit(1);
364
456
  }
365
457
 
@@ -3,13 +3,13 @@
3
3
  *
4
4
  * Responsibilities:
5
5
  * - Create and manage canvas
6
- * - Initialize ShadertoyEngine
6
+ * - Initialize ShaderEngine
7
7
  * - Run animation loop (requestAnimationFrame)
8
8
  * - Handle resize and mouse events
9
9
  * - Present Image pass output to screen
10
10
  */
11
11
  import './app.css';
12
- import { ShadertoyEngine } from '../engine/ShadertoyEngine';
12
+ import { ShaderEngine } from '../engine/ShaderEngine';
13
13
  import { AppOptions } from './types';
14
14
  export declare class App {
15
15
  private container;
@@ -21,18 +21,54 @@ export declare class App {
21
21
  private animationId;
22
22
  private startTime;
23
23
  private mouse;
24
+ private isMouseDown;
25
+ private touchState;
26
+ private activePointers;
24
27
  private fpsDisplay;
25
28
  private frameCount;
26
29
  private lastFpsUpdate;
27
30
  private currentFps;
31
+ private statsContainer;
32
+ private statsGrid;
33
+ private timeDisplay;
34
+ private frameDisplay;
35
+ private resolutionDisplay;
36
+ private totalFrameCount;
37
+ private isStatsOpen;
28
38
  private controlsContainer;
39
+ private controlsGrid;
40
+ private menuButton;
29
41
  private playPauseButton;
30
42
  private isPaused;
43
+ private isMenuOpen;
31
44
  private errorOverlay;
45
+ private mediaBanner;
32
46
  private resizeObserver;
33
47
  private intersectionObserver;
34
48
  private isVisible;
49
+ private contextLostOverlay;
50
+ private isContextLost;
51
+ private uniformsPanel;
52
+ private scriptAPI;
53
+ private scriptErrorCount;
54
+ private _lastOnFrameTime;
55
+ private static readonly MAX_SCRIPT_ERRORS;
56
+ private mediaInitialized;
57
+ private isRecording;
58
+ private mediaRecorder;
59
+ private recordedChunks;
60
+ private recordButton;
61
+ private recordingIndicator;
35
62
  constructor(opts: AppOptions);
63
+ /**
64
+ * Initialize audio/webcam on first user gesture (required by browser policy).
65
+ * Video files are auto-started in the constructor since muted videos don't need gestures.
66
+ */
67
+ private initMediaOnGesture;
68
+ /**
69
+ * Start video file playback (muted, doesn't require user gesture).
70
+ */
71
+ private initVideoFiles;
36
72
  /**
37
73
  * Check if there were any shader compilation errors.
38
74
  * Returns true if the engine has errors and should not be started.
@@ -42,7 +78,7 @@ export declare class App {
42
78
  * Get the underlying engine instance.
43
79
  * Used for live recompilation in editor mode.
44
80
  */
45
- getEngine(): ShadertoyEngine;
81
+ getEngine(): ShaderEngine;
46
82
  /**
47
83
  * Start the animation loop.
48
84
  */
@@ -58,9 +94,25 @@ export declare class App {
58
94
  private animate;
59
95
  /**
60
96
  * Update FPS counter.
61
- * Updates the display roughly once per second.
97
+ * FPS display updates once per second, frame count updates every frame.
62
98
  */
63
99
  private updateFps;
100
+ /**
101
+ * Update frame count display.
102
+ */
103
+ private updateFrameDisplay;
104
+ /**
105
+ * Update time display.
106
+ */
107
+ private updateTimeDisplay;
108
+ /**
109
+ * Update resolution display.
110
+ */
111
+ private updateResolutionDisplay;
112
+ /**
113
+ * Toggle the stats panel open/closed.
114
+ */
115
+ private toggleStats;
64
116
  /**
65
117
  * Present the Image pass output to the screen.
66
118
  *
@@ -71,9 +123,23 @@ export declare class App {
71
123
  private updateCanvasSize;
72
124
  private setupMouseTracking;
73
125
  /**
74
- * Create playback control buttons (play/pause and reset).
126
+ * Set up pointer event tracking for touch support.
127
+ * Uses Pointer Events API for unified mouse/touch/pen handling.
128
+ */
129
+ private setupTouchTracking;
130
+ /**
131
+ * Update touch state from active pointers.
132
+ * Calculates pinch gesture when 2+ fingers are active.
133
+ */
134
+ private updateTouchState;
135
+ /**
136
+ * Create playback control buttons with collapsible menu.
75
137
  */
76
138
  private createControls;
139
+ /**
140
+ * Toggle the controls menu open/closed.
141
+ */
142
+ private toggleControlsMenu;
77
143
  /**
78
144
  * Set up keyboard tracking for shader keyboard texture.
79
145
  * Tracks all key presses/releases and forwards to engine.
@@ -87,41 +153,103 @@ export declare class App {
87
153
  * Set up keyboard shortcuts for playback control.
88
154
  */
89
155
  private setupKeyboardShortcuts;
156
+ /**
157
+ * Set up handlers for WebGL context loss and restoration.
158
+ * Context can be lost due to GPU driver issues, system sleep, etc.
159
+ */
160
+ private setupContextLossHandling;
161
+ /**
162
+ * Handle WebGL context loss - pause rendering and show overlay.
163
+ */
164
+ private handleContextLost;
165
+ /**
166
+ * Handle WebGL context restoration - reinitialize and resume.
167
+ */
168
+ private handleContextRestored;
169
+ /**
170
+ * Show overlay when WebGL context is lost.
171
+ */
172
+ private showContextLostOverlay;
173
+ /**
174
+ * Hide the context lost overlay.
175
+ */
176
+ private hideContextLostOverlay;
90
177
  /**
91
178
  * Toggle between play and pause states.
179
+ * Public for UILayout to call.
180
+ */
181
+ togglePlayPause(): void;
182
+ /**
183
+ * Get current paused state.
92
184
  */
93
- private togglePlayPause;
185
+ getPaused(): boolean;
94
186
  /**
95
187
  * Reset the shader to frame 0.
188
+ * Public for UILayout to call.
96
189
  */
97
- private reset;
190
+ reset(): void;
98
191
  /**
99
192
  * Capture and download a screenshot of the current canvas as PNG.
100
193
  * Filename format: shadertoy-{folderName}-{timestamp}.png
194
+ * Public for UILayout to call.
195
+ */
196
+ screenshot(): void;
197
+ /**
198
+ * Toggle video recording on/off.
199
+ * Public for UILayout to call.
200
+ */
201
+ toggleRecording(): void;
202
+ /**
203
+ * Start recording the canvas as WebM video.
204
+ */
205
+ private startRecording;
206
+ /**
207
+ * Stop recording and trigger download.
208
+ */
209
+ private stopRecording;
210
+ /**
211
+ * Update record button appearance based on recording state.
212
+ */
213
+ private updateRecordButton;
214
+ /**
215
+ * Show the recording indicator (pulsing red dot in corner).
216
+ */
217
+ private showRecordingIndicator;
218
+ /**
219
+ * Hide the recording indicator.
220
+ */
221
+ private hideRecordingIndicator;
222
+ /**
223
+ * Export the current shader as a standalone HTML file.
224
+ * Bakes in current uniform values and replaces textures with procedural grid.
225
+ */
226
+ exportHTML(): void;
227
+ /**
228
+ * Generate standalone HTML with embedded shaders.
101
229
  */
102
- private screenshot;
230
+ private generateStandaloneHTML;
103
231
  /**
104
232
  * Update play/pause button icon based on current state.
105
233
  */
106
234
  private updatePlayPauseButton;
235
+ private showMediaBanner;
236
+ private hideMediaBanner;
107
237
  /**
108
238
  * Display shader compilation errors in an overlay.
109
239
  */
110
240
  private showErrorOverlay;
111
241
  /**
112
- * Parse and improve WebGL shader error messages.
242
+ * Parse WebGL error messages into user-friendly format with correct line numbers.
113
243
  */
114
244
  private parseShaderError;
115
245
  /**
116
- * Extract code context around error line (±3 lines).
117
- * Returns HTML with the error line highlighted.
246
+ * Add helpful hints to common GLSL error messages.
118
247
  */
119
- private extractCodeContext;
248
+ private friendlyGLSLError;
120
249
  /**
121
- * Extract code context from common.glsl file.
122
- * Similar to extractCodeContext but uses the original common source.
250
+ * Build code context HTML around an error line (±3 lines) from source.
123
251
  */
124
- private extractCodeContextFromCommon;
252
+ private buildCodeContext;
125
253
  /**
126
254
  * Escape HTML to prevent XSS.
127
255
  */
@@ -1 +1 @@
1
- {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/app/App.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,WAAW,CAAC;AAEnB,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAc,MAAM,SAAS,CAAC;AAEjD,qBAAa,GAAG;IACd,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,EAAE,CAAyB;IACnC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,OAAO,CAAmB;IAElC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,SAAS,CAAa;IAG9B,OAAO,CAAC,KAAK,CAA8B;IAG3C,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,UAAU,CAAa;IAG/B,OAAO,CAAC,iBAAiB,CAA4B;IACrD,OAAO,CAAC,eAAe,CAA4B;IACnD,OAAO,CAAC,QAAQ,CAAkB;IAGlC,OAAO,CAAC,YAAY,CAA4B;IAGhD,OAAO,CAAC,cAAc,CAAiB;IAGvC,OAAO,CAAC,oBAAoB,CAAuB;IACnD,OAAO,CAAC,SAAS,CAAiB;gBAEtB,IAAI,EAAE,UAAU;IA4F5B;;;OAGG;IACH,SAAS,IAAI,OAAO;IAIpB;;;OAGG;IACH,SAAS,IAAI,eAAe;IAI5B;;OAEG;IACH,KAAK,IAAI,IAAI;IASb;;OAEG;IACH,IAAI,IAAI,IAAI;IAOZ;;OAEG;IACH,OAAO,IAAI,IAAI;IAaf,OAAO,CAAC,OAAO,CAuBb;IAEF;;;OAGG;IACH,OAAO,CAAC,SAAS;IAYjB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAkCvB,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,kBAAkB;IA2B1B;;OAEG;IACH,OAAO,CAAC,cAAc;IA+CtB;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAmB7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAU5B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAgB9B;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB;;OAEG;IACH,OAAO,CAAC,KAAK;IAOb;;;OAGG;IACH,OAAO,CAAC,UAAU;IAoClB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAwB7B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA8ExB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAexB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAgC1B;;;OAGG;IACH,OAAO,CAAC,4BAA4B;IA8BpC;;OAEG;IACH,OAAO,CAAC,UAAU;IAMlB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAMzB"}
1
+ {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/app/App.ts"],"names":[],"mappings":"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"}