@fps-games/editor 0.2.0-beta.3 → 0.2.0-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/agent-bridge/capabilities/editor-state.d.ts.map +1 -1
- package/dist/agent-bridge/capabilities/editor-state.js +26 -17
- package/dist/agent-bridge/capabilities/editor-state.js.map +1 -1
- package/dist/agent-bridge/capabilities/prefabs.d.ts.map +1 -1
- package/dist/agent-bridge/capabilities/prefabs.js +61 -13
- package/dist/agent-bridge/capabilities/prefabs.js.map +1 -1
- package/dist/agent-bridge/capabilities/scene-objects.d.ts +1 -1
- package/dist/agent-bridge/capabilities/scene-objects.d.ts.map +1 -1
- package/dist/agent-bridge/capabilities/scene-objects.js +110 -25
- package/dist/agent-bridge/capabilities/scene-objects.js.map +1 -1
- package/dist/agent-bridge/capabilities/selection.d.ts.map +1 -1
- package/dist/agent-bridge/capabilities/selection.js +8 -5
- package/dist/agent-bridge/capabilities/selection.js.map +1 -1
- package/dist/agent-bridge/capabilities/shadows.d.ts.map +1 -1
- package/dist/agent-bridge/capabilities/shadows.js +11 -2
- package/dist/agent-bridge/capabilities/shadows.js.map +1 -1
- package/dist/agent-bridge/capabilities/transform.d.ts.map +1 -1
- package/dist/agent-bridge/capabilities/transform.js +6 -4
- package/dist/agent-bridge/capabilities/transform.js.map +1 -1
- package/dist/agent-bridge/capabilities/viewport.d.ts.map +1 -1
- package/dist/agent-bridge/capabilities/viewport.js +79 -47
- package/dist/agent-bridge/capabilities/viewport.js.map +1 -1
- package/dist/agent-bridge/shared.d.ts +8 -3
- package/dist/agent-bridge/shared.d.ts.map +1 -1
- package/dist/agent-bridge/shared.js +32 -0
- package/dist/agent-bridge/shared.js.map +1 -1
- package/dist/build-info.json +34 -34
- package/dist/local-editor-agent-actions.d.ts.map +1 -1
- package/dist/local-editor-agent-actions.js +9 -5
- package/dist/local-editor-agent-actions.js.map +1 -1
- package/dist/local-editor-harness.d.ts.map +1 -1
- package/dist/local-editor-harness.js +264 -41
- package/dist/local-editor-harness.js.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/package.json +7 -7
- package/node_modules/@fps-games/editor-babylon/package.json +5 -5
- 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-ui-hierarchy-controller.d.ts +2 -1
- 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 +260 -94
- 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-projection.d.ts +7 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-projection.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-projection.js +186 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-projection.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-scope.d.ts +2 -2
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-scope.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-scope.js +14 -8
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-scope.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-tree.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-tree.js +23 -7
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-tree.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.d.ts +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.js +6 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-input-router.d.ts +3 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-input-router.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-input-router.js +60 -13
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-input-router.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-status-diagnostics.d.ts +24 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-status-diagnostics.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-status-diagnostics.js +69 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-status-diagnostics.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts +58 -14
- 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 +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js +196 -11
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/package.json +4 -4
- package/node_modules/@fps-games/editor-core/dist/editor-session.d.ts +3 -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 +9 -0
- package/node_modules/@fps-games/editor-core/dist/editor-session.js.map +1 -1
- package/node_modules/@fps-games/editor-core/package.json +6 -6
- package/node_modules/@fps-games/editor-forge-play/package.json +2 -2
- package/node_modules/@fps-games/editor-playable-sdk/package.json +6 -6
- 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/playable-assets/package.json +1 -1
- package/node_modules/@fps-games/playable-contracts/package.json +1 -1
- package/node_modules/@fps-games/playable-rendering/package.json +2 -2
- package/node_modules/@fps-games/playable-runtime/package.json +12 -12
- package/node_modules/@fps-games/playable-runtime-data/package.json +4 -4
- package/node_modules/@fps-games/playable-scene/package.json +2 -2
- package/node_modules/@fps-games/plugin-api/package.json +1 -1
- package/node_modules/@fps-games/plugin-assets/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-assets/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-assets/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-assets/package.json +5 -5
- package/node_modules/@fps-games/plugin-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-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 +19 -19
package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-editor-ui-hierarchy-controller.js","sourceRoot":"","sources":["../src/local-editor-ui-hierarchy-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import type { SelectionCommand } from '@fps-games/editor-core';\nimport {\n createLocalEditorHierarchyBlankMenu,\n createLocalEditorHierarchyCopyShortcutAction,\n createLocalEditorHierarchyDeleteShortcutAction,\n createLocalEditorHierarchyDuplicateShortcutAction,\n createLocalEditorHierarchyNodeMenu,\n createLocalEditorHierarchyPasteShortcutAction,\n createLocalEditorHierarchySelectAllShortcutAction,\n type LocalEditorHierarchyAction,\n} from './local-editor-ui-hierarchy-actions';\nimport {\n canLocalEditorHierarchyNodeHaveChildren,\n canLocalEditorHierarchyNodeRename,\n canLocalEditorHierarchyNodeToggleEnabled,\n createLocalEditorHierarchyTreeModel,\n type LocalEditorHierarchyDropResolution,\n isLocalEditorHierarchyNodeSelectable,\n isLocalEditorHierarchyNodeMovable,\n type LocalEditorHierarchyTreeModel,\n type LocalEditorHierarchyTreeNode,\n} from './local-editor-ui-hierarchy-tree';\nimport {\n resolveLocalEditorHierarchyDragOperation,\n type LocalEditorHierarchyDragLayout,\n type LocalEditorHierarchyDragLayoutRow,\n type LocalEditorHierarchyDragOperation,\n type LocalEditorHierarchyDropPreview,\n} from './local-editor-ui-hierarchy-drag-policy';\nimport {\n resolveLocalEditorHierarchyAutoScroll,\n} from './local-editor-ui-hierarchy-auto-scroll';\nimport {\n clearLocalEditorStructuredDragSession,\n createLocalEditorStructuredDragSession,\n hasLocalEditorStructuredDragSessionFeedback,\n} from './local-editor-ui-structured-drag-session';\nimport {\n renderLocalEditorHierarchyPanel,\n syncLocalEditorHierarchyDropPreview,\n} from './local-editor-ui-hierarchy-view';\nimport {\n createLocalEditorActiveHierarchyScope,\n} from './local-editor-ui-hierarchy-scope';\nimport {\n resolveLocalEditorHierarchyCommandAdapter,\n} from './local-editor-ui-hierarchy-command-adapter';\nimport {\n createLocalEditorViewportRevealController,\n} from './local-editor-ui-dock-panel';\nimport {\n createLocalEditorHierarchyAttachDialog,\n type LocalEditorHierarchyAttachConfirmResult,\n type LocalEditorHierarchyAttachTargetSelection,\n} from './local-editor-ui-hierarchy-attach-dialog';\nimport type { LocalEditorContextMenuController } from './local-editor-ui-context-menu';\nimport type { LocalEditorWorkbenchInputRouter } from './local-editor-ui-input-router';\nimport type {\n LocalEditorBrowserAssetActionInput,\n LocalEditorBrowserSceneGraphDropIntent,\n LocalEditorBrowserSceneGraphDropPlacement,\n LocalEditorBrowserSceneGraphActionResponse,\n LocalEditorBrowserHierarchyContextActionRegistration,\n LocalEditorBrowserHierarchyScope,\n LocalEditorBrowserUiCallbacks,\n LocalEditorBrowserUiState,\n LocalEditorContextAction,\n} from './local-editor-ui-types';\n\nconst HIERARCHY_DRAG_INDENT_WIDTH = 16;\n\nexport interface LocalEditorHierarchyController<TDocument = unknown> {\n render(state: LocalEditorBrowserUiState<TDocument>): void;\n handleEditShortcut(event: KeyboardEvent): boolean;\n handleDeleteShortcut(event: KeyboardEvent): boolean;\n dispose(): void;\n}\n\nexport interface LocalEditorHierarchyControllerOptions<TDocument = unknown> {\n doc: Document;\n panel: HTMLElement;\n callbacks: LocalEditorBrowserUiCallbacks;\n inputRouter: LocalEditorWorkbenchInputRouter;\n contextMenu: LocalEditorContextMenuController;\n getState: () => LocalEditorBrowserUiState<TDocument> | null;\n requestRender: () => void;\n onBeforeOpenContextMenu?: () => void;\n contextActions?: readonly LocalEditorBrowserHierarchyContextActionRegistration<TDocument>[];\n}\n\nexport function resolveLocalEditorHierarchyCreateMarkerParentId(\n activeNode: LocalEditorHierarchyTreeNode | null,\n): string | null {\n return activeNode && activeNode.item.canHaveChildren === true && activeNode.item.role !== 'marker'\n ? activeNode.id\n : null;\n}\n\nexport function createLocalEditorHierarchyController<TDocument = unknown>(\n options: LocalEditorHierarchyControllerOptions<TDocument>,\n): LocalEditorHierarchyController<TDocument> {\n const { doc, panel, callbacks, inputRouter, contextMenu, getState, requestRender } = options;\n const collapsedIdsByScope = new Map<string, Set<string>>();\n const hierarchySearchByScope = new Map<string, string>();\n let hierarchyRename: { id: string; value: string } | null = null;\n let hierarchyDrag: { id: string } | null = null;\n let hierarchyDrop: LocalEditorBrowserSceneGraphDropIntent | null = null;\n let hierarchyRootDrop = false;\n const hierarchyDragSession = createLocalEditorStructuredDragSession<\n LocalEditorHierarchyDragOperation,\n LocalEditorHierarchyDropPreview\n >();\n let hierarchyShortcutScopeActive = false;\n let hierarchyClipboard: { ids: string[]; activeId: string | null } | null = null;\n let hierarchySearchComposing = false;\n let currentModel: LocalEditorHierarchyTreeModel | null = null;\n let lastRenderedActiveId: string | null | undefined;\n let lastRenderedScopeId: string | null | undefined;\n let pendingHierarchyScrollId: string | null = null;\n let hierarchySelectionAnchorId: string | null = null;\n const attachDialog = createLocalEditorHierarchyAttachDialog({\n doc,\n getTheme: resolveActiveTheme,\n onOpenChange: open => inputRouter.setModalOpen(open, 'hierarchy-attach'),\n onConfirm: selection => submitAttachSelection(selection),\n });\n const treeViewportReveal = createLocalEditorViewportRevealController<string>({\n getViewport: findHierarchyTreeViewport,\n margin: 4,\n });\n\n const getModel = (state: LocalEditorBrowserUiState<TDocument>): LocalEditorHierarchyTreeModel => {\n if (currentModel) return currentModel;\n currentModel = createModel(state);\n return currentModel;\n };\n\n const render = (state: LocalEditorBrowserUiState<TDocument>): void => {\n const scope = resolveScope(state);\n const commandAdapter = resolveHierarchyCommandAdapter(scope);\n if (hierarchyRename && !scope.nodes.some(item => item.id === hierarchyRename?.id)) hierarchyRename = null;\n const scopeChanged = scope.scopeId !== lastRenderedScopeId;\n const activeIdChanged = scope.activeId !== lastRenderedActiveId || scopeChanged;\n const treeScrollSnapshot = treeViewportReveal.captureScrollSnapshot();\n if (activeIdChanged) {\n pendingHierarchyScrollId = null;\n expandActiveHierarchyPath(state, scope);\n }\n currentModel = createModel(state, scope);\n if (hierarchySelectionAnchorId && !currentModel.getNode(hierarchySelectionAnchorId)) {\n hierarchySelectionAnchorId = null;\n }\n renderLocalEditorHierarchyPanel(doc, panel, {\n model: currentModel,\n rename: hierarchyRename,\n drop: hierarchyDrop,\n dropPreview: hierarchyDragSession.preview,\n rootDrop: hierarchyRootDrop,\n searchQuery: getScopeSearch(scope.scopeId),\n title: scope.title,\n searchPlaceholder: scope.searchPlaceholder,\n showCreateGroup: commandAdapter.showCreateGroupToolbar,\n showCreateMarker: commandAdapter.kind === 'scene',\n });\n treeViewportReveal.restoreScrollSnapshot(treeScrollSnapshot);\n const suppressActiveScroll = scope.activeId\n ? treeViewportReveal.consumeRevealSuppression(scope.activeId, { clearWhenDifferent: activeIdChanged })\n : false;\n if (activeIdChanged && scope.activeId && !suppressActiveScroll && shouldAutoScrollActiveHierarchyNode()) {\n scheduleActiveHierarchyScroll(scope.activeId);\n }\n lastRenderedActiveId = scope.activeId;\n lastRenderedScopeId = scope.scopeId;\n };\n\n const onClick = (event: MouseEvent): void => {\n const target = event.target instanceof HTMLElement ? event.target : null;\n if (target?.closest('[data-editor-hierarchy-rename-input]')) return;\n if (target?.closest('input[data-editor-hierarchy-search]')) {\n clearSelectionFromSearchClick(event);\n return;\n }\n const enabledToggle = target?.closest<HTMLElement>('[data-editor-hierarchy-enabled-toggle]');\n const enabledToggleId = enabledToggle?.dataset.editorHierarchyEnabledToggle;\n if (enabledToggleId) {\n event.preventDefault();\n event.stopPropagation();\n toggleHierarchyItemEnabled(enabledToggleId, enabledToggle);\n return;\n }\n const toggle = target?.closest<HTMLElement>('[data-editor-hierarchy-toggle]')?.dataset.editorHierarchyToggle;\n if (toggle) {\n event.preventDefault();\n event.stopPropagation();\n toggleExpanded(toggle);\n return;\n }\n const createGroupButton = target?.closest<HTMLButtonElement>('[data-editor-hierarchy-create-group]');\n if (createGroupButton) {\n const state = getState();\n if (!state || resolveScope(state).commandSurface !== 'scene-graph') return;\n const parentId = state.activeId ?? null;\n if (parentId) expandNode(parentId);\n callbacks.onSceneGraphCreateGroup?.({\n parentId,\n activeId: parentId,\n name: 'Empty',\n });\n return;\n }\n const createMarkerButton = target?.closest<HTMLButtonElement>('[data-editor-hierarchy-create-marker]');\n if (createMarkerButton) {\n event.preventDefault();\n event.stopPropagation();\n createHierarchyMarkerFromButton();\n return;\n }\n const hierarchyButton = target?.closest<HTMLButtonElement>('[data-editor-hierarchy-id]');\n const hierarchyId = hierarchyButton?.dataset.editorHierarchyId;\n if (hierarchyId) {\n if (treeViewportReveal.isElementVisible(hierarchyButton)) {\n treeViewportReveal.suppressNextReveal(hierarchyId);\n }\n event.preventDefault();\n event.stopPropagation();\n selectHierarchyItemFromClick(hierarchyId, event);\n return;\n }\n if (shouldClearSelectionFromBlankClick(event, target)) {\n event.preventDefault();\n hierarchySelectionAnchorId = null;\n submitSelectionCommand({ type: 'selection.clear', label: 'Clear Selection' }, getState() ?? undefined);\n }\n };\n\n const onContextMenu = (event: MouseEvent): void => {\n openHierarchyContextMenu(event);\n };\n\n const onDocumentPointerDown = (event: PointerEvent): void => {\n hierarchyShortcutScopeActive = isEventInsideHierarchyPanel(event);\n };\n\n const onDocumentFocusIn = (event: FocusEvent): void => {\n hierarchyShortcutScopeActive = isEventInsideHierarchyPanel(event);\n };\n\n const onDoubleClick = (event: MouseEvent): void => {\n const target = event.target instanceof HTMLElement ? event.target : null;\n if (target?.closest('[data-editor-hierarchy-toggle]')) return;\n const hierarchyButton = target?.closest<HTMLButtonElement>('[data-editor-hierarchy-id]');\n const id = hierarchyButton?.dataset.editorHierarchyId;\n if (!id) return;\n event.preventDefault();\n event.stopPropagation();\n hierarchySelectionAnchorId = id;\n selectSingleHierarchyItem(id);\n if (resolveScopeForCurrentState()?.kind === 'scene') callbacks.onFocusSelection?.();\n };\n\n const onInput = (event: Event): void => {\n const input = event.target instanceof HTMLInputElement ? event.target : null;\n if (input?.dataset.editorHierarchySearch != null) {\n const scopeId = resolveScopeForCurrentState()?.scopeId ?? 'scene';\n hierarchySearchByScope.set(scopeId, input.value);\n if (!hierarchySearchComposing && !isComposingInputEvent(event)) requestRender();\n return;\n }\n if (!input?.dataset.editorHierarchyRenameInput || !hierarchyRename) return;\n hierarchyRename = {\n id: input.dataset.editorHierarchyRenameInput,\n value: input.value,\n };\n };\n\n const onKeyDown = (event: KeyboardEvent): void => {\n const input = event.target instanceof HTMLInputElement ? event.target : null;\n if (input?.dataset.editorHierarchySearch != null) {\n if (event.isComposing || hierarchySearchComposing) return;\n const scopeId = resolveScopeForCurrentState()?.scopeId ?? 'scene';\n if (event.key !== 'Escape' || getScopeSearch(scopeId).length === 0) return;\n event.preventDefault();\n hierarchySearchByScope.set(scopeId, '');\n requestRender();\n return;\n }\n if (!input?.dataset.editorHierarchyRenameInput) return;\n if (event.key === 'Enter') {\n event.preventDefault();\n commitHierarchyRename(input.dataset.editorHierarchyRenameInput, input.value);\n return;\n }\n if (event.key === 'Escape') {\n event.preventDefault();\n hierarchyRename = null;\n requestRender();\n }\n };\n\n const onCompositionStart = (event: CompositionEvent): void => {\n const input = event.target instanceof HTMLInputElement ? event.target : null;\n if (input?.dataset.editorHierarchySearch == null) return;\n hierarchySearchComposing = true;\n };\n\n const onCompositionEnd = (event: CompositionEvent): void => {\n const input = event.target instanceof HTMLInputElement ? event.target : null;\n if (input?.dataset.editorHierarchySearch == null) return;\n hierarchySearchComposing = false;\n const scopeId = resolveScopeForCurrentState()?.scopeId ?? 'scene';\n hierarchySearchByScope.set(scopeId, input.value);\n requestRender();\n };\n\n const onFocusOut = (event: FocusEvent): void => {\n const input = event.target instanceof HTMLInputElement ? event.target : null;\n if (!input?.dataset.editorHierarchyRenameInput) return;\n commitHierarchyRename(input.dataset.editorHierarchyRenameInput, input.value);\n };\n\n const onDragStart = (event: DragEvent): void => {\n const state = getState();\n const target = event.target instanceof HTMLElement ? event.target : null;\n const button = target?.closest<HTMLButtonElement>('[data-editor-hierarchy-id]');\n const id = button?.dataset.editorHierarchyId;\n if (!id || !state) return;\n if (!resolveHierarchyCommandAdapter(resolveScope(state)).menuCapabilities.hasMoveHandler) {\n event.preventDefault();\n return;\n }\n const model = getModel(state);\n const node = model.getNode(id);\n if (!isLocalEditorHierarchyNodeMovable(node)) {\n event.preventDefault();\n return;\n }\n hierarchyDrag = { id };\n const draggedIds = resolveDraggedIds(state, model, id);\n event.dataTransfer?.setData('text/plain', draggedIds.join(','));\n if (event.dataTransfer) event.dataTransfer.effectAllowed = 'move';\n };\n\n const onDragOver = (event: DragEvent): void => {\n const state = getState();\n const target = event.target instanceof HTMLElement ? event.target : null;\n const draggedIds = readDraggedIds(event);\n if (!state || draggedIds.length === 0) {\n clearHierarchyDragFeedbackAndRender();\n return;\n }\n if (!resolveHierarchyCommandAdapter(resolveScope(state)).menuCapabilities.hasMoveHandler) {\n clearHierarchyDragFeedbackAndRender();\n return;\n }\n const model = getModel(state);\n if (!isInsideHierarchyTreeViewport(target)) {\n clearHierarchyDragFeedbackAndRender();\n return;\n }\n hierarchyDragSession.pointer = { x: event.clientX, y: event.clientY };\n updateHierarchyAutoScroll();\n const operation = resolveHierarchyDragOperation(event, model, draggedIds);\n if (!operation || operation.status === 'idle') {\n clearHierarchyDragFeedbackAndRender();\n return;\n }\n event.preventDefault();\n hierarchyDragSession.operation = operation;\n const canSubmitDrop = operation.status === 'valid'\n && (!!callbacks.onSceneGraphMove || operation.slot?.placement === 'inside');\n if (event.dataTransfer) event.dataTransfer.dropEffect = canSubmitDrop ? 'move' : 'none';\n if (operation.status !== 'valid' || !operation.slot || !operation.resolution?.ok) {\n hierarchyDragSession.preview = operation.preview;\n hierarchyDrop = null;\n hierarchyRootDrop = false;\n syncHierarchyDropPreview();\n return;\n }\n if (operation.slot.placement === 'root') {\n hierarchyDragSession.preview = operation.preview;\n hierarchyDrop = null;\n hierarchyRootDrop = true;\n syncHierarchyDropPreview();\n return;\n }\n const targetId = operation.slot.targetId;\n if (!targetId) return;\n const nextDrop = {\n draggedId: operation.resolution.draggedIds[0] ?? draggedIds[0]!,\n targetId,\n placement: operation.slot.placement,\n preserveWorldTransform: true,\n };\n hierarchyDragSession.preview = operation.preview;\n hierarchyDrop = nextDrop;\n hierarchyRootDrop = false;\n syncHierarchyDropPreview();\n };\n\n const onDragLeave = (event: DragEvent): void => {\n if (!panel.contains(event.relatedTarget as Node | null)) {\n clearHierarchyDragFeedback();\n requestRender();\n }\n };\n\n const onDragEnd = (): void => {\n hierarchyDrag = null;\n clearHierarchyDragFeedback();\n requestRender();\n };\n\n const onDrop = (event: DragEvent): void => {\n const state = getState();\n const target = event.target instanceof HTMLElement ? event.target : null;\n const draggedIds = readDraggedIds(event);\n if (!state || draggedIds.length === 0) {\n clearHierarchyDragFeedbackAndRender();\n return;\n }\n const scope = resolveScope(state);\n if (!resolveHierarchyCommandAdapter(scope).menuCapabilities.hasMoveHandler) {\n clearHierarchyDragFeedbackAndRender();\n return;\n }\n const model = getModel(state);\n if (!isInsideHierarchyTreeViewport(target)) {\n clearHierarchyDragFeedbackAndRender();\n return;\n }\n const operation = hierarchyDragSession.operation ?? resolveHierarchyDragOperation(event, model, draggedIds);\n if (!operation || operation.status !== 'valid' || !operation.slot || !operation.resolution?.ok) {\n clearHierarchyDragFeedbackAndRender();\n return;\n }\n event.preventDefault();\n hierarchyDrag = null;\n clearHierarchyDragFeedback();\n if (operation.slot.placement === 'root') {\n if (scope.commandSurface === 'prefab-composition') {\n requestRender();\n return;\n }\n submitResolvedRootDrop(operation.resolution);\n return;\n }\n const targetId = operation.slot.targetId;\n if (!targetId) {\n requestRender();\n return;\n }\n expandDropParent(operation.resolution);\n if (scope.commandSurface === 'prefab-composition') {\n if (operation.slot.placement !== 'inside') {\n requestRender();\n return;\n }\n submitPrefabNodeReparent(scope, operation.resolution.draggedIds[0] ?? draggedIds[0]!, targetId);\n requestRender();\n return;\n }\n submitResolvedDrop(operation.resolution, targetId, operation.slot.placement, draggedIds);\n };\n\n panel.addEventListener('click', onClick);\n panel.addEventListener('contextmenu', onContextMenu);\n panel.addEventListener('dblclick', onDoubleClick);\n panel.addEventListener('input', onInput);\n panel.addEventListener('keydown', onKeyDown);\n panel.addEventListener('compositionstart', onCompositionStart);\n panel.addEventListener('compositionend', onCompositionEnd);\n panel.addEventListener('focusout', onFocusOut);\n panel.addEventListener('dragstart', onDragStart);\n panel.addEventListener('dragover', onDragOver);\n panel.addEventListener('dragleave', onDragLeave);\n panel.addEventListener('dragend', onDragEnd);\n panel.addEventListener('drop', onDrop);\n doc.addEventListener('pointerdown', onDocumentPointerDown, { capture: true });\n doc.addEventListener('focusin', onDocumentFocusIn, { capture: true });\n\n return {\n render,\n handleDeleteShortcut(event) {\n return handleDeleteShortcut(event);\n },\n handleEditShortcut(event) {\n return handleEditShortcut(event);\n },\n dispose() {\n clearHierarchyDragFeedback();\n panel.removeEventListener('click', onClick);\n panel.removeEventListener('contextmenu', onContextMenu);\n panel.removeEventListener('dblclick', onDoubleClick);\n panel.removeEventListener('input', onInput);\n panel.removeEventListener('keydown', onKeyDown);\n panel.removeEventListener('compositionstart', onCompositionStart);\n panel.removeEventListener('compositionend', onCompositionEnd);\n panel.removeEventListener('focusout', onFocusOut);\n panel.removeEventListener('dragstart', onDragStart);\n panel.removeEventListener('dragover', onDragOver);\n panel.removeEventListener('dragleave', onDragLeave);\n panel.removeEventListener('dragend', onDragEnd);\n panel.removeEventListener('drop', onDrop);\n doc.removeEventListener('pointerdown', onDocumentPointerDown, { capture: true });\n doc.removeEventListener('focusin', onDocumentFocusIn, { capture: true });\n attachDialog.dispose();\n },\n };\n\n function handleDeleteShortcut(event: KeyboardEvent): boolean {\n const state = getState();\n if (!state) return false;\n const scope = resolveScope(state);\n if (scope.kind !== 'scene') return false;\n const commandAdapter = resolveHierarchyCommandAdapter(scope);\n const action = createLocalEditorHierarchyDeleteShortcutAction({\n state,\n model: getModel(state),\n ...commandAdapter.menuCapabilities,\n });\n if (!action) return false;\n event.preventDefault();\n submitHierarchyAction(action);\n return true;\n }\n\n function handleEditShortcut(event: KeyboardEvent): boolean {\n const key = event.key.toLowerCase();\n if (key === 'delete' || key === 'backspace') return handleDeleteShortcut(event);\n if (event.altKey || (!event.metaKey && !event.ctrlKey)) return false;\n if (key === 'a' && (event.shiftKey || !isHierarchyShortcutScope(event))) return false;\n const state = getState();\n if (!state) return false;\n const scope = resolveScope(state);\n if (scope.kind !== 'scene') return false;\n const commandAdapter = resolveHierarchyCommandAdapter(scope);\n const input = {\n state,\n model: getModel(state),\n clipboardIds: hierarchyClipboard?.ids ?? null,\n clipboardActiveId: hierarchyClipboard?.activeId ?? null,\n ...commandAdapter.menuCapabilities,\n };\n const action = key === 'd'\n ? createLocalEditorHierarchyDuplicateShortcutAction(input)\n : key === 'c'\n ? createLocalEditorHierarchyCopyShortcutAction(input)\n : key === 'v'\n ? createLocalEditorHierarchyPasteShortcutAction(input)\n : key === 'a'\n ? createLocalEditorHierarchySelectAllShortcutAction(input)\n : null;\n if (!action) return false;\n event.preventDefault();\n submitHierarchyAction(action);\n return true;\n }\n\n function isComposingInputEvent(event: Event): boolean {\n return (event as Event & { isComposing?: boolean }).isComposing === true;\n }\n\n function resolveScope(state: LocalEditorBrowserUiState<TDocument>): LocalEditorBrowserHierarchyScope {\n return createLocalEditorActiveHierarchyScope(state);\n }\n\n function resolveScopeForCurrentState(): LocalEditorBrowserHierarchyScope | null {\n const state = getState();\n return state ? resolveScope(state) : null;\n }\n\n function getScopeCollapsedIds(scopeId: string): Set<string> {\n const existing = collapsedIdsByScope.get(scopeId);\n if (existing) return existing;\n const created = new Set<string>();\n collapsedIdsByScope.set(scopeId, created);\n return created;\n }\n\n function getScopeSearch(scopeId: string): string {\n return hierarchySearchByScope.get(scopeId) ?? '';\n }\n\n function createModel(\n state: LocalEditorBrowserUiState<TDocument>,\n scope = resolveScope(state),\n ): LocalEditorHierarchyTreeModel {\n return createLocalEditorHierarchyTreeModel(scope.nodes, scope.selectedIds, scope.activeId, {\n collapsedIds: getScopeCollapsedIds(scope.scopeId),\n defaultExpanded: true,\n });\n }\n\n function selectHierarchyItemFromClick(id: string, event: MouseEvent): void {\n const scope = resolveScopeForCurrentState();\n if (!scope) return;\n const toggle = event.metaKey || event.ctrlKey;\n const range = event.shiftKey && !toggle;\n if (range) {\n selectHierarchyVisibleRange(id);\n return;\n }\n hierarchySelectionAnchorId = id;\n if (scope.kind === 'prefab-stage') callbacks.onSelectPrefabStageItem?.(id);\n else callbacks.onSelectHierarchyItem?.({ id, additive: false, toggle });\n }\n\n function toggleHierarchyItemEnabled(id: string, toggle: HTMLElement): void {\n if (toggle.dataset.editorHierarchyEnabledToggleDisabled === 'true') return;\n const state = getState();\n if (!state) return;\n if (resolveScope(state).commandSurface !== 'scene-graph') return;\n const node = getModel(state).getNode(id);\n if (!node || !canLocalEditorHierarchyNodeToggleEnabled(node)) return;\n const directEnabled = typeof node.item.directEnabled === 'boolean'\n ? node.item.directEnabled\n : node.item.enabled;\n callbacks.onHierarchyItemEnabledChange?.({\n id,\n enabled: directEnabled === false,\n });\n }\n\n function selectHierarchyVisibleRange(targetId: string): void {\n const state = getState();\n if (!state) {\n selectSingleHierarchyItem(targetId);\n hierarchySelectionAnchorId = targetId;\n return;\n }\n const scope = resolveScope(state);\n if (scope.kind !== 'scene') {\n hierarchySelectionAnchorId = targetId;\n callbacks.onSelectPrefabStageItem?.(targetId);\n return;\n }\n const model = getModel(state);\n const anchorId = hierarchySelectionAnchorId ?? scope.activeId ?? targetId;\n const selectedIds = model.getVisibleRangeSelection(anchorId, targetId);\n if (selectedIds.length === 0) {\n hierarchySelectionAnchorId = targetId;\n selectSingleHierarchyItem(targetId);\n return;\n }\n const activeId = selectedIds.includes(targetId)\n ? targetId\n : selectedIds[selectedIds.length - 1] ?? null;\n submitSelectionCommand({\n type: 'selection.replace',\n label: 'Select Hierarchy Range',\n selectedIds,\n activeId,\n }, state);\n }\n\n function resolveDraggedIds(\n state: LocalEditorBrowserUiState<TDocument>,\n model: LocalEditorHierarchyTreeModel,\n draggedId: string,\n ): string[] {\n const scope = resolveScope(state);\n const selectedIds = scope.selectedIds.includes(draggedId) ? scope.selectedIds : [draggedId];\n return model.getTopLevelSelection(selectedIds);\n }\n\n function readDraggedIds(event: DragEvent): string[] {\n const dataTransferIds = event.dataTransfer?.getData('text/plain')\n .split(',')\n .map(id => id.trim())\n .filter(Boolean) ?? [];\n return dataTransferIds.length > 0 ? dataTransferIds : hierarchyDrag?.id ? [hierarchyDrag.id] : [];\n }\n\n function submitResolvedRootDrop(resolved: LocalEditorHierarchyDropResolution): void {\n callbacks.onSceneGraphMove?.({\n ids: resolved.draggedIds,\n targetId: null,\n placement: 'root',\n preserveWorldTransform: true,\n });\n requestRender();\n }\n\n function toggleExpanded(id: string): void {\n const scope = resolveScopeForCurrentState();\n const collapsedIds = getScopeCollapsedIds(scope?.scopeId ?? 'scene');\n if (collapsedIds.has(id)) collapsedIds.delete(id);\n else collapsedIds.add(id);\n requestRender();\n }\n\n function expandNode(id: string | null | undefined): void {\n if (!id) return;\n const scope = resolveScopeForCurrentState();\n getScopeCollapsedIds(scope?.scopeId ?? 'scene').delete(id);\n }\n\n function expandActiveHierarchyPath(\n state: LocalEditorBrowserUiState<TDocument>,\n scope = resolveScope(state),\n ): void {\n if (!scope.activeId) return;\n const model = createModel(state, scope);\n if (!model.getNode(scope.activeId)) return;\n const collapsedIds = getScopeCollapsedIds(scope.scopeId);\n for (const ancestor of model.getAncestors(scope.activeId)) {\n collapsedIds.delete(ancestor.id);\n }\n }\n\n function shouldAutoScrollActiveHierarchyNode(): boolean {\n return !hierarchyRename && !hierarchyDrag && !hasHierarchyDragFeedback();\n }\n\n function scheduleActiveHierarchyScroll(activeId: string): void {\n pendingHierarchyScrollId = activeId;\n setTimeout(() => {\n if (pendingHierarchyScrollId !== activeId) return;\n pendingHierarchyScrollId = null;\n const row = findHierarchyRow(activeId);\n if (!row) return;\n const viewport = findHierarchyTreeViewport();\n if (viewport) {\n treeViewportReveal.revealElement(row, { behavior: 'smooth' });\n return;\n }\n try {\n row.scrollIntoView({ block: 'nearest', inline: 'nearest', behavior: 'smooth' });\n } catch {\n row.scrollIntoView();\n }\n }, 0);\n }\n\n function findHierarchyRow(id: string): HTMLElement | null {\n for (const row of panel.querySelectorAll<HTMLElement>('[data-editor-hierarchy-id]')) {\n if (row.dataset.editorHierarchyId === id) return row;\n }\n return null;\n }\n\n function findHierarchyTreeViewport(): HTMLElement | null {\n return panel.querySelector<HTMLElement>('[data-editor-hierarchy-tree-viewport]');\n }\n\n function isInsideHierarchyTreeViewport(target: HTMLElement | null): boolean {\n return !!target?.closest('[data-editor-hierarchy-tree-viewport]');\n }\n\n function armHierarchyAutoScroll(): void {\n if (hierarchyDragSession.autoScrollFrame !== null) return;\n hierarchyDragSession.autoScrollFrame = doc.defaultView?.requestAnimationFrame(tickHierarchyAutoScroll) ?? null;\n }\n\n function stopHierarchyAutoScroll(): void {\n if (hierarchyDragSession.autoScrollFrame !== null) {\n doc.defaultView?.cancelAnimationFrame(hierarchyDragSession.autoScrollFrame);\n }\n hierarchyDragSession.autoScrollFrame = null;\n }\n\n function clearHierarchyDragFeedback(): void {\n hierarchyDrop = null;\n hierarchyRootDrop = false;\n stopHierarchyAutoScroll();\n clearLocalEditorStructuredDragSession(hierarchyDragSession);\n }\n\n function hasHierarchyDragFeedback(): boolean {\n return hierarchyDrop !== null\n || hierarchyRootDrop\n || hasLocalEditorStructuredDragSessionFeedback(hierarchyDragSession);\n }\n\n function clearHierarchyDragFeedbackAndRender(): void {\n const hadFeedback = hasHierarchyDragFeedback();\n clearHierarchyDragFeedback();\n if (hadFeedback) syncHierarchyDropPreview();\n }\n\n function syncHierarchyDropPreview(): void {\n syncLocalEditorHierarchyDropPreview(doc, panel, {\n dropPreview: hierarchyDragSession.preview,\n rootDrop: hierarchyRootDrop,\n });\n }\n\n function tickHierarchyAutoScroll(): void {\n hierarchyDragSession.autoScrollFrame = null;\n if (!hierarchyDragSession.pointer) return;\n const viewport = findHierarchyTreeViewport();\n if (!viewport) return;\n const rect = viewport.getBoundingClientRect();\n const scroll = resolveLocalEditorHierarchyAutoScroll({\n pointerY: hierarchyDragSession.pointer.y,\n viewportTop: rect.top,\n viewportBottom: rect.bottom,\n viewportHeight: rect.height,\n scrollTop: viewport.scrollTop,\n scrollHeight: viewport.scrollHeight,\n clientHeight: viewport.clientHeight,\n });\n if (scroll.speed !== 0) {\n viewport.scrollTop += scroll.speed;\n requestRender();\n armHierarchyAutoScroll();\n }\n }\n\n function updateHierarchyAutoScroll(): void {\n const viewport = findHierarchyTreeViewport();\n if (!viewport || !hierarchyDragSession.pointer) {\n stopHierarchyAutoScroll();\n return;\n }\n const rect = viewport.getBoundingClientRect();\n const scroll = resolveLocalEditorHierarchyAutoScroll({\n pointerY: hierarchyDragSession.pointer.y,\n viewportTop: rect.top,\n viewportBottom: rect.bottom,\n viewportHeight: rect.height,\n scrollTop: viewport.scrollTop,\n scrollHeight: viewport.scrollHeight,\n clientHeight: viewport.clientHeight,\n });\n if (scroll.speed === 0) {\n stopHierarchyAutoScroll();\n return;\n }\n armHierarchyAutoScroll();\n }\n\n function resolveHierarchyDragOperation(\n event: DragEvent,\n model: LocalEditorHierarchyTreeModel,\n draggedIds: readonly string[],\n ): LocalEditorHierarchyDragOperation | null {\n const layout = createHierarchyDragLayout(model);\n if (!layout) return null;\n return resolveLocalEditorHierarchyDragOperation({\n layout,\n pointer: { x: event.clientX, y: event.clientY },\n draggedIds,\n resolveDrop: model.resolveDrop.bind(model),\n });\n }\n\n function createHierarchyDragLayout(model: LocalEditorHierarchyTreeModel): LocalEditorHierarchyDragLayout | null {\n const viewport = findHierarchyTreeViewport();\n if (!viewport) return null;\n const viewportRect = viewport.getBoundingClientRect();\n const rows: LocalEditorHierarchyDragLayoutRow[] = [];\n for (const element of panel.querySelectorAll<HTMLElement>('[data-editor-hierarchy-id]')) {\n const id = element.dataset.editorHierarchyId;\n const node = model.getNode(id);\n if (!id || !node) continue;\n const rect = element.getBoundingClientRect();\n rows.push({\n id,\n depth: node.depth,\n parentId: node.parentId,\n canHaveChildren: canLocalEditorHierarchyNodeHaveChildren(node),\n rect: {\n left: rect.left,\n top: rect.top,\n width: rect.width,\n height: rect.height,\n },\n });\n }\n rows.sort((left, right) => left.rect.top - right.rect.top);\n return {\n rows,\n viewport: {\n left: viewportRect.left,\n top: viewportRect.top,\n width: viewportRect.width,\n height: viewportRect.height,\n },\n indentWidth: HIERARCHY_DRAG_INDENT_WIDTH,\n };\n }\n\n function expandDropParent(resolved: LocalEditorHierarchyDropResolution): void {\n if (resolved.placement === 'inside') expandNode(resolved.parentId);\n }\n\n function commitHierarchyRename(id: string, value: string): void {\n if (!hierarchyRename || hierarchyRename.id !== id) return;\n const trimmed = value.trim();\n const state = getState();\n const scope = state ? resolveScope(state) : null;\n const item = scope?.nodes.find(candidate => candidate.id === id) ?? null;\n hierarchyRename = null;\n if (trimmed && item && trimmed !== item.label) {\n if (scope?.commandSurface === 'scene-graph') {\n callbacks.onSceneGraphRename?.({ id, name: trimmed });\n } else if (scope?.commandSurface === 'prefab-composition') {\n callbacks.onAssetAction?.(createPrefabNodeAssetAction(scope, 'prefab.node.rename', resolvePrefabCommandTargetId(scope, id), {\n value: trimmed,\n }));\n }\n }\n requestRender();\n }\n\n function openHierarchyContextMenu(event: MouseEvent): void {\n const hadHierarchyFeedback = hasHierarchyDragFeedback();\n hierarchyDrag = null;\n clearHierarchyDragFeedback();\n const target = event.target instanceof HTMLElement ? event.target : null;\n if (!target || inputRouter.isEditableTarget(target)) {\n if (hadHierarchyFeedback) requestRender();\n return;\n }\n const state = getState();\n if (!state || state.mode !== 'editor' || state.busy) {\n if (hadHierarchyFeedback) requestRender();\n return;\n }\n const scope = resolveScope(state);\n const commandAdapter = resolveHierarchyCommandAdapter(scope);\n const model = getModel(state);\n const hierarchyButton = target.closest<HTMLButtonElement>('[data-editor-hierarchy-id]');\n const node = model.getNode(hierarchyButton?.dataset.editorHierarchyId);\n if (node && !scope.selectedIds.includes(node.id) && isLocalEditorHierarchyNodeSelectable(node)) {\n hierarchySelectionAnchorId = node.id;\n if (scope.kind === 'prefab-stage') callbacks.onSelectPrefabStageItem?.(node.id);\n else callbacks.onSelectHierarchyItem?.({ id: node.id, additive: false, toggle: false });\n }\n if (!commandAdapter.canOpenContextMenu) {\n if (hadHierarchyFeedback) requestRender();\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n options.onBeforeOpenContextMenu?.();\n const menuState = createScopedHierarchyMenuState(state, scope);\n const menu = node\n ? createLocalEditorHierarchyNodeMenu({\n state: menuState,\n model,\n node,\n clipboardIds: hierarchyClipboard?.ids ?? null,\n clipboardActiveId: hierarchyClipboard?.activeId ?? null,\n ...commandAdapter.menuCapabilities,\n contextActions: options.contextActions,\n })\n : createLocalEditorHierarchyBlankMenu({\n state: menuState,\n model,\n clipboardIds: hierarchyClipboard?.ids ?? null,\n clipboardActiveId: hierarchyClipboard?.activeId ?? null,\n ...commandAdapter.menuCapabilities,\n contextActions: options.contextActions,\n });\n const menuItems = commandAdapter.filterMenuItems(menu.items);\n if (menuItems.length === 0) {\n if (hadHierarchyFeedback) requestRender();\n return;\n }\n\n contextMenu.open({\n x: event.clientX,\n y: event.clientY,\n items: menuItems,\n onAction(item) {\n const action = menu.actions.get(item.id);\n if (action) submitHierarchyAction(action);\n },\n });\n if (hadHierarchyFeedback) requestRender();\n }\n\n function createHierarchyMarkerFromButton(): void {\n const state = getState();\n if (!state || state.mode !== 'editor' || state.busy) return;\n const model = getModel(state);\n const activeNode = model.getNode(state.activeId);\n const parentId = resolveLocalEditorHierarchyCreateMarkerParentId(activeNode);\n if (parentId) expandNode(parentId);\n callbacks.onSceneGraphCreateMarker?.({\n parentId,\n activeId: parentId ?? state.activeId ?? null,\n name: 'Marker',\n });\n requestRender();\n }\n\n function submitHierarchyAction(action: LocalEditorHierarchyAction): void {\n if (action.kind === 'begin-rename') {\n beginHierarchyRename(action.targetId);\n return;\n }\n if (action.kind === 'copy-selection') {\n hierarchyClipboard = {\n ids: action.targetIds,\n activeId: action.activeId && action.targetIds.includes(action.activeId)\n ? action.activeId\n : action.targetIds[action.targetIds.length - 1] ?? null,\n };\n return;\n }\n if (action.kind === 'group-selection') {\n callbacks.onSceneGraphGroupSelection?.(action.intent);\n return;\n }\n if (action.kind === 'open-attach-picker') {\n openAttachPicker(action.targetIds, action.activeId);\n return;\n }\n if (action.kind === 'selection-command') {\n submitSelectionCommand(action.command);\n return;\n }\n submitHierarchyContextAction(action.action);\n }\n\n function createScopedHierarchyMenuState(\n state: LocalEditorBrowserUiState<TDocument>,\n scope: LocalEditorBrowserHierarchyScope,\n ): LocalEditorBrowserUiState<TDocument> {\n return {\n ...state,\n hierarchy: scope.nodes,\n selectedIds: scope.selectedIds,\n activeId: scope.activeId,\n };\n }\n\n function submitSelectionCommand(command: SelectionCommand, state = getState() ?? undefined): void {\n if (state && resolveScope(state).kind !== 'scene') return;\n callbacks.onSelectionCommand?.(command);\n }\n\n function openAttachPicker(targetIds: readonly string[], activeId: string | null): void {\n const state = getState();\n if (!state || state.mode !== 'editor' || state.busy || targetIds.length === 0) return;\n if (!resolveHierarchyCommandAdapter(resolveScope(state)).menuCapabilities.hasMoveHandler) return;\n attachDialog.open({\n model: getModel(state),\n targetIds,\n activeId,\n });\n }\n\n function submitAttachSelection(selection: LocalEditorHierarchyAttachTargetSelection): LocalEditorHierarchyAttachConfirmResult {\n const state = getState();\n if (!state || state.mode !== 'editor' || state.busy) return { ok: false, reason: 'Editor is not ready.' };\n const scope = resolveScope(state);\n if (scope.commandSurface === 'prefab-composition') return submitPrefabAttachSelection(scope, selection);\n if (scope.commandSurface !== 'scene-graph') return { ok: false, reason: 'Hierarchy move pipeline is not connected yet.' };\n const ids = selection.resolution.draggedIds;\n if (ids.length === 0) return { ok: false, reason: 'Select one or more movable nodes first.' };\n if (!callbacks.onSceneGraphMove) return { ok: false, reason: 'Hierarchy move pipeline is not connected yet.' };\n if (selection.placement === 'root') {\n const result = normalizeAttachSceneGraphMoveResult(callbacks.onSceneGraphMove({\n ids,\n placement: 'root',\n preserveWorldTransform: true,\n }));\n requestRender();\n return result;\n }\n if (!selection.targetId) return { ok: false, reason: 'Select a valid target first.' };\n expandNode(selection.targetId);\n const result = normalizeAttachSceneGraphMoveResult(callbacks.onSceneGraphMove({\n ids,\n targetId: selection.targetId,\n placement: 'inside',\n parentId: selection.resolution.parentId,\n beforeId: selection.resolution.beforeId,\n afterId: selection.resolution.afterId,\n preserveWorldTransform: true,\n }));\n requestRender();\n return result;\n }\n\n function submitPrefabAttachSelection(\n scope: LocalEditorBrowserHierarchyScope,\n selection: LocalEditorHierarchyAttachTargetSelection,\n ): LocalEditorHierarchyAttachConfirmResult {\n const ids = selection.resolution.draggedIds;\n if (ids.length !== 1) return { ok: false, reason: 'Move one prefab node at a time.' };\n if (selection.placement !== 'inside') return { ok: false, reason: 'Prefab node reparent supports inside placement only.' };\n if (!selection.targetId) return { ok: false, reason: 'Select a valid prefab parent first.' };\n if (!submitPrefabNodeReparent(scope, ids[0], selection.targetId)) {\n return { ok: false, reason: 'Select valid prefab nodes first.' };\n }\n expandNode(selection.targetId);\n requestRender();\n return { ok: true };\n }\n\n function submitPrefabNodeReparent(\n scope: LocalEditorBrowserHierarchyScope,\n hierarchyId: string,\n parentHierarchyId: string,\n ): boolean {\n const nodeId = resolvePrefabCommandTargetId(scope, hierarchyId);\n const parentNodeId = resolvePrefabCommandTargetId(scope, parentHierarchyId);\n if (!nodeId || !parentNodeId) return false;\n callbacks.onAssetAction?.(createPrefabNodeAssetAction(scope, 'prefab.node.reparent', nodeId, {\n parentNodeId,\n }));\n return true;\n }\n\n function normalizeAttachSceneGraphMoveResult(result: LocalEditorBrowserSceneGraphActionResponse): LocalEditorHierarchyAttachConfirmResult {\n if (typeof result === 'boolean') return { ok: result };\n if (typeof result === 'string') return { ok: false, reason: result };\n if (result && typeof result === 'object') return result;\n return { ok: true };\n }\n\n function shouldClearSelectionFromBlankClick(event: MouseEvent, target: HTMLElement | null): boolean {\n if (event.button !== 0 || event.shiftKey || event.metaKey || event.ctrlKey || event.altKey) return false;\n if (!target?.closest('[data-editor-hierarchy-root-drop]')) return false;\n if (hierarchyRename || hierarchyDrag || hasHierarchyDragFeedback()) return false;\n const state = getState();\n if (!state) return false;\n const scope = resolveScope(state);\n return scope.kind === 'scene' && scope.selectedIds.length > 0;\n }\n\n function clearSelectionFromSearchClick(event: MouseEvent): void {\n if (event.button !== 0 || event.shiftKey || event.metaKey || event.ctrlKey || event.altKey) return;\n const state = getState();\n if (!state || resolveScope(state).kind !== 'scene' || state.selectedIds.length === 0) return;\n hierarchySelectionAnchorId = null;\n submitSelectionCommand({ type: 'selection.clear', label: 'Clear Selection' }, state);\n }\n\n function isHierarchyShortcutScope(event: KeyboardEvent): boolean {\n const target = event.target instanceof Node ? event.target : null;\n const activeElement = doc.activeElement;\n return hierarchyShortcutScopeActive\n || (target !== null && panel.contains(target))\n || (activeElement !== null && panel.contains(activeElement));\n }\n\n function isEventInsideHierarchyPanel(event: Event): boolean {\n const target = event.target instanceof Node ? event.target : null;\n return target !== null && panel.contains(target);\n }\n\n function submitHierarchyContextAction(action: LocalEditorContextAction): void {\n if (action.action === 'rename') return;\n const scope = resolveScopeForCurrentState();\n if (scope?.commandSurface === 'prefab-composition') {\n submitPrefabHierarchyContextAction(scope, action);\n return;\n }\n if (scope?.commandSurface !== 'scene-graph') return;\n if (action.action === 'create-group' || action.action === 'create-primitive' || action.action === 'create-marker') {\n expandNode(action.parentId);\n }\n if (callbacks.onContextAction) {\n callbacks.onContextAction(action);\n return;\n }\n if (action.action === 'focus') callbacks.onFocusSelection?.();\n else if (action.action === 'duplicate') {\n callbacks.onSceneGraphDuplicate?.({\n targetIds: action.targetIds,\n activeId: action.activeId ?? null,\n });\n } else if (action.action === 'paste') {\n callbacks.onSceneGraphDuplicate?.({\n targetIds: action.sourceIds,\n activeId: action.activeId ?? null,\n });\n }\n else if (action.action === 'create-group') {\n callbacks.onSceneGraphCreateGroup?.({\n parentId: action.parentId ?? null,\n activeId: action.activeId ?? null,\n name: 'Empty',\n });\n } else if (action.action === 'create-marker') {\n callbacks.onSceneGraphCreateMarker?.({\n parentId: action.parentId ?? null,\n activeId: action.activeId ?? null,\n markerType: action.markerType,\n name: action.name,\n });\n } else if (action.action === 'create-primitive') {\n callbacks.onSceneGraphCreatePrimitive?.({\n parentId: action.parentId ?? null,\n activeId: action.activeId ?? null,\n shape: action.shape,\n name: action.name,\n });\n } else if (action.action === 'delete') {\n callbacks.onSceneGraphDelete?.({\n ids: action.targetIds,\n activeId: action.activeId ?? null,\n });\n }\n }\n\n function submitPrefabHierarchyContextAction(scope: LocalEditorBrowserHierarchyScope, action: LocalEditorContextAction): void {\n if (action.action === 'focus') {\n const targetId = action.activeId ?? action.targetIds[0] ?? null;\n if (targetId) callbacks.onSelectPrefabStageItem?.(targetId);\n return;\n }\n if (action.action === 'create-primitive') {\n if (action.parentId) expandNode(action.parentId);\n callbacks.onAssetAction?.(createPrefabNodeAssetAction(scope, 'prefab.node.createPrimitive', resolvePrefabCommandTargetId(scope, action.parentId ?? scope.activeId), {\n primitiveShape: action.shape,\n }));\n return;\n }\n if (action.action === 'create-group') {\n if (action.parentId) expandNode(action.parentId);\n callbacks.onAssetAction?.(createPrefabNodeAssetAction(scope, 'prefab.node.createGroup', resolvePrefabCommandTargetId(scope, action.parentId ?? scope.activeId), {\n value: { name: 'Empty' },\n }));\n return;\n }\n if (action.action === 'delete') {\n const nodeId = action.activeId && action.targetIds.includes(action.activeId)\n ? action.activeId\n : action.targetIds[0] ?? null;\n if (!nodeId) return;\n callbacks.onAssetAction?.(createPrefabNodeAssetAction(scope, 'prefab.node.delete', resolvePrefabCommandTargetId(scope, nodeId)));\n }\n }\n\n function resolvePrefabCommandTargetId(\n scope: LocalEditorBrowserHierarchyScope,\n hierarchyId: string | null | undefined,\n ): string | null {\n if (!hierarchyId) return null;\n const node = scope.nodes.find(candidate => candidate.id === hierarchyId);\n return node?.commandTargetId ?? hierarchyId;\n }\n\n function createPrefabNodeAssetAction(\n scope: LocalEditorBrowserHierarchyScope,\n actionId: string,\n nodeId: string | null | undefined,\n extra: Partial<LocalEditorBrowserAssetActionInput> = {},\n ): LocalEditorBrowserAssetActionInput {\n const stageAssetId = scope.scopeId.startsWith('prefab-stage:')\n ? scope.scopeId.slice('prefab-stage:'.length)\n : undefined;\n return {\n actionId,\n assetId: stageAssetId,\n browserAssetId: stageAssetId ? `prefab:${stageAssetId}` : undefined,\n assetKind: 'prefab',\n targetPrefabAssetId: stageAssetId,\n ...(nodeId ? { nodeId, parentNodeId: nodeId } : {}),\n ...extra,\n };\n }\n\n function resolveHierarchyCommandAdapter(scope: LocalEditorBrowserHierarchyScope) {\n return resolveLocalEditorHierarchyCommandAdapter(scope, {\n hasDuplicateHandler: typeof callbacks.onSceneGraphDuplicate === 'function',\n hasMoveHandler: typeof callbacks.onSceneGraphMove === 'function',\n hasGroupSelectionHandler: typeof callbacks.onSceneGraphGroupSelection === 'function',\n });\n }\n\n function resolveActiveTheme(): 'dark' | 'light' | undefined {\n const themed = panel.closest<HTMLElement>('.fps-editor-workbench[data-fps-editor-theme]');\n const theme = themed?.dataset.fpsEditorTheme;\n return theme === 'light' || theme === 'dark' ? theme : undefined;\n }\n\n function beginHierarchyRename(id: string): void {\n const state = getState();\n const model = state ? getModel(state) : null;\n const node = model?.getNode(id) ?? null;\n if (!node || !canLocalEditorHierarchyNodeRename(node)) return;\n hierarchyRename = { id, value: node.label };\n requestRender();\n }\n\n function selectSingleHierarchyItem(id: string): void {\n const scope = resolveScopeForCurrentState();\n if (scope?.kind === 'prefab-stage') callbacks.onSelectPrefabStageItem?.(id);\n else callbacks.onSelectHierarchyItem?.({ id, additive: false, toggle: false });\n }\n\n function submitResolvedDrop(\n resolved: LocalEditorHierarchyDropResolution,\n targetId: string,\n placement: LocalEditorBrowserSceneGraphDropPlacement,\n draggedIds: readonly string[],\n ): void {\n if (callbacks.onSceneGraphMove) {\n callbacks.onSceneGraphMove({\n ids: resolved.draggedIds,\n targetId,\n placement,\n parentId: resolved.parentId,\n beforeId: resolved.beforeId,\n afterId: resolved.afterId,\n preserveWorldTransform: true,\n });\n } else if (placement === 'inside') {\n callbacks.onSceneGraphDrop?.({\n draggedId: resolved.draggedIds[0] ?? draggedIds[0]!,\n targetId,\n placement,\n preserveWorldTransform: true,\n });\n } else {\n requestRender();\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"local-editor-ui-hierarchy-controller.js","sourceRoot":"","sources":["../src/local-editor-ui-hierarchy-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import type { SelectionCommand } from '@fps-games/editor-core';\nimport {\n createLocalEditorHierarchyBlankMenu,\n createLocalEditorHierarchyCopyShortcutAction,\n createLocalEditorHierarchyDeleteShortcutAction,\n createLocalEditorHierarchyDuplicateShortcutAction,\n createLocalEditorHierarchyNodeMenu,\n createLocalEditorHierarchyPasteShortcutAction,\n createLocalEditorHierarchySelectAllShortcutAction,\n type LocalEditorHierarchyAction,\n} from './local-editor-ui-hierarchy-actions';\nimport {\n canLocalEditorHierarchyNodeHaveChildren,\n canLocalEditorHierarchyNodeRename,\n canLocalEditorHierarchyNodeToggleEnabled,\n createLocalEditorHierarchyTreeModel,\n type LocalEditorHierarchyDropResolution,\n isLocalEditorHierarchyNodeSelectable,\n isLocalEditorHierarchyNodeMovable,\n type LocalEditorHierarchyTreeModel,\n type LocalEditorHierarchyTreeNode,\n} from './local-editor-ui-hierarchy-tree';\nimport {\n resolveLocalEditorHierarchyDragOperation,\n type LocalEditorHierarchyDragLayout,\n type LocalEditorHierarchyDragLayoutRow,\n type LocalEditorHierarchyDragOperation,\n type LocalEditorHierarchyDropPreview,\n} from './local-editor-ui-hierarchy-drag-policy';\nimport {\n resolveLocalEditorHierarchyAutoScroll,\n} from './local-editor-ui-hierarchy-auto-scroll';\nimport {\n clearLocalEditorStructuredDragSession,\n createLocalEditorStructuredDragSession,\n hasLocalEditorStructuredDragSessionFeedback,\n} from './local-editor-ui-structured-drag-session';\nimport {\n renderLocalEditorHierarchyPanel,\n syncLocalEditorHierarchyDropPreview,\n} from './local-editor-ui-hierarchy-view';\nimport {\n createLocalEditorActiveHierarchyScope,\n} from './local-editor-ui-hierarchy-scope';\nimport {\n createLocalEditorHierarchyProjection,\n isLocalEditorHierarchyProjectionCurrent,\n} from './local-editor-ui-hierarchy-projection';\nimport {\n resolveLocalEditorHierarchyCommandAdapter,\n} from './local-editor-ui-hierarchy-command-adapter';\nimport {\n createLocalEditorViewportRevealController,\n} from './local-editor-ui-dock-panel';\nimport {\n createLocalEditorHierarchyAttachDialog,\n type LocalEditorHierarchyAttachConfirmResult,\n type LocalEditorHierarchyAttachTargetSelection,\n} from './local-editor-ui-hierarchy-attach-dialog';\nimport type { LocalEditorContextMenuController } from './local-editor-ui-context-menu';\nimport type { LocalEditorWorkbenchInputRouter } from './local-editor-ui-input-router';\nimport type {\n LocalEditorBrowserAssetActionInput,\n LocalEditorBrowserSceneGraphDropIntent,\n LocalEditorBrowserSceneGraphDropPlacement,\n LocalEditorBrowserSceneGraphActionResponse,\n LocalEditorBrowserHierarchyContextActionRegistration,\n LocalEditorBrowserHierarchyCommandPrecondition,\n LocalEditorBrowserHierarchyScope,\n LocalEditorBrowserUiCallbacks,\n LocalEditorBrowserUiState,\n LocalEditorContextAction,\n} from './local-editor-ui-types';\n\nconst HIERARCHY_DRAG_INDENT_WIDTH = 16;\n\nexport interface LocalEditorHierarchyController<TDocument = unknown> {\n render(state: LocalEditorBrowserUiState<TDocument>): void;\n handleEditShortcut(event: KeyboardEvent): boolean;\n handleDeleteShortcut(event: KeyboardEvent): boolean;\n dispose(): void;\n}\n\nexport interface LocalEditorHierarchyControllerOptions<TDocument = unknown> {\n doc: Document;\n panel: HTMLElement;\n callbacks: LocalEditorBrowserUiCallbacks;\n inputRouter: LocalEditorWorkbenchInputRouter;\n contextMenu: LocalEditorContextMenuController;\n getState: () => LocalEditorBrowserUiState<TDocument> | null;\n requestRender: () => void;\n onBeforeOpenContextMenu?: () => void;\n contextActions?: readonly LocalEditorBrowserHierarchyContextActionRegistration<TDocument>[];\n}\n\nexport function resolveLocalEditorHierarchyCreateMarkerParentId(\n activeNode: LocalEditorHierarchyTreeNode | null,\n): string | null {\n return activeNode && activeNode.item.canHaveChildren === true && activeNode.item.role !== 'marker'\n ? activeNode.id\n : null;\n}\n\nexport function resolveLocalEditorHierarchyToolbarActiveId(\n scope: Pick<LocalEditorBrowserHierarchyScope, 'nodes' | 'activeId'>,\n): string | null {\n return scope.activeId && scope.nodes.some(node => node.id === scope.activeId)\n ? scope.activeId\n : null;\n}\n\nexport function createLocalEditorHierarchyController<TDocument = unknown>(\n options: LocalEditorHierarchyControllerOptions<TDocument>,\n): LocalEditorHierarchyController<TDocument> {\n const { doc, panel, callbacks, inputRouter, contextMenu, getState, requestRender } = options;\n const collapsedIdsByScope = new Map<string, Set<string>>();\n const hierarchySearchByScope = new Map<string, string>();\n let hierarchyRename: {\n id: string;\n value: string;\n initialValue: string;\n commandTargetId: string;\n precondition: LocalEditorBrowserHierarchyCommandPrecondition;\n } | null = null;\n let hierarchyDrag: { id: string; precondition: LocalEditorBrowserHierarchyCommandPrecondition } | null = null;\n let hierarchyDrop: LocalEditorBrowserSceneGraphDropIntent | null = null;\n let hierarchyRootDrop = false;\n const hierarchyDragSession = createLocalEditorStructuredDragSession<\n LocalEditorHierarchyDragOperation,\n LocalEditorHierarchyDropPreview\n >();\n let hierarchyShortcutScopeActive = false;\n let hierarchyClipboard: { ids: string[]; activeId: string | null } | null = null;\n let hierarchySearchComposing = false;\n let currentModel: LocalEditorHierarchyTreeModel | null = null;\n let lastRenderedActiveId: string | null | undefined;\n let lastRenderedScopeId: string | null | undefined;\n let lastRenderedDocumentRevision: number | null = null;\n let lastRenderedProjectionRevision: number | null = null;\n let lastRenderedCommandPrecondition: LocalEditorBrowserHierarchyCommandPrecondition | null = null;\n let attachDialogPrecondition: LocalEditorBrowserHierarchyCommandPrecondition | null = null;\n let pendingHierarchyScrollId: string | null = null;\n let hierarchySelectionAnchorId: string | null = null;\n const attachDialog = createLocalEditorHierarchyAttachDialog({\n doc,\n getTheme: resolveActiveTheme,\n onOpenChange: open => inputRouter.setModalOpen(open, 'hierarchy-attach'),\n onConfirm: selection => submitAttachSelection(selection),\n });\n const treeViewportReveal = createLocalEditorViewportRevealController<string>({\n getViewport: findHierarchyTreeViewport,\n margin: 4,\n });\n\n const getModel = (state: LocalEditorBrowserUiState<TDocument>): LocalEditorHierarchyTreeModel => {\n if (currentModel) return currentModel;\n currentModel = createModel(state);\n return currentModel;\n };\n\n const render = (state: LocalEditorBrowserUiState<TDocument>): void => {\n const rawScope = resolveScope(state);\n const projection = isLocalEditorHierarchyProjectionCurrent(state.hierarchyProjection, rawScope)\n ? state.hierarchyProjection\n : createLocalEditorHierarchyProjection(rawScope);\n const scope: LocalEditorBrowserHierarchyScope = {\n ...rawScope,\n nodes: projection.nodes,\n selectedIds: projection.selectedIds,\n activeId: projection.activeId,\n readonly: rawScope.readonly || !projection.interactive,\n commandSurface: projection.interactive ? rawScope.commandSurface : 'readonly',\n };\n const projectionChanged = lastRenderedScopeId != null && (\n scope.scopeId !== lastRenderedScopeId\n || scope.documentRevision !== lastRenderedDocumentRevision\n || scope.projectionRevision !== lastRenderedProjectionRevision\n );\n if (projectionChanged) resetHierarchyTransientState();\n const commandAdapter = resolveHierarchyCommandAdapter(scope);\n if (hierarchyRename && !scope.nodes.some(item => item.id === hierarchyRename?.id)) hierarchyRename = null;\n const scopeChanged = scope.scopeId !== lastRenderedScopeId;\n const activeIdChanged = scope.activeId !== lastRenderedActiveId || scopeChanged;\n const treeScrollSnapshot = treeViewportReveal.captureScrollSnapshot();\n if (activeIdChanged) {\n pendingHierarchyScrollId = null;\n expandActiveHierarchyPath(state, scope);\n }\n currentModel = createModel(state, scope);\n if (hierarchySelectionAnchorId && !currentModel.getNode(hierarchySelectionAnchorId)) {\n hierarchySelectionAnchorId = null;\n }\n renderLocalEditorHierarchyPanel(doc, panel, {\n model: currentModel,\n rename: hierarchyRename,\n drop: hierarchyDrop,\n dropPreview: hierarchyDragSession.preview,\n rootDrop: hierarchyRootDrop,\n searchQuery: getScopeSearch(scope.scopeId),\n title: scope.title,\n searchPlaceholder: scope.searchPlaceholder,\n showCreateGroup: commandAdapter.showCreateGroupToolbar,\n showCreateMarker: commandAdapter.kind === 'scene',\n });\n treeViewportReveal.restoreScrollSnapshot(treeScrollSnapshot);\n const suppressActiveScroll = scope.activeId\n ? treeViewportReveal.consumeRevealSuppression(scope.activeId, { clearWhenDifferent: activeIdChanged })\n : false;\n if (activeIdChanged && scope.activeId && !suppressActiveScroll && shouldAutoScrollActiveHierarchyNode()) {\n scheduleActiveHierarchyScroll(scope.activeId);\n }\n lastRenderedActiveId = scope.activeId;\n lastRenderedScopeId = scope.scopeId;\n lastRenderedDocumentRevision = scope.documentRevision;\n lastRenderedProjectionRevision = scope.projectionRevision;\n lastRenderedCommandPrecondition = createHierarchyCommandPrecondition(scope);\n };\n\n const onClick = (event: MouseEvent): void => {\n const target = event.target instanceof HTMLElement ? event.target : null;\n if (target?.closest('[data-editor-hierarchy-rename-input]')) return;\n if (target?.closest('input[data-editor-hierarchy-search]')) {\n clearSelectionFromSearchClick(event);\n return;\n }\n const enabledToggle = target?.closest<HTMLElement>('[data-editor-hierarchy-enabled-toggle]');\n const enabledToggleId = enabledToggle?.dataset.editorHierarchyEnabledToggle;\n if (enabledToggleId) {\n event.preventDefault();\n event.stopPropagation();\n toggleHierarchyItemEnabled(enabledToggleId, enabledToggle);\n return;\n }\n const toggle = target?.closest<HTMLElement>('[data-editor-hierarchy-toggle]')?.dataset.editorHierarchyToggle;\n if (toggle) {\n event.preventDefault();\n event.stopPropagation();\n toggleExpanded(toggle);\n return;\n }\n const createGroupButton = target?.closest<HTMLButtonElement>('[data-editor-hierarchy-create-group]');\n if (createGroupButton) {\n const state = getState();\n if (!state) return;\n const scope = resolveScope(state);\n if (hasCurrentHierarchyProjection(scope) && scope.commandSurface !== 'scene-graph') return;\n const parentId = resolveLocalEditorHierarchyToolbarActiveId(scope);\n if (parentId) expandNode(parentId);\n const precondition = lastRenderedCommandPrecondition;\n if (!precondition) return;\n callbacks.onSceneGraphCreateGroup?.({\n parentId,\n activeId: parentId,\n name: 'Empty',\n }, precondition);\n return;\n }\n const createMarkerButton = target?.closest<HTMLButtonElement>('[data-editor-hierarchy-create-marker]');\n if (createMarkerButton) {\n event.preventDefault();\n event.stopPropagation();\n createHierarchyMarkerFromButton();\n return;\n }\n const hierarchyButton = target?.closest<HTMLButtonElement>('[data-editor-hierarchy-id]');\n const hierarchyId = hierarchyButton?.dataset.editorHierarchyId;\n if (hierarchyId) {\n if (treeViewportReveal.isElementVisible(hierarchyButton)) {\n treeViewportReveal.suppressNextReveal(hierarchyId);\n }\n event.preventDefault();\n event.stopPropagation();\n selectHierarchyItemFromClick(hierarchyId, event);\n return;\n }\n if (shouldClearSelectionFromBlankClick(event, target)) {\n event.preventDefault();\n hierarchySelectionAnchorId = null;\n submitSelectionCommand({ type: 'selection.clear', label: 'Clear Selection' }, getState() ?? undefined);\n }\n };\n\n const onContextMenu = (event: MouseEvent): void => {\n openHierarchyContextMenu(event);\n };\n\n const onDocumentPointerDown = (event: PointerEvent): void => {\n hierarchyShortcutScopeActive = isEventInsideHierarchyPanel(event);\n };\n\n const onDocumentFocusIn = (event: FocusEvent): void => {\n hierarchyShortcutScopeActive = isEventInsideHierarchyPanel(event);\n };\n\n const onDoubleClick = (event: MouseEvent): void => {\n const target = event.target instanceof HTMLElement ? event.target : null;\n if (target?.closest('[data-editor-hierarchy-toggle]')) return;\n const hierarchyButton = target?.closest<HTMLButtonElement>('[data-editor-hierarchy-id]');\n const id = hierarchyButton?.dataset.editorHierarchyId;\n if (!id) return;\n event.preventDefault();\n event.stopPropagation();\n hierarchySelectionAnchorId = id;\n selectSingleHierarchyItem(id);\n if (resolveScopeForCurrentState()?.kind === 'scene') callbacks.onFocusSelection?.();\n };\n\n const onInput = (event: Event): void => {\n const input = event.target instanceof HTMLInputElement ? event.target : null;\n if (input?.dataset.editorHierarchySearch != null) {\n const scopeId = resolveScopeForCurrentState()?.scopeId ?? 'scene';\n hierarchySearchByScope.set(scopeId, input.value);\n if (!hierarchySearchComposing && !isComposingInputEvent(event)) requestRender();\n return;\n }\n if (!input?.dataset.editorHierarchyRenameInput || !hierarchyRename) return;\n hierarchyRename = {\n id: input.dataset.editorHierarchyRenameInput,\n value: input.value,\n initialValue: hierarchyRename.initialValue,\n commandTargetId: hierarchyRename.commandTargetId,\n precondition: hierarchyRename.precondition,\n };\n };\n\n const onKeyDown = (event: KeyboardEvent): void => {\n const input = event.target instanceof HTMLInputElement ? event.target : null;\n if (input?.dataset.editorHierarchySearch != null) {\n if (event.isComposing || hierarchySearchComposing) return;\n const scopeId = resolveScopeForCurrentState()?.scopeId ?? 'scene';\n if (event.key !== 'Escape' || getScopeSearch(scopeId).length === 0) return;\n event.preventDefault();\n hierarchySearchByScope.set(scopeId, '');\n requestRender();\n return;\n }\n if (!input?.dataset.editorHierarchyRenameInput) return;\n if (event.key === 'Enter') {\n event.preventDefault();\n commitHierarchyRename(input.dataset.editorHierarchyRenameInput, input.value);\n return;\n }\n if (event.key === 'Escape') {\n event.preventDefault();\n hierarchyRename = null;\n requestRender();\n }\n };\n\n const onCompositionStart = (event: CompositionEvent): void => {\n const input = event.target instanceof HTMLInputElement ? event.target : null;\n if (input?.dataset.editorHierarchySearch == null) return;\n hierarchySearchComposing = true;\n };\n\n const onCompositionEnd = (event: CompositionEvent): void => {\n const input = event.target instanceof HTMLInputElement ? event.target : null;\n if (input?.dataset.editorHierarchySearch == null) return;\n hierarchySearchComposing = false;\n const scopeId = resolveScopeForCurrentState()?.scopeId ?? 'scene';\n hierarchySearchByScope.set(scopeId, input.value);\n requestRender();\n };\n\n const onFocusOut = (event: FocusEvent): void => {\n const input = event.target instanceof HTMLInputElement ? event.target : null;\n if (!input?.dataset.editorHierarchyRenameInput) return;\n commitHierarchyRename(input.dataset.editorHierarchyRenameInput, input.value);\n };\n\n const onDragStart = (event: DragEvent): void => {\n const state = getState();\n const target = event.target instanceof HTMLElement ? event.target : null;\n const button = target?.closest<HTMLButtonElement>('[data-editor-hierarchy-id]');\n const id = button?.dataset.editorHierarchyId;\n if (!id || !state) return;\n if (!resolveHierarchyCommandAdapter(resolveScope(state)).menuCapabilities.hasMoveHandler) {\n event.preventDefault();\n return;\n }\n const model = getModel(state);\n const node = model.getNode(id);\n if (!isLocalEditorHierarchyNodeMovable(node)) {\n event.preventDefault();\n return;\n }\n const precondition = lastRenderedCommandPrecondition;\n if (!precondition) {\n event.preventDefault();\n return;\n }\n hierarchyDrag = { id, precondition };\n const draggedIds = resolveDraggedIds(state, model, id);\n event.dataTransfer?.setData('text/plain', draggedIds.join(','));\n if (event.dataTransfer) event.dataTransfer.effectAllowed = 'move';\n };\n\n const onDragOver = (event: DragEvent): void => {\n const state = getState();\n const target = event.target instanceof HTMLElement ? event.target : null;\n const draggedIds = readDraggedIds(event);\n if (!state || draggedIds.length === 0) {\n clearHierarchyDragFeedbackAndRender();\n return;\n }\n if (!resolveHierarchyCommandAdapter(resolveScope(state)).menuCapabilities.hasMoveHandler) {\n clearHierarchyDragFeedbackAndRender();\n return;\n }\n const model = getModel(state);\n if (!isInsideHierarchyTreeViewport(target)) {\n clearHierarchyDragFeedbackAndRender();\n return;\n }\n hierarchyDragSession.pointer = { x: event.clientX, y: event.clientY };\n updateHierarchyAutoScroll();\n const operation = resolveHierarchyDragOperation(event, model, draggedIds);\n if (!operation || operation.status === 'idle') {\n clearHierarchyDragFeedbackAndRender();\n return;\n }\n event.preventDefault();\n hierarchyDragSession.operation = operation;\n const canSubmitDrop = operation.status === 'valid'\n && (!!callbacks.onSceneGraphMove || operation.slot?.placement === 'inside');\n if (event.dataTransfer) event.dataTransfer.dropEffect = canSubmitDrop ? 'move' : 'none';\n if (operation.status !== 'valid' || !operation.slot || !operation.resolution?.ok) {\n hierarchyDragSession.preview = operation.preview;\n hierarchyDrop = null;\n hierarchyRootDrop = false;\n syncHierarchyDropPreview();\n return;\n }\n if (operation.slot.placement === 'root') {\n hierarchyDragSession.preview = operation.preview;\n hierarchyDrop = null;\n hierarchyRootDrop = true;\n syncHierarchyDropPreview();\n return;\n }\n const targetId = operation.slot.targetId;\n if (!targetId) return;\n const nextDrop = {\n draggedId: operation.resolution.draggedIds[0] ?? draggedIds[0]!,\n targetId,\n placement: operation.slot.placement,\n preserveWorldTransform: true,\n };\n hierarchyDragSession.preview = operation.preview;\n hierarchyDrop = nextDrop;\n hierarchyRootDrop = false;\n syncHierarchyDropPreview();\n };\n\n const onDragLeave = (event: DragEvent): void => {\n if (!panel.contains(event.relatedTarget as Node | null)) {\n clearHierarchyDragFeedback();\n requestRender();\n }\n };\n\n const onDragEnd = (): void => {\n hierarchyDrag = null;\n clearHierarchyDragFeedback();\n requestRender();\n };\n\n const onDrop = (event: DragEvent): void => {\n const state = getState();\n const target = event.target instanceof HTMLElement ? event.target : null;\n const activeDrag = hierarchyDrag;\n const draggedIds = readDraggedIds(event);\n if (!state || !activeDrag || draggedIds.length === 0) {\n clearHierarchyDragFeedbackAndRender();\n return;\n }\n const scope = resolveScope(state);\n if (!resolveHierarchyCommandAdapter(scope).menuCapabilities.hasMoveHandler) {\n clearHierarchyDragFeedbackAndRender();\n return;\n }\n const model = getModel(state);\n if (!isInsideHierarchyTreeViewport(target)) {\n clearHierarchyDragFeedbackAndRender();\n return;\n }\n const operation = hierarchyDragSession.operation ?? resolveHierarchyDragOperation(event, model, draggedIds);\n if (!operation || operation.status !== 'valid' || !operation.slot || !operation.resolution?.ok) {\n clearHierarchyDragFeedbackAndRender();\n return;\n }\n event.preventDefault();\n const dropPrecondition = activeDrag.precondition;\n hierarchyDrag = null;\n clearHierarchyDragFeedback();\n if (operation.slot.placement === 'root') {\n if (scope.commandSurface === 'prefab-composition') {\n requestRender();\n return;\n }\n submitResolvedRootDrop(operation.resolution, dropPrecondition);\n return;\n }\n const targetId = operation.slot.targetId;\n if (!targetId) {\n requestRender();\n return;\n }\n expandDropParent(operation.resolution);\n if (scope.commandSurface === 'prefab-composition') {\n if (operation.slot.placement !== 'inside') {\n requestRender();\n return;\n }\n if (dropPrecondition) {\n submitPrefabNodeReparent(\n scope,\n operation.resolution.draggedIds[0] ?? draggedIds[0]!,\n targetId,\n dropPrecondition,\n );\n }\n requestRender();\n return;\n }\n submitResolvedDrop(operation.resolution, targetId, operation.slot.placement, draggedIds, dropPrecondition);\n };\n\n panel.addEventListener('click', onClick);\n panel.addEventListener('contextmenu', onContextMenu);\n panel.addEventListener('dblclick', onDoubleClick);\n panel.addEventListener('input', onInput);\n panel.addEventListener('keydown', onKeyDown);\n panel.addEventListener('compositionstart', onCompositionStart);\n panel.addEventListener('compositionend', onCompositionEnd);\n panel.addEventListener('focusout', onFocusOut);\n panel.addEventListener('dragstart', onDragStart);\n panel.addEventListener('dragover', onDragOver);\n panel.addEventListener('dragleave', onDragLeave);\n panel.addEventListener('dragend', onDragEnd);\n panel.addEventListener('drop', onDrop);\n doc.addEventListener('pointerdown', onDocumentPointerDown, { capture: true });\n doc.addEventListener('focusin', onDocumentFocusIn, { capture: true });\n\n return {\n render,\n handleDeleteShortcut(event) {\n return handleDeleteShortcut(event);\n },\n handleEditShortcut(event) {\n return handleEditShortcut(event);\n },\n dispose() {\n clearHierarchyDragFeedback();\n panel.removeEventListener('click', onClick);\n panel.removeEventListener('contextmenu', onContextMenu);\n panel.removeEventListener('dblclick', onDoubleClick);\n panel.removeEventListener('input', onInput);\n panel.removeEventListener('keydown', onKeyDown);\n panel.removeEventListener('compositionstart', onCompositionStart);\n panel.removeEventListener('compositionend', onCompositionEnd);\n panel.removeEventListener('focusout', onFocusOut);\n panel.removeEventListener('dragstart', onDragStart);\n panel.removeEventListener('dragover', onDragOver);\n panel.removeEventListener('dragleave', onDragLeave);\n panel.removeEventListener('dragend', onDragEnd);\n panel.removeEventListener('drop', onDrop);\n doc.removeEventListener('pointerdown', onDocumentPointerDown, { capture: true });\n doc.removeEventListener('focusin', onDocumentFocusIn, { capture: true });\n attachDialog.dispose();\n },\n };\n\n function handleDeleteShortcut(event: KeyboardEvent): boolean {\n const state = getState();\n if (!state) return false;\n const scope = resolveScope(state);\n if (scope.kind !== 'scene') return false;\n const commandAdapter = resolveHierarchyCommandAdapter(scope);\n const action = createLocalEditorHierarchyDeleteShortcutAction({\n state,\n model: getModel(state),\n ...commandAdapter.menuCapabilities,\n });\n if (!action) return false;\n event.preventDefault();\n const precondition = lastRenderedCommandPrecondition;\n if (!precondition) return false;\n submitHierarchyAction(action, precondition);\n return true;\n }\n\n function handleEditShortcut(event: KeyboardEvent): boolean {\n const key = event.key.toLowerCase();\n if (key === 'delete' || key === 'backspace') return handleDeleteShortcut(event);\n if (event.altKey || (!event.metaKey && !event.ctrlKey)) return false;\n if (key === 'a' && (event.shiftKey || !isHierarchyShortcutScope(event))) return false;\n const state = getState();\n if (!state) return false;\n const scope = resolveScope(state);\n if (scope.kind !== 'scene') return false;\n const commandAdapter = resolveHierarchyCommandAdapter(scope);\n const input = {\n state,\n model: getModel(state),\n clipboardIds: hierarchyClipboard?.ids ?? null,\n clipboardActiveId: hierarchyClipboard?.activeId ?? null,\n ...commandAdapter.menuCapabilities,\n };\n const action = key === 'd'\n ? createLocalEditorHierarchyDuplicateShortcutAction(input)\n : key === 'c'\n ? createLocalEditorHierarchyCopyShortcutAction(input)\n : key === 'v'\n ? createLocalEditorHierarchyPasteShortcutAction(input)\n : key === 'a'\n ? createLocalEditorHierarchySelectAllShortcutAction(input)\n : null;\n if (!action) return false;\n event.preventDefault();\n const precondition = lastRenderedCommandPrecondition;\n if (!precondition) return false;\n submitHierarchyAction(action, precondition);\n return true;\n }\n\n function isComposingInputEvent(event: Event): boolean {\n return (event as Event & { isComposing?: boolean }).isComposing === true;\n }\n\n function resolveScope(state: LocalEditorBrowserUiState<TDocument>): LocalEditorBrowserHierarchyScope {\n const scope = createLocalEditorActiveHierarchyScope(state);\n const projection = isLocalEditorHierarchyProjectionCurrent(state.hierarchyProjection, scope)\n ? state.hierarchyProjection\n : createLocalEditorHierarchyProjection(scope);\n return {\n ...scope,\n nodes: projection.nodes,\n selectedIds: projection.selectedIds,\n activeId: projection.activeId,\n readonly: scope.readonly || !projection.interactive,\n commandSurface: projection.interactive ? scope.commandSurface : 'readonly',\n };\n }\n\n function hasCurrentHierarchyProjection(scope: LocalEditorBrowserHierarchyScope): boolean {\n return scope.scopeId === lastRenderedScopeId\n && scope.documentRevision === lastRenderedDocumentRevision\n && scope.projectionRevision === lastRenderedProjectionRevision;\n }\n\n function resolveScopeForCurrentState(): LocalEditorBrowserHierarchyScope | null {\n const state = getState();\n return state ? resolveScope(state) : null;\n }\n\n function getScopeCollapsedIds(scopeId: string): Set<string> {\n const existing = collapsedIdsByScope.get(scopeId);\n if (existing) return existing;\n const created = new Set<string>();\n collapsedIdsByScope.set(scopeId, created);\n return created;\n }\n\n function getScopeSearch(scopeId: string): string {\n return hierarchySearchByScope.get(scopeId) ?? '';\n }\n\n function createModel(\n state: LocalEditorBrowserUiState<TDocument>,\n scope = resolveScope(state),\n ): LocalEditorHierarchyTreeModel {\n return createLocalEditorHierarchyTreeModel(scope.nodes, scope.selectedIds, scope.activeId, {\n collapsedIds: getScopeCollapsedIds(scope.scopeId),\n defaultExpanded: true,\n });\n }\n\n function selectHierarchyItemFromClick(id: string, event: MouseEvent): void {\n const scope = resolveScopeForCurrentState();\n const precondition = lastRenderedCommandPrecondition;\n if (!scope || !precondition) return;\n if (hasCurrentHierarchyProjection(scope) && scope.commandSurface === 'readonly') return;\n const toggle = event.metaKey || event.ctrlKey;\n const range = event.shiftKey && !toggle;\n if (range) {\n selectHierarchyVisibleRange(id);\n return;\n }\n hierarchySelectionAnchorId = id;\n if (precondition.scopeId.startsWith('prefab-stage:')) callbacks.onSelectPrefabStageItem?.(id, precondition);\n else callbacks.onSelectHierarchyItem?.({ id, additive: false, toggle }, precondition);\n }\n\n function toggleHierarchyItemEnabled(id: string, toggle: HTMLElement): void {\n if (toggle.dataset.editorHierarchyEnabledToggleDisabled === 'true') return;\n const state = getState();\n if (!state) return;\n const scope = resolveScope(state);\n if (hasCurrentHierarchyProjection(scope) && scope.commandSurface !== 'scene-graph') return;\n const node = getModel(state).getNode(id);\n if (!node || !canLocalEditorHierarchyNodeToggleEnabled(node)) return;\n const directEnabled = typeof node.item.directEnabled === 'boolean'\n ? node.item.directEnabled\n : node.item.enabled;\n const precondition = lastRenderedCommandPrecondition;\n if (!precondition) return;\n callbacks.onHierarchyItemEnabledChange?.({\n id,\n enabled: directEnabled === false,\n }, precondition);\n }\n\n function selectHierarchyVisibleRange(targetId: string): void {\n const state = getState();\n if (!state) {\n selectSingleHierarchyItem(targetId);\n hierarchySelectionAnchorId = targetId;\n return;\n }\n const scope = resolveScope(state);\n if (scope.kind !== 'scene') {\n hierarchySelectionAnchorId = targetId;\n const precondition = lastRenderedCommandPrecondition;\n if (!precondition) return;\n callbacks.onSelectPrefabStageItem?.(targetId, precondition);\n return;\n }\n const model = getModel(state);\n const anchorId = hierarchySelectionAnchorId ?? scope.activeId ?? targetId;\n const selectedIds = model.getVisibleRangeSelection(anchorId, targetId);\n if (selectedIds.length === 0) {\n hierarchySelectionAnchorId = targetId;\n selectSingleHierarchyItem(targetId);\n return;\n }\n const activeId = selectedIds.includes(targetId)\n ? targetId\n : selectedIds[selectedIds.length - 1] ?? null;\n submitSelectionCommand({\n type: 'selection.replace',\n label: 'Select Hierarchy Range',\n selectedIds,\n activeId,\n }, state);\n }\n\n function resolveDraggedIds(\n state: LocalEditorBrowserUiState<TDocument>,\n model: LocalEditorHierarchyTreeModel,\n draggedId: string,\n ): string[] {\n const scope = resolveScope(state);\n const selectedIds = scope.selectedIds.includes(draggedId) ? scope.selectedIds : [draggedId];\n return model.getTopLevelSelection(selectedIds);\n }\n\n function readDraggedIds(event: DragEvent): string[] {\n const dataTransferIds = event.dataTransfer?.getData('text/plain')\n .split(',')\n .map(id => id.trim())\n .filter(Boolean) ?? [];\n return dataTransferIds.length > 0 ? dataTransferIds : hierarchyDrag?.id ? [hierarchyDrag.id] : [];\n }\n\n function submitResolvedRootDrop(\n resolved: LocalEditorHierarchyDropResolution,\n precondition: LocalEditorBrowserHierarchyCommandPrecondition | null,\n ): void {\n const state = getState();\n if (!state) return;\n const scope = resolveScope(state);\n if (hasCurrentHierarchyProjection(scope) && scope.commandSurface !== 'scene-graph') return;\n if (!precondition) return;\n callbacks.onSceneGraphMove?.({\n ids: resolved.draggedIds,\n targetId: null,\n placement: 'root',\n preserveWorldTransform: true,\n }, precondition);\n requestRender();\n }\n\n function toggleExpanded(id: string): void {\n const scope = resolveScopeForCurrentState();\n const collapsedIds = getScopeCollapsedIds(scope?.scopeId ?? 'scene');\n if (collapsedIds.has(id)) collapsedIds.delete(id);\n else collapsedIds.add(id);\n requestRender();\n }\n\n function expandNode(id: string | null | undefined): void {\n if (!id) return;\n const scope = resolveScopeForCurrentState();\n getScopeCollapsedIds(scope?.scopeId ?? 'scene').delete(id);\n }\n\n function expandActiveHierarchyPath(\n state: LocalEditorBrowserUiState<TDocument>,\n scope = resolveScope(state),\n ): void {\n if (!scope.activeId) return;\n const model = createModel(state, scope);\n if (!model.getNode(scope.activeId)) return;\n const collapsedIds = getScopeCollapsedIds(scope.scopeId);\n for (const ancestor of model.getAncestors(scope.activeId)) {\n collapsedIds.delete(ancestor.id);\n }\n }\n\n function shouldAutoScrollActiveHierarchyNode(): boolean {\n return !hierarchyRename && !hierarchyDrag && !hasHierarchyDragFeedback();\n }\n\n function scheduleActiveHierarchyScroll(activeId: string): void {\n pendingHierarchyScrollId = activeId;\n setTimeout(() => {\n if (pendingHierarchyScrollId !== activeId) return;\n pendingHierarchyScrollId = null;\n const row = findHierarchyRow(activeId);\n if (!row) return;\n const viewport = findHierarchyTreeViewport();\n if (viewport) {\n treeViewportReveal.revealElement(row, { behavior: 'smooth' });\n return;\n }\n try {\n row.scrollIntoView({ block: 'nearest', inline: 'nearest', behavior: 'smooth' });\n } catch {\n row.scrollIntoView();\n }\n }, 0);\n }\n\n function findHierarchyRow(id: string): HTMLElement | null {\n for (const row of panel.querySelectorAll<HTMLElement>('[data-editor-hierarchy-id]')) {\n if (row.dataset.editorHierarchyId === id) return row;\n }\n return null;\n }\n\n function findHierarchyTreeViewport(): HTMLElement | null {\n return panel.querySelector<HTMLElement>('[data-editor-hierarchy-tree-viewport]');\n }\n\n function isInsideHierarchyTreeViewport(target: HTMLElement | null): boolean {\n return !!target?.closest('[data-editor-hierarchy-tree-viewport]');\n }\n\n function armHierarchyAutoScroll(): void {\n if (hierarchyDragSession.autoScrollFrame !== null) return;\n hierarchyDragSession.autoScrollFrame = doc.defaultView?.requestAnimationFrame(tickHierarchyAutoScroll) ?? null;\n }\n\n function stopHierarchyAutoScroll(): void {\n if (hierarchyDragSession.autoScrollFrame !== null) {\n doc.defaultView?.cancelAnimationFrame(hierarchyDragSession.autoScrollFrame);\n }\n hierarchyDragSession.autoScrollFrame = null;\n }\n\n function clearHierarchyDragFeedback(): void {\n hierarchyDrop = null;\n hierarchyRootDrop = false;\n stopHierarchyAutoScroll();\n clearLocalEditorStructuredDragSession(hierarchyDragSession);\n }\n\n function resetHierarchyTransientState(): void {\n hierarchyRename = null;\n hierarchyDrag = null;\n hierarchySelectionAnchorId = null;\n hierarchyClipboard = null;\n hierarchySearchComposing = false;\n pendingHierarchyScrollId = null;\n attachDialogPrecondition = null;\n clearHierarchyDragFeedback();\n attachDialog.close();\n contextMenu.close();\n }\n\n function hasHierarchyDragFeedback(): boolean {\n return hierarchyDrop !== null\n || hierarchyRootDrop\n || hasLocalEditorStructuredDragSessionFeedback(hierarchyDragSession);\n }\n\n function clearHierarchyDragFeedbackAndRender(): void {\n const hadFeedback = hasHierarchyDragFeedback();\n clearHierarchyDragFeedback();\n if (hadFeedback) syncHierarchyDropPreview();\n }\n\n function syncHierarchyDropPreview(): void {\n syncLocalEditorHierarchyDropPreview(doc, panel, {\n dropPreview: hierarchyDragSession.preview,\n rootDrop: hierarchyRootDrop,\n });\n }\n\n function tickHierarchyAutoScroll(): void {\n hierarchyDragSession.autoScrollFrame = null;\n if (!hierarchyDragSession.pointer) return;\n const viewport = findHierarchyTreeViewport();\n if (!viewport) return;\n const rect = viewport.getBoundingClientRect();\n const scroll = resolveLocalEditorHierarchyAutoScroll({\n pointerY: hierarchyDragSession.pointer.y,\n viewportTop: rect.top,\n viewportBottom: rect.bottom,\n viewportHeight: rect.height,\n scrollTop: viewport.scrollTop,\n scrollHeight: viewport.scrollHeight,\n clientHeight: viewport.clientHeight,\n });\n if (scroll.speed !== 0) {\n viewport.scrollTop += scroll.speed;\n requestRender();\n armHierarchyAutoScroll();\n }\n }\n\n function updateHierarchyAutoScroll(): void {\n const viewport = findHierarchyTreeViewport();\n if (!viewport || !hierarchyDragSession.pointer) {\n stopHierarchyAutoScroll();\n return;\n }\n const rect = viewport.getBoundingClientRect();\n const scroll = resolveLocalEditorHierarchyAutoScroll({\n pointerY: hierarchyDragSession.pointer.y,\n viewportTop: rect.top,\n viewportBottom: rect.bottom,\n viewportHeight: rect.height,\n scrollTop: viewport.scrollTop,\n scrollHeight: viewport.scrollHeight,\n clientHeight: viewport.clientHeight,\n });\n if (scroll.speed === 0) {\n stopHierarchyAutoScroll();\n return;\n }\n armHierarchyAutoScroll();\n }\n\n function resolveHierarchyDragOperation(\n event: DragEvent,\n model: LocalEditorHierarchyTreeModel,\n draggedIds: readonly string[],\n ): LocalEditorHierarchyDragOperation | null {\n const layout = createHierarchyDragLayout(model);\n if (!layout) return null;\n return resolveLocalEditorHierarchyDragOperation({\n layout,\n pointer: { x: event.clientX, y: event.clientY },\n draggedIds,\n resolveDrop: model.resolveDrop.bind(model),\n });\n }\n\n function createHierarchyDragLayout(model: LocalEditorHierarchyTreeModel): LocalEditorHierarchyDragLayout | null {\n const viewport = findHierarchyTreeViewport();\n if (!viewport) return null;\n const viewportRect = viewport.getBoundingClientRect();\n const rows: LocalEditorHierarchyDragLayoutRow[] = [];\n for (const element of panel.querySelectorAll<HTMLElement>('[data-editor-hierarchy-id]')) {\n const id = element.dataset.editorHierarchyId;\n const node = model.getNode(id);\n if (!id || !node) continue;\n const rect = element.getBoundingClientRect();\n rows.push({\n id,\n depth: node.depth,\n parentId: node.parentId,\n canHaveChildren: canLocalEditorHierarchyNodeHaveChildren(node),\n rect: {\n left: rect.left,\n top: rect.top,\n width: rect.width,\n height: rect.height,\n },\n });\n }\n rows.sort((left, right) => left.rect.top - right.rect.top);\n return {\n rows,\n viewport: {\n left: viewportRect.left,\n top: viewportRect.top,\n width: viewportRect.width,\n height: viewportRect.height,\n },\n indentWidth: HIERARCHY_DRAG_INDENT_WIDTH,\n };\n }\n\n function expandDropParent(resolved: LocalEditorHierarchyDropResolution): void {\n if (resolved.placement === 'inside') expandNode(resolved.parentId);\n }\n\n function commitHierarchyRename(id: string, value: string): void {\n if (!hierarchyRename || hierarchyRename.id !== id) return;\n const precondition = hierarchyRename.precondition;\n const initialValue = hierarchyRename.initialValue;\n const commandTargetId = hierarchyRename.commandTargetId;\n const trimmed = value.trim();\n const state = getState();\n const scope = state ? resolveScope(state) : null;\n hierarchyRename = null;\n if (trimmed && trimmed !== initialValue) {\n if (!precondition.scopeId.startsWith('prefab-stage:')) {\n callbacks.onSceneGraphRename?.({ id, name: trimmed }, precondition);\n } else if (scope) {\n callbacks.onAssetAction?.(createPrefabNodeAssetAction(scope, 'prefab.node.rename', commandTargetId, {\n value: trimmed,\n }, precondition));\n }\n }\n requestRender();\n }\n\n function openHierarchyContextMenu(event: MouseEvent): void {\n const target = inputRouter.claimContextMenu(event);\n const hadHierarchyFeedback = hasHierarchyDragFeedback();\n hierarchyDrag = null;\n clearHierarchyDragFeedback();\n if (!target) {\n if (hadHierarchyFeedback) requestRender();\n return;\n }\n const initialState = getState();\n if (!initialState || initialState.mode !== 'editor' || initialState.busy) {\n if (hadHierarchyFeedback) requestRender();\n return;\n }\n const initialScope = resolveScope(initialState);\n const initialPrecondition = lastRenderedCommandPrecondition;\n if (!initialPrecondition) return;\n const initialModel = getModel(initialState);\n const hierarchyButton = target.closest<HTMLButtonElement>('[data-editor-hierarchy-id]');\n const requestedNodeId = hierarchyButton?.dataset.editorHierarchyId;\n const initialNode = initialModel.getNode(requestedNodeId);\n if (initialNode && !initialScope.selectedIds.includes(initialNode.id) && isLocalEditorHierarchyNodeSelectable(initialNode)) {\n hierarchySelectionAnchorId = initialNode.id;\n if (initialScope.kind === 'prefab-stage') callbacks.onSelectPrefabStageItem?.(initialNode.id, initialPrecondition);\n else callbacks.onSelectHierarchyItem?.({ id: initialNode.id, additive: false, toggle: false }, initialPrecondition);\n }\n const state = getState();\n if (!state || state.mode !== 'editor' || state.busy) return;\n const scope = resolveScope(state);\n const precondition = lastRenderedCommandPrecondition;\n if (!precondition) return;\n const commandAdapter = resolveHierarchyCommandAdapter(scope);\n const model = getModel(state);\n const node = model.getNode(requestedNodeId);\n if (!commandAdapter.canOpenContextMenu) {\n if (hadHierarchyFeedback) requestRender();\n return;\n }\n options.onBeforeOpenContextMenu?.();\n const menuState = createScopedHierarchyMenuState(state, scope);\n const menu = node\n ? createLocalEditorHierarchyNodeMenu({\n state: menuState,\n model,\n node,\n clipboardIds: hierarchyClipboard?.ids ?? null,\n clipboardActiveId: hierarchyClipboard?.activeId ?? null,\n ...commandAdapter.menuCapabilities,\n contextActions: options.contextActions,\n })\n : createLocalEditorHierarchyBlankMenu({\n state: menuState,\n model,\n clipboardIds: hierarchyClipboard?.ids ?? null,\n clipboardActiveId: hierarchyClipboard?.activeId ?? null,\n ...commandAdapter.menuCapabilities,\n contextActions: options.contextActions,\n });\n const menuItems = commandAdapter.filterMenuItems(menu.items);\n if (menuItems.length === 0) {\n if (hadHierarchyFeedback) requestRender();\n return;\n }\n\n contextMenu.open({\n x: event.clientX,\n y: event.clientY,\n items: menuItems,\n onAction(item) {\n const action = menu.actions.get(item.id);\n if (action) submitHierarchyAction(action, precondition);\n },\n });\n if (hadHierarchyFeedback) requestRender();\n }\n\n function createHierarchyMarkerFromButton(): void {\n const state = getState();\n if (!state || state.mode !== 'editor' || state.busy) return;\n const scope = resolveScope(state);\n if (hasCurrentHierarchyProjection(scope) && scope.commandSurface !== 'scene-graph') return;\n const precondition = lastRenderedCommandPrecondition;\n if (!precondition) return;\n const model = getModel(state);\n const toolbarActiveId = resolveLocalEditorHierarchyToolbarActiveId(scope);\n const activeNode = model.getNode(toolbarActiveId);\n const parentId = resolveLocalEditorHierarchyCreateMarkerParentId(activeNode);\n if (parentId) expandNode(parentId);\n callbacks.onSceneGraphCreateMarker?.({\n parentId,\n activeId: parentId ?? toolbarActiveId,\n name: 'Marker',\n }, precondition);\n requestRender();\n }\n\n function submitHierarchyAction(\n action: LocalEditorHierarchyAction,\n precondition: LocalEditorBrowserHierarchyCommandPrecondition,\n ): void {\n const state = getState();\n if (!state || !precondition) return;\n const scope = resolveScope(state);\n if (hasCurrentHierarchyProjection(scope) && scope.commandSurface === 'readonly') return;\n if (action.kind === 'begin-rename') {\n beginHierarchyRename(action.targetId, precondition);\n return;\n }\n if (action.kind === 'copy-selection') {\n hierarchyClipboard = {\n ids: action.targetIds,\n activeId: action.activeId && action.targetIds.includes(action.activeId)\n ? action.activeId\n : action.targetIds[action.targetIds.length - 1] ?? null,\n };\n return;\n }\n if (action.kind === 'group-selection') {\n callbacks.onSceneGraphGroupSelection?.(action.intent, precondition);\n return;\n }\n if (action.kind === 'open-attach-picker') {\n openAttachPicker(action.targetIds, action.activeId, precondition);\n return;\n }\n if (action.kind === 'selection-command') {\n submitSelectionCommand(action.command, state, precondition);\n return;\n }\n submitHierarchyContextAction(action.action, precondition);\n }\n\n function createScopedHierarchyMenuState(\n state: LocalEditorBrowserUiState<TDocument>,\n scope: LocalEditorBrowserHierarchyScope,\n ): LocalEditorBrowserUiState<TDocument> {\n return {\n ...state,\n hierarchy: scope.nodes,\n selectedIds: scope.selectedIds,\n activeId: scope.activeId,\n };\n }\n\n function submitSelectionCommand(\n command: SelectionCommand,\n state = getState() ?? undefined,\n precondition = lastRenderedCommandPrecondition,\n ): void {\n if (!state) return;\n const scope = resolveScope(state);\n if (!precondition) return;\n if (hasCurrentHierarchyProjection(scope) && scope.kind !== 'scene') return;\n callbacks.onSelectionCommand?.(command, precondition);\n }\n\n function openAttachPicker(\n targetIds: readonly string[],\n activeId: string | null,\n precondition = lastRenderedCommandPrecondition,\n ): void {\n const state = getState();\n if (!state || !precondition || state.mode !== 'editor' || state.busy || targetIds.length === 0) return;\n if (!resolveHierarchyCommandAdapter(resolveScope(state)).menuCapabilities.hasMoveHandler) return;\n attachDialogPrecondition = precondition;\n attachDialog.open({\n model: getModel(state),\n targetIds,\n activeId,\n });\n }\n\n function submitAttachSelection(selection: LocalEditorHierarchyAttachTargetSelection): LocalEditorHierarchyAttachConfirmResult {\n const state = getState();\n const precondition = attachDialogPrecondition;\n attachDialogPrecondition = null;\n if (!state || !precondition || state.mode !== 'editor' || state.busy) return { ok: false, reason: 'Editor is not ready.' };\n const scope = resolveScope(state);\n if (scope.commandSurface === 'prefab-composition') {\n return submitPrefabAttachSelection(scope, selection, precondition);\n }\n if (scope.commandSurface !== 'scene-graph') return { ok: false, reason: 'Hierarchy move pipeline is not connected yet.' };\n const ids = selection.resolution.draggedIds;\n if (ids.length === 0) return { ok: false, reason: 'Select one or more movable nodes first.' };\n if (!callbacks.onSceneGraphMove) return { ok: false, reason: 'Hierarchy move pipeline is not connected yet.' };\n if (selection.placement === 'root') {\n const result = normalizeAttachSceneGraphMoveResult(callbacks.onSceneGraphMove({\n ids,\n placement: 'root',\n preserveWorldTransform: true,\n }, precondition));\n requestRender();\n return result;\n }\n if (!selection.targetId) return { ok: false, reason: 'Select a valid target first.' };\n expandNode(selection.targetId);\n const result = normalizeAttachSceneGraphMoveResult(callbacks.onSceneGraphMove({\n ids,\n targetId: selection.targetId,\n placement: 'inside',\n parentId: selection.resolution.parentId,\n beforeId: selection.resolution.beforeId,\n afterId: selection.resolution.afterId,\n preserveWorldTransform: true,\n }, precondition));\n requestRender();\n return result;\n }\n\n function submitPrefabAttachSelection(\n scope: LocalEditorBrowserHierarchyScope,\n selection: LocalEditorHierarchyAttachTargetSelection,\n precondition: LocalEditorBrowserHierarchyCommandPrecondition,\n ): LocalEditorHierarchyAttachConfirmResult {\n const ids = selection.resolution.draggedIds;\n if (ids.length !== 1) return { ok: false, reason: 'Move one prefab node at a time.' };\n if (selection.placement !== 'inside') return { ok: false, reason: 'Prefab node reparent supports inside placement only.' };\n if (!selection.targetId) return { ok: false, reason: 'Select a valid prefab parent first.' };\n if (!submitPrefabNodeReparent(scope, ids[0], selection.targetId, precondition)) {\n return { ok: false, reason: 'Select valid prefab nodes first.' };\n }\n expandNode(selection.targetId);\n requestRender();\n return { ok: true };\n }\n\n function submitPrefabNodeReparent(\n scope: LocalEditorBrowserHierarchyScope,\n hierarchyId: string,\n parentHierarchyId: string,\n precondition: LocalEditorBrowserHierarchyCommandPrecondition,\n ): boolean {\n const nodeId = resolvePrefabCommandTargetId(scope, hierarchyId);\n const parentNodeId = resolvePrefabCommandTargetId(scope, parentHierarchyId);\n if (!nodeId || !parentNodeId) return false;\n callbacks.onAssetAction?.(createPrefabNodeAssetAction(scope, 'prefab.node.reparent', nodeId, {\n parentNodeId,\n }, precondition));\n return true;\n }\n\n function normalizeAttachSceneGraphMoveResult(result: LocalEditorBrowserSceneGraphActionResponse): LocalEditorHierarchyAttachConfirmResult {\n if (typeof result === 'boolean') return { ok: result };\n if (typeof result === 'string') return { ok: false, reason: result };\n if (result && typeof result === 'object') return result;\n return { ok: true };\n }\n\n function shouldClearSelectionFromBlankClick(event: MouseEvent, target: HTMLElement | null): boolean {\n if (event.button !== 0 || event.shiftKey || event.metaKey || event.ctrlKey || event.altKey) return false;\n if (!target?.closest('[data-editor-hierarchy-root-drop]')) return false;\n if (hierarchyRename || hierarchyDrag || hasHierarchyDragFeedback()) return false;\n const state = getState();\n if (!state) return false;\n const scope = resolveScope(state);\n return scope.kind === 'scene' && scope.selectedIds.length > 0;\n }\n\n function clearSelectionFromSearchClick(event: MouseEvent): void {\n if (event.button !== 0 || event.shiftKey || event.metaKey || event.ctrlKey || event.altKey) return;\n const state = getState();\n if (!state || resolveScope(state).kind !== 'scene' || state.selectedIds.length === 0) return;\n hierarchySelectionAnchorId = null;\n submitSelectionCommand({ type: 'selection.clear', label: 'Clear Selection' }, state);\n }\n\n function isHierarchyShortcutScope(event: KeyboardEvent): boolean {\n const target = event.target instanceof Node ? event.target : null;\n const activeElement = doc.activeElement;\n return hierarchyShortcutScopeActive\n || (target !== null && panel.contains(target))\n || (activeElement !== null && panel.contains(activeElement));\n }\n\n function isEventInsideHierarchyPanel(event: Event): boolean {\n const target = event.target instanceof Node ? event.target : null;\n return target !== null && panel.contains(target);\n }\n\n function submitHierarchyContextAction(\n action: LocalEditorContextAction,\n precondition: LocalEditorBrowserHierarchyCommandPrecondition,\n ): void {\n if (action.action === 'rename') return;\n const scope = resolveScopeForCurrentState();\n if (!scope) return;\n const current = hasCurrentHierarchyProjection(scope);\n if (precondition.scopeId.startsWith('prefab-stage:')) {\n if (current && scope.commandSurface !== 'prefab-composition') return;\n submitPrefabHierarchyContextAction(scope, action, precondition);\n return;\n }\n if (current && scope.commandSurface !== 'scene-graph') return;\n if (action.action === 'create-group' || action.action === 'create-primitive' || action.action === 'create-marker') {\n expandNode(action.parentId);\n }\n if (callbacks.onContextAction) {\n callbacks.onContextAction(action, precondition);\n return;\n }\n if (action.action === 'focus') callbacks.onFocusSelection?.();\n else if (action.action === 'duplicate') {\n callbacks.onSceneGraphDuplicate?.({\n targetIds: action.targetIds,\n activeId: action.activeId ?? null,\n }, precondition);\n } else if (action.action === 'paste') {\n callbacks.onSceneGraphDuplicate?.({\n targetIds: action.sourceIds,\n activeId: action.activeId ?? null,\n }, precondition);\n }\n else if (action.action === 'create-group') {\n callbacks.onSceneGraphCreateGroup?.({\n parentId: action.parentId ?? null,\n activeId: action.activeId ?? null,\n name: 'Empty',\n }, precondition);\n } else if (action.action === 'create-marker') {\n callbacks.onSceneGraphCreateMarker?.({\n parentId: action.parentId ?? null,\n activeId: action.activeId ?? null,\n markerType: action.markerType,\n name: action.name,\n }, precondition);\n } else if (action.action === 'create-primitive') {\n callbacks.onSceneGraphCreatePrimitive?.({\n parentId: action.parentId ?? null,\n activeId: action.activeId ?? null,\n shape: action.shape,\n name: action.name,\n }, precondition);\n } else if (action.action === 'delete') {\n callbacks.onSceneGraphDelete?.({\n ids: action.targetIds,\n activeId: action.activeId ?? null,\n }, precondition);\n }\n }\n\n function submitPrefabHierarchyContextAction(\n scope: LocalEditorBrowserHierarchyScope,\n action: LocalEditorContextAction,\n precondition: LocalEditorBrowserHierarchyCommandPrecondition,\n ): void {\n if (action.action === 'focus') {\n const targetId = action.activeId ?? action.targetIds[0] ?? null;\n if (targetId) callbacks.onSelectPrefabStageItem?.(targetId, precondition);\n return;\n }\n if (action.action === 'create-primitive') {\n if (action.parentId) expandNode(action.parentId);\n callbacks.onAssetAction?.(createPrefabNodeAssetAction(scope, 'prefab.node.createPrimitive', resolvePrefabCommandTargetId(scope, action.parentId ?? scope.activeId), {\n primitiveShape: action.shape,\n }, precondition));\n return;\n }\n if (action.action === 'create-group') {\n if (action.parentId) expandNode(action.parentId);\n callbacks.onAssetAction?.(createPrefabNodeAssetAction(scope, 'prefab.node.createGroup', resolvePrefabCommandTargetId(scope, action.parentId ?? scope.activeId), {\n value: { name: 'Empty' },\n }, precondition));\n return;\n }\n if (action.action === 'delete') {\n const nodeId = action.activeId && action.targetIds.includes(action.activeId)\n ? action.activeId\n : action.targetIds[0] ?? null;\n if (!nodeId) return;\n callbacks.onAssetAction?.(createPrefabNodeAssetAction(\n scope,\n 'prefab.node.delete',\n resolvePrefabCommandTargetId(scope, nodeId),\n {},\n precondition,\n ));\n }\n }\n\n function resolvePrefabCommandTargetId(\n scope: LocalEditorBrowserHierarchyScope,\n hierarchyId: string | null | undefined,\n ): string | null {\n if (!hierarchyId) return null;\n const node = scope.nodes.find(candidate => candidate.id === hierarchyId);\n return node?.commandTargetId ?? hierarchyId;\n }\n\n function createPrefabNodeAssetAction(\n scope: LocalEditorBrowserHierarchyScope,\n actionId: string,\n nodeId: string | null | undefined,\n extra: Partial<LocalEditorBrowserAssetActionInput> = {},\n precondition: LocalEditorBrowserHierarchyCommandPrecondition,\n ): LocalEditorBrowserAssetActionInput {\n const stageAssetId = precondition.scopeId.startsWith('prefab-stage:')\n ? precondition.scopeId.slice('prefab-stage:'.length)\n : undefined;\n return {\n actionId,\n assetId: stageAssetId,\n browserAssetId: stageAssetId ? `prefab:${stageAssetId}` : undefined,\n assetKind: 'prefab',\n targetPrefabAssetId: stageAssetId,\n hierarchyPrecondition: precondition,\n ...(nodeId ? { nodeId, parentNodeId: nodeId } : {}),\n ...extra,\n };\n }\n\n function resolveHierarchyCommandAdapter(scope: LocalEditorBrowserHierarchyScope) {\n return resolveLocalEditorHierarchyCommandAdapter(scope, {\n hasDuplicateHandler: typeof callbacks.onSceneGraphDuplicate === 'function',\n hasMoveHandler: typeof callbacks.onSceneGraphMove === 'function',\n hasGroupSelectionHandler: typeof callbacks.onSceneGraphGroupSelection === 'function',\n });\n }\n\n function resolveActiveTheme(): 'dark' | 'light' | undefined {\n const themed = panel.closest<HTMLElement>('.fps-editor-workbench[data-fps-editor-theme]');\n const theme = themed?.dataset.fpsEditorTheme;\n return theme === 'light' || theme === 'dark' ? theme : undefined;\n }\n\n function beginHierarchyRename(\n id: string,\n precondition: LocalEditorBrowserHierarchyCommandPrecondition,\n ): void {\n const state = getState();\n const scope = state ? resolveScope(state) : null;\n const model = state ? getModel(state) : null;\n const node = model?.getNode(id) ?? null;\n if (!node || !canLocalEditorHierarchyNodeRename(node)) return;\n hierarchyRename = {\n id,\n value: node.label,\n initialValue: node.label,\n commandTargetId: scope?.nodes.find(candidate => candidate.id === id)?.commandTargetId ?? id,\n precondition,\n };\n requestRender();\n }\n\n function selectSingleHierarchyItem(id: string): void {\n const scope = resolveScopeForCurrentState();\n const precondition = lastRenderedCommandPrecondition;\n if (!scope || !precondition) return;\n if (hasCurrentHierarchyProjection(scope) && scope.commandSurface === 'readonly') return;\n if (precondition.scopeId.startsWith('prefab-stage:')) callbacks.onSelectPrefabStageItem?.(id, precondition);\n else callbacks.onSelectHierarchyItem?.({ id, additive: false, toggle: false }, precondition);\n }\n\n function submitResolvedDrop(\n resolved: LocalEditorHierarchyDropResolution,\n targetId: string,\n placement: LocalEditorBrowserSceneGraphDropPlacement,\n draggedIds: readonly string[],\n precondition: LocalEditorBrowserHierarchyCommandPrecondition | null,\n ): void {\n const scope = resolveScopeForCurrentState();\n if (!scope) return;\n if (hasCurrentHierarchyProjection(scope) && scope.commandSurface !== 'scene-graph') return;\n if (!precondition) return;\n if (callbacks.onSceneGraphMove) {\n callbacks.onSceneGraphMove({\n ids: resolved.draggedIds,\n targetId,\n placement,\n parentId: resolved.parentId,\n beforeId: resolved.beforeId,\n afterId: resolved.afterId,\n preserveWorldTransform: true,\n }, precondition);\n } else if (placement === 'inside') {\n callbacks.onSceneGraphDrop?.({\n draggedId: resolved.draggedIds[0] ?? draggedIds[0]!,\n targetId,\n placement,\n preserveWorldTransform: true,\n }, precondition);\n } else {\n requestRender();\n }\n }\n\n function createHierarchyCommandPrecondition(\n scope: LocalEditorBrowserHierarchyScope,\n ): LocalEditorBrowserHierarchyCommandPrecondition {\n return {\n scopeId: scope.scopeId,\n documentRevision: scope.documentRevision,\n projectionRevision: scope.projectionRevision,\n };\n }\n}\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { LocalEditorBrowserHierarchyCommandPrecondition, LocalEditorBrowserHierarchyProjectionState, LocalEditorBrowserHierarchyScope, LocalEditorBrowserStatusDiagnostic } from './local-editor-ui-types';
|
|
2
|
+
export declare function isLocalEditorHierarchyCommandPreconditionCurrent(precondition: LocalEditorBrowserHierarchyCommandPrecondition, expected: LocalEditorBrowserHierarchyCommandPrecondition): boolean;
|
|
3
|
+
export declare function isLocalEditorHierarchyProjectionCurrent(projection: LocalEditorBrowserHierarchyProjectionState | null | undefined, scope: LocalEditorBrowserHierarchyScope): projection is LocalEditorBrowserHierarchyProjectionState;
|
|
4
|
+
export declare function createLocalEditorHierarchyProjection(scope: LocalEditorBrowserHierarchyScope): LocalEditorBrowserHierarchyProjectionState;
|
|
5
|
+
export declare function formatLocalEditorStatusDiagnostic(diagnostic: LocalEditorBrowserStatusDiagnostic): string;
|
|
6
|
+
export declare function formatLocalEditorStatusDiagnosticDetails(details: Record<string, unknown>): string;
|
|
7
|
+
//# sourceMappingURL=local-editor-ui-hierarchy-projection.d.ts.map
|
package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-projection.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-editor-ui-hierarchy-projection.d.ts","sourceRoot":"","sources":["../src/local-editor-ui-hierarchy-projection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,8CAA8C,EAC9C,0CAA0C,EAE1C,gCAAgC,EAEhC,kCAAkC,EACnC,MAAM,yBAAyB,CAAC;AAEjC,wBAAgB,gDAAgD,CAC9D,YAAY,EAAE,8CAA8C,EAC5D,QAAQ,EAAE,8CAA8C,GACvD,OAAO,CAIT;AAED,wBAAgB,uCAAuC,CACrD,UAAU,EAAE,0CAA0C,GAAG,IAAI,GAAG,SAAS,EACzE,KAAK,EAAE,gCAAgC,GACtC,UAAU,IAAI,0CAA0C,CAI1D;AAED,wBAAgB,oCAAoC,CAClD,KAAK,EAAE,gCAAgC,GACtC,0CAA0C,CAwH5C;AAED,wBAAgB,iCAAiC,CAC/C,UAAU,EAAE,kCAAkC,GAC7C,MAAM,CAaR;AAED,wBAAgB,wCAAwC,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAMjG"}
|