@fps-games/editor 0.2.1-beta.3 → 0.2.1-beta.4
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/build-info.json +44 -44
- package/dist/editor-commands/capabilities/assets.d.ts +8 -0
- package/dist/editor-commands/capabilities/assets.d.ts.map +1 -0
- package/dist/{agent-bridge → editor-commands}/capabilities/assets.js +41 -41
- package/dist/editor-commands/capabilities/assets.js.map +1 -0
- package/dist/editor-commands/capabilities/editor-state.d.ts +5 -0
- package/dist/editor-commands/capabilities/editor-state.d.ts.map +1 -0
- package/dist/{agent-bridge → editor-commands}/capabilities/editor-state.js +22 -22
- package/dist/editor-commands/capabilities/editor-state.js.map +1 -0
- package/dist/editor-commands/capabilities/hierarchy.d.ts +4 -0
- package/dist/editor-commands/capabilities/hierarchy.d.ts.map +1 -0
- package/dist/{agent-bridge → editor-commands}/capabilities/hierarchy.js +5 -5
- package/dist/editor-commands/capabilities/hierarchy.js.map +1 -0
- package/dist/editor-commands/capabilities/host-lifecycle.d.ts +11 -0
- package/dist/editor-commands/capabilities/host-lifecycle.d.ts.map +1 -0
- package/dist/editor-commands/capabilities/host-lifecycle.js +149 -0
- package/dist/editor-commands/capabilities/host-lifecycle.js.map +1 -0
- package/dist/editor-commands/capabilities/prefabs.d.ts +5 -0
- package/dist/editor-commands/capabilities/prefabs.d.ts.map +1 -0
- package/dist/{agent-bridge → editor-commands}/capabilities/prefabs.js +93 -93
- package/dist/editor-commands/capabilities/prefabs.js.map +1 -0
- package/dist/editor-commands/capabilities/scene-objects.d.ts +8 -0
- package/dist/editor-commands/capabilities/scene-objects.d.ts.map +1 -0
- package/dist/editor-commands/capabilities/scene-objects.js +480 -0
- package/dist/editor-commands/capabilities/scene-objects.js.map +1 -0
- package/dist/editor-commands/capabilities/selection.d.ts +5 -0
- package/dist/editor-commands/capabilities/selection.d.ts.map +1 -0
- package/dist/editor-commands/capabilities/selection.js +60 -0
- package/dist/editor-commands/capabilities/selection.js.map +1 -0
- package/dist/editor-commands/capabilities/shadows.d.ts +5 -0
- package/dist/editor-commands/capabilities/shadows.d.ts.map +1 -0
- package/dist/{agent-bridge → editor-commands}/capabilities/shadows.js +74 -74
- package/dist/editor-commands/capabilities/shadows.js.map +1 -0
- package/dist/editor-commands/capabilities/transform.d.ts +5 -0
- package/dist/editor-commands/capabilities/transform.d.ts.map +1 -0
- package/dist/editor-commands/capabilities/transform.js +164 -0
- package/dist/editor-commands/capabilities/transform.js.map +1 -0
- package/dist/editor-commands/capabilities/ui-regions.d.ts +4 -0
- package/dist/editor-commands/capabilities/ui-regions.d.ts.map +1 -0
- package/dist/{agent-bridge → editor-commands}/capabilities/ui-regions.js +55 -57
- package/dist/editor-commands/capabilities/ui-regions.js.map +1 -0
- package/dist/editor-commands/capabilities/viewport.d.ts +5 -0
- package/dist/editor-commands/capabilities/viewport.d.ts.map +1 -0
- package/dist/{agent-bridge → editor-commands}/capabilities/viewport.js +100 -100
- package/dist/editor-commands/capabilities/viewport.js.map +1 -0
- package/dist/editor-commands/command-sources.d.ts +7 -0
- package/dist/editor-commands/command-sources.d.ts.map +1 -0
- package/dist/editor-commands/command-sources.js +34 -0
- package/dist/editor-commands/command-sources.js.map +1 -0
- package/dist/editor-commands/diagnostics.d.ts +12 -0
- package/dist/editor-commands/diagnostics.d.ts.map +1 -0
- package/dist/{agent-bridge → editor-commands}/diagnostics.js +4 -4
- package/dist/editor-commands/diagnostics.js.map +1 -0
- package/dist/{agent-bridge → editor-commands}/index.d.ts +1 -1
- package/dist/editor-commands/index.d.ts.map +1 -0
- package/dist/{agent-bridge → editor-commands}/index.js +1 -1
- package/dist/editor-commands/index.js.map +1 -0
- package/dist/editor-commands/register.d.ts +4 -0
- package/dist/editor-commands/register.d.ts.map +1 -0
- package/dist/{agent-bridge → editor-commands}/register.js +323 -286
- package/dist/editor-commands/register.js.map +1 -0
- package/dist/{agent-bridge → editor-commands}/shared.d.ts +80 -80
- package/dist/editor-commands/shared.d.ts.map +1 -0
- package/dist/{agent-bridge → editor-commands}/shared.js +29 -29
- package/dist/editor-commands/shared.js.map +1 -0
- package/dist/editor-commands/source-types.d.ts +110 -0
- package/dist/editor-commands/source-types.d.ts.map +1 -0
- package/dist/editor-commands/source-types.js.map +1 -0
- package/dist/editor-plugin-commands.d.ts +4 -0
- package/dist/editor-plugin-commands.d.ts.map +1 -0
- package/dist/editor-plugin-commands.js +18 -0
- package/dist/editor-plugin-commands.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/local-editor-commands.d.ts +2 -0
- package/dist/local-editor-commands.d.ts.map +1 -0
- package/dist/local-editor-commands.js +2 -0
- package/dist/local-editor-commands.js.map +1 -0
- package/dist/local-editor-harness.d.ts +35 -21
- package/dist/local-editor-harness.d.ts.map +1 -1
- package/dist/local-editor-harness.js +1721 -367
- package/dist/local-editor-harness.js.map +1 -1
- package/dist/local-editor-prefab-stage-transaction.d.ts +2 -1
- package/dist/local-editor-prefab-stage-transaction.d.ts.map +1 -1
- package/dist/local-editor-prefab-stage-transaction.js +6 -5
- package/dist/local-editor-prefab-stage-transaction.js.map +1 -1
- package/dist/local-editor-scene-view-interaction-runtime.d.ts.map +1 -1
- package/dist/local-editor-scene-view-interaction-runtime.js +2 -5
- package/dist/local-editor-scene-view-interaction-runtime.js.map +1 -1
- package/dist/playable-local-editor-entry.d.ts +10 -0
- package/dist/playable-local-editor-entry.d.ts.map +1 -1
- package/dist/playable-local-editor-entry.js +10 -2
- package/dist/playable-local-editor-entry.js.map +1 -1
- package/dist/playable-local-editor-host.d.ts +3 -32
- package/dist/playable-local-editor-host.d.ts.map +1 -1
- package/dist/playable-local-editor-host.js +6 -70
- package/dist/playable-local-editor-host.js.map +1 -1
- package/dist/playable-product-local-editor.d.ts +1 -2
- package/dist/playable-product-local-editor.d.ts.map +1 -1
- package/dist/playable-product-local-editor.js +0 -1
- package/dist/playable-product-local-editor.js.map +1 -1
- package/dist/playable-product-projection-preview.d.ts.map +1 -1
- package/dist/playable-product-projection-preview.js +1 -1
- package/dist/playable-product-projection-preview.js.map +1 -1
- package/dist/playable-product-scene-capabilities.d.ts +0 -2
- package/dist/playable-product-scene-capabilities.d.ts.map +1 -1
- package/dist/playable-product-scene-capabilities.js +33 -6
- package/dist/playable-product-scene-capabilities.js.map +1 -1
- package/dist/playable-runtime-babylon.d.ts +4 -0
- package/dist/playable-runtime-babylon.d.ts.map +1 -1
- package/dist/playable-runtime-babylon.js +4 -0
- package/dist/playable-runtime-babylon.js.map +1 -1
- package/dist/playable-sdk.d.ts +1 -1
- package/dist/playable-sdk.d.ts.map +1 -1
- package/dist/playable-sdk.js.map +1 -1
- package/dist/playable-standard-project.d.ts +0 -2
- package/dist/playable-standard-project.d.ts.map +1 -1
- package/dist/playable-standard-project.js +1 -2
- package/dist/playable-standard-project.js.map +1 -1
- package/dist/project-service-projection.d.ts +16 -0
- package/dist/project-service-projection.d.ts.map +1 -0
- package/dist/project-service-projection.js +67 -0
- package/dist/project-service-projection.js.map +1 -0
- package/node_modules/@fps-games/babylon-renderer/dist/post-process/babylon-default-pipeline.d.ts +18 -0
- package/node_modules/@fps-games/babylon-renderer/dist/post-process/babylon-default-pipeline.d.ts.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/dist/post-process/babylon-default-pipeline.js +54 -18
- package/node_modules/@fps-games/babylon-renderer/dist/post-process/babylon-default-pipeline.js.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/package.json +9 -9
- package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts +1 -0
- package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/projection.js +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/projection.js.map +1 -1
- 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 +127 -13
- 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.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.js +66 -1
- package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.js.map +1 -1
- package/node_modules/@fps-games/editor-babylon/package.json +6 -6
- package/node_modules/@fps-games/editor-browser/dist/editor-command-service-client.d.ts +32 -0
- package/node_modules/@fps-games/editor-browser/dist/editor-command-service-client.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/editor-command-service-client.js +254 -0
- package/node_modules/@fps-games/editor-browser/dist/editor-command-service-client.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/index.d.ts +3 -1
- package/node_modules/@fps-games/editor-browser/dist/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/index.js +2 -0
- package/node_modules/@fps-games/editor-browser/dist/index.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-command-center.d.ts +68 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-command-center.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-command-center.js +650 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-command-center.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-formal-surface-visibility.d.ts +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-formal-surface-visibility.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-formal-surface-visibility.js +22 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-formal-surface-visibility.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.d.ts +8 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.js +117 -6
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.d.ts +14 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.js +100 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.d.ts +8 -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 +75 -2
- 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-types.d.ts +37 -12
- 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.d.ts +25 -2
- 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 +332 -107
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/package.json +7 -7
- package/node_modules/@fps-games/editor-core/dist/editor-authoring-host.d.ts +107 -0
- package/node_modules/@fps-games/editor-core/dist/editor-authoring-host.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-authoring-host.js +1211 -0
- package/node_modules/@fps-games/editor-core/dist/editor-authoring-host.js.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-capability-adapter.d.ts +34 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-capability-adapter.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-capability-adapter.js +260 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-capability-adapter.js.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-composed-authority.d.ts +9 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-composed-authority.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-composed-authority.js +14 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-composed-authority.js.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-observability.d.ts +18 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-observability.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-observability.js +113 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-observability.js.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-system.d.ts +82 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-system.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-system.js +1098 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-system.js.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-plugin-host.d.ts +6 -7
- package/node_modules/@fps-games/editor-core/dist/editor-plugin-host.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-core/dist/editor-plugin-host.js +62 -103
- package/node_modules/@fps-games/editor-core/dist/editor-plugin-host.js.map +1 -1
- package/node_modules/@fps-games/editor-core/dist/editor-service-gateway.d.ts +30 -0
- package/node_modules/@fps-games/editor-core/dist/editor-service-gateway.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-service-gateway.js +540 -0
- package/node_modules/@fps-games/editor-core/dist/editor-service-gateway.js.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-session-authority.d.ts +9 -0
- package/node_modules/@fps-games/editor-core/dist/editor-session-authority.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-session-authority.js +61 -0
- package/node_modules/@fps-games/editor-core/dist/editor-session-authority.js.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-session.d.ts +55 -0
- package/node_modules/@fps-games/editor-core/dist/editor-session.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-core/dist/editor-session.js +247 -6
- package/node_modules/@fps-games/editor-core/dist/editor-session.js.map +1 -1
- package/node_modules/@fps-games/editor-core/dist/index.d.ts +6 -2
- package/node_modules/@fps-games/editor-core/dist/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-core/dist/index.js +6 -2
- package/node_modules/@fps-games/editor-core/dist/index.js.map +1 -1
- package/node_modules/@fps-games/editor-core/package.json +6 -6
- package/node_modules/@fps-games/editor-forge-play/dist/index.d.ts +0 -1
- package/node_modules/@fps-games/editor-forge-play/dist/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-forge-play/dist/index.js +0 -1
- package/node_modules/@fps-games/editor-forge-play/dist/index.js.map +1 -1
- package/node_modules/@fps-games/editor-forge-play/package.json +2 -2
- package/node_modules/@fps-games/editor-playable-sdk/dist/bridge-command/protocol.d.ts +2 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/bridge-command/protocol.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/document/helpers.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/document/helpers.js +41 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/document/helpers.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play-types.d.ts +27 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play-types.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play-types.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.d.ts +2 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.js +214 -7
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/host-controller.d.ts +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/host-controller.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/host-controller.js +11 -3
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/host-controller.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/index.d.ts +2 -4
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/index.js +0 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/index.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/lifecycle.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/lifecycle.js +77 -31
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/lifecycle.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/types.d.ts +8 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/types.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/types.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/asset-fields.d.ts +21 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/asset-fields.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/asset-fields.js +90 -4
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/asset-fields.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/binding.d.ts +27 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/binding.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/binding.js +161 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/binding.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/inspector.d.ts +2 -2
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/inspector.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/inspector.js +5 -92
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/inspector.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/scene-inspector.d.ts +7 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/scene-inspector.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/scene-inspector.js +26 -9
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/scene-inspector.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/slot-inspector.d.ts +9 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/slot-inspector.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/slot-inspector.js +19 -8
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/slot-inspector.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/material-override-inspector.d.ts +5 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/material-override-inspector.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/material-override-inspector.js +16 -4
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/material-override-inspector.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/stage-inspector.d.ts +9 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/stage-inspector.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/stage-inspector.js +12 -2
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/stage-inspector.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/ground-decal.d.ts +2 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/ground-decal.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/ground-decal.js +10 -5
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/ground-decal.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/index.d.ts +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/index.js +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/index.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/project-host-services.d.ts +17 -82
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/project-host-services.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/project-host-services.js +53 -57
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/project-host-services.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-session.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-session.js +3 -2
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-session.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-authoring-commands.d.ts +10 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-authoring-commands.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-authoring-commands.js +256 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-authoring-commands.js.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-scene-assembly.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-scene-assembly.js +7 -5
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-scene-assembly.js.map +1 -1
- 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 +8 -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/scene-source/types.d.ts +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/types.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/types.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/inspectors.js +134 -12
- package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/inspectors.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-scene-workflow.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-scene-workflow.js +47 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-scene-workflow.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-service-vite.d.ts +27 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-service-vite.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-service-vite.js +592 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-service-vite.js.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts +3 -1
- 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 +2 -1
- 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/plugin.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/plugin.js +61 -6
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/plugin.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-adapter.d.ts +0 -2
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-adapter.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-adapter.js +1 -10
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-adapter.js.map +1 -1
- 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 +21 -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-authoring-backend.d.ts +13 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-authoring-backend.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-authoring-backend.js +18 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-authoring-backend.js.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-editor-service.d.ts +28 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-editor-service.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-editor-service.js +863 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-editor-service.js.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/types.d.ts +2 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/types.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/types.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/package.json +6 -6
- package/node_modules/@fps-games/editor-protocol/dist/editor-command-capabilities.d.ts +1626 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-command-capabilities.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-protocol/dist/{agent-bridge.js → editor-command-capabilities.js} +766 -620
- package/node_modules/@fps-games/editor-protocol/dist/editor-command-capabilities.js.map +1 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-command-trace.d.ts +69 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-command-trace.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-command-trace.js +22 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-command-trace.js.map +1 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-command.d.ts +136 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-command.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-command.js +2 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-command.js.map +1 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-service.d.ts +225 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-service.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-service.js +4 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-service.js.map +1 -0
- package/node_modules/@fps-games/editor-protocol/dist/index.d.ts +6 -3
- package/node_modules/@fps-games/editor-protocol/dist/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-protocol/dist/index.js +6 -3
- package/node_modules/@fps-games/editor-protocol/dist/index.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/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 +6 -6
- package/node_modules/@fps-games/plugin-hierarchy/dist/kernel.d.ts +1 -0
- package/node_modules/@fps-games/plugin-hierarchy/dist/kernel.d.ts.map +1 -1
- package/node_modules/@fps-games/plugin-hierarchy/dist/kernel.js +78 -4
- package/node_modules/@fps-games/plugin-hierarchy/dist/kernel.js.map +1 -1
- 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 +23 -23
- package/dist/agent-bridge/capabilities/assets.d.ts +0 -8
- package/dist/agent-bridge/capabilities/assets.d.ts.map +0 -1
- package/dist/agent-bridge/capabilities/assets.js.map +0 -1
- package/dist/agent-bridge/capabilities/editor-state.d.ts +0 -5
- package/dist/agent-bridge/capabilities/editor-state.d.ts.map +0 -1
- package/dist/agent-bridge/capabilities/editor-state.js.map +0 -1
- package/dist/agent-bridge/capabilities/hierarchy.d.ts +0 -4
- package/dist/agent-bridge/capabilities/hierarchy.d.ts.map +0 -1
- package/dist/agent-bridge/capabilities/hierarchy.js.map +0 -1
- package/dist/agent-bridge/capabilities/host-lifecycle.d.ts +0 -11
- package/dist/agent-bridge/capabilities/host-lifecycle.d.ts.map +0 -1
- package/dist/agent-bridge/capabilities/host-lifecycle.js +0 -149
- package/dist/agent-bridge/capabilities/host-lifecycle.js.map +0 -1
- package/dist/agent-bridge/capabilities/prefabs.d.ts +0 -5
- package/dist/agent-bridge/capabilities/prefabs.d.ts.map +0 -1
- package/dist/agent-bridge/capabilities/prefabs.js.map +0 -1
- package/dist/agent-bridge/capabilities/scene-objects.d.ts +0 -8
- package/dist/agent-bridge/capabilities/scene-objects.d.ts.map +0 -1
- package/dist/agent-bridge/capabilities/scene-objects.js +0 -480
- package/dist/agent-bridge/capabilities/scene-objects.js.map +0 -1
- package/dist/agent-bridge/capabilities/selection.d.ts +0 -5
- package/dist/agent-bridge/capabilities/selection.d.ts.map +0 -1
- package/dist/agent-bridge/capabilities/selection.js +0 -60
- package/dist/agent-bridge/capabilities/selection.js.map +0 -1
- package/dist/agent-bridge/capabilities/shadows.d.ts +0 -5
- package/dist/agent-bridge/capabilities/shadows.d.ts.map +0 -1
- package/dist/agent-bridge/capabilities/shadows.js.map +0 -1
- package/dist/agent-bridge/capabilities/transform.d.ts +0 -5
- package/dist/agent-bridge/capabilities/transform.d.ts.map +0 -1
- package/dist/agent-bridge/capabilities/transform.js +0 -164
- package/dist/agent-bridge/capabilities/transform.js.map +0 -1
- package/dist/agent-bridge/capabilities/ui-regions.d.ts +0 -4
- package/dist/agent-bridge/capabilities/ui-regions.d.ts.map +0 -1
- package/dist/agent-bridge/capabilities/ui-regions.js.map +0 -1
- package/dist/agent-bridge/capabilities/viewport.d.ts +0 -5
- package/dist/agent-bridge/capabilities/viewport.d.ts.map +0 -1
- package/dist/agent-bridge/capabilities/viewport.js.map +0 -1
- package/dist/agent-bridge/capability-sources.d.ts +0 -7
- package/dist/agent-bridge/capability-sources.d.ts.map +0 -1
- package/dist/agent-bridge/capability-sources.js +0 -34
- package/dist/agent-bridge/capability-sources.js.map +0 -1
- package/dist/agent-bridge/diagnostics.d.ts +0 -12
- package/dist/agent-bridge/diagnostics.d.ts.map +0 -1
- package/dist/agent-bridge/diagnostics.js.map +0 -1
- package/dist/agent-bridge/index.d.ts.map +0 -1
- package/dist/agent-bridge/index.js.map +0 -1
- package/dist/agent-bridge/register.d.ts +0 -4
- package/dist/agent-bridge/register.d.ts.map +0 -1
- package/dist/agent-bridge/register.js.map +0 -1
- package/dist/agent-bridge/shared.d.ts.map +0 -1
- package/dist/agent-bridge/shared.js.map +0 -1
- package/dist/agent-bridge/source-types.d.ts +0 -110
- package/dist/agent-bridge/source-types.d.ts.map +0 -1
- package/dist/agent-bridge/source-types.js.map +0 -1
- package/dist/editor-plugin-agent-capabilities.d.ts +0 -4
- package/dist/editor-plugin-agent-capabilities.d.ts.map +0 -1
- package/dist/editor-plugin-agent-capabilities.js +0 -64
- package/dist/editor-plugin-agent-capabilities.js.map +0 -1
- package/dist/local-editor-agent-actions.d.ts +0 -43
- package/dist/local-editor-agent-actions.d.ts.map +0 -1
- package/dist/local-editor-agent-actions.js +0 -321
- package/dist/local-editor-agent-actions.js.map +0 -1
- package/dist/local-editor-agent-bridge-transport.d.ts +0 -129
- package/dist/local-editor-agent-bridge-transport.d.ts.map +0 -1
- package/dist/local-editor-agent-bridge-transport.js +0 -403
- package/dist/local-editor-agent-bridge-transport.js.map +0 -1
- package/dist/local-editor-agent-bridge.d.ts +0 -2
- package/dist/local-editor-agent-bridge.d.ts.map +0 -1
- package/dist/local-editor-agent-bridge.js +0 -2
- package/dist/local-editor-agent-bridge.js.map +0 -1
- package/dist/local-editor-agent-context.d.ts +0 -68
- package/dist/local-editor-agent-context.d.ts.map +0 -1
- package/dist/local-editor-agent-context.js +0 -716
- package/dist/local-editor-agent-context.js.map +0 -1
- package/node_modules/@fps-games/editor-core/dist/agent-bridge.d.ts +0 -22
- package/node_modules/@fps-games/editor-core/dist/agent-bridge.d.ts.map +0 -1
- package/node_modules/@fps-games/editor-core/dist/agent-bridge.js +0 -106
- package/node_modules/@fps-games/editor-core/dist/agent-bridge.js.map +0 -1
- package/node_modules/@fps-games/editor-core/dist/agent-interaction.d.ts +0 -17
- package/node_modules/@fps-games/editor-core/dist/agent-interaction.d.ts.map +0 -1
- package/node_modules/@fps-games/editor-core/dist/agent-interaction.js +0 -14
- package/node_modules/@fps-games/editor-core/dist/agent-interaction.js.map +0 -1
- package/node_modules/@fps-games/editor-forge-play/dist/agent-transport.d.ts +0 -23
- package/node_modules/@fps-games/editor-forge-play/dist/agent-transport.d.ts.map +0 -1
- package/node_modules/@fps-games/editor-forge-play/dist/agent-transport.js +0 -47
- package/node_modules/@fps-games/editor-forge-play/dist/agent-transport.js.map +0 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/agent-descriptions.d.ts +0 -112
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/agent-descriptions.d.ts.map +0 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/agent-descriptions.js +0 -159
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/agent-descriptions.js.map +0 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/session-metadata.d.ts +0 -15
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/session-metadata.d.ts.map +0 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/session-metadata.js +0 -76
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/session-metadata.js.map +0 -1
- package/node_modules/@fps-games/editor-protocol/dist/agent-bridge.d.ts +0 -1622
- package/node_modules/@fps-games/editor-protocol/dist/agent-bridge.d.ts.map +0 -1
- package/node_modules/@fps-games/editor-protocol/dist/agent-bridge.js.map +0 -1
- package/node_modules/@fps-games/editor-protocol/dist/agent-trace.d.ts +0 -68
- package/node_modules/@fps-games/editor-protocol/dist/agent-trace.d.ts.map +0 -1
- package/node_modules/@fps-games/editor-protocol/dist/agent-trace.js +0 -23
- package/node_modules/@fps-games/editor-protocol/dist/agent-trace.js.map +0 -1
- package/node_modules/@fps-games/editor-protocol/dist/agent.d.ts +0 -187
- package/node_modules/@fps-games/editor-protocol/dist/agent.d.ts.map +0 -1
- package/node_modules/@fps-games/editor-protocol/dist/agent.js +0 -5
- package/node_modules/@fps-games/editor-protocol/dist/agent.js.map +0 -1
- /package/dist/{agent-bridge → editor-commands}/source-types.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-editor-ui-hierarchy-view.d.ts","sourceRoot":"","sources":["../src/local-editor-ui-hierarchy-view.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAEV,kBAAkB,EAEnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,yCAAyC,CAAC;AAwB/F,MAAM,WAAW,6BAA6B;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,kBAAkB,CAAC;IAC9B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC7C,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,WAAW,EAAE,+BAA+B,GAAG,IAAI,CAAC;IACpD,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,iCAAiC,KAAK,CAAC;AAoBpD,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,6BAA6B,GACnC,IAAI,CAyDN;
|
|
1
|
+
{"version":3,"file":"local-editor-ui-hierarchy-view.d.ts","sourceRoot":"","sources":["../src/local-editor-ui-hierarchy-view.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAEV,sBAAsB,EACtB,kBAAkB,EAEnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,yCAAyC,CAAC;AAwB/F,MAAM,WAAW,6BAA6B;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,kBAAkB,CAAC;IAC9B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC7C,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,WAAW,EAAE,+BAA+B,GAAG,IAAI,CAAC;IACpD,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,8CAA8C;IAC7D,SAAS,EAAE,kBAAkB,CAAC;IAC9B,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,eAAO,MAAM,iCAAiC,KAAK,CAAC;AAoBpD,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,6BAA6B,GACnC,IAAI,CAyDN;AAED,wBAAgB,6CAA6C,CAC3D,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,8CAA8C,GACpD,OAAO,CAeT;AAED,wBAAgB,uDAAuD,CACrE,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,EACtC,mBAAmB,EAAE,SAAS,MAAM,EAAE,EACtC,gBAAgB,EAAE,MAAM,GAAG,IAAI,EAC/B,WAAW,EAAE,SAAS,MAAM,EAAE,EAC9B,QAAQ,EAAE,MAAM,GAAG,IAAI,GACtB,IAAI,CAaN;AAED,wBAAgB,0CAA0C,CACxD,MAAM,EAAE,2CAA2C,EACnD,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,EACtC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GACvC,sBAAsB,GAAG,IAAI,CAU/B;AAED,wBAAgB,yCAAyC,CACvD,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,2CAA2C,EACnD,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GACvC,OAAO,CA8BT;AAiBD,wBAAgB,qDAAqD,CACnE,QAAQ,EAAE,IAAI,CACZ,sBAAsB,EACtB,UAAU,GAAG,UAAU,GAAG,mBAAmB,GAAG,aAAa,GAAG,UAAU,CAC3E,EACD,IAAI,EAAE,IAAI,CACR,sBAAsB,EACtB,UAAU,GAAG,UAAU,GAAG,mBAAmB,GAAG,aAAa,GAAG,UAAU,CAC3E,GACA,OAAO,CAMT;AAED,MAAM,WAAW,2CAA2C;IAC1D,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,sBAAsB,GAAG,IAAI,CAAC;CAC1F;AA2MD,wBAAgB,mCAAmC,CACjD,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,IAAI,CAAC,6BAA6B,EAAE,aAAa,GAAG,UAAU,CAAC,GACrE,IAAI,CAYN"}
|
|
@@ -74,6 +74,92 @@ export function renderLocalEditorHierarchyPanel(doc, panel, input) {
|
|
|
74
74
|
rootDrop: input.rootDrop,
|
|
75
75
|
});
|
|
76
76
|
}
|
|
77
|
+
export function syncLocalEditorHierarchySelectionPresentation(panel, input) {
|
|
78
|
+
const shell = hierarchyPanelShells.get(panel);
|
|
79
|
+
if (!shell || !panel.contains(shell.viewport))
|
|
80
|
+
return false;
|
|
81
|
+
const selectedIds = input.viewModel.snapshot.selectedIds;
|
|
82
|
+
shell.input = { ...shell.input, viewModel: input.viewModel };
|
|
83
|
+
shell.selectedIdsRef = selectedIds;
|
|
84
|
+
shell.selectedIdsSet = new Set(selectedIds);
|
|
85
|
+
syncLocalEditorHierarchyMountedRowSelectionPresentation(shell.rows, input.previousSelectedIds, input.previousActiveId, selectedIds, input.viewModel.snapshot.activeId);
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
export function syncLocalEditorHierarchyMountedRowSelectionPresentation(rows, previousSelectedIds, previousActiveId, selectedIds, activeId) {
|
|
89
|
+
const selectedIdSet = new Set(selectedIds);
|
|
90
|
+
const changedIds = new Set([
|
|
91
|
+
...previousSelectedIds,
|
|
92
|
+
...selectedIds,
|
|
93
|
+
...(previousActiveId ? [previousActiveId] : []),
|
|
94
|
+
...(activeId ? [activeId] : []),
|
|
95
|
+
]);
|
|
96
|
+
for (const id of changedIds) {
|
|
97
|
+
const row = rows.get(id);
|
|
98
|
+
if (!row)
|
|
99
|
+
continue;
|
|
100
|
+
syncHierarchyRowSelectionPresentation(row, selectedIdSet.has(id), activeId === id);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
export function applyLocalEditorHierarchyLabelPresentation(kernel, rows, labels) {
|
|
104
|
+
const snapshot = kernel.patchNodeLabels(labels);
|
|
105
|
+
if (!snapshot)
|
|
106
|
+
return null;
|
|
107
|
+
for (const id of Object.keys(labels)) {
|
|
108
|
+
const node = snapshot.nodeById.get(id);
|
|
109
|
+
if (!node)
|
|
110
|
+
return null;
|
|
111
|
+
const row = rows.get(id);
|
|
112
|
+
if (row)
|
|
113
|
+
syncHierarchyRowLabelPresentation(row, node);
|
|
114
|
+
}
|
|
115
|
+
return snapshot;
|
|
116
|
+
}
|
|
117
|
+
export function syncLocalEditorHierarchyLabelPresentation(panel, kernel, labels) {
|
|
118
|
+
const shell = hierarchyPanelShells.get(panel);
|
|
119
|
+
if (!shell || !panel.contains(shell.viewport))
|
|
120
|
+
return false;
|
|
121
|
+
const snapshot = applyLocalEditorHierarchyLabelPresentation(kernel, shell.rows, labels);
|
|
122
|
+
const previousViewModel = shell.input.viewModel;
|
|
123
|
+
if (!snapshot || !canApplyLocalEditorHierarchyLabelPresentationSnapshot(previousViewModel.snapshot, snapshot)) {
|
|
124
|
+
if (/(?:^|[?&])debugGizmo=(?:1|true)(?:&|$)/.test(panel.ownerDocument.defaultView?.location.search ?? '')) {
|
|
125
|
+
console.info('[fps-editor:presentation]', 'hierarchy-label.rejected', {
|
|
126
|
+
previous: createHierarchyLabelPresentationAuthorityDiagnostic(previousViewModel.snapshot),
|
|
127
|
+
next: snapshot
|
|
128
|
+
? createHierarchyLabelPresentationAuthorityDiagnostic(snapshot)
|
|
129
|
+
: null,
|
|
130
|
+
labelIds: Object.keys(labels),
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
shell.input = {
|
|
136
|
+
...shell.input,
|
|
137
|
+
viewModel: {
|
|
138
|
+
...previousViewModel,
|
|
139
|
+
snapshot,
|
|
140
|
+
},
|
|
141
|
+
};
|
|
142
|
+
return true;
|
|
143
|
+
}
|
|
144
|
+
function createHierarchyLabelPresentationAuthorityDiagnostic(snapshot) {
|
|
145
|
+
return {
|
|
146
|
+
scopeKey: snapshot.scopeKey,
|
|
147
|
+
revision: snapshot.revision,
|
|
148
|
+
structureRevision: snapshot.structureRevision,
|
|
149
|
+
selectedIds: snapshot.selectedIds,
|
|
150
|
+
activeId: snapshot.activeId,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
export function canApplyLocalEditorHierarchyLabelPresentationSnapshot(previous, next) {
|
|
154
|
+
return next.scopeKey === previous.scopeKey
|
|
155
|
+
&& next.revision >= previous.revision
|
|
156
|
+
&& next.structureRevision === previous.structureRevision
|
|
157
|
+
&& next.activeId === previous.activeId
|
|
158
|
+
&& arraysEqual(next.selectedIds, previous.selectedIds);
|
|
159
|
+
}
|
|
160
|
+
function arraysEqual(left, right) {
|
|
161
|
+
return left.length === right.length && left.every((value, index) => value === right[index]);
|
|
162
|
+
}
|
|
77
163
|
function renderHierarchyVirtualWindow(doc, shell) {
|
|
78
164
|
const { input, viewport, canvas } = shell;
|
|
79
165
|
const projection = input.viewModel.projection;
|
|
@@ -204,7 +290,7 @@ function ensureHierarchyVirtualRow(doc, shell, rowModel) {
|
|
|
204
290
|
const { node } = rowModel;
|
|
205
291
|
const renderKey = [
|
|
206
292
|
input.presentationRevision,
|
|
207
|
-
|
|
293
|
+
rowModel.depth, rowModel.expanded, rowModel.enabled,
|
|
208
294
|
node.editorLocked, node.draggable, input.rename?.id === node.id ? input.rename.value : '',
|
|
209
295
|
].join('\u0000');
|
|
210
296
|
let row = shell.rows.get(node.id);
|
|
@@ -216,8 +302,20 @@ function ensureHierarchyVirtualRow(doc, shell, rowModel) {
|
|
|
216
302
|
row = replacement;
|
|
217
303
|
shell.rows.set(node.id, row);
|
|
218
304
|
}
|
|
305
|
+
syncHierarchyRowLabelPresentation(row, node);
|
|
306
|
+
syncHierarchyRowSelectionPresentation(row, rowModel.selected, rowModel.active);
|
|
219
307
|
return row;
|
|
220
308
|
}
|
|
309
|
+
function syncHierarchyRowLabelPresentation(row, node) {
|
|
310
|
+
const label = row.querySelector('[data-editor-hierarchy-label]');
|
|
311
|
+
if (label)
|
|
312
|
+
label.textContent = node.editorLocked ? `${node.label} [locked]` : node.label;
|
|
313
|
+
row.title = node.label;
|
|
314
|
+
}
|
|
315
|
+
function syncHierarchyRowSelectionPresentation(row, selected, active) {
|
|
316
|
+
row.dataset.selected = selected ? 'true' : 'false';
|
|
317
|
+
row.dataset.active = active ? 'true' : 'false';
|
|
318
|
+
}
|
|
221
319
|
function createHierarchyRowPresentation(viewModel, projected, selectedIds) {
|
|
222
320
|
const node = viewModel.snapshot.nodeById.get(projected.id);
|
|
223
321
|
if (!node)
|
|
@@ -482,6 +580,7 @@ function appendRoleBadge(doc, parent, rowModel) {
|
|
|
482
580
|
function appendLabel(doc, parent, rowModel) {
|
|
483
581
|
const { node } = rowModel;
|
|
484
582
|
const label = doc.createElement('span');
|
|
583
|
+
label.dataset.editorHierarchyLabel = 'true';
|
|
485
584
|
label.textContent = node.editorLocked ? `${node.label} [locked]` : node.label;
|
|
486
585
|
label.style.cssText = 'min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap';
|
|
487
586
|
parent.appendChild(label);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-editor-ui-hierarchy-view.js","sourceRoot":"","sources":["../src/local-editor-ui-hierarchy-view.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n createEditorInputStyle,\n createPanelHeader,\n createToolbarButton,\n createTreeViewItem,\n} from './local-editor-ui-primitives';\nimport {\n configureLocalEditorDockPanelContent,\n createLocalEditorDockPanelViewport,\n} from './local-editor-ui-dock-panel';\nimport { createLocalEditorIcon, isLocalEditorIconName, type LocalEditorIconName } from './local-editor-ui-icons';\nimport { clearElement } from './local-editor-ui-shared';\nimport type {\n HierarchyNodeSnapshot,\n HierarchyViewModel,\n HierarchyVisibleRow,\n} from '@fps-games/plugin-hierarchy';\nimport type { LocalEditorHierarchyDropPreview } from './local-editor-ui-hierarchy-drag-policy';\nimport { syncLocalEditorStructuredDragPreview } from './local-editor-ui-structured-drag-preview';\n\ntype HierarchyRowRole = 'root' | 'group' | 'object' | 'marker';\n\ninterface HierarchyRowPresentation {\n node: HierarchyNodeSnapshot;\n depth: number;\n role: HierarchyRowRole;\n selected: boolean;\n active: boolean;\n expanded: boolean;\n enabled: boolean | undefined;\n canToggleEnabled: boolean;\n childCount: number;\n}\n\nconst HIERARCHY_ROLE_ICONS: Record<HierarchyRowRole, LocalEditorIconName> = {\n root: 'root',\n group: 'group',\n object: 'object',\n marker: 'view-overlay',\n};\n\nexport interface LocalEditorHierarchyViewInput {\n title?: string;\n searchPlaceholder?: string;\n showCreateMenu?: boolean;\n viewModel: HierarchyViewModel;\n presentationRevision: string;\n rename: { id: string; value: string } | null;\n dragId: string | null;\n dropPreview: LocalEditorHierarchyDropPreview | null;\n rootDrop: boolean;\n searchQuery: string;\n}\n\nexport const LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT = 26;\nconst HIERARCHY_VIRTUAL_OVERSCAN = 8;\n\ninterface HierarchyPanelShell {\n header: HTMLElement;\n title: HTMLElement;\n createMenu: HTMLElement;\n search: HTMLInputElement;\n viewport: HTMLElement;\n canvas: HTMLElement;\n input: LocalEditorHierarchyViewInput;\n rows: Map<string, HTMLElement>;\n selectedIdsRef: readonly string[] | null;\n selectedIdsSet: ReadonlySet<string>;\n domOrderKey: string;\n frame: number | null;\n}\n\nconst hierarchyPanelShells = new WeakMap<HTMLElement, HierarchyPanelShell>();\n\nexport function renderLocalEditorHierarchyPanel(\n doc: Document,\n panel: HTMLElement,\n input: LocalEditorHierarchyViewInput,\n): void {\n let shell = hierarchyPanelShells.get(panel);\n if (shell && !panel.contains(shell.viewport)) {\n hierarchyPanelShells.delete(panel);\n shell = undefined;\n }\n if (!shell) {\n clearElement(panel);\n configureLocalEditorDockPanelContent(panel);\n const createMenu = createToolbarButton(doc, '+ 添加', 'plus');\n createMenu.dataset.editorHierarchyCreateMenu = 'true';\n createMenu.title = '添加节点或本地资源';\n createMenu.setAttribute('aria-label', '添加节点或本地资源');\n createMenu.style.padding = '3px 7px';\n createMenu.style.fontSize = '11px';\n const header = createPanelHeader(doc, input.title ?? 'Hierarchy', [createMenu], 'hierarchy');\n const title = header.querySelector<HTMLElement>('h2 span:last-child') ?? header;\n const search = createHierarchySearchInput(doc, input.searchQuery, input.searchPlaceholder);\n search.classList.add('fps-editor-ui-search', 'fps-editor-ui-hierarchy-search');\n const viewport = createLocalEditorDockPanelViewport(doc, 'editorHierarchyTreeViewport');\n viewport.style.position = 'relative';\n viewport.dataset.editorHierarchyRootDrop = 'ready';\n const canvas = doc.createElement('div');\n canvas.className = 'fps-editor-ui-hierarchy-canvas';\n canvas.dataset.editorHierarchyVirtualCanvas = 'true';\n viewport.appendChild(canvas);\n panel.append(header, search, viewport);\n const created: HierarchyPanelShell = {\n header, title, createMenu, search, viewport, canvas, input, rows: new Map(),\n selectedIdsRef: null,\n selectedIdsSet: new Set(),\n domOrderKey: '',\n frame: null,\n };\n shell = created;\n hierarchyPanelShells.set(panel, created);\n viewport.addEventListener('scroll', () => {\n if (created.frame !== null) return;\n created.frame = doc.defaultView?.requestAnimationFrame(() => {\n created.frame = null;\n renderHierarchyVirtualWindow(doc, created);\n }) ?? null;\n if (created.frame === null) renderHierarchyVirtualWindow(doc, created);\n }, { passive: true });\n }\n if (!shell) return;\n shell.input = input;\n shell.title.textContent = input.title ?? 'Hierarchy';\n shell.createMenu.style.display = input.showCreateMenu === false ? 'none' : '';\n if (doc.activeElement !== shell.search && shell.search.value !== input.searchQuery) shell.search.value = input.searchQuery;\n shell.search.placeholder = input.searchPlaceholder ?? '搜索 GameObject 名称';\n shell.viewport.dataset.editorHierarchyRootDrop = input.rootDrop ? 'active' : 'ready';\n renderHierarchyVirtualWindow(doc, shell);\n syncLocalEditorHierarchyDropPreview(doc, panel, {\n dropPreview: input.dropPreview,\n rootDrop: input.rootDrop,\n });\n}\n\nfunction renderHierarchyVirtualWindow(doc: Document, shell: HierarchyPanelShell): void {\n const { input, viewport, canvas } = shell;\n const projection = input.viewModel.projection;\n const total = projection.totalCount;\n canvas.style.height = `${Math.max(1, total * LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT)}px`;\n const viewportHeight = viewport.clientHeight || 520;\n const firstVisible = Math.floor(viewport.scrollTop / LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT);\n const start = Math.max(0, firstVisible - HIERARCHY_VIRTUAL_OVERSCAN);\n const count = Math.min(\n total - start,\n Math.ceil(viewportHeight / LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT) + HIERARCHY_VIRTUAL_OVERSCAN * 2,\n );\n const windowRows = projection.getWindow(start, Math.max(0, count));\n const selectedIds = resolveHierarchySelectedIdSet(shell, input.viewModel.snapshot.selectedIds);\n const retained = new Set<string>();\n const orderedRows: HTMLElement[] = [];\n for (let offset = 0; offset < windowRows.length; offset += 1) {\n const projected = windowRows[offset]!;\n const node = createHierarchyRowPresentation(input.viewModel, projected, selectedIds);\n if (!node) continue;\n retained.add(node.node.id);\n const row = ensureHierarchyVirtualRow(doc, shell, node);\n orderedRows.push(row);\n const index = start + offset;\n row.dataset.editorHierarchyVirtualIndex = String(index);\n row.style.position = 'absolute';\n row.style.left = '0';\n row.style.right = '0';\n row.style.top = `${index * LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT}px`;\n row.style.height = `${LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT}px`;\n if (row.parentElement !== canvas) canvas.appendChild(row);\n }\n const pinnedRenameId = input.rename?.id;\n if (pinnedRenameId && !retained.has(pinnedRenameId)) {\n const index = projection.indexOf(pinnedRenameId);\n const projected = projection.getRow(index);\n const node = projected ? createHierarchyRowPresentation(input.viewModel, projected, selectedIds) : null;\n const pinned = node ? ensureHierarchyVirtualRow(doc, shell, node) : null;\n if (pinned && index >= 0) {\n retained.add(pinnedRenameId);\n pinned.dataset.editorHierarchyVirtualIndex = String(index);\n pinned.style.position = 'absolute';\n pinned.style.left = '0';\n pinned.style.right = '0';\n pinned.style.top = `${index * LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT}px`;\n pinned.style.height = `${LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT}px`;\n }\n }\n const pinnedDragId = input.dragId;\n if (pinnedDragId && !retained.has(pinnedDragId)) {\n const index = projection.indexOf(pinnedDragId);\n const projected = projection.getRow(index);\n const node = projected ? createHierarchyRowPresentation(input.viewModel, projected, selectedIds) : null;\n const pinned = node ? ensureHierarchyVirtualRow(doc, shell, node) : null;\n if (pinned && index >= 0) {\n retained.add(pinnedDragId);\n pinned.dataset.editorHierarchyVirtualIndex = String(index);\n pinned.style.position = 'absolute';\n pinned.style.left = '0';\n pinned.style.right = '0';\n pinned.style.top = `${index * LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT}px`;\n pinned.style.height = `${LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT}px`;\n }\n }\n for (const [id, row] of shell.rows) {\n if (retained.has(id)) continue;\n row.remove();\n shell.rows.delete(id);\n }\n let domOrderKey = '';\n for (const row of orderedRows) {\n domOrderKey += `${row.dataset.editorHierarchyId ?? ''}@${row.dataset.editorHierarchyVirtualIndex ?? ''}\\u0000`;\n }\n if (domOrderKey !== shell.domOrderKey) {\n syncHierarchyVirtualRowDomOrder(canvas, orderedRows);\n shell.domOrderKey = domOrderKey;\n }\n let empty = canvas.querySelector<HTMLElement>('[data-editor-hierarchy-empty]');\n if (total === 0) {\n if (!empty) {\n empty = doc.createElement('div');\n empty.dataset.editorHierarchyEmpty = 'true';\n empty.style.cssText = 'position:absolute;inset:0;padding:8px;color:var(--fps-editor-muted);font-size:11px';\n canvas.appendChild(empty);\n }\n empty.textContent = input.searchQuery.trim() ? 'No matching GameObjects.' : 'No hierarchy nodes.';\n } else {\n empty?.remove();\n }\n}\n\nfunction resolveHierarchySelectedIdSet(\n shell: HierarchyPanelShell,\n selectedIds: readonly string[],\n): ReadonlySet<string> {\n if (shell.selectedIdsRef === selectedIds) return shell.selectedIdsSet;\n shell.selectedIdsRef = selectedIds;\n shell.selectedIdsSet = new Set(selectedIds);\n return shell.selectedIdsSet;\n}\n\nfunction syncHierarchyVirtualRowDomOrder(canvas: HTMLElement, orderedRows: readonly HTMLElement[]): void {\n let previous: HTMLElement | null = null;\n for (const row of orderedRows) {\n if (row.parentElement !== canvas) {\n if (previous?.nextSibling) canvas.insertBefore(row, previous.nextSibling);\n else canvas.appendChild(row);\n } else if (previous === null) {\n const firstRow = findFirstHierarchyVirtualRow(canvas);\n if (firstRow && firstRow !== row) canvas.insertBefore(row, firstRow);\n } else if (previous.nextSibling !== row) {\n canvas.insertBefore(row, previous.nextSibling);\n }\n previous = row;\n }\n}\n\nfunction findFirstHierarchyVirtualRow(canvas: HTMLElement): HTMLElement | null {\n for (const child of canvas.children) {\n if (child instanceof HTMLElement && child.dataset.editorHierarchyId) return child;\n }\n return null;\n}\n\nfunction ensureHierarchyVirtualRow(\n doc: Document,\n shell: HierarchyPanelShell,\n rowModel: HierarchyRowPresentation,\n): HTMLElement {\n const { input } = shell;\n const { node } = rowModel;\n const renderKey = [\n input.presentationRevision,\n node.label, rowModel.depth, rowModel.selected, rowModel.active, rowModel.expanded, rowModel.enabled,\n node.editorLocked, node.draggable, input.rename?.id === node.id ? input.rename.value : '',\n ].join('\\u0000');\n let row = shell.rows.get(node.id);\n if (!row || row.dataset.editorHierarchyRenderKey !== renderKey) {\n const replacement = renderHierarchyRow(doc, rowModel, input.rename);\n replacement.dataset.editorHierarchyRenderKey = renderKey;\n if (row) row.replaceWith(replacement);\n row = replacement;\n shell.rows.set(node.id, row);\n }\n return row;\n}\n\nfunction createHierarchyRowPresentation(\n viewModel: HierarchyViewModel,\n projected: HierarchyVisibleRow,\n selectedIds: ReadonlySet<string>,\n): HierarchyRowPresentation | null {\n const node = viewModel.snapshot.nodeById.get(projected.id);\n if (!node) return null;\n const childCount = viewModel.snapshot.childrenByParentId.get(node.id)?.length ?? 0;\n const enabled = node.authoredEnabled ?? node.editorVisible;\n const supportsToggle = node.authoredEnabled !== undefined\n ? viewModel.snapshot.capabilities.authoredEnabled === true\n : node.editorVisible !== undefined && viewModel.snapshot.capabilities.editorVisibility === true;\n return {\n node,\n depth: projected.depth,\n role: normalizeHierarchyRowRole(node.role),\n selected: selectedIds.has(node.id),\n active: viewModel.snapshot.activeId === node.id,\n expanded: childCount > 0 && (viewModel.state.searchQuery.trim().length > 0 || !viewModel.state.collapsedIds.has(node.id)),\n enabled,\n canToggleEnabled: supportsToggle && node.editorLocked !== true,\n childCount,\n };\n}\n\nfunction normalizeHierarchyRowRole(role: string | undefined): HierarchyRowRole {\n return role === 'root' || role === 'group' || role === 'marker' ? role : 'object';\n}\n\nexport function syncLocalEditorHierarchyDropPreview(\n doc: Document,\n panel: HTMLElement,\n input: Pick<LocalEditorHierarchyViewInput, 'dropPreview' | 'rootDrop'>,\n): void {\n const list = panel.querySelector<HTMLElement>('[data-editor-hierarchy-tree-viewport]');\n if (!list) return;\n syncLocalEditorStructuredDragPreview(doc, {\n root: list,\n preview: input.dropPreview,\n rootActive: input.rootDrop,\n reset: clearHierarchyDropPreviewDom,\n applyRootState: applyHierarchyRootDropPreviewState,\n findTarget: preview => findHierarchyPreviewRow(panel, preview.targetId),\n applyTargetPreview: applyHierarchyTargetDropPreview,\n });\n}\n\nfunction applyHierarchyRootDropPreviewState(\n list: HTMLElement,\n state: { rootActive: boolean; rootPreview: LocalEditorHierarchyDropPreview | null },\n): void {\n list.dataset.editorHierarchyRootDrop = state.rootActive ? 'active' : 'ready';\n const preview = state.rootPreview;\n if (!preview) return;\n list.dataset.editorHierarchyDropPreview = 'root';\n list.dataset.editorHierarchyDropPreviewValid = preview.valid ? 'true' : 'false';\n list.style.boxShadow = `inset 0 -3px 0 ${preview.valid ? 'var(--fps-editor-warn-strong)' : 'var(--fps-editor-muted)'}`;\n list.style.background = preview.valid ? 'var(--fps-editor-warn-soft)' : 'var(--fps-editor-field)';\n}\n\nfunction applyHierarchyTargetDropPreview(\n doc: Document,\n row: HTMLElement,\n preview: LocalEditorHierarchyDropPreview,\n): void {\n row.dataset.editorHierarchyDropPreview = preview.kind === 'inside' ? 'inside' : preview.placement;\n row.dataset.editorHierarchyDropPreviewValid = preview.valid ? 'true' : 'false';\n if (preview.kind === 'inside') {\n row.appendChild(renderHierarchyInsidePreview(doc, preview));\n return;\n }\n row.appendChild(renderHierarchyInsertionPreview(doc, preview));\n}\n\nfunction createHierarchySearchInput(\n doc: Document,\n value: string,\n placeholder = '搜索 GameObject 名称',\n): HTMLInputElement {\n const input = doc.createElement('input');\n input.type = 'search';\n input.dataset.editorHierarchySearch = 'true';\n input.placeholder = placeholder;\n input.value = value;\n input.style.cssText = [\n createEditorInputStyle(),\n 'width:100%',\n 'height:28px',\n 'margin:0 0 8px',\n 'outline:none',\n ].join(';');\n return input;\n}\n\nfunction renderHierarchyRow(\n doc: Document,\n rowModel: HierarchyRowPresentation,\n rename: { id: string; value: string } | null,\n): HTMLButtonElement {\n const { node } = rowModel;\n const isRenaming = rename?.id === node.id;\n const canHaveChildren = node.canHaveChildren && node.editorLocked !== true;\n const button = createTreeViewItem(doc, {\n id: node.id,\n label: node.label,\n depth: rowModel.depth,\n role: rowModel.role,\n selected: rowModel.selected,\n active: rowModel.active,\n locked: node.editorLocked,\n protected: false,\n selectable: node.selectable,\n enabled: rowModel.enabled,\n draggable: node.draggable,\n dropPlacement: null,\n });\n button.dataset.editorHierarchyCanHaveChildren = canHaveChildren ? 'true' : 'false';\n button.title = node.label;\n appendDisclosure(doc, button, rowModel);\n appendEnabledToggle(doc, button, rowModel);\n appendRoleBadge(doc, button, rowModel);\n if (isRenaming) appendRenameInput(doc, button, node, rename.value);\n else appendLabel(doc, button, rowModel);\n return button;\n}\n\nfunction appendEnabledToggle(\n doc: Document,\n button: HTMLButtonElement,\n rowModel: HierarchyRowPresentation,\n): void {\n const { node } = rowModel;\n if (typeof rowModel.enabled !== 'boolean') {\n const spacer = doc.createElement('span');\n spacer.style.cssText = 'width:18px;height:18px;flex:0 0 18px';\n button.appendChild(spacer);\n return;\n }\n const enabled = rowModel.enabled !== false;\n const toggle = doc.createElement('span');\n toggle.dataset.editorHierarchyEnabledToggle = node.id;\n toggle.dataset.editorHierarchyEnabled = enabled ? 'true' : 'false';\n const disabled = !rowModel.canToggleEnabled;\n toggle.dataset.editorHierarchyEnabledToggleDisabled = disabled ? 'true' : 'false';\n toggle.title = disabled\n ? 'This hierarchy item cannot be hidden.'\n : `${enabled ? 'Hide' : 'Show'} ${node.label}`;\n toggle.style.cssText = [\n 'width:18px',\n 'height:18px',\n 'flex:0 0 18px',\n 'display:inline-flex',\n 'align-items:center',\n 'justify-content:center',\n 'padding:0',\n 'border:1px solid transparent',\n 'border-radius:3px',\n 'background:transparent',\n `color:${enabled ? 'var(--fps-editor-muted-strong)' : 'var(--fps-editor-muted)'}`,\n `opacity:${disabled ? '0.45' : '1'}`,\n `cursor:${disabled ? 'not-allowed' : 'pointer'}`,\n ].join(';');\n toggle.appendChild(createLocalEditorIcon(doc, enabled ? 'eye' : 'eye-off', { size: 13, strokeWidth: 2.2 }));\n button.appendChild(toggle);\n}\n\nfunction renderHierarchyInsertionPreview(\n doc: Document,\n preview: LocalEditorHierarchyDropPreview,\n): HTMLDivElement {\n const line = doc.createElement('div');\n line.dataset.editorHierarchyInsertionPreview = 'true';\n line.dataset.editorHierarchyDropPreview = preview.placement;\n line.dataset.editorHierarchyDropPreviewValid = preview.valid ? 'true' : 'false';\n line.style.cssText = [\n 'position:absolute',\n 'left:0',\n 'right:0',\n preview.placement === 'before' ? 'top:-5px' : 'bottom:-5px',\n 'height:10px',\n 'pointer-events:none',\n 'z-index:4',\n ].join(';');\n const anchor = doc.createElement('span');\n anchor.style.cssText = [\n 'position:absolute',\n `left:${Math.max(2, 2 + preview.depth * 16)}px`,\n 'top:2px',\n 'width:6px',\n 'height:6px',\n 'border-radius:50%',\n `background:${preview.valid ? 'var(--fps-editor-warn-strong)' : 'var(--fps-editor-muted)'}`,\n `box-shadow:${preview.valid ? '0 0 0 2px rgba(0,0,0,0.35), 0 0 10px rgba(255,193,7,0.55)' : '0 0 0 2px rgba(0,0,0,0.25)'}`,\n ].join(';');\n const rule = doc.createElement('span');\n rule.style.cssText = [\n 'position:absolute',\n `left:${8 + preview.depth * 16}px`,\n 'right:4px',\n 'top:4px',\n 'height:3px',\n `background:${preview.valid ? 'var(--fps-editor-warn-strong)' : 'var(--fps-editor-muted)'}`,\n `opacity:${preview.valid ? '1' : '0.6'}`,\n `box-shadow:${preview.valid ? '0 0 0 1px rgba(0,0,0,0.25), 0 0 12px rgba(255,193,7,0.42)' : '0 0 0 1px rgba(0,0,0,0.18)'}`,\n ].join(';');\n line.appendChild(anchor);\n line.appendChild(rule);\n return line;\n}\n\nfunction renderHierarchyInsidePreview(\n doc: Document,\n preview: LocalEditorHierarchyDropPreview,\n): HTMLDivElement {\n const overlay = doc.createElement('div');\n overlay.dataset.editorHierarchyInsidePreview = 'true';\n overlay.dataset.editorHierarchyDropPreview = 'inside';\n overlay.dataset.editorHierarchyDropPreviewValid = preview.valid ? 'true' : 'false';\n overlay.style.cssText = [\n 'position:absolute',\n 'inset:0',\n 'pointer-events:none',\n 'z-index:1',\n `border:1px solid ${preview.valid ? 'var(--fps-editor-drop-target)' : 'var(--fps-editor-muted)'}`,\n `box-shadow:${preview.valid ? 'inset 4px 0 0 var(--fps-editor-drop-target), 0 0 0 1px rgba(255,255,255,0.08), 0 0 14px rgba(255,193,7,0.24)' : 'inset 4px 0 0 var(--fps-editor-muted)'}`,\n `background:${preview.valid ? 'rgba(255,193,7,0.09)' : 'rgba(255,255,255,0.04)'}`,\n ].join(';');\n return overlay;\n}\n\nfunction clearHierarchyDropPreviewDom(list: HTMLElement): void {\n list.style.boxShadow = '';\n list.style.background = '';\n delete list.dataset.editorHierarchyDropPreview;\n delete list.dataset.editorHierarchyDropPreviewValid;\n for (const preview of list.querySelectorAll<HTMLElement>('[data-editor-hierarchy-insertion-preview],[data-editor-hierarchy-inside-preview]')) {\n preview.remove();\n }\n for (const row of list.querySelectorAll<HTMLElement>('[data-editor-hierarchy-drop-preview]')) {\n delete row.dataset.editorHierarchyDropPreview;\n delete row.dataset.editorHierarchyDropPreviewValid;\n }\n}\n\nfunction findHierarchyPreviewRow(panel: HTMLElement, targetId: string | null): HTMLElement | null {\n if (!targetId) return null;\n for (const row of panel.querySelectorAll<HTMLElement>('[data-editor-hierarchy-id]')) {\n if (row.dataset.editorHierarchyId === targetId) return row;\n }\n return null;\n}\n\nfunction appendDisclosure(doc: Document, parent: HTMLElement, rowModel: HierarchyRowPresentation): void {\n const { node } = rowModel;\n const disclosure = doc.createElement('span');\n if (rowModel.childCount > 0) disclosure.dataset.editorHierarchyToggle = node.id;\n disclosure.style.cssText = [\n 'width:12px',\n 'flex:0 0 12px',\n 'display:inline-flex',\n 'align-items:center',\n 'justify-content:center',\n 'color:var(--fps-editor-muted)',\n 'font-size:10px',\n ].join(';');\n if (rowModel.childCount > 0) {\n disclosure.appendChild(createLocalEditorIcon(doc, rowModel.expanded ? 'chevron-down' : 'chevron-right', {\n size: 12,\n strokeWidth: 2.4,\n }));\n }\n parent.appendChild(disclosure);\n}\n\nfunction appendRoleBadge(doc: Document, parent: HTMLElement, rowModel: HierarchyRowPresentation): void {\n const { node } = rowModel;\n const badge = doc.createElement('span');\n const icon = isLocalEditorIconName(node.icon) ? node.icon : HIERARCHY_ROLE_ICONS[rowModel.role];\n const isMaterialSlot = icon === 'material-slot';\n const isPrefab = icon === 'prefab';\n badge.title = isMaterialSlot ? 'material slot' : isPrefab ? 'prefab' : rowModel.role;\n badge.style.cssText = [\n 'width:15px',\n 'height:15px',\n 'flex:0 0 15px',\n 'display:inline-flex',\n 'align-items:center',\n 'justify-content:center',\n 'border:1px solid var(--fps-editor-border)',\n 'border-radius:2px',\n `background:${isMaterialSlot ? 'var(--fps-editor-warn-soft)' : rowModel.role === 'root' ? 'var(--fps-editor-role-root-bg)' : rowModel.role === 'group' ? 'var(--fps-editor-role-group-bg)' : 'var(--fps-editor-role-object-bg)'}`,\n `border-color:${isMaterialSlot ? 'var(--fps-editor-warn-border)' : 'var(--fps-editor-border)'}`,\n `color:${isMaterialSlot ? 'var(--fps-editor-warn-strong)' : 'var(--fps-editor-muted-strong)'}`,\n 'font-size:9px',\n 'font-weight:900',\n ].join(';');\n badge.appendChild(createLocalEditorIcon(doc, icon, { size: 11, strokeWidth: 2.3 }));\n parent.appendChild(badge);\n}\n\nfunction appendLabel(doc: Document, parent: HTMLElement, rowModel: HierarchyRowPresentation): void {\n const { node } = rowModel;\n const label = doc.createElement('span');\n label.textContent = node.editorLocked ? `${node.label} [locked]` : node.label;\n label.style.cssText = 'min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap';\n parent.appendChild(label);\n}\n\nfunction appendRenameInput(\n doc: Document,\n parent: HTMLElement,\n node: HierarchyNodeSnapshot,\n value: string,\n): void {\n const input = doc.createElement('input');\n input.dataset.editorHierarchyRenameInput = node.id;\n input.value = value;\n input.style.cssText = [\n 'min-width:0',\n 'flex:1',\n 'height:22px',\n 'box-sizing:border-box',\n 'border:1px solid var(--fps-editor-accent-strong)',\n 'border-radius:2px',\n 'background:var(--fps-editor-field)',\n 'color:var(--fps-editor-text-strong)',\n 'font-size:12px',\n 'font-weight:700',\n 'padding:2px 5px',\n 'outline:none',\n ].join(';');\n parent.appendChild(input);\n setTimeout(() => {\n // A kernel-driven draft render may already have restored focus and caret\n // onto this replacement input. Only select all for the initial rename.\n if (doc.activeElement === input) return;\n input.focus();\n input.select();\n }, 0);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"local-editor-ui-hierarchy-view.js","sourceRoot":"","sources":["../src/local-editor-ui-hierarchy-view.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n createEditorInputStyle,\n createPanelHeader,\n createToolbarButton,\n createTreeViewItem,\n} from './local-editor-ui-primitives';\nimport {\n configureLocalEditorDockPanelContent,\n createLocalEditorDockPanelViewport,\n} from './local-editor-ui-dock-panel';\nimport { createLocalEditorIcon, isLocalEditorIconName, type LocalEditorIconName } from './local-editor-ui-icons';\nimport { clearElement } from './local-editor-ui-shared';\nimport type {\n HierarchyNodeSnapshot,\n HierarchyScopeSnapshot,\n HierarchyViewModel,\n HierarchyVisibleRow,\n} from '@fps-games/plugin-hierarchy';\nimport type { LocalEditorHierarchyDropPreview } from './local-editor-ui-hierarchy-drag-policy';\nimport { syncLocalEditorStructuredDragPreview } from './local-editor-ui-structured-drag-preview';\n\ntype HierarchyRowRole = 'root' | 'group' | 'object' | 'marker';\n\ninterface HierarchyRowPresentation {\n node: HierarchyNodeSnapshot;\n depth: number;\n role: HierarchyRowRole;\n selected: boolean;\n active: boolean;\n expanded: boolean;\n enabled: boolean | undefined;\n canToggleEnabled: boolean;\n childCount: number;\n}\n\nconst HIERARCHY_ROLE_ICONS: Record<HierarchyRowRole, LocalEditorIconName> = {\n root: 'root',\n group: 'group',\n object: 'object',\n marker: 'view-overlay',\n};\n\nexport interface LocalEditorHierarchyViewInput {\n title?: string;\n searchPlaceholder?: string;\n showCreateMenu?: boolean;\n viewModel: HierarchyViewModel;\n presentationRevision: string;\n rename: { id: string; value: string } | null;\n dragId: string | null;\n dropPreview: LocalEditorHierarchyDropPreview | null;\n rootDrop: boolean;\n searchQuery: string;\n}\n\nexport interface LocalEditorHierarchySelectionPresentationInput {\n viewModel: HierarchyViewModel;\n previousSelectedIds: readonly string[];\n previousActiveId: string | null;\n}\n\nexport const LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT = 26;\nconst HIERARCHY_VIRTUAL_OVERSCAN = 8;\n\ninterface HierarchyPanelShell {\n header: HTMLElement;\n title: HTMLElement;\n createMenu: HTMLElement;\n search: HTMLInputElement;\n viewport: HTMLElement;\n canvas: HTMLElement;\n input: LocalEditorHierarchyViewInput;\n rows: Map<string, HTMLElement>;\n selectedIdsRef: readonly string[] | null;\n selectedIdsSet: ReadonlySet<string>;\n domOrderKey: string;\n frame: number | null;\n}\n\nconst hierarchyPanelShells = new WeakMap<HTMLElement, HierarchyPanelShell>();\n\nexport function renderLocalEditorHierarchyPanel(\n doc: Document,\n panel: HTMLElement,\n input: LocalEditorHierarchyViewInput,\n): void {\n let shell = hierarchyPanelShells.get(panel);\n if (shell && !panel.contains(shell.viewport)) {\n hierarchyPanelShells.delete(panel);\n shell = undefined;\n }\n if (!shell) {\n clearElement(panel);\n configureLocalEditorDockPanelContent(panel);\n const createMenu = createToolbarButton(doc, '+ 添加', 'plus');\n createMenu.dataset.editorHierarchyCreateMenu = 'true';\n createMenu.title = '添加节点或本地资源';\n createMenu.setAttribute('aria-label', '添加节点或本地资源');\n createMenu.style.padding = '3px 7px';\n createMenu.style.fontSize = '11px';\n const header = createPanelHeader(doc, input.title ?? 'Hierarchy', [createMenu], 'hierarchy');\n const title = header.querySelector<HTMLElement>('h2 span:last-child') ?? header;\n const search = createHierarchySearchInput(doc, input.searchQuery, input.searchPlaceholder);\n search.classList.add('fps-editor-ui-search', 'fps-editor-ui-hierarchy-search');\n const viewport = createLocalEditorDockPanelViewport(doc, 'editorHierarchyTreeViewport');\n viewport.style.position = 'relative';\n viewport.dataset.editorHierarchyRootDrop = 'ready';\n const canvas = doc.createElement('div');\n canvas.className = 'fps-editor-ui-hierarchy-canvas';\n canvas.dataset.editorHierarchyVirtualCanvas = 'true';\n viewport.appendChild(canvas);\n panel.append(header, search, viewport);\n const created: HierarchyPanelShell = {\n header, title, createMenu, search, viewport, canvas, input, rows: new Map(),\n selectedIdsRef: null,\n selectedIdsSet: new Set(),\n domOrderKey: '',\n frame: null,\n };\n shell = created;\n hierarchyPanelShells.set(panel, created);\n viewport.addEventListener('scroll', () => {\n if (created.frame !== null) return;\n created.frame = doc.defaultView?.requestAnimationFrame(() => {\n created.frame = null;\n renderHierarchyVirtualWindow(doc, created);\n }) ?? null;\n if (created.frame === null) renderHierarchyVirtualWindow(doc, created);\n }, { passive: true });\n }\n if (!shell) return;\n shell.input = input;\n shell.title.textContent = input.title ?? 'Hierarchy';\n shell.createMenu.style.display = input.showCreateMenu === false ? 'none' : '';\n if (doc.activeElement !== shell.search && shell.search.value !== input.searchQuery) shell.search.value = input.searchQuery;\n shell.search.placeholder = input.searchPlaceholder ?? '搜索 GameObject 名称';\n shell.viewport.dataset.editorHierarchyRootDrop = input.rootDrop ? 'active' : 'ready';\n renderHierarchyVirtualWindow(doc, shell);\n syncLocalEditorHierarchyDropPreview(doc, panel, {\n dropPreview: input.dropPreview,\n rootDrop: input.rootDrop,\n });\n}\n\nexport function syncLocalEditorHierarchySelectionPresentation(\n panel: HTMLElement,\n input: LocalEditorHierarchySelectionPresentationInput,\n): boolean {\n const shell = hierarchyPanelShells.get(panel);\n if (!shell || !panel.contains(shell.viewport)) return false;\n const selectedIds = input.viewModel.snapshot.selectedIds;\n shell.input = { ...shell.input, viewModel: input.viewModel };\n shell.selectedIdsRef = selectedIds;\n shell.selectedIdsSet = new Set(selectedIds);\n syncLocalEditorHierarchyMountedRowSelectionPresentation(\n shell.rows,\n input.previousSelectedIds,\n input.previousActiveId,\n selectedIds,\n input.viewModel.snapshot.activeId,\n );\n return true;\n}\n\nexport function syncLocalEditorHierarchyMountedRowSelectionPresentation(\n rows: ReadonlyMap<string, HTMLElement>,\n previousSelectedIds: readonly string[],\n previousActiveId: string | null,\n selectedIds: readonly string[],\n activeId: string | null,\n): void {\n const selectedIdSet = new Set(selectedIds);\n const changedIds = new Set([\n ...previousSelectedIds,\n ...selectedIds,\n ...(previousActiveId ? [previousActiveId] : []),\n ...(activeId ? [activeId] : []),\n ]);\n for (const id of changedIds) {\n const row = rows.get(id);\n if (!row) continue;\n syncHierarchyRowSelectionPresentation(row, selectedIdSet.has(id), activeId === id);\n }\n}\n\nexport function applyLocalEditorHierarchyLabelPresentation(\n kernel: LocalEditorHierarchyLabelPresentationKernel,\n rows: ReadonlyMap<string, HTMLElement>,\n labels: Readonly<Record<string, string>>,\n): HierarchyScopeSnapshot | null {\n const snapshot = kernel.patchNodeLabels(labels);\n if (!snapshot) return null;\n for (const id of Object.keys(labels)) {\n const node = snapshot.nodeById.get(id);\n if (!node) return null;\n const row = rows.get(id);\n if (row) syncHierarchyRowLabelPresentation(row, node);\n }\n return snapshot;\n}\n\nexport function syncLocalEditorHierarchyLabelPresentation(\n panel: HTMLElement,\n kernel: LocalEditorHierarchyLabelPresentationKernel,\n labels: Readonly<Record<string, string>>,\n): boolean {\n const shell = hierarchyPanelShells.get(panel);\n if (!shell || !panel.contains(shell.viewport)) return false;\n const snapshot = applyLocalEditorHierarchyLabelPresentation(kernel, shell.rows, labels);\n const previousViewModel = shell.input.viewModel;\n if (!snapshot || !canApplyLocalEditorHierarchyLabelPresentationSnapshot(\n previousViewModel.snapshot,\n snapshot,\n )) {\n if (/(?:^|[?&])debugGizmo=(?:1|true)(?:&|$)/.test(\n panel.ownerDocument.defaultView?.location.search ?? '',\n )) {\n console.info('[fps-editor:presentation]', 'hierarchy-label.rejected', {\n previous: createHierarchyLabelPresentationAuthorityDiagnostic(previousViewModel.snapshot),\n next: snapshot\n ? createHierarchyLabelPresentationAuthorityDiagnostic(snapshot)\n : null,\n labelIds: Object.keys(labels),\n });\n }\n return false;\n }\n shell.input = {\n ...shell.input,\n viewModel: {\n ...previousViewModel,\n snapshot,\n },\n };\n return true;\n}\n\nfunction createHierarchyLabelPresentationAuthorityDiagnostic(\n snapshot: Pick<\n HierarchyScopeSnapshot,\n 'scopeKey' | 'revision' | 'structureRevision' | 'selectedIds' | 'activeId'\n >,\n): Record<string, unknown> {\n return {\n scopeKey: snapshot.scopeKey,\n revision: snapshot.revision,\n structureRevision: snapshot.structureRevision,\n selectedIds: snapshot.selectedIds,\n activeId: snapshot.activeId,\n };\n}\n\nexport function canApplyLocalEditorHierarchyLabelPresentationSnapshot(\n previous: Pick<\n HierarchyScopeSnapshot,\n 'scopeKey' | 'revision' | 'structureRevision' | 'selectedIds' | 'activeId'\n >,\n next: Pick<\n HierarchyScopeSnapshot,\n 'scopeKey' | 'revision' | 'structureRevision' | 'selectedIds' | 'activeId'\n >,\n): boolean {\n return next.scopeKey === previous.scopeKey\n && next.revision >= previous.revision\n && next.structureRevision === previous.structureRevision\n && next.activeId === previous.activeId\n && arraysEqual(next.selectedIds, previous.selectedIds);\n}\n\nexport interface LocalEditorHierarchyLabelPresentationKernel {\n patchNodeLabels(labels: Readonly<Record<string, string>>): HierarchyScopeSnapshot | null;\n}\n\nfunction arraysEqual(left: readonly string[], right: readonly string[]): boolean {\n return left.length === right.length && left.every((value, index) => value === right[index]);\n}\n\n\nfunction renderHierarchyVirtualWindow(doc: Document, shell: HierarchyPanelShell): void {\n const { input, viewport, canvas } = shell;\n const projection = input.viewModel.projection;\n const total = projection.totalCount;\n canvas.style.height = `${Math.max(1, total * LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT)}px`;\n const viewportHeight = viewport.clientHeight || 520;\n const firstVisible = Math.floor(viewport.scrollTop / LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT);\n const start = Math.max(0, firstVisible - HIERARCHY_VIRTUAL_OVERSCAN);\n const count = Math.min(\n total - start,\n Math.ceil(viewportHeight / LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT) + HIERARCHY_VIRTUAL_OVERSCAN * 2,\n );\n const windowRows = projection.getWindow(start, Math.max(0, count));\n const selectedIds = resolveHierarchySelectedIdSet(shell, input.viewModel.snapshot.selectedIds);\n const retained = new Set<string>();\n const orderedRows: HTMLElement[] = [];\n for (let offset = 0; offset < windowRows.length; offset += 1) {\n const projected = windowRows[offset]!;\n const node = createHierarchyRowPresentation(input.viewModel, projected, selectedIds);\n if (!node) continue;\n retained.add(node.node.id);\n const row = ensureHierarchyVirtualRow(doc, shell, node);\n orderedRows.push(row);\n const index = start + offset;\n row.dataset.editorHierarchyVirtualIndex = String(index);\n row.style.position = 'absolute';\n row.style.left = '0';\n row.style.right = '0';\n row.style.top = `${index * LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT}px`;\n row.style.height = `${LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT}px`;\n if (row.parentElement !== canvas) canvas.appendChild(row);\n }\n const pinnedRenameId = input.rename?.id;\n if (pinnedRenameId && !retained.has(pinnedRenameId)) {\n const index = projection.indexOf(pinnedRenameId);\n const projected = projection.getRow(index);\n const node = projected ? createHierarchyRowPresentation(input.viewModel, projected, selectedIds) : null;\n const pinned = node ? ensureHierarchyVirtualRow(doc, shell, node) : null;\n if (pinned && index >= 0) {\n retained.add(pinnedRenameId);\n pinned.dataset.editorHierarchyVirtualIndex = String(index);\n pinned.style.position = 'absolute';\n pinned.style.left = '0';\n pinned.style.right = '0';\n pinned.style.top = `${index * LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT}px`;\n pinned.style.height = `${LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT}px`;\n }\n }\n const pinnedDragId = input.dragId;\n if (pinnedDragId && !retained.has(pinnedDragId)) {\n const index = projection.indexOf(pinnedDragId);\n const projected = projection.getRow(index);\n const node = projected ? createHierarchyRowPresentation(input.viewModel, projected, selectedIds) : null;\n const pinned = node ? ensureHierarchyVirtualRow(doc, shell, node) : null;\n if (pinned && index >= 0) {\n retained.add(pinnedDragId);\n pinned.dataset.editorHierarchyVirtualIndex = String(index);\n pinned.style.position = 'absolute';\n pinned.style.left = '0';\n pinned.style.right = '0';\n pinned.style.top = `${index * LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT}px`;\n pinned.style.height = `${LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT}px`;\n }\n }\n for (const [id, row] of shell.rows) {\n if (retained.has(id)) continue;\n row.remove();\n shell.rows.delete(id);\n }\n let domOrderKey = '';\n for (const row of orderedRows) {\n domOrderKey += `${row.dataset.editorHierarchyId ?? ''}@${row.dataset.editorHierarchyVirtualIndex ?? ''}\\u0000`;\n }\n if (domOrderKey !== shell.domOrderKey) {\n syncHierarchyVirtualRowDomOrder(canvas, orderedRows);\n shell.domOrderKey = domOrderKey;\n }\n let empty = canvas.querySelector<HTMLElement>('[data-editor-hierarchy-empty]');\n if (total === 0) {\n if (!empty) {\n empty = doc.createElement('div');\n empty.dataset.editorHierarchyEmpty = 'true';\n empty.style.cssText = 'position:absolute;inset:0;padding:8px;color:var(--fps-editor-muted);font-size:11px';\n canvas.appendChild(empty);\n }\n empty.textContent = input.searchQuery.trim() ? 'No matching GameObjects.' : 'No hierarchy nodes.';\n } else {\n empty?.remove();\n }\n}\n\nfunction resolveHierarchySelectedIdSet(\n shell: HierarchyPanelShell,\n selectedIds: readonly string[],\n): ReadonlySet<string> {\n if (shell.selectedIdsRef === selectedIds) return shell.selectedIdsSet;\n shell.selectedIdsRef = selectedIds;\n shell.selectedIdsSet = new Set(selectedIds);\n return shell.selectedIdsSet;\n}\n\nfunction syncHierarchyVirtualRowDomOrder(canvas: HTMLElement, orderedRows: readonly HTMLElement[]): void {\n let previous: HTMLElement | null = null;\n for (const row of orderedRows) {\n if (row.parentElement !== canvas) {\n if (previous?.nextSibling) canvas.insertBefore(row, previous.nextSibling);\n else canvas.appendChild(row);\n } else if (previous === null) {\n const firstRow = findFirstHierarchyVirtualRow(canvas);\n if (firstRow && firstRow !== row) canvas.insertBefore(row, firstRow);\n } else if (previous.nextSibling !== row) {\n canvas.insertBefore(row, previous.nextSibling);\n }\n previous = row;\n }\n}\n\nfunction findFirstHierarchyVirtualRow(canvas: HTMLElement): HTMLElement | null {\n for (const child of canvas.children) {\n if (child instanceof HTMLElement && child.dataset.editorHierarchyId) return child;\n }\n return null;\n}\n\nfunction ensureHierarchyVirtualRow(\n doc: Document,\n shell: HierarchyPanelShell,\n rowModel: HierarchyRowPresentation,\n): HTMLElement {\n const { input } = shell;\n const { node } = rowModel;\n const renderKey = [\n input.presentationRevision,\n rowModel.depth, rowModel.expanded, rowModel.enabled,\n node.editorLocked, node.draggable, input.rename?.id === node.id ? input.rename.value : '',\n ].join('\\u0000');\n let row = shell.rows.get(node.id);\n if (!row || row.dataset.editorHierarchyRenderKey !== renderKey) {\n const replacement = renderHierarchyRow(doc, rowModel, input.rename);\n replacement.dataset.editorHierarchyRenderKey = renderKey;\n if (row) row.replaceWith(replacement);\n row = replacement;\n shell.rows.set(node.id, row);\n }\n syncHierarchyRowLabelPresentation(row, node);\n syncHierarchyRowSelectionPresentation(row, rowModel.selected, rowModel.active);\n return row;\n}\n\nfunction syncHierarchyRowLabelPresentation(\n row: HTMLElement,\n node: HierarchyNodeSnapshot,\n): void {\n const label = row.querySelector<HTMLElement>('[data-editor-hierarchy-label]');\n if (label) label.textContent = node.editorLocked ? `${node.label} [locked]` : node.label;\n row.title = node.label;\n}\n\nfunction syncHierarchyRowSelectionPresentation(\n row: HTMLElement,\n selected: boolean,\n active: boolean,\n): void {\n row.dataset.selected = selected ? 'true' : 'false';\n row.dataset.active = active ? 'true' : 'false';\n}\n\nfunction createHierarchyRowPresentation(\n viewModel: HierarchyViewModel,\n projected: HierarchyVisibleRow,\n selectedIds: ReadonlySet<string>,\n): HierarchyRowPresentation | null {\n const node = viewModel.snapshot.nodeById.get(projected.id);\n if (!node) return null;\n const childCount = viewModel.snapshot.childrenByParentId.get(node.id)?.length ?? 0;\n const enabled = node.authoredEnabled ?? node.editorVisible;\n const supportsToggle = node.authoredEnabled !== undefined\n ? viewModel.snapshot.capabilities.authoredEnabled === true\n : node.editorVisible !== undefined && viewModel.snapshot.capabilities.editorVisibility === true;\n return {\n node,\n depth: projected.depth,\n role: normalizeHierarchyRowRole(node.role),\n selected: selectedIds.has(node.id),\n active: viewModel.snapshot.activeId === node.id,\n expanded: childCount > 0 && (viewModel.state.searchQuery.trim().length > 0 || !viewModel.state.collapsedIds.has(node.id)),\n enabled,\n canToggleEnabled: supportsToggle && node.editorLocked !== true,\n childCount,\n };\n}\n\nfunction normalizeHierarchyRowRole(role: string | undefined): HierarchyRowRole {\n return role === 'root' || role === 'group' || role === 'marker' ? role : 'object';\n}\n\nexport function syncLocalEditorHierarchyDropPreview(\n doc: Document,\n panel: HTMLElement,\n input: Pick<LocalEditorHierarchyViewInput, 'dropPreview' | 'rootDrop'>,\n): void {\n const list = panel.querySelector<HTMLElement>('[data-editor-hierarchy-tree-viewport]');\n if (!list) return;\n syncLocalEditorStructuredDragPreview(doc, {\n root: list,\n preview: input.dropPreview,\n rootActive: input.rootDrop,\n reset: clearHierarchyDropPreviewDom,\n applyRootState: applyHierarchyRootDropPreviewState,\n findTarget: preview => findHierarchyPreviewRow(panel, preview.targetId),\n applyTargetPreview: applyHierarchyTargetDropPreview,\n });\n}\n\nfunction applyHierarchyRootDropPreviewState(\n list: HTMLElement,\n state: { rootActive: boolean; rootPreview: LocalEditorHierarchyDropPreview | null },\n): void {\n list.dataset.editorHierarchyRootDrop = state.rootActive ? 'active' : 'ready';\n const preview = state.rootPreview;\n if (!preview) return;\n list.dataset.editorHierarchyDropPreview = 'root';\n list.dataset.editorHierarchyDropPreviewValid = preview.valid ? 'true' : 'false';\n list.style.boxShadow = `inset 0 -3px 0 ${preview.valid ? 'var(--fps-editor-warn-strong)' : 'var(--fps-editor-muted)'}`;\n list.style.background = preview.valid ? 'var(--fps-editor-warn-soft)' : 'var(--fps-editor-field)';\n}\n\nfunction applyHierarchyTargetDropPreview(\n doc: Document,\n row: HTMLElement,\n preview: LocalEditorHierarchyDropPreview,\n): void {\n row.dataset.editorHierarchyDropPreview = preview.kind === 'inside' ? 'inside' : preview.placement;\n row.dataset.editorHierarchyDropPreviewValid = preview.valid ? 'true' : 'false';\n if (preview.kind === 'inside') {\n row.appendChild(renderHierarchyInsidePreview(doc, preview));\n return;\n }\n row.appendChild(renderHierarchyInsertionPreview(doc, preview));\n}\n\nfunction createHierarchySearchInput(\n doc: Document,\n value: string,\n placeholder = '搜索 GameObject 名称',\n): HTMLInputElement {\n const input = doc.createElement('input');\n input.type = 'search';\n input.dataset.editorHierarchySearch = 'true';\n input.placeholder = placeholder;\n input.value = value;\n input.style.cssText = [\n createEditorInputStyle(),\n 'width:100%',\n 'height:28px',\n 'margin:0 0 8px',\n 'outline:none',\n ].join(';');\n return input;\n}\n\nfunction renderHierarchyRow(\n doc: Document,\n rowModel: HierarchyRowPresentation,\n rename: { id: string; value: string } | null,\n): HTMLButtonElement {\n const { node } = rowModel;\n const isRenaming = rename?.id === node.id;\n const canHaveChildren = node.canHaveChildren && node.editorLocked !== true;\n const button = createTreeViewItem(doc, {\n id: node.id,\n label: node.label,\n depth: rowModel.depth,\n role: rowModel.role,\n selected: rowModel.selected,\n active: rowModel.active,\n locked: node.editorLocked,\n protected: false,\n selectable: node.selectable,\n enabled: rowModel.enabled,\n draggable: node.draggable,\n dropPlacement: null,\n });\n button.dataset.editorHierarchyCanHaveChildren = canHaveChildren ? 'true' : 'false';\n button.title = node.label;\n appendDisclosure(doc, button, rowModel);\n appendEnabledToggle(doc, button, rowModel);\n appendRoleBadge(doc, button, rowModel);\n if (isRenaming) appendRenameInput(doc, button, node, rename.value);\n else appendLabel(doc, button, rowModel);\n return button;\n}\n\nfunction appendEnabledToggle(\n doc: Document,\n button: HTMLButtonElement,\n rowModel: HierarchyRowPresentation,\n): void {\n const { node } = rowModel;\n if (typeof rowModel.enabled !== 'boolean') {\n const spacer = doc.createElement('span');\n spacer.style.cssText = 'width:18px;height:18px;flex:0 0 18px';\n button.appendChild(spacer);\n return;\n }\n const enabled = rowModel.enabled !== false;\n const toggle = doc.createElement('span');\n toggle.dataset.editorHierarchyEnabledToggle = node.id;\n toggle.dataset.editorHierarchyEnabled = enabled ? 'true' : 'false';\n const disabled = !rowModel.canToggleEnabled;\n toggle.dataset.editorHierarchyEnabledToggleDisabled = disabled ? 'true' : 'false';\n toggle.title = disabled\n ? 'This hierarchy item cannot be hidden.'\n : `${enabled ? 'Hide' : 'Show'} ${node.label}`;\n toggle.style.cssText = [\n 'width:18px',\n 'height:18px',\n 'flex:0 0 18px',\n 'display:inline-flex',\n 'align-items:center',\n 'justify-content:center',\n 'padding:0',\n 'border:1px solid transparent',\n 'border-radius:3px',\n 'background:transparent',\n `color:${enabled ? 'var(--fps-editor-muted-strong)' : 'var(--fps-editor-muted)'}`,\n `opacity:${disabled ? '0.45' : '1'}`,\n `cursor:${disabled ? 'not-allowed' : 'pointer'}`,\n ].join(';');\n toggle.appendChild(createLocalEditorIcon(doc, enabled ? 'eye' : 'eye-off', { size: 13, strokeWidth: 2.2 }));\n button.appendChild(toggle);\n}\n\nfunction renderHierarchyInsertionPreview(\n doc: Document,\n preview: LocalEditorHierarchyDropPreview,\n): HTMLDivElement {\n const line = doc.createElement('div');\n line.dataset.editorHierarchyInsertionPreview = 'true';\n line.dataset.editorHierarchyDropPreview = preview.placement;\n line.dataset.editorHierarchyDropPreviewValid = preview.valid ? 'true' : 'false';\n line.style.cssText = [\n 'position:absolute',\n 'left:0',\n 'right:0',\n preview.placement === 'before' ? 'top:-5px' : 'bottom:-5px',\n 'height:10px',\n 'pointer-events:none',\n 'z-index:4',\n ].join(';');\n const anchor = doc.createElement('span');\n anchor.style.cssText = [\n 'position:absolute',\n `left:${Math.max(2, 2 + preview.depth * 16)}px`,\n 'top:2px',\n 'width:6px',\n 'height:6px',\n 'border-radius:50%',\n `background:${preview.valid ? 'var(--fps-editor-warn-strong)' : 'var(--fps-editor-muted)'}`,\n `box-shadow:${preview.valid ? '0 0 0 2px rgba(0,0,0,0.35), 0 0 10px rgba(255,193,7,0.55)' : '0 0 0 2px rgba(0,0,0,0.25)'}`,\n ].join(';');\n const rule = doc.createElement('span');\n rule.style.cssText = [\n 'position:absolute',\n `left:${8 + preview.depth * 16}px`,\n 'right:4px',\n 'top:4px',\n 'height:3px',\n `background:${preview.valid ? 'var(--fps-editor-warn-strong)' : 'var(--fps-editor-muted)'}`,\n `opacity:${preview.valid ? '1' : '0.6'}`,\n `box-shadow:${preview.valid ? '0 0 0 1px rgba(0,0,0,0.25), 0 0 12px rgba(255,193,7,0.42)' : '0 0 0 1px rgba(0,0,0,0.18)'}`,\n ].join(';');\n line.appendChild(anchor);\n line.appendChild(rule);\n return line;\n}\n\nfunction renderHierarchyInsidePreview(\n doc: Document,\n preview: LocalEditorHierarchyDropPreview,\n): HTMLDivElement {\n const overlay = doc.createElement('div');\n overlay.dataset.editorHierarchyInsidePreview = 'true';\n overlay.dataset.editorHierarchyDropPreview = 'inside';\n overlay.dataset.editorHierarchyDropPreviewValid = preview.valid ? 'true' : 'false';\n overlay.style.cssText = [\n 'position:absolute',\n 'inset:0',\n 'pointer-events:none',\n 'z-index:1',\n `border:1px solid ${preview.valid ? 'var(--fps-editor-drop-target)' : 'var(--fps-editor-muted)'}`,\n `box-shadow:${preview.valid ? 'inset 4px 0 0 var(--fps-editor-drop-target), 0 0 0 1px rgba(255,255,255,0.08), 0 0 14px rgba(255,193,7,0.24)' : 'inset 4px 0 0 var(--fps-editor-muted)'}`,\n `background:${preview.valid ? 'rgba(255,193,7,0.09)' : 'rgba(255,255,255,0.04)'}`,\n ].join(';');\n return overlay;\n}\n\nfunction clearHierarchyDropPreviewDom(list: HTMLElement): void {\n list.style.boxShadow = '';\n list.style.background = '';\n delete list.dataset.editorHierarchyDropPreview;\n delete list.dataset.editorHierarchyDropPreviewValid;\n for (const preview of list.querySelectorAll<HTMLElement>('[data-editor-hierarchy-insertion-preview],[data-editor-hierarchy-inside-preview]')) {\n preview.remove();\n }\n for (const row of list.querySelectorAll<HTMLElement>('[data-editor-hierarchy-drop-preview]')) {\n delete row.dataset.editorHierarchyDropPreview;\n delete row.dataset.editorHierarchyDropPreviewValid;\n }\n}\n\nfunction findHierarchyPreviewRow(panel: HTMLElement, targetId: string | null): HTMLElement | null {\n if (!targetId) return null;\n for (const row of panel.querySelectorAll<HTMLElement>('[data-editor-hierarchy-id]')) {\n if (row.dataset.editorHierarchyId === targetId) return row;\n }\n return null;\n}\n\nfunction appendDisclosure(doc: Document, parent: HTMLElement, rowModel: HierarchyRowPresentation): void {\n const { node } = rowModel;\n const disclosure = doc.createElement('span');\n if (rowModel.childCount > 0) disclosure.dataset.editorHierarchyToggle = node.id;\n disclosure.style.cssText = [\n 'width:12px',\n 'flex:0 0 12px',\n 'display:inline-flex',\n 'align-items:center',\n 'justify-content:center',\n 'color:var(--fps-editor-muted)',\n 'font-size:10px',\n ].join(';');\n if (rowModel.childCount > 0) {\n disclosure.appendChild(createLocalEditorIcon(doc, rowModel.expanded ? 'chevron-down' : 'chevron-right', {\n size: 12,\n strokeWidth: 2.4,\n }));\n }\n parent.appendChild(disclosure);\n}\n\nfunction appendRoleBadge(doc: Document, parent: HTMLElement, rowModel: HierarchyRowPresentation): void {\n const { node } = rowModel;\n const badge = doc.createElement('span');\n const icon = isLocalEditorIconName(node.icon) ? node.icon : HIERARCHY_ROLE_ICONS[rowModel.role];\n const isMaterialSlot = icon === 'material-slot';\n const isPrefab = icon === 'prefab';\n badge.title = isMaterialSlot ? 'material slot' : isPrefab ? 'prefab' : rowModel.role;\n badge.style.cssText = [\n 'width:15px',\n 'height:15px',\n 'flex:0 0 15px',\n 'display:inline-flex',\n 'align-items:center',\n 'justify-content:center',\n 'border:1px solid var(--fps-editor-border)',\n 'border-radius:2px',\n `background:${isMaterialSlot ? 'var(--fps-editor-warn-soft)' : rowModel.role === 'root' ? 'var(--fps-editor-role-root-bg)' : rowModel.role === 'group' ? 'var(--fps-editor-role-group-bg)' : 'var(--fps-editor-role-object-bg)'}`,\n `border-color:${isMaterialSlot ? 'var(--fps-editor-warn-border)' : 'var(--fps-editor-border)'}`,\n `color:${isMaterialSlot ? 'var(--fps-editor-warn-strong)' : 'var(--fps-editor-muted-strong)'}`,\n 'font-size:9px',\n 'font-weight:900',\n ].join(';');\n badge.appendChild(createLocalEditorIcon(doc, icon, { size: 11, strokeWidth: 2.3 }));\n parent.appendChild(badge);\n}\n\nfunction appendLabel(doc: Document, parent: HTMLElement, rowModel: HierarchyRowPresentation): void {\n const { node } = rowModel;\n const label = doc.createElement('span');\n label.dataset.editorHierarchyLabel = 'true';\n label.textContent = node.editorLocked ? `${node.label} [locked]` : node.label;\n label.style.cssText = 'min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap';\n parent.appendChild(label);\n}\n\nfunction appendRenameInput(\n doc: Document,\n parent: HTMLElement,\n node: HierarchyNodeSnapshot,\n value: string,\n): void {\n const input = doc.createElement('input');\n input.dataset.editorHierarchyRenameInput = node.id;\n input.value = value;\n input.style.cssText = [\n 'min-width:0',\n 'flex:1',\n 'height:22px',\n 'box-sizing:border-box',\n 'border:1px solid var(--fps-editor-accent-strong)',\n 'border-radius:2px',\n 'background:var(--fps-editor-field)',\n 'color:var(--fps-editor-text-strong)',\n 'font-size:12px',\n 'font-weight:700',\n 'padding:2px 5px',\n 'outline:none',\n ].join(';');\n parent.appendChild(input);\n setTimeout(() => {\n // A kernel-driven draft render may already have restored focus and caret\n // onto this replacement input. Only select all for the initial rename.\n if (doc.activeElement === input) return;\n input.focus();\n input.select();\n }, 0);\n}\n"]}
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import { type EditorUiMount, type EditorUiLayerHost } from '@fps-games/editor-ui';
|
|
2
|
-
import type { LocalEditorAssetBrowserTab, LocalEditorBottomDockTab, LocalEditorBrowserInspectorConflictStrategy, LocalEditorBrowserInspectorControlBindingOptions, LocalEditorBrowserInspectorControlRegistration, LocalEditorBrowserInspectorControlRenderContext, LocalEditorBrowserInspectorEffectMode, LocalEditorBrowserInspectorObject, LocalEditorBrowserInspectorProperty, LocalEditorBrowserInspectorSection, LocalEditorBrowserUiAssetItem, LocalEditorBrowserUiState, LocalEditorRightDockTab, LocalEditorWorkbenchPanelDescriptor } from './local-editor-ui-types';
|
|
2
|
+
import type { LocalEditorAssetBrowserTab, LocalEditorBottomDockTab, LocalEditorBrowserInspectorConflictStrategy, LocalEditorBrowserInspectorControlBindingOptions, LocalEditorBrowserInspectorControlRegistration, LocalEditorBrowserInspectorControlRenderContext, LocalEditorBrowserInspectorEffectMode, LocalEditorBrowserInspectorObject, LocalEditorBrowserInspectorPresentationPatch, LocalEditorBrowserInspectorProperty, LocalEditorBrowserInspectorSection, LocalEditorBrowserUiAssetItem, LocalEditorBrowserUiState, LocalEditorRightDockTab, LocalEditorWorkbenchPanelDescriptor } from './local-editor-ui-types';
|
|
3
3
|
import { type LocalEditorAssetFilesystemViewMode } from './local-editor-asset-filesystem';
|
|
4
|
+
/**
|
|
5
|
+
* Updates already-mounted value controls only. A miss intentionally does not
|
|
6
|
+
* rebuild the Inspector: the next authoritative render owns reconciliation.
|
|
7
|
+
*/
|
|
8
|
+
export declare function applyInspectorPresentationPatches(panel: HTMLElement, patches: readonly LocalEditorBrowserInspectorPresentationPatch[]): boolean;
|
|
9
|
+
/** Updates the selected Inspector's summary label without rebuilding controls. */
|
|
10
|
+
export declare function applyInspectorSummaryLabel(panel: HTMLElement, label: string): boolean;
|
|
4
11
|
export declare function registerInspectorUiMount<T extends EditorUiMount>(mount: T): T;
|
|
5
12
|
export declare function disposeInspectorPanelUi(panel: HTMLElement): void;
|
|
6
13
|
export type LocalEditorAssetBrowserViewMode = LocalEditorAssetFilesystemViewMode;
|
|
@@ -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;AA2BjC,OAAO,EAWL,KAAK,kCAAkC,EACxC,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"local-editor-ui-panels.d.ts","sourceRoot":"","sources":["../src/local-editor-ui-panels.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,68 @@ import { createLocalEditorBrowserInspectorVectorCopyPayload, } from './local-edi
|
|
|
9
9
|
import { resolveLocalEditorBrowserInspectorVectorGroupAxisFromPropertyPath, resolveLocalEditorBrowserInspectorVectorGroupPathFromProperties, } from './local-editor-inspector-groups.js';
|
|
10
10
|
const inspectorUiMounts = new WeakMap();
|
|
11
11
|
const inspectorPanelUiPendingDisposals = new WeakMap();
|
|
12
|
+
const inspectorValueControls = new WeakMap();
|
|
13
|
+
const inspectorPanelPresentationControls = new WeakMap();
|
|
14
|
+
function inspectorPresentationControlKey(targetId, propertyPath) {
|
|
15
|
+
return `${targetId}\u0000${propertyPath}`;
|
|
16
|
+
}
|
|
17
|
+
function refreshInspectorPresentationControls(panel, authoritativeGeneration) {
|
|
18
|
+
const previous = inspectorPanelPresentationControls.get(panel);
|
|
19
|
+
const controls = new Map();
|
|
20
|
+
for (const element of panel.querySelectorAll('[data-editor-inspector-presentation-key]')) {
|
|
21
|
+
const key = element.dataset.editorInspectorPresentationKey;
|
|
22
|
+
const control = inspectorValueControls.get(element);
|
|
23
|
+
if (key && control)
|
|
24
|
+
controls.set(key, control);
|
|
25
|
+
}
|
|
26
|
+
inspectorPanelPresentationControls.set(panel, {
|
|
27
|
+
controls,
|
|
28
|
+
generationFloor: Number.isSafeInteger(authoritativeGeneration) && authoritativeGeneration >= 0
|
|
29
|
+
? authoritativeGeneration
|
|
30
|
+
: previous?.currentGeneration != null
|
|
31
|
+
? previous.currentGeneration + 1
|
|
32
|
+
: (previous?.generationFloor ?? -1) + 1,
|
|
33
|
+
currentGeneration: null,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Updates already-mounted value controls only. A miss intentionally does not
|
|
38
|
+
* rebuild the Inspector: the next authoritative render owns reconciliation.
|
|
39
|
+
*/
|
|
40
|
+
export function applyInspectorPresentationPatches(panel, patches) {
|
|
41
|
+
const registry = inspectorPanelPresentationControls.get(panel);
|
|
42
|
+
if (!registry || patches.length === 0)
|
|
43
|
+
return false;
|
|
44
|
+
let applied = false;
|
|
45
|
+
for (const patch of patches) {
|
|
46
|
+
if (!Number.isSafeInteger(patch.generation) || patch.generation < registry.generationFloor)
|
|
47
|
+
continue;
|
|
48
|
+
if (registry.currentGeneration == null || patch.generation > registry.currentGeneration) {
|
|
49
|
+
registry.currentGeneration = patch.generation;
|
|
50
|
+
registry.authority = patch.authority;
|
|
51
|
+
registry.context = patch.context;
|
|
52
|
+
}
|
|
53
|
+
else if (patch.generation < registry.currentGeneration
|
|
54
|
+
|| patch.authority !== registry.authority
|
|
55
|
+
|| patch.context !== registry.context) {
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
const control = registry.controls.get(inspectorPresentationControlKey(patch.targetId, patch.propertyPath));
|
|
59
|
+
if (!control)
|
|
60
|
+
continue;
|
|
61
|
+
control.setValue(patch.value);
|
|
62
|
+
applied = true;
|
|
63
|
+
}
|
|
64
|
+
return applied;
|
|
65
|
+
}
|
|
66
|
+
/** Updates the selected Inspector's summary label without rebuilding controls. */
|
|
67
|
+
export function applyInspectorSummaryLabel(panel, label) {
|
|
68
|
+
const value = panel.querySelector('[data-editor-inspector-summary-label]');
|
|
69
|
+
if (!value)
|
|
70
|
+
return false;
|
|
71
|
+
value.textContent = label;
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
12
74
|
export function registerInspectorUiMount(mount) {
|
|
13
75
|
mount.element.dataset.editorUiMount = 'inspector';
|
|
14
76
|
inspectorUiMounts.set(mount.element, mount);
|
|
@@ -43,6 +105,7 @@ export function disposeInspectorPanelUi(panel) {
|
|
|
43
105
|
}
|
|
44
106
|
if (pending.size === 0)
|
|
45
107
|
inspectorPanelUiPendingDisposals.delete(panel);
|
|
108
|
+
inspectorPanelPresentationControls.get(panel)?.controls.clear();
|
|
46
109
|
if (failures.length > 0) {
|
|
47
110
|
const error = new Error('Failed to dispose one or more Inspector UI mounts.');
|
|
48
111
|
error.causes = failures;
|
|
@@ -1930,6 +1993,7 @@ export function renderInspectorPanel(doc, panel, state, filter = '', options = {
|
|
|
1930
1993
|
viewport.appendChild(createInspectorSectionBlock(doc, inspectorObject, section, controlRegistry, options));
|
|
1931
1994
|
}
|
|
1932
1995
|
panel.appendChild(viewport);
|
|
1996
|
+
refreshInspectorPresentationControls(panel, state.inspectorPresentationGeneration);
|
|
1933
1997
|
restoreInspectorPanelRenderSnapshot(panel, renderSnapshot);
|
|
1934
1998
|
}
|
|
1935
1999
|
function captureInspectorPanelRenderSnapshot(doc, panel) {
|
|
@@ -1976,7 +2040,8 @@ function appendInspectorSummary(doc, panel, inspectorObject, selectionCount, sum
|
|
|
1976
2040
|
header.appendChild(title);
|
|
1977
2041
|
header.appendChild(createInspectorAccessBadge(doc, 'readonly'));
|
|
1978
2042
|
block.appendChild(header);
|
|
1979
|
-
appendReadOnlyRow(doc, block, selectionCount > 1 ? 'Selected' : targetKind === 'marker' ? 'Label' : 'Name', inspectorObject.label ?? inspectorObject.activeId ?? inspectorObject.targetIds[0] ?? '无');
|
|
2043
|
+
const summaryLabel = appendReadOnlyRow(doc, block, selectionCount > 1 ? 'Selected' : targetKind === 'marker' ? 'Label' : 'Name', inspectorObject.label ?? inspectorObject.activeId ?? inspectorObject.targetIds[0] ?? '无');
|
|
2044
|
+
summaryLabel.dataset.editorInspectorSummaryLabel = 'true';
|
|
1980
2045
|
appendReadOnlyRow(doc, block, 'Active ID', inspectorObject.activeId ?? '无');
|
|
1981
2046
|
if (selectionCount > 1)
|
|
1982
2047
|
appendReadOnlyRow(doc, block, 'Count', String(selectionCount));
|
|
@@ -2743,6 +2808,11 @@ function createInspectorReadonlyScalarControl(doc, value, access, effect = 'acti
|
|
|
2743
2808
|
return valueElement;
|
|
2744
2809
|
}
|
|
2745
2810
|
function bindEditorUiValueControl(control, target, property, options) {
|
|
2811
|
+
const targetId = target.activeId ?? target.targetIds[0] ?? null;
|
|
2812
|
+
if (targetId) {
|
|
2813
|
+
control.element.dataset.editorInspectorPresentationKey = inspectorPresentationControlKey(targetId, property.path);
|
|
2814
|
+
inspectorValueControls.set(control.element, control);
|
|
2815
|
+
}
|
|
2746
2816
|
for (const input of control.nativeInputs) {
|
|
2747
2817
|
applyLocalEditorBrowserInspectorControlBinding(input, target, property, options);
|
|
2748
2818
|
}
|
|
@@ -3269,7 +3339,7 @@ function createInspectorGroundDecalLayoutControl(doc, _target, property, bindInp
|
|
|
3269
3339
|
const input = doc.createElement('input');
|
|
3270
3340
|
input.type = 'hidden';
|
|
3271
3341
|
input.value = serializeInspectorGroundDecalLayoutValue(layers, composite);
|
|
3272
|
-
bindInput(input, { source: 'custom' });
|
|
3342
|
+
bindInput(input, { source: 'custom', refreshInspector: false });
|
|
3273
3343
|
input.dataset.serializedJsonValue = 'true';
|
|
3274
3344
|
wrapper.appendChild(input);
|
|
3275
3345
|
const surface = doc.createElement('div');
|
|
@@ -4252,6 +4322,8 @@ export function applyLocalEditorBrowserInspectorControlBinding(element, target,
|
|
|
4252
4322
|
element.dataset.serializedDisabledReason = property.disabledReason;
|
|
4253
4323
|
if (options?.source)
|
|
4254
4324
|
element.dataset.serializedEditSource = options.source;
|
|
4325
|
+
if (options?.refreshInspector === false)
|
|
4326
|
+
element.dataset.serializedRefreshInspector = 'false';
|
|
4255
4327
|
const access = getInspectorPropertyAccess(property);
|
|
4256
4328
|
const effect = getInspectorPropertyEffect(property);
|
|
4257
4329
|
element.title = access === 'editable' && effect === 'active'
|
|
@@ -4277,6 +4349,7 @@ function appendReadOnlyRow(doc, parent, label, value) {
|
|
|
4277
4349
|
const row = createInspectorPropertyRowShell(doc, label, valueElement);
|
|
4278
4350
|
row.dataset.editorInspectorAccess = 'readonly';
|
|
4279
4351
|
parent.appendChild(row);
|
|
4352
|
+
return valueElement;
|
|
4280
4353
|
}
|
|
4281
4354
|
function createSelectionSummaryInspectorObject(state) {
|
|
4282
4355
|
const targetIds = state.selectedIds;
|