@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-editor-ui-icons.js","sourceRoot":"","sources":["../src/local-editor-ui-icons.ts"],"names":[],"mappings":"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","sourcesContent":["export const LOCAL_EDITOR_ICON_NAMES = [\n 'asset',\n 'arrange',\n 'camera',\n 'chevron-down',\n 'chevron-right',\n 'copy',\n 'discard',\n 'execute',\n 'eye',\n 'eye-off',\n 'group',\n 'grid',\n 'help',\n 'hierarchy',\n 'history',\n 'inspector',\n 'local',\n 'lock',\n 'material-slot',\n 'move',\n 'object',\n 'performance',\n 'prefab',\n 'place-ground',\n 'place-off',\n 'place-surface',\n 'projection-ortho',\n 'projection-perspective',\n 'plus',\n 'redo',\n 'root',\n 'rotate',\n 'save',\n 'scale',\n 'select',\n 'snap',\n 'status',\n 'theme',\n 'trash',\n 'undo',\n 'view-front',\n 'view-overlay',\n 'view-perspective',\n 'view-right',\n 'view-top',\n 'measure',\n 'world',\n] as const;\n\nexport type LocalEditorIconName = typeof LOCAL_EDITOR_ICON_NAMES[number];\n\nexport interface LocalEditorIconOptions {\n size?: number;\n strokeWidth?: number;\n}\n\ntype LocalEditorIconElement =\n | { tag: 'circle'; attrs: Record<string, string> }\n | { tag: 'line'; attrs: Record<string, string> }\n | { tag: 'path'; attrs: Record<string, string> }\n | { tag: 'polyline'; attrs: Record<string, string> }\n | { tag: 'rect'; attrs: Record<string, string> };\n\nconst LOCAL_EDITOR_ICON_SET = new Set<string>(LOCAL_EDITOR_ICON_NAMES);\n\nconst LOCAL_EDITOR_ICON_DEFINITIONS = {\n asset: [\n { tag: 'rect', attrs: { x: '4', y: '5', width: '16', height: '14', rx: '2' } },\n { tag: 'path', attrs: { d: 'M8 9h8M8 13h5' } },\n { tag: 'path', attrs: { d: 'M7 19l5-4 5 4' } },\n ],\n arrange: [\n { tag: 'path', attrs: { d: 'M5 6h14M8 6v12M16 6v12M5 18h14' } },\n { tag: 'path', attrs: { d: 'M10 10h4M9 14h6' } },\n ],\n camera: [\n { tag: 'path', attrs: { d: 'M4 8.5A2.5 2.5 0 0 1 6.5 6h2l1.5-2h4l1.5 2h2A2.5 2.5 0 0 1 20 8.5v7A2.5 2.5 0 0 1 17.5 18h-11A2.5 2.5 0 0 1 4 15.5z' } },\n { tag: 'circle', attrs: { cx: '12', cy: '12', r: '3' } },\n ],\n 'chevron-down': [\n { tag: 'polyline', attrs: { points: '7 10 12 15 17 10' } },\n ],\n 'chevron-right': [\n { tag: 'polyline', attrs: { points: '10 7 15 12 10 17' } },\n ],\n copy: [\n { tag: 'rect', attrs: { x: '8', y: '8', width: '11', height: '11', rx: '2' } },\n { tag: 'path', attrs: { d: 'M5 15H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v1' } },\n ],\n discard: [\n { tag: 'path', attrs: { d: 'M6 6l12 12M18 6L6 18' } },\n { tag: 'path', attrs: { d: 'M5 12a7 7 0 0 1 7-7 7 7 0 0 1 5.2 2.3M19 12a7 7 0 0 1-7 7 7 7 0 0 1-5.2-2.3' } },\n ],\n execute: [\n { tag: 'path', attrs: { d: 'M8 5l10 7-10 7z' } },\n ],\n eye: [\n { tag: 'path', attrs: { d: 'M2 12s3.5-6 10-6 10 6 10 6-3.5 6-10 6S2 12 2 12z' } },\n { tag: 'circle', attrs: { cx: '12', cy: '12', r: '3' } },\n ],\n 'eye-off': [\n { tag: 'path', attrs: { d: 'M3 3l18 18' } },\n { tag: 'path', attrs: { d: 'M10.6 10.6A3 3 0 0 0 13.4 13.4' } },\n { tag: 'path', attrs: { d: 'M9.9 5.2A10.6 10.6 0 0 1 12 5c6.5 0 10 7 10 7a17.8 17.8 0 0 1-3.2 4.2' } },\n { tag: 'path', attrs: { d: 'M6.1 6.1C3.5 7.8 2 12 2 12s3.5 7 10 7a10.4 10.4 0 0 0 4.1-.8' } },\n ],\n group: [\n { tag: 'rect', attrs: { x: '5', y: '5', width: '7', height: '7', rx: '1.5' } },\n { tag: 'rect', attrs: { x: '12', y: '12', width: '7', height: '7', rx: '1.5' } },\n { tag: 'path', attrs: { d: 'M8.5 12v3.5H12M12 8.5h3.5V12' } },\n ],\n grid: [\n { tag: 'path', attrs: { d: 'M4 8h16M4 12h16M4 16h16' } },\n { tag: 'path', attrs: { d: 'M8 4v16M12 4v16M16 4v16' } },\n ],\n help: [\n { tag: 'circle', attrs: { cx: '12', cy: '12', r: '9' } },\n { tag: 'path', attrs: { d: 'M9.8 9.4a2.4 2.4 0 0 1 4.4 1.3c0 1.7-1.9 2.1-2.2 3.4' } },\n { tag: 'line', attrs: { x1: '12', y1: '17', x2: '12.01', y2: '17' } },\n ],\n hierarchy: [\n { tag: 'path', attrs: { d: 'M12 5v5M6 14v-3h12v3' } },\n { tag: 'rect', attrs: { x: '9', y: '3', width: '6', height: '4', rx: '1' } },\n { tag: 'rect', attrs: { x: '3', y: '14', width: '6', height: '5', rx: '1' } },\n { tag: 'rect', attrs: { x: '15', y: '14', width: '6', height: '5', rx: '1' } },\n ],\n history: [\n { tag: 'path', attrs: { d: 'M5 7v5h5' } },\n { tag: 'path', attrs: { d: 'M5.8 15.4A7 7 0 1 0 5 7' } },\n { tag: 'path', attrs: { d: 'M12 8v4l3 2' } },\n ],\n inspector: [\n { tag: 'rect', attrs: { x: '5', y: '4', width: '14', height: '16', rx: '2' } },\n { tag: 'path', attrs: { d: 'M9 8h6M9 12h6M9 16h3' } },\n ],\n local: [\n { tag: 'circle', attrs: { cx: '12', cy: '12', r: '3' } },\n { tag: 'path', attrs: { d: 'M12 3v3M12 18v3M3 12h3M18 12h3' } },\n ],\n lock: [\n { tag: 'rect', attrs: { x: '6', y: '10', width: '12', height: '9', rx: '2' } },\n { tag: 'path', attrs: { d: 'M9 10V7a3 3 0 0 1 6 0v3' } },\n ],\n 'material-slot': [\n { tag: 'rect', attrs: { x: '5', y: '5', width: '9', height: '9', rx: '1.5' } },\n { tag: 'path', attrs: { d: 'M14 7l5 5-7 7H7v-5z' } },\n { tag: 'path', attrs: { d: 'M8 8h3M8 11h2' } },\n { tag: 'circle', attrs: { cx: '17.5', cy: '17.5', r: '1.4' } },\n ],\n move: [\n { tag: 'path', attrs: { d: 'M12 3v18M3 12h18' } },\n { tag: 'path', attrs: { d: 'M12 3l-3 3M12 3l3 3M12 21l-3-3M12 21l3-3M3 12l3-3M3 12l3 3M21 12l-3-3M21 12l-3 3' } },\n ],\n object: [\n { tag: 'path', attrs: { d: 'M12 3l7 4v9l-7 4-7-4V7z' } },\n { tag: 'path', attrs: { d: 'M5 7l7 4 7-4M12 11v9' } },\n ],\n prefab: [\n { tag: 'path', attrs: { d: 'M12 3l7 4v8l-7 4-7-4V7z' } },\n { tag: 'path', attrs: { d: 'M5 7l7 4 7-4M12 11v8' } },\n { tag: 'rect', attrs: { x: '14.5', y: '13.5', width: '5', height: '5', rx: '1' } },\n { tag: 'path', attrs: { d: 'M16 16h2M17 15v2' } },\n ],\n performance: [\n { tag: 'path', attrs: { d: 'M4 17a8 8 0 1 1 16 0' } },\n { tag: 'path', attrs: { d: 'M12 17l4-7' } },\n { tag: 'path', attrs: { d: 'M8 17h8' } },\n { tag: 'path', attrs: { d: 'M7 13h1M12 9v1M17 13h-1' } },\n ],\n 'place-ground': [\n { tag: 'path', attrs: { d: 'M4 18h16' } },\n { tag: 'path', attrs: { d: 'M12 4v10' } },\n { tag: 'path', attrs: { d: 'M8 10l4 4 4-4' } },\n ],\n 'place-off': [\n { tag: 'path', attrs: { d: 'M4 18h16M12 4v10M8 10l4 4 4-4' } },\n { tag: 'path', attrs: { d: 'M5 5l14 14' } },\n ],\n 'place-surface': [\n { tag: 'path', attrs: { d: 'M4 16l5-5 4 4 7-7' } },\n { tag: 'path', attrs: { d: 'M12 4v10M8 10l4 4 4-4' } },\n ],\n 'projection-ortho': [\n { tag: 'rect', attrs: { x: '5', y: '5', width: '14', height: '14', rx: '1.5' } },\n { tag: 'path', attrs: { d: 'M8 8h8v8H8z' } },\n ],\n 'projection-perspective': [\n { tag: 'path', attrs: { d: 'M4 18l8-12 8 12z' } },\n { tag: 'path', attrs: { d: 'M8 18l4-6 4 6M12 6v6' } },\n ],\n plus: [\n { tag: 'path', attrs: { d: 'M12 5v14M5 12h14' } },\n ],\n redo: [\n { tag: 'path', attrs: { d: 'M19 7v6h-6' } },\n { tag: 'path', attrs: { d: 'M18 13a6 6 0 1 1-1.7-4.2L19 11' } },\n ],\n root: [\n { tag: 'circle', attrs: { cx: '12', cy: '5', r: '2' } },\n { tag: 'path', attrs: { d: 'M12 7v11M7 12h10' } },\n { tag: 'circle', attrs: { cx: '7', cy: '18', r: '2' } },\n { tag: 'circle', attrs: { cx: '17', cy: '18', r: '2' } },\n ],\n rotate: [\n { tag: 'path', attrs: { d: 'M18 8a7 7 0 1 0 1.3 6.1' } },\n { tag: 'path', attrs: { d: 'M18 4v4h-4' } },\n ],\n save: [\n { tag: 'path', attrs: { d: 'M5 4h12l2 2v15H5z' } },\n { tag: 'path', attrs: { d: 'M8 4v6h9M8 21v-6h8v6' } },\n ],\n scale: [\n { tag: 'path', attrs: { d: 'M4 14v6h6M20 10V4h-6' } },\n { tag: 'path', attrs: { d: 'M20 4l-7 7M4 20l7-7' } },\n ],\n select: [\n { tag: 'path', attrs: { d: 'M5 4l10 10-5 1.5L8.5 20z' } },\n ],\n snap: [\n { tag: 'path', attrs: { d: 'M8 4v6a4 4 0 0 0 8 0V4' } },\n { tag: 'path', attrs: { d: 'M8 8h4M16 8h-4M8 4h4M16 4h-4M12 14v6' } },\n ],\n status: [\n { tag: 'circle', attrs: { cx: '12', cy: '12', r: '9' } },\n { tag: 'path', attrs: { d: 'M12 8v5' } },\n { tag: 'line', attrs: { x1: '12', y1: '16', x2: '12.01', y2: '16' } },\n ],\n theme: [\n { tag: 'circle', attrs: { cx: '12', cy: '12', r: '9' } },\n { tag: 'path', attrs: { d: 'M12 3v18' } },\n { tag: 'path', attrs: { d: 'M12 5a7 7 0 0 1 0 14' } },\n ],\n trash: [\n { tag: 'path', attrs: { d: 'M4 7h16' } },\n { tag: 'path', attrs: { d: 'M10 11v6M14 11v6' } },\n { tag: 'path', attrs: { d: 'M6 7l1 14h10l1-14M9 7V4h6v3' } },\n ],\n undo: [\n { tag: 'path', attrs: { d: 'M5 7v6h6' } },\n { tag: 'path', attrs: { d: 'M6 13a6 6 0 1 0 1.7-4.2L5 11' } },\n ],\n 'view-front': [\n { tag: 'rect', attrs: { x: '5', y: '6', width: '14', height: '12', rx: '1.5' } },\n { tag: 'path', attrs: { d: 'M8 9h8M8 15h8M12 6v12' } },\n ],\n 'view-overlay': [\n { tag: 'path', attrs: { d: 'M12 3l7 4v10l-7 4-7-4V7z' } },\n { tag: 'path', attrs: { d: 'M5 7l7 4 7-4M5 17l7-4 7 4' } },\n { tag: 'circle', attrs: { cx: '12', cy: '13', r: '1.5' } },\n ],\n 'view-perspective': [\n { tag: 'path', attrs: { d: 'M4 17l8-10 8 10' } },\n { tag: 'path', attrs: { d: 'M8 17h8M12 7v10' } },\n ],\n 'view-right': [\n { tag: 'path', attrs: { d: 'M6 5l12 4v10L6 15z' } },\n { tag: 'path', attrs: { d: 'M6 5v10M18 9v10M6 15l12 4' } },\n ],\n 'view-top': [\n { tag: 'rect', attrs: { x: '5', y: '5', width: '14', height: '14', rx: '1.5' } },\n { tag: 'path', attrs: { d: 'M9 5v14M15 5v14M5 9h14M5 15h14' } },\n ],\n measure: [\n { tag: 'path', attrs: { d: 'M5 17L17 5' } },\n { tag: 'path', attrs: { d: 'M7 19l-2-2 2-2M15 7l2-2 2 2' } },\n { tag: 'path', attrs: { d: 'M9 15l1.5 1.5M12 12l1.5 1.5M15 9l1.5 1.5' } },\n ],\n world: [\n { tag: 'circle', attrs: { cx: '12', cy: '12', r: '9' } },\n { tag: 'path', attrs: { d: 'M3 12h18M12 3a14 14 0 0 1 0 18M12 3a14 14 0 0 0 0 18' } },\n ],\n} satisfies Record<LocalEditorIconName, readonly LocalEditorIconElement[]>;\n\nexport function isLocalEditorIconName(value: unknown): value is LocalEditorIconName {\n return typeof value === 'string' && LOCAL_EDITOR_ICON_SET.has(value);\n}\n\nexport function resolveLocalEditorIconName(\n value: unknown,\n fallback: LocalEditorIconName = 'object',\n): LocalEditorIconName {\n return isLocalEditorIconName(value) ? value : fallback;\n}\n\nexport function createLocalEditorIcon(\n doc: Document,\n name: LocalEditorIconName,\n options: LocalEditorIconOptions = {},\n): HTMLSpanElement {\n const resolvedName = resolveLocalEditorIconName(name);\n const size = options.size ?? 14;\n const strokeWidth = options.strokeWidth ?? 2;\n const icon = doc.createElement('span');\n icon.dataset.editorIcon = resolvedName;\n icon.setAttribute('aria-hidden', 'true');\n icon.style.cssText = [\n `width:${size}px`,\n `height:${size}px`,\n `flex:0 0 ${size}px`,\n 'display:inline-flex',\n 'align-items:center',\n 'justify-content:center',\n 'color:currentColor',\n 'pointer-events:none',\n ].join(';');\n\n const svg = doc.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttribute('viewBox', '0 0 24 24');\n svg.setAttribute('width', String(size));\n svg.setAttribute('height', String(size));\n svg.setAttribute('fill', 'none');\n svg.setAttribute('stroke', 'currentColor');\n svg.setAttribute('stroke-width', String(strokeWidth));\n svg.setAttribute('stroke-linecap', 'round');\n svg.setAttribute('stroke-linejoin', 'round');\n svg.setAttribute('focusable', 'false');\n\n for (const node of LOCAL_EDITOR_ICON_DEFINITIONS[resolvedName]) {\n const element = doc.createElementNS('http://www.w3.org/2000/svg', node.tag);\n for (const [key, value] of Object.entries(node.attrs)) {\n element.setAttribute(key, value);\n }\n svg.appendChild(element);\n }\n\n icon.appendChild(svg);\n return icon;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"local-editor-ui-icons.js","sourceRoot":"","sources":["../src/local-editor-ui-icons.ts"],"names":[],"mappings":"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","sourcesContent":["export const LOCAL_EDITOR_ICON_NAMES = [\n 'asset',\n 'arrange',\n 'camera',\n 'chevron-down',\n 'chevron-right',\n 'copy',\n 'discard',\n 'execute',\n 'eye',\n 'eye-off',\n 'group',\n 'grid',\n 'help',\n 'hierarchy',\n 'history',\n 'inspector',\n 'local',\n 'lock',\n 'material-slot',\n 'move',\n 'object',\n 'performance',\n 'prefab',\n 'place-ground',\n 'place-off',\n 'place-surface',\n 'projection-ortho',\n 'projection-perspective',\n 'plus',\n 'redo',\n 'root',\n 'rotate',\n 'save',\n 'scale',\n 'select',\n 'snap',\n 'status',\n 'theme',\n 'trash',\n 'undo',\n 'view-front',\n 'view-overlay',\n 'view-perspective',\n 'view-right',\n 'view-top',\n 'warning',\n 'measure',\n 'world',\n] as const;\n\nexport type LocalEditorIconName = typeof LOCAL_EDITOR_ICON_NAMES[number];\n\nexport interface LocalEditorIconOptions {\n size?: number;\n strokeWidth?: number;\n}\n\ntype LocalEditorIconElement =\n | { tag: 'circle'; attrs: Record<string, string> }\n | { tag: 'line'; attrs: Record<string, string> }\n | { tag: 'path'; attrs: Record<string, string> }\n | { tag: 'polyline'; attrs: Record<string, string> }\n | { tag: 'rect'; attrs: Record<string, string> };\n\nconst LOCAL_EDITOR_ICON_SET = new Set<string>(LOCAL_EDITOR_ICON_NAMES);\n\nconst LOCAL_EDITOR_ICON_DEFINITIONS = {\n asset: [\n { tag: 'rect', attrs: { x: '4', y: '5', width: '16', height: '14', rx: '2' } },\n { tag: 'path', attrs: { d: 'M8 9h8M8 13h5' } },\n { tag: 'path', attrs: { d: 'M7 19l5-4 5 4' } },\n ],\n arrange: [\n { tag: 'path', attrs: { d: 'M5 6h14M8 6v12M16 6v12M5 18h14' } },\n { tag: 'path', attrs: { d: 'M10 10h4M9 14h6' } },\n ],\n camera: [\n { tag: 'path', attrs: { d: 'M4 8.5A2.5 2.5 0 0 1 6.5 6h2l1.5-2h4l1.5 2h2A2.5 2.5 0 0 1 20 8.5v7A2.5 2.5 0 0 1 17.5 18h-11A2.5 2.5 0 0 1 4 15.5z' } },\n { tag: 'circle', attrs: { cx: '12', cy: '12', r: '3' } },\n ],\n 'chevron-down': [\n { tag: 'polyline', attrs: { points: '7 10 12 15 17 10' } },\n ],\n 'chevron-right': [\n { tag: 'polyline', attrs: { points: '10 7 15 12 10 17' } },\n ],\n copy: [\n { tag: 'rect', attrs: { x: '8', y: '8', width: '11', height: '11', rx: '2' } },\n { tag: 'path', attrs: { d: 'M5 15H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v1' } },\n ],\n discard: [\n { tag: 'path', attrs: { d: 'M6 6l12 12M18 6L6 18' } },\n { tag: 'path', attrs: { d: 'M5 12a7 7 0 0 1 7-7 7 7 0 0 1 5.2 2.3M19 12a7 7 0 0 1-7 7 7 7 0 0 1-5.2-2.3' } },\n ],\n execute: [\n { tag: 'path', attrs: { d: 'M8 5l10 7-10 7z' } },\n ],\n eye: [\n { tag: 'path', attrs: { d: 'M2 12s3.5-6 10-6 10 6 10 6-3.5 6-10 6S2 12 2 12z' } },\n { tag: 'circle', attrs: { cx: '12', cy: '12', r: '3' } },\n ],\n 'eye-off': [\n { tag: 'path', attrs: { d: 'M3 3l18 18' } },\n { tag: 'path', attrs: { d: 'M10.6 10.6A3 3 0 0 0 13.4 13.4' } },\n { tag: 'path', attrs: { d: 'M9.9 5.2A10.6 10.6 0 0 1 12 5c6.5 0 10 7 10 7a17.8 17.8 0 0 1-3.2 4.2' } },\n { tag: 'path', attrs: { d: 'M6.1 6.1C3.5 7.8 2 12 2 12s3.5 7 10 7a10.4 10.4 0 0 0 4.1-.8' } },\n ],\n group: [\n { tag: 'rect', attrs: { x: '5', y: '5', width: '7', height: '7', rx: '1.5' } },\n { tag: 'rect', attrs: { x: '12', y: '12', width: '7', height: '7', rx: '1.5' } },\n { tag: 'path', attrs: { d: 'M8.5 12v3.5H12M12 8.5h3.5V12' } },\n ],\n grid: [\n { tag: 'path', attrs: { d: 'M4 8h16M4 12h16M4 16h16' } },\n { tag: 'path', attrs: { d: 'M8 4v16M12 4v16M16 4v16' } },\n ],\n help: [\n { tag: 'circle', attrs: { cx: '12', cy: '12', r: '9' } },\n { tag: 'path', attrs: { d: 'M9.8 9.4a2.4 2.4 0 0 1 4.4 1.3c0 1.7-1.9 2.1-2.2 3.4' } },\n { tag: 'line', attrs: { x1: '12', y1: '17', x2: '12.01', y2: '17' } },\n ],\n hierarchy: [\n { tag: 'path', attrs: { d: 'M12 5v5M6 14v-3h12v3' } },\n { tag: 'rect', attrs: { x: '9', y: '3', width: '6', height: '4', rx: '1' } },\n { tag: 'rect', attrs: { x: '3', y: '14', width: '6', height: '5', rx: '1' } },\n { tag: 'rect', attrs: { x: '15', y: '14', width: '6', height: '5', rx: '1' } },\n ],\n history: [\n { tag: 'path', attrs: { d: 'M5 7v5h5' } },\n { tag: 'path', attrs: { d: 'M5.8 15.4A7 7 0 1 0 5 7' } },\n { tag: 'path', attrs: { d: 'M12 8v4l3 2' } },\n ],\n inspector: [\n { tag: 'rect', attrs: { x: '5', y: '4', width: '14', height: '16', rx: '2' } },\n { tag: 'path', attrs: { d: 'M9 8h6M9 12h6M9 16h3' } },\n ],\n local: [\n { tag: 'circle', attrs: { cx: '12', cy: '12', r: '3' } },\n { tag: 'path', attrs: { d: 'M12 3v3M12 18v3M3 12h3M18 12h3' } },\n ],\n lock: [\n { tag: 'rect', attrs: { x: '6', y: '10', width: '12', height: '9', rx: '2' } },\n { tag: 'path', attrs: { d: 'M9 10V7a3 3 0 0 1 6 0v3' } },\n ],\n 'material-slot': [\n { tag: 'rect', attrs: { x: '5', y: '5', width: '9', height: '9', rx: '1.5' } },\n { tag: 'path', attrs: { d: 'M14 7l5 5-7 7H7v-5z' } },\n { tag: 'path', attrs: { d: 'M8 8h3M8 11h2' } },\n { tag: 'circle', attrs: { cx: '17.5', cy: '17.5', r: '1.4' } },\n ],\n move: [\n { tag: 'path', attrs: { d: 'M12 3v18M3 12h18' } },\n { tag: 'path', attrs: { d: 'M12 3l-3 3M12 3l3 3M12 21l-3-3M12 21l3-3M3 12l3-3M3 12l3 3M21 12l-3-3M21 12l-3 3' } },\n ],\n object: [\n { tag: 'path', attrs: { d: 'M12 3l7 4v9l-7 4-7-4V7z' } },\n { tag: 'path', attrs: { d: 'M5 7l7 4 7-4M12 11v9' } },\n ],\n prefab: [\n { tag: 'path', attrs: { d: 'M12 3l7 4v8l-7 4-7-4V7z' } },\n { tag: 'path', attrs: { d: 'M5 7l7 4 7-4M12 11v8' } },\n { tag: 'rect', attrs: { x: '14.5', y: '13.5', width: '5', height: '5', rx: '1' } },\n { tag: 'path', attrs: { d: 'M16 16h2M17 15v2' } },\n ],\n performance: [\n { tag: 'path', attrs: { d: 'M4 17a8 8 0 1 1 16 0' } },\n { tag: 'path', attrs: { d: 'M12 17l4-7' } },\n { tag: 'path', attrs: { d: 'M8 17h8' } },\n { tag: 'path', attrs: { d: 'M7 13h1M12 9v1M17 13h-1' } },\n ],\n 'place-ground': [\n { tag: 'path', attrs: { d: 'M4 18h16' } },\n { tag: 'path', attrs: { d: 'M12 4v10' } },\n { tag: 'path', attrs: { d: 'M8 10l4 4 4-4' } },\n ],\n 'place-off': [\n { tag: 'path', attrs: { d: 'M4 18h16M12 4v10M8 10l4 4 4-4' } },\n { tag: 'path', attrs: { d: 'M5 5l14 14' } },\n ],\n 'place-surface': [\n { tag: 'path', attrs: { d: 'M4 16l5-5 4 4 7-7' } },\n { tag: 'path', attrs: { d: 'M12 4v10M8 10l4 4 4-4' } },\n ],\n 'projection-ortho': [\n { tag: 'rect', attrs: { x: '5', y: '5', width: '14', height: '14', rx: '1.5' } },\n { tag: 'path', attrs: { d: 'M8 8h8v8H8z' } },\n ],\n 'projection-perspective': [\n { tag: 'path', attrs: { d: 'M4 18l8-12 8 12z' } },\n { tag: 'path', attrs: { d: 'M8 18l4-6 4 6M12 6v6' } },\n ],\n plus: [\n { tag: 'path', attrs: { d: 'M12 5v14M5 12h14' } },\n ],\n redo: [\n { tag: 'path', attrs: { d: 'M19 7v6h-6' } },\n { tag: 'path', attrs: { d: 'M18 13a6 6 0 1 1-1.7-4.2L19 11' } },\n ],\n root: [\n { tag: 'circle', attrs: { cx: '12', cy: '5', r: '2' } },\n { tag: 'path', attrs: { d: 'M12 7v11M7 12h10' } },\n { tag: 'circle', attrs: { cx: '7', cy: '18', r: '2' } },\n { tag: 'circle', attrs: { cx: '17', cy: '18', r: '2' } },\n ],\n rotate: [\n { tag: 'path', attrs: { d: 'M18 8a7 7 0 1 0 1.3 6.1' } },\n { tag: 'path', attrs: { d: 'M18 4v4h-4' } },\n ],\n save: [\n { tag: 'path', attrs: { d: 'M5 4h12l2 2v15H5z' } },\n { tag: 'path', attrs: { d: 'M8 4v6h9M8 21v-6h8v6' } },\n ],\n scale: [\n { tag: 'path', attrs: { d: 'M4 14v6h6M20 10V4h-6' } },\n { tag: 'path', attrs: { d: 'M20 4l-7 7M4 20l7-7' } },\n ],\n select: [\n { tag: 'path', attrs: { d: 'M5 4l10 10-5 1.5L8.5 20z' } },\n ],\n snap: [\n { tag: 'path', attrs: { d: 'M8 4v6a4 4 0 0 0 8 0V4' } },\n { tag: 'path', attrs: { d: 'M8 8h4M16 8h-4M8 4h4M16 4h-4M12 14v6' } },\n ],\n status: [\n { tag: 'circle', attrs: { cx: '12', cy: '12', r: '9' } },\n { tag: 'path', attrs: { d: 'M12 8v5' } },\n { tag: 'line', attrs: { x1: '12', y1: '16', x2: '12.01', y2: '16' } },\n ],\n warning: [\n { tag: 'path', attrs: { d: 'M12 3L2.8 20h18.4z' } },\n { tag: 'path', attrs: { d: 'M12 9v5' } },\n { tag: 'line', attrs: { x1: '12', y1: '17', x2: '12.01', y2: '17' } },\n ],\n theme: [\n { tag: 'circle', attrs: { cx: '12', cy: '12', r: '9' } },\n { tag: 'path', attrs: { d: 'M12 3v18' } },\n { tag: 'path', attrs: { d: 'M12 5a7 7 0 0 1 0 14' } },\n ],\n trash: [\n { tag: 'path', attrs: { d: 'M4 7h16' } },\n { tag: 'path', attrs: { d: 'M10 11v6M14 11v6' } },\n { tag: 'path', attrs: { d: 'M6 7l1 14h10l1-14M9 7V4h6v3' } },\n ],\n undo: [\n { tag: 'path', attrs: { d: 'M5 7v6h6' } },\n { tag: 'path', attrs: { d: 'M6 13a6 6 0 1 0 1.7-4.2L5 11' } },\n ],\n 'view-front': [\n { tag: 'rect', attrs: { x: '5', y: '6', width: '14', height: '12', rx: '1.5' } },\n { tag: 'path', attrs: { d: 'M8 9h8M8 15h8M12 6v12' } },\n ],\n 'view-overlay': [\n { tag: 'path', attrs: { d: 'M12 3l7 4v10l-7 4-7-4V7z' } },\n { tag: 'path', attrs: { d: 'M5 7l7 4 7-4M5 17l7-4 7 4' } },\n { tag: 'circle', attrs: { cx: '12', cy: '13', r: '1.5' } },\n ],\n 'view-perspective': [\n { tag: 'path', attrs: { d: 'M4 17l8-10 8 10' } },\n { tag: 'path', attrs: { d: 'M8 17h8M12 7v10' } },\n ],\n 'view-right': [\n { tag: 'path', attrs: { d: 'M6 5l12 4v10L6 15z' } },\n { tag: 'path', attrs: { d: 'M6 5v10M18 9v10M6 15l12 4' } },\n ],\n 'view-top': [\n { tag: 'rect', attrs: { x: '5', y: '5', width: '14', height: '14', rx: '1.5' } },\n { tag: 'path', attrs: { d: 'M9 5v14M15 5v14M5 9h14M5 15h14' } },\n ],\n measure: [\n { tag: 'path', attrs: { d: 'M5 17L17 5' } },\n { tag: 'path', attrs: { d: 'M7 19l-2-2 2-2M15 7l2-2 2 2' } },\n { tag: 'path', attrs: { d: 'M9 15l1.5 1.5M12 12l1.5 1.5M15 9l1.5 1.5' } },\n ],\n world: [\n { tag: 'circle', attrs: { cx: '12', cy: '12', r: '9' } },\n { tag: 'path', attrs: { d: 'M3 12h18M12 3a14 14 0 0 1 0 18M12 3a14 14 0 0 0 0 18' } },\n ],\n} satisfies Record<LocalEditorIconName, readonly LocalEditorIconElement[]>;\n\nexport function isLocalEditorIconName(value: unknown): value is LocalEditorIconName {\n return typeof value === 'string' && LOCAL_EDITOR_ICON_SET.has(value);\n}\n\nexport function resolveLocalEditorIconName(\n value: unknown,\n fallback: LocalEditorIconName = 'object',\n): LocalEditorIconName {\n return isLocalEditorIconName(value) ? value : fallback;\n}\n\nexport function createLocalEditorIcon(\n doc: Document,\n name: LocalEditorIconName,\n options: LocalEditorIconOptions = {},\n): HTMLSpanElement {\n const resolvedName = resolveLocalEditorIconName(name);\n const size = options.size ?? 14;\n const strokeWidth = options.strokeWidth ?? 2;\n const icon = doc.createElement('span');\n icon.dataset.editorIcon = resolvedName;\n icon.setAttribute('aria-hidden', 'true');\n icon.style.cssText = [\n `width:${size}px`,\n `height:${size}px`,\n `flex:0 0 ${size}px`,\n 'display:inline-flex',\n 'align-items:center',\n 'justify-content:center',\n 'color:currentColor',\n 'pointer-events:none',\n ].join(';');\n\n const svg = doc.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttribute('viewBox', '0 0 24 24');\n svg.setAttribute('width', String(size));\n svg.setAttribute('height', String(size));\n svg.setAttribute('fill', 'none');\n svg.setAttribute('stroke', 'currentColor');\n svg.setAttribute('stroke-width', String(strokeWidth));\n svg.setAttribute('stroke-linecap', 'round');\n svg.setAttribute('stroke-linejoin', 'round');\n svg.setAttribute('focusable', 'false');\n\n for (const node of LOCAL_EDITOR_ICON_DEFINITIONS[resolvedName]) {\n const element = doc.createElementNS('http://www.w3.org/2000/svg', node.tag);\n for (const [key, value] of Object.entries(node.attrs)) {\n element.setAttribute(key, value);\n }\n svg.appendChild(element);\n }\n\n icon.appendChild(svg);\n return icon;\n}\n"]}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
export type LocalEditorWorkbenchInputRegion = 'top-bar' | 'left-dock' | 'right-dock' | 'bottom-dock' | 'scene-header' | 'modal' | 'scene-view' | 'unknown';
|
|
2
2
|
export interface LocalEditorWorkbenchInputRouter {
|
|
3
3
|
getRegion(target: EventTarget | null): LocalEditorWorkbenchInputRegion;
|
|
4
|
+
getEventTarget(event: Event): Element | null;
|
|
4
5
|
isEditableTarget(target: EventTarget | null): boolean;
|
|
6
|
+
isEditableEvent(event: Event): boolean;
|
|
5
7
|
isEditorOwnedRegion(target: EventTarget | null): boolean;
|
|
6
8
|
isUiRegion(target: EventTarget | null): boolean;
|
|
9
|
+
claimContextMenu(event: MouseEvent): Element | null;
|
|
7
10
|
setContextMenuOpen(open: boolean): void;
|
|
8
11
|
setModalOpen(open: boolean, owner?: string): void;
|
|
9
12
|
shouldPreventBrowserContextMenu(event: MouseEvent): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-editor-ui-input-router.d.ts","sourceRoot":"","sources":["../src/local-editor-ui-input-router.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,+BAA+B,GACvC,SAAS,GACT,WAAW,GACX,YAAY,GACZ,aAAa,GACb,cAAc,GACd,OAAO,GACP,YAAY,GACZ,SAAS,CAAC;AAEd,MAAM,WAAW,+BAA+B;IAC9C,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,GAAG,+BAA+B,CAAC;IACvE,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,GAAG,OAAO,CAAC;IACtD,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,GAAG,OAAO,CAAC;IACzD,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,GAAG,OAAO,CAAC;IAChD,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IACxC,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClD,+BAA+B,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC;IAC5D,4BAA4B,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC;IAC5D,0BAA0B,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC;IAC1D,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,sCAAsC;IACrD,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC;CACxD;AAED,wBAAgB,qCAAqC,CACnD,GAAG,EAAE,QAAQ,EACb,OAAO,GAAE,sCAA2C,GACnD,+BAA+B,
|
|
1
|
+
{"version":3,"file":"local-editor-ui-input-router.d.ts","sourceRoot":"","sources":["../src/local-editor-ui-input-router.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,+BAA+B,GACvC,SAAS,GACT,WAAW,GACX,YAAY,GACZ,aAAa,GACb,cAAc,GACd,OAAO,GACP,YAAY,GACZ,SAAS,CAAC;AAEd,MAAM,WAAW,+BAA+B;IAC9C,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,GAAG,+BAA+B,CAAC;IACvE,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC;IAC7C,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,GAAG,OAAO,CAAC;IACtD,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC;IACvC,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,GAAG,OAAO,CAAC;IACzD,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,GAAG,OAAO,CAAC;IAChD,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,GAAG,IAAI,CAAC;IACpD,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IACxC,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClD,+BAA+B,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC;IAC5D,4BAA4B,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC;IAC5D,0BAA0B,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC;IAC1D,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,sCAAsC;IACrD,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC;CACxD;AAED,wBAAgB,qCAAqC,CACnD,GAAG,EAAE,QAAQ,EACb,OAAO,GAAE,sCAA2C,GACnD,+BAA+B,CA0DjC"}
|
|
@@ -2,7 +2,7 @@ export function createLocalEditorWorkbenchInputRouter(doc, options = {}) {
|
|
|
2
2
|
const modalOwners = new Set();
|
|
3
3
|
let contextMenuOpen = false;
|
|
4
4
|
const stopPanelWheel = (event) => {
|
|
5
|
-
if (!
|
|
5
|
+
if (!isUiEvent(event))
|
|
6
6
|
return;
|
|
7
7
|
event.stopPropagation();
|
|
8
8
|
};
|
|
@@ -11,7 +11,7 @@ export function createLocalEditorWorkbenchInputRouter(doc, options = {}) {
|
|
|
11
11
|
event.preventDefault();
|
|
12
12
|
};
|
|
13
13
|
const stopPanelPointer = (event) => {
|
|
14
|
-
if (!
|
|
14
|
+
if (!isUiEvent(event))
|
|
15
15
|
return;
|
|
16
16
|
event.stopPropagation();
|
|
17
17
|
};
|
|
@@ -20,9 +20,18 @@ export function createLocalEditorWorkbenchInputRouter(doc, options = {}) {
|
|
|
20
20
|
doc.addEventListener('pointerdown', stopPanelPointer, { capture: true });
|
|
21
21
|
return {
|
|
22
22
|
getRegion,
|
|
23
|
+
getEventTarget,
|
|
23
24
|
isEditableTarget,
|
|
25
|
+
isEditableEvent,
|
|
24
26
|
isEditorOwnedRegion,
|
|
25
27
|
isUiRegion,
|
|
28
|
+
claimContextMenu(event) {
|
|
29
|
+
if (!shouldPreventBrowserContextMenu(event))
|
|
30
|
+
return null;
|
|
31
|
+
event.preventDefault();
|
|
32
|
+
event.stopPropagation();
|
|
33
|
+
return getEventTarget(event);
|
|
34
|
+
},
|
|
26
35
|
setContextMenuOpen(open) {
|
|
27
36
|
contextMenuOpen = open;
|
|
28
37
|
},
|
|
@@ -36,16 +45,16 @@ export function createLocalEditorWorkbenchInputRouter(doc, options = {}) {
|
|
|
36
45
|
shouldHandleDocumentShortcut(event) {
|
|
37
46
|
if (options.isShortcutReserved?.(event))
|
|
38
47
|
return false;
|
|
39
|
-
return modalOwners.size === 0 && !contextMenuOpen &&
|
|
48
|
+
return modalOwners.size === 0 && !contextMenuOpen && getEventRegion(event) !== 'modal';
|
|
40
49
|
},
|
|
41
50
|
shouldHandleGlobalShortcut(event) {
|
|
42
51
|
if (options.isShortcutReserved?.(event))
|
|
43
52
|
return false;
|
|
44
53
|
return modalOwners.size === 0
|
|
45
54
|
&& !contextMenuOpen
|
|
46
|
-
&& !
|
|
55
|
+
&& !isEditableEvent(event)
|
|
47
56
|
&& !isEditableTarget(doc.activeElement)
|
|
48
|
-
&&
|
|
57
|
+
&& getEventRegion(event) !== 'modal';
|
|
49
58
|
},
|
|
50
59
|
dispose() {
|
|
51
60
|
doc.removeEventListener('wheel', stopPanelWheel, { capture: true });
|
|
@@ -55,7 +64,7 @@ export function createLocalEditorWorkbenchInputRouter(doc, options = {}) {
|
|
|
55
64
|
};
|
|
56
65
|
}
|
|
57
66
|
function getRegion(target) {
|
|
58
|
-
const element =
|
|
67
|
+
const element = toElement(target);
|
|
59
68
|
if (!element)
|
|
60
69
|
return 'unknown';
|
|
61
70
|
if (element.closest('[data-editor-shortcut-help]'))
|
|
@@ -99,21 +108,59 @@ function isUiRegion(target) {
|
|
|
99
108
|
|| region === 'modal';
|
|
100
109
|
}
|
|
101
110
|
function shouldPreventBrowserContextMenu(event) {
|
|
102
|
-
return
|
|
111
|
+
return isEditorOwnedEvent(event) && !isEditableEvent(event);
|
|
103
112
|
}
|
|
104
113
|
function isEditableTarget(target) {
|
|
105
|
-
const element =
|
|
114
|
+
const element = toElement(target);
|
|
106
115
|
if (!element)
|
|
107
116
|
return false;
|
|
108
|
-
const
|
|
117
|
+
const editable = element.closest('input, textarea, select, [contenteditable]');
|
|
118
|
+
if (!editable)
|
|
119
|
+
return false;
|
|
120
|
+
const tagName = editable.tagName.toLowerCase();
|
|
109
121
|
return tagName === 'input'
|
|
110
122
|
|| tagName === 'textarea'
|
|
111
123
|
|| tagName === 'select'
|
|
112
|
-
||
|
|
124
|
+
|| editable.getAttribute('contenteditable') !== 'false';
|
|
125
|
+
}
|
|
126
|
+
function getEventTarget(event) {
|
|
127
|
+
for (const target of getEventPath(event)) {
|
|
128
|
+
const element = toElement(target);
|
|
129
|
+
if (element)
|
|
130
|
+
return element;
|
|
131
|
+
}
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
function isEditableEvent(event) {
|
|
135
|
+
return getEventPath(event).some(isEditableTarget);
|
|
136
|
+
}
|
|
137
|
+
function getEventRegion(event) {
|
|
138
|
+
for (const target of getEventPath(event)) {
|
|
139
|
+
const region = getRegion(target);
|
|
140
|
+
if (region !== 'unknown')
|
|
141
|
+
return region;
|
|
142
|
+
}
|
|
143
|
+
return 'unknown';
|
|
144
|
+
}
|
|
145
|
+
function isEditorOwnedEvent(event) {
|
|
146
|
+
const region = getEventRegion(event);
|
|
147
|
+
return region !== 'unknown' && region !== 'modal';
|
|
148
|
+
}
|
|
149
|
+
function isUiEvent(event) {
|
|
150
|
+
return getEventPath(event).some(isUiRegion);
|
|
151
|
+
}
|
|
152
|
+
function getEventPath(event) {
|
|
153
|
+
const path = typeof event.composedPath === 'function' ? event.composedPath() : [];
|
|
154
|
+
if (path.length > 0)
|
|
155
|
+
return path;
|
|
156
|
+
return event.target ? [event.target] : [];
|
|
113
157
|
}
|
|
114
|
-
function
|
|
115
|
-
if (typeof
|
|
158
|
+
function toElement(target) {
|
|
159
|
+
if (!target || typeof target !== 'object')
|
|
116
160
|
return null;
|
|
117
|
-
|
|
161
|
+
const candidate = target;
|
|
162
|
+
return candidate.nodeType === 1 && typeof candidate.closest === 'function'
|
|
163
|
+
? target
|
|
164
|
+
: null;
|
|
118
165
|
}
|
|
119
166
|
//# sourceMappingURL=local-editor-ui-input-router.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-editor-ui-input-router.js","sourceRoot":"","sources":["../src/local-editor-ui-input-router.ts"],"names":[],"mappings":"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","sourcesContent":["export type LocalEditorWorkbenchInputRegion =\n | 'top-bar'\n | 'left-dock'\n | 'right-dock'\n | 'bottom-dock'\n | 'scene-header'\n | 'modal'\n | 'scene-view'\n | 'unknown';\n\nexport interface LocalEditorWorkbenchInputRouter {\n getRegion(target: EventTarget | null): LocalEditorWorkbenchInputRegion;\n isEditableTarget(target: EventTarget | null): boolean;\n isEditorOwnedRegion(target: EventTarget | null): boolean;\n isUiRegion(target: EventTarget | null): boolean;\n setContextMenuOpen(open: boolean): void;\n setModalOpen(open: boolean, owner?: string): void;\n shouldPreventBrowserContextMenu(event: MouseEvent): boolean;\n shouldHandleDocumentShortcut(event: KeyboardEvent): boolean;\n shouldHandleGlobalShortcut(event: KeyboardEvent): boolean;\n dispose(): void;\n}\n\nexport interface LocalEditorWorkbenchInputRouterOptions {\n isShortcutReserved?: (event: KeyboardEvent) => boolean;\n}\n\nexport function createLocalEditorWorkbenchInputRouter(\n doc: Document,\n options: LocalEditorWorkbenchInputRouterOptions = {},\n): LocalEditorWorkbenchInputRouter {\n const modalOwners = new Set<string>();\n let contextMenuOpen = false;\n const stopPanelWheel = (event: WheelEvent): void => {\n if (!isUiRegion(event.target)) return;\n event.stopPropagation();\n };\n const stopPanelContextMenu = (event: MouseEvent): void => {\n if (shouldPreventBrowserContextMenu(event)) event.preventDefault();\n };\n const stopPanelPointer = (event: PointerEvent): void => {\n if (!isUiRegion(event.target)) return;\n event.stopPropagation();\n };\n\n doc.addEventListener('wheel', stopPanelWheel, { capture: true, passive: true });\n doc.addEventListener('contextmenu', stopPanelContextMenu, { capture: true });\n doc.addEventListener('pointerdown', stopPanelPointer, { capture: true });\n\n return {\n getRegion,\n isEditableTarget,\n isEditorOwnedRegion,\n isUiRegion,\n setContextMenuOpen(open) {\n contextMenuOpen = open;\n },\n setModalOpen(open, owner = 'default') {\n if (open) modalOwners.add(owner);\n else modalOwners.delete(owner);\n },\n shouldPreventBrowserContextMenu,\n shouldHandleDocumentShortcut(event) {\n if (options.isShortcutReserved?.(event)) return false;\n return modalOwners.size === 0 && !contextMenuOpen && getRegion(event.target) !== 'modal';\n },\n shouldHandleGlobalShortcut(event) {\n if (options.isShortcutReserved?.(event)) return false;\n return modalOwners.size === 0\n && !contextMenuOpen\n && !isEditableTarget(event.target)\n && !isEditableTarget(doc.activeElement)\n && getRegion(event.target) !== 'modal';\n },\n dispose() {\n doc.removeEventListener('wheel', stopPanelWheel, { capture: true });\n doc.removeEventListener('contextmenu', stopPanelContextMenu, { capture: true });\n doc.removeEventListener('pointerdown', stopPanelPointer, { capture: true });\n },\n };\n}\n\nfunction getRegion(target: EventTarget | null): LocalEditorWorkbenchInputRegion {\n const element = toHTMLElement(target);\n if (!element) return 'unknown';\n if (element.closest('[data-editor-shortcut-help]')) return 'modal';\n if (element.closest('[data-editor-context-menu]')) return 'modal';\n if (element.closest('[data-editor-hierarchy-attach-dialog]')) return 'modal';\n const region = element.closest<HTMLElement>('[data-editor-workbench-region]')?.dataset.editorWorkbenchRegion;\n if (region === 'scene-toolbar') return 'scene-header';\n if (region === 'top-bar'\n || region === 'left-dock'\n || region === 'right-dock'\n || region === 'bottom-dock'\n || region === 'scene-header'\n || region === 'modal') {\n return region;\n }\n if (element.closest('[data-editor-workbench]')) return 'scene-view';\n return 'unknown';\n}\n\nfunction isEditorOwnedRegion(target: EventTarget | null): boolean {\n const region = getRegion(target);\n return region === 'top-bar'\n || region === 'left-dock'\n || region === 'right-dock'\n || region === 'bottom-dock'\n || region === 'scene-header'\n || region === 'modal'\n || region === 'scene-view';\n}\n\nfunction isUiRegion(target: EventTarget | null): boolean {\n const region = getRegion(target);\n return region === 'top-bar'\n || region === 'left-dock'\n || region === 'right-dock'\n || region === 'bottom-dock'\n || region === 'scene-header'\n || region === 'modal';\n}\n\nfunction shouldPreventBrowserContextMenu(event: MouseEvent): boolean {\n return isEditorOwnedRegion(event.target) && !isEditableTarget(event.target);\n}\n\nfunction isEditableTarget(target: EventTarget | null): boolean {\n const element = toHTMLElement(target);\n if (!element) return false;\n const tagName = element.tagName.toLowerCase();\n return tagName === 'input'\n || tagName === 'textarea'\n || tagName === 'select'\n || element.isContentEditable;\n}\n\nfunction toHTMLElement(target: EventTarget | null): HTMLElement | null {\n if (typeof HTMLElement === 'undefined') return null;\n return target instanceof HTMLElement ? target : null;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"local-editor-ui-input-router.js","sourceRoot":"","sources":["../src/local-editor-ui-input-router.ts"],"names":[],"mappings":"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","sourcesContent":["export type LocalEditorWorkbenchInputRegion =\n | 'top-bar'\n | 'left-dock'\n | 'right-dock'\n | 'bottom-dock'\n | 'scene-header'\n | 'modal'\n | 'scene-view'\n | 'unknown';\n\nexport interface LocalEditorWorkbenchInputRouter {\n getRegion(target: EventTarget | null): LocalEditorWorkbenchInputRegion;\n getEventTarget(event: Event): Element | null;\n isEditableTarget(target: EventTarget | null): boolean;\n isEditableEvent(event: Event): boolean;\n isEditorOwnedRegion(target: EventTarget | null): boolean;\n isUiRegion(target: EventTarget | null): boolean;\n claimContextMenu(event: MouseEvent): Element | null;\n setContextMenuOpen(open: boolean): void;\n setModalOpen(open: boolean, owner?: string): void;\n shouldPreventBrowserContextMenu(event: MouseEvent): boolean;\n shouldHandleDocumentShortcut(event: KeyboardEvent): boolean;\n shouldHandleGlobalShortcut(event: KeyboardEvent): boolean;\n dispose(): void;\n}\n\nexport interface LocalEditorWorkbenchInputRouterOptions {\n isShortcutReserved?: (event: KeyboardEvent) => boolean;\n}\n\nexport function createLocalEditorWorkbenchInputRouter(\n doc: Document,\n options: LocalEditorWorkbenchInputRouterOptions = {},\n): LocalEditorWorkbenchInputRouter {\n const modalOwners = new Set<string>();\n let contextMenuOpen = false;\n const stopPanelWheel = (event: WheelEvent): void => {\n if (!isUiEvent(event)) return;\n event.stopPropagation();\n };\n const stopPanelContextMenu = (event: MouseEvent): void => {\n if (shouldPreventBrowserContextMenu(event)) event.preventDefault();\n };\n const stopPanelPointer = (event: PointerEvent): void => {\n if (!isUiEvent(event)) return;\n event.stopPropagation();\n };\n\n doc.addEventListener('wheel', stopPanelWheel, { capture: true, passive: true });\n doc.addEventListener('contextmenu', stopPanelContextMenu, { capture: true });\n doc.addEventListener('pointerdown', stopPanelPointer, { capture: true });\n\n return {\n getRegion,\n getEventTarget,\n isEditableTarget,\n isEditableEvent,\n isEditorOwnedRegion,\n isUiRegion,\n claimContextMenu(event) {\n if (!shouldPreventBrowserContextMenu(event)) return null;\n event.preventDefault();\n event.stopPropagation();\n return getEventTarget(event);\n },\n setContextMenuOpen(open) {\n contextMenuOpen = open;\n },\n setModalOpen(open, owner = 'default') {\n if (open) modalOwners.add(owner);\n else modalOwners.delete(owner);\n },\n shouldPreventBrowserContextMenu,\n shouldHandleDocumentShortcut(event) {\n if (options.isShortcutReserved?.(event)) return false;\n return modalOwners.size === 0 && !contextMenuOpen && getEventRegion(event) !== 'modal';\n },\n shouldHandleGlobalShortcut(event) {\n if (options.isShortcutReserved?.(event)) return false;\n return modalOwners.size === 0\n && !contextMenuOpen\n && !isEditableEvent(event)\n && !isEditableTarget(doc.activeElement)\n && getEventRegion(event) !== 'modal';\n },\n dispose() {\n doc.removeEventListener('wheel', stopPanelWheel, { capture: true });\n doc.removeEventListener('contextmenu', stopPanelContextMenu, { capture: true });\n doc.removeEventListener('pointerdown', stopPanelPointer, { capture: true });\n },\n };\n}\n\nfunction getRegion(target: EventTarget | null): LocalEditorWorkbenchInputRegion {\n const element = toElement(target);\n if (!element) return 'unknown';\n if (element.closest('[data-editor-shortcut-help]')) return 'modal';\n if (element.closest('[data-editor-context-menu]')) return 'modal';\n if (element.closest('[data-editor-hierarchy-attach-dialog]')) return 'modal';\n const region = element.closest<HTMLElement>('[data-editor-workbench-region]')?.dataset.editorWorkbenchRegion;\n if (region === 'scene-toolbar') return 'scene-header';\n if (region === 'top-bar'\n || region === 'left-dock'\n || region === 'right-dock'\n || region === 'bottom-dock'\n || region === 'scene-header'\n || region === 'modal') {\n return region;\n }\n if (element.closest('[data-editor-workbench]')) return 'scene-view';\n return 'unknown';\n}\n\nfunction isEditorOwnedRegion(target: EventTarget | null): boolean {\n const region = getRegion(target);\n return region === 'top-bar'\n || region === 'left-dock'\n || region === 'right-dock'\n || region === 'bottom-dock'\n || region === 'scene-header'\n || region === 'modal'\n || region === 'scene-view';\n}\n\nfunction isUiRegion(target: EventTarget | null): boolean {\n const region = getRegion(target);\n return region === 'top-bar'\n || region === 'left-dock'\n || region === 'right-dock'\n || region === 'bottom-dock'\n || region === 'scene-header'\n || region === 'modal';\n}\n\nfunction shouldPreventBrowserContextMenu(event: MouseEvent): boolean {\n return isEditorOwnedEvent(event) && !isEditableEvent(event);\n}\n\nfunction isEditableTarget(target: EventTarget | null): boolean {\n const element = toElement(target);\n if (!element) return false;\n const editable = element.closest('input, textarea, select, [contenteditable]');\n if (!editable) return false;\n const tagName = editable.tagName.toLowerCase();\n return tagName === 'input'\n || tagName === 'textarea'\n || tagName === 'select'\n || editable.getAttribute('contenteditable') !== 'false';\n}\n\nfunction getEventTarget(event: Event): Element | null {\n for (const target of getEventPath(event)) {\n const element = toElement(target);\n if (element) return element;\n }\n return null;\n}\n\nfunction isEditableEvent(event: Event): boolean {\n return getEventPath(event).some(isEditableTarget);\n}\n\nfunction getEventRegion(event: Event): LocalEditorWorkbenchInputRegion {\n for (const target of getEventPath(event)) {\n const region = getRegion(target);\n if (region !== 'unknown') return region;\n }\n return 'unknown';\n}\n\nfunction isEditorOwnedEvent(event: Event): boolean {\n const region = getEventRegion(event);\n return region !== 'unknown' && region !== 'modal';\n}\n\nfunction isUiEvent(event: Event): boolean {\n return getEventPath(event).some(isUiRegion);\n}\n\nfunction getEventPath(event: Event): readonly EventTarget[] {\n const path = typeof event.composedPath === 'function' ? event.composedPath() : [];\n if (path.length > 0) return path;\n return event.target ? [event.target] : [];\n}\n\nfunction toElement(target: EventTarget | null): Element | null {\n if (!target || typeof target !== 'object') return null;\n const candidate = target as Partial<Element>;\n return candidate.nodeType === 1 && typeof candidate.closest === 'function'\n ? target as Element\n : null;\n}\n"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { LocalEditorBrowserStatusDiagnostic, LocalEditorBrowserUiState } from './local-editor-ui-types';
|
|
2
|
+
type LocalEditorStatusInput = Pick<LocalEditorBrowserUiState, 'status' | 'statusTone' | 'statusDetails' | 'statusDiagnostics'>;
|
|
3
|
+
export interface LocalEditorStatusCenterViewModel {
|
|
4
|
+
diagnostics: LocalEditorBrowserStatusDiagnostic[];
|
|
5
|
+
entries: Array<{
|
|
6
|
+
diagnostic: LocalEditorBrowserStatusDiagnostic;
|
|
7
|
+
copyText: string;
|
|
8
|
+
}>;
|
|
9
|
+
severity: 'default' | 'warning' | 'error';
|
|
10
|
+
icon: 'status' | 'warning';
|
|
11
|
+
errorCount: number;
|
|
12
|
+
warningCount: number;
|
|
13
|
+
summary: string;
|
|
14
|
+
copyAllText: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function shouldCloseLocalEditorStatusCenter(input: {
|
|
17
|
+
inEditor: boolean;
|
|
18
|
+
open: boolean;
|
|
19
|
+
}): boolean;
|
|
20
|
+
export declare function createLocalEditorStatusCenterViewModel(state: LocalEditorStatusInput | null | undefined): LocalEditorStatusCenterViewModel;
|
|
21
|
+
export declare function resolveLocalEditorStatusDiagnostics(state: LocalEditorStatusInput | null | undefined): LocalEditorBrowserStatusDiagnostic[];
|
|
22
|
+
export declare function resolveLocalEditorStatusDiagnosticSeverity(diagnostics: readonly LocalEditorBrowserStatusDiagnostic[]): 'default' | 'warning' | 'error';
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=local-editor-ui-status-diagnostics.d.ts.map
|
package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-status-diagnostics.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-editor-ui-status-diagnostics.d.ts","sourceRoot":"","sources":["../src/local-editor-ui-status-diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kCAAkC,EAClC,yBAAyB,EAC1B,MAAM,yBAAyB,CAAC;AAGjC,KAAK,sBAAsB,GAAG,IAAI,CAChC,yBAAyB,EACzB,QAAQ,GAAG,YAAY,GAAG,eAAe,GAAG,mBAAmB,CAChE,CAAC;AAEF,MAAM,WAAW,gCAAgC;IAC/C,WAAW,EAAE,kCAAkC,EAAE,CAAC;IAClD,OAAO,EAAE,KAAK,CAAC;QACb,UAAU,EAAE,kCAAkC,CAAC;QAC/C,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;IACH,QAAQ,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IAC1C,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,kCAAkC,CAAC,KAAK,EAAE;IACxD,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;CACf,GAAG,OAAO,CAEV;AAED,wBAAgB,sCAAsC,CACpD,KAAK,EAAE,sBAAsB,GAAG,IAAI,GAAG,SAAS,GAC/C,gCAAgC,CAoBlC;AAED,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,sBAAsB,GAAG,IAAI,GAAG,SAAS,GAC/C,kCAAkC,EAAE,CAetC;AAED,wBAAgB,0CAA0C,CACxD,WAAW,EAAE,SAAS,kCAAkC,EAAE,GACzD,SAAS,GAAG,SAAS,GAAG,OAAO,CAGjC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { formatLocalEditorStatusDiagnostic } from './local-editor-ui-hierarchy-projection.js';
|
|
2
|
+
export function shouldCloseLocalEditorStatusCenter(input) {
|
|
3
|
+
return input.open && !input.inEditor;
|
|
4
|
+
}
|
|
5
|
+
export function createLocalEditorStatusCenterViewModel(state) {
|
|
6
|
+
const diagnostics = resolveLocalEditorStatusDiagnostics(state);
|
|
7
|
+
const entries = diagnostics.map(diagnostic => ({
|
|
8
|
+
diagnostic,
|
|
9
|
+
copyText: formatLocalEditorStatusDiagnostic(diagnostic),
|
|
10
|
+
}));
|
|
11
|
+
const errorCount = diagnostics.filter(item => item.severity === 'error').length;
|
|
12
|
+
const warningCount = diagnostics.length - errorCount;
|
|
13
|
+
return {
|
|
14
|
+
diagnostics,
|
|
15
|
+
entries,
|
|
16
|
+
severity: resolveLocalEditorStatusDiagnosticSeverity(diagnostics),
|
|
17
|
+
icon: diagnostics.length > 0 ? 'warning' : 'status',
|
|
18
|
+
errorCount,
|
|
19
|
+
warningCount,
|
|
20
|
+
summary: diagnostics.length > 0
|
|
21
|
+
? `${errorCount} 个错误 · ${warningCount} 个警告。条目包含来源、revision 与结构化详情。`
|
|
22
|
+
: `当前状态正常${state?.status ? ` · ${state.status}` : ''}`,
|
|
23
|
+
copyAllText: entries.map(entry => entry.copyText).join('\n\n'),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export function resolveLocalEditorStatusDiagnostics(state) {
|
|
27
|
+
if (!state)
|
|
28
|
+
return [];
|
|
29
|
+
const diagnostics = dedupeDiagnostics(state.statusDiagnostics ?? []);
|
|
30
|
+
if (state.statusTone !== 'warning' && state.statusTone !== 'error')
|
|
31
|
+
return diagnostics;
|
|
32
|
+
const message = state.statusDetails || state.status;
|
|
33
|
+
if (diagnostics.some(item => item.severity === state.statusTone && item.message === message)) {
|
|
34
|
+
return diagnostics;
|
|
35
|
+
}
|
|
36
|
+
const generic = {
|
|
37
|
+
code: 'editor-status',
|
|
38
|
+
severity: state.statusTone,
|
|
39
|
+
source: 'editor',
|
|
40
|
+
message,
|
|
41
|
+
};
|
|
42
|
+
return dedupeDiagnostics([...diagnostics, generic]);
|
|
43
|
+
}
|
|
44
|
+
export function resolveLocalEditorStatusDiagnosticSeverity(diagnostics) {
|
|
45
|
+
if (diagnostics.some(item => item.severity === 'error'))
|
|
46
|
+
return 'error';
|
|
47
|
+
return diagnostics.length > 0 ? 'warning' : 'default';
|
|
48
|
+
}
|
|
49
|
+
function dedupeDiagnostics(diagnostics) {
|
|
50
|
+
const seen = new Set();
|
|
51
|
+
const result = [];
|
|
52
|
+
for (const diagnostic of diagnostics) {
|
|
53
|
+
const key = [
|
|
54
|
+
diagnostic.source,
|
|
55
|
+
diagnostic.code,
|
|
56
|
+
diagnostic.severity,
|
|
57
|
+
diagnostic.message,
|
|
58
|
+
diagnostic.scopeId ?? '',
|
|
59
|
+
diagnostic.rowId ?? '',
|
|
60
|
+
diagnostic.targetId ?? '',
|
|
61
|
+
].join('\u0000');
|
|
62
|
+
if (seen.has(key))
|
|
63
|
+
continue;
|
|
64
|
+
seen.add(key);
|
|
65
|
+
result.push(diagnostic);
|
|
66
|
+
}
|
|
67
|
+
return result;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=local-editor-ui-status-diagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-editor-ui-status-diagnostics.js","sourceRoot":"","sources":["../src/local-editor-ui-status-diagnostics.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n LocalEditorBrowserStatusDiagnostic,\n LocalEditorBrowserUiState,\n} from './local-editor-ui-types';\nimport { formatLocalEditorStatusDiagnostic } from './local-editor-ui-hierarchy-projection';\n\ntype LocalEditorStatusInput = Pick<\n LocalEditorBrowserUiState,\n 'status' | 'statusTone' | 'statusDetails' | 'statusDiagnostics'\n>;\n\nexport interface LocalEditorStatusCenterViewModel {\n diagnostics: LocalEditorBrowserStatusDiagnostic[];\n entries: Array<{\n diagnostic: LocalEditorBrowserStatusDiagnostic;\n copyText: string;\n }>;\n severity: 'default' | 'warning' | 'error';\n icon: 'status' | 'warning';\n errorCount: number;\n warningCount: number;\n summary: string;\n copyAllText: string;\n}\n\nexport function shouldCloseLocalEditorStatusCenter(input: {\n inEditor: boolean;\n open: boolean;\n}): boolean {\n return input.open && !input.inEditor;\n}\n\nexport function createLocalEditorStatusCenterViewModel(\n state: LocalEditorStatusInput | null | undefined,\n): LocalEditorStatusCenterViewModel {\n const diagnostics = resolveLocalEditorStatusDiagnostics(state);\n const entries = diagnostics.map(diagnostic => ({\n diagnostic,\n copyText: formatLocalEditorStatusDiagnostic(diagnostic),\n }));\n const errorCount = diagnostics.filter(item => item.severity === 'error').length;\n const warningCount = diagnostics.length - errorCount;\n return {\n diagnostics,\n entries,\n severity: resolveLocalEditorStatusDiagnosticSeverity(diagnostics),\n icon: diagnostics.length > 0 ? 'warning' : 'status',\n errorCount,\n warningCount,\n summary: diagnostics.length > 0\n ? `${errorCount} 个错误 · ${warningCount} 个警告。条目包含来源、revision 与结构化详情。`\n : `当前状态正常${state?.status ? ` · ${state.status}` : ''}`,\n copyAllText: entries.map(entry => entry.copyText).join('\\n\\n'),\n };\n}\n\nexport function resolveLocalEditorStatusDiagnostics(\n state: LocalEditorStatusInput | null | undefined,\n): LocalEditorBrowserStatusDiagnostic[] {\n if (!state) return [];\n const diagnostics = dedupeDiagnostics(state.statusDiagnostics ?? []);\n if (state.statusTone !== 'warning' && state.statusTone !== 'error') return diagnostics;\n const message = state.statusDetails || state.status;\n if (diagnostics.some(item => item.severity === state.statusTone && item.message === message)) {\n return diagnostics;\n }\n const generic: LocalEditorBrowserStatusDiagnostic = {\n code: 'editor-status',\n severity: state.statusTone,\n source: 'editor',\n message,\n };\n return dedupeDiagnostics([...diagnostics, generic]);\n}\n\nexport function resolveLocalEditorStatusDiagnosticSeverity(\n diagnostics: readonly LocalEditorBrowserStatusDiagnostic[],\n): 'default' | 'warning' | 'error' {\n if (diagnostics.some(item => item.severity === 'error')) return 'error';\n return diagnostics.length > 0 ? 'warning' : 'default';\n}\n\nfunction dedupeDiagnostics(\n diagnostics: readonly LocalEditorBrowserStatusDiagnostic[],\n): LocalEditorBrowserStatusDiagnostic[] {\n const seen = new Set<string>();\n const result: LocalEditorBrowserStatusDiagnostic[] = [];\n for (const diagnostic of diagnostics) {\n const key = [\n diagnostic.source,\n diagnostic.code,\n diagnostic.severity,\n diagnostic.message,\n diagnostic.scopeId ?? '',\n diagnostic.rowId ?? '',\n diagnostic.targetId ?? '',\n ].join('\\u0000');\n if (seen.has(key)) continue;\n seen.add(key);\n result.push(diagnostic);\n }\n return result;\n}\n"]}
|
|
@@ -116,6 +116,43 @@ export interface LocalEditorBrowserHierarchyScopeNode extends LocalEditorBrowser
|
|
|
116
116
|
scopeId?: string;
|
|
117
117
|
sourceKind?: string;
|
|
118
118
|
commandTargetId?: string;
|
|
119
|
+
commandable?: boolean;
|
|
120
|
+
}
|
|
121
|
+
export type LocalEditorBrowserStatusDiagnosticSeverity = 'warning' | 'error';
|
|
122
|
+
export interface LocalEditorBrowserStatusDiagnostic {
|
|
123
|
+
code: string;
|
|
124
|
+
severity: LocalEditorBrowserStatusDiagnosticSeverity;
|
|
125
|
+
source: string;
|
|
126
|
+
message: string;
|
|
127
|
+
scopeId?: string;
|
|
128
|
+
documentRevision?: number;
|
|
129
|
+
projectionRevision?: number;
|
|
130
|
+
rowId?: string;
|
|
131
|
+
targetId?: string;
|
|
132
|
+
details?: Record<string, unknown>;
|
|
133
|
+
}
|
|
134
|
+
export interface LocalEditorBrowserHierarchyProjectionTarget {
|
|
135
|
+
rowId: string;
|
|
136
|
+
targetId: string;
|
|
137
|
+
targetKind: string;
|
|
138
|
+
}
|
|
139
|
+
export interface LocalEditorBrowserHierarchyProjectionState {
|
|
140
|
+
scopeId: string;
|
|
141
|
+
scopeKind: LocalEditorBrowserHierarchyScopeKind;
|
|
142
|
+
documentRevision: number;
|
|
143
|
+
projectionRevision: number;
|
|
144
|
+
health: 'healthy' | 'warning' | 'error';
|
|
145
|
+
interactive: boolean;
|
|
146
|
+
nodes: LocalEditorBrowserHierarchyScopeNode[];
|
|
147
|
+
selectedIds: string[];
|
|
148
|
+
activeId: string | null;
|
|
149
|
+
targets: LocalEditorBrowserHierarchyProjectionTarget[];
|
|
150
|
+
diagnostics: LocalEditorBrowserStatusDiagnostic[];
|
|
151
|
+
}
|
|
152
|
+
export interface LocalEditorBrowserHierarchyCommandPrecondition {
|
|
153
|
+
scopeId: string;
|
|
154
|
+
documentRevision: number;
|
|
155
|
+
projectionRevision: number;
|
|
119
156
|
}
|
|
120
157
|
export interface LocalEditorBrowserHierarchyScope {
|
|
121
158
|
scopeId: string;
|
|
@@ -127,6 +164,8 @@ export interface LocalEditorBrowserHierarchyScope {
|
|
|
127
164
|
activeId: string | null;
|
|
128
165
|
readonly: boolean;
|
|
129
166
|
commandSurface: LocalEditorBrowserHierarchyCommandSurface;
|
|
167
|
+
documentRevision: number;
|
|
168
|
+
projectionRevision: number;
|
|
130
169
|
}
|
|
131
170
|
export type LocalEditorBrowserPreviewScopeKind = 'scene' | 'prefab-stage';
|
|
132
171
|
export type LocalEditorBrowserPreviewCommandSurface = 'scene-graph' | 'prefab-composition' | 'readonly';
|
|
@@ -590,6 +629,7 @@ export interface LocalEditorBrowserUiState<TDocument = unknown> {
|
|
|
590
629
|
status: string;
|
|
591
630
|
statusTone?: 'default' | 'success' | 'warning' | 'error';
|
|
592
631
|
statusDetails?: string;
|
|
632
|
+
statusDiagnostics?: LocalEditorBrowserStatusDiagnostic[];
|
|
593
633
|
summary?: string;
|
|
594
634
|
assetFilter: string;
|
|
595
635
|
assets: LocalEditorBrowserUiAssetItem[];
|
|
@@ -598,6 +638,9 @@ export interface LocalEditorBrowserUiState<TDocument = unknown> {
|
|
|
598
638
|
hierarchy: LocalEditorBrowserUiHierarchyItem[];
|
|
599
639
|
selectedIds: string[];
|
|
600
640
|
activeId: string | null;
|
|
641
|
+
documentRevision?: number;
|
|
642
|
+
hierarchyProjectionRevision?: number;
|
|
643
|
+
hierarchyProjection?: LocalEditorBrowserHierarchyProjectionState | null;
|
|
601
644
|
selectionSummary?: {
|
|
602
645
|
count: number;
|
|
603
646
|
activeId: string | null;
|
|
@@ -999,6 +1042,7 @@ export interface LocalEditorBrowserAssetActionInput {
|
|
|
999
1042
|
primitiveShape?: string;
|
|
1000
1043
|
fieldPath?: string;
|
|
1001
1044
|
value?: unknown;
|
|
1045
|
+
hierarchyPrecondition?: LocalEditorBrowserHierarchyCommandPrecondition;
|
|
1002
1046
|
}
|
|
1003
1047
|
export interface LocalEditorBrowserUiCallbacks {
|
|
1004
1048
|
onEnterEditor?: () => void;
|
|
@@ -1007,14 +1051,14 @@ export interface LocalEditorBrowserUiCallbacks {
|
|
|
1007
1051
|
onDiscardAndRunGame?: () => void;
|
|
1008
1052
|
onUndo?: () => void;
|
|
1009
1053
|
onRedo?: () => void;
|
|
1010
|
-
onSelectHierarchyItem?: (input: LocalEditorBrowserHierarchySelectionInput) => void;
|
|
1011
|
-
onHierarchyItemEnabledChange?: (input: LocalEditorBrowserHierarchyEnabledChangeInput) => void;
|
|
1012
|
-
onSelectionCommand?: (command: SelectionCommand) => void;
|
|
1054
|
+
onSelectHierarchyItem?: (input: LocalEditorBrowserHierarchySelectionInput, precondition: LocalEditorBrowserHierarchyCommandPrecondition) => void;
|
|
1055
|
+
onHierarchyItemEnabledChange?: (input: LocalEditorBrowserHierarchyEnabledChangeInput, precondition: LocalEditorBrowserHierarchyCommandPrecondition) => void;
|
|
1056
|
+
onSelectionCommand?: (command: SelectionCommand, precondition: LocalEditorBrowserHierarchyCommandPrecondition) => void;
|
|
1013
1057
|
onCreateFromAsset?: (assetId: string) => void;
|
|
1014
1058
|
onSelectAsset?: (assetId: string) => void;
|
|
1015
1059
|
onAssetAction?: (input: LocalEditorBrowserAssetActionInput) => void;
|
|
1016
1060
|
onExitPrefabStage?: () => void;
|
|
1017
|
-
onSelectPrefabStageItem?: (itemId: string) => void;
|
|
1061
|
+
onSelectPrefabStageItem?: (itemId: string, precondition: LocalEditorBrowserHierarchyCommandPrecondition) => void;
|
|
1018
1062
|
onAssetFilterChange?: (value: string) => void;
|
|
1019
1063
|
onPropertyInput?: (input: LocalEditorBrowserUiPropertyInput) => void;
|
|
1020
1064
|
onInspectorAction?: (input: LocalEditorBrowserInspectorActionInput) => void;
|
|
@@ -1046,16 +1090,16 @@ export interface LocalEditorBrowserUiCallbacks {
|
|
|
1046
1090
|
onFocusSelection?: () => void;
|
|
1047
1091
|
onCancelEditorIntent?: () => void;
|
|
1048
1092
|
onCancelActiveOperation?: () => void;
|
|
1049
|
-
onSceneGraphRename?: (intent: LocalEditorBrowserSceneGraphRenameIntent) => void;
|
|
1050
|
-
onSceneGraphCreateGroup?: (intent: LocalEditorBrowserSceneGraphCreateGroupIntent) => void;
|
|
1051
|
-
onSceneGraphCreatePrimitive?: (intent: LocalEditorBrowserSceneGraphCreatePrimitiveIntent) => void;
|
|
1052
|
-
onSceneGraphCreateMarker?: (intent: LocalEditorBrowserSceneGraphCreateMarkerIntent) => void;
|
|
1053
|
-
onSceneGraphDelete?: (intent: LocalEditorBrowserSceneGraphDeleteIntent) => void;
|
|
1054
|
-
onSceneGraphDuplicate?: (intent: LocalEditorBrowserSceneGraphDuplicateIntent) => void;
|
|
1055
|
-
onSceneGraphDrop?: (intent: LocalEditorBrowserSceneGraphDropIntent) => void;
|
|
1056
|
-
onSceneGraphMove?: (intent: LocalEditorBrowserSceneGraphMoveIntent) => LocalEditorBrowserSceneGraphActionResponse;
|
|
1057
|
-
onSceneGraphGroupSelection?: (intent: LocalEditorBrowserSceneGraphGroupSelectionIntent) => void;
|
|
1058
|
-
onContextAction?: (action: LocalEditorContextAction) => void;
|
|
1093
|
+
onSceneGraphRename?: (intent: LocalEditorBrowserSceneGraphRenameIntent, precondition: LocalEditorBrowserHierarchyCommandPrecondition) => void;
|
|
1094
|
+
onSceneGraphCreateGroup?: (intent: LocalEditorBrowserSceneGraphCreateGroupIntent, precondition: LocalEditorBrowserHierarchyCommandPrecondition) => void;
|
|
1095
|
+
onSceneGraphCreatePrimitive?: (intent: LocalEditorBrowserSceneGraphCreatePrimitiveIntent, precondition: LocalEditorBrowserHierarchyCommandPrecondition) => void;
|
|
1096
|
+
onSceneGraphCreateMarker?: (intent: LocalEditorBrowserSceneGraphCreateMarkerIntent, precondition: LocalEditorBrowserHierarchyCommandPrecondition) => void;
|
|
1097
|
+
onSceneGraphDelete?: (intent: LocalEditorBrowserSceneGraphDeleteIntent, precondition: LocalEditorBrowserHierarchyCommandPrecondition) => void;
|
|
1098
|
+
onSceneGraphDuplicate?: (intent: LocalEditorBrowserSceneGraphDuplicateIntent, precondition: LocalEditorBrowserHierarchyCommandPrecondition) => void;
|
|
1099
|
+
onSceneGraphDrop?: (intent: LocalEditorBrowserSceneGraphDropIntent, precondition: LocalEditorBrowserHierarchyCommandPrecondition) => void;
|
|
1100
|
+
onSceneGraphMove?: (intent: LocalEditorBrowserSceneGraphMoveIntent, precondition: LocalEditorBrowserHierarchyCommandPrecondition) => LocalEditorBrowserSceneGraphActionResponse;
|
|
1101
|
+
onSceneGraphGroupSelection?: (intent: LocalEditorBrowserSceneGraphGroupSelectionIntent, precondition: LocalEditorBrowserHierarchyCommandPrecondition) => void;
|
|
1102
|
+
onContextAction?: (action: LocalEditorContextAction, precondition: LocalEditorBrowserHierarchyCommandPrecondition) => void;
|
|
1059
1103
|
}
|
|
1060
1104
|
export interface LocalEditorBrowserUiOptions<TDocument = unknown> {
|
|
1061
1105
|
root?: HTMLElement;
|