@viji-dev/sdk 1.0.0 → 1.0.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.
Files changed (77) hide show
  1. package/README.md +155 -60
  2. package/bin/viji.js +9 -29
  3. package/dist/assets/artist-dts-BHUsvSI6.js +613 -0
  4. package/dist/assets/artist-dts-p5-Cyw8vmy_.js +736 -0
  5. package/dist/assets/core-CiQx3w0t.js +12 -0
  6. package/dist/assets/dark-plus-C3mMm8J8.js +1 -0
  7. package/dist/assets/docs-api-PBLtY4Ni.js +12381 -0
  8. package/dist/assets/engine-javascript-CXyY7cc8.js +141 -0
  9. package/dist/assets/essentia-wasm.web-0S-sW98u-CYV1l1zv.js +38 -0
  10. package/dist/assets/essentia.js-core.es-DnrJE0uR-DOSrF5_G.js +32 -0
  11. package/dist/assets/glsl-DMyvO4G4.js +1 -0
  12. package/dist/assets/index-BhFxsauQ.js +215 -0
  13. package/dist/assets/index-BqhVeA7U.css +1 -0
  14. package/dist/assets/index-T4TOjvD0.js +1 -0
  15. package/dist/assets/index-Wz9WqGqz.js +52 -0
  16. package/dist/assets/index-t24aGwla.js +1 -0
  17. package/dist/assets/javascript-wDzz0qaB.js +1 -0
  18. package/dist/assets/shader-uniforms-GdaUkQPK.js +1 -0
  19. package/dist/assets/typescript-BPQ3VLAy.js +1 -0
  20. package/dist/assets/viji.worker-CQSJ0SiO-ljtBlcNZ.js +27018 -0
  21. package/{index.html → dist/index.html} +2 -1
  22. package/package.json +31 -35
  23. package/src/cli/commands/build.js +50 -99
  24. package/src/cli/commands/create.js +32 -47
  25. package/src/cli/commands/dev.js +30 -97
  26. package/src/cli/server/dev-server.js +233 -0
  27. package/src/cli/server/scene-scanner.js +93 -0
  28. package/src/cli/server/vite-scene-plugin.d.ts +2 -0
  29. package/src/cli/server/vite-scene-plugin.js +134 -0
  30. package/src/cli/utils/cli-utils.js +29 -139
  31. package/src/cli/utils/scene-compiler.js +10 -17
  32. package/src/templates/scene-templates.js +85 -0
  33. package/.gitignore +0 -29
  34. package/eslint.config.js +0 -37
  35. package/postcss.config.js +0 -6
  36. package/scenes/audio-visualizer/main.js +0 -287
  37. package/scenes/core-demo/main.js +0 -532
  38. package/scenes/demo-scene/main.js +0 -619
  39. package/scenes/global.d.ts +0 -15
  40. package/scenes/particle-system/main.js +0 -349
  41. package/scenes/tsconfig.json +0 -12
  42. package/scenes/video-mirror/main.ts +0 -436
  43. package/src/App.css +0 -42
  44. package/src/App.tsx +0 -279
  45. package/src/cli/commands/init.js +0 -262
  46. package/src/components/SDKPage.tsx +0 -337
  47. package/src/components/core/CoreContainer.tsx +0 -126
  48. package/src/components/ui/DeviceSelectionList.tsx +0 -137
  49. package/src/components/ui/FPSCounter.tsx +0 -78
  50. package/src/components/ui/FileDropzonePanel.tsx +0 -120
  51. package/src/components/ui/FileListPanel.tsx +0 -285
  52. package/src/components/ui/InputExpansionPanel.tsx +0 -31
  53. package/src/components/ui/MediaPlayerControls.tsx +0 -191
  54. package/src/components/ui/MenuContainer.tsx +0 -71
  55. package/src/components/ui/ParametersMenu.tsx +0 -797
  56. package/src/components/ui/ProjectSwitcherMenu.tsx +0 -192
  57. package/src/components/ui/QuickInputControls.tsx +0 -542
  58. package/src/components/ui/SDKMenuSystem.tsx +0 -96
  59. package/src/components/ui/SettingsMenu.tsx +0 -346
  60. package/src/components/ui/SimpleInputControls.tsx +0 -137
  61. package/src/index.css +0 -68
  62. package/src/main.tsx +0 -10
  63. package/src/scenes-hmr.ts +0 -158
  64. package/src/services/project-filesystem.ts +0 -436
  65. package/src/stores/scene-player/index.ts +0 -3
  66. package/src/stores/scene-player/input-manager.store.ts +0 -1045
  67. package/src/stores/scene-player/scene-session.store.ts +0 -659
  68. package/src/styles/globals.css +0 -111
  69. package/src/templates/minimal-template.js +0 -11
  70. package/src/utils/debounce.js +0 -34
  71. package/src/vite-env.d.ts +0 -1
  72. package/tailwind.config.js +0 -18
  73. package/tsconfig.app.json +0 -27
  74. package/tsconfig.json +0 -27
  75. package/tsconfig.node.json +0 -27
  76. package/vite.config.ts +0 -54
  77. /package/{public → dist}/favicon.png +0 -0
@@ -0,0 +1,736 @@
1
+ const e=`// Viji Artist API - Global Type Definitions
2
+ // All types are placed inside declare global {} because this file uses export {}
3
+ // for top-level await support, which makes it a module (where top-level declarations
4
+ // would otherwise be module-scoped, not global).
5
+
6
+ declare global {
7
+ interface AudioAPI {\r
8
+ isConnected: boolean;\r
9
+ volume: {\r
10
+ current: number;\r
11
+ peak: number;\r
12
+ smoothed: number;\r
13
+ };\r
14
+ bands: {\r
15
+ low: number;\r
16
+ lowMid: number;\r
17
+ mid: number;\r
18
+ highMid: number;\r
19
+ high: number;\r
20
+ lowSmoothed: number;\r
21
+ lowMidSmoothed: number;\r
22
+ midSmoothed: number;\r
23
+ highMidSmoothed: number;\r
24
+ highSmoothed: number;\r
25
+ };\r
26
+ beat: {\r
27
+ kick: number;\r
28
+ snare: number;\r
29
+ hat: number;\r
30
+ any: number;\r
31
+ kickSmoothed: number;\r
32
+ snareSmoothed: number;\r
33
+ hatSmoothed: number;\r
34
+ anySmoothed: number;\r
35
+ triggers: {\r
36
+ any: boolean;\r
37
+ kick: boolean;\r
38
+ snare: boolean;\r
39
+ hat: boolean;\r
40
+ };\r
41
+ events: Array<{\r
42
+ type: 'kick' | 'snare' | 'hat';\r
43
+ time: number;\r
44
+ strength: number;\r
45
+ }>;\r
46
+ bpm: number;\r
47
+ confidence: number;\r
48
+ isLocked: boolean;\r
49
+ };\r
50
+ spectral: {\r
51
+ brightness: number;\r
52
+ flatness: number;\r
53
+ };\r
54
+ getFrequencyData: () => Uint8Array;\r
55
+ getWaveform: () => Float32Array;\r
56
+ }\r
57
+
58
+ interface AudioStreamAPI {\r
59
+ isConnected: boolean;\r
60
+ volume: {\r
61
+ current: number;\r
62
+ peak: number;\r
63
+ smoothed: number;\r
64
+ };\r
65
+ bands: {\r
66
+ low: number;\r
67
+ lowMid: number;\r
68
+ mid: number;\r
69
+ highMid: number;\r
70
+ high: number;\r
71
+ lowSmoothed: number;\r
72
+ lowMidSmoothed: number;\r
73
+ midSmoothed: number;\r
74
+ highMidSmoothed: number;\r
75
+ highSmoothed: number;\r
76
+ };\r
77
+ spectral: {\r
78
+ brightness: number;\r
79
+ flatness: number;\r
80
+ };\r
81
+ getFrequencyData: () => Uint8Array;\r
82
+ getWaveform: () => Float32Array;\r
83
+ }\r
84
+
85
+ interface ButtonConfig {\r
86
+ label: string;\r
87
+ description?: string;\r
88
+ group?: string;\r
89
+ category?: ParameterCategory;\r
90
+ }\r
91
+
92
+ interface ButtonParameter {\r
93
+ value: boolean;\r
94
+ label: string;\r
95
+ description?: string;\r
96
+ group: string;\r
97
+ category: ParameterCategory;\r
98
+ }\r
99
+
100
+ interface CaptureFrameOptions {\r
101
+ /** Output format: 'blob' for encoded image, 'bitmap' for GPU-friendly ImageBitmap */\r
102
+ format?: 'blob' | 'bitmap';\r
103
+ /** MIME type for blob output (ignored for bitmap), e.g., 'image/png', 'image/jpeg', 'image/webp' */\r
104
+ type?: string;\r
105
+ /**\r
106
+ * Target resolution.\r
107
+ * - number: scale factor relative to current canvas size (e.g., 0.5 = 50%)\r
108
+ * - { width, height }: exact output size; if aspect ratio differs from canvas,\r
109
+ * the source is center-cropped to match the target aspect ratio before scaling\r
110
+ */\r
111
+ resolution?: number | {\r
112
+ width: number;\r
113
+ height: number;\r
114
+ };\r
115
+ }\r
116
+
117
+ interface ColorConfig {\r
118
+ label: string;\r
119
+ description?: string;\r
120
+ group?: string;\r
121
+ category?: ParameterCategory;\r
122
+ }\r
123
+
124
+ interface ColorParameter {\r
125
+ value: string;\r
126
+ label: string;\r
127
+ description?: string;\r
128
+ group: string;\r
129
+ category: ParameterCategory;\r
130
+ }\r
131
+
132
+ type CVFeature = 'faceDetection' | 'faceMesh' | 'handTracking' | 'poseDetection' | 'bodySegmentation' | 'emotionDetection';\r
133
+
134
+ type CVFrameRateMode = 'full' | 'half' | 'quarter' | 'eighth';\r
135
+
136
+ interface DeviceMotionData {\r
137
+ /** Acceleration without gravity (m/s²) */\r
138
+ acceleration: {\r
139
+ x: number | null;\r
140
+ y: number | null;\r
141
+ z: number | null;\r
142
+ } | null;\r
143
+ /** Acceleration including gravity (m/s²) */\r
144
+ accelerationIncludingGravity: {\r
145
+ x: number | null;\r
146
+ y: number | null;\r
147
+ z: number | null;\r
148
+ } | null;\r
149
+ /** Rotation rate (degrees/second) */\r
150
+ rotationRate: {\r
151
+ alpha: number | null;\r
152
+ beta: number | null;\r
153
+ gamma: number | null;\r
154
+ } | null;\r
155
+ /** Interval between updates (milliseconds) */\r
156
+ interval: number;\r
157
+ }\r
158
+
159
+ interface DeviceOrientationData {\r
160
+ /** Rotation around Z-axis (0-360 degrees, compass heading) */\r
161
+ alpha: number | null;\r
162
+ /** Rotation around X-axis (-180 to 180 degrees, front-to-back tilt) */\r
163
+ beta: number | null;\r
164
+ /** Rotation around Y-axis (-90 to 90 degrees, left-to-right tilt) */\r
165
+ gamma: number | null;\r
166
+ /** True if using magnetometer (compass) for absolute orientation */\r
167
+ absolute: boolean;\r
168
+ }\r
169
+
170
+ interface DeviceSensorState {\r
171
+ motion: DeviceMotionData | null;\r
172
+ orientation: DeviceOrientationData | null;\r
173
+ }\r
174
+
175
+ interface DeviceState extends DeviceSensorState {\r
176
+ /** Unique device identifier */\r
177
+ id: string;\r
178
+ /** User-friendly device name */\r
179
+ name: string;\r
180
+ /** Device camera video (null if not available) */\r
181
+ video: VideoAPI | null;\r
182
+ /** Device audio stream (null if not available) */\r
183
+ audio: AudioStreamAPI | null;\r
184
+ }\r
185
+
186
+ interface FaceBlendshapes {\r
187
+ browDownLeft: number;\r
188
+ browDownRight: number;\r
189
+ browInnerUp: number;\r
190
+ browOuterUpLeft: number;\r
191
+ browOuterUpRight: number;\r
192
+ cheekPuff: number;\r
193
+ cheekSquintLeft: number;\r
194
+ cheekSquintRight: number;\r
195
+ eyeBlinkLeft: number;\r
196
+ eyeBlinkRight: number;\r
197
+ eyeLookDownLeft: number;\r
198
+ eyeLookDownRight: number;\r
199
+ eyeLookInLeft: number;\r
200
+ eyeLookInRight: number;\r
201
+ eyeLookOutLeft: number;\r
202
+ eyeLookOutRight: number;\r
203
+ eyeLookUpLeft: number;\r
204
+ eyeLookUpRight: number;\r
205
+ eyeSquintLeft: number;\r
206
+ eyeSquintRight: number;\r
207
+ eyeWideLeft: number;\r
208
+ eyeWideRight: number;\r
209
+ jawForward: number;\r
210
+ jawLeft: number;\r
211
+ jawOpen: number;\r
212
+ jawRight: number;\r
213
+ mouthClose: number;\r
214
+ mouthDimpleLeft: number;\r
215
+ mouthDimpleRight: number;\r
216
+ mouthFrownLeft: number;\r
217
+ mouthFrownRight: number;\r
218
+ mouthFunnel: number;\r
219
+ mouthLeft: number;\r
220
+ mouthLowerDownLeft: number;\r
221
+ mouthLowerDownRight: number;\r
222
+ mouthPressLeft: number;\r
223
+ mouthPressRight: number;\r
224
+ mouthPucker: number;\r
225
+ mouthRight: number;\r
226
+ mouthRollLower: number;\r
227
+ mouthRollUpper: number;\r
228
+ mouthShrugLower: number;\r
229
+ mouthShrugUpper: number;\r
230
+ mouthSmileLeft: number;\r
231
+ mouthSmileRight: number;\r
232
+ mouthStretchLeft: number;\r
233
+ mouthStretchRight: number;\r
234
+ mouthUpperUpLeft: number;\r
235
+ mouthUpperUpRight: number;\r
236
+ noseSneerLeft: number;\r
237
+ noseSneerRight: number;\r
238
+ tongueOut: number;\r
239
+ }\r
240
+
241
+ interface FaceData {\r
242
+ id: number;\r
243
+ bounds: {\r
244
+ x: number;\r
245
+ y: number;\r
246
+ width: number;\r
247
+ height: number;\r
248
+ };\r
249
+ center: {\r
250
+ x: number;\r
251
+ y: number;\r
252
+ };\r
253
+ confidence: number;\r
254
+ landmarks: {\r
255
+ x: number;\r
256
+ y: number;\r
257
+ z?: number;\r
258
+ }[];\r
259
+ expressions: {\r
260
+ neutral: number;\r
261
+ happy: number;\r
262
+ sad: number;\r
263
+ angry: number;\r
264
+ surprised: number;\r
265
+ disgusted: number;\r
266
+ fearful: number;\r
267
+ };\r
268
+ headPose: {\r
269
+ pitch: number;\r
270
+ yaw: number;\r
271
+ roll: number;\r
272
+ };\r
273
+ blendshapes: FaceBlendshapes;\r
274
+ }\r
275
+
276
+ type FrameRateMode = 'full' | 'half';\r
277
+
278
+ interface FrequencyBand {\r
279
+ name: string;\r
280
+ min: number;\r
281
+ max: number;\r
282
+ }\r
283
+
284
+ interface HandData {\r
285
+ id: number;\r
286
+ handedness: 'left' | 'right';\r
287
+ confidence: number;\r
288
+ bounds: {\r
289
+ x: number;\r
290
+ y: number;\r
291
+ width: number;\r
292
+ height: number;\r
293
+ };\r
294
+ landmarks: {\r
295
+ x: number;\r
296
+ y: number;\r
297
+ z: number;\r
298
+ }[];\r
299
+ palm: {\r
300
+ x: number;\r
301
+ y: number;\r
302
+ z: number;\r
303
+ };\r
304
+ gestures: {\r
305
+ fist: number;\r
306
+ openPalm: number;\r
307
+ peace: number;\r
308
+ thumbsUp: number;\r
309
+ thumbsDown: number;\r
310
+ pointing: number;\r
311
+ iLoveYou: number;\r
312
+ };\r
313
+ }\r
314
+
315
+ interface ImageConfig {\r
316
+ label: string;\r
317
+ description?: string;\r
318
+ group?: string;\r
319
+ category?: ParameterCategory;\r
320
+ }\r
321
+
322
+ interface ImageParameter {\r
323
+ value: ImageBitmap | null;\r
324
+ label: string;\r
325
+ description?: string;\r
326
+ group: string;\r
327
+ category: ParameterCategory;\r
328
+ /**
329
+ * P5-compatible image object (lazy-loaded, auto-converted from .value)
330
+ * Only available in P5 renderer mode. Use with p5.image() function.
331
+ * Example: p5.image(myImage.p5, x, y)
332
+ */
333
+ p5?: {
334
+ canvas: OffscreenCanvas; // P5.js looks for img.canvas || img.elt
335
+ elt: OffscreenCanvas; // Fallback for compatibility
336
+ width: number; // Logical width
337
+ height: number; // Logical height
338
+ };
339
+ }\r
340
+
341
+ interface KeyboardAPI {\r
342
+ isPressed(key: string): boolean;\r
343
+ wasPressed(key: string): boolean;\r
344
+ wasReleased(key: string): boolean;\r
345
+ activeKeys: Set<string>;\r
346
+ pressedThisFrame: Set<string>;\r
347
+ releasedThisFrame: Set<string>;\r
348
+ lastKeyPressed: string;\r
349
+ lastKeyReleased: string;\r
350
+ shift: boolean;\r
351
+ ctrl: boolean;\r
352
+ alt: boolean;\r
353
+ meta: boolean;\r
354
+ textureData: Uint8Array;\r
355
+ }\r
356
+
357
+ interface MouseAPI {\r
358
+ x: number;\r
359
+ y: number;\r
360
+ isInCanvas: boolean;\r
361
+ isPressed: boolean;\r
362
+ leftButton: boolean;\r
363
+ rightButton: boolean;\r
364
+ middleButton: boolean;\r
365
+ deltaX: number;\r
366
+ deltaY: number;\r
367
+ wheelDelta: number;\r
368
+ wheelX: number;\r
369
+ wheelY: number;\r
370
+ wasPressed: boolean;\r
371
+ wasReleased: boolean;\r
372
+ wasMoved: boolean;\r
373
+ }\r
374
+
375
+ interface NumberConfig {\r
376
+ min?: number;\r
377
+ max?: number;\r
378
+ step?: number;\r
379
+ label: string;\r
380
+ description?: string;\r
381
+ group?: string;\r
382
+ category?: ParameterCategory;\r
383
+ }\r
384
+
385
+ interface NumberParameter {\r
386
+ value: number;\r
387
+ min: number;\r
388
+ max: number;\r
389
+ step: number;\r
390
+ label: string;\r
391
+ description?: string;\r
392
+ group: string;\r
393
+ category: ParameterCategory;\r
394
+ }\r
395
+
396
+ type ParameterCategory = 'audio' | 'video' | 'interaction' | 'general';\r
397
+
398
+ interface PointerAPI {\r
399
+ x: number;\r
400
+ y: number;\r
401
+ deltaX: number;\r
402
+ deltaY: number;\r
403
+ isDown: boolean;\r
404
+ wasPressed: boolean;\r
405
+ wasReleased: boolean;\r
406
+ isInCanvas: boolean;\r
407
+ type: 'mouse' | 'touch' | 'none';\r
408
+ }\r
409
+
410
+ interface PoseData {\r
411
+ confidence: number;\r
412
+ landmarks: {\r
413
+ x: number;\r
414
+ y: number;\r
415
+ z: number;\r
416
+ visibility: number;\r
417
+ }[];\r
418
+ face: {\r
419
+ x: number;\r
420
+ y: number;\r
421
+ }[];\r
422
+ torso: {\r
423
+ x: number;\r
424
+ y: number;\r
425
+ }[];\r
426
+ leftArm: {\r
427
+ x: number;\r
428
+ y: number;\r
429
+ }[];\r
430
+ rightArm: {\r
431
+ x: number;\r
432
+ y: number;\r
433
+ }[];\r
434
+ leftLeg: {\r
435
+ x: number;\r
436
+ y: number;\r
437
+ }[];\r
438
+ rightLeg: {\r
439
+ x: number;\r
440
+ y: number;\r
441
+ }[];\r
442
+ }\r
443
+
444
+ type Resolution = {\r
445
+ width: number;\r
446
+ height: number;\r
447
+ };\r
448
+
449
+ interface SegmentationData {\r
450
+ mask: Uint8Array;\r
451
+ width: number;\r
452
+ height: number;\r
453
+ }\r
454
+
455
+ interface SelectConfig {\r
456
+ options: string[] | number[];\r
457
+ label: string;\r
458
+ description?: string;\r
459
+ group?: string;\r
460
+ category?: ParameterCategory;\r
461
+ }\r
462
+
463
+ interface SelectParameter {\r
464
+ value: string | number;\r
465
+ options: string[] | number[];\r
466
+ label: string;\r
467
+ description?: string;\r
468
+ group: string;\r
469
+ category: ParameterCategory;\r
470
+ }\r
471
+
472
+ interface SliderConfig {\r
473
+ min?: number;\r
474
+ max?: number;\r
475
+ step?: number;\r
476
+ label: string;\r
477
+ description?: string;\r
478
+ group?: string;\r
479
+ category?: ParameterCategory;\r
480
+ }\r
481
+
482
+ interface SliderParameter {\r
483
+ value: number;\r
484
+ min: number;\r
485
+ max: number;\r
486
+ step: number;\r
487
+ label: string;\r
488
+ description?: string;\r
489
+ group: string;\r
490
+ category: ParameterCategory;\r
491
+ }\r
492
+
493
+ interface TextConfig {\r
494
+ label: string;\r
495
+ description?: string;\r
496
+ group?: string;\r
497
+ category?: ParameterCategory;\r
498
+ maxLength?: number;\r
499
+ }\r
500
+
501
+ interface TextParameter {\r
502
+ value: string;\r
503
+ maxLength?: number;\r
504
+ label: string;\r
505
+ description?: string;\r
506
+ group: string;\r
507
+ category: ParameterCategory;\r
508
+ }\r
509
+
510
+ interface ToggleConfig {\r
511
+ label: string;\r
512
+ description?: string;\r
513
+ group?: string;\r
514
+ category?: ParameterCategory;\r
515
+ }\r
516
+
517
+ interface ToggleParameter {\r
518
+ value: boolean;\r
519
+ label: string;\r
520
+ description?: string;\r
521
+ group: string;\r
522
+ category: ParameterCategory;\r
523
+ }\r
524
+
525
+ interface TouchAPI {\r
526
+ points: TouchPoint[];\r
527
+ count: number;\r
528
+ started: TouchPoint[];\r
529
+ moved: TouchPoint[];\r
530
+ ended: TouchPoint[];\r
531
+ primary: TouchPoint | null;\r
532
+ }\r
533
+
534
+ interface TouchPoint {\r
535
+ id: number;\r
536
+ x: number;\r
537
+ y: number;\r
538
+ pressure: number;\r
539
+ radius: number;\r
540
+ radiusX: number;\r
541
+ radiusY: number;\r
542
+ rotationAngle: number;\r
543
+ force: number;\r
544
+ isInCanvas: boolean;\r
545
+ deltaX: number;\r
546
+ deltaY: number;\r
547
+ velocity: {\r
548
+ x: number;\r
549
+ y: number;\r
550
+ };\r
551
+ isNew: boolean;\r
552
+ isActive: boolean;\r
553
+ isEnding: boolean;\r
554
+ }\r
555
+
556
+ const VERSION = "0.3.30";\r
557
+
558
+ interface VideoAPI {\r
559
+ isConnected: boolean;\r
560
+ currentFrame: OffscreenCanvas | ImageBitmap | null;\r
561
+ frameWidth: number;\r
562
+ frameHeight: number;\r
563
+ frameRate: number;\r
564
+ getFrameData: () => ImageData | null;\r
565
+ faces: FaceData[];\r
566
+ hands: HandData[];\r
567
+ pose: PoseData | null;\r
568
+ segmentation: SegmentationData | null;\r
569
+ cv: {\r
570
+ enableFaceDetection(enabled: boolean): Promise<void>;\r
571
+ enableFaceMesh(enabled: boolean): Promise<void>;\r
572
+ enableEmotionDetection(enabled: boolean): Promise<void>;\r
573
+ enableHandTracking(enabled: boolean): Promise<void>;\r
574
+ enablePoseDetection(enabled: boolean): Promise<void>;\r
575
+ enableBodySegmentation(enabled: boolean): Promise<void>;\r
576
+ getActiveFeatures(): CVFeature[];\r
577
+ isProcessing(): boolean;\r
578
+ };\r
579
+ }\r
580
+
581
+ interface VijiAPI {\r
582
+ canvas: OffscreenCanvas;\r
583
+ ctx?: OffscreenCanvasRenderingContext2D;\r
584
+ gl?: WebGLRenderingContext | WebGL2RenderingContext;\r
585
+ width: number;\r
586
+ height: number;\r
587
+ time: number;\r
588
+ deltaTime: number;\r
589
+ frameCount: number;\r
590
+ fps: number;\r
591
+ audio: AudioAPI;\r
592
+ video: VideoAPI;\r
593
+ videoStreams: VideoAPI[];\r
594
+ audioStreams: AudioStreamAPI[];\r
595
+ mouse: MouseAPI;\r
596
+ keyboard: KeyboardAPI;\r
597
+ touches: TouchAPI;\r
598
+ pointer: PointerAPI;\r
599
+ device: DeviceSensorState;\r
600
+ devices: DeviceState[];\r
601
+ slider: (defaultValue: number, config: SliderConfig) => SliderParameter;\r
602
+ color: (defaultValue: string, config: ColorConfig) => ColorParameter;\r
603
+ toggle: (defaultValue: boolean, config: ToggleConfig) => ToggleParameter;\r
604
+ select: (defaultValue: string | number, config: SelectConfig) => SelectParameter;\r
605
+ text: (defaultValue: string, config: TextConfig) => TextParameter;\r
606
+ number: (defaultValue: number, config: NumberConfig) => NumberParameter;\r
607
+ image: (defaultValue: null, config: ImageConfig) => ImageParameter;\r
608
+ button: (config: ButtonConfig) => ButtonParameter;\r
609
+ useContext(type: '2d'): OffscreenCanvasRenderingContext2D;\r
610
+ useContext(type: 'webgl'): WebGLRenderingContext;\r
611
+ useContext(type: 'webgl2'): WebGL2RenderingContext;\r
612
+ }\r
613
+
614
+ // Runtime global - the main viji object
615
+ const viji: VijiAPI;
616
+
617
+ // Function type aliases (artists define their own render/setup functions)
618
+ type Render = (viji: VijiAPI) => void;
619
+ type Setup = (viji: VijiAPI) => void;
620
+ }
621
+
622
+ // Module marker (enables top-level await in artist code)
623
+ export {};
624
+
625
+
626
+ // ============================================================
627
+ // VIJI + P5.JS HYBRID MODE
628
+ // ============================================================
629
+ // In Viji's P5 renderer, you don't use standard P5 patterns.
630
+ // Instead, you define these Viji-specific functions:
631
+
632
+ // P5-specific globals (augments the base declare global block)
633
+ declare global {
634
+ // P5 instance type for annotations
635
+ type p5 = p5;
636
+
637
+ // Type aliases for P5 function signatures (artists define their own functions)
638
+ /**
639
+ * P5 render function signature - called every frame
640
+ * @param viji - Viji API (canvas, audio, video, parameters, etc.)
641
+ * @param p5 - P5.js instance with all P5 methods
642
+ */
643
+ type P5Render = (viji: VijiAPI, p5: p5) => void;
644
+
645
+ /**
646
+ * P5 setup function signature - called once at initialization
647
+ * @param viji - Viji API (canvas, audio, video, parameters, etc.)
648
+ * @param p5 - P5.js instance with all P5 methods
649
+ */
650
+ type P5Setup = (viji: VijiAPI, p5: p5) => void;
651
+ }
652
+
653
+ // ============================================================
654
+ // IMPORTANT NOTES
655
+ // ============================================================
656
+ // - Don't use: new p5(), preload(), draw(), or P5's setup()
657
+ // - Viji manages the P5 instance lifecycle (including createCanvas — never call it)
658
+ // - Optional WEBGL: use // @renderer p5 webgl as the first line (default is 2D: // @renderer p5)
659
+ // - Access P5 methods through the 'p5' parameter: p5.rect(), p5.fill(), etc.
660
+ // - Access Viji features through the 'viji' parameter: viji.audio, viji.mouse, etc.
661
+ // - Define parameters at the top level (before setup/render functions)
662
+
663
+ // ============================================================
664
+ // P5.JS TYPES (namespace and instance methods)
665
+ // ============================================================
666
+ // This file was auto-generated. Please do not edit it.
667
+ /// <reference path="./src/accessibility/describe.d.ts" />
668
+ /// <reference path="./src/accessibility/outputs.d.ts" />
669
+ /// <reference path="./src/color/creating_reading.d.ts" />
670
+ /// <reference path="./src/color/setting.d.ts" />
671
+ /// <reference path="./src/core/shape/2d_primitives.d.ts" />
672
+ /// <reference path="./src/core/shape/attributes.d.ts" />
673
+ /// <reference path="./src/core/shape/curves.d.ts" />
674
+ /// <reference path="./src/core/shape/vertex.d.ts" />
675
+ /// <reference path="./src/core/constants.d.ts" />
676
+ /// <reference path="./src/core/environment.d.ts" />
677
+ /// <reference path="./src/core/rendering.d.ts" />
678
+ /// <reference path="./src/core/structure.d.ts" />
679
+ /// <reference path="./src/core/transform.d.ts" />
680
+ /// <reference path="./src/data/local_storage.d.ts" />
681
+ /// <reference path="./src/data/p5.TypedDict.d.ts" />
682
+ /// <reference path="./src/dom/dom.d.ts" />
683
+ /// <reference path="./src/events/acceleration.d.ts" />
684
+ /// <reference path="./src/events/keyboard.d.ts" />
685
+ /// <reference path="./src/events/mouse.d.ts" />
686
+ /// <reference path="./src/events/touch.d.ts" />
687
+ /// <reference path="./src/image/image.d.ts" />
688
+ /// <reference path="./src/image/loading_displaying.d.ts" />
689
+ /// <reference path="./src/image/pixels.d.ts" />
690
+ /// <reference path="./src/io/files.d.ts" />
691
+ /// <reference path="./src/math/calculation.d.ts" />
692
+ /// <reference path="./src/math/math.d.ts" />
693
+ /// <reference path="./src/math/noise.d.ts" />
694
+ /// <reference path="./src/math/random.d.ts" />
695
+ /// <reference path="./src/math/trigonometry.d.ts" />
696
+ /// <reference path="./src/typography/attributes.d.ts" />
697
+ /// <reference path="./src/typography/loading_displaying.d.ts" />
698
+ /// <reference path="./src/utilities/array_functions.d.ts" />
699
+ /// <reference path="./src/utilities/conversion.d.ts" />
700
+ /// <reference path="./src/utilities/string_functions.d.ts" />
701
+ /// <reference path="./src/utilities/time_date.d.ts" />
702
+ /// <reference path="./src/webgl/3d_primitives.d.ts" />
703
+ /// <reference path="./src/webgl/interaction.d.ts" />
704
+ /// <reference path="./src/webgl/light.d.ts" />
705
+ /// <reference path="./src/webgl/loading.d.ts" />
706
+ /// <reference path="./src/webgl/material.d.ts" />
707
+ /// <reference path="./src/webgl/p5.Camera.d.ts" />
708
+ /// <reference path="./src/webgl/p5.RendererGL.Immediate.d.ts" />
709
+ /// <reference path="./src/webgl/p5.RendererGL.d.ts" />
710
+ /// <reference path="./src/color/p5.Color.d.ts" />
711
+ /// <reference path="./src/core/p5.Element.d.ts" />
712
+ /// <reference path="./src/core/p5.Graphics.d.ts" />
713
+ /// <reference path="./src/image/p5.Image.d.ts" />
714
+ /// <reference path="./src/io/p5.Table.d.ts" />
715
+ /// <reference path="./src/io/p5.TableRow.d.ts" />
716
+ /// <reference path="./src/io/p5.XML.d.ts" />
717
+ /// <reference path="./src/math/p5.Vector.d.ts" />
718
+ /// <reference path="./src/typography/p5.Font.d.ts" />
719
+ /// <reference path="./src/webgl/p5.Framebuffer.d.ts" />
720
+ /// <reference path="./src/webgl/p5.Geometry.d.ts" />
721
+ /// <reference path="./src/webgl/p5.Shader.d.ts" />
722
+ /// <reference path="./src/core/p5.Renderer.d.ts" />
723
+ /// <reference path="./literals.d.ts" />
724
+ /// <reference path="./constants.d.ts" />
725
+
726
+
727
+ // eslint-disable-next-line @typescript-eslint/no-empty-interface
728
+ interface p5 extends p5.p5InstanceExtensions {}
729
+
730
+ declare namespace p5 {
731
+ type UNKNOWN_P5_CONSTANT = any;
732
+ // eslint-disable-next-line @typescript-eslint/no-empty-interface
733
+ interface p5InstanceExtensions {}
734
+ }
735
+
736
+ `;export{e as artistDtsP5};