@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.
Files changed (116) hide show
  1. package/dist/agent-bridge/capabilities/editor-state.d.ts.map +1 -1
  2. package/dist/agent-bridge/capabilities/editor-state.js +26 -17
  3. package/dist/agent-bridge/capabilities/editor-state.js.map +1 -1
  4. package/dist/agent-bridge/capabilities/prefabs.d.ts.map +1 -1
  5. package/dist/agent-bridge/capabilities/prefabs.js +61 -13
  6. package/dist/agent-bridge/capabilities/prefabs.js.map +1 -1
  7. package/dist/agent-bridge/capabilities/scene-objects.d.ts +1 -1
  8. package/dist/agent-bridge/capabilities/scene-objects.d.ts.map +1 -1
  9. package/dist/agent-bridge/capabilities/scene-objects.js +110 -25
  10. package/dist/agent-bridge/capabilities/scene-objects.js.map +1 -1
  11. package/dist/agent-bridge/capabilities/selection.d.ts.map +1 -1
  12. package/dist/agent-bridge/capabilities/selection.js +8 -5
  13. package/dist/agent-bridge/capabilities/selection.js.map +1 -1
  14. package/dist/agent-bridge/capabilities/shadows.d.ts.map +1 -1
  15. package/dist/agent-bridge/capabilities/shadows.js +11 -2
  16. package/dist/agent-bridge/capabilities/shadows.js.map +1 -1
  17. package/dist/agent-bridge/capabilities/transform.d.ts.map +1 -1
  18. package/dist/agent-bridge/capabilities/transform.js +6 -4
  19. package/dist/agent-bridge/capabilities/transform.js.map +1 -1
  20. package/dist/agent-bridge/capabilities/viewport.d.ts.map +1 -1
  21. package/dist/agent-bridge/capabilities/viewport.js +79 -47
  22. package/dist/agent-bridge/capabilities/viewport.js.map +1 -1
  23. package/dist/agent-bridge/shared.d.ts +8 -3
  24. package/dist/agent-bridge/shared.d.ts.map +1 -1
  25. package/dist/agent-bridge/shared.js +32 -0
  26. package/dist/agent-bridge/shared.js.map +1 -1
  27. package/dist/build-info.json +34 -34
  28. package/dist/local-editor-agent-actions.d.ts.map +1 -1
  29. package/dist/local-editor-agent-actions.js +9 -5
  30. package/dist/local-editor-agent-actions.js.map +1 -1
  31. package/dist/local-editor-harness.d.ts.map +1 -1
  32. package/dist/local-editor-harness.js +264 -41
  33. package/dist/local-editor-harness.js.map +1 -1
  34. package/node_modules/@fps-games/babylon-renderer/package.json +7 -7
  35. package/node_modules/@fps-games/editor-babylon/package.json +5 -5
  36. package/node_modules/@fps-games/editor-browser/dist/index.d.ts +3 -1
  37. package/node_modules/@fps-games/editor-browser/dist/index.d.ts.map +1 -1
  38. package/node_modules/@fps-games/editor-browser/dist/index.js +2 -0
  39. package/node_modules/@fps-games/editor-browser/dist/index.js.map +1 -1
  40. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.d.ts +2 -1
  41. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.d.ts.map +1 -1
  42. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.js +260 -94
  43. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.js.map +1 -1
  44. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-projection.d.ts +7 -0
  45. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-projection.d.ts.map +1 -0
  46. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-projection.js +186 -0
  47. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-projection.js.map +1 -0
  48. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-scope.d.ts +2 -2
  49. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-scope.d.ts.map +1 -1
  50. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-scope.js +14 -8
  51. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-scope.js.map +1 -1
  52. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-tree.d.ts.map +1 -1
  53. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-tree.js +23 -7
  54. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-tree.js.map +1 -1
  55. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.d.ts +1 -1
  56. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.d.ts.map +1 -1
  57. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.js +6 -0
  58. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.js.map +1 -1
  59. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-input-router.d.ts +3 -0
  60. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-input-router.d.ts.map +1 -1
  61. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-input-router.js +60 -13
  62. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-input-router.js.map +1 -1
  63. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-status-diagnostics.d.ts +24 -0
  64. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-status-diagnostics.d.ts.map +1 -0
  65. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-status-diagnostics.js +69 -0
  66. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-status-diagnostics.js.map +1 -0
  67. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts +58 -14
  68. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts.map +1 -1
  69. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.js.map +1 -1
  70. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts +1 -1
  71. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts.map +1 -1
  72. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js +196 -11
  73. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js.map +1 -1
  74. package/node_modules/@fps-games/editor-browser/package.json +4 -4
  75. package/node_modules/@fps-games/editor-core/dist/editor-session.d.ts +3 -0
  76. package/node_modules/@fps-games/editor-core/dist/editor-session.d.ts.map +1 -1
  77. package/node_modules/@fps-games/editor-core/dist/editor-session.js +9 -0
  78. package/node_modules/@fps-games/editor-core/dist/editor-session.js.map +1 -1
  79. package/node_modules/@fps-games/editor-core/package.json +6 -6
  80. package/node_modules/@fps-games/editor-forge-play/package.json +2 -2
  81. package/node_modules/@fps-games/editor-playable-sdk/package.json +6 -6
  82. package/node_modules/@fps-games/editor-protocol/package.json +2 -2
  83. package/node_modules/@fps-games/editor-tooling/package.json +3 -3
  84. package/node_modules/@fps-games/playable-assets/package.json +1 -1
  85. package/node_modules/@fps-games/playable-contracts/package.json +1 -1
  86. package/node_modules/@fps-games/playable-rendering/package.json +2 -2
  87. package/node_modules/@fps-games/playable-runtime/package.json +12 -12
  88. package/node_modules/@fps-games/playable-runtime-data/package.json +4 -4
  89. package/node_modules/@fps-games/playable-scene/package.json +2 -2
  90. package/node_modules/@fps-games/plugin-api/package.json +1 -1
  91. package/node_modules/@fps-games/plugin-assets/dist/version.d.ts +1 -1
  92. package/node_modules/@fps-games/plugin-assets/dist/version.js +1 -1
  93. package/node_modules/@fps-games/plugin-assets/dist/version.js.map +1 -1
  94. package/node_modules/@fps-games/plugin-assets/package.json +5 -5
  95. package/node_modules/@fps-games/plugin-host/package.json +2 -2
  96. package/node_modules/@fps-games/plugin-markers/dist/version.d.ts +1 -1
  97. package/node_modules/@fps-games/plugin-markers/dist/version.js +1 -1
  98. package/node_modules/@fps-games/plugin-markers/dist/version.js.map +1 -1
  99. package/node_modules/@fps-games/plugin-markers/package.json +5 -5
  100. package/node_modules/@fps-games/plugin-materials/dist/version.d.ts +1 -1
  101. package/node_modules/@fps-games/plugin-materials/dist/version.js +1 -1
  102. package/node_modules/@fps-games/plugin-materials/dist/version.js.map +1 -1
  103. package/node_modules/@fps-games/plugin-materials/package.json +5 -5
  104. package/node_modules/@fps-games/plugin-rendering/dist/version.d.ts +1 -1
  105. package/node_modules/@fps-games/plugin-rendering/dist/version.js +1 -1
  106. package/node_modules/@fps-games/plugin-rendering/dist/version.js.map +1 -1
  107. package/node_modules/@fps-games/plugin-rendering/package.json +5 -5
  108. package/node_modules/@fps-games/plugin-scene/dist/version.d.ts +1 -1
  109. package/node_modules/@fps-games/plugin-scene/dist/version.js +1 -1
  110. package/node_modules/@fps-games/plugin-scene/dist/version.js.map +1 -1
  111. package/node_modules/@fps-games/plugin-scene/package.json +5 -5
  112. package/node_modules/@fps-games/plugin-shadows/dist/version.d.ts +1 -1
  113. package/node_modules/@fps-games/plugin-shadows/dist/version.js +1 -1
  114. package/node_modules/@fps-games/plugin-shadows/dist/version.js.map +1 -1
  115. package/node_modules/@fps-games/plugin-shadows/package.json +7 -7
  116. 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,CAkDjC"}
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 (!isUiRegion(event.target))
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 (!isUiRegion(event.target))
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 && getRegion(event.target) !== 'modal';
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
- && !isEditableTarget(event.target)
55
+ && !isEditableEvent(event)
47
56
  && !isEditableTarget(doc.activeElement)
48
- && getRegion(event.target) !== 'modal';
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 = toHTMLElement(target);
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 isEditorOwnedRegion(event.target) && !isEditableTarget(event.target);
111
+ return isEditorOwnedEvent(event) && !isEditableEvent(event);
103
112
  }
104
113
  function isEditableTarget(target) {
105
- const element = toHTMLElement(target);
114
+ const element = toElement(target);
106
115
  if (!element)
107
116
  return false;
108
- const tagName = element.tagName.toLowerCase();
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
- || element.isContentEditable;
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 toHTMLElement(target) {
115
- if (typeof HTMLElement === 'undefined')
158
+ function toElement(target) {
159
+ if (!target || typeof target !== 'object')
116
160
  return null;
117
- return target instanceof HTMLElement ? target : null;
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
@@ -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;