@vgai/editor 0.4.0-canary.20260715.0 → 0.4.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 (47) hide show
  1. package/dist/assets/{axe-C7YBtOuM.js → axe-BJjvBeOZ.js} +1 -1
  2. package/dist/assets/{browserAll-DDtGGE48.js → browserAll-Dn0pgD87.js} +1 -1
  3. package/dist/assets/{create-runtime-DbTlBlKG.js → create-runtime-BF9OD-U8.js} +1 -1
  4. package/dist/assets/{game-Dch9sAPc.js → game-B346oj_f.js} +1 -1
  5. package/dist/assets/{game-BE0r7DMI.js → game-BCNN63uV.js} +1 -1
  6. package/dist/assets/{game-SAFn90pA.js → game-BR0GBNgF.js} +1 -1
  7. package/dist/assets/{game-Cqzj_lpD.js → game-CLNm2g0y.js} +1 -1
  8. package/dist/assets/{game-CcHfYxjP.js → game-DQxhCYsZ.js} +1 -1
  9. package/dist/assets/{game-BdTHR2_X.js → game-DeTGdgYt.js} +1 -1
  10. package/dist/assets/{game-loop-DMIgSMV-.js → game-loop-t5W_oqxz.js} +1 -1
  11. package/dist/assets/{game-source-Dk83w26t.js → game-source-DzE9taML.js} +1 -1
  12. package/dist/assets/{game-DSZdeCHu.js → game-u6c2Patu.js} +1 -1
  13. package/dist/assets/{game-C3iQGSqo.js → game-umrHIqFB.js} +1 -1
  14. package/dist/assets/{index-C-LhOTBN.js → index-CgcH1RpF.js} +1 -1
  15. package/dist/assets/{index-CDkxceqE.js → index-D3tcNB2T.js} +1 -1
  16. package/dist/assets/{index-CQEfi217.js → index-DbQzGLxv.js} +771 -771
  17. package/dist/assets/{index-4idIsHHJ.js → index-Fc8Ezr20.js} +1 -1
  18. package/dist/assets/index-bAGhEnnO.css +1 -0
  19. package/dist/assets/{ingest-siblings-s0P5I1Ub.js → ingest-siblings-CW_xbvrF.js} +1 -1
  20. package/dist/assets/{mount-manifest-DXMOlF79.js → mount-manifest-DgUscyaD.js} +1 -1
  21. package/dist/assets/{react-18-C9eHn8x1.js → react-18-C4tVCii_.js} +1 -1
  22. package/dist/assets/webworkerAll-BA4aq7xq.js +1 -0
  23. package/dist/assets/{world-documents-GM0a9Kv7.js → world-documents-BSaA5YIF.js} +1 -1
  24. package/dist/index.html +2 -2
  25. package/dist-server/packaged.mjs +21 -1
  26. package/package.json +3 -3
  27. package/server/packaged.ts +20 -0
  28. package/src/asset-editor-context.tsx +130 -0
  29. package/src/asset-preview.ts +4 -0
  30. package/src/asset-selection.ts +9 -4
  31. package/src/asset-workflow/thumbnail-system.ts +16 -7
  32. package/src/components/AssetBrowser.tsx +330 -539
  33. package/src/components/AssetEditorShell.tsx +42 -112
  34. package/src/components/AssetImportDetails.tsx +24 -6
  35. package/src/components/GameHierarchy.tsx +26 -1
  36. package/src/components/Inspector.tsx +38 -2
  37. package/src/components/OnlineAssetBrowser.tsx +295 -343
  38. package/src/components/WorkspaceDock.tsx +6 -12
  39. package/src/components/asset-documents.tsx +41 -12
  40. package/src/components/asset-selection-section.tsx +34 -1
  41. package/src/components/asset-viewers/ModelViewer.tsx +7 -4
  42. package/src/components/asset-viewers/OnlineAssetDetail.tsx +233 -205
  43. package/src/components/asset-workflow.css +197 -264
  44. package/src/editor-api.ts +1 -1
  45. package/template/vgai.game.json +1 -1
  46. package/dist/assets/index-Dvi-V0NE.css +0 -1
  47. package/dist/assets/webworkerAll-Fn0e-ouF.js +0 -1
@@ -1,5 +1,4 @@
1
1
  .vgai-asset-library-panel {
2
- container-type: inline-size;
3
2
  width: 100%;
4
3
  height: 100%;
5
4
  min-width: 0;
@@ -7,142 +6,256 @@
7
6
  overflow: hidden;
8
7
  }
9
8
 
10
- .vgai-asset-library {
11
- --asset-hit-target: 28px;
12
- --asset-focus-ring: 0 0 0 2px var(--vgai-accent);
13
- --asset-pane-gap: 8px;
14
- --asset-warning: var(--vgai-accent);
15
- --asset-error: var(--vgai-danger);
16
- --asset-progress: var(--vgai-accent);
17
- --asset-card-width: 168px;
18
- --asset-card-height: 214px;
19
- display: grid;
20
- grid-template-columns: var(--asset-source-width, 210px) minmax(320px, 1fr) var(
21
- --asset-details-width,
22
- 360px
23
- );
9
+ .vgai-asset-library-navigator {
10
+ display: flex;
11
+ flex-direction: column;
24
12
  width: 100%;
25
13
  height: 100%;
14
+ min-width: 0;
26
15
  min-height: 0;
27
- position: relative;
28
16
  color: var(--vgai-text-1);
29
17
  background: var(--vgai-bg-1);
30
18
  }
31
19
 
32
- .vgai-asset-library button:focus-visible,
33
- .vgai-asset-editor button:focus-visible,
34
- .vgai-asset-browser button:focus-visible,
35
- .vgai-asset-library input:focus-visible,
36
- .vgai-asset-editor input:focus-visible {
37
- outline: 0;
38
- box-shadow: var(--asset-focus-ring);
20
+ .vgai-asset-library-navigator__controls {
21
+ display: flex;
22
+ flex-direction: column;
23
+ gap: 5px;
24
+ padding: 6px;
25
+ border-bottom: 1px solid var(--vgai-border-1);
26
+ background: var(--vgai-bg-2);
39
27
  }
40
28
 
41
- .vgai-asset-library[data-density="compact"] {
42
- --asset-card-width: 136px;
43
- --asset-card-height: 178px;
29
+ .vgai-asset-library-navigator__search-row {
30
+ display: flex;
31
+ gap: 4px;
44
32
  }
45
33
 
46
- .vgai-asset-library[data-density="large"] {
47
- --asset-card-width: 208px;
48
- --asset-card-height: 254px;
34
+ .vgai-asset-library-navigator__search-row > .vgai-input {
35
+ width: 100%;
36
+ min-width: 0;
37
+ box-sizing: border-box;
38
+ }
39
+
40
+ .vgai-asset-library-navigator__filters {
41
+ display: grid;
42
+ grid-template-columns: repeat(3, minmax(0, 1fr));
43
+ gap: 4px;
49
44
  }
50
45
 
51
- .vgai-asset-library__sources,
52
- .vgai-asset-library__details {
46
+ .vgai-asset-library-navigator__filters .vgai-select {
47
+ width: 100%;
53
48
  min-width: 0;
49
+ }
50
+
51
+ .vgai-asset-library-navigator__status {
52
+ color: var(--vgai-text-3);
53
+ font-size: 10px;
54
+ }
55
+
56
+ .vgai-asset-library-navigator__results {
57
+ flex: 1;
54
58
  min-height: 0;
55
59
  overflow: auto;
56
- background: var(--vgai-bg-2);
60
+ padding: 4px;
57
61
  }
58
62
 
59
- .vgai-asset-library[data-source-collapsed="true"] .vgai-asset-library__sources,
60
- .vgai-asset-library[data-details-collapsed="true"] .vgai-asset-library__details {
61
- visibility: hidden;
62
- border: 0;
63
- padding: 0;
63
+ .vgai-asset-library-navigator__result-space {
64
+ position: relative;
64
65
  }
65
66
 
66
- .vgai-asset-source-size {
67
- position: absolute;
68
- left: 8px;
69
- bottom: 8px;
70
- width: min(180px, calc(var(--asset-source-width) - 16px));
67
+ .vgai-asset-library-navigator__filter-drawer {
68
+ min-height: 0;
69
+ max-height: 58%;
70
+ overflow: auto;
71
+ border-bottom: 1px solid var(--vgai-border-1);
72
+ background: var(--vgai-bg-2);
71
73
  }
72
74
 
73
- .vgai-asset-pane-size {
74
- padding: 6px 10px 0;
75
- color: var(--vgai-text-3);
75
+ .vgai-asset-library-navigator__filter-heading {
76
+ position: sticky;
77
+ z-index: 1;
78
+ top: 0;
79
+ display: flex;
80
+ align-items: center;
81
+ justify-content: space-between;
82
+ padding: 5px 7px;
83
+ border-bottom: 1px solid var(--vgai-border-1);
84
+ background: var(--vgai-bg-2);
85
+ color: var(--vgai-text-2);
76
86
  font-size: 10px;
87
+ font-weight: 650;
88
+ }
89
+
90
+ .vgai-asset-library-navigator__source-filters {
91
+ display: block;
92
+ overflow: visible;
93
+ padding: 10px;
94
+ border: 0;
95
+ background: var(--vgai-bg-2);
96
+ }
97
+
98
+ .vgai-asset-library-navigator__save-search {
99
+ width: calc(100% - 12px);
100
+ margin: 6px 6px 0;
77
101
  }
78
102
 
79
- .vgai-asset-pane-size label {
103
+ .vgai-asset-library-row {
104
+ position: absolute;
105
+ right: 0;
106
+ left: 0;
107
+ width: 100%;
108
+ min-width: 0;
109
+ min-height: 52px;
80
110
  display: flex;
81
111
  align-items: center;
82
112
  gap: 8px;
113
+ padding: 5px;
114
+ border: 1px solid transparent;
115
+ border-radius: var(--vgai-radius-sm, 3px);
116
+ background: transparent;
117
+ color: var(--vgai-text-1);
118
+ text-align: left;
83
119
  }
84
120
 
85
- .vgai-asset-library__sources {
86
- border-right: 1px solid var(--vgai-border-1);
87
- padding: 10px;
121
+ .vgai-asset-library-row:hover,
122
+ .vgai-asset-library-row[aria-selected="true"] {
123
+ background: var(--vgai-accent-muted);
88
124
  }
89
125
 
90
- .vgai-asset-library__details {
91
- border-left: 1px solid var(--vgai-border-1);
126
+ .vgai-asset-library-row[aria-selected="true"] {
127
+ border-color: var(--vgai-accent);
92
128
  }
93
129
 
94
- .vgai-asset-library__results {
130
+ .vgai-asset-library-row .vgai-asset-card__preview {
131
+ width: 44px;
132
+ height: 40px;
133
+ flex: 0 0 44px;
134
+ aspect-ratio: auto;
135
+ }
136
+
137
+ .vgai-asset-library-row__copy {
95
138
  min-width: 0;
96
- min-height: 0;
97
139
  display: flex;
140
+ flex: 1;
98
141
  flex-direction: column;
142
+ gap: 2px;
99
143
  }
100
144
 
101
- .vgai-asset-library__toolbar {
102
- display: flex;
103
- flex-wrap: wrap;
104
- align-items: center;
105
- gap: 8px;
106
- min-height: 44px;
107
- padding: 7px 10px;
145
+ .vgai-asset-library-row__name,
146
+ .vgai-asset-library-row__meta {
147
+ overflow: hidden;
148
+ text-overflow: ellipsis;
149
+ white-space: nowrap;
150
+ }
151
+
152
+ .vgai-asset-library-row__name {
153
+ font-size: 11px;
154
+ font-weight: 550;
155
+ }
156
+
157
+ .vgai-asset-library-row__meta {
158
+ color: var(--vgai-text-3);
159
+ font-size: 10px;
160
+ }
161
+
162
+ .vgai-asset-library-navigator__loading {
163
+ position: absolute;
164
+ right: 8px;
165
+ bottom: 8px;
166
+ color: var(--vgai-text-2);
167
+ font-size: 10px;
168
+ }
169
+
170
+ .vgai-project-assets-toolbar {
171
+ flex: 0 0 auto;
108
172
  border-bottom: 1px solid var(--vgai-border-1);
109
173
  background: var(--vgai-bg-2);
110
174
  }
111
175
 
112
- .vgai-asset-library__grid {
176
+ .vgai-project-assets-toolbar__row {
177
+ width: 100%;
178
+ min-width: 0;
179
+ min-height: 28px;
180
+ box-sizing: border-box;
181
+ gap: 4px;
182
+ padding: 2px 4px;
183
+ border: 0;
184
+ background: transparent;
185
+ }
186
+
187
+ .vgai-project-assets-toolbar__row + .vgai-project-assets-toolbar__row {
188
+ border-top: 1px solid var(--vgai-border-1);
189
+ }
190
+
191
+ .vgai-project-assets-toolbar__select {
192
+ min-width: 0;
193
+ flex: 1 1 64px;
194
+ width: 64px;
195
+ }
196
+
197
+ .vgai-project-assets-toolbar__more {
113
198
  position: relative;
114
- flex: 1;
115
- min-height: 0;
116
- overflow: auto;
117
- outline: none;
199
+ flex: 0 0 auto;
118
200
  }
119
201
 
120
- .vgai-asset-card {
202
+ .vgai-project-assets-toolbar__menu {
121
203
  position: absolute;
204
+ z-index: 1000;
205
+ top: calc(100% + 3px);
206
+ right: 0;
207
+ min-width: 170px;
208
+ }
209
+
210
+ .vgai-project-assets-results {
211
+ background: var(--vgai-bg-0);
212
+ box-shadow: inset 0 1px 0 var(--vgai-border-1);
213
+ }
214
+
215
+ .vgai-project-asset-entry {
122
216
  box-sizing: border-box;
123
- width: var(--asset-card-width);
124
- height: calc(var(--asset-card-height) - 8px);
125
- padding: 8px;
126
- border: 1px solid transparent;
127
- border-radius: var(--vgai-radius-md, 5px);
128
- background: transparent;
129
- color: var(--vgai-text-1);
130
- text-align: left;
131
- cursor: pointer;
217
+ border: 1px solid var(--vgai-border-1);
218
+ background: var(--vgai-bg-1);
219
+ transition:
220
+ border-color 90ms ease,
221
+ background-color 90ms ease;
132
222
  }
133
223
 
134
- .vgai-asset-card:hover {
135
- background: var(--vgai-accent-muted);
224
+ .vgai-project-asset-entry:hover {
225
+ border-color: var(--vgai-border-2);
226
+ background: var(--vgai-bg-2);
136
227
  }
137
228
 
138
- .vgai-asset-card[aria-selected="true"] {
229
+ .vgai-project-asset-entry[data-selected="true"] {
139
230
  border-color: var(--vgai-accent);
140
231
  background: var(--vgai-accent-muted);
232
+ box-shadow: inset 0 0 0 1px var(--vgai-accent);
141
233
  }
142
234
 
143
- .vgai-asset-card:focus-visible {
144
- outline: 2px solid var(--vgai-focus, var(--vgai-accent));
145
- outline-offset: -2px;
235
+ .vgai-project-asset-entry__preview {
236
+ box-sizing: border-box;
237
+ border: 1px solid var(--vgai-border-1);
238
+ background:
239
+ linear-gradient(45deg, rgb(255 255 255 / 2%) 25%, transparent 25%) 0 0 / 12px 12px,
240
+ linear-gradient(-45deg, rgb(255 255 255 / 2%) 25%, transparent 25%) 0 6px / 12px 12px,
241
+ var(--vgai-bg-inset);
242
+ }
243
+
244
+ .vgai-project-asset-entry[data-view="list"] {
245
+ border-color: transparent;
246
+ background: transparent;
247
+ }
248
+
249
+ .vgai-project-asset-entry[data-view="list"] .vgai-project-asset-entry__preview {
250
+ border: 0;
251
+ background: transparent;
252
+ }
253
+
254
+ .vgai-asset-editor button:focus-visible,
255
+ .vgai-asset-browser button:focus-visible,
256
+ .vgai-asset-editor input:focus-visible {
257
+ outline: 0;
258
+ box-shadow: 0 0 0 2px var(--vgai-accent);
146
259
  }
147
260
 
148
261
  .vgai-asset-card__preview {
@@ -245,108 +358,6 @@
245
358
  flex: 1;
246
359
  }
247
360
 
248
- @container (max-width: 1050px) {
249
- .vgai-asset-library {
250
- grid-template-columns: minmax(300px, 1fr) minmax(280px, 42%);
251
- }
252
- .vgai-asset-library__sources {
253
- display: none;
254
- }
255
- }
256
-
257
- @container (max-width: 720px) {
258
- .vgai-asset-library {
259
- grid-template-columns: 1fr;
260
- }
261
- .vgai-asset-library__details {
262
- display: none;
263
- }
264
- }
265
-
266
- @container (max-width: 480px) {
267
- .vgai-asset-library {
268
- --asset-card-width: 136px;
269
- --asset-card-height: 178px;
270
- }
271
-
272
- .vgai-asset-library__toolbar {
273
- display: grid;
274
- grid-template-columns: minmax(0, 1fr);
275
- gap: 5px;
276
- min-height: 0;
277
- padding: 6px;
278
- }
279
-
280
- .vgai-asset-library__toolbar .vgai-input {
281
- width: 100%;
282
- min-width: 0;
283
- }
284
-
285
- .vgai-asset-library__filters-toggle,
286
- .vgai-asset-library__sort,
287
- .vgai-asset-library__density,
288
- .vgai-asset-library__save-search,
289
- .vgai-asset-library__details-toggle {
290
- display: none;
291
- }
292
-
293
- .vgai-asset-library__status {
294
- padding-inline: 2px;
295
- }
296
- }
297
-
298
- .vgai-asset-tree {
299
- width: 150px;
300
- min-width: 118px;
301
- overflow: auto;
302
- padding: 6px;
303
- border-right: 1px solid var(--vgai-border-1);
304
- background: var(--vgai-bg-2);
305
- }
306
-
307
- .vgai-asset-tree-row {
308
- width: 100%;
309
- min-height: 26px;
310
- display: flex;
311
- align-items: center;
312
- gap: 5px;
313
- border-radius: 3px;
314
- background: transparent;
315
- color: var(--vgai-text-2);
316
- text-align: left;
317
- }
318
-
319
- .vgai-asset-tree-row:hover,
320
- .vgai-asset-tree-row:has(.vgai-asset-tree-target[aria-current="page"]) {
321
- background: var(--vgai-accent-muted);
322
- color: var(--vgai-text-1);
323
- }
324
-
325
- .vgai-asset-tree-toggle,
326
- .vgai-asset-tree-target {
327
- min-height: 24px;
328
- border: 0;
329
- background: transparent;
330
- color: inherit;
331
- cursor: pointer;
332
- }
333
-
334
- .vgai-asset-tree-toggle {
335
- width: 20px;
336
- padding: 0;
337
- }
338
-
339
- .vgai-asset-tree-target {
340
- min-width: 0;
341
- flex: 1;
342
- display: flex;
343
- align-items: center;
344
- gap: 5px;
345
- padding: 0;
346
- overflow: hidden;
347
- text-align: left;
348
- }
349
-
350
361
  .vgai-asset-context-menu {
351
362
  position: fixed;
352
363
  z-index: 10000;
@@ -390,35 +401,12 @@
390
401
  height: 100%;
391
402
  min-width: 0;
392
403
  min-height: 0;
393
- display: grid;
394
- grid-template-columns: var(--asset-editor-structure-width, 240px) minmax(280px, 1fr) var(
395
- --asset-editor-details-width,
396
- 300px
397
- );
398
- grid-template-rows: auto minmax(0, 1fr) auto;
399
- grid-template-areas: "toolbar toolbar toolbar" "structure viewport details" "status status status";
404
+ display: flex;
405
+ flex-direction: column;
400
406
  background: var(--vgai-bg-1);
401
407
  }
402
408
 
403
- .vgai-asset-editor[data-structure-collapsed="true"] {
404
- grid-template-columns: 0 minmax(280px, 1fr) var(--asset-editor-details-width, 300px);
405
- }
406
- .vgai-asset-editor[data-details-collapsed="true"] {
407
- grid-template-columns: var(--asset-editor-structure-width, 240px) minmax(280px, 1fr) 0;
408
- }
409
- .vgai-asset-editor[data-structure-collapsed="true"][data-details-collapsed="true"] {
410
- grid-template-columns: 0 minmax(280px, 1fr) 0;
411
- }
412
- .vgai-asset-editor[data-structure-collapsed="true"] .vgai-asset-editor__structure,
413
- .vgai-asset-editor[data-details-collapsed="true"] .vgai-asset-editor__details {
414
- visibility: hidden;
415
- overflow: hidden;
416
- padding: 0;
417
- border: 0;
418
- }
419
-
420
409
  .vgai-asset-editor__toolbar {
421
- grid-area: toolbar;
422
410
  min-height: 40px;
423
411
  display: flex;
424
412
  align-items: center;
@@ -427,13 +415,6 @@
427
415
  border-bottom: 1px solid var(--vgai-border-1);
428
416
  background: var(--vgai-bg-2);
429
417
  }
430
- .vgai-asset-editor__toolbar strong {
431
- min-width: 100px;
432
- max-width: 260px;
433
- overflow: hidden;
434
- text-overflow: ellipsis;
435
- white-space: nowrap;
436
- }
437
418
  .vgai-asset-editor__commands {
438
419
  flex: 1;
439
420
  display: flex;
@@ -449,58 +430,10 @@
449
430
  background: var(--vgai-bg-3);
450
431
  color: var(--vgai-text-1);
451
432
  }
452
- .vgai-asset-editor__structure {
453
- grid-area: structure;
454
- border-right: 1px solid var(--vgai-border-1);
455
- }
456
- .vgai-asset-editor__details {
457
- grid-area: details;
458
- border-left: 1px solid var(--vgai-border-1);
459
- }
460
- .vgai-asset-editor__structure,
461
- .vgai-asset-editor__details {
462
- min-width: 0;
463
- min-height: 0;
464
- overflow: auto;
465
- padding: 8px;
466
- background: var(--vgai-bg-2);
467
- }
468
433
  .vgai-asset-editor__viewport {
469
- grid-area: viewport;
434
+ flex: 1;
470
435
  min-width: 0;
471
436
  min-height: 0;
472
437
  overflow: auto;
473
438
  position: relative;
474
439
  }
475
- .vgai-asset-editor__status {
476
- grid-area: status;
477
- min-height: 28px;
478
- padding: 5px 10px;
479
- border-top: 1px solid;
480
- background: var(--vgai-bg-2);
481
- font-size: 11px;
482
- }
483
- .vgai-asset-editor__resize {
484
- display: flex;
485
- flex-direction: column;
486
- gap: 3px;
487
- margin-top: 10px;
488
- color: var(--vgai-text-3);
489
- font-size: 10px;
490
- }
491
-
492
- @media (max-width: 900px) {
493
- .vgai-asset-editor {
494
- grid-template-columns: minmax(0, 1fr);
495
- grid-template-rows: auto minmax(260px, 1fr) auto auto;
496
- grid-template-areas: "toolbar" "viewport" "details" "status";
497
- }
498
- .vgai-asset-editor__structure {
499
- display: none;
500
- }
501
- .vgai-asset-editor__details {
502
- max-height: 220px;
503
- border-left: 0;
504
- border-top: 1px solid var(--vgai-border-1);
505
- }
506
- }
package/src/editor-api.ts CHANGED
@@ -906,7 +906,7 @@ export async function getOnlineAssetFiles(source: string, id: string): Promise<A
906
906
  return data.files;
907
907
  }
908
908
 
909
- /** Resolve a read-only Asset Lab model from the editor's catalog cache. */
909
+ /** Resolve a read-only interactive model preview from the editor's catalog cache. */
910
910
  export async function getOnlineAssetPreview(
911
911
  source: string,
912
912
  id: string,
@@ -6,7 +6,7 @@
6
6
  "editorPort": 5173,
7
7
  "version": "0.1.0",
8
8
  "engine": {
9
- "version": "0.4.0-canary.20260715.0"
9
+ "version": "0.4.0"
10
10
  },
11
11
  "resolution": {
12
12
  "width": 1280,