@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
@@ -1,192 +0,0 @@
1
- import React, { useState, useEffect } from 'react';
2
- import { Card, CardBody, Chip, Tooltip } from '@heroui/react';
3
- import { FolderIcon, DocumentDuplicateIcon, ClockIcon } from '@heroicons/react/24/outline';
4
- import { ProjectInfo, projectFileSystem } from '../../services/project-filesystem';
5
-
6
- // Type alias for backward compatibility
7
- interface Project extends ProjectInfo {
8
- sceneType: ProjectInfo['projectType'];
9
- }
10
-
11
- interface ProjectSwitcherMenuProps {
12
- className?: string;
13
- currentProject?: Project;
14
- onProjectSwitch?: (project: Project) => void;
15
- // UI CRUD disabled
16
- }
17
-
18
- const ProjectSwitcherMenu: React.FC<ProjectSwitcherMenuProps> = ({
19
- className = '',
20
- currentProject,
21
- onProjectSwitch,
22
- }) => {
23
- const [projects, setProjects] = useState<Project[]>([]);
24
- const [renamingId] = useState<string | null>(null);
25
-
26
- // Load projects from filesystem and watch for changes
27
- useEffect(() => {
28
- let unsubscribe: (() => void) | null = null;
29
-
30
- const loadProjects = async () => {
31
- try {
32
- const projectsList = await projectFileSystem.getProjects();
33
- // Convert ProjectInfo to Project (adding sceneType alias)
34
- const convertedProjects: Project[] = projectsList.map(project => ({
35
- ...project,
36
- sceneType: project.projectType,
37
- }));
38
- setProjects(convertedProjects);
39
- } catch (error) {
40
- console.error('Failed to load projects:', error);
41
- }
42
- };
43
-
44
- // Initial load
45
- loadProjects();
46
-
47
- // Watch for changes
48
- unsubscribe = projectFileSystem.onProjectsChange((updatedProjects) => {
49
- const convertedProjects: Project[] = updatedProjects.map(project => ({
50
- ...project,
51
- sceneType: project.projectType,
52
- }));
53
- setProjects(convertedProjects);
54
- });
55
-
56
- // Also refresh on Vite HMR full-reload signals
57
- try {
58
- const hot: any = (import.meta as any).hot;
59
- if (hot) {
60
- const handler = async () => {
61
- try {
62
- const list = await projectFileSystem.getProjects();
63
- const converted: Project[] = list.map(p => ({ ...p, sceneType: p.projectType }));
64
- setProjects(converted);
65
- } catch {}
66
- };
67
- hot.on('vite:afterUpdate', handler);
68
- return () => {
69
- try { hot.off?.('vite:afterUpdate', handler); } catch {}
70
- if (unsubscribe) unsubscribe();
71
- };
72
- }
73
- } catch {}
74
-
75
- return () => {
76
- if (unsubscribe) {
77
- unsubscribe();
78
- }
79
- };
80
- }, []);
81
-
82
- // UI-based project CRUD/build removed intentionally
83
-
84
- const formatLastModified = (date: Date) => {
85
- const now = new Date();
86
- const diffDays = Math.floor((now.getTime() - date.getTime()) / (1000 * 60 * 60 * 24));
87
-
88
- if (diffDays === 0) return 'Today';
89
- if (diffDays === 1) return 'Yesterday';
90
- if (diffDays < 7) return `${diffDays} days ago`;
91
- return date.toLocaleDateString();
92
- };
93
-
94
- const getTypeColor = (type: Project['sceneType']) => {
95
- switch (type) {
96
- case 'typescript': return 'primary';
97
- case 'javascript': return 'warning';
98
- case 'shader': return 'secondary';
99
- default: return 'default';
100
- }
101
- };
102
-
103
- const getTypeLabel = (type: Project['sceneType']) => {
104
- switch (type) {
105
- case 'typescript': return 'TS';
106
- case 'javascript': return 'JS';
107
- case 'shader': return 'GLSL';
108
- default: return 'UNKNOWN';
109
- }
110
- };
111
-
112
- return (
113
- <div className={`space-y-4 ${className}`}>
114
-
115
-
116
- {/* Projects List */}
117
- <div className="space-y-2">
118
- <div className="text-white/60 text-xs font-medium uppercase tracking-wider px-1">
119
- Projects ({projects.length})
120
- </div>
121
-
122
- {projects.length === 0 ? (
123
- <div className="text-center py-8 text-white/40">
124
- <FolderIcon className="w-8 h-8 mx-auto mb-2" />
125
- <p className="text-sm">No projects yet</p>
126
- <p className="text-xs mt-1">Create your first scene project</p>
127
- </div>
128
- ) : (
129
- <div className="space-y-1">
130
- {projects
131
- .sort((a, b) => b.lastModified.getTime() - a.lastModified.getTime())
132
- .map((project) => (
133
- <Card
134
- key={project.id}
135
- className={`
136
- bg-black/20 border-white/10 hover:bg-white/10 transition-colors
137
- ${currentProject?.id === project.id ? 'border-primary-500 bg-primary-500/10' : ''}
138
- `}
139
- >
140
- <CardBody className="p-3">
141
- <div className="flex items-center justify-between">
142
- <div
143
- className="flex-1 min-w-0 cursor-pointer"
144
- onClick={() => renamingId !== project.id && onProjectSwitch?.(project)}
145
- >
146
- {false ? (
147
- <></>
148
- ) : (
149
- <div className="space-y-1">
150
- <div className="flex items-center gap-2">
151
- <span className="text-white font-medium text-sm truncate">
152
- {project.name}
153
- </span>
154
- <div className="flex items-center gap-1">
155
- <Chip
156
- color={getTypeColor(project.sceneType) as any}
157
- size="sm"
158
- variant="flat"
159
- className="text-xs h-5 min-w-0 px-1"
160
- >
161
- {getTypeLabel(project.sceneType)}
162
- </Chip>
163
- {project.isBuilt && (
164
- <Tooltip content="Built and ready to deploy" className="bg-black/80 text-white">
165
- <DocumentDuplicateIcon className="w-3 h-3 text-green-400" />
166
- </Tooltip>
167
- )}
168
- </div>
169
- </div>
170
- <div className="flex items-center gap-1 text-white/40 text-xs">
171
- <ClockIcon className="w-3 h-3" />
172
- {formatLastModified(project.lastModified)}
173
- </div>
174
- </div>
175
- )}
176
- </div>
177
-
178
-
179
- </div>
180
- </CardBody>
181
- </Card>
182
- ))}
183
- </div>
184
- )}
185
- </div>
186
-
187
- {/* Create/Delete/Rename modals removed intentionally to keep UI clean */}
188
- </div>
189
- );
190
- };
191
-
192
- export default ProjectSwitcherMenu;