@combos-fun/plugin-development-tool 0.0.51 → 0.0.52

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.
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-development-tool.cjs.js","sources":["../lib/constants.ts","../lib/CombosDevelopmentToolTarget.ts","../lib/canvasMarkerGraphics.ts","../lib/markerLayer.ts","../lib/messageOrigin.ts","../lib/overlayCanvas.ts","../lib/sceneEditTypes.ts","../lib/sceneEditSerialize.ts","../lib/sceneEditApplyHooks.ts","../lib/selectionNotify.ts","../lib/screenSpace.ts","../lib/CombosDevelopmentToolSystem.ts","../lib/__combosPackageMeta.gen.ts","../lib/attachDevelopmentTarget.ts"],"sourcesContent":["/** Parent → iframe (also `window` CustomEvent / `game.emit`): toggle pick mode. Payload: `{ enabled: boolean }`. */\nexport const COMBOS_DEVELOPMENT_TOOL_SET_PICK_MODE =\n 'combos-development-tool:set-pick-mode' as const;\n\n/** iframe → parent (and `game.emit`): pick mode finished attaching (enable) or restoring (disable). Payload: `{ enabled: boolean }`. */\nexport const COMBOS_DEVELOPMENT_TOOL_PICK_MODE_SUCCESS =\n 'combos-development-tool:pick-mode-success' as const;\n\n/** Re-scan the scene tree while the development tool is enabled. */\nexport const COMBOS_DEVELOPMENT_TOOL_REFRESH = 'combos-development-tool:refresh' as const;\n\n/** Emitted to `window.parent` when an object is selected while the tool is on. */\nexport const COMBOS_DEVELOPMENT_TOOL_GAMEOBJECT_SELECTED =\n 'combos-development-tool:gameobject-selected' as const;\n\n/** Parent → iframe: clear the current in-canvas selection outline. */\nexport const COMBOS_DEVELOPMENT_TOOL_CLEAR_SELECTION =\n 'combos-development-tool:clear-selection' as const;\n\n/** Emitted to `window.parent` when the current selection is cleared. */\nexport const COMBOS_DEVELOPMENT_TOOL_GAMEOBJECT_DESELECTED =\n 'combos-development-tool:gameobject-deselected' as const;\n\n/** Parent → iframe: apply a value to a component field (live preview). */\nexport const COMBOS_DEVELOPMENT_TOOL_APPLY_PROPERTY =\n 'combos-development-tool:apply-property' as const;\n\n/** iframe → parent: game scene bootstrap finished; parent may enable pick mode. */\nexport const COMBOS_DEVELOPMENT_TOOL_READY = 'combos-development-tool:ready' as const;\n\n/**\n * Parent → iframe: mute or unmute. Handled by `@combos-fun/plugin-sound`.\n * Payload: `{ muted: boolean }`.\n */\nexport const COMBOS_DEVELOPMENT_TOOL_SET_MUTED =\n 'combos-development-tool:set-muted' as const;\n\n/** iframe → parent (and `game.emit`): current mute snapshot after a successful change. */\nexport const COMBOS_DEVELOPMENT_TOOL_STATE_CHANGED =\n 'combos-development-tool:state-changed' as const;\n\n/**\n * Parent → iframe (also `window` CustomEvent / `game.emit`): toggle the marker\n * overlay — a persistent, clickable icon on every object owning an otherwise\n * invisible registered component (Sound first). Independent of pick mode and\n * mute. Payload: `{ enabled: boolean }`.\n */\nexport const COMBOS_DEVELOPMENT_TOOL_SET_MARKER_OVERLAY =\n 'combos-development-tool:set-marker-overlay' as const;\n\n/**\n * iframe → parent (and `game.emit`): marker overlay finished (re)building.\n * Payload: `{ enabled: boolean, total: number, markers: { componentName, count }[] }`.\n */\nexport const COMBOS_DEVELOPMENT_TOOL_MARKER_OVERLAY_SUCCESS =\n 'combos-development-tool:marker-overlay-success' as const;\n","import { Component, ComponentParams } from '@combos-fun/engine';\n\nexport interface CombosDevelopmentToolTargetParams extends ComponentParams {\n /** Extra JSON-serializable fields included in postMessage to parent. */\n payload?: Record<string, unknown>;\n}\n\n/**\n * Marks a `GameObject` as selectable in editor pick mode. While the development tool is enabled,\n * only nodes carrying this component are hit-tested on the canvas overlay.\n */\nexport default class CombosDevelopmentToolTarget extends Component<CombosDevelopmentToolTargetParams> {\n static componentName = 'CombosDevelopmentToolTarget';\n\n payload: Record<string, unknown> = {};\n\n init(params?: CombosDevelopmentToolTargetParams) {\n this.payload = params?.payload ? { ...params.payload } : {};\n }\n}\n","import type { MarkerGraphicsLike } from './markerLayer';\n\nexport function cssRgba(color: number, alpha = 1): string {\n const r = (color >> 16) & 0xff;\n const g = (color >> 8) & 0xff;\n const b = color & 0xff;\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\n\n/** Pixi-v8-style path builder backed by `CanvasRenderingContext2D`. */\nexport class CanvasMarkerGraphics implements MarkerGraphicsLike {\n constructor(private readonly ctx: CanvasRenderingContext2D) {}\n\n clear(): void {\n this.ctx.beginPath();\n }\n\n roundRect(x: number, y: number, width: number, height: number, radius = 0): void {\n const ctx = this.ctx;\n if (typeof ctx.roundRect === 'function') {\n ctx.roundRect(x, y, width, height, radius);\n return;\n }\n const r = Math.max(0, Math.min(radius, Math.min(width, height) / 2));\n ctx.moveTo(x + r, y);\n ctx.lineTo(x + width - r, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + r);\n ctx.lineTo(x + width, y + height - r);\n ctx.quadraticCurveTo(x + width, y + height, x + width - r, y + height);\n ctx.lineTo(x + r, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - r);\n ctx.lineTo(x, y + r);\n ctx.quadraticCurveTo(x, y, x + r, y);\n ctx.closePath();\n }\n\n rect(x: number, y: number, width: number, height: number): void {\n this.ctx.rect(x, y, width, height);\n }\n\n circle(x: number, y: number, radius: number): void {\n this.ctx.moveTo(x + radius, y);\n this.ctx.arc(x, y, radius, 0, Math.PI * 2);\n }\n\n poly(points: number[], close = true): void {\n if (points.length < 4) return;\n this.ctx.moveTo(points[0], points[1]);\n for (let i = 2; i < points.length; i += 2) {\n this.ctx.lineTo(points[i], points[i + 1]);\n }\n if (close) {\n this.ctx.closePath();\n }\n }\n\n fill(style: { color: number; alpha?: number }): void {\n this.ctx.fillStyle = cssRgba(style.color, style.alpha ?? 1);\n this.ctx.fill();\n this.ctx.beginPath();\n }\n\n stroke(style: { width: number; color: number; alpha?: number }): void {\n this.ctx.strokeStyle = cssRgba(style.color, style.alpha ?? 1);\n this.ctx.lineWidth = style.width;\n this.ctx.stroke();\n this.ctx.beginPath();\n }\n}\n","import type { GameObject } from '@combos-fun/engine';\n\n/**\n * Marker overlay = a reusable \"pin a persistent, clickable icon on every object\n * that owns an otherwise-invisible component\" capability. Audio (`Sound`) is the\n * first consumer; register more component kinds below (Physics, Camera, Trigger,\n * timers, spawn points, …) to reuse the exact same layer.\n */\n\n/** Glyph drawn inside a marker badge. Extend as new component kinds are added. */\nexport type MarkerGlyph = 'speaker' | 'dot';\n\n/** One kind of invisible component the overlay surfaces with a pinned icon. */\nexport interface MarkerComponentDef {\n /** Engine component name to look for on each GameObject, e.g. `'Sound'`. */\n componentName: string;\n /** Badge fill color, `0xRRGGBB`. */\n badgeColor: number;\n /** Which glyph to draw inside the badge. */\n glyph: MarkerGlyph;\n}\n\n/**\n * Registered marker kinds, in priority order: a GameObject is marked by the\n * first registered component it owns. For now this is **`Sound` only**; the\n * mechanism is generic (append Physics / Camera / triggers / spawn points later\n * to reuse the same layer) but only audio is wanted right now.\n */\nexport const MARKER_COMPONENTS: readonly MarkerComponentDef[] = [\n { componentName: 'Sound', badgeColor: 0x8b5cf6, glyph: 'speaker' },\n];\n\n/** Fixed badge size in overlay CSS pixels. */\nexport const MARKER_ICON_SIZE = 28;\n\n/**\n * First registered marker def whose component is present on `go`, else `null`.\n * Priority follows {@link MARKER_COMPONENTS} order.\n */\nexport function resolveMarkerDef(\n go: Pick<GameObject, 'getComponent'>,\n registry: readonly MarkerComponentDef[] = MARKER_COMPONENTS,\n): MarkerComponentDef | null {\n for (const def of registry) {\n if (go.getComponent(def.componentName)) {\n return def;\n }\n }\n return null;\n}\n\n/**\n * Minimal subset of the PixiGraphics v8 surface the marker drawing uses. Keeps\n * this module decoupled from the renderer and unit-testable with a mock.\n */\nexport interface MarkerGraphicsLike {\n clear(): unknown;\n roundRect(x: number, y: number, width: number, height: number, radius?: number): unknown;\n rect(x: number, y: number, width: number, height: number): unknown;\n circle(x: number, y: number, radius: number): unknown;\n poly(points: number[], close?: boolean): unknown;\n fill(style: { color: number; alpha?: number }): unknown;\n stroke(style: { width: number; color: number; alpha?: number }): unknown;\n}\n\nconst GLYPH_COLOR = 0xffffff;\n\n/** Draw the rounded badge background shared by every glyph. */\nfunction drawBadge(g: MarkerGraphicsLike, def: MarkerComponentDef, size: number): void {\n g.clear();\n g.roundRect(0, 0, size, size, size * 0.22);\n g.fill({ color: def.badgeColor, alpha: 0.92 });\n g.roundRect(0, 0, size, size, size * 0.22);\n g.stroke({ width: Math.max(1, size * 0.05), color: 0xffffff, alpha: 0.6 });\n}\n\n/** A speaker cone + two volume bars, normalized to the `size` box. */\nfunction drawSpeakerGlyph(g: MarkerGraphicsLike, s: number): void {\n g.poly([\n s * 0.28, s * 0.4,\n s * 0.42, s * 0.4,\n s * 0.55, s * 0.26,\n s * 0.55, s * 0.74,\n s * 0.42, s * 0.6,\n s * 0.28, s * 0.6,\n ]);\n g.fill({ color: GLYPH_COLOR, alpha: 0.96 });\n\n g.rect(s * 0.62, s * 0.44, s * 0.045, s * 0.12);\n g.fill({ color: GLYPH_COLOR, alpha: 0.96 });\n g.rect(s * 0.71, s * 0.39, s * 0.045, s * 0.22);\n g.fill({ color: GLYPH_COLOR, alpha: 0.96 });\n}\n\n/** Generic fallback glyph for component kinds without a dedicated icon. */\nfunction drawDotGlyph(g: MarkerGraphicsLike, s: number): void {\n g.circle(s * 0.5, s * 0.5, s * 0.18);\n g.fill({ color: GLYPH_COLOR, alpha: 0.96 });\n}\n\n/** Render a full marker (badge + glyph) into `g`, sized to `size` (overlay CSS pixels). */\nexport function drawMarkerIcon(\n g: MarkerGraphicsLike,\n def: MarkerComponentDef,\n size: number = MARKER_ICON_SIZE,\n): void {\n drawBadge(g, def, size);\n switch (def.glyph) {\n case 'speaker':\n drawSpeakerGlyph(g, size);\n break;\n case 'dot':\n default:\n drawDotGlyph(g, size);\n break;\n }\n}\n","/** Default inbound postMessage host suffixes (host + all subdomains). */\nexport const DEFAULT_ALLOWED_MESSAGE_HOST_SUFFIXES = [\n 'knoffice.tech',\n 'converge.ai',\n] as const;\n\n/**\n * Returns whether `origin` is allowed by `allowed`.\n *\n * Each entry in `allowed` is either:\n * - a **host suffix** (e.g. `knoffice.tech`) — matches that host and `*.knoffice.tech`;\n * - a **full origin** (e.g. `https://creator.knoffice.tech`) — exact match;\n * - `'*'` — accept any origin (escape hatch).\n */\nexport function isAllowedMessageOrigin(\n origin: string,\n allowed: readonly string[],\n): boolean {\n if (allowed.includes('*')) {\n return true;\n }\n if (allowed.length === 0) {\n return false;\n }\n\n let parsed: URL;\n try {\n parsed = new URL(origin);\n } catch {\n return false;\n }\n\n const originLower = origin.toLowerCase();\n const hostLower = parsed.hostname.toLowerCase();\n\n for (const entry of allowed) {\n const trimmed = entry.trim();\n if (!trimmed) {\n continue;\n }\n\n if (trimmed.includes('://')) {\n if (originLower === trimmed.toLowerCase()) {\n return true;\n }\n continue;\n }\n\n const suffix = trimmed.toLowerCase().replace(/^\\./, '');\n if (hostLower === suffix || hostLower.endsWith(`.${suffix}`)) {\n return true;\n }\n }\n\n return false;\n}\n\n/** Defaults plus any extra entries (deduped). `['*']` alone accepts any origin. */\nexport function mergeAllowedMessageOrigins(extra?: string[]): string[] {\n if (!extra?.length) {\n return [...DEFAULT_ALLOWED_MESSAGE_HOST_SUFFIXES];\n }\n if (extra.includes('*')) {\n return ['*'];\n }\n\n const seen = new Set<string>();\n const result: string[] = [];\n for (const entry of [...DEFAULT_ALLOWED_MESSAGE_HOST_SUFFIXES, ...extra]) {\n const trimmed = entry.trim();\n if (!trimmed || seen.has(trimmed)) {\n continue;\n }\n seen.add(trimmed);\n result.push(trimmed);\n }\n return result;\n}\n","const OVERLAY_Z_INDEX = '2147483000';\nconst OVERLAY_ATTR = 'data-combos-development-tool-overlay';\n\nexport interface OverlayCanvasHandle {\n canvas: HTMLCanvasElement;\n ctx: CanvasRenderingContext2D;\n sync(gameCanvas: HTMLCanvasElement): { width: number; height: number } | null;\n setPickEnabled(on: boolean): void;\n setVisible(on: boolean): void;\n destroy(): void;\n}\n\nfunction ensureParent(gameCanvas: HTMLCanvasElement, overlay: HTMLCanvasElement): void {\n const parent = gameCanvas.parentElement ?? document.body;\n if (overlay.parentElement !== parent) {\n parent.appendChild(overlay);\n }\n}\n\n/**\n * Transparent HTML canvas stacked on the game canvas.\n * Pick mode sets `pointer-events: auto` so game Event / Event3D do not receive the tap.\n */\nexport function createOverlayCanvas(): OverlayCanvasHandle | null {\n if (typeof document === 'undefined') {\n return null;\n }\n\n const canvas = document.createElement('canvas');\n canvas.setAttribute(OVERLAY_ATTR, 'true');\n canvas.style.position = 'fixed';\n canvas.style.left = '0';\n canvas.style.top = '0';\n canvas.style.width = '0';\n canvas.style.height = '0';\n canvas.style.margin = '0';\n canvas.style.padding = '0';\n canvas.style.border = '0';\n canvas.style.background = 'transparent';\n canvas.style.pointerEvents = 'none';\n canvas.style.touchAction = 'none';\n canvas.style.userSelect = 'none';\n canvas.style.zIndex = OVERLAY_Z_INDEX;\n canvas.style.display = 'none';\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return null;\n }\n\n let pickEnabled = false;\n let visible = false;\n\n const sync = (gameCanvas: HTMLCanvasElement): { width: number; height: number } | null => {\n ensureParent(gameCanvas, canvas);\n const rect = gameCanvas.getBoundingClientRect();\n if (rect.width <= 0 || rect.height <= 0) {\n canvas.style.display = 'none';\n return null;\n }\n\n canvas.style.display = visible ? 'block' : 'none';\n canvas.style.left = `${rect.left}px`;\n canvas.style.top = `${rect.top}px`;\n canvas.style.width = `${rect.width}px`;\n canvas.style.height = `${rect.height}px`;\n\n const dpr = typeof window !== 'undefined' ? window.devicePixelRatio || 1 : 1;\n const pixelW = Math.max(1, Math.round(rect.width * dpr));\n const pixelH = Math.max(1, Math.round(rect.height * dpr));\n if (canvas.width !== pixelW || canvas.height !== pixelH) {\n canvas.width = pixelW;\n canvas.height = pixelH;\n }\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n return { width: rect.width, height: rect.height };\n };\n\n return {\n canvas,\n ctx,\n sync,\n setPickEnabled(on: boolean) {\n pickEnabled = on;\n canvas.style.pointerEvents = pickEnabled ? 'auto' : 'none';\n canvas.style.cursor = pickEnabled ? 'crosshair' : 'default';\n },\n setVisible(on: boolean) {\n visible = on;\n canvas.style.display = on ? 'block' : 'none';\n },\n destroy() {\n canvas.remove();\n },\n };\n}\n","/** Optional bootstrap anchor stored on {@link CombosDevelopmentToolTarget}.payload.source */\nexport interface SceneSourceAnchor {\n /** Project-relative path, e.g. `src/index.ts` */\n file: string;\n /** Variable name in bootstrap (`const poster = …`) or stable key; defaults to gameObject name */\n anchor?: string;\n}\n\nexport interface SceneEditPropertyRef {\n gameObjectId: number;\n gameObjectName: string;\n componentName: string;\n path: string[];\n}\n\nexport type SceneEditValueType = 'string' | 'number' | 'boolean' | 'object';\n\nexport type SceneEditEditorKind =\n | 'volume-slider'\n | 'number-slider'\n | 'number-stepper'\n | 'color'\n | 'enum'\n | 'toggle'\n | 'text';\n\nexport interface SceneEditNumberMeta {\n min?: number;\n max?: number;\n step?: number;\n unit?: string;\n}\n\n/**\n * Schema-backed editable field emitted to the host inspector.\n * Only `@Field`-declared properties (with label + description) are serialized.\n */\nexport interface SceneEditFieldDescriptor {\n path: string[];\n value: unknown;\n valueType: SceneEditValueType;\n label: string;\n description: string;\n group?: string;\n editorKind?: SceneEditEditorKind;\n enumOptions?: string[];\n numberMeta?: SceneEditNumberMeta;\n persistTarget?: 'gameObjectConstructor' | 'component';\n persistPath?: string[];\n snapshotPath?: string[];\n}\n\nexport interface SceneEditComponentSnapshot {\n componentName: string;\n fieldDescriptors: SceneEditFieldDescriptor[];\n}\n\nexport interface SceneEditGameObjectSnapshot {\n id: number;\n name: string;\n components: SceneEditComponentSnapshot[];\n source?: SceneSourceAnchor;\n}\n\nexport function isSceneSourceAnchor(v: unknown): v is SceneSourceAnchor {\n return (\n !!v &&\n typeof v === 'object' &&\n typeof (v as SceneSourceAnchor).file === 'string'\n );\n}\n","import { Component, GameObject } from '@combos-fun/engine';\nimport { IDE_PROPERTY_METADATA } from '@combos-fun/inspector-decorator';\nimport type { FieldEditorKind, FieldOptions } from '@combos-fun/inspector-decorator';\nimport CombosDevelopmentToolTarget from './CombosDevelopmentToolTarget';\nimport {\n isSceneSourceAnchor,\n type SceneEditComponentSnapshot,\n type SceneEditEditorKind,\n type SceneEditFieldDescriptor,\n type SceneEditGameObjectSnapshot,\n type SceneEditValueType,\n type SceneSourceAnchor,\n} from './sceneEditTypes';\n\ntype SchemaProp = FieldOptions & {\n key: string;\n};\n\nfunction resolveValueType(value: unknown): SceneEditValueType | 'unsupported' {\n if (typeof value === 'string') return 'string';\n if (typeof value === 'number') return 'number';\n if (typeof value === 'boolean') return 'boolean';\n if (value !== null && typeof value === 'object') return 'object';\n return 'unsupported';\n}\n\nfunction cloneJsonSafe(value: unknown, depth = 0): unknown {\n if (value === null || value === undefined) return value;\n if (typeof value === 'number' || typeof value === 'string' || typeof value === 'boolean') {\n return value;\n }\n if (depth > 6) return undefined;\n if (Array.isArray(value)) {\n return value.map(item => cloneJsonSafe(item, depth + 1));\n }\n if (typeof value === 'object') {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n if (typeof v === 'function') continue;\n const cloned = cloneJsonSafe(v, depth + 1);\n if (cloned !== undefined) out[k] = cloned;\n }\n return out;\n }\n return undefined;\n}\n\nfunction readFieldReflectSchema(ctor: Function): SchemaProp[] {\n const properties =\n (Reflect.getMetadata(IDE_PROPERTY_METADATA, ctor) as Record<string, FieldOptions> | undefined) ||\n {};\n return Object.keys(properties).map(key => ({\n key,\n ...properties[key],\n }));\n}\n\n/** Legacy `@type` / `@step` write `constructor.IDEProps` as an object keyed by property name. */\nfunction readLegacyIdePropsSchema(ctor: Function & { IDEProps?: unknown }): SchemaProp[] {\n const raw = ctor.IDEProps;\n if (!raw || Array.isArray(raw) || typeof raw !== 'object') {\n return [];\n }\n return Object.keys(raw as Record<string, Record<string, unknown>>).map(key => {\n const entry = (raw as Record<string, Record<string, unknown>>)[key] || {};\n return {\n key,\n type: typeof entry.type === 'string' ? entry.type : undefined,\n step: typeof entry.step === 'number' ? entry.step : undefined,\n min: typeof entry.min === 'number' ? entry.min : undefined,\n max: typeof entry.max === 'number' ? entry.max : undefined,\n label: typeof entry.label === 'string' ? entry.label : undefined,\n description: typeof entry.description === 'string' ? entry.description : undefined,\n group: typeof entry.group === 'string' ? entry.group : undefined,\n editor: entry.editor as FieldEditorKind | undefined,\n enumOptions: Array.isArray(entry.enumOptions) ? (entry.enumOptions as string[]) : undefined,\n unit: typeof entry.unit === 'string' ? entry.unit : undefined,\n };\n });\n}\n\nfunction collectSchemaProps(comp: Component): SchemaProp[] {\n const ctor = comp.constructor as Function & { IDEProps?: unknown };\n const fromField = readFieldReflectSchema(ctor);\n if (fromField.length > 0) {\n return fromField;\n }\n return readLegacyIdePropsSchema(ctor);\n}\n\nfunction mapEditorKind(\n options: SchemaProp,\n valueType: SceneEditValueType,\n): SceneEditEditorKind | undefined {\n if (options.editor) {\n return options.editor;\n }\n if (valueType === 'boolean') return 'toggle';\n if (options.enumOptions?.length && valueType === 'string') return 'enum';\n if (valueType === 'number') {\n if (options.min !== undefined && options.max !== undefined) {\n return 'number-slider';\n }\n return 'number-stepper';\n }\n if (valueType === 'string') return 'text';\n return undefined;\n}\n\nfunction buildNumberMeta(options: SchemaProp): SceneEditFieldDescriptor['numberMeta'] | undefined {\n if (\n options.min === undefined &&\n options.max === undefined &&\n options.step === undefined &&\n options.unit === undefined\n ) {\n return undefined;\n }\n return {\n min: options.min,\n max: options.max,\n step: options.step,\n unit: options.unit,\n };\n}\n\nfunction titleCaseLeaf(leaf: string): string {\n return leaf\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .replace(/_/g, ' ')\n .replace(/^./, char => char.toUpperCase());\n}\n\nfunction resolveLabel(options: SchemaProp, path: string[]): string | undefined {\n if (options.label?.trim()) {\n return options.label.trim();\n }\n const leaf = path[path.length - 1];\n return leaf ? titleCaseLeaf(leaf) : undefined;\n}\n\nfunction leafDescriptorsFromValue(\n componentName: string,\n options: SchemaProp,\n path: string[],\n value: unknown,\n): SceneEditFieldDescriptor[] {\n const description = options.description?.trim();\n if (!description) {\n // Scene Edit only exposes fields that include a human description.\n return [];\n }\n\n const valueType = resolveValueType(value);\n if (valueType === 'unsupported') {\n return [];\n }\n\n const typeHint = options.type;\n const isVector =\n typeHint === 'vector2' ||\n (valueType === 'object' &&\n value !== null &&\n 'x' in (value as object) &&\n 'y' in (value as object));\n const isSize =\n typeHint === 'size' ||\n (valueType === 'object' &&\n value !== null &&\n 'width' in (value as object) &&\n 'height' in (value as object));\n\n if (isVector || isSize) {\n const record = value as Record<string, unknown>;\n const axes = isSize ? (['width', 'height'] as const) : (['x', 'y'] as const);\n const baseLabel = resolveLabel(options, path) ?? componentName;\n const out: SceneEditFieldDescriptor[] = [];\n for (const axis of axes) {\n const axisValue = record[axis];\n const axisType = resolveValueType(axisValue);\n if (axisType === 'unsupported' || axisType === 'object') continue;\n const axisPath = [...path, axis];\n out.push({\n path: axisPath,\n value: axisValue,\n valueType: axisType,\n label: `${baseLabel} ${axis.toUpperCase()}`,\n description,\n group: options.group ?? componentName,\n editorKind: mapEditorKind(options, axisType),\n numberMeta: buildNumberMeta(options),\n persistTarget: componentName === 'Transform' ? 'gameObjectConstructor' : 'component',\n });\n }\n return out;\n }\n\n if (valueType === 'object') {\n return [];\n }\n\n const label = resolveLabel(options, path);\n if (!label) {\n return [];\n }\n\n return [\n {\n path,\n value: cloneJsonSafe(value),\n valueType,\n label,\n description,\n group: options.group ?? componentName,\n editorKind: mapEditorKind(options, valueType),\n enumOptions: options.enumOptions,\n numberMeta: buildNumberMeta(options),\n persistTarget: componentName === 'Transform' ? 'gameObjectConstructor' : 'component',\n },\n ];\n}\n\nfunction serializeComponent(comp: Component): SceneEditFieldDescriptor[] {\n const componentName = comp.name;\n const schema = collectSchemaProps(comp);\n if (schema.length === 0) {\n return [];\n }\n\n const out: SceneEditFieldDescriptor[] = [];\n const record = comp as unknown as Record<string, unknown>;\n\n for (const prop of schema) {\n const value = record[prop.key];\n if (typeof value === 'function') continue;\n out.push(...leafDescriptorsFromValue(componentName, prop, [prop.key], value));\n }\n\n return out;\n}\n\nexport function readSourceAnchor(go: GameObject): SceneSourceAnchor | undefined {\n const tag = go.getComponent(CombosDevelopmentToolTarget);\n const raw = tag?.payload?.source;\n if (!isSceneSourceAnchor(raw)) return undefined;\n return {\n file: raw.file,\n anchor: raw.anchor ?? go.name,\n };\n}\n\nexport function buildGameObjectSnapshot(go: GameObject): SceneEditGameObjectSnapshot {\n const components: SceneEditComponentSnapshot[] = go.components\n .filter(c => c.name !== 'CombosDevelopmentToolTarget')\n .map(c => ({\n componentName: c.name,\n fieldDescriptors: serializeComponent(c),\n }))\n .filter(c => c.fieldDescriptors.length > 0);\n\n return {\n id: go.id,\n name: go.name,\n components,\n source: readSourceAnchor(go),\n };\n}\n\nexport function applyPropertyValue(\n go: GameObject,\n componentName: string,\n path: string[],\n value: unknown,\n): boolean {\n const comp = go.getComponent(componentName);\n if (!comp || !path.length) return false;\n\n let target: Record<string, unknown> = comp as unknown as Record<string, unknown>;\n for (let i = 0; i < path.length - 1; i++) {\n const key = path[i];\n if (target[key] === undefined || target[key] === null) {\n target[key] = {};\n }\n target = target[key] as Record<string, unknown>;\n }\n\n target[path[path.length - 1]] = value;\n return true;\n}\n\nexport function readPropertyValue(\n go: GameObject,\n componentName: string,\n path: string[],\n): unknown {\n const comp = go.getComponent(componentName);\n if (!comp || !path.length) return undefined;\n\n let target: unknown = comp;\n for (const key of path) {\n if (target === null || target === undefined || typeof target !== 'object') {\n return undefined;\n }\n target = (target as Record<string, unknown>)[key];\n }\n return target;\n}\n","import type { Component, GameObject } from '@combos-fun/engine';\nimport { applyPropertyValue } from './sceneEditSerialize';\n\ntype SceneEditApplyHook = (\n go: GameObject,\n comp: Component,\n path: string[],\n value: unknown,\n) => boolean;\n\nconst TRANSFORM_VECTOR_KEYS = new Set([\n 'position',\n 'size',\n 'origin',\n 'anchor',\n 'scale',\n 'skew',\n]);\n\ntype PhysicsLike = {\n body?: { position: { x: number; y: number }; angle?: number };\n bodyParams?: { stopRotation?: boolean };\n Body?: { setPosition: (body: unknown, pos: { x: number; y: number }) => void; setAngle?: (body: unknown, angle: number) => void };\n};\n\ntype MoverLike = Component & {\n originX: number;\n originY: number;\n};\n\nfunction asNumber(value: unknown): number | undefined {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === 'string' && value.trim() !== '') {\n const next = Number(value);\n return Number.isFinite(next) ? next : undefined;\n }\n return undefined;\n}\n\nfunction syncPhysicsBodyFromTransform(go: GameObject): void {\n const physics = go.getComponent('Physics') as PhysicsLike | undefined;\n if (!physics?.body) {\n return;\n }\n\n const { x, y } = go.transform.position;\n if (physics.Body?.setPosition) {\n physics.Body.setPosition(physics.body, { x, y });\n return;\n }\n\n physics.body.position.x = x;\n physics.body.position.y = y;\n}\n\nfunction syncMoverOriginFromTransform(go: GameObject): void {\n const mover = go.getComponent<MoverLike>('PlatformerMover');\n if (!mover) {\n return;\n }\n mover.originX = go.transform.position.x;\n mover.originY = go.transform.position.y;\n}\n\nfunction applyTransformProperty(\n go: GameObject,\n _comp: Component,\n path: string[],\n value: unknown,\n): boolean {\n const transform = go.transform;\n const transformRecord = transform as unknown as Record<string, unknown>;\n\n if (path.length === 1 && path[0] === 'rotation') {\n const next = asNumber(value);\n if (next === undefined) {\n return false;\n }\n transform.rotation = next;\n return true;\n }\n\n if (path.length === 2 && TRANSFORM_VECTOR_KEYS.has(path[0])) {\n const groupKey = path[0];\n const leafKey = path[1];\n const next = asNumber(value);\n if (next === undefined) {\n return false;\n }\n\n const group = transformRecord[groupKey];\n if (!group || typeof group !== 'object') {\n return false;\n }\n\n (group as Record<string, unknown>)[leafKey] = next;\n\n if (groupKey === 'position') {\n syncPhysicsBodyFromTransform(go);\n syncMoverOriginFromTransform(go);\n }\n\n return true;\n }\n\n return false;\n}\n\nfunction applyTextProperty(\n _go: GameObject,\n comp: Component,\n path: string[],\n value: unknown,\n): boolean {\n const textComp = comp as Component & { text?: string; style?: Record<string, unknown> };\n\n if (path.length === 1 && path[0] === 'text') {\n textComp.text = String(value ?? '');\n return true;\n }\n\n if (path.length === 2 && path[0] === 'style') {\n const styleKey = path[1];\n const nextStyle = { ...(textComp.style ?? {}), [styleKey]: value };\n textComp.style = nextStyle;\n return true;\n }\n\n return false;\n}\n\nfunction applySoundProperty(\n _go: GameObject,\n comp: Component,\n path: string[],\n value: unknown,\n): boolean {\n const soundComp = comp as Component & { volume?: number };\n\n if (\n (path.length === 1 && path[0] === 'volume') ||\n (path.length === 2 && path[0] === 'config' && path[1] === 'volume')\n ) {\n const next = asNumber(value);\n if (next === undefined) {\n return false;\n }\n soundComp.volume = next;\n return true;\n }\n\n return false;\n}\n\nconst APPLY_HOOKS: Record<string, SceneEditApplyHook> = {\n Transform: applyTransformProperty,\n Text: applyTextProperty,\n Sound: applySoundProperty,\n};\n\nexport function applyPropertyWithHooks(\n go: GameObject,\n componentName: string,\n path: string[],\n value: unknown,\n): boolean {\n const comp = go.getComponent(componentName);\n if (!comp || !path.length) {\n return false;\n }\n\n const hook = APPLY_HOOKS[componentName];\n if (hook?.(go, comp, path, value)) {\n return true;\n }\n\n return applyPropertyValue(go, componentName, path, value);\n}\n","import {\n COMBOS_DEVELOPMENT_TOOL_CLEAR_SELECTION,\n COMBOS_DEVELOPMENT_TOOL_GAMEOBJECT_DESELECTED,\n} from './constants';\n\nexport type DevelopmentToolDeselectReason = 'parent-request' | 'pick-disabled' | 'target-removed';\n\nexport function buildGameObjectDeselectedPayload(reason: DevelopmentToolDeselectReason) {\n return {\n type: COMBOS_DEVELOPMENT_TOOL_GAMEOBJECT_DESELECTED,\n reason,\n } as const;\n}\n\nexport function shouldNotifyGameObjectDeselected(hadSelection: boolean): boolean {\n return hadSelection;\n}\n\nexport function isClearSelectionMessage(data: unknown): boolean {\n if (!data || typeof data !== 'object') {\n return false;\n }\n return (data as { type?: string }).type === COMBOS_DEVELOPMENT_TOOL_CLEAR_SELECTION;\n}\n","/** Axis-aligned rectangle in overlay CSS pixels. */\nexport type ScreenRect = { x: number; y: number; width: number; height: number };\n\nexport type DesignSize = { width: number; height: number };\n\nexport type Vec2 = { x: number; y: number };\nexport type Size2 = { width: number; height: number };\n\nexport interface TransformLike {\n position: Vec2;\n size: Size2;\n origin: Vec2;\n anchor: Vec2;\n scale: Vec2;\n skew: Vec2;\n rotation: number;\n parent: TransformLike | null;\n}\n\nexport interface Transform3DLike {\n worldPositionX?: number;\n worldPositionY?: number;\n worldPositionZ?: number;\n positionX?: number;\n positionY?: number;\n positionZ?: number;\n scaleX?: number;\n scaleY?: number;\n scaleZ?: number;\n}\n\nexport interface CameraLike {\n matrixWorldInverse?: { elements?: ArrayLike<number> };\n projectionMatrix?: { elements?: ArrayLike<number> };\n}\n\nexport interface Object3DLike {\n updateWorldMatrix?: (updateParents: boolean, updateChildren: boolean) => void;\n traverse?: (fn: (obj: Object3DLike) => void) => void;\n geometry?: {\n computeBoundingBox?: () => void;\n boundingBox?: { min: { x: number; y: number; z: number }; max: { x: number; y: number; z: number } } | null;\n };\n matrixWorld?: { elements?: ArrayLike<number> };\n}\n\nexport interface GameLike {\n getSystem?: (name: string) => unknown;\n canvas?: HTMLCanvasElement | null;\n}\n\nexport interface ProjectableObject {\n id: number;\n getComponent: (name: string) => unknown;\n transform: TransformLike;\n}\n\n/** Screen-space pad used when a target has no positive size / projected extent. */\nexport const DEFAULT_POINT_EXTENT = 32;\n\ntype Mat2 = { a: number; b: number; c: number; d: number; tx: number; ty: number };\n\nfunction identityMat(): Mat2 {\n return { a: 1, b: 0, c: 0, d: 1, tx: 0, ty: 0 };\n}\n\nfunction multiplyMat(p: Mat2, l: Mat2): Mat2 {\n return {\n a: p.a * l.a + p.c * l.b,\n b: p.b * l.a + p.d * l.b,\n c: p.a * l.c + p.c * l.d,\n d: p.b * l.c + p.d * l.d,\n tx: p.a * l.tx + p.c * l.ty + p.tx,\n ty: p.b * l.tx + p.d * l.ty + p.ty,\n };\n}\n\nfunction applyMat(m: Mat2, x: number, y: number): Vec2 {\n return {\n x: m.a * x + m.c * y + m.tx,\n y: m.b * x + m.d * y + m.ty,\n };\n}\n\n/**\n * Local matrix matching `plugin-renderer` ContainerManager:\n * position (+ parent size * anchor), rotation, scale, pivot = size * origin.\n */\nexport function localTransformMatrix(t: TransformLike): Mat2 {\n const x = t.position.x + (t.parent ? t.parent.size.width * t.anchor.x : 0);\n const y = t.position.y + (t.parent ? t.parent.size.height * t.anchor.y : 0);\n const pivotX = t.size.width * t.origin.x;\n const pivotY = t.size.height * t.origin.y;\n const cos = Math.cos(t.rotation);\n const sin = Math.sin(t.rotation);\n const a = cos * t.scale.x;\n const b = sin * t.scale.x;\n const c = -sin * t.scale.y;\n const d = cos * t.scale.y;\n return {\n a,\n b,\n c,\n d,\n tx: x - (pivotX * a + pivotY * c),\n ty: y - (pivotX * b + pivotY * d),\n };\n}\n\nexport function worldTransformMatrix(t: TransformLike): Mat2 {\n const chain: TransformLike[] = [];\n let cur: TransformLike | null = t;\n while (cur) {\n chain.push(cur);\n cur = cur.parent;\n }\n chain.reverse();\n let m = identityMat();\n for (const node of chain) {\n m = multiplyMat(m, localTransformMatrix(node));\n }\n return m;\n}\n\nexport function aabbFromPoints(points: ReadonlyArray<Vec2>): ScreenRect | null {\n if (points.length === 0) return null;\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (const p of points) {\n if (!Number.isFinite(p.x) || !Number.isFinite(p.y)) continue;\n minX = Math.min(minX, p.x);\n minY = Math.min(minY, p.y);\n maxX = Math.max(maxX, p.x);\n maxY = Math.max(maxY, p.y);\n }\n if (!Number.isFinite(minX) || !Number.isFinite(minY)) return null;\n return { x: minX, y: minY, width: maxX - minX, height: maxY - minY };\n}\n\nexport function designToCss(point: Vec2, design: DesignSize | null, css: DesignSize): Vec2 {\n if (!design || design.width <= 0 || design.height <= 0) {\n return { x: point.x, y: point.y };\n }\n return {\n x: point.x * (css.width / design.width),\n y: point.y * (css.height / design.height),\n };\n}\n\nexport function cssToDesign(point: Vec2, design: DesignSize | null, css: DesignSize): Vec2 {\n if (!design || design.width <= 0 || design.height <= 0 || css.width <= 0 || css.height <= 0) {\n return { x: point.x, y: point.y };\n }\n return {\n x: point.x * (design.width / css.width),\n y: point.y * (design.height / css.height),\n };\n}\n\nfunction readPositiveNumber(value: unknown): number | null {\n return typeof value === 'number' && Number.isFinite(value) && value > 0 ? value : null;\n}\n\nexport function resolveDesignSize(game: GameLike | null | undefined): DesignSize | null {\n const renderer = game?.getSystem?.('Renderer') as\n | {\n application?: { screen?: { width?: number; height?: number } };\n params?: { width?: number; height?: number };\n }\n | undefined;\n const screen = renderer?.application?.screen;\n const sw = readPositiveNumber(screen?.width);\n const sh = readPositiveNumber(screen?.height);\n if (sw && sh) {\n return { width: sw, height: sh };\n }\n const pw = readPositiveNumber(renderer?.params?.width);\n const ph = readPositiveNumber(renderer?.params?.height);\n if (pw && ph) {\n return { width: pw, height: ph };\n }\n return null;\n}\n\nexport function resolveCamera(game: GameLike | null | undefined): CameraLike | null {\n const renderer = game?.getSystem?.('Renderer3DSystem') as\n | { threeContext?: { camera?: CameraLike } }\n | undefined;\n return renderer?.threeContext?.camera ?? null;\n}\n\nexport function resolveObject3D(game: GameLike | null | undefined, id: number): Object3DLike | null {\n const renderer = game?.getSystem?.('Renderer3DSystem') as\n | { threeContext?: { nodes?: { get?: (key: number) => Object3DLike | undefined } } }\n | undefined;\n return renderer?.threeContext?.nodes?.get?.(id) ?? null;\n}\n\nfunction asTransform3D(value: unknown): Transform3DLike | null {\n if (!value || typeof value !== 'object') return null;\n const t = value as Transform3DLike;\n const hasWorld = [t.worldPositionX, t.worldPositionY, t.worldPositionZ].some(\n v => typeof v === 'number' && Number.isFinite(v),\n );\n const hasLocal = [t.positionX, t.positionY, t.positionZ].some(\n v => typeof v === 'number' && Number.isFinite(v),\n );\n return hasWorld || hasLocal ? t : null;\n}\n\nfunction multiplyMat4Vec4(\n m: ArrayLike<number>,\n x: number,\n y: number,\n z: number,\n w: number,\n): [number, number, number, number] {\n return [\n m[0] * x + m[4] * y + m[8] * z + m[12] * w,\n m[1] * x + m[5] * y + m[9] * z + m[13] * w,\n m[2] * x + m[6] * y + m[10] * z + m[14] * w,\n m[3] * x + m[7] * y + m[11] * z + m[15] * w,\n ];\n}\n\nexport function projectWorldPoint(\n x: number,\n y: number,\n z: number,\n camera: CameraLike,\n css: DesignSize,\n): (Vec2 & { depth: number }) | null {\n const view = camera.matrixWorldInverse?.elements;\n const proj = camera.projectionMatrix?.elements;\n if (!view || view.length < 16 || !proj || proj.length < 16) {\n return null;\n }\n if (css.width <= 0 || css.height <= 0) {\n return null;\n }\n\n const viewed = multiplyMat4Vec4(view, x, y, z, 1);\n const clip = multiplyMat4Vec4(proj, viewed[0], viewed[1], viewed[2], viewed[3]);\n if (!Number.isFinite(clip[3]) || Math.abs(clip[3]) < 1e-8) {\n return null;\n }\n if (clip[3] < 0) {\n return null;\n }\n\n const ndcX = clip[0] / clip[3];\n const ndcY = clip[1] / clip[3];\n const ndcZ = clip[2] / clip[3];\n return {\n x: (ndcX + 1) * 0.5 * css.width,\n y: (1 - ndcY) * 0.5 * css.height,\n depth: ndcZ,\n };\n}\n\nfunction transformMat4Point(\n m: ArrayLike<number>,\n x: number,\n y: number,\n z: number,\n): [number, number, number] {\n const w = m[3] * x + m[7] * y + m[11] * z + m[15];\n const invW = Math.abs(w) < 1e-8 ? 1 : 1 / w;\n return [\n (m[0] * x + m[4] * y + m[8] * z + m[12]) * invW,\n (m[1] * x + m[5] * y + m[9] * z + m[13]) * invW,\n (m[2] * x + m[6] * y + m[10] * z + m[14]) * invW,\n ];\n}\n\nfunction collectObject3DWorldCorners(node: Object3DLike): Array<[number, number, number]> {\n const corners: Array<[number, number, number]> = [];\n const visit = (obj: Object3DLike) => {\n const geo = obj.geometry;\n if (!geo) return;\n geo.computeBoundingBox?.();\n const box = geo.boundingBox;\n const m = obj.matrixWorld?.elements;\n if (!box || !m || m.length < 16) return;\n const { min, max } = box;\n for (const x of [min.x, max.x]) {\n for (const y of [min.y, max.y]) {\n for (const z of [min.z, max.z]) {\n corners.push(transformMat4Point(m, x, y, z));\n }\n }\n }\n };\n\n node.updateWorldMatrix?.(true, true);\n if (typeof node.traverse === 'function') {\n node.traverse(visit);\n } else {\n visit(node);\n }\n return corners;\n}\n\nfunction padAround(point: Vec2, extent: number): ScreenRect {\n const size = Math.max(1, extent);\n return {\n x: point.x - size / 2,\n y: point.y - size / 2,\n width: size,\n height: size,\n };\n}\n\nexport function projectTransform2D(\n transform: TransformLike,\n css: DesignSize,\n design: DesignSize | null,\n): ScreenRect {\n const matrix = worldTransformMatrix(transform);\n const width = transform.size.width;\n const height = transform.size.height;\n const localCorners: Vec2[] =\n width > 0 && height > 0\n ? [\n { x: 0, y: 0 },\n { x: width, y: 0 },\n { x: width, y: height },\n { x: 0, y: height },\n ]\n : [{ x: 0, y: 0 }];\n\n const world = localCorners.map(p => applyMat(matrix, p.x, p.y));\n const screen = world.map(p => designToCss(p, design, css));\n const aabb = aabbFromPoints(screen);\n if (aabb && aabb.width > 0 && aabb.height > 0) {\n return aabb;\n }\n const origin = screen[0] ?? { x: 0, y: 0 };\n return padAround(origin, 1);\n}\n\nexport function projectTransform3D(\n transform: Transform3DLike,\n camera: CameraLike,\n css: DesignSize,\n object3D?: Object3DLike | null,\n): ScreenRect | null {\n if (object3D) {\n const corners = collectObject3DWorldCorners(object3D);\n const projected = corners\n .map(([x, y, z]) => projectWorldPoint(x, y, z, camera, css))\n .filter((p): p is Vec2 & { depth: number } => p != null);\n const aabb = aabbFromPoints(projected);\n if (aabb && aabb.width > 0 && aabb.height > 0) {\n return aabb;\n }\n }\n\n const x = transform.worldPositionX ?? transform.positionX ?? 0;\n const y = transform.worldPositionY ?? transform.positionY ?? 0;\n const z = transform.worldPositionZ ?? transform.positionZ ?? 0;\n const projected = projectWorldPoint(x, y, z, camera, css);\n if (!projected) return null;\n\n const scale = Math.max(\n Math.abs(transform.scaleX ?? 1),\n Math.abs(transform.scaleY ?? 1),\n Math.abs(transform.scaleZ ?? 1),\n 1,\n );\n return padAround(projected, DEFAULT_POINT_EXTENT * scale);\n}\n\nexport function projectGameObjectToScreen(\n go: ProjectableObject,\n opts: {\n css: DesignSize;\n design?: DesignSize | null;\n camera?: CameraLike | null;\n object3D?: Object3DLike | null;\n },\n): ScreenRect | null {\n if (opts.css.width <= 0 || opts.css.height <= 0) {\n return null;\n }\n\n const t3d = asTransform3D(go.getComponent('Transform3D'));\n if (t3d && opts.camera) {\n return projectTransform3D(t3d, opts.camera, opts.css, opts.object3D);\n }\n\n return projectTransform2D(go.transform, opts.css, opts.design ?? null);\n}\n\nexport function rectContains(rect: ScreenRect, x: number, y: number): boolean {\n return x >= rect.x && y >= rect.y && x <= rect.x + rect.width && y <= rect.y + rect.height;\n}\n\n/** Smallest containing rect wins; later items win ties (front-most in walk order). */\nexport function hitTestRects<T>(\n x: number,\n y: number,\n items: ReadonlyArray<{ id: T; rect: ScreenRect }>,\n): T | null {\n let best: { id: T; area: number; index: number } | null = null;\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n if (!rectContains(item.rect, x, y)) continue;\n const area = Math.max(item.rect.width, 0) * Math.max(item.rect.height, 0);\n if (!best || area < best.area || (area === best.area && i > best.index)) {\n best = { id: item.id, area, index: i };\n }\n }\n return best ? best.id : null;\n}\n\nexport function rectsEqual(a: ScreenRect, b: ScreenRect, eps = 0.01): boolean {\n return (\n Math.abs(a.x - b.x) < eps &&\n Math.abs(a.y - b.y) < eps &&\n Math.abs(a.width - b.width) < eps &&\n Math.abs(a.height - b.height) < eps\n );\n}\n","import {\n ComponentChanged,\n GameObject,\n OBSERVER_TYPE,\n System,\n UpdateParams,\n decorators,\n} from '@combos-fun/engine';\nimport {\n COMBOS_DEVELOPMENT_TOOL_APPLY_PROPERTY,\n COMBOS_DEVELOPMENT_TOOL_GAMEOBJECT_SELECTED,\n COMBOS_DEVELOPMENT_TOOL_MARKER_OVERLAY_SUCCESS,\n COMBOS_DEVELOPMENT_TOOL_REFRESH,\n COMBOS_DEVELOPMENT_TOOL_PICK_MODE_SUCCESS,\n COMBOS_DEVELOPMENT_TOOL_SET_MARKER_OVERLAY,\n COMBOS_DEVELOPMENT_TOOL_SET_PICK_MODE,\n} from './constants';\nimport CombosDevelopmentToolTarget from './CombosDevelopmentToolTarget';\nimport { CanvasMarkerGraphics } from './canvasMarkerGraphics';\nimport {\n MARKER_ICON_SIZE,\n drawMarkerIcon,\n resolveMarkerDef,\n} from './markerLayer';\nimport {\n isAllowedMessageOrigin,\n mergeAllowedMessageOrigins,\n} from './messageOrigin';\nimport { createOverlayCanvas, type OverlayCanvasHandle } from './overlayCanvas';\nimport { applyPropertyWithHooks } from './sceneEditApplyHooks';\nimport { buildGameObjectSnapshot, readSourceAnchor } from './sceneEditSerialize';\nimport {\n buildGameObjectDeselectedPayload,\n isClearSelectionMessage,\n shouldNotifyGameObjectDeselected,\n type DevelopmentToolDeselectReason,\n} from './selectionNotify';\nimport {\n cssToDesign,\n hitTestRects,\n projectGameObjectToScreen,\n resolveCamera,\n resolveDesignSize,\n resolveObject3D,\n type ScreenRect,\n} from './screenSpace';\n\nimport type { SceneSourceAnchor } from './sceneEditTypes';\n\ntype ApplyPropertyPayload = {\n gameObjectId?: number;\n source?: SceneSourceAnchor;\n componentName?: string;\n path?: string[];\n value?: unknown;\n};\n\nexport interface CombosDevelopmentToolSystemParams {\n /** postMessage `targetOrigin` when notifying parent (default `'*'`). */\n postMessageOrigin?: string;\n /**\n * Extra inbound `postMessage` origins merged with {@link DEFAULT_ALLOWED_MESSAGE_HOST_SUFFIXES}.\n * Each entry is a host suffix (e.g. `localhost`) or full origin. Pass `['*']` to accept any origin.\n */\n allowedMessageOrigins?: string[];\n}\n\nconst OUTLINE_GO_NAME = '__combosDevelopmentToolOutline';\nconst MARKER_GO_NAME_PREFIX = '__combosDevelopmentToolMarker:';\nconst OUTLINE_COLOR = '#55ffaa';\n\ntype SetPayload = { enabled?: boolean };\n\ntype SoundSystemLike = {\n muted: boolean;\n};\n\ntype OverlayHit = { go: GameObject; rect: ScreenRect };\n\n/**\n * **Off** at start. While enabled:\n * - a transparent HTML canvas overlay captures pointer events (game Event / Event3D\n * do not receive the tap);\n * - only nodes with {@link CombosDevelopmentToolTarget} are pickable;\n * - selection outline and markers are drawn with the Canvas 2D API (no renderer plugin).\n *\n * Turn on/off via:\n * - `window.dispatchEvent(new CustomEvent(COMBOS_DEVELOPMENT_TOOL_SET_PICK_MODE, { detail: { enabled: true } }))`\n * - `window.postMessage({ type: COMBOS_DEVELOPMENT_TOOL_SET_PICK_MODE, enabled: true }, targetOrigin)` (e.g. from parent iframe)\n * - `game.emit(COMBOS_DEVELOPMENT_TOOL_SET_PICK_MODE, { enabled: true })` or `getSystem(CombosDevelopmentToolSystem).setEnabled(true)`\n *\n * Mute is owned by `@combos-fun/plugin-sound` (`combos-development-tool:set-muted` /\n * `SoundSystem.setMuted`). This system still forwards `.setMuted()` to\n * `SoundSystem` so older in-game callers keep working.\n *\n * Play / pause / resume are handled by the engine core lifecycle protocol\n * (`combos-game:set-playing` / `combos-game:state-changed`), not this tool.\n *\n * While enabled: `game.emit(COMBOS_DEVELOPMENT_TOOL_REFRESH)`, `window` event `combos-development-tool:refresh`,\n * or `postMessage({ type: 'combos-development-tool:refresh' })` after adding/removing objects.\n */\n@decorators.componentObserver({\n CombosDevelopmentToolTarget: [],\n})\nexport default class CombosDevelopmentToolSystem extends System<CombosDevelopmentToolSystemParams> {\n static systemName = 'CombosDevelopmentToolSystem';\n\n private postMessageOrigin = '*';\n private allowedMessageOrigins = mergeAllowedMessageOrigins();\n private enabled = false;\n private selected: GameObject | null = null;\n private overlay: OverlayCanvasHandle | null = null;\n private overlayCss = { width: 0, height: 0 };\n private pointerDownGoId: number | null = null;\n private needsRescan = false;\n\n /** Remembered mute when `SoundSystem` is not registered yet. */\n private mutedWithoutSoundSystem = false;\n\n /**\n * Marker overlay (see {@link markerLayer}): a visual-only icon layer, toggled\n * independently of pick mode + mute. Selection/persistence still go through\n * `CombosDevelopmentToolTarget` (added by the Vite plugin).\n */\n private markerOverlayEnabled = false;\n private needsMarkerRescan = false;\n /** ownerGoId → marker def currently shown. */\n private readonly markerOwners = new Set<number>();\n\n private readonly onWindowSetPickMode = (e: globalThis.Event) => {\n const d = (e as unknown as CustomEvent<SetPayload>).detail;\n if (d && typeof d.enabled === 'boolean') {\n this.setEnabled(d.enabled);\n }\n };\n\n private readonly onWindowSetMarkerOverlay = (e: globalThis.Event) => {\n const d = (e as unknown as CustomEvent<SetPayload>).detail;\n if (d && typeof d.enabled === 'boolean') {\n this.setMarkerOverlay(d.enabled);\n }\n };\n\n private readonly onGameSetMarkerOverlay = (payload: SetPayload) => {\n if (payload && typeof payload.enabled === 'boolean') {\n this.setMarkerOverlay(payload.enabled);\n }\n };\n\n private readonly onWindowMessage = (e: MessageEvent) => {\n if (!isAllowedMessageOrigin(e.origin, this.allowedMessageOrigins)) {\n return;\n }\n\n const d = e.data;\n if (!d || typeof d !== 'object') return;\n if (d.type === COMBOS_DEVELOPMENT_TOOL_SET_PICK_MODE && typeof d.enabled === 'boolean') {\n this.setEnabled(d.enabled);\n } else if (\n d.type === COMBOS_DEVELOPMENT_TOOL_SET_MARKER_OVERLAY &&\n typeof d.enabled === 'boolean'\n ) {\n this.setMarkerOverlay(d.enabled);\n } else if (d.type === COMBOS_DEVELOPMENT_TOOL_REFRESH) {\n this.requestSceneRescan();\n } else if (isClearSelectionMessage(d)) {\n this.clearSelectionAndNotify('parent-request');\n } else if (d.type === COMBOS_DEVELOPMENT_TOOL_APPLY_PROPERTY) {\n this.handleApplyProperty(d as ApplyPropertyPayload);\n }\n };\n\n private readonly onGameSetPickMode = (payload: SetPayload) => {\n if (payload && typeof payload.enabled === 'boolean') {\n this.setEnabled(payload.enabled);\n }\n };\n\n private readonly onGameRefresh = () => {\n this.requestSceneRescan();\n };\n\n private readonly onWindowRefresh = () => {\n this.requestSceneRescan();\n };\n\n private readonly onPointerDown = (e: PointerEvent) => {\n if (!this.enabled) return;\n e.preventDefault();\n e.stopPropagation();\n try {\n this.overlay?.canvas.setPointerCapture(e.pointerId);\n } catch {\n /* ignore */\n }\n const hit = this.hitTestPointer(e);\n this.pointerDownGoId = hit?.id ?? null;\n };\n\n private readonly onPointerUp = (e: PointerEvent) => {\n if (!this.enabled) return;\n e.preventDefault();\n e.stopPropagation();\n const hit = this.hitTestPointer(e);\n if (hit && hit.id === this.pointerDownGoId) {\n this.onSelect(hit, e);\n }\n this.pointerDownGoId = null;\n };\n\n init(params?: CombosDevelopmentToolSystemParams) {\n this.postMessageOrigin = params?.postMessageOrigin ?? '*';\n this.allowedMessageOrigins = mergeAllowedMessageOrigins(params?.allowedMessageOrigins);\n\n this.overlay = createOverlayCanvas();\n if (this.overlay) {\n this.overlay.canvas.addEventListener('pointerdown', this.onPointerDown);\n this.overlay.canvas.addEventListener('pointerup', this.onPointerUp);\n }\n\n if (typeof window !== 'undefined') {\n window.addEventListener(COMBOS_DEVELOPMENT_TOOL_SET_PICK_MODE, this.onWindowSetPickMode);\n window.addEventListener(\n COMBOS_DEVELOPMENT_TOOL_SET_MARKER_OVERLAY,\n this.onWindowSetMarkerOverlay,\n );\n window.addEventListener(COMBOS_DEVELOPMENT_TOOL_REFRESH, this.onWindowRefresh);\n window.addEventListener('message', this.onWindowMessage);\n }\n this.game.on(COMBOS_DEVELOPMENT_TOOL_SET_PICK_MODE, this.onGameSetPickMode);\n this.game.on(COMBOS_DEVELOPMENT_TOOL_SET_MARKER_OVERLAY, this.onGameSetMarkerOverlay);\n this.game.on(COMBOS_DEVELOPMENT_TOOL_REFRESH, this.onGameRefresh);\n\n this.syncOverlayMode();\n if (this.enabled) {\n this.needsRescan = true;\n }\n }\n\n onDestroy() {\n if (this.overlay) {\n this.overlay.canvas.removeEventListener('pointerdown', this.onPointerDown);\n this.overlay.canvas.removeEventListener('pointerup', this.onPointerUp);\n this.overlay.destroy();\n this.overlay = null;\n }\n if (typeof window !== 'undefined') {\n window.removeEventListener(COMBOS_DEVELOPMENT_TOOL_SET_PICK_MODE, this.onWindowSetPickMode);\n window.removeEventListener(\n COMBOS_DEVELOPMENT_TOOL_SET_MARKER_OVERLAY,\n this.onWindowSetMarkerOverlay,\n );\n window.removeEventListener(COMBOS_DEVELOPMENT_TOOL_REFRESH, this.onWindowRefresh);\n window.removeEventListener('message', this.onWindowMessage);\n }\n this.game.off(COMBOS_DEVELOPMENT_TOOL_SET_PICK_MODE, this.onGameSetPickMode);\n this.game.off(COMBOS_DEVELOPMENT_TOOL_SET_MARKER_OVERLAY, this.onGameSetMarkerOverlay);\n this.game.off(COMBOS_DEVELOPMENT_TOOL_REFRESH, this.onGameRefresh);\n this.markerOwners.clear();\n this.clearSelectionAndNotify('pick-disabled');\n }\n\n /** Programmatic toggle (same effect as events). */\n setEnabled(on: boolean) {\n if (this.enabled === on) return;\n this.enabled = on;\n this.syncOverlayMode();\n if (!on) {\n this.clearSelectionAndNotify('pick-disabled');\n this.postSetSuccess(false);\n } else {\n this.needsRescan = true;\n this.redrawOverlay();\n }\n }\n\n get isEnabled(): boolean {\n return this.enabled;\n }\n\n /**\n * Toggle the marker overlay: pin a persistent icon on every object that owns a\n * registered invisible component ({@link markerLayer}, Sound first). Independent\n * of pick mode / mute. Selecting and persisting edits still go through the\n * owner's `CombosDevelopmentToolTarget`.\n */\n setMarkerOverlay(on: boolean) {\n if (this.markerOverlayEnabled === on) return;\n this.markerOverlayEnabled = on;\n this.syncOverlayMode();\n if (on) {\n this.needsMarkerRescan = true;\n } else {\n this.markerOwners.clear();\n this.postMarkerOverlaySuccess(false, []);\n this.redrawOverlay();\n }\n }\n\n get isMarkerOverlayEnabled(): boolean {\n return this.markerOverlayEnabled;\n }\n\n /** Master mute when `SoundSystem` exists; otherwise the last requested value. */\n get isMuted(): boolean {\n const sound = this.getSoundSystem();\n if (sound) {\n return sound.muted;\n }\n return this.mutedWithoutSoundSystem;\n }\n\n /**\n * @deprecated Host mute is handled by `@combos-fun/plugin-sound`.\n * Forwards to `SoundSystem.muted` when that system is registered.\n */\n setMuted(muted: boolean) {\n const sound = this.getSoundSystem();\n if (sound) {\n sound.muted = muted;\n return;\n }\n this.mutedWithoutSoundSystem = muted;\n }\n\n update() {\n if (this.enabled && this.needsRescan) {\n this.needsRescan = false;\n this.postSetSuccess(true);\n }\n\n if (this.markerOverlayEnabled && this.needsMarkerRescan) {\n this.needsMarkerRescan = false;\n this.attachMarkers();\n }\n\n if (this.selected?.destroyed) {\n this.clearSelectionAndNotify('target-removed');\n }\n }\n\n lateUpdate(_e: UpdateParams) {\n this.redrawOverlay();\n }\n\n componentChanged(changed: ComponentChanged) {\n const { type, gameObject, componentName } = changed;\n if (!gameObject || componentName !== 'CombosDevelopmentToolTarget') return;\n\n if (type === OBSERVER_TYPE.REMOVE && this.selected === gameObject) {\n this.clearSelectionAndNotify('target-removed');\n }\n\n if (this.markerOverlayEnabled) {\n this.needsMarkerRescan = true;\n }\n }\n\n /** Re-bind pick targets / markers after dynamic scene changes while active. */\n requestSceneRescan() {\n if (this.enabled) {\n this.needsRescan = true;\n }\n if (this.markerOverlayEnabled) {\n this.needsMarkerRescan = true;\n }\n }\n\n private syncOverlayMode() {\n const active = this.enabled || this.markerOverlayEnabled;\n this.overlay?.setVisible(active);\n this.overlay?.setPickEnabled(this.enabled);\n }\n\n private collectGameObjects(go: GameObject, out: GameObject[]) {\n out.push(go);\n for (const tr of go.transform.children) {\n this.collectGameObjects(tr.gameObject, out);\n }\n }\n\n private listSceneObjects(): GameObject[] {\n const list: GameObject[] = [];\n const scene = this.game.scene;\n if (!scene?.transform?.children) return list;\n for (const tr of scene.transform.children) {\n this.collectGameObjects(tr.gameObject, list);\n }\n return list;\n }\n\n private isIgnoredPickGo(go: GameObject): boolean {\n return go.name === OUTLINE_GO_NAME || this.isMarkerGo(go);\n }\n\n private isMarkerGo(go: GameObject): boolean {\n return typeof go.name === 'string' && go.name.startsWith(MARKER_GO_NAME_PREFIX);\n }\n\n private projectGo(go: GameObject): ScreenRect | null {\n return projectGameObjectToScreen(go, {\n css: this.overlayCss,\n design: resolveDesignSize(this.game),\n camera: resolveCamera(this.game),\n object3D: resolveObject3D(this.game, go.id),\n });\n }\n\n private collectOverlayHits(): OverlayHit[] {\n const hits: OverlayHit[] = [];\n for (const go of this.listSceneObjects()) {\n if (go.destroyed || this.isIgnoredPickGo(go)) continue;\n if (!go.getComponent(CombosDevelopmentToolTarget)) continue;\n const rect = this.projectGo(go);\n if (rect) {\n hits.push({ go, rect });\n }\n if (this.markerOverlayEnabled && resolveMarkerDef(go)) {\n const markerRect = this.markerRectFor(go, rect);\n if (markerRect) {\n hits.push({ go, rect: markerRect });\n }\n }\n }\n return hits;\n }\n\n private markerRectFor(go: GameObject, objectRect: ScreenRect | null): ScreenRect | null {\n const rect = objectRect ?? this.projectGo(go);\n if (!rect) return null;\n if (go.getComponent('Transform3D')) {\n return {\n x: rect.x + rect.width / 2 - MARKER_ICON_SIZE / 2,\n y: rect.y + rect.height / 2 - MARKER_ICON_SIZE / 2,\n width: MARKER_ICON_SIZE,\n height: MARKER_ICON_SIZE,\n };\n }\n return {\n x: rect.x,\n y: rect.y,\n width: MARKER_ICON_SIZE,\n height: MARKER_ICON_SIZE,\n };\n }\n\n private overlayPoint(e: PointerEvent): { x: number; y: number } {\n const canvas = this.overlay?.canvas;\n if (!canvas) return { x: 0, y: 0 };\n const rect = canvas.getBoundingClientRect();\n return { x: e.clientX - rect.left, y: e.clientY - rect.top };\n }\n\n private hitTestPointer(e: PointerEvent): GameObject | null {\n const pt = this.overlayPoint(e);\n const hits = this.collectOverlayHits();\n return hitTestRects(\n pt.x,\n pt.y,\n hits.map(h => ({ id: h.go, rect: h.rect })),\n );\n }\n\n private redrawOverlay() {\n const overlay = this.overlay;\n if (!overlay) return;\n\n const active = this.enabled || this.markerOverlayEnabled;\n if (!active) {\n overlay.setVisible(false);\n return;\n }\n\n const gameCanvas = this.game.canvas ?? this.game.scene?.canvas;\n if (!gameCanvas) return;\n\n const css = overlay.sync(gameCanvas);\n if (!css) return;\n this.overlayCss = css;\n\n overlay.ctx.clearRect(0, 0, css.width, css.height);\n this.drawMarkers(overlay.ctx);\n this.drawSelectionOutline(overlay.ctx);\n }\n\n private drawMarkers(ctx: CanvasRenderingContext2D) {\n if (!this.markerOverlayEnabled) return;\n\n const gfx = new CanvasMarkerGraphics(ctx);\n for (const go of this.listSceneObjects()) {\n if (go.destroyed || this.isIgnoredPickGo(go)) continue;\n const def = resolveMarkerDef(go);\n if (!def) continue;\n const objectRect = this.projectGo(go);\n const rect = this.markerRectFor(go, objectRect);\n if (!rect) continue;\n ctx.save();\n ctx.translate(rect.x, rect.y);\n drawMarkerIcon(gfx, def, MARKER_ICON_SIZE);\n ctx.restore();\n }\n }\n\n private drawSelectionOutline(ctx: CanvasRenderingContext2D) {\n if (!this.enabled || !this.selected || this.selected.destroyed) return;\n const rect = this.projectGo(this.selected);\n if (!rect) return;\n\n const design = resolveDesignSize(this.game);\n const scale = design ? this.overlayCss.width / design.width : 1;\n ctx.save();\n ctx.strokeStyle = OUTLINE_COLOR;\n ctx.lineWidth = Math.max(2, 4 * (Number.isFinite(scale) && scale > 0 ? scale : 1));\n ctx.strokeRect(rect.x, rect.y, rect.width, rect.height);\n ctx.restore();\n }\n\n private postSetSuccess(enabled: boolean) {\n const payload = {\n type: COMBOS_DEVELOPMENT_TOOL_PICK_MODE_SUCCESS,\n enabled,\n };\n if (typeof window !== 'undefined' && window.parent && window.parent !== window) {\n window.parent.postMessage(payload, this.postMessageOrigin);\n }\n this.game.emit(COMBOS_DEVELOPMENT_TOOL_PICK_MODE_SUCCESS, { enabled });\n }\n\n private attachMarkers() {\n this.markerOwners.clear();\n\n const counts = new Map<string, number>();\n for (const go of this.listSceneObjects()) {\n if (this.isIgnoredPickGo(go)) continue;\n const def = resolveMarkerDef(go);\n if (!def) continue;\n this.markerOwners.add(go.id);\n counts.set(def.componentName, (counts.get(def.componentName) ?? 0) + 1);\n }\n\n const markers = [...counts.entries()].map(([componentName, count]) => ({\n componentName,\n count,\n }));\n this.postMarkerOverlaySuccess(true, markers);\n this.redrawOverlay();\n }\n\n private postMarkerOverlaySuccess(\n enabled: boolean,\n markers: Array<{ componentName: string; count: number }>,\n ) {\n const total = markers.reduce((sum, m) => sum + m.count, 0);\n const state = { enabled, total, markers };\n const payload = {\n type: COMBOS_DEVELOPMENT_TOOL_MARKER_OVERLAY_SUCCESS,\n ...state,\n };\n if (typeof window !== 'undefined' && window.parent && window.parent !== window) {\n window.parent.postMessage(payload, this.postMessageOrigin);\n }\n this.game.emit(COMBOS_DEVELOPMENT_TOOL_MARKER_OVERLAY_SUCCESS, state);\n }\n\n private getSoundSystem(): SoundSystemLike | null {\n const system = this.game.getSystem('SoundSystem') as unknown;\n if (\n !system ||\n typeof system !== 'object' ||\n !('muted' in system) ||\n typeof (system as SoundSystemLike).muted !== 'boolean'\n ) {\n return null;\n }\n return system as SoundSystemLike;\n }\n\n private onSelect(go: GameObject, e: PointerEvent) {\n if (!this.enabled) return;\n\n this.selected = go;\n this.redrawOverlay();\n\n const overlayPt = this.overlayPoint(e);\n const pointer = cssToDesign(overlayPt, resolveDesignSize(this.game), this.overlayCss);\n const snapshot = buildGameObjectSnapshot(go);\n const payload = {\n type: COMBOS_DEVELOPMENT_TOOL_GAMEOBJECT_SELECTED,\n snapshot,\n pointer,\n };\n if (typeof window !== 'undefined' && window.parent && window.parent !== window) {\n window.parent.postMessage(payload, this.postMessageOrigin);\n }\n }\n\n private findGameObjectById(id: number): GameObject | null {\n return this.listSceneObjects().find(go => go.id === id) ?? null;\n }\n\n private findGameObjectBySource(source: SceneSourceAnchor): GameObject | null {\n const wantFile = source.file.trim();\n const wantAnchor = (source.anchor ?? '').trim();\n if (!wantAnchor) {\n return null;\n }\n\n for (const go of this.listSceneObjects()) {\n const anchor = readSourceAnchor(go);\n if (!anchor || anchor.file !== wantFile) {\n continue;\n }\n const resolvedAnchor = anchor.anchor ?? go.name;\n if (resolvedAnchor === wantAnchor) {\n return go;\n }\n }\n\n return null;\n }\n\n private resolveApplyTarget(payload: ApplyPropertyPayload): GameObject | null {\n if (typeof payload.gameObjectId === 'number') {\n const byId = this.findGameObjectById(payload.gameObjectId);\n if (byId) {\n return byId;\n }\n }\n\n const file = payload.source?.file?.trim();\n const anchor = payload.source?.anchor?.trim();\n if (!file || !anchor) {\n return null;\n }\n\n return this.findGameObjectBySource({ file, anchor });\n }\n\n private handleApplyProperty(payload: ApplyPropertyPayload) {\n const componentName = payload.componentName;\n const path = payload.path;\n const hasId = typeof payload.gameObjectId === 'number';\n const hasSource =\n Boolean(payload.source?.file?.trim()) && Boolean(payload.source?.anchor?.trim());\n\n if (\n (!hasId && !hasSource) ||\n typeof componentName !== 'string' ||\n !Array.isArray(path) ||\n path.length === 0\n ) {\n return;\n }\n\n const go = this.resolveApplyTarget(payload);\n if (!go) return;\n\n const applied = applyPropertyWithHooks(go, componentName, path, payload.value);\n if (!applied) return;\n\n if (this.selected?.id === go.id) {\n this.redrawOverlay();\n this.postSnapshotUpdate(go);\n }\n }\n\n private postSnapshotUpdate(go: GameObject) {\n const snapshot = buildGameObjectSnapshot(go);\n if (typeof window !== 'undefined' && window.parent && window.parent !== window) {\n window.parent.postMessage(\n {\n type: COMBOS_DEVELOPMENT_TOOL_GAMEOBJECT_SELECTED,\n snapshot,\n pointer: null,\n source: 'property-applied',\n },\n this.postMessageOrigin,\n );\n }\n }\n\n private clearSelectionAndNotify(reason: DevelopmentToolDeselectReason) {\n const hadSelection = this.selected != null;\n this.selected = null;\n this.redrawOverlay();\n if (!shouldNotifyGameObjectDeselected(hadSelection)) {\n return;\n }\n this.postGameObjectDeselected(reason);\n }\n\n private postGameObjectDeselected(reason: DevelopmentToolDeselectReason) {\n const payload = buildGameObjectDeselectedPayload(reason);\n if (typeof window !== 'undefined' && window.parent && window.parent !== window) {\n window.parent.postMessage(payload, this.postMessageOrigin);\n }\n this.game.emit(payload.type, { reason });\n }\n}\n","/** Auto-generated by scripts/build-package.mjs — do not edit. */\n\nimport CombosDevelopmentToolSystem from './CombosDevelopmentToolSystem';\n\nObject.assign(CombosDevelopmentToolSystem, {\n packageName: \"@combos-fun/plugin-development-tool\",\n packageVersion: \"0.0.51\",\n});\n","import type { GameObject } from '@combos-fun/engine';\nimport CombosDevelopmentToolTarget from './CombosDevelopmentToolTarget';\nimport { isSceneSourceAnchor } from './sceneEditTypes';\n\nexport interface DevelopmentTargetSource {\n file: string;\n anchor: string;\n}\n\nfunction isInternalEditorGo(go: GameObject): boolean {\n return typeof go.name === 'string' && go.name.startsWith('__');\n}\n\nfunction isSceneLike(go: GameObject): boolean {\n return Array.isArray((go as { gameObjects?: unknown }).gameObjects);\n}\n\nfunction sourceIsComplete(raw: unknown): boolean {\n if (!isSceneSourceAnchor(raw)) return false;\n return Boolean(raw.file.trim()) && Boolean((raw.anchor ?? '').trim());\n}\n\n/**\n * Marks `go` for editor pick / persist. Idempotent: existing Targets keep a\n * complete `payload.source`; missing identity is filled from `source`.\n *\n * Inserted by `@combos-fun/vite-plugin-development-target`. Game code should\n * not call this by hand.\n */\nexport function attachDevelopmentTarget<T extends GameObject>(\n go: T,\n source: DevelopmentTargetSource,\n): T {\n if (!go || go.destroyed || isInternalEditorGo(go) || isSceneLike(go)) {\n return go;\n }\n\n const file = source.file.trim();\n const anchor = source.anchor.trim();\n if (!file || !anchor) {\n return go;\n }\n\n const existing = go.getComponent(CombosDevelopmentToolTarget);\n if (existing) {\n if (!sourceIsComplete(existing.payload?.source)) {\n existing.payload = {\n ...(existing.payload ?? {}),\n source: { file, anchor },\n };\n }\n return go;\n }\n\n go.addComponent(\n new CombosDevelopmentToolTarget({\n payload: { source: { file, anchor } },\n }),\n );\n return go;\n}\n"],"names":["Component","IDE_PROPERTY_METADATA","CombosDevelopmentToolSystem","System","OBSERVER_TYPE","__decorate","decorators"],"mappings":"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"}
1
+ {"version":3,"file":"plugin-development-tool.cjs.js","sources":["../lib/constants.ts","../lib/CombosDevelopmentToolTarget.ts","../lib/canvasMarkerGraphics.ts","../lib/markerLayer.ts","../lib/messageOrigin.ts","../lib/overlayCanvas.ts","../lib/sceneEditTypes.ts","../lib/sceneEditSerialize.ts","../lib/sceneEditApplyHooks.ts","../lib/selectionNotify.ts","../lib/screenSpace.ts","../lib/CombosDevelopmentToolSystem.ts","../lib/__combosPackageMeta.gen.ts","../lib/attachDevelopmentTarget.ts"],"sourcesContent":["/** Parent → iframe (also `window` CustomEvent / `game.emit`): toggle pick mode. Payload: `{ enabled: boolean }`. */\nexport const COMBOS_DEVELOPMENT_TOOL_SET_PICK_MODE =\n 'combos-development-tool:set-pick-mode' as const;\n\n/** iframe → parent (and `game.emit`): pick mode finished attaching (enable) or restoring (disable). Payload: `{ enabled: boolean }`. */\nexport const COMBOS_DEVELOPMENT_TOOL_PICK_MODE_SUCCESS =\n 'combos-development-tool:pick-mode-success' as const;\n\n/** Re-scan the scene tree while the development tool is enabled. */\nexport const COMBOS_DEVELOPMENT_TOOL_REFRESH = 'combos-development-tool:refresh' as const;\n\n/** Emitted to `window.parent` when an object is selected while the tool is on. */\nexport const COMBOS_DEVELOPMENT_TOOL_GAMEOBJECT_SELECTED =\n 'combos-development-tool:gameobject-selected' as const;\n\n/** Parent → iframe: clear the current in-canvas selection outline. */\nexport const COMBOS_DEVELOPMENT_TOOL_CLEAR_SELECTION =\n 'combos-development-tool:clear-selection' as const;\n\n/** Emitted to `window.parent` when the current selection is cleared. */\nexport const COMBOS_DEVELOPMENT_TOOL_GAMEOBJECT_DESELECTED =\n 'combos-development-tool:gameobject-deselected' as const;\n\n/** Parent → iframe: apply a value to a component field (live preview). */\nexport const COMBOS_DEVELOPMENT_TOOL_APPLY_PROPERTY =\n 'combos-development-tool:apply-property' as const;\n\n/** iframe → parent: game scene bootstrap finished; parent may enable pick mode. */\nexport const COMBOS_DEVELOPMENT_TOOL_READY = 'combos-development-tool:ready' as const;\n\n/**\n * Parent → iframe: mute or unmute. Handled by `@combos-fun/plugin-sound`.\n * Payload: `{ muted: boolean }`.\n */\nexport const COMBOS_DEVELOPMENT_TOOL_SET_MUTED =\n 'combos-development-tool:set-muted' as const;\n\n/** iframe → parent (and `game.emit`): current mute snapshot after a successful change. */\nexport const COMBOS_DEVELOPMENT_TOOL_STATE_CHANGED =\n 'combos-development-tool:state-changed' as const;\n\n/**\n * Parent → iframe (also `window` CustomEvent / `game.emit`): toggle the marker\n * overlay — a persistent, clickable icon on every object owning an otherwise\n * invisible registered component (Sound first). Independent of pick mode and\n * mute. Payload: `{ enabled: boolean }`.\n */\nexport const COMBOS_DEVELOPMENT_TOOL_SET_MARKER_OVERLAY =\n 'combos-development-tool:set-marker-overlay' as const;\n\n/**\n * iframe → parent (and `game.emit`): marker overlay finished (re)building.\n * Payload: `{ enabled: boolean, total: number, markers: { componentName, count }[] }`.\n */\nexport const COMBOS_DEVELOPMENT_TOOL_MARKER_OVERLAY_SUCCESS =\n 'combos-development-tool:marker-overlay-success' as const;\n","import { Component, ComponentParams } from '@combos-fun/engine';\n\nexport interface CombosDevelopmentToolTargetParams extends ComponentParams {\n /** Extra JSON-serializable fields included in postMessage to parent. */\n payload?: Record<string, unknown>;\n}\n\n/**\n * Marks a `GameObject` as selectable in editor pick mode. While the development tool is enabled,\n * only nodes carrying this component are hit-tested on the canvas overlay.\n */\nexport default class CombosDevelopmentToolTarget extends Component<CombosDevelopmentToolTargetParams> {\n static componentName = 'CombosDevelopmentToolTarget';\n\n payload: Record<string, unknown> = {};\n\n init(params?: CombosDevelopmentToolTargetParams) {\n this.payload = params?.payload ? { ...params.payload } : {};\n }\n}\n","import type { MarkerGraphicsLike } from './markerLayer';\n\nexport function cssRgba(color: number, alpha = 1): string {\n const r = (color >> 16) & 0xff;\n const g = (color >> 8) & 0xff;\n const b = color & 0xff;\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\n\n/** Pixi-v8-style path builder backed by `CanvasRenderingContext2D`. */\nexport class CanvasMarkerGraphics implements MarkerGraphicsLike {\n constructor(private readonly ctx: CanvasRenderingContext2D) {}\n\n clear(): void {\n this.ctx.beginPath();\n }\n\n roundRect(x: number, y: number, width: number, height: number, radius = 0): void {\n const ctx = this.ctx;\n if (typeof ctx.roundRect === 'function') {\n ctx.roundRect(x, y, width, height, radius);\n return;\n }\n const r = Math.max(0, Math.min(radius, Math.min(width, height) / 2));\n ctx.moveTo(x + r, y);\n ctx.lineTo(x + width - r, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + r);\n ctx.lineTo(x + width, y + height - r);\n ctx.quadraticCurveTo(x + width, y + height, x + width - r, y + height);\n ctx.lineTo(x + r, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - r);\n ctx.lineTo(x, y + r);\n ctx.quadraticCurveTo(x, y, x + r, y);\n ctx.closePath();\n }\n\n rect(x: number, y: number, width: number, height: number): void {\n this.ctx.rect(x, y, width, height);\n }\n\n circle(x: number, y: number, radius: number): void {\n this.ctx.moveTo(x + radius, y);\n this.ctx.arc(x, y, radius, 0, Math.PI * 2);\n }\n\n poly(points: number[], close = true): void {\n if (points.length < 4) return;\n this.ctx.moveTo(points[0], points[1]);\n for (let i = 2; i < points.length; i += 2) {\n this.ctx.lineTo(points[i], points[i + 1]);\n }\n if (close) {\n this.ctx.closePath();\n }\n }\n\n fill(style: { color: number; alpha?: number }): void {\n this.ctx.fillStyle = cssRgba(style.color, style.alpha ?? 1);\n this.ctx.fill();\n this.ctx.beginPath();\n }\n\n stroke(style: { width: number; color: number; alpha?: number }): void {\n this.ctx.strokeStyle = cssRgba(style.color, style.alpha ?? 1);\n this.ctx.lineWidth = style.width;\n this.ctx.stroke();\n this.ctx.beginPath();\n }\n}\n","import type { GameObject } from '@combos-fun/engine';\n\n/**\n * Marker overlay = a reusable \"pin a persistent, clickable icon on every object\n * that owns an otherwise-invisible component\" capability. Audio (`Sound`) is the\n * first consumer; register more component kinds below (Physics, Camera, Trigger,\n * timers, spawn points, …) to reuse the exact same layer.\n */\n\n/** Glyph drawn inside a marker badge. Extend as new component kinds are added. */\nexport type MarkerGlyph = 'speaker' | 'dot';\n\n/** One kind of invisible component the overlay surfaces with a pinned icon. */\nexport interface MarkerComponentDef {\n /** Engine component name to look for on each GameObject, e.g. `'Sound'`. */\n componentName: string;\n /** Badge fill color, `0xRRGGBB`. */\n badgeColor: number;\n /** Which glyph to draw inside the badge. */\n glyph: MarkerGlyph;\n}\n\n/**\n * Registered marker kinds, in priority order: a GameObject is marked by the\n * first registered component it owns. For now this is **`Sound` only**; the\n * mechanism is generic (append Physics / Camera / triggers / spawn points later\n * to reuse the same layer) but only audio is wanted right now.\n */\nexport const MARKER_COMPONENTS: readonly MarkerComponentDef[] = [\n { componentName: 'Sound', badgeColor: 0x8b5cf6, glyph: 'speaker' },\n];\n\n/** Fixed badge size in overlay CSS pixels. */\nexport const MARKER_ICON_SIZE = 28;\n\n/**\n * First registered marker def whose component is present on `go`, else `null`.\n * Priority follows {@link MARKER_COMPONENTS} order.\n */\nexport function resolveMarkerDef(\n go: Pick<GameObject, 'getComponent'>,\n registry: readonly MarkerComponentDef[] = MARKER_COMPONENTS,\n): MarkerComponentDef | null {\n for (const def of registry) {\n if (go.getComponent(def.componentName)) {\n return def;\n }\n }\n return null;\n}\n\n/**\n * Minimal subset of the PixiGraphics v8 surface the marker drawing uses. Keeps\n * this module decoupled from the renderer and unit-testable with a mock.\n */\nexport interface MarkerGraphicsLike {\n clear(): unknown;\n roundRect(x: number, y: number, width: number, height: number, radius?: number): unknown;\n rect(x: number, y: number, width: number, height: number): unknown;\n circle(x: number, y: number, radius: number): unknown;\n poly(points: number[], close?: boolean): unknown;\n fill(style: { color: number; alpha?: number }): unknown;\n stroke(style: { width: number; color: number; alpha?: number }): unknown;\n}\n\nconst GLYPH_COLOR = 0xffffff;\n\n/** Draw the rounded badge background shared by every glyph. */\nfunction drawBadge(g: MarkerGraphicsLike, def: MarkerComponentDef, size: number): void {\n g.clear();\n g.roundRect(0, 0, size, size, size * 0.22);\n g.fill({ color: def.badgeColor, alpha: 0.92 });\n g.roundRect(0, 0, size, size, size * 0.22);\n g.stroke({ width: Math.max(1, size * 0.05), color: 0xffffff, alpha: 0.6 });\n}\n\n/** A speaker cone + two volume bars, normalized to the `size` box. */\nfunction drawSpeakerGlyph(g: MarkerGraphicsLike, s: number): void {\n g.poly([\n s * 0.28, s * 0.4,\n s * 0.42, s * 0.4,\n s * 0.55, s * 0.26,\n s * 0.55, s * 0.74,\n s * 0.42, s * 0.6,\n s * 0.28, s * 0.6,\n ]);\n g.fill({ color: GLYPH_COLOR, alpha: 0.96 });\n\n g.rect(s * 0.62, s * 0.44, s * 0.045, s * 0.12);\n g.fill({ color: GLYPH_COLOR, alpha: 0.96 });\n g.rect(s * 0.71, s * 0.39, s * 0.045, s * 0.22);\n g.fill({ color: GLYPH_COLOR, alpha: 0.96 });\n}\n\n/** Generic fallback glyph for component kinds without a dedicated icon. */\nfunction drawDotGlyph(g: MarkerGraphicsLike, s: number): void {\n g.circle(s * 0.5, s * 0.5, s * 0.18);\n g.fill({ color: GLYPH_COLOR, alpha: 0.96 });\n}\n\n/** Render a full marker (badge + glyph) into `g`, sized to `size` (overlay CSS pixels). */\nexport function drawMarkerIcon(\n g: MarkerGraphicsLike,\n def: MarkerComponentDef,\n size: number = MARKER_ICON_SIZE,\n): void {\n drawBadge(g, def, size);\n switch (def.glyph) {\n case 'speaker':\n drawSpeakerGlyph(g, size);\n break;\n case 'dot':\n default:\n drawDotGlyph(g, size);\n break;\n }\n}\n","/** Default inbound postMessage host suffixes (host + all subdomains). */\nexport const DEFAULT_ALLOWED_MESSAGE_HOST_SUFFIXES = [\n 'knoffice.tech',\n 'converge.ai',\n] as const;\n\n/**\n * Returns whether `origin` is allowed by `allowed`.\n *\n * Each entry in `allowed` is either:\n * - a **host suffix** (e.g. `knoffice.tech`) — matches that host and `*.knoffice.tech`;\n * - a **full origin** (e.g. `https://creator.knoffice.tech`) — exact match;\n * - `'*'` — accept any origin (escape hatch).\n */\nexport function isAllowedMessageOrigin(\n origin: string,\n allowed: readonly string[],\n): boolean {\n if (allowed.includes('*')) {\n return true;\n }\n if (allowed.length === 0) {\n return false;\n }\n\n let parsed: URL;\n try {\n parsed = new URL(origin);\n } catch {\n return false;\n }\n\n const originLower = origin.toLowerCase();\n const hostLower = parsed.hostname.toLowerCase();\n\n for (const entry of allowed) {\n const trimmed = entry.trim();\n if (!trimmed) {\n continue;\n }\n\n if (trimmed.includes('://')) {\n if (originLower === trimmed.toLowerCase()) {\n return true;\n }\n continue;\n }\n\n const suffix = trimmed.toLowerCase().replace(/^\\./, '');\n if (hostLower === suffix || hostLower.endsWith(`.${suffix}`)) {\n return true;\n }\n }\n\n return false;\n}\n\n/** Defaults plus any extra entries (deduped). `['*']` alone accepts any origin. */\nexport function mergeAllowedMessageOrigins(extra?: string[]): string[] {\n if (!extra?.length) {\n return [...DEFAULT_ALLOWED_MESSAGE_HOST_SUFFIXES];\n }\n if (extra.includes('*')) {\n return ['*'];\n }\n\n const seen = new Set<string>();\n const result: string[] = [];\n for (const entry of [...DEFAULT_ALLOWED_MESSAGE_HOST_SUFFIXES, ...extra]) {\n const trimmed = entry.trim();\n if (!trimmed || seen.has(trimmed)) {\n continue;\n }\n seen.add(trimmed);\n result.push(trimmed);\n }\n return result;\n}\n","const OVERLAY_Z_INDEX = '2147483000';\nconst OVERLAY_ATTR = 'data-combos-development-tool-overlay';\n\nexport interface OverlayCanvasHandle {\n canvas: HTMLCanvasElement;\n ctx: CanvasRenderingContext2D;\n sync(gameCanvas: HTMLCanvasElement): { width: number; height: number } | null;\n setPickEnabled(on: boolean): void;\n setVisible(on: boolean): void;\n destroy(): void;\n}\n\nfunction ensureParent(gameCanvas: HTMLCanvasElement, overlay: HTMLCanvasElement): void {\n const parent = gameCanvas.parentElement ?? document.body;\n if (overlay.parentElement !== parent) {\n parent.appendChild(overlay);\n }\n}\n\n/**\n * Transparent HTML canvas stacked on the game canvas.\n * Pick mode sets `pointer-events: auto` so game Event / Event3D do not receive the tap.\n */\nexport function createOverlayCanvas(): OverlayCanvasHandle | null {\n if (typeof document === 'undefined') {\n return null;\n }\n\n const canvas = document.createElement('canvas');\n canvas.setAttribute(OVERLAY_ATTR, 'true');\n canvas.style.position = 'fixed';\n canvas.style.left = '0';\n canvas.style.top = '0';\n canvas.style.width = '0';\n canvas.style.height = '0';\n canvas.style.margin = '0';\n canvas.style.padding = '0';\n canvas.style.border = '0';\n canvas.style.background = 'transparent';\n canvas.style.pointerEvents = 'none';\n canvas.style.touchAction = 'none';\n canvas.style.userSelect = 'none';\n canvas.style.zIndex = OVERLAY_Z_INDEX;\n canvas.style.display = 'none';\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return null;\n }\n\n let pickEnabled = false;\n let visible = false;\n\n const sync = (gameCanvas: HTMLCanvasElement): { width: number; height: number } | null => {\n ensureParent(gameCanvas, canvas);\n const rect = gameCanvas.getBoundingClientRect();\n if (rect.width <= 0 || rect.height <= 0) {\n canvas.style.display = 'none';\n return null;\n }\n\n canvas.style.display = visible ? 'block' : 'none';\n canvas.style.left = `${rect.left}px`;\n canvas.style.top = `${rect.top}px`;\n canvas.style.width = `${rect.width}px`;\n canvas.style.height = `${rect.height}px`;\n\n const dpr = typeof window !== 'undefined' ? window.devicePixelRatio || 1 : 1;\n const pixelW = Math.max(1, Math.round(rect.width * dpr));\n const pixelH = Math.max(1, Math.round(rect.height * dpr));\n if (canvas.width !== pixelW || canvas.height !== pixelH) {\n canvas.width = pixelW;\n canvas.height = pixelH;\n }\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n return { width: rect.width, height: rect.height };\n };\n\n return {\n canvas,\n ctx,\n sync,\n setPickEnabled(on: boolean) {\n pickEnabled = on;\n canvas.style.pointerEvents = pickEnabled ? 'auto' : 'none';\n canvas.style.cursor = pickEnabled ? 'crosshair' : 'default';\n },\n setVisible(on: boolean) {\n visible = on;\n canvas.style.display = on ? 'block' : 'none';\n },\n destroy() {\n canvas.remove();\n },\n };\n}\n","/** Optional bootstrap anchor stored on {@link CombosDevelopmentToolTarget}.payload.source */\nexport interface SceneSourceAnchor {\n /** Project-relative path, e.g. `src/index.ts` */\n file: string;\n /** Variable name in bootstrap (`const poster = …`) or stable key; defaults to gameObject name */\n anchor?: string;\n}\n\nexport interface SceneEditPropertyRef {\n gameObjectId: number;\n gameObjectName: string;\n componentName: string;\n path: string[];\n}\n\nexport type SceneEditValueType = 'string' | 'number' | 'boolean' | 'object';\n\nexport type SceneEditEditorKind =\n | 'volume-slider'\n | 'number-slider'\n | 'number-stepper'\n | 'color'\n | 'enum'\n | 'toggle'\n | 'text';\n\nexport interface SceneEditNumberMeta {\n min?: number;\n max?: number;\n step?: number;\n unit?: string;\n}\n\n/**\n * Schema-backed editable field emitted to the host inspector.\n * Only `@Field`-declared properties (with label + description) are serialized.\n */\nexport interface SceneEditFieldDescriptor {\n path: string[];\n value: unknown;\n valueType: SceneEditValueType;\n label: string;\n description: string;\n group?: string;\n editorKind?: SceneEditEditorKind;\n enumOptions?: string[];\n numberMeta?: SceneEditNumberMeta;\n persistTarget?: 'gameObjectConstructor' | 'component';\n persistPath?: string[];\n snapshotPath?: string[];\n}\n\nexport interface SceneEditComponentSnapshot {\n componentName: string;\n fieldDescriptors: SceneEditFieldDescriptor[];\n}\n\nexport interface SceneEditGameObjectSnapshot {\n id: number;\n name: string;\n components: SceneEditComponentSnapshot[];\n source?: SceneSourceAnchor;\n}\n\nexport function isSceneSourceAnchor(v: unknown): v is SceneSourceAnchor {\n return (\n !!v &&\n typeof v === 'object' &&\n typeof (v as SceneSourceAnchor).file === 'string'\n );\n}\n","import { Component, GameObject } from '@combos-fun/engine';\nimport { IDE_PROPERTY_METADATA } from '@combos-fun/inspector-decorator';\nimport type { FieldEditorKind, FieldOptions } from '@combos-fun/inspector-decorator';\nimport CombosDevelopmentToolTarget from './CombosDevelopmentToolTarget';\nimport {\n isSceneSourceAnchor,\n type SceneEditComponentSnapshot,\n type SceneEditEditorKind,\n type SceneEditFieldDescriptor,\n type SceneEditGameObjectSnapshot,\n type SceneEditValueType,\n type SceneSourceAnchor,\n} from './sceneEditTypes';\n\ntype SchemaProp = FieldOptions & {\n key: string;\n};\n\nfunction resolveValueType(value: unknown): SceneEditValueType | 'unsupported' {\n if (typeof value === 'string') return 'string';\n if (typeof value === 'number') return 'number';\n if (typeof value === 'boolean') return 'boolean';\n if (value !== null && typeof value === 'object') return 'object';\n return 'unsupported';\n}\n\nfunction cloneJsonSafe(value: unknown, depth = 0): unknown {\n if (value === null || value === undefined) return value;\n if (typeof value === 'number' || typeof value === 'string' || typeof value === 'boolean') {\n return value;\n }\n if (depth > 6) return undefined;\n if (Array.isArray(value)) {\n return value.map(item => cloneJsonSafe(item, depth + 1));\n }\n if (typeof value === 'object') {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n if (typeof v === 'function') continue;\n const cloned = cloneJsonSafe(v, depth + 1);\n if (cloned !== undefined) out[k] = cloned;\n }\n return out;\n }\n return undefined;\n}\n\nfunction readFieldReflectSchema(ctor: Function): SchemaProp[] {\n const properties =\n (Reflect.getMetadata(IDE_PROPERTY_METADATA, ctor) as Record<string, FieldOptions> | undefined) ||\n {};\n return Object.keys(properties).map(key => ({\n key,\n ...properties[key],\n }));\n}\n\n/** Legacy `@type` / `@step` write `constructor.IDEProps` as an object keyed by property name. */\nfunction readLegacyIdePropsSchema(ctor: Function & { IDEProps?: unknown }): SchemaProp[] {\n const raw = ctor.IDEProps;\n if (!raw || Array.isArray(raw) || typeof raw !== 'object') {\n return [];\n }\n return Object.keys(raw as Record<string, Record<string, unknown>>).map(key => {\n const entry = (raw as Record<string, Record<string, unknown>>)[key] || {};\n return {\n key,\n type: typeof entry.type === 'string' ? entry.type : undefined,\n step: typeof entry.step === 'number' ? entry.step : undefined,\n min: typeof entry.min === 'number' ? entry.min : undefined,\n max: typeof entry.max === 'number' ? entry.max : undefined,\n label: typeof entry.label === 'string' ? entry.label : undefined,\n description: typeof entry.description === 'string' ? entry.description : undefined,\n group: typeof entry.group === 'string' ? entry.group : undefined,\n editor: entry.editor as FieldEditorKind | undefined,\n enumOptions: Array.isArray(entry.enumOptions) ? (entry.enumOptions as string[]) : undefined,\n unit: typeof entry.unit === 'string' ? entry.unit : undefined,\n };\n });\n}\n\nfunction collectSchemaProps(comp: Component): SchemaProp[] {\n const ctor = comp.constructor as Function & { IDEProps?: unknown };\n const fromField = readFieldReflectSchema(ctor);\n if (fromField.length > 0) {\n return fromField;\n }\n return readLegacyIdePropsSchema(ctor);\n}\n\nfunction mapEditorKind(\n options: SchemaProp,\n valueType: SceneEditValueType,\n): SceneEditEditorKind | undefined {\n if (options.editor) {\n return options.editor;\n }\n if (valueType === 'boolean') return 'toggle';\n if (options.enumOptions?.length && valueType === 'string') return 'enum';\n if (valueType === 'number') {\n if (options.min !== undefined && options.max !== undefined) {\n return 'number-slider';\n }\n return 'number-stepper';\n }\n if (valueType === 'string') return 'text';\n return undefined;\n}\n\nfunction buildNumberMeta(options: SchemaProp): SceneEditFieldDescriptor['numberMeta'] | undefined {\n if (\n options.min === undefined &&\n options.max === undefined &&\n options.step === undefined &&\n options.unit === undefined\n ) {\n return undefined;\n }\n return {\n min: options.min,\n max: options.max,\n step: options.step,\n unit: options.unit,\n };\n}\n\nfunction titleCaseLeaf(leaf: string): string {\n return leaf\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .replace(/_/g, ' ')\n .replace(/^./, char => char.toUpperCase());\n}\n\nfunction resolveLabel(options: SchemaProp, path: string[]): string | undefined {\n if (options.label?.trim()) {\n return options.label.trim();\n }\n const leaf = path[path.length - 1];\n return leaf ? titleCaseLeaf(leaf) : undefined;\n}\n\nfunction leafDescriptorsFromValue(\n componentName: string,\n options: SchemaProp,\n path: string[],\n value: unknown,\n): SceneEditFieldDescriptor[] {\n const description = options.description?.trim();\n if (!description) {\n // Scene Edit only exposes fields that include a human description.\n return [];\n }\n\n const valueType = resolveValueType(value);\n if (valueType === 'unsupported') {\n return [];\n }\n\n const typeHint = options.type;\n const isVector =\n typeHint === 'vector2' ||\n (valueType === 'object' &&\n value !== null &&\n 'x' in (value as object) &&\n 'y' in (value as object));\n const isSize =\n typeHint === 'size' ||\n (valueType === 'object' &&\n value !== null &&\n 'width' in (value as object) &&\n 'height' in (value as object));\n\n if (isVector || isSize) {\n const record = value as Record<string, unknown>;\n const axes = isSize ? (['width', 'height'] as const) : (['x', 'y'] as const);\n const baseLabel = resolveLabel(options, path) ?? componentName;\n const out: SceneEditFieldDescriptor[] = [];\n for (const axis of axes) {\n const axisValue = record[axis];\n const axisType = resolveValueType(axisValue);\n if (axisType === 'unsupported' || axisType === 'object') continue;\n const axisPath = [...path, axis];\n out.push({\n path: axisPath,\n value: axisValue,\n valueType: axisType,\n label: `${baseLabel} ${axis.toUpperCase()}`,\n description,\n group: options.group ?? componentName,\n editorKind: mapEditorKind(options, axisType),\n numberMeta: buildNumberMeta(options),\n persistTarget: componentName === 'Transform' ? 'gameObjectConstructor' : 'component',\n });\n }\n return out;\n }\n\n if (valueType === 'object') {\n return [];\n }\n\n const label = resolveLabel(options, path);\n if (!label) {\n return [];\n }\n\n return [\n {\n path,\n value: cloneJsonSafe(value),\n valueType,\n label,\n description,\n group: options.group ?? componentName,\n editorKind: mapEditorKind(options, valueType),\n enumOptions: options.enumOptions,\n numberMeta: buildNumberMeta(options),\n persistTarget: componentName === 'Transform' ? 'gameObjectConstructor' : 'component',\n },\n ];\n}\n\nfunction serializeComponent(comp: Component): SceneEditFieldDescriptor[] {\n const componentName = comp.name;\n const schema = collectSchemaProps(comp);\n if (schema.length === 0) {\n return [];\n }\n\n const out: SceneEditFieldDescriptor[] = [];\n const record = comp as unknown as Record<string, unknown>;\n\n for (const prop of schema) {\n const value = record[prop.key];\n if (typeof value === 'function') continue;\n out.push(...leafDescriptorsFromValue(componentName, prop, [prop.key], value));\n }\n\n return out;\n}\n\nexport function readSourceAnchor(go: GameObject): SceneSourceAnchor | undefined {\n const tag = go.getComponent(CombosDevelopmentToolTarget);\n const raw = tag?.payload?.source;\n if (!isSceneSourceAnchor(raw)) return undefined;\n return {\n file: raw.file,\n anchor: raw.anchor ?? go.name,\n };\n}\n\nexport function buildGameObjectSnapshot(go: GameObject): SceneEditGameObjectSnapshot {\n const components: SceneEditComponentSnapshot[] = go.components\n .filter(c => c.name !== 'CombosDevelopmentToolTarget')\n .map(c => ({\n componentName: c.name,\n fieldDescriptors: serializeComponent(c),\n }))\n .filter(c => c.fieldDescriptors.length > 0);\n\n return {\n id: go.id,\n name: go.name,\n components,\n source: readSourceAnchor(go),\n };\n}\n\nexport function applyPropertyValue(\n go: GameObject,\n componentName: string,\n path: string[],\n value: unknown,\n): boolean {\n const comp = go.getComponent(componentName);\n if (!comp || !path.length) return false;\n\n let target: Record<string, unknown> = comp as unknown as Record<string, unknown>;\n for (let i = 0; i < path.length - 1; i++) {\n const key = path[i];\n if (target[key] === undefined || target[key] === null) {\n target[key] = {};\n }\n target = target[key] as Record<string, unknown>;\n }\n\n target[path[path.length - 1]] = value;\n return true;\n}\n\nexport function readPropertyValue(\n go: GameObject,\n componentName: string,\n path: string[],\n): unknown {\n const comp = go.getComponent(componentName);\n if (!comp || !path.length) return undefined;\n\n let target: unknown = comp;\n for (const key of path) {\n if (target === null || target === undefined || typeof target !== 'object') {\n return undefined;\n }\n target = (target as Record<string, unknown>)[key];\n }\n return target;\n}\n","import type { Component, GameObject } from '@combos-fun/engine';\nimport { applyPropertyValue } from './sceneEditSerialize';\n\ntype SceneEditApplyHook = (\n go: GameObject,\n comp: Component,\n path: string[],\n value: unknown,\n) => boolean;\n\nconst TRANSFORM_VECTOR_KEYS = new Set([\n 'position',\n 'size',\n 'origin',\n 'anchor',\n 'scale',\n 'skew',\n]);\n\ntype PhysicsLike = {\n body?: { position: { x: number; y: number }; angle?: number };\n bodyParams?: { stopRotation?: boolean };\n Body?: { setPosition: (body: unknown, pos: { x: number; y: number }) => void; setAngle?: (body: unknown, angle: number) => void };\n};\n\ntype MoverLike = Component & {\n originX: number;\n originY: number;\n};\n\nfunction asNumber(value: unknown): number | undefined {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === 'string' && value.trim() !== '') {\n const next = Number(value);\n return Number.isFinite(next) ? next : undefined;\n }\n return undefined;\n}\n\nfunction syncPhysicsBodyFromTransform(go: GameObject): void {\n const physics = go.getComponent('Physics') as PhysicsLike | undefined;\n if (!physics?.body) {\n return;\n }\n\n const { x, y } = go.transform.position;\n if (physics.Body?.setPosition) {\n physics.Body.setPosition(physics.body, { x, y });\n return;\n }\n\n physics.body.position.x = x;\n physics.body.position.y = y;\n}\n\nfunction syncMoverOriginFromTransform(go: GameObject): void {\n const mover = go.getComponent<MoverLike>('PlatformerMover');\n if (!mover) {\n return;\n }\n mover.originX = go.transform.position.x;\n mover.originY = go.transform.position.y;\n}\n\nfunction applyTransformProperty(\n go: GameObject,\n _comp: Component,\n path: string[],\n value: unknown,\n): boolean {\n const transform = go.transform;\n const transformRecord = transform as unknown as Record<string, unknown>;\n\n if (path.length === 1 && path[0] === 'rotation') {\n const next = asNumber(value);\n if (next === undefined) {\n return false;\n }\n transform.rotation = next;\n return true;\n }\n\n if (path.length === 2 && TRANSFORM_VECTOR_KEYS.has(path[0])) {\n const groupKey = path[0];\n const leafKey = path[1];\n const next = asNumber(value);\n if (next === undefined) {\n return false;\n }\n\n const group = transformRecord[groupKey];\n if (!group || typeof group !== 'object') {\n return false;\n }\n\n (group as Record<string, unknown>)[leafKey] = next;\n\n if (groupKey === 'position') {\n syncPhysicsBodyFromTransform(go);\n syncMoverOriginFromTransform(go);\n }\n\n return true;\n }\n\n return false;\n}\n\nfunction applyTextProperty(\n _go: GameObject,\n comp: Component,\n path: string[],\n value: unknown,\n): boolean {\n const textComp = comp as Component & { text?: string; style?: Record<string, unknown> };\n\n if (path.length === 1 && path[0] === 'text') {\n textComp.text = String(value ?? '');\n return true;\n }\n\n if (path.length === 2 && path[0] === 'style') {\n const styleKey = path[1];\n const nextStyle = { ...(textComp.style ?? {}), [styleKey]: value };\n textComp.style = nextStyle;\n return true;\n }\n\n return false;\n}\n\nfunction applySoundProperty(\n _go: GameObject,\n comp: Component,\n path: string[],\n value: unknown,\n): boolean {\n const soundComp = comp as Component & { volume?: number };\n\n if (\n (path.length === 1 && path[0] === 'volume') ||\n (path.length === 2 && path[0] === 'config' && path[1] === 'volume')\n ) {\n const next = asNumber(value);\n if (next === undefined) {\n return false;\n }\n soundComp.volume = next;\n return true;\n }\n\n return false;\n}\n\nconst APPLY_HOOKS: Record<string, SceneEditApplyHook> = {\n Transform: applyTransformProperty,\n Text: applyTextProperty,\n Sound: applySoundProperty,\n};\n\nexport function applyPropertyWithHooks(\n go: GameObject,\n componentName: string,\n path: string[],\n value: unknown,\n): boolean {\n const comp = go.getComponent(componentName);\n if (!comp || !path.length) {\n return false;\n }\n\n const hook = APPLY_HOOKS[componentName];\n if (hook?.(go, comp, path, value)) {\n return true;\n }\n\n return applyPropertyValue(go, componentName, path, value);\n}\n","import {\n COMBOS_DEVELOPMENT_TOOL_CLEAR_SELECTION,\n COMBOS_DEVELOPMENT_TOOL_GAMEOBJECT_DESELECTED,\n} from './constants';\n\nexport type DevelopmentToolDeselectReason = 'parent-request' | 'pick-disabled' | 'target-removed';\n\nexport function buildGameObjectDeselectedPayload(reason: DevelopmentToolDeselectReason) {\n return {\n type: COMBOS_DEVELOPMENT_TOOL_GAMEOBJECT_DESELECTED,\n reason,\n } as const;\n}\n\nexport function shouldNotifyGameObjectDeselected(hadSelection: boolean): boolean {\n return hadSelection;\n}\n\nexport function isClearSelectionMessage(data: unknown): boolean {\n if (!data || typeof data !== 'object') {\n return false;\n }\n return (data as { type?: string }).type === COMBOS_DEVELOPMENT_TOOL_CLEAR_SELECTION;\n}\n","/** Axis-aligned rectangle in overlay CSS pixels. */\nexport type ScreenRect = { x: number; y: number; width: number; height: number };\n\nexport type DesignSize = { width: number; height: number };\n\nexport type Vec2 = { x: number; y: number };\nexport type Size2 = { width: number; height: number };\n\nexport interface TransformLike {\n position: Vec2;\n size: Size2;\n origin: Vec2;\n anchor: Vec2;\n scale: Vec2;\n skew: Vec2;\n rotation: number;\n parent: TransformLike | null;\n}\n\nexport interface Transform3DLike {\n worldPositionX?: number;\n worldPositionY?: number;\n worldPositionZ?: number;\n positionX?: number;\n positionY?: number;\n positionZ?: number;\n scaleX?: number;\n scaleY?: number;\n scaleZ?: number;\n}\n\nexport interface CameraLike {\n matrixWorldInverse?: { elements?: ArrayLike<number> };\n projectionMatrix?: { elements?: ArrayLike<number> };\n}\n\nexport interface Object3DLike {\n updateWorldMatrix?: (updateParents: boolean, updateChildren: boolean) => void;\n traverse?: (fn: (obj: Object3DLike) => void) => void;\n geometry?: {\n computeBoundingBox?: () => void;\n boundingBox?: { min: { x: number; y: number; z: number }; max: { x: number; y: number; z: number } } | null;\n };\n matrixWorld?: { elements?: ArrayLike<number> };\n}\n\nexport interface GameLike {\n getSystem?: (name: string) => unknown;\n canvas?: HTMLCanvasElement | null;\n}\n\nexport interface ProjectableObject {\n id: number;\n getComponent: (name: string) => unknown;\n transform: TransformLike;\n}\n\n/** Screen-space pad used when a target has no positive size / projected extent. */\nexport const DEFAULT_POINT_EXTENT = 32;\n\ntype Mat2 = { a: number; b: number; c: number; d: number; tx: number; ty: number };\n\nfunction identityMat(): Mat2 {\n return { a: 1, b: 0, c: 0, d: 1, tx: 0, ty: 0 };\n}\n\nfunction multiplyMat(p: Mat2, l: Mat2): Mat2 {\n return {\n a: p.a * l.a + p.c * l.b,\n b: p.b * l.a + p.d * l.b,\n c: p.a * l.c + p.c * l.d,\n d: p.b * l.c + p.d * l.d,\n tx: p.a * l.tx + p.c * l.ty + p.tx,\n ty: p.b * l.tx + p.d * l.ty + p.ty,\n };\n}\n\nfunction applyMat(m: Mat2, x: number, y: number): Vec2 {\n return {\n x: m.a * x + m.c * y + m.tx,\n y: m.b * x + m.d * y + m.ty,\n };\n}\n\n/**\n * Local matrix matching `plugin-renderer` ContainerManager:\n * position (+ parent size * anchor), rotation, scale, pivot = size * origin.\n */\nexport function localTransformMatrix(t: TransformLike): Mat2 {\n const x = t.position.x + (t.parent ? t.parent.size.width * t.anchor.x : 0);\n const y = t.position.y + (t.parent ? t.parent.size.height * t.anchor.y : 0);\n const pivotX = t.size.width * t.origin.x;\n const pivotY = t.size.height * t.origin.y;\n const cos = Math.cos(t.rotation);\n const sin = Math.sin(t.rotation);\n const a = cos * t.scale.x;\n const b = sin * t.scale.x;\n const c = -sin * t.scale.y;\n const d = cos * t.scale.y;\n return {\n a,\n b,\n c,\n d,\n tx: x - (pivotX * a + pivotY * c),\n ty: y - (pivotX * b + pivotY * d),\n };\n}\n\nexport function worldTransformMatrix(t: TransformLike): Mat2 {\n const chain: TransformLike[] = [];\n let cur: TransformLike | null = t;\n while (cur) {\n chain.push(cur);\n cur = cur.parent;\n }\n chain.reverse();\n let m = identityMat();\n for (const node of chain) {\n m = multiplyMat(m, localTransformMatrix(node));\n }\n return m;\n}\n\nexport function aabbFromPoints(points: ReadonlyArray<Vec2>): ScreenRect | null {\n if (points.length === 0) return null;\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (const p of points) {\n if (!Number.isFinite(p.x) || !Number.isFinite(p.y)) continue;\n minX = Math.min(minX, p.x);\n minY = Math.min(minY, p.y);\n maxX = Math.max(maxX, p.x);\n maxY = Math.max(maxY, p.y);\n }\n if (!Number.isFinite(minX) || !Number.isFinite(minY)) return null;\n return { x: minX, y: minY, width: maxX - minX, height: maxY - minY };\n}\n\nexport function designToCss(point: Vec2, design: DesignSize | null, css: DesignSize): Vec2 {\n if (!design || design.width <= 0 || design.height <= 0) {\n return { x: point.x, y: point.y };\n }\n return {\n x: point.x * (css.width / design.width),\n y: point.y * (css.height / design.height),\n };\n}\n\nexport function cssToDesign(point: Vec2, design: DesignSize | null, css: DesignSize): Vec2 {\n if (!design || design.width <= 0 || design.height <= 0 || css.width <= 0 || css.height <= 0) {\n return { x: point.x, y: point.y };\n }\n return {\n x: point.x * (design.width / css.width),\n y: point.y * (design.height / css.height),\n };\n}\n\nfunction readPositiveNumber(value: unknown): number | null {\n return typeof value === 'number' && Number.isFinite(value) && value > 0 ? value : null;\n}\n\nexport function resolveDesignSize(game: GameLike | null | undefined): DesignSize | null {\n const renderer = game?.getSystem?.('Renderer') as\n | {\n application?: { screen?: { width?: number; height?: number } };\n params?: { width?: number; height?: number };\n }\n | undefined;\n const screen = renderer?.application?.screen;\n const sw = readPositiveNumber(screen?.width);\n const sh = readPositiveNumber(screen?.height);\n if (sw && sh) {\n return { width: sw, height: sh };\n }\n const pw = readPositiveNumber(renderer?.params?.width);\n const ph = readPositiveNumber(renderer?.params?.height);\n if (pw && ph) {\n return { width: pw, height: ph };\n }\n return null;\n}\n\nexport function resolveCamera(game: GameLike | null | undefined): CameraLike | null {\n const renderer = game?.getSystem?.('Renderer3DSystem') as\n | { threeContext?: { camera?: CameraLike } }\n | undefined;\n return renderer?.threeContext?.camera ?? null;\n}\n\nexport function resolveObject3D(game: GameLike | null | undefined, id: number): Object3DLike | null {\n const renderer = game?.getSystem?.('Renderer3DSystem') as\n | { threeContext?: { nodes?: { get?: (key: number) => Object3DLike | undefined } } }\n | undefined;\n return renderer?.threeContext?.nodes?.get?.(id) ?? null;\n}\n\nfunction asTransform3D(value: unknown): Transform3DLike | null {\n if (!value || typeof value !== 'object') return null;\n const t = value as Transform3DLike;\n const hasWorld = [t.worldPositionX, t.worldPositionY, t.worldPositionZ].some(\n v => typeof v === 'number' && Number.isFinite(v),\n );\n const hasLocal = [t.positionX, t.positionY, t.positionZ].some(\n v => typeof v === 'number' && Number.isFinite(v),\n );\n return hasWorld || hasLocal ? t : null;\n}\n\nfunction multiplyMat4Vec4(\n m: ArrayLike<number>,\n x: number,\n y: number,\n z: number,\n w: number,\n): [number, number, number, number] {\n return [\n m[0] * x + m[4] * y + m[8] * z + m[12] * w,\n m[1] * x + m[5] * y + m[9] * z + m[13] * w,\n m[2] * x + m[6] * y + m[10] * z + m[14] * w,\n m[3] * x + m[7] * y + m[11] * z + m[15] * w,\n ];\n}\n\nexport function projectWorldPoint(\n x: number,\n y: number,\n z: number,\n camera: CameraLike,\n css: DesignSize,\n): (Vec2 & { depth: number }) | null {\n const view = camera.matrixWorldInverse?.elements;\n const proj = camera.projectionMatrix?.elements;\n if (!view || view.length < 16 || !proj || proj.length < 16) {\n return null;\n }\n if (css.width <= 0 || css.height <= 0) {\n return null;\n }\n\n const viewed = multiplyMat4Vec4(view, x, y, z, 1);\n const clip = multiplyMat4Vec4(proj, viewed[0], viewed[1], viewed[2], viewed[3]);\n if (!Number.isFinite(clip[3]) || Math.abs(clip[3]) < 1e-8) {\n return null;\n }\n if (clip[3] < 0) {\n return null;\n }\n\n const ndcX = clip[0] / clip[3];\n const ndcY = clip[1] / clip[3];\n const ndcZ = clip[2] / clip[3];\n return {\n x: (ndcX + 1) * 0.5 * css.width,\n y: (1 - ndcY) * 0.5 * css.height,\n depth: ndcZ,\n };\n}\n\nfunction transformMat4Point(\n m: ArrayLike<number>,\n x: number,\n y: number,\n z: number,\n): [number, number, number] {\n const w = m[3] * x + m[7] * y + m[11] * z + m[15];\n const invW = Math.abs(w) < 1e-8 ? 1 : 1 / w;\n return [\n (m[0] * x + m[4] * y + m[8] * z + m[12]) * invW,\n (m[1] * x + m[5] * y + m[9] * z + m[13]) * invW,\n (m[2] * x + m[6] * y + m[10] * z + m[14]) * invW,\n ];\n}\n\nfunction collectObject3DWorldCorners(node: Object3DLike): Array<[number, number, number]> {\n const corners: Array<[number, number, number]> = [];\n const visit = (obj: Object3DLike) => {\n const geo = obj.geometry;\n if (!geo) return;\n geo.computeBoundingBox?.();\n const box = geo.boundingBox;\n const m = obj.matrixWorld?.elements;\n if (!box || !m || m.length < 16) return;\n const { min, max } = box;\n for (const x of [min.x, max.x]) {\n for (const y of [min.y, max.y]) {\n for (const z of [min.z, max.z]) {\n corners.push(transformMat4Point(m, x, y, z));\n }\n }\n }\n };\n\n node.updateWorldMatrix?.(true, true);\n if (typeof node.traverse === 'function') {\n node.traverse(visit);\n } else {\n visit(node);\n }\n return corners;\n}\n\nfunction padAround(point: Vec2, extent: number): ScreenRect {\n const size = Math.max(1, extent);\n return {\n x: point.x - size / 2,\n y: point.y - size / 2,\n width: size,\n height: size,\n };\n}\n\nexport function projectTransform2D(\n transform: TransformLike,\n css: DesignSize,\n design: DesignSize | null,\n): ScreenRect {\n const matrix = worldTransformMatrix(transform);\n const width = transform.size.width;\n const height = transform.size.height;\n const localCorners: Vec2[] =\n width > 0 && height > 0\n ? [\n { x: 0, y: 0 },\n { x: width, y: 0 },\n { x: width, y: height },\n { x: 0, y: height },\n ]\n : [{ x: 0, y: 0 }];\n\n const world = localCorners.map(p => applyMat(matrix, p.x, p.y));\n const screen = world.map(p => designToCss(p, design, css));\n const aabb = aabbFromPoints(screen);\n if (aabb && aabb.width > 0 && aabb.height > 0) {\n return aabb;\n }\n const origin = screen[0] ?? { x: 0, y: 0 };\n return padAround(origin, 1);\n}\n\nexport function projectTransform3D(\n transform: Transform3DLike,\n camera: CameraLike,\n css: DesignSize,\n object3D?: Object3DLike | null,\n): ScreenRect | null {\n if (object3D) {\n const corners = collectObject3DWorldCorners(object3D);\n const projected = corners\n .map(([x, y, z]) => projectWorldPoint(x, y, z, camera, css))\n .filter((p): p is Vec2 & { depth: number } => p != null);\n const aabb = aabbFromPoints(projected);\n if (aabb && aabb.width > 0 && aabb.height > 0) {\n return aabb;\n }\n }\n\n const x = transform.worldPositionX ?? transform.positionX ?? 0;\n const y = transform.worldPositionY ?? transform.positionY ?? 0;\n const z = transform.worldPositionZ ?? transform.positionZ ?? 0;\n const projected = projectWorldPoint(x, y, z, camera, css);\n if (!projected) return null;\n\n const scale = Math.max(\n Math.abs(transform.scaleX ?? 1),\n Math.abs(transform.scaleY ?? 1),\n Math.abs(transform.scaleZ ?? 1),\n 1,\n );\n return padAround(projected, DEFAULT_POINT_EXTENT * scale);\n}\n\nexport function projectGameObjectToScreen(\n go: ProjectableObject,\n opts: {\n css: DesignSize;\n design?: DesignSize | null;\n camera?: CameraLike | null;\n object3D?: Object3DLike | null;\n },\n): ScreenRect | null {\n if (opts.css.width <= 0 || opts.css.height <= 0) {\n return null;\n }\n\n const t3d = asTransform3D(go.getComponent('Transform3D'));\n if (t3d && opts.camera) {\n return projectTransform3D(t3d, opts.camera, opts.css, opts.object3D);\n }\n\n return projectTransform2D(go.transform, opts.css, opts.design ?? null);\n}\n\nexport function rectContains(rect: ScreenRect, x: number, y: number): boolean {\n return x >= rect.x && y >= rect.y && x <= rect.x + rect.width && y <= rect.y + rect.height;\n}\n\n/** Smallest containing rect wins; later items win ties (front-most in walk order). */\nexport function hitTestRects<T>(\n x: number,\n y: number,\n items: ReadonlyArray<{ id: T; rect: ScreenRect }>,\n): T | null {\n let best: { id: T; area: number; index: number } | null = null;\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n if (!rectContains(item.rect, x, y)) continue;\n const area = Math.max(item.rect.width, 0) * Math.max(item.rect.height, 0);\n if (!best || area < best.area || (area === best.area && i > best.index)) {\n best = { id: item.id, area, index: i };\n }\n }\n return best ? best.id : null;\n}\n\nexport function rectsEqual(a: ScreenRect, b: ScreenRect, eps = 0.01): boolean {\n return (\n Math.abs(a.x - b.x) < eps &&\n Math.abs(a.y - b.y) < eps &&\n Math.abs(a.width - b.width) < eps &&\n Math.abs(a.height - b.height) < eps\n );\n}\n","import {\n ComponentChanged,\n GameObject,\n OBSERVER_TYPE,\n System,\n UpdateParams,\n decorators,\n} from '@combos-fun/engine';\nimport {\n COMBOS_DEVELOPMENT_TOOL_APPLY_PROPERTY,\n COMBOS_DEVELOPMENT_TOOL_GAMEOBJECT_SELECTED,\n COMBOS_DEVELOPMENT_TOOL_MARKER_OVERLAY_SUCCESS,\n COMBOS_DEVELOPMENT_TOOL_REFRESH,\n COMBOS_DEVELOPMENT_TOOL_PICK_MODE_SUCCESS,\n COMBOS_DEVELOPMENT_TOOL_SET_MARKER_OVERLAY,\n COMBOS_DEVELOPMENT_TOOL_SET_PICK_MODE,\n} from './constants';\nimport CombosDevelopmentToolTarget from './CombosDevelopmentToolTarget';\nimport { CanvasMarkerGraphics } from './canvasMarkerGraphics';\nimport {\n MARKER_ICON_SIZE,\n drawMarkerIcon,\n resolveMarkerDef,\n} from './markerLayer';\nimport {\n isAllowedMessageOrigin,\n mergeAllowedMessageOrigins,\n} from './messageOrigin';\nimport { createOverlayCanvas, type OverlayCanvasHandle } from './overlayCanvas';\nimport { applyPropertyWithHooks } from './sceneEditApplyHooks';\nimport { buildGameObjectSnapshot, readSourceAnchor } from './sceneEditSerialize';\nimport {\n buildGameObjectDeselectedPayload,\n isClearSelectionMessage,\n shouldNotifyGameObjectDeselected,\n type DevelopmentToolDeselectReason,\n} from './selectionNotify';\nimport {\n cssToDesign,\n hitTestRects,\n projectGameObjectToScreen,\n resolveCamera,\n resolveDesignSize,\n resolveObject3D,\n type ScreenRect,\n} from './screenSpace';\n\nimport type { SceneSourceAnchor } from './sceneEditTypes';\n\ntype ApplyPropertyPayload = {\n gameObjectId?: number;\n source?: SceneSourceAnchor;\n componentName?: string;\n path?: string[];\n value?: unknown;\n};\n\nexport interface CombosDevelopmentToolSystemParams {\n /** postMessage `targetOrigin` when notifying parent (default `'*'`). */\n postMessageOrigin?: string;\n /**\n * Extra inbound `postMessage` origins merged with {@link DEFAULT_ALLOWED_MESSAGE_HOST_SUFFIXES}.\n * Each entry is a host suffix (e.g. `localhost`) or full origin. Pass `['*']` to accept any origin.\n */\n allowedMessageOrigins?: string[];\n}\n\nconst OUTLINE_GO_NAME = '__combosDevelopmentToolOutline';\nconst MARKER_GO_NAME_PREFIX = '__combosDevelopmentToolMarker:';\nconst OUTLINE_COLOR = '#55ffaa';\n\ntype SetPayload = { enabled?: boolean };\n\ntype SoundSystemLike = {\n muted: boolean;\n};\n\ntype OverlayHit = { go: GameObject; rect: ScreenRect };\n\n/**\n * **Off** at start. While enabled:\n * - a transparent HTML canvas overlay captures pointer events (game Event / Event3D\n * do not receive the tap);\n * - only nodes with {@link CombosDevelopmentToolTarget} are pickable;\n * - selection outline and markers are drawn with the Canvas 2D API (no renderer plugin).\n *\n * Turn on/off via:\n * - `window.dispatchEvent(new CustomEvent(COMBOS_DEVELOPMENT_TOOL_SET_PICK_MODE, { detail: { enabled: true } }))`\n * - `window.postMessage({ type: COMBOS_DEVELOPMENT_TOOL_SET_PICK_MODE, enabled: true }, targetOrigin)` (e.g. from parent iframe)\n * - `game.emit(COMBOS_DEVELOPMENT_TOOL_SET_PICK_MODE, { enabled: true })` or `getSystem(CombosDevelopmentToolSystem).setEnabled(true)`\n *\n * Mute is owned by `@combos-fun/plugin-sound` (`combos-development-tool:set-muted` /\n * `SoundSystem.setMuted`). This system still forwards `.setMuted()` to\n * `SoundSystem` so older in-game callers keep working.\n *\n * Play / pause / resume are handled by the engine core lifecycle protocol\n * (`combos-game:set-playing` / `combos-game:state-changed`), not this tool.\n *\n * While enabled: `game.emit(COMBOS_DEVELOPMENT_TOOL_REFRESH)`, `window` event `combos-development-tool:refresh`,\n * or `postMessage({ type: 'combos-development-tool:refresh' })` after adding/removing objects.\n */\n@decorators.componentObserver({\n CombosDevelopmentToolTarget: [],\n})\nexport default class CombosDevelopmentToolSystem extends System<CombosDevelopmentToolSystemParams> {\n static systemName = 'CombosDevelopmentToolSystem';\n\n private postMessageOrigin = '*';\n private allowedMessageOrigins = mergeAllowedMessageOrigins();\n private enabled = false;\n private selected: GameObject | null = null;\n private overlay: OverlayCanvasHandle | null = null;\n private overlayCss = { width: 0, height: 0 };\n private pointerDownGoId: number | null = null;\n private needsRescan = false;\n\n /** Remembered mute when `SoundSystem` is not registered yet. */\n private mutedWithoutSoundSystem = false;\n\n /**\n * Marker overlay (see {@link markerLayer}): a visual-only icon layer, toggled\n * independently of pick mode + mute. Selection/persistence still go through\n * `CombosDevelopmentToolTarget` (added by the Vite plugin).\n */\n private markerOverlayEnabled = false;\n private needsMarkerRescan = false;\n /** ownerGoId → marker def currently shown. */\n private readonly markerOwners = new Set<number>();\n\n private readonly onWindowSetPickMode = (e: globalThis.Event) => {\n const d = (e as unknown as CustomEvent<SetPayload>).detail;\n if (d && typeof d.enabled === 'boolean') {\n this.setEnabled(d.enabled);\n }\n };\n\n private readonly onWindowSetMarkerOverlay = (e: globalThis.Event) => {\n const d = (e as unknown as CustomEvent<SetPayload>).detail;\n if (d && typeof d.enabled === 'boolean') {\n this.setMarkerOverlay(d.enabled);\n }\n };\n\n private readonly onGameSetMarkerOverlay = (payload: SetPayload) => {\n if (payload && typeof payload.enabled === 'boolean') {\n this.setMarkerOverlay(payload.enabled);\n }\n };\n\n private readonly onWindowMessage = (e: MessageEvent) => {\n if (!isAllowedMessageOrigin(e.origin, this.allowedMessageOrigins)) {\n return;\n }\n\n const d = e.data;\n if (!d || typeof d !== 'object') return;\n if (d.type === COMBOS_DEVELOPMENT_TOOL_SET_PICK_MODE && typeof d.enabled === 'boolean') {\n this.setEnabled(d.enabled);\n } else if (\n d.type === COMBOS_DEVELOPMENT_TOOL_SET_MARKER_OVERLAY &&\n typeof d.enabled === 'boolean'\n ) {\n this.setMarkerOverlay(d.enabled);\n } else if (d.type === COMBOS_DEVELOPMENT_TOOL_REFRESH) {\n this.requestSceneRescan();\n } else if (isClearSelectionMessage(d)) {\n this.clearSelectionAndNotify('parent-request');\n } else if (d.type === COMBOS_DEVELOPMENT_TOOL_APPLY_PROPERTY) {\n this.handleApplyProperty(d as ApplyPropertyPayload);\n }\n };\n\n private readonly onGameSetPickMode = (payload: SetPayload) => {\n if (payload && typeof payload.enabled === 'boolean') {\n this.setEnabled(payload.enabled);\n }\n };\n\n private readonly onGameRefresh = () => {\n this.requestSceneRescan();\n };\n\n private readonly onWindowRefresh = () => {\n this.requestSceneRescan();\n };\n\n private readonly onPointerDown = (e: PointerEvent) => {\n if (!this.enabled) return;\n e.preventDefault();\n e.stopPropagation();\n try {\n this.overlay?.canvas.setPointerCapture(e.pointerId);\n } catch {\n /* ignore */\n }\n const hit = this.hitTestPointer(e);\n this.pointerDownGoId = hit?.id ?? null;\n };\n\n private readonly onPointerUp = (e: PointerEvent) => {\n if (!this.enabled) return;\n e.preventDefault();\n e.stopPropagation();\n const hit = this.hitTestPointer(e);\n if (hit && hit.id === this.pointerDownGoId) {\n this.onSelect(hit, e);\n }\n this.pointerDownGoId = null;\n };\n\n init(params?: CombosDevelopmentToolSystemParams) {\n this.postMessageOrigin = params?.postMessageOrigin ?? '*';\n this.allowedMessageOrigins = mergeAllowedMessageOrigins(params?.allowedMessageOrigins);\n\n this.overlay = createOverlayCanvas();\n if (this.overlay) {\n this.overlay.canvas.addEventListener('pointerdown', this.onPointerDown);\n this.overlay.canvas.addEventListener('pointerup', this.onPointerUp);\n }\n\n if (typeof window !== 'undefined') {\n window.addEventListener(COMBOS_DEVELOPMENT_TOOL_SET_PICK_MODE, this.onWindowSetPickMode);\n window.addEventListener(\n COMBOS_DEVELOPMENT_TOOL_SET_MARKER_OVERLAY,\n this.onWindowSetMarkerOverlay,\n );\n window.addEventListener(COMBOS_DEVELOPMENT_TOOL_REFRESH, this.onWindowRefresh);\n window.addEventListener('message', this.onWindowMessage);\n }\n this.game.on(COMBOS_DEVELOPMENT_TOOL_SET_PICK_MODE, this.onGameSetPickMode);\n this.game.on(COMBOS_DEVELOPMENT_TOOL_SET_MARKER_OVERLAY, this.onGameSetMarkerOverlay);\n this.game.on(COMBOS_DEVELOPMENT_TOOL_REFRESH, this.onGameRefresh);\n\n this.syncOverlayMode();\n if (this.enabled) {\n this.needsRescan = true;\n }\n }\n\n onDestroy() {\n if (this.overlay) {\n this.overlay.canvas.removeEventListener('pointerdown', this.onPointerDown);\n this.overlay.canvas.removeEventListener('pointerup', this.onPointerUp);\n this.overlay.destroy();\n this.overlay = null;\n }\n if (typeof window !== 'undefined') {\n window.removeEventListener(COMBOS_DEVELOPMENT_TOOL_SET_PICK_MODE, this.onWindowSetPickMode);\n window.removeEventListener(\n COMBOS_DEVELOPMENT_TOOL_SET_MARKER_OVERLAY,\n this.onWindowSetMarkerOverlay,\n );\n window.removeEventListener(COMBOS_DEVELOPMENT_TOOL_REFRESH, this.onWindowRefresh);\n window.removeEventListener('message', this.onWindowMessage);\n }\n this.game.off(COMBOS_DEVELOPMENT_TOOL_SET_PICK_MODE, this.onGameSetPickMode);\n this.game.off(COMBOS_DEVELOPMENT_TOOL_SET_MARKER_OVERLAY, this.onGameSetMarkerOverlay);\n this.game.off(COMBOS_DEVELOPMENT_TOOL_REFRESH, this.onGameRefresh);\n this.markerOwners.clear();\n this.clearSelectionAndNotify('pick-disabled');\n }\n\n /** Programmatic toggle (same effect as events). */\n setEnabled(on: boolean) {\n if (this.enabled === on) return;\n this.enabled = on;\n this.syncOverlayMode();\n if (!on) {\n this.clearSelectionAndNotify('pick-disabled');\n this.postSetSuccess(false);\n } else {\n this.needsRescan = true;\n this.redrawOverlay();\n }\n }\n\n get isEnabled(): boolean {\n return this.enabled;\n }\n\n /**\n * Toggle the marker overlay: pin a persistent icon on every object that owns a\n * registered invisible component ({@link markerLayer}, Sound first). Independent\n * of pick mode / mute. Selecting and persisting edits still go through the\n * owner's `CombosDevelopmentToolTarget`.\n */\n setMarkerOverlay(on: boolean) {\n if (this.markerOverlayEnabled === on) return;\n this.markerOverlayEnabled = on;\n this.syncOverlayMode();\n if (on) {\n this.needsMarkerRescan = true;\n } else {\n this.markerOwners.clear();\n this.postMarkerOverlaySuccess(false, []);\n this.redrawOverlay();\n }\n }\n\n get isMarkerOverlayEnabled(): boolean {\n return this.markerOverlayEnabled;\n }\n\n /** Master mute when `SoundSystem` exists; otherwise the last requested value. */\n get isMuted(): boolean {\n const sound = this.getSoundSystem();\n if (sound) {\n return sound.muted;\n }\n return this.mutedWithoutSoundSystem;\n }\n\n /**\n * @deprecated Host mute is handled by `@combos-fun/plugin-sound`.\n * Forwards to `SoundSystem.muted` when that system is registered.\n */\n setMuted(muted: boolean) {\n const sound = this.getSoundSystem();\n if (sound) {\n sound.muted = muted;\n return;\n }\n this.mutedWithoutSoundSystem = muted;\n }\n\n update() {\n if (this.enabled && this.needsRescan) {\n this.needsRescan = false;\n this.postSetSuccess(true);\n }\n\n if (this.markerOverlayEnabled && this.needsMarkerRescan) {\n this.needsMarkerRescan = false;\n this.attachMarkers();\n }\n\n if (this.selected?.destroyed) {\n this.clearSelectionAndNotify('target-removed');\n }\n }\n\n lateUpdate(_e: UpdateParams) {\n this.redrawOverlay();\n }\n\n componentChanged(changed: ComponentChanged) {\n const { type, gameObject, componentName } = changed;\n if (!gameObject || componentName !== 'CombosDevelopmentToolTarget') return;\n\n if (type === OBSERVER_TYPE.REMOVE && this.selected === gameObject) {\n this.clearSelectionAndNotify('target-removed');\n }\n\n if (this.markerOverlayEnabled) {\n this.needsMarkerRescan = true;\n }\n }\n\n /** Re-bind pick targets / markers after dynamic scene changes while active. */\n requestSceneRescan() {\n if (this.enabled) {\n this.needsRescan = true;\n }\n if (this.markerOverlayEnabled) {\n this.needsMarkerRescan = true;\n }\n }\n\n private syncOverlayMode() {\n const active = this.enabled || this.markerOverlayEnabled;\n this.overlay?.setVisible(active);\n this.overlay?.setPickEnabled(this.enabled);\n }\n\n private collectGameObjects(go: GameObject, out: GameObject[]) {\n out.push(go);\n for (const tr of go.transform.children) {\n this.collectGameObjects(tr.gameObject, out);\n }\n }\n\n private listSceneObjects(): GameObject[] {\n const list: GameObject[] = [];\n const scene = this.game.scene;\n if (!scene?.transform?.children) return list;\n for (const tr of scene.transform.children) {\n this.collectGameObjects(tr.gameObject, list);\n }\n return list;\n }\n\n private isIgnoredPickGo(go: GameObject): boolean {\n return go.name === OUTLINE_GO_NAME || this.isMarkerGo(go);\n }\n\n private isMarkerGo(go: GameObject): boolean {\n return typeof go.name === 'string' && go.name.startsWith(MARKER_GO_NAME_PREFIX);\n }\n\n private projectGo(go: GameObject): ScreenRect | null {\n return projectGameObjectToScreen(go, {\n css: this.overlayCss,\n design: resolveDesignSize(this.game),\n camera: resolveCamera(this.game),\n object3D: resolveObject3D(this.game, go.id),\n });\n }\n\n private collectOverlayHits(): OverlayHit[] {\n const hits: OverlayHit[] = [];\n for (const go of this.listSceneObjects()) {\n if (go.destroyed || this.isIgnoredPickGo(go)) continue;\n if (!go.getComponent(CombosDevelopmentToolTarget)) continue;\n const rect = this.projectGo(go);\n if (rect) {\n hits.push({ go, rect });\n }\n if (this.markerOverlayEnabled && resolveMarkerDef(go)) {\n const markerRect = this.markerRectFor(go, rect);\n if (markerRect) {\n hits.push({ go, rect: markerRect });\n }\n }\n }\n return hits;\n }\n\n private markerRectFor(go: GameObject, objectRect: ScreenRect | null): ScreenRect | null {\n const rect = objectRect ?? this.projectGo(go);\n if (!rect) return null;\n if (go.getComponent('Transform3D')) {\n return {\n x: rect.x + rect.width / 2 - MARKER_ICON_SIZE / 2,\n y: rect.y + rect.height / 2 - MARKER_ICON_SIZE / 2,\n width: MARKER_ICON_SIZE,\n height: MARKER_ICON_SIZE,\n };\n }\n return {\n x: rect.x,\n y: rect.y,\n width: MARKER_ICON_SIZE,\n height: MARKER_ICON_SIZE,\n };\n }\n\n private overlayPoint(e: PointerEvent): { x: number; y: number } {\n const canvas = this.overlay?.canvas;\n if (!canvas) return { x: 0, y: 0 };\n const rect = canvas.getBoundingClientRect();\n return { x: e.clientX - rect.left, y: e.clientY - rect.top };\n }\n\n private hitTestPointer(e: PointerEvent): GameObject | null {\n const pt = this.overlayPoint(e);\n const hits = this.collectOverlayHits();\n return hitTestRects(\n pt.x,\n pt.y,\n hits.map(h => ({ id: h.go, rect: h.rect })),\n );\n }\n\n private redrawOverlay() {\n const overlay = this.overlay;\n if (!overlay) return;\n\n const active = this.enabled || this.markerOverlayEnabled;\n if (!active) {\n overlay.setVisible(false);\n return;\n }\n\n const gameCanvas = this.game.canvas ?? this.game.scene?.canvas;\n if (!gameCanvas) return;\n\n const css = overlay.sync(gameCanvas);\n if (!css) return;\n this.overlayCss = css;\n\n overlay.ctx.clearRect(0, 0, css.width, css.height);\n this.drawMarkers(overlay.ctx);\n this.drawSelectionOutline(overlay.ctx);\n }\n\n private drawMarkers(ctx: CanvasRenderingContext2D) {\n if (!this.markerOverlayEnabled) return;\n\n const gfx = new CanvasMarkerGraphics(ctx);\n for (const go of this.listSceneObjects()) {\n if (go.destroyed || this.isIgnoredPickGo(go)) continue;\n const def = resolveMarkerDef(go);\n if (!def) continue;\n const objectRect = this.projectGo(go);\n const rect = this.markerRectFor(go, objectRect);\n if (!rect) continue;\n ctx.save();\n ctx.translate(rect.x, rect.y);\n drawMarkerIcon(gfx, def, MARKER_ICON_SIZE);\n ctx.restore();\n }\n }\n\n private drawSelectionOutline(ctx: CanvasRenderingContext2D) {\n if (!this.enabled || !this.selected || this.selected.destroyed) return;\n const rect = this.projectGo(this.selected);\n if (!rect) return;\n\n const design = resolveDesignSize(this.game);\n const scale = design ? this.overlayCss.width / design.width : 1;\n ctx.save();\n ctx.strokeStyle = OUTLINE_COLOR;\n ctx.lineWidth = Math.max(2, 4 * (Number.isFinite(scale) && scale > 0 ? scale : 1));\n ctx.strokeRect(rect.x, rect.y, rect.width, rect.height);\n ctx.restore();\n }\n\n private postSetSuccess(enabled: boolean) {\n const payload = {\n type: COMBOS_DEVELOPMENT_TOOL_PICK_MODE_SUCCESS,\n enabled,\n };\n if (typeof window !== 'undefined' && window.parent && window.parent !== window) {\n window.parent.postMessage(payload, this.postMessageOrigin);\n }\n this.game.emit(COMBOS_DEVELOPMENT_TOOL_PICK_MODE_SUCCESS, { enabled });\n }\n\n private attachMarkers() {\n this.markerOwners.clear();\n\n const counts = new Map<string, number>();\n for (const go of this.listSceneObjects()) {\n if (this.isIgnoredPickGo(go)) continue;\n const def = resolveMarkerDef(go);\n if (!def) continue;\n this.markerOwners.add(go.id);\n counts.set(def.componentName, (counts.get(def.componentName) ?? 0) + 1);\n }\n\n const markers = [...counts.entries()].map(([componentName, count]) => ({\n componentName,\n count,\n }));\n this.postMarkerOverlaySuccess(true, markers);\n this.redrawOverlay();\n }\n\n private postMarkerOverlaySuccess(\n enabled: boolean,\n markers: Array<{ componentName: string; count: number }>,\n ) {\n const total = markers.reduce((sum, m) => sum + m.count, 0);\n const state = { enabled, total, markers };\n const payload = {\n type: COMBOS_DEVELOPMENT_TOOL_MARKER_OVERLAY_SUCCESS,\n ...state,\n };\n if (typeof window !== 'undefined' && window.parent && window.parent !== window) {\n window.parent.postMessage(payload, this.postMessageOrigin);\n }\n this.game.emit(COMBOS_DEVELOPMENT_TOOL_MARKER_OVERLAY_SUCCESS, state);\n }\n\n private getSoundSystem(): SoundSystemLike | null {\n const system = this.game.getSystem('SoundSystem') as unknown;\n if (\n !system ||\n typeof system !== 'object' ||\n !('muted' in system) ||\n typeof (system as SoundSystemLike).muted !== 'boolean'\n ) {\n return null;\n }\n return system as SoundSystemLike;\n }\n\n private onSelect(go: GameObject, e: PointerEvent) {\n if (!this.enabled) return;\n\n this.selected = go;\n this.redrawOverlay();\n\n const overlayPt = this.overlayPoint(e);\n const pointer = cssToDesign(overlayPt, resolveDesignSize(this.game), this.overlayCss);\n const snapshot = buildGameObjectSnapshot(go);\n const payload = {\n type: COMBOS_DEVELOPMENT_TOOL_GAMEOBJECT_SELECTED,\n snapshot,\n pointer,\n };\n if (typeof window !== 'undefined' && window.parent && window.parent !== window) {\n window.parent.postMessage(payload, this.postMessageOrigin);\n }\n }\n\n private findGameObjectById(id: number): GameObject | null {\n return this.listSceneObjects().find(go => go.id === id) ?? null;\n }\n\n private findGameObjectBySource(source: SceneSourceAnchor): GameObject | null {\n const wantFile = source.file.trim();\n const wantAnchor = (source.anchor ?? '').trim();\n if (!wantAnchor) {\n return null;\n }\n\n for (const go of this.listSceneObjects()) {\n const anchor = readSourceAnchor(go);\n if (!anchor || anchor.file !== wantFile) {\n continue;\n }\n const resolvedAnchor = anchor.anchor ?? go.name;\n if (resolvedAnchor === wantAnchor) {\n return go;\n }\n }\n\n return null;\n }\n\n private resolveApplyTarget(payload: ApplyPropertyPayload): GameObject | null {\n if (typeof payload.gameObjectId === 'number') {\n const byId = this.findGameObjectById(payload.gameObjectId);\n if (byId) {\n return byId;\n }\n }\n\n const file = payload.source?.file?.trim();\n const anchor = payload.source?.anchor?.trim();\n if (!file || !anchor) {\n return null;\n }\n\n return this.findGameObjectBySource({ file, anchor });\n }\n\n private handleApplyProperty(payload: ApplyPropertyPayload) {\n const componentName = payload.componentName;\n const path = payload.path;\n const hasId = typeof payload.gameObjectId === 'number';\n const hasSource =\n Boolean(payload.source?.file?.trim()) && Boolean(payload.source?.anchor?.trim());\n\n if (\n (!hasId && !hasSource) ||\n typeof componentName !== 'string' ||\n !Array.isArray(path) ||\n path.length === 0\n ) {\n return;\n }\n\n const go = this.resolveApplyTarget(payload);\n if (!go) return;\n\n const applied = applyPropertyWithHooks(go, componentName, path, payload.value);\n if (!applied) return;\n\n if (this.selected?.id === go.id) {\n this.redrawOverlay();\n this.postSnapshotUpdate(go);\n }\n }\n\n private postSnapshotUpdate(go: GameObject) {\n const snapshot = buildGameObjectSnapshot(go);\n if (typeof window !== 'undefined' && window.parent && window.parent !== window) {\n window.parent.postMessage(\n {\n type: COMBOS_DEVELOPMENT_TOOL_GAMEOBJECT_SELECTED,\n snapshot,\n pointer: null,\n source: 'property-applied',\n },\n this.postMessageOrigin,\n );\n }\n }\n\n private clearSelectionAndNotify(reason: DevelopmentToolDeselectReason) {\n const hadSelection = this.selected != null;\n this.selected = null;\n this.redrawOverlay();\n if (!shouldNotifyGameObjectDeselected(hadSelection)) {\n return;\n }\n this.postGameObjectDeselected(reason);\n }\n\n private postGameObjectDeselected(reason: DevelopmentToolDeselectReason) {\n const payload = buildGameObjectDeselectedPayload(reason);\n if (typeof window !== 'undefined' && window.parent && window.parent !== window) {\n window.parent.postMessage(payload, this.postMessageOrigin);\n }\n this.game.emit(payload.type, { reason });\n }\n}\n","/** Auto-generated by scripts/build-package.mjs — do not edit. */\n\nimport CombosDevelopmentToolSystem from './CombosDevelopmentToolSystem';\n\nObject.assign(CombosDevelopmentToolSystem, {\n packageName: \"@combos-fun/plugin-development-tool\",\n packageVersion: \"0.0.52\",\n});\n","import type { GameObject } from '@combos-fun/engine';\nimport CombosDevelopmentToolTarget from './CombosDevelopmentToolTarget';\nimport { isSceneSourceAnchor } from './sceneEditTypes';\n\nexport interface DevelopmentTargetSource {\n file: string;\n anchor: string;\n}\n\nfunction isInternalEditorGo(go: GameObject): boolean {\n return typeof go.name === 'string' && go.name.startsWith('__');\n}\n\nfunction isSceneLike(go: GameObject): boolean {\n return Array.isArray((go as { gameObjects?: unknown }).gameObjects);\n}\n\nfunction sourceIsComplete(raw: unknown): boolean {\n if (!isSceneSourceAnchor(raw)) return false;\n return Boolean(raw.file.trim()) && Boolean((raw.anchor ?? '').trim());\n}\n\n/**\n * Marks `go` for editor pick / persist. Idempotent: existing Targets keep a\n * complete `payload.source`; missing identity is filled from `source`.\n *\n * Inserted by `@combos-fun/vite-plugin-development-target`. Game code should\n * not call this by hand.\n */\nexport function attachDevelopmentTarget<T extends GameObject>(\n go: T,\n source: DevelopmentTargetSource,\n): T {\n if (!go || go.destroyed || isInternalEditorGo(go) || isSceneLike(go)) {\n return go;\n }\n\n const file = source.file.trim();\n const anchor = source.anchor.trim();\n if (!file || !anchor) {\n return go;\n }\n\n const existing = go.getComponent(CombosDevelopmentToolTarget);\n if (existing) {\n if (!sourceIsComplete(existing.payload?.source)) {\n existing.payload = {\n ...(existing.payload ?? {}),\n source: { file, anchor },\n };\n }\n return go;\n }\n\n go.addComponent(\n new CombosDevelopmentToolTarget({\n payload: { source: { file, anchor } },\n }),\n );\n return go;\n}\n"],"names":["Component","IDE_PROPERTY_METADATA","CombosDevelopmentToolSystem","System","OBSERVER_TYPE","__decorate","decorators"],"mappings":"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"}