@fps-games/editor 0.2.1-beta.1 → 0.2.1-beta.2
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/dist/agent-bridge/capabilities/ui-regions.d.ts.map +1 -1
- package/dist/agent-bridge/capabilities/ui-regions.js +16 -0
- package/dist/agent-bridge/capabilities/ui-regions.js.map +1 -1
- package/dist/build-info.json +43 -43
- package/dist/internal/material-preview.d.ts +22 -0
- package/dist/internal/material-preview.d.ts.map +1 -0
- package/dist/internal/material-preview.js +186 -0
- package/dist/internal/material-preview.js.map +1 -0
- package/dist/internal/project-model-preview.d.ts +4 -0
- package/dist/internal/project-model-preview.d.ts.map +1 -0
- package/dist/internal/project-model-preview.js +359 -0
- package/dist/internal/project-model-preview.js.map +1 -0
- package/dist/local-editor-agent-context.d.ts +12 -1
- package/dist/local-editor-agent-context.d.ts.map +1 -1
- package/dist/local-editor-agent-context.js +47 -0
- package/dist/local-editor-agent-context.js.map +1 -1
- package/dist/local-editor-harness.d.ts +15 -2
- package/dist/local-editor-harness.d.ts.map +1 -1
- package/dist/local-editor-harness.js +310 -21
- package/dist/local-editor-harness.js.map +1 -1
- package/dist/local-editor-tools.d.ts +1 -0
- package/dist/local-editor-tools.d.ts.map +1 -1
- package/dist/local-editor-tools.js +3 -0
- package/dist/local-editor-tools.js.map +1 -1
- package/dist/playable-local-editor-host.d.ts +4 -0
- package/dist/playable-local-editor-host.d.ts.map +1 -1
- package/dist/playable-local-editor-host.js +27 -0
- package/dist/playable-local-editor-host.js.map +1 -1
- package/dist/playable-product-scene-capabilities.d.ts.map +1 -1
- package/dist/playable-product-scene-capabilities.js +9 -3
- package/dist/playable-product-scene-capabilities.js.map +1 -1
- package/dist/playable-standard-project.d.ts.map +1 -1
- package/dist/playable-standard-project.js +5 -2
- package/dist/playable-standard-project.js.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/package.json +7 -7
- package/node_modules/@fps-games/editor-babylon/dist/marker-overlay.js +24 -0
- package/node_modules/@fps-games/editor-babylon/dist/marker-overlay.js.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts +10 -1
- package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/projection.js +96 -1
- package/node_modules/@fps-games/editor-babylon/dist/projection.js.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/scene-view-spatial-overlay-controller.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/scene-view-spatial-overlay-controller.js +85 -22
- package/node_modules/@fps-games/editor-babylon/dist/scene-view-spatial-overlay-controller.js.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.d.ts +2 -0
- package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.js +150 -4
- package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.js.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.d.ts +1 -0
- package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.js +249 -15
- package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.js.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/types.d.ts +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/types.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/types.js.map +1 -1
- package/node_modules/@fps-games/editor-babylon/package.json +6 -6
- package/node_modules/@fps-games/editor-browser/dist/index.d.ts +5 -0
- package/node_modules/@fps-games/editor-browser/dist/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/index.js +3 -0
- package/node_modules/@fps-games/editor-browser/dist/index.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.d.ts +35 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.js +136 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.d.ts +46 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.js +283 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.d.ts +12 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.js +67 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.d.ts +6 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.js +9 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.d.ts +7 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.js +20 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.d.ts +9 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.js +219 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.d.ts +14 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.js +42 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-asset-kind.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-asset-kind.js +2 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-asset-kind.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.d.ts +27 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.js +288 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.d.ts +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.js +29 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.d.ts +20 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.js +321 -60
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.d.ts +2 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.js +4 -2
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts +63 -3
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.d.ts +9 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.js +88 -16
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts +2 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js +1463 -356
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.d.ts +13 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.js +15 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/package.json +7 -7
- package/node_modules/@fps-games/editor-core/dist/editor-tools.d.ts +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-tools.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-core/dist/editor-tools.js +3 -1
- package/node_modules/@fps-games/editor-core/dist/editor-tools.js.map +1 -1
- package/node_modules/@fps-games/editor-core/dist/viewport-tools.d.ts +11 -2
- package/node_modules/@fps-games/editor-core/dist/viewport-tools.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-core/dist/viewport-tools.js +12 -1
- package/node_modules/@fps-games/editor-core/dist/viewport-tools.js.map +1 -1
- package/node_modules/@fps-games/editor-core/package.json +6 -6
- package/node_modules/@fps-games/editor-forge-play/package.json +2 -2
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.d.ts +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.js +5 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.d.ts +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.js +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/handler.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/handler.js +15 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/handler.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/routes.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/routes.js +3 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/routes.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/types.d.ts +6 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/types.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/types.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/index.d.ts +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/index.js +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/index.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.d.ts +4 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.js +10 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.d.ts +4 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.js +4 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.js.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.d.ts +4 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.js +86 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.js.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.d.ts +9 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.js +76 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.js.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.d.ts +34 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.js +2 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.js.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.d.ts +4 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.js +40 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.d.ts +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.js +94 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.d.ts +14 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.js +101 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.js.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.d.ts +23 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.js +180 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.js.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/package.json +6 -6
- package/node_modules/@fps-games/editor-protocol/dist/agent.d.ts +23 -3
- package/node_modules/@fps-games/editor-protocol/dist/agent.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-protocol/dist/agent.js.map +1 -1
- package/node_modules/@fps-games/editor-protocol/package.json +2 -2
- package/node_modules/@fps-games/editor-tooling/package.json +3 -3
- package/node_modules/@fps-games/editor-ui/dist/editor-ui-theme.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-ui/dist/editor-ui-theme.js +103 -10
- package/node_modules/@fps-games/editor-ui/dist/editor-ui-theme.js.map +1 -1
- package/node_modules/@fps-games/editor-ui/package.json +1 -1
- package/node_modules/@fps-games/playable-assets/package.json +1 -1
- package/node_modules/@fps-games/playable-contracts/package.json +1 -1
- package/node_modules/@fps-games/playable-rendering/package.json +2 -2
- package/node_modules/@fps-games/playable-runtime/package.json +12 -12
- package/node_modules/@fps-games/playable-runtime-data/package.json +4 -4
- package/node_modules/@fps-games/playable-scene/package.json +2 -2
- package/node_modules/@fps-games/plugin-api/package.json +1 -1
- package/node_modules/@fps-games/plugin-assets/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-assets/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-assets/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-assets/package.json +5 -5
- package/node_modules/@fps-games/plugin-hierarchy/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-hierarchy/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-hierarchy/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-hierarchy/package.json +5 -5
- package/node_modules/@fps-games/plugin-host/package.json +2 -2
- package/node_modules/@fps-games/plugin-markers/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-markers/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-markers/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-markers/package.json +5 -5
- package/node_modules/@fps-games/plugin-materials/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-materials/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-materials/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-materials/package.json +5 -5
- package/node_modules/@fps-games/plugin-rendering/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-rendering/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-rendering/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-rendering/package.json +5 -5
- package/node_modules/@fps-games/plugin-scene/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-scene/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-scene/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-scene/package.json +5 -5
- package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-shadow-map-experiment/package.json +5 -5
- package/node_modules/@fps-games/plugin-shadows/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-shadows/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-shadows/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-shadows/package.json +7 -7
- package/package.json +22 -22
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
import { type EditorUiMount, type EditorUiLayerHost } from '@fps-games/editor-ui';
|
|
2
2
|
import type { LocalEditorAssetBrowserTab, LocalEditorBottomDockTab, LocalEditorBrowserInspectorConflictStrategy, LocalEditorBrowserInspectorControlBindingOptions, LocalEditorBrowserInspectorControlRegistration, LocalEditorBrowserInspectorControlRenderContext, LocalEditorBrowserInspectorEffectMode, LocalEditorBrowserInspectorObject, LocalEditorBrowserInspectorProperty, LocalEditorBrowserInspectorSection, LocalEditorBrowserUiAssetItem, LocalEditorBrowserUiState, LocalEditorRightDockTab, LocalEditorWorkbenchPanelDescriptor } from './local-editor-ui-types';
|
|
3
|
+
import { type LocalEditorAssetFilesystemViewMode } from './local-editor-asset-filesystem';
|
|
3
4
|
export declare function registerInspectorUiMount<T extends EditorUiMount>(mount: T): T;
|
|
4
5
|
export declare function disposeInspectorPanelUi(panel: HTMLElement): void;
|
|
6
|
+
export type LocalEditorAssetBrowserViewMode = LocalEditorAssetFilesystemViewMode;
|
|
7
|
+
export interface LocalEditorAssetBrowserViewState {
|
|
8
|
+
expandedFolderPaths?: ReadonlySet<string>;
|
|
9
|
+
folderPath?: string;
|
|
10
|
+
viewMode?: LocalEditorAssetBrowserViewMode;
|
|
11
|
+
selectedEntryPath?: string | null;
|
|
12
|
+
}
|
|
5
13
|
export type LocalEditorAssetPreviewVariant = 'list' | 'grid' | 'modal';
|
|
6
14
|
export interface LocalEditorBrowserInspectorRenderOptions<TDocument = unknown> {
|
|
7
15
|
title?: string;
|
|
@@ -13,7 +21,8 @@ export interface LocalEditorBrowserInspectorRenderOptions<TDocument = unknown> {
|
|
|
13
21
|
lockedVectorGroups?: ReadonlySet<string>;
|
|
14
22
|
}
|
|
15
23
|
export declare function renderBottomDockPanel<TDocument>(doc: Document, panel: HTMLElement, state: LocalEditorBrowserUiState<TDocument>, activeTab: LocalEditorBottomDockTab, activeAssetBrowserTab?: LocalEditorAssetBrowserTab): void;
|
|
16
|
-
export declare function renderWorkbenchBottomDockPanel<TDocument>(doc: Document, panel: HTMLElement, state: LocalEditorBrowserUiState<TDocument>, activeTab: LocalEditorBottomDockTab, panels?: LocalEditorWorkbenchPanelDescriptor[], activeAssetBrowserTab?: LocalEditorAssetBrowserTab): void;
|
|
24
|
+
export declare function renderWorkbenchBottomDockPanel<TDocument>(doc: Document, panel: HTMLElement, state: LocalEditorBrowserUiState<TDocument>, activeTab: LocalEditorBottomDockTab, panels?: LocalEditorWorkbenchPanelDescriptor[], activeAssetBrowserTab?: LocalEditorAssetBrowserTab, assetBrowserView?: LocalEditorAssetBrowserViewState): void;
|
|
25
|
+
export declare function syncLocalEditorAssetBrowserEffectiveFolderPath(panel: Pick<HTMLElement, 'dataset'>, content: Pick<HTMLElement, 'dataset'>): void;
|
|
17
26
|
export declare function renderWorkbenchRightDockTabs(doc: Document, panel: HTMLElement, activeTab: LocalEditorRightDockTab, panels?: LocalEditorWorkbenchPanelDescriptor[]): void;
|
|
18
27
|
export declare function renderMarkerPanel<TDocument>(doc: Document, panel: HTMLElement, state: LocalEditorBrowserUiState<TDocument>): void;
|
|
19
28
|
export declare function shouldShowPrefabModelAddAction<TDocument>(state: LocalEditorBrowserUiState<TDocument>, asset: LocalEditorBrowserUiAssetItem): boolean;
|
|
@@ -21,6 +30,16 @@ export declare function renderWorkbenchLeftDockTabs(doc: Document, panel: HTMLEl
|
|
|
21
30
|
export declare function renderRenderingPanel<TDocument>(doc: Document, panel: HTMLElement, state: LocalEditorBrowserUiState<TDocument>, options?: {
|
|
22
31
|
layerHost?: EditorUiLayerHost;
|
|
23
32
|
}): void;
|
|
33
|
+
export declare function resolveLocalEditorAssetBrowserTypeOptionTitle(title: string, itemCount: number, truncated: boolean): string;
|
|
34
|
+
export declare function resolveLocalEditorAssetBrowserFolderTitle(label: string, descendantItemCount: number, truncated: boolean): string;
|
|
35
|
+
export declare function resolveLocalEditorAssetBrowserCountLabel(input: {
|
|
36
|
+
matchingCount: number;
|
|
37
|
+
normalizedFilter: string;
|
|
38
|
+
resultLimited: boolean;
|
|
39
|
+
truncated: boolean;
|
|
40
|
+
typeLabel: string | null;
|
|
41
|
+
visibleCount: number;
|
|
42
|
+
}): string;
|
|
24
43
|
export declare function createAssetPreviewElement(doc: Document, asset: LocalEditorBrowserUiAssetItem, variant: LocalEditorAssetPreviewVariant): HTMLElement;
|
|
25
44
|
export declare function renderInspectorPanel<TDocument>(doc: Document, panel: HTMLElement, state: LocalEditorBrowserUiState<TDocument>, filter?: string, options?: LocalEditorBrowserInspectorRenderOptions<TDocument>): void;
|
|
26
45
|
export type LocalEditorBrowserInspectorAccessMode = 'editable' | 'mixed' | 'readonly' | 'runtime';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-editor-ui-panels.d.ts","sourceRoot":"","sources":["../src/local-editor-ui-panels.ts"],"names":[],"mappings":"AAAA,OAAO,EAWL,KAAK,aAAa,EAClB,KAAK,iBAAiB,EAEvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EACV,0BAA0B,EAG1B,wBAAwB,EAGxB,2CAA2C,EAC3C,gDAAgD,EAChD,8CAA8C,EAC9C,+CAA+C,EAC/C,qCAAqC,EACrC,iCAAiC,EACjC,mCAAmC,EACnC,kCAAkC,EAYlC,6BAA6B,EAC7B,yBAAyB,EACzB,uBAAuB,EACvB,mCAAmC,EACpC,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"local-editor-ui-panels.d.ts","sourceRoot":"","sources":["../src/local-editor-ui-panels.ts"],"names":[],"mappings":"AAAA,OAAO,EAWL,KAAK,aAAa,EAClB,KAAK,iBAAiB,EAEvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EACV,0BAA0B,EAG1B,wBAAwB,EAGxB,2CAA2C,EAC3C,gDAAgD,EAChD,8CAA8C,EAC9C,+CAA+C,EAC/C,qCAAqC,EACrC,iCAAiC,EACjC,mCAAmC,EACnC,kCAAkC,EAYlC,6BAA6B,EAC7B,yBAAyB,EACzB,uBAAuB,EACvB,mCAAmC,EACpC,MAAM,yBAAyB,CAAC;AA2BjC,OAAO,EAWL,KAAK,kCAAkC,EACxC,MAAM,iCAAiC,CAAC;AAYzC,wBAAgB,wBAAwB,CAAC,CAAC,SAAS,aAAa,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAI7E;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAgChE;AA2BD,MAAM,MAAM,+BAA+B,GAAG,kCAAkC,CAAC;AAEjF,MAAM,WAAW,gCAAgC;IAC/C,mBAAmB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,+BAA+B,CAAC;IAC3C,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,MAAM,MAAM,8BAA8B,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEvE,MAAM,WAAW,wCAAwC,CAAC,SAAS,GAAG,OAAO;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,SAAS,8CAA8C,CAAC,SAAS,CAAC,EAAE,CAAC;IAChF,eAAe,CAAC,EAAE,2CAA2C,CAAC;IAC9D,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,kBAAkB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC1C;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAC7C,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,yBAAyB,CAAC,SAAS,CAAC,EAC3C,SAAS,EAAE,wBAAwB,EACnC,qBAAqB,GAAE,0BAAkC,GACxD,IAAI,CAKN;AAED,wBAAgB,8BAA8B,CAAC,SAAS,EACtD,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,yBAAyB,CAAC,SAAS,CAAC,EAC3C,SAAS,EAAE,wBAAwB,EACnC,MAAM,GAAE,mCAAmC,EAAO,EAClD,qBAAqB,GAAE,0BAAkC,EACzD,gBAAgB,GAAE,gCAAqC,GACtD,IAAI,CAqCN;AAED,wBAAgB,8CAA8C,CAC5D,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,EACnC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,GACpC,IAAI,CAIN;AAiCD,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,uBAAuB,EAClC,MAAM,GAAE,mCAAmC,EAAO,GACjD,IAAI,CAgBN;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EACzC,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,yBAAyB,CAAC,SAAS,CAAC,GAC1C,IAAI,CAqBN;AAED,wBAAgB,8BAA8B,CAAC,SAAS,EACtD,KAAK,EAAE,yBAAyB,CAAC,SAAS,CAAC,EAC3C,KAAK,EAAE,6BAA6B,GACnC,OAAO,CAQT;AAED,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,WAAW,EACtB,MAAM,GAAE,mCAAmC,EAAO,GACjD,IAAI,CAaN;AAshBD,wBAAgB,oBAAoB,CAAC,SAAS,EAC5C,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,yBAAyB,CAAC,SAAS,CAAC,EAC3C,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,iBAAiB,CAAA;CAAO,GAC9C,IAAI,CAqDN;AAihCD,wBAAgB,6CAA6C,CAC3D,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,OAAO,GACjB,MAAM,CAIR;AAED,wBAAgB,yCAAyC,CACvD,KAAK,EAAE,MAAM,EACb,mBAAmB,EAAE,MAAM,EAC3B,SAAS,EAAE,OAAO,GACjB,MAAM,CAIR;AAED,wBAAgB,wCAAwC,CAAC,KAAK,EAAE;IAC9D,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,MAAM,CAUT;AAgED,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,6BAA6B,EACpC,OAAO,EAAE,8BAA8B,GACtC,WAAW,CAyGb;AA0HD,wBAAgB,oBAAoB,CAAC,SAAS,EAC5C,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,yBAAyB,CAAC,SAAS,CAAC,EAC3C,MAAM,SAAK,EACX,OAAO,GAAE,wCAAwC,CAAC,SAAS,CAAM,GAChE,IAAI,CA2DN;AA4JD,MAAM,MAAM,qCAAqC,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC;AAElG,MAAM,WAAW,wCAAwC;IACvD,MAAM,EAAE,qCAAqC,CAAC;IAC9C,MAAM,EAAE,qCAAqC,CAAC;IAC9C,eAAe,EAAE,OAAO,CAAC;CAC1B;AAID,wBAAgB,+CAA+C,CAAC,SAAS,EACvE,OAAO,EAAE,kCAAkC,CAAC,SAAS,CAAC,GACrD,wCAAwC,CAU1C;AA8ZD,wBAAgB,gDAAgD,CAAC,SAAS,EACxE,QAAQ,GAAE,SAAS,8CAA8C,CAAC,SAAS,CAAC,EAAO,EACnF,QAAQ,GAAE,2CAAqD,EAC/D,SAAS,CAAC,EAAE,iBAAiB,GAC5B,8CAA8C,CAAC,SAAS,CAAC,EAAE,CAS7D;AA0DD,wBAAgB,qDAAqD,CAAC,SAAS,EAC7E,aAAa,EAAE,SAAS,8CAA8C,CAAC,SAAS,CAAC,EAAE,EACnF,OAAO,EAAE,+CAA+C,CAAC,SAAS,CAAC,GAClE,8CAA8C,CAAC,SAAS,CAAC,GAAG,IAAI,CAKlE;AAqoED,wBAAgB,8CAA8C,CAAC,SAAS,EACtE,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,iCAAiC,CAAC,SAAS,CAAC,EACpD,QAAQ,EAAE,mCAAmC,CAAC,SAAS,CAAC,EACxD,OAAO,CAAC,EAAE,gDAAgD,GACzD,IAAI,CAqBN;AAsCD,wBAAgB,sCAAsC,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAO7E;AAED,wBAAgB,4CAA4C,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKlF;AAED,wBAAgB,2CAA2C,CACzD,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GAAG,OAAO,GACrB,MAAM,GAAG,IAAI,CAMf"}
|
|
@@ -4,6 +4,7 @@ import { createBadge, createAssetList, createDockTab, createEditorInputStyle, cr
|
|
|
4
4
|
import { configureLocalEditorDockPanelContent, createLocalEditorDockPanelViewport, renderLocalEditorDockTabStrip, } from './local-editor-ui-dock-panel.js';
|
|
5
5
|
import { clearElement, createButton, toTitle } from './local-editor-ui-shared.js';
|
|
6
6
|
import { resolveLocalEditorAssetBrowserTab, resolveLocalEditorBrowserAssetKind, } from './local-editor-ui-asset-kind.js';
|
|
7
|
+
import { createLocalEditorAssetFilesystemSnapshot, filterLocalEditorAssetFilesystemEntries, resolveLocalEditorAssetFilesystemBreadcrumbs, resolveLocalEditorAssetFilesystemEntryTab, resolveLocalEditorAssetFilesystemExistingFolderPath, resolveLocalEditorAssetFilesystemParentPath, resolveLocalEditorAssetFilesystemVisibleFolders, resolveLocalEditorProjectMediaThumbnailCacheKey, resolveLocalEditorProjectMediaThumbnailKind, } from './local-editor-asset-filesystem.js';
|
|
7
8
|
import { createLocalEditorBrowserInspectorVectorCopyPayload, } from './local-editor-inspector-clipboard.js';
|
|
8
9
|
import { resolveLocalEditorBrowserInspectorVectorGroupAxisFromPropertyPath, resolveLocalEditorBrowserInspectorVectorGroupPathFromProperties, } from './local-editor-inspector-groups.js';
|
|
9
10
|
const inspectorUiMounts = new WeakMap();
|
|
@@ -67,6 +68,7 @@ const ASSET_BROWSER_TABS = [
|
|
|
67
68
|
{ id: 'prefabs', label: '预制体', title: '显示预制体资产' },
|
|
68
69
|
{ id: 'materials', label: '材质', title: '显示项目材质资产' },
|
|
69
70
|
{ id: 'textures', label: '贴图', title: '显示贴图资产' },
|
|
71
|
+
{ id: 'audio', label: '音频', title: '显示音频资产' },
|
|
70
72
|
];
|
|
71
73
|
export function renderBottomDockPanel(doc, panel, state, activeTab, activeAssetBrowserTab = 'all') {
|
|
72
74
|
clearElement(panel);
|
|
@@ -76,7 +78,7 @@ export function renderBottomDockPanel(doc, panel, state, activeTab, activeAssetB
|
|
|
76
78
|
else
|
|
77
79
|
renderAssetBrowserContent(doc, panel, state, 'list', activeAssetBrowserTab);
|
|
78
80
|
}
|
|
79
|
-
export function renderWorkbenchBottomDockPanel(doc, panel, state, activeTab, panels = [], activeAssetBrowserTab = 'all') {
|
|
81
|
+
export function renderWorkbenchBottomDockPanel(doc, panel, state, activeTab, panels = [], activeAssetBrowserTab = 'all', assetBrowserView = {}) {
|
|
80
82
|
clearElement(panel);
|
|
81
83
|
const tabHeader = doc.createElement('div');
|
|
82
84
|
renderLocalEditorDockTabStrip(doc, {
|
|
@@ -97,10 +99,21 @@ export function renderWorkbenchBottomDockPanel(doc, panel, state, activeTab, pan
|
|
|
97
99
|
content.dataset.editorPanelId = activeTab;
|
|
98
100
|
content.style.cssText = 'flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden;padding:8px';
|
|
99
101
|
panel.appendChild(content);
|
|
100
|
-
if (activeTab === 'history')
|
|
102
|
+
if (activeTab === 'history') {
|
|
103
|
+
delete panel.dataset.editorAssetBrowserFolderPath;
|
|
101
104
|
renderHistoryPanel(doc, content, state.session?.history ?? null);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
renderAssetBrowserContent(doc, content, state, assetBrowserView.viewMode ?? 'grid', activeAssetBrowserTab, assetBrowserView.folderPath ?? '/', assetBrowserView.selectedEntryPath ?? null, assetBrowserView.expandedFolderPaths ?? new Set(['/']));
|
|
108
|
+
syncLocalEditorAssetBrowserEffectiveFolderPath(panel, content);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
export function syncLocalEditorAssetBrowserEffectiveFolderPath(panel, content) {
|
|
112
|
+
const effectiveFolderPath = content.dataset.editorAssetBrowserFolderPath;
|
|
113
|
+
if (effectiveFolderPath === undefined)
|
|
114
|
+
delete panel.dataset.editorAssetBrowserFolderPath;
|
|
102
115
|
else
|
|
103
|
-
|
|
116
|
+
panel.dataset.editorAssetBrowserFolderPath = effectiveFolderPath;
|
|
104
117
|
}
|
|
105
118
|
function appendDockTabs(doc, panel, activeTab) {
|
|
106
119
|
const tabs = doc.createElement('div');
|
|
@@ -1311,86 +1324,254 @@ function createHeadingLabel(doc, text) {
|
|
|
1311
1324
|
label.style.cssText = 'min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap';
|
|
1312
1325
|
return label;
|
|
1313
1326
|
}
|
|
1314
|
-
function renderAssetBrowserContent(doc, panel, state, variant = 'list', activeTab = 'all') {
|
|
1327
|
+
function renderAssetBrowserContent(doc, panel, state, variant = 'list', activeTab = 'all', requestedFolderPath = '/', selectedEntryPath = null, expandedFolderPaths = new Set(['/'])) {
|
|
1315
1328
|
configureLocalEditorDockPanelContent(panel);
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1329
|
+
panel.classList.add('fps-editor-ui-asset-filesystem');
|
|
1330
|
+
const snapshot = createLocalEditorAssetFilesystemSnapshot(state.assets, state.projectFiles);
|
|
1331
|
+
const folderPath = resolveLocalEditorAssetFilesystemExistingFolderPath(snapshot, requestedFolderPath);
|
|
1332
|
+
panel.dataset.editorAssetBrowserFolderPath = folderPath;
|
|
1333
|
+
const toolbar = doc.createElement('div');
|
|
1334
|
+
toolbar.className = 'fps-editor-ui-asset-toolbar';
|
|
1335
|
+
const toolbarPrimary = doc.createElement('div');
|
|
1336
|
+
toolbarPrimary.className = 'fps-editor-ui-asset-toolbar-group';
|
|
1337
|
+
if (folderPath === '/@editor/materials' || activeTab === 'materials') {
|
|
1338
|
+
const createMaterialButton = createToolbarButton(doc, '', 'plus');
|
|
1324
1339
|
createMaterialButton.dataset.editorCreateMaterialAsset = 'true';
|
|
1325
1340
|
createMaterialButton.title = '新建项目材质';
|
|
1326
|
-
createMaterialButton.
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
'padding:0 10px',
|
|
1330
|
-
'font-size:12px',
|
|
1331
|
-
'font-weight:800',
|
|
1332
|
-
'align-self:flex-start',
|
|
1333
|
-
].join(';');
|
|
1334
|
-
panel.appendChild(createMaterialButton);
|
|
1341
|
+
createMaterialButton.setAttribute('aria-label', createMaterialButton.title);
|
|
1342
|
+
createMaterialButton.dataset.editorAssetToolbarIcon = 'true';
|
|
1343
|
+
toolbarPrimary.appendChild(createMaterialButton);
|
|
1335
1344
|
}
|
|
1345
|
+
const parentFolderPath = resolveLocalEditorAssetFilesystemParentPath(snapshot, folderPath);
|
|
1346
|
+
const parentButton = createToolbarButton(doc, '', 'arrow-up');
|
|
1347
|
+
parentButton.dataset.editorAssetBrowserParent = 'true';
|
|
1348
|
+
parentButton.dataset.editorAssetToolbarIcon = 'true';
|
|
1349
|
+
parentButton.title = parentFolderPath ? '返回上一级目录' : '已位于项目根目录';
|
|
1350
|
+
parentButton.setAttribute('aria-label', parentButton.title);
|
|
1351
|
+
parentButton.disabled = !parentFolderPath;
|
|
1352
|
+
if (parentFolderPath)
|
|
1353
|
+
parentButton.dataset.editorAssetFolderPath = parentFolderPath;
|
|
1354
|
+
toolbarPrimary.appendChild(parentButton);
|
|
1355
|
+
const refreshButton = createToolbarButton(doc, '', 'refresh');
|
|
1356
|
+
refreshButton.dataset.editorAssetBrowserRefresh = 'true';
|
|
1357
|
+
refreshButton.dataset.editorAssetToolbarIcon = 'true';
|
|
1358
|
+
refreshButton.title = '刷新项目文件与资产';
|
|
1359
|
+
refreshButton.setAttribute('aria-label', refreshButton.title);
|
|
1360
|
+
toolbarPrimary.appendChild(refreshButton);
|
|
1361
|
+
const gridButton = createToolbarButton(doc, '', 'grid');
|
|
1362
|
+
gridButton.dataset.editorAssetViewMode = 'grid';
|
|
1363
|
+
gridButton.dataset.active = variant === 'grid' ? 'true' : 'false';
|
|
1364
|
+
gridButton.dataset.editorAssetToolbarIcon = 'true';
|
|
1365
|
+
gridButton.title = '网格视图';
|
|
1366
|
+
gridButton.setAttribute('aria-label', gridButton.title);
|
|
1367
|
+
gridButton.setAttribute('aria-pressed', variant === 'grid' ? 'true' : 'false');
|
|
1368
|
+
const listButton = createToolbarButton(doc, '', 'list');
|
|
1369
|
+
listButton.dataset.editorAssetViewMode = 'list';
|
|
1370
|
+
listButton.dataset.active = variant === 'list' ? 'true' : 'false';
|
|
1371
|
+
listButton.dataset.editorAssetToolbarIcon = 'true';
|
|
1372
|
+
listButton.title = '列表视图';
|
|
1373
|
+
listButton.setAttribute('aria-label', listButton.title);
|
|
1374
|
+
listButton.setAttribute('aria-pressed', variant === 'list' ? 'true' : 'false');
|
|
1375
|
+
toolbarPrimary.append(gridButton, listButton);
|
|
1376
|
+
toolbar.appendChild(toolbarPrimary);
|
|
1377
|
+
const typeFilter = doc.createElement('select');
|
|
1378
|
+
typeFilter.className = 'fps-editor-ui-asset-type-filter';
|
|
1379
|
+
typeFilter.dataset.editorAssetBrowserTypeFilter = 'true';
|
|
1380
|
+
typeFilter.title = '按资产类型筛选';
|
|
1381
|
+
for (const tab of ASSET_BROWSER_TABS) {
|
|
1382
|
+
const option = doc.createElement('option');
|
|
1383
|
+
option.value = tab.id;
|
|
1384
|
+
const itemCount = snapshot.entries.filter(entry => (entry.kind !== 'directory'
|
|
1385
|
+
&& (tab.id === 'all' || resolveLocalEditorAssetFilesystemEntryTab(entry) === tab.id))).length;
|
|
1386
|
+
option.textContent = tab.label;
|
|
1387
|
+
option.title = resolveLocalEditorAssetBrowserTypeOptionTitle(tab.title, itemCount, snapshot.truncated);
|
|
1388
|
+
typeFilter.appendChild(option);
|
|
1389
|
+
}
|
|
1390
|
+
typeFilter.value = activeTab;
|
|
1391
|
+
toolbar.appendChild(typeFilter);
|
|
1392
|
+
const search = doc.createElement('div');
|
|
1393
|
+
search.className = 'fps-editor-ui-asset-search';
|
|
1336
1394
|
const filter = doc.createElement('input');
|
|
1337
1395
|
filter.className = 'fps-editor-ui-search';
|
|
1338
1396
|
filter.type = 'search';
|
|
1339
|
-
filter.placeholder = '
|
|
1397
|
+
filter.placeholder = '搜索文件和资产';
|
|
1340
1398
|
filter.value = state.assetFilter;
|
|
1341
1399
|
filter.dataset.editorAssetFilter = 'true';
|
|
1342
|
-
|
|
1343
|
-
|
|
1400
|
+
const searchIcon = createLocalEditorIcon(doc, 'search', { size: 16 });
|
|
1401
|
+
searchIcon.classList.add('fps-editor-ui-asset-search-icon');
|
|
1402
|
+
const clearFilterButton = createToolbarButton(doc, '', 'close');
|
|
1403
|
+
clearFilterButton.dataset.editorAssetFilterClear = 'true';
|
|
1404
|
+
clearFilterButton.dataset.editorAssetToolbarIcon = 'true';
|
|
1405
|
+
clearFilterButton.title = '清除搜索';
|
|
1406
|
+
clearFilterButton.setAttribute('aria-label', clearFilterButton.title);
|
|
1407
|
+
clearFilterButton.hidden = state.assetFilter.length === 0;
|
|
1408
|
+
search.append(searchIcon, filter, clearFilterButton);
|
|
1409
|
+
toolbar.appendChild(search);
|
|
1410
|
+
panel.appendChild(toolbar);
|
|
1344
1411
|
const normalizedFilter = state.assetFilter.trim().toLowerCase();
|
|
1345
|
-
const
|
|
1346
|
-
|
|
1412
|
+
const typeFilterActive = activeTab !== 'all';
|
|
1413
|
+
const recursiveFilterActive = normalizedFilter.length > 0 || typeFilterActive;
|
|
1414
|
+
const folderEntries = filterLocalEditorAssetFilesystemEntries(snapshot, folderPath, recursiveFilterActive, activeTab);
|
|
1415
|
+
const matchingEntries = folderEntries.filter((entry) => {
|
|
1347
1416
|
if (!normalizedFilter)
|
|
1348
1417
|
return true;
|
|
1418
|
+
const asset = entry.asset;
|
|
1349
1419
|
return [
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
asset
|
|
1354
|
-
asset
|
|
1355
|
-
asset
|
|
1356
|
-
asset
|
|
1357
|
-
asset
|
|
1358
|
-
asset
|
|
1420
|
+
entry.label,
|
|
1421
|
+
entry.path,
|
|
1422
|
+
entry.extension ?? '',
|
|
1423
|
+
asset?.id ?? '',
|
|
1424
|
+
asset?.assetId ?? '',
|
|
1425
|
+
asset?.guid ?? '',
|
|
1426
|
+
asset?.label ?? '',
|
|
1427
|
+
asset?.kind ?? '',
|
|
1428
|
+
asset?.relativePath ?? '',
|
|
1429
|
+
asset?.meta ?? '',
|
|
1430
|
+
asset?.external?.platformAssetId ?? '',
|
|
1431
|
+
asset?.external?.assetPath ?? '',
|
|
1432
|
+
asset?.external?.assetUrl ?? '',
|
|
1359
1433
|
]
|
|
1360
1434
|
.some(value => value.toLowerCase().includes(normalizedFilter));
|
|
1361
|
-
})
|
|
1362
|
-
|
|
1435
|
+
});
|
|
1436
|
+
const filteredEntries = matchingEntries.slice(0, 200);
|
|
1437
|
+
const resultLimited = matchingEntries.length > filteredEntries.length;
|
|
1438
|
+
const body = doc.createElement('div');
|
|
1439
|
+
body.className = 'fps-editor-ui-asset-filesystem-body';
|
|
1440
|
+
const tree = doc.createElement('aside');
|
|
1441
|
+
tree.className = 'fps-editor-ui-asset-folder-tree';
|
|
1442
|
+
tree.setAttribute('aria-label', '资产目录');
|
|
1443
|
+
const visibleFolders = resolveLocalEditorAssetFilesystemVisibleFolders(snapshot, expandedFolderPaths);
|
|
1444
|
+
for (const folder of visibleFolders) {
|
|
1445
|
+
const hasChildFolders = snapshot.folders.some(candidate => candidate.parentPath === folder.path);
|
|
1446
|
+
const expanded = expandedFolderPaths.has(folder.path);
|
|
1447
|
+
const row = doc.createElement('div');
|
|
1448
|
+
row.className = 'fps-editor-ui-asset-folder-tree-row';
|
|
1449
|
+
row.style.setProperty('--fps-editor-asset-folder-depth', String(folder.depth));
|
|
1450
|
+
const toggle = doc.createElement('button');
|
|
1451
|
+
toggle.type = 'button';
|
|
1452
|
+
toggle.className = 'fps-editor-ui-asset-folder-toggle';
|
|
1453
|
+
toggle.dataset.editorAssetFolderToggle = folder.path;
|
|
1454
|
+
toggle.disabled = !hasChildFolders;
|
|
1455
|
+
toggle.title = hasChildFolders
|
|
1456
|
+
? `${expanded ? '折叠' : '展开'} ${folder.path === '/' ? snapshot.rootName : folder.label}`
|
|
1457
|
+
: '';
|
|
1458
|
+
toggle.setAttribute('aria-label', toggle.title || `${folder.label} 无子目录`);
|
|
1459
|
+
toggle.setAttribute('aria-expanded', hasChildFolders ? String(expanded) : 'false');
|
|
1460
|
+
if (hasChildFolders) {
|
|
1461
|
+
toggle.appendChild(createLocalEditorIcon(doc, expanded ? 'chevron-down' : 'chevron-right', { size: 13 }));
|
|
1462
|
+
}
|
|
1463
|
+
const button = doc.createElement('button');
|
|
1464
|
+
button.type = 'button';
|
|
1465
|
+
button.className = 'fps-editor-ui-asset-folder-row';
|
|
1466
|
+
button.dataset.editorAssetFolderPath = folder.path;
|
|
1467
|
+
button.dataset.editorAssetFolderTreePath = folder.path;
|
|
1468
|
+
button.dataset.selected = folder.path === folderPath ? 'true' : 'false';
|
|
1469
|
+
button.appendChild(createLocalEditorIcon(doc, folder.path === '/' ? 'root' : 'folder', { size: 15 }));
|
|
1470
|
+
const label = doc.createElement('span');
|
|
1471
|
+
label.className = 'fps-editor-ui-ellipsis';
|
|
1472
|
+
label.textContent = folder.path === '/' ? snapshot.rootName : folder.label;
|
|
1473
|
+
button.title = resolveLocalEditorAssetBrowserFolderTitle(label.textContent, folder.descendantItemCount, snapshot.truncated);
|
|
1474
|
+
button.append(label);
|
|
1475
|
+
row.append(toggle, button);
|
|
1476
|
+
tree.appendChild(row);
|
|
1477
|
+
}
|
|
1478
|
+
body.appendChild(tree);
|
|
1479
|
+
const browser = doc.createElement('section');
|
|
1480
|
+
browser.className = 'fps-editor-ui-asset-browser';
|
|
1481
|
+
const summary = doc.createElement('div');
|
|
1482
|
+
summary.className = 'fps-editor-ui-asset-browser-summary';
|
|
1483
|
+
const breadcrumb = doc.createElement('nav');
|
|
1484
|
+
breadcrumb.className = 'fps-editor-ui-asset-breadcrumb';
|
|
1485
|
+
breadcrumb.setAttribute('aria-label', '当前项目路径');
|
|
1486
|
+
const breadcrumbs = resolveLocalEditorAssetFilesystemBreadcrumbs(snapshot, folderPath);
|
|
1487
|
+
breadcrumbs.forEach((item, index) => {
|
|
1488
|
+
if (index > 0) {
|
|
1489
|
+
const separator = doc.createElement('span');
|
|
1490
|
+
separator.className = 'fps-editor-ui-asset-breadcrumb-separator';
|
|
1491
|
+
separator.textContent = '/';
|
|
1492
|
+
breadcrumb.appendChild(separator);
|
|
1493
|
+
}
|
|
1494
|
+
if (index === breadcrumbs.length - 1) {
|
|
1495
|
+
const current = doc.createElement('span');
|
|
1496
|
+
current.className = 'fps-editor-ui-asset-breadcrumb-current fps-editor-ui-ellipsis';
|
|
1497
|
+
current.textContent = item.label;
|
|
1498
|
+
current.title = item.path;
|
|
1499
|
+
current.setAttribute('aria-current', 'page');
|
|
1500
|
+
breadcrumb.appendChild(current);
|
|
1501
|
+
return;
|
|
1502
|
+
}
|
|
1503
|
+
const segment = doc.createElement('button');
|
|
1504
|
+
segment.type = 'button';
|
|
1505
|
+
segment.className = 'fps-editor-ui-asset-breadcrumb-button fps-editor-ui-ellipsis';
|
|
1506
|
+
segment.dataset.editorAssetFolderPath = item.path;
|
|
1507
|
+
segment.textContent = item.label;
|
|
1508
|
+
segment.title = item.path;
|
|
1509
|
+
breadcrumb.appendChild(segment);
|
|
1510
|
+
});
|
|
1363
1511
|
const count = doc.createElement('div');
|
|
1364
1512
|
count.className = 'fps-editor-ui-asset-count';
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1513
|
+
count.textContent = resolveLocalEditorAssetBrowserCountLabel({
|
|
1514
|
+
matchingCount: matchingEntries.length,
|
|
1515
|
+
normalizedFilter,
|
|
1516
|
+
resultLimited,
|
|
1517
|
+
truncated: snapshot.truncated,
|
|
1518
|
+
typeLabel: typeFilterActive
|
|
1519
|
+
? ASSET_BROWSER_TABS.find(tab => tab.id === activeTab)?.label ?? ''
|
|
1520
|
+
: null,
|
|
1521
|
+
visibleCount: filteredEntries.length,
|
|
1522
|
+
});
|
|
1523
|
+
summary.append(breadcrumb, count);
|
|
1524
|
+
browser.appendChild(summary);
|
|
1370
1525
|
const list = createAssetList(doc, variant === 'grid');
|
|
1371
1526
|
list.dataset.editorAssetBrowserList = 'true';
|
|
1527
|
+
list.dataset.searchActive = recursiveFilterActive ? 'true' : 'false';
|
|
1372
1528
|
list.style.overflow = 'visible';
|
|
1529
|
+
list.style.maxHeight = 'none';
|
|
1373
1530
|
list.style.paddingRight = '0';
|
|
1374
|
-
for (const
|
|
1531
|
+
for (const entry of filteredEntries) {
|
|
1532
|
+
if (entry.kind === 'directory') {
|
|
1533
|
+
list.appendChild(createProjectFilesystemEntryButton(doc, entry, variant, selectedEntryPath === entry.path, recursiveFilterActive ? entry.parentPath : undefined));
|
|
1534
|
+
continue;
|
|
1535
|
+
}
|
|
1536
|
+
const asset = entry.asset;
|
|
1537
|
+
if (!asset) {
|
|
1538
|
+
list.appendChild(createProjectFilesystemEntryButton(doc, entry, variant, selectedEntryPath === entry.path, recursiveFilterActive ? entry.parentPath : undefined));
|
|
1539
|
+
continue;
|
|
1540
|
+
}
|
|
1375
1541
|
const selected = state.selectedAssetId === asset.id;
|
|
1376
1542
|
const hasPreview = !!asset.preview;
|
|
1377
1543
|
const button = doc.createElement('button');
|
|
1378
1544
|
button.className = 'fps-editor-ui-asset-card';
|
|
1379
1545
|
button.type = 'button';
|
|
1380
1546
|
button.dataset.editorAssetId = asset.id;
|
|
1547
|
+
button.dataset.editorProjectFilePath = entry.path;
|
|
1381
1548
|
button.disabled = asset.disabled ?? false;
|
|
1382
1549
|
button.setAttribute('aria-selected', selected ? 'true' : 'false');
|
|
1383
1550
|
button.dataset.variant = variant;
|
|
1384
1551
|
button.dataset.hasPreview = hasPreview ? 'true' : 'false';
|
|
1385
|
-
|
|
1552
|
+
button.dataset.searchResult = recursiveFilterActive ? 'true' : 'false';
|
|
1553
|
+
button.title = entry.path;
|
|
1554
|
+
const mediaThumbnailKind = asset.preview ? null : resolveLocalEditorProjectMediaThumbnailKind(entry);
|
|
1555
|
+
const preview = mediaThumbnailKind
|
|
1556
|
+
? createProjectMediaThumbnailPlaceholder(doc, entry, variant, mediaThumbnailKind)
|
|
1557
|
+
: createAssetPreviewElement(doc, asset, variant);
|
|
1386
1558
|
const body = doc.createElement('div');
|
|
1387
1559
|
body.className = 'fps-editor-ui-asset-card-body';
|
|
1388
1560
|
const label = doc.createElement('div');
|
|
1389
1561
|
label.className = 'fps-editor-ui-asset-card-label fps-editor-ui-ellipsis';
|
|
1390
|
-
label.textContent = asset.label;
|
|
1562
|
+
label.textContent = entry.kind === 'file' ? entry.label : asset.label;
|
|
1391
1563
|
const meta = doc.createElement('div');
|
|
1392
1564
|
meta.className = 'fps-editor-ui-asset-card-meta fps-editor-ui-ellipsis';
|
|
1393
|
-
meta.textContent =
|
|
1565
|
+
meta.textContent = recursiveFilterActive
|
|
1566
|
+
? [asset.label !== entry.label ? asset.label : '', entry.parentPath]
|
|
1567
|
+
.filter(Boolean)
|
|
1568
|
+
.join(' · ')
|
|
1569
|
+
: entry.kind === 'file'
|
|
1570
|
+
? [entry.extension?.toUpperCase(), asset.label !== entry.label ? asset.label : '', asset.kind ?? 'asset']
|
|
1571
|
+
.filter(Boolean)
|
|
1572
|
+
.join(' · ')
|
|
1573
|
+
: asset.meta ?? asset.id;
|
|
1574
|
+
meta.title = meta.textContent;
|
|
1394
1575
|
body.appendChild(label);
|
|
1395
1576
|
body.appendChild(meta);
|
|
1396
1577
|
button.appendChild(preview);
|
|
@@ -1418,15 +1599,92 @@ function renderAssetBrowserContent(doc, panel, state, variant = 'list', activeTa
|
|
|
1418
1599
|
list.appendChild(button);
|
|
1419
1600
|
}
|
|
1420
1601
|
}
|
|
1421
|
-
if (
|
|
1422
|
-
list.appendChild(createEmptyState(doc,
|
|
1602
|
+
if (filteredEntries.length === 0) {
|
|
1603
|
+
list.appendChild(createEmptyState(doc, recursiveFilterActive ? '当前目录及子目录中没有匹配的资源。' : '当前目录为空。'));
|
|
1423
1604
|
}
|
|
1424
1605
|
const viewport = createLocalEditorDockPanelViewport(doc, 'editorAssetBrowserScrollViewport');
|
|
1425
1606
|
viewport.appendChild(list);
|
|
1426
|
-
|
|
1607
|
+
browser.appendChild(viewport);
|
|
1608
|
+
body.appendChild(browser);
|
|
1609
|
+
panel.appendChild(body);
|
|
1610
|
+
}
|
|
1611
|
+
export function resolveLocalEditorAssetBrowserTypeOptionTitle(title, itemCount, truncated) {
|
|
1612
|
+
return truncated
|
|
1613
|
+
? `${title},当前清单 ${itemCount} 项 · 文件清单已截断`
|
|
1614
|
+
: `${title},共 ${itemCount} 项`;
|
|
1615
|
+
}
|
|
1616
|
+
export function resolveLocalEditorAssetBrowserFolderTitle(label, descendantItemCount, truncated) {
|
|
1617
|
+
return truncated
|
|
1618
|
+
? `${label} · 当前清单 ${descendantItemCount} 个文件 · 文件清单已截断`
|
|
1619
|
+
: `${label} · ${descendantItemCount} 个文件`;
|
|
1620
|
+
}
|
|
1621
|
+
export function resolveLocalEditorAssetBrowserCountLabel(input) {
|
|
1622
|
+
const truncationSuffix = input.truncated ? ' · 文件清单已截断' : '';
|
|
1623
|
+
if (input.resultLimited) {
|
|
1624
|
+
return input.truncated
|
|
1625
|
+
? `显示前 ${input.visibleCount} 项(当前清单 ${input.matchingCount} 项)${truncationSuffix}`
|
|
1626
|
+
: `显示前 ${input.visibleCount} 项(共 ${input.matchingCount} 项)`;
|
|
1627
|
+
}
|
|
1628
|
+
if (input.normalizedFilter)
|
|
1629
|
+
return `${input.visibleCount} 个匹配项${truncationSuffix}`;
|
|
1630
|
+
if (input.typeLabel != null)
|
|
1631
|
+
return `${input.visibleCount} 个${input.typeLabel}资源${truncationSuffix}`;
|
|
1632
|
+
return `${input.visibleCount} 个项目${truncationSuffix}`;
|
|
1633
|
+
}
|
|
1634
|
+
function createProjectFilesystemEntryButton(doc, entry, variant, selected, searchParentPath) {
|
|
1635
|
+
const button = doc.createElement('button');
|
|
1636
|
+
button.className = 'fps-editor-ui-asset-card';
|
|
1637
|
+
button.type = 'button';
|
|
1638
|
+
button.dataset.variant = variant;
|
|
1639
|
+
const mediaThumbnailKind = resolveLocalEditorProjectMediaThumbnailKind(entry);
|
|
1640
|
+
button.dataset.hasPreview = mediaThumbnailKind ? 'true' : 'false';
|
|
1641
|
+
button.dataset.searchResult = searchParentPath ? 'true' : 'false';
|
|
1642
|
+
button.setAttribute('aria-selected', selected ? 'true' : 'false');
|
|
1643
|
+
button.title = entry.path;
|
|
1644
|
+
if (entry.kind === 'directory')
|
|
1645
|
+
button.dataset.editorProjectDirectoryPath = entry.path;
|
|
1646
|
+
else
|
|
1647
|
+
button.dataset.editorProjectFilePath = entry.path;
|
|
1648
|
+
button.appendChild(mediaThumbnailKind
|
|
1649
|
+
? createProjectMediaThumbnailPlaceholder(doc, entry, variant, mediaThumbnailKind)
|
|
1650
|
+
: createLocalEditorIcon(doc, entry.kind === 'directory' ? 'folder' : 'asset', {
|
|
1651
|
+
size: variant === 'grid' ? 42 : 16,
|
|
1652
|
+
strokeWidth: variant === 'grid' ? 1.35 : 2,
|
|
1653
|
+
}));
|
|
1654
|
+
const body = doc.createElement('div');
|
|
1655
|
+
body.className = 'fps-editor-ui-asset-card-body';
|
|
1656
|
+
const label = doc.createElement('div');
|
|
1657
|
+
label.className = 'fps-editor-ui-asset-card-label fps-editor-ui-ellipsis';
|
|
1658
|
+
label.textContent = entry.label;
|
|
1659
|
+
const meta = doc.createElement('div');
|
|
1660
|
+
meta.className = 'fps-editor-ui-asset-card-meta fps-editor-ui-ellipsis';
|
|
1661
|
+
meta.textContent = searchParentPath || (entry.kind === 'directory'
|
|
1662
|
+
? 'Folder'
|
|
1663
|
+
: entry.extension?.toUpperCase() || 'File');
|
|
1664
|
+
body.append(label, meta);
|
|
1665
|
+
button.appendChild(body);
|
|
1666
|
+
return button;
|
|
1667
|
+
}
|
|
1668
|
+
function createProjectMediaThumbnailPlaceholder(doc, entry, variant, kind) {
|
|
1669
|
+
const frame = doc.createElement('div');
|
|
1670
|
+
frame.className = 'fps-editor-ui-project-media-thumbnail';
|
|
1671
|
+
frame.dataset.editorProjectMediaThumbnailPath = entry.path;
|
|
1672
|
+
frame.dataset.editorProjectMediaThumbnailKind = kind;
|
|
1673
|
+
const cacheKey = resolveLocalEditorProjectMediaThumbnailCacheKey(entry);
|
|
1674
|
+
if (cacheKey)
|
|
1675
|
+
frame.dataset.editorProjectMediaThumbnailCacheKey = cacheKey;
|
|
1676
|
+
frame.dataset.thumbnailState = 'loading';
|
|
1677
|
+
frame.dataset.variant = variant;
|
|
1678
|
+
const fallback = createLocalEditorIcon(doc, kind === 'model' ? 'object' : 'asset', {
|
|
1679
|
+
size: variant === 'grid' ? 34 : 15,
|
|
1680
|
+
strokeWidth: variant === 'grid' ? 1.35 : 2,
|
|
1681
|
+
});
|
|
1682
|
+
fallback.classList.add('fps-editor-ui-project-media-thumbnail-fallback');
|
|
1683
|
+
frame.appendChild(fallback);
|
|
1684
|
+
return frame;
|
|
1427
1685
|
}
|
|
1428
1686
|
export function createAssetPreviewElement(doc, asset, variant) {
|
|
1429
|
-
const size = variant === 'modal' ? 220 : variant === 'grid' ?
|
|
1687
|
+
const size = variant === 'modal' ? 220 : variant === 'grid' ? 64 : 24;
|
|
1430
1688
|
const preview = asset.preview;
|
|
1431
1689
|
if (!preview) {
|
|
1432
1690
|
const kind = resolveLocalEditorBrowserAssetKind(asset);
|
|
@@ -1437,7 +1695,10 @@ export function createAssetPreviewElement(doc, asset, variant) {
|
|
|
1437
1695
|
: kind === 'texture'
|
|
1438
1696
|
? 'asset'
|
|
1439
1697
|
: 'object';
|
|
1440
|
-
return createLocalEditorIcon(doc, icon, {
|
|
1698
|
+
return createLocalEditorIcon(doc, icon, {
|
|
1699
|
+
size: variant === 'grid' ? 42 : 16,
|
|
1700
|
+
strokeWidth: variant === 'grid' ? 1.35 : 2,
|
|
1701
|
+
});
|
|
1441
1702
|
}
|
|
1442
1703
|
const frame = doc.createElement('div');
|
|
1443
1704
|
frame.style.cssText = [
|
|
@@ -1475,16 +1736,16 @@ export function createAssetPreviewElement(doc, asset, variant) {
|
|
|
1475
1736
|
const emissionColor = formatAssetPreviewColor(preview.emissionColor, '#ffffff');
|
|
1476
1737
|
sphere.style.cssText = [
|
|
1477
1738
|
'position:relative',
|
|
1478
|
-
'width:
|
|
1479
|
-
'height:
|
|
1739
|
+
'width:76%',
|
|
1740
|
+
'height:76%',
|
|
1480
1741
|
'overflow:hidden',
|
|
1481
1742
|
'border-radius:999px',
|
|
1482
1743
|
`background:${baseColor}`,
|
|
1483
|
-
'border:1px solid rgba(255,255,255,0.
|
|
1744
|
+
'border:1px solid rgba(255,255,255,0.12)',
|
|
1484
1745
|
'box-shadow:' + [
|
|
1485
|
-
`inset -5px -7px 12px rgba(0,0,0,${(0.
|
|
1486
|
-
`inset
|
|
1487
|
-
emissionIntensity > 0 ? `0 0 ${Math.round(
|
|
1746
|
+
`inset -5px -7px 12px rgba(0,0,0,${(0.24 + roughness * 0.12).toFixed(2)})`,
|
|
1747
|
+
`inset 4px 4px 9px rgba(255,255,255,${(0.08 + metallic * 0.14).toFixed(2)})`,
|
|
1748
|
+
emissionIntensity > 0 ? `0 0 ${Math.round(3 + emissionIntensity * 2)}px ${emissionColor}` : '0 1px 2px rgba(0,0,0,0.34)',
|
|
1488
1749
|
].join(','),
|
|
1489
1750
|
].join(';');
|
|
1490
1751
|
if (preview.textureUrl) {
|
|
@@ -1503,8 +1764,8 @@ export function createAssetPreviewElement(doc, asset, variant) {
|
|
|
1503
1764
|
sphere.appendChild(image);
|
|
1504
1765
|
}
|
|
1505
1766
|
const shading = doc.createElement('div');
|
|
1506
|
-
const highlightAlpha = clampNumber(0.
|
|
1507
|
-
const highlightEnd = Math.round(
|
|
1767
|
+
const highlightAlpha = clampNumber(0.66 - roughness * 0.38 + metallic * 0.08, 0.18, 0.72);
|
|
1768
|
+
const highlightEnd = Math.round(8 + roughness * 11);
|
|
1508
1769
|
const shadowAlpha = clampNumber(0.28 + roughness * 0.14 + metallic * 0.16, 0.2, 0.62);
|
|
1509
1770
|
const rimAlpha = clampNumber(0.12 + metallic * 0.36, 0.08, 0.52);
|
|
1510
1771
|
shading.style.cssText = [
|
|
@@ -1513,7 +1774,7 @@ export function createAssetPreviewElement(doc, asset, variant) {
|
|
|
1513
1774
|
'border-radius:inherit',
|
|
1514
1775
|
'pointer-events:none',
|
|
1515
1776
|
'background:' + [
|
|
1516
|
-
`radial-gradient(circle at 31% 23%, rgba(255,255,255,${highlightAlpha.toFixed(2)}) 0 ${highlightEnd}%, rgba(255,255,255,0) ${highlightEnd +
|
|
1777
|
+
`radial-gradient(circle at 31% 23%, rgba(255,255,255,${highlightAlpha.toFixed(2)}) 0 ${highlightEnd}%, rgba(255,255,255,0) ${highlightEnd + 20}%)`,
|
|
1517
1778
|
`radial-gradient(circle at 70% 82%, rgba(0,0,0,${shadowAlpha.toFixed(2)}) 0 26%, rgba(0,0,0,0) 58%)`,
|
|
1518
1779
|
`radial-gradient(circle at 82% 22%, rgba(255,255,255,${rimAlpha.toFixed(2)}) 0 9%, rgba(255,255,255,0) 36%)`,
|
|
1519
1780
|
`linear-gradient(135deg, rgba(255,255,255,${(0.08 + metallic * 0.16).toFixed(2)}), rgba(0,0,0,${(0.12 + roughness * 0.1).toFixed(2)}))`,
|