@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.
- package/README.md +155 -60
- package/bin/viji.js +9 -29
- package/dist/assets/artist-dts-BHUsvSI6.js +613 -0
- package/dist/assets/artist-dts-p5-Cyw8vmy_.js +736 -0
- package/dist/assets/core-CiQx3w0t.js +12 -0
- package/dist/assets/dark-plus-C3mMm8J8.js +1 -0
- package/dist/assets/docs-api-PBLtY4Ni.js +12381 -0
- package/dist/assets/engine-javascript-CXyY7cc8.js +141 -0
- package/dist/assets/essentia-wasm.web-0S-sW98u-CYV1l1zv.js +38 -0
- package/dist/assets/essentia.js-core.es-DnrJE0uR-DOSrF5_G.js +32 -0
- package/dist/assets/glsl-DMyvO4G4.js +1 -0
- package/dist/assets/index-BhFxsauQ.js +215 -0
- package/dist/assets/index-BqhVeA7U.css +1 -0
- package/dist/assets/index-T4TOjvD0.js +1 -0
- package/dist/assets/index-Wz9WqGqz.js +52 -0
- package/dist/assets/index-t24aGwla.js +1 -0
- package/dist/assets/javascript-wDzz0qaB.js +1 -0
- package/dist/assets/shader-uniforms-GdaUkQPK.js +1 -0
- package/dist/assets/typescript-BPQ3VLAy.js +1 -0
- package/dist/assets/viji.worker-CQSJ0SiO-ljtBlcNZ.js +27018 -0
- package/{index.html → dist/index.html} +2 -1
- package/package.json +31 -35
- package/src/cli/commands/build.js +50 -99
- package/src/cli/commands/create.js +32 -47
- package/src/cli/commands/dev.js +30 -97
- package/src/cli/server/dev-server.js +233 -0
- package/src/cli/server/scene-scanner.js +93 -0
- package/src/cli/server/vite-scene-plugin.d.ts +2 -0
- package/src/cli/server/vite-scene-plugin.js +134 -0
- package/src/cli/utils/cli-utils.js +29 -139
- package/src/cli/utils/scene-compiler.js +10 -17
- package/src/templates/scene-templates.js +85 -0
- package/.gitignore +0 -29
- package/eslint.config.js +0 -37
- package/postcss.config.js +0 -6
- package/scenes/audio-visualizer/main.js +0 -287
- package/scenes/core-demo/main.js +0 -532
- package/scenes/demo-scene/main.js +0 -619
- package/scenes/global.d.ts +0 -15
- package/scenes/particle-system/main.js +0 -349
- package/scenes/tsconfig.json +0 -12
- package/scenes/video-mirror/main.ts +0 -436
- package/src/App.css +0 -42
- package/src/App.tsx +0 -279
- package/src/cli/commands/init.js +0 -262
- package/src/components/SDKPage.tsx +0 -337
- package/src/components/core/CoreContainer.tsx +0 -126
- package/src/components/ui/DeviceSelectionList.tsx +0 -137
- package/src/components/ui/FPSCounter.tsx +0 -78
- package/src/components/ui/FileDropzonePanel.tsx +0 -120
- package/src/components/ui/FileListPanel.tsx +0 -285
- package/src/components/ui/InputExpansionPanel.tsx +0 -31
- package/src/components/ui/MediaPlayerControls.tsx +0 -191
- package/src/components/ui/MenuContainer.tsx +0 -71
- package/src/components/ui/ParametersMenu.tsx +0 -797
- package/src/components/ui/ProjectSwitcherMenu.tsx +0 -192
- package/src/components/ui/QuickInputControls.tsx +0 -542
- package/src/components/ui/SDKMenuSystem.tsx +0 -96
- package/src/components/ui/SettingsMenu.tsx +0 -346
- package/src/components/ui/SimpleInputControls.tsx +0 -137
- package/src/index.css +0 -68
- package/src/main.tsx +0 -10
- package/src/scenes-hmr.ts +0 -158
- package/src/services/project-filesystem.ts +0 -436
- package/src/stores/scene-player/index.ts +0 -3
- package/src/stores/scene-player/input-manager.store.ts +0 -1045
- package/src/stores/scene-player/scene-session.store.ts +0 -659
- package/src/styles/globals.css +0 -111
- package/src/templates/minimal-template.js +0 -11
- package/src/utils/debounce.js +0 -34
- package/src/vite-env.d.ts +0 -1
- package/tailwind.config.js +0 -18
- package/tsconfig.app.json +0 -27
- package/tsconfig.json +0 -27
- package/tsconfig.node.json +0 -27
- package/vite.config.ts +0 -54
- /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;
|