diff --git a/.github/workflows/rendering-ci.yml b/.github/workflows/rendering-ci.yml
index 3a5d08dc..74b93db9 100644
--- a/.github/workflows/rendering-ci.yml
+++ b/.github/workflows/rendering-ci.yml
@@ -63,7 +63,40 @@ env:
CMAKE_BUILD_PARALLEL_LEVEL: "2"
jobs:
+ scope:
+ name: Validation scope
+ runs-on: ubuntu-latest
+ outputs:
+ profile: ${{ steps.select.outputs.profile }}
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ - name: Test and select validation scope
+ id: select
+ shell: pwsh
+ env:
+ BASE_REVISION: ${{ github.event.pull_request.base.sha || github.event.before }}
+ HEAD_REVISION: ${{ github.event.pull_request.head.sha || github.sha }}
+ FORCE_FULL: ${{ github.event_name == 'workflow_dispatch' }}
+ IS_PULL_REQUEST: ${{ github.event_name == 'pull_request' }}
+ run: |
+ ./tests/ci/Test-ValidationScope.ps1
+ if ($env:FORCE_FULL -eq 'true' -or $env:BASE_REVISION -match '^0+$') {
+ $selection = ./tests/ci/Select-ValidationScope.ps1 -Full
+ } else {
+ git fetch --no-tags origin $env:BASE_REVISION $env:HEAD_REVISION
+ if ($LASTEXITCODE -ne 0) { throw 'The exact validation comparison could not be fetched.' }
+ $selection = ./tests/ci/Select-ValidationScope.ps1 -BaseRevision $env:BASE_REVISION -HeadRevision $env:HEAD_REVISION `
+ -PullRequest:($env:IS_PULL_REQUEST -eq 'true')
+ }
+ "profile=$($selection.profile)" >> $env:GITHUB_OUTPUT
+ '## Selected validation scope' >> $env:GITHUB_STEP_SUMMARY
+ ($selection | ConvertTo-Json -Depth 5) >> $env:GITHUB_STEP_SUMMARY
+
managed:
+ needs: scope
+ if: needs.scope.outputs.profile == 'full'
name: Managed / ${{ matrix.os }}
runs-on: ${{ matrix.os }}
timeout-minutes: 90
@@ -103,6 +136,7 @@ jobs:
if-no-files-found: error
rendering:
+ needs: scope
if: github.event_name != 'workflow_dispatch' || inputs.native_product_acceptance
name: ${{ matrix.platform }}
runs-on: ${{ matrix.os }}
@@ -170,6 +204,7 @@ jobs:
run: |
dotnet restore entry/InnoEngine.Editor/InnoEngine.Editor.csproj -p:Configuration=Debug --disable-parallel -nr:false
if ($LASTEXITCODE -ne 0) { throw 'The Debug Editor dependency restore failed.' }
+ if ('${{ needs.scope.outputs.profile }}' -eq 'editor') { exit 0 }
dotnet restore entry/InnoEngine.Editor/InnoEngine.Editor.csproj -p:Configuration=Release --disable-parallel -nr:false
if ($LASTEXITCODE -ne 0) { throw 'The Release Editor dependency restore failed.' }
dotnet restore '${{ matrix.player_project }}' -p:Configuration=Release `
@@ -217,7 +252,7 @@ jobs:
- name: Build host Editor Release
id: native_release
- if: ${{ !cancelled() && steps.native_debug.outcome == 'success' }}
+ if: ${{ !cancelled() && needs.scope.outputs.profile == 'full' && steps.native_debug.outcome == 'success' }}
shell: pwsh
run: |
dotnet run --project "entry/InnoEngine.Build/InnoEngine.Build.csproj" --no-build -- editor --configuration Release 2>&1 |
@@ -246,7 +281,12 @@ jobs:
if: ${{ !cancelled() && steps.build_entry.outcome == 'success' }}
shell: pwsh
run: |
- dotnet build InnoEngine.sln --configuration SourceDebug --disable-build-servers -m:1 -nr:false `
+ $source = 'InnoEngine.sln'
+ if ('${{ needs.scope.outputs.profile }}' -eq 'editor') {
+ $source = Join-Path $PWD 'artifacts/acceptance/ci-build/contracts.slnf'
+ ./tests/ci/New-ValidationSolutionFilter.ps1 -OutputPath $source
+ }
+ dotnet build $source --configuration SourceDebug --disable-build-servers -m:1 -nr:false `
-p:UseSharedCompilation=false '-bl:artifacts/acceptance/ci-build/source-debug.binlog' 2>&1 |
Tee-Object -FilePath 'artifacts/acceptance/ci-build/source-debug.log'
if ($LASTEXITCODE -ne 0) { throw 'SourceDebug build failed.' }
@@ -267,7 +307,7 @@ jobs:
run: dotnet run --project "entry/InnoEngine.Build/InnoEngine.Build.csproj" --no-build -- verify .
- name: Run complete test suite
- if: ${{ !cancelled() && steps.source.outcome == 'success' && steps.player_contract.outcome == 'success' }}
+ if: ${{ needs.scope.outputs.profile == 'full' && !cancelled() && steps.source.outcome == 'success' && steps.player_contract.outcome == 'success' }}
shell: pwsh
run: |
$properties = Join-Path $PWD '${{ matrix.product_properties }}'
@@ -288,6 +328,16 @@ jobs:
if ($LASTEXITCODE -ne 0) { throw "Target test closure compilation failed." }
./tests/Invoke-IsolatedTests.ps1 -Configuration SourceDebug -Target '${{ matrix.build_target }}' -ProductProperties $properties
+ - name: Run affected Editor contract and workflow suites
+ if: ${{ needs.scope.outputs.profile == 'editor' && !cancelled() && steps.source.outcome == 'success' && steps.player_contract.outcome == 'success' }}
+ shell: pwsh
+ run: |
+ $output = Join-Path $env:RUNNER_TEMP 'InnoEditorChecks'
+ foreach ($profile in @('Contracts', 'Workflows')) {
+ ./tests/Invoke-EditorUiAcceptance.ps1 -Profile $profile -EditorOnly `
+ -ArtifactsPath $output -ResultsDirectory 'artifacts/acceptance/ci-tests'
+ }
+
- name: Generate source-independent Player Support Pack
if: ${{ !cancelled() && steps.native_release.outcome == 'success' }}
shell: pwsh
diff --git a/AGENTS.md b/AGENTS.md
index 509cd4a8..266e9671 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -337,3 +337,9 @@ public void AAA(
- Presentation preparation, drawing and publication form one owned operation. Reentry and retirement during that operation must fail before releasing resources. A callback failure ends only its owned native frame, preserves the original failure and never publishes partial draw data; it must not clear another context's stacks or lower native assertions.
- Native presentation fixtures must create and enter an `EditorUiSession`, explicitly compose their feature/presentation owners, and resolve the exact service under test. Asynchronous shutdown fixtures must retry the public Pending retirement protocol until owned cleanup completes; they cannot rely on continuation timing or remove resource-release assertions.
- Presentation input snapshots expose physical Core modifier semantics. Reverse native shortcut normalization at the presentation boundary using the owned context configuration; do not interpret normalized Control/Super flags as physical keys or add shared-layer OS detection. Native input fixtures explicitly select their conventions and cover both modifier policies and native modes.
+
+- Content-sized modals prepare one coherent frame snapshot and measure it before opening. Explicitly sized resizable windows prepare after current native input establishes their content bounds. Never invoke arbitrary drawing callbacks twice for measurement or rely on the previous message height.
+- Shared dialog widgets own text wrapping, progress, bounded body scrolling and action spacing. Domain callers consume those controls and shared metrics; they must not compensate with empty lines, arbitrary padding or a second scroll owner. Escape action behavior is explicit.
+- Workflow progress and cancellation are bound to the original owner and operation identity. Late callbacks cannot overwrite a newer request or a cancellation state, and progress presentation cannot weaken publication or generation retirement.
+
+- CI and local acceptance must follow the actual changed owners. Use scoped Editor verification for bounded UI changes; retain full verification for build, platform, backend, SDK, shared runtime or unknown owners. Record omitted checks explicitly and never bypass production validation to shorten CI.
diff --git a/docs/architecture/EDITOR_UI_DESIGN_STANDARD.md b/docs/architecture/EDITOR_UI_DESIGN_STANDARD.md
index d8ed91dc..f17006ab 100644
--- a/docs/architecture/EDITOR_UI_DESIGN_STANDARD.md
+++ b/docs/architecture/EDITOR_UI_DESIGN_STANDARD.md
@@ -116,3 +116,20 @@ Settings 的一次 Apply 复用单一 History transaction,所有 dirty owner
`EditorUiInput` 的 Control/Super 表示物理修饰键,不继承原生控件内部的快捷键归一化。呈现边界依据当前 Context 的键盘配置还原这些值,列表选择复用同一快照语义,平台仍通过 `EditorKeyboardPolicy` 选择 primary modifier。原生文本控件继续使用该 Context 的输入习惯;测试必须显式声明自己的键盘配置,并覆盖 Control/Super 与两种原生模式的组合,不能依赖 runner 的默认值。
最终报告分别评价架构、组织、状态与生命周期、抽象、复用、样式、扩展、交互、Undo/Redo、菜单和颗粒度;每项列出证据与限制。目录整齐、测试数量或正常启动不能代替视觉、输入、重复 reload、资源收敛和成对性能验收。
+
+## 动态 Modal 的状态与尺寸
+
+- 窗口尺寸、换行和绘制使用本帧同一快照,不依赖上一条消息的高度。
+- 准备只读取和测量;实际动作由原领域 owner 校验 operation 后执行。禁止双次绘制回调测量。
+- 统一 metrics 表达 padding、item spacing、按钮高度和字体尺度。业务 Modal 不通过额外空行、固定大高度或零散数字补偿布局。
+- 消息与详情共用一个正文滚动 owner,操作行保持可达。Child 不重复承担父窗口已经提供的外层 padding。
+- 明确区分声明尺寸、自适应尺寸及用户调整尺寸;部分指定尺寸也必须得到正确解释。
+- 当前帧内容增长、缩短、空文本、动作变化及非整数尺度都属于必要回归。
+
+### 按职责选择 CI 验收
+
+Engine CI 根据完整 Git 变更集合选择检查,不能按 issue 编号或为了节省时间临时跳过失败项。仅涉及 Editor 创作层(包括脚本 reload owner)及对应测试、文档时使用 Editor 范围:Debug Editor、真实原生 smoke、Editor 契约与工作流、架构和 Wiki 检查。Release、NativeAOT 还原、十次热构建、其他领域完整测试及 Player Support Pack 留给完整范围。SDK、工程图、build、platform、backend、共享 Runtime 或未知 owner 的变化保守选择完整范围。手动工作流仍执行完整范围。
+
+脚本 `tests/ci/Select-ValidationScope.ps1` 只编排验收,不改变生产构建或缓存校验。移动文件同时核对旧 owner 和新 owner;选择理由与省略项写入 GitHub job summary。Editor 范围不等于完整产品矩阵通过;完整源码和 Player contract 编译仍服务于当前架构/Wiki 的真实引用验证,不执行 Player 导出或 Support Pack 生产。
+
+UI 范围的生产源码检查由当前 Solution 生成 169 个生产工程的 `.slnf`,引用闭包仍由 MSBuild 求值,不编译全部无关测试工程。只有通过完整 Git 差异证明为标准 SDK 工程中、相同无条件引用边的 `PrivateAssets=compile` 收紧时,才允许保留 Editor 范围;新增引用、包、TFM、SDK、条件或构建目标变化仍走完整范围。PR 使用 merge base,push 使用 before/head,避免把目标分支的无关改动混进 PR 检查。
diff --git a/docs/editor/Inno.Editor.Assets.md b/docs/editor/Inno.Editor.Assets.md
index 8d22acb0..065caa4e 100644
--- a/docs/editor/Inno.Editor.Assets.md
+++ b/docs/editor/Inno.Editor.Assets.md
@@ -113,6 +113,10 @@ AssetDraftDocuments 的 Replace/ReplaceMany 立即记录中立 bytes,不延迟
批量删除和移动先验证整个选择,再将被选父目录覆盖的子条目归一化,最后用现有 History transaction 原子执行。后续失败自动恢复先前步骤。安装源始终只读。
+## Sample Import 呈现快照
+
+`AssetSampleImportModule.progress` 在原有进度锁内一次捕获 `AssetSampleImportProgress`;后台验证观察者绑定具体操作,退休后不再接收进度。`Cancel(operationId)` 校验当前请求,并在取消底层工作之前发布不可被普通进度覆盖的取消状态。成功状态在发布及 payload 释放完成后设置;History、回滚和依赖退休仍由原事务负责。
+
## 当前源码公开 API 清单
此清单对应当前 SDK 求值与源码符号;内部类型不构成公开 API。
@@ -224,23 +228,34 @@ AssetDraftDocuments 的 Replace/ReplaceMany 立即记录中立 bytes,不延迟
-
+
-
-
+
-
-
+
-
-| API 与源码 | 契约与参数 | 返回值 | 重要异常 |
-| --- | --- | --- | --- |
-| [`public sealed class Inno.Editor.Assets.AssetCreationMenuAttribute : System.Attribute`](../../src/composition/editor/features/Inno.Editor.Assets/Creation/AssetCreationTemplate.cs#L13) | Declares the source name, extension, and menu placement that cannot be inferred from an type alone. | — | — |
-| [`public Inno.Editor.Assets.AssetCreationMenuAttribute.AssetCreationMenuAttribute(string id, string menuPath, string extension, string defaultName, int groupOrder = 0, int itemOrder = 0, bool separatorBeforeGroup = false)`](../../src/composition/editor/features/Inno.Editor.Assets/Creation/AssetCreationTemplate.cs#L42) | Creates one asset creation menu declaration. `id`: Globally stable template identifier. `menuPath`: Slash-delimited path below the File Browser Create menu. `extension`: Native source extension, including its leading dot. `defaultName`: Default source name without an extension or numeric suffix. `groupOrder`: Stable order of the top-level category below Create. `itemOrder`: Stable order of the leaf within its immediate category. `separatorBeforeGroup`: Whether the top-level category starts after a separator. | — | `System.ArgumentException`: Thrown when an identifier, path, source name, or native extension is invalid. |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+| API | 职责与参数 | 返回语义 | 失败条件 |
+|---|---|---|---|
+| [`public sealed class Inno.Editor.Assets.AssetCreationMenuAttribute : System.Attribute`](../../src/composition/editor/features/Inno.Editor.Assets/Creation/AssetCreationTemplate.cs#L13) | Declares the source name, extension, and menu placement that cannot be inferred from an Inno.Assets.AssetObject type alone. | — | — |
+| [`public Inno.Editor.Assets.AssetCreationMenuAttribute.AssetCreationMenuAttribute(string id, string menuPath, string extension, string defaultName, int groupOrder = 0, int itemOrder = 0, bool separatorBeforeGroup = false)`](../../src/composition/editor/features/Inno.Editor.Assets/Creation/AssetCreationTemplate.cs#L42) | Creates one asset creation menu declaration. `id`: Globally stable template identifier. `menuPath`: Slash-delimited path below the File Browser Create menu. `extension`: Native source extension, including its leading dot. `defaultName`: Default source name without an extension or numeric suffix. `groupOrder`: Stable order of the top-level category below Create. `itemOrder`: Stable order of the leaf within its immediate category. `separatorBeforeGroup`: Whether the top-level category starts after a separator. | — | `System.ArgumentException`: Thrown when an identifier, path, source name, or native extension is invalid. |
| [`public string Inno.Editor.Assets.AssetCreationMenuAttribute.id { get; }`](../../src/composition/editor/features/Inno.Editor.Assets/Creation/AssetCreationTemplate.cs#L84) | Gets the globally stable template identifier. | — | — |
| [`public string Inno.Editor.Assets.AssetCreationMenuAttribute.menuPath { get; }`](../../src/composition/editor/features/Inno.Editor.Assets/Creation/AssetCreationTemplate.cs#L89) | Gets the slash-delimited path below the File Browser Create menu. | — | — |
| [`public string Inno.Editor.Assets.AssetCreationMenuAttribute.extension { get; }`](../../src/composition/editor/features/Inno.Editor.Assets/Creation/AssetCreationTemplate.cs#L94) | Gets the native source extension, including its leading dot. | — | — |
@@ -251,26 +266,26 @@ AssetDraftDocuments 的 Replace/ReplaceMany 立即记录中立 bytes,不延迟
| [`public abstract class Inno.Editor.Assets.AssetCreationTemplate`](../../src/composition/editor/features/Inno.Editor.Assets/Creation/AssetCreationTemplate.cs#L124) | Produces the detached initial value for one authorable native asset source. | — | — |
| [`public abstract System.Type Inno.Editor.Assets.AssetCreationTemplate.assetType { get; }`](../../src/composition/editor/features/Inno.Editor.Assets/Creation/AssetCreationTemplate.cs#L129) | Gets the concrete asset type produced by this template. | — | — |
| [`public abstract Inno.Assets.AssetObject Inno.Editor.Assets.AssetCreationTemplate.Create()`](../../src/composition/editor/features/Inno.Editor.Assets/Creation/AssetCreationTemplate.cs#L137) | Creates a detached default value that has not been imported or published. | A new asset value owned by the caller. | — |
-| [`public virtual byte[] Inno.Editor.Assets.AssetCreationTemplate.Encode(Inno.Editor.Assets.AssetCreationContext context, Inno.Assets.AssetObject asset)`](../../src/composition/editor/features/Inno.Editor.Assets/Creation/AssetCreationTemplate.cs#L156) | Encodes the detached initial value into the source representation owned by this template. `context`: Creation services scoped to the current Asset source pipeline. `asset`: The exact value returned by . | Complete source bytes ready for an atomic File Browser create operation. | — |
-| [`protected Inno.Editor.Assets.AssetCreationTemplate.AssetCreationTemplate()`](../../src/composition/editor/features/Inno.Editor.Assets/Creation/AssetCreationTemplate.cs#L124) | Inherited or compiler-provided contract. | — | — |
+| [`public virtual byte[] Inno.Editor.Assets.AssetCreationTemplate.Encode(Inno.Editor.Assets.AssetCreationContext context, Inno.Assets.AssetObject asset)`](../../src/composition/editor/features/Inno.Editor.Assets/Creation/AssetCreationTemplate.cs#L156) | Encodes the detached initial value into the source representation owned by this template. `context`: Creation services scoped to the current Asset source pipeline. `asset`: The exact value returned by Inno.Editor.Assets.AssetCreationTemplate.Create. | Complete source bytes ready for an atomic File Browser create operation. | — |
+| [`protected Inno.Editor.Assets.AssetCreationTemplate.AssetCreationTemplate()`](../../src/composition/editor/features/Inno.Editor.Assets/Creation/AssetCreationTemplate.cs#L124) | 由 C# 编译器生成的值契约成员。 | — | — |
| [`public sealed class Inno.Editor.Assets.AssetCreationContext`](../../src/composition/editor/features/Inno.Editor.Assets/Creation/AssetCreationTemplate.cs#L169) | Provides source encoding services to one detached Asset creation template invocation. | — | — |
-| [`public Inno.Editor.Assets.AssetCreationContext.AssetCreationContext(Inno.Assets.Pipeline.AssetSourceStore sources)`](../../src/composition/editor/features/Inno.Editor.Assets/Creation/AssetCreationTemplate.cs#L180) | Creates a context over the source serializer owned by the active Asset pipeline. `sources`: Source serializer carrying the active reference context. | — | — |
-| [`public byte[] Inno.Editor.Assets.AssetCreationContext.EncodeNative(Inno.Assets.AssetObject asset)`](../../src/composition/editor/features/Inno.Editor.Assets/Creation/AssetCreationTemplate.cs#L191) | Encodes an Asset value through the current native structured source serializer. `asset`: Detached Asset value to encode. | Complete native source bytes, including the concrete serialized type identity. | — |
-| [`public abstract class Inno.Editor.Assets.AssetCreationTemplate where TAsset : Inno.Assets.AssetObject, new() : Inno.Editor.Assets.AssetCreationTemplate`](../../src/composition/editor/features/Inno.Editor.Assets/Creation/AssetCreationTemplate.cs#L204) | Creates a default-constructed native source for an authorable asset type. `TAsset`: Concrete serializable asset type. | — | — |
+| [`public Inno.Editor.Assets.AssetCreationContext.AssetCreationContext(Inno.Assets.Pipeline.AssetSourceStore sources)`](../../src/composition/editor/features/Inno.Editor.Assets/Creation/AssetCreationTemplate.cs#L180) | Creates a context over the source serializer owned by the active Asset pipeline. `sources`: Source serializer carrying the active reference context. | — | — |
+| [`public byte[] Inno.Editor.Assets.AssetCreationContext.EncodeNative(Inno.Assets.AssetObject asset)`](../../src/composition/editor/features/Inno.Editor.Assets/Creation/AssetCreationTemplate.cs#L191) | Encodes an Asset value through the current native structured source serializer. `asset`: Detached Asset value to encode. | Complete native source bytes, including the concrete serialized type identity. | — |
+| [`public abstract class Inno.Editor.Assets.AssetCreationTemplate where TAsset : Inno.Assets.AssetObject, new() : Inno.Editor.Assets.AssetCreationTemplate`](../../src/composition/editor/features/Inno.Editor.Assets/Creation/AssetCreationTemplate.cs#L204) | Creates a default-constructed native source for an authorable asset type. `TAsset`: Concrete serializable asset type. | — | — |
| [`public override sealed System.Type Inno.Editor.Assets.AssetCreationTemplate.assetType { get; }`](../../src/composition/editor/features/Inno.Editor.Assets/Creation/AssetCreationTemplate.cs#L210) | Gets the asset type created by this Editor template. | — | — |
| [`public override Inno.Assets.AssetObject Inno.Editor.Assets.AssetCreationTemplate.Create()`](../../src/composition/editor/features/Inno.Editor.Assets/Creation/AssetCreationTemplate.cs#L218) | Creates a value using this implementation's validated inputs. | The validated asset object that represents the completed operation. | — |
| [`protected virtual TAsset Inno.Editor.Assets.AssetCreationTemplate.CreateAsset()`](../../src/composition/editor/features/Inno.Editor.Assets/Creation/AssetCreationTemplate.cs#L226) | Creates the initial detached value, allowing specialized deterministic defaults. | A new asset value owned by the caller. | — |
-| [`protected Inno.Editor.Assets.AssetCreationTemplate.AssetCreationTemplate()`](../../src/composition/editor/features/Inno.Editor.Assets/Creation/AssetCreationTemplate.cs#L204) | Inherited or compiler-provided contract. | — | — |
-| [`public sealed class Inno.Editor.Assets.AssetDraftDocuments where TAsset : Inno.Assets.AssetObject : System.IDisposable`](../../src/composition/editor/features/Inno.Editor.Assets/Documents/AssetDraftDocuments.cs#L19) | Owns detached native asset drafts with shared document, History, recovery and explicit-save semantics. `TAsset`: Native source type edited by the consuming feature. | — | — |
-| [`public Inno.Editor.Assets.AssetDraftDocuments.AssetDraftDocuments(Inno.Assets.Pipeline.AssetPipeline assets, Inno.Core.Serialization.SerializationRegistry serialization, Inno.Editor.Interactions.EditorInteractions interactions, string providerId, string historyKind, string extension, string label)`](../../src/composition/editor/features/Inno.Editor.Assets/Documents/AssetDraftDocuments.cs#L57) | Creates a feature-owned draft store; call Start after document services become available. `assets`: Owner of source identities, serialization and import. `serialization`: Host registry for neutral History and recovery records. `interactions`: Shared documents and History services. `providerId`: Stable unique document provider identifier. `historyKind`: Stable protocol handled by the feature's registered History handler. `extension`: Native source extension including its leading dot. `label`: Human-readable singular asset kind. | — | — |
-| [`public Inno.Editor.Assets.AssetDraftDocuments.Draft Inno.Editor.Assets.AssetDraftDocuments.GetDraft(System.Guid assetId)`](../../src/composition/editor/features/Inno.Editor.Assets/Documents/AssetDraftDocuments.cs#L95) | Gets host-owned neutral presentation state for an open document. `assetId`: Persistent source identity. | Read-only presentation state; it contains no live asset or extension objects. | — |
-| [`public System.Guid Inno.Editor.Assets.AssetDraftDocuments.Open(Inno.Assets.AssetPath path)`](../../src/composition/editor/features/Inno.Editor.Assets/Documents/AssetDraftDocuments.cs#L105) | Opens a native asset source in the shared document service without revealing a second Inspector. `path`: Source path, including sources with failed imports. | The persistent asset identity used for subsequent draft operations. | — |
-| [`public TAsset Inno.Editor.Assets.AssetDraftDocuments.Read(System.Guid assetId)`](../../src/composition/editor/features/Inno.Editor.Assets/Documents/AssetDraftDocuments.cs#L124) | Reads a detached current-generation value; callers must never mutate its referenced canonical assets. `assetId`: Open asset identity. | A detached editable asset whose changes have not been published. | — |
-| [`public void Inno.Editor.Assets.AssetDraftDocuments.Replace(System.Guid assetId, TAsset candidate, string? mergeKey = null)`](../../src/composition/editor/features/Inno.Editor.Assets/Documents/AssetDraftDocuments.cs#L137) | Updates the open draft through shared History without saving or publishing a runtime asset. `assetId`: Open asset identity. `candidate`: Detached edited asset. `mergeKey`: The current gesture key, or null for an independent discrete edit. | — | — |
-| [`public void Inno.Editor.Assets.AssetDraftDocuments.ReplaceMany(System.Collections.Generic.IReadOnlyDictionary candidates, string? mergeKey = null)`](../../src/composition/editor/features/Inno.Editor.Assets/Documents/AssetDraftDocuments.cs#L157) | Records a fully validated selection sample atomically in the shared History. `candidates`: Detached candidates keyed by their persistent source identity. `mergeKey`: The owning gesture key, or null for a discrete edit. | — | — |
-| [`public bool Inno.Editor.Assets.AssetDraftDocuments.TryMergeHistory(Inno.Editor.Interactions.EditorHistoryChange older, Inno.Editor.Interactions.EditorHistoryChange newer, out Inno.Editor.Interactions.EditorHistoryChange? merged)`](../../src/composition/editor/features/Inno.Editor.Assets/Documents/AssetDraftDocuments.cs#L221) | Combines adjacent samples of the same document and gesture without retaining live assets. `older`: The preceding owned record. `newer`: The subsequent owned record. `merged`: Receives a new independent payload when the records form a contiguous edit. | True when both records describe the same continuous value change. | — |
-| [`public void Inno.Editor.Assets.AssetDraftDocuments.ValidateHistory(Inno.Editor.Interactions.EditorHistoryChange change, Inno.Editor.Interactions.EditorHistoryDirection direction)`](../../src/composition/editor/features/Inno.Editor.Assets/Documents/AssetDraftDocuments.cs#L252) | Validates a feature's neutral History record without changing the draft. `change`: Record owned by the shared History service. `direction`: Requested traversal direction. | — | — |
-| [`public void Inno.Editor.Assets.AssetDraftDocuments.ApplyHistory(Inno.Editor.Interactions.EditorHistoryChange change, Inno.Editor.Interactions.EditorHistoryDirection direction)`](../../src/composition/editor/features/Inno.Editor.Assets/Documents/AssetDraftDocuments.cs#L270) | Applies a previously validated neutral record; failed recovery leaves the draft unchanged. `change`: Record owned by the shared History service. `direction`: Requested traversal direction. | — | — |
+| [`protected Inno.Editor.Assets.AssetCreationTemplate.AssetCreationTemplate()`](../../src/composition/editor/features/Inno.Editor.Assets/Creation/AssetCreationTemplate.cs#L204) | 由 C# 编译器生成的值契约成员。 | — | — |
+| [`public sealed class Inno.Editor.Assets.AssetDraftDocuments where TAsset : Inno.Assets.AssetObject : System.IDisposable`](../../src/composition/editor/features/Inno.Editor.Assets/Documents/AssetDraftDocuments.cs#L19) | Owns detached native asset drafts with shared document, History, recovery and explicit-save semantics. `TAsset`: Native source type edited by the consuming feature. | — | — |
+| [`public Inno.Editor.Assets.AssetDraftDocuments.AssetDraftDocuments(Inno.Assets.Pipeline.AssetPipeline assets, Inno.Core.Serialization.SerializationRegistry serialization, Inno.Editor.Interactions.EditorInteractions interactions, string providerId, string historyKind, string extension, string label)`](../../src/composition/editor/features/Inno.Editor.Assets/Documents/AssetDraftDocuments.cs#L57) | Creates a feature-owned draft store; call Start after document services become available. `assets`: Owner of source identities, serialization and import. `serialization`: Host registry for neutral History and recovery records. `interactions`: Shared documents and History services. `providerId`: Stable unique document provider identifier. `historyKind`: Stable protocol handled by the feature's registered History handler. `extension`: Native source extension including its leading dot. `label`: Human-readable singular asset kind. | — | — |
+| [`public Inno.Editor.Assets.AssetDraftDocuments.Draft Inno.Editor.Assets.AssetDraftDocuments.GetDraft(System.Guid assetId)`](../../src/composition/editor/features/Inno.Editor.Assets/Documents/AssetDraftDocuments.cs#L95) | Gets host-owned neutral presentation state for an open document. `assetId`: Persistent source identity. | Read-only presentation state; it contains no live asset or extension objects. | — |
+| [`public System.Guid Inno.Editor.Assets.AssetDraftDocuments.Open(Inno.Assets.AssetPath path)`](../../src/composition/editor/features/Inno.Editor.Assets/Documents/AssetDraftDocuments.cs#L105) | Opens a native asset source in the shared document service without revealing a second Inspector. `path`: Source path, including sources with failed imports. | The persistent asset identity used for subsequent draft operations. | — |
+| [`public TAsset Inno.Editor.Assets.AssetDraftDocuments.Read(System.Guid assetId)`](../../src/composition/editor/features/Inno.Editor.Assets/Documents/AssetDraftDocuments.cs#L124) | Reads a detached current-generation value; callers must never mutate its referenced canonical assets. `assetId`: Open asset identity. | A detached editable asset whose changes have not been published. | — |
+| [`public void Inno.Editor.Assets.AssetDraftDocuments.Replace(System.Guid assetId, TAsset candidate, string? mergeKey = null)`](../../src/composition/editor/features/Inno.Editor.Assets/Documents/AssetDraftDocuments.cs#L137) | Updates the open draft through shared History without saving or publishing a runtime asset. `assetId`: Open asset identity. `candidate`: Detached edited asset. `mergeKey`: The current gesture key, or null for an independent discrete edit. | — | — |
+| [`public void Inno.Editor.Assets.AssetDraftDocuments.ReplaceMany(System.Collections.Generic.IReadOnlyDictionary candidates, string? mergeKey = null)`](../../src/composition/editor/features/Inno.Editor.Assets/Documents/AssetDraftDocuments.cs#L157) | Records a fully validated selection sample atomically in the shared History. `candidates`: Detached candidates keyed by their persistent source identity. `mergeKey`: The owning gesture key, or null for a discrete edit. | — | — |
+| [`public bool Inno.Editor.Assets.AssetDraftDocuments.TryMergeHistory(Inno.Editor.Interactions.EditorHistoryChange older, Inno.Editor.Interactions.EditorHistoryChange newer, out Inno.Editor.Interactions.EditorHistoryChange? merged)`](../../src/composition/editor/features/Inno.Editor.Assets/Documents/AssetDraftDocuments.cs#L221) | Combines adjacent samples of the same document and gesture without retaining live assets. `older`: The preceding owned record. `newer`: The subsequent owned record. `merged`: Receives a new independent payload when the records form a contiguous edit. | True when both records describe the same continuous value change. | — |
+| [`public void Inno.Editor.Assets.AssetDraftDocuments.ValidateHistory(Inno.Editor.Interactions.EditorHistoryChange change, Inno.Editor.Interactions.EditorHistoryDirection direction)`](../../src/composition/editor/features/Inno.Editor.Assets/Documents/AssetDraftDocuments.cs#L252) | Validates a feature's neutral History record without changing the draft. `change`: Record owned by the shared History service. `direction`: Requested traversal direction. | — | — |
+| [`public void Inno.Editor.Assets.AssetDraftDocuments.ApplyHistory(Inno.Editor.Interactions.EditorHistoryChange change, Inno.Editor.Interactions.EditorHistoryDirection direction)`](../../src/composition/editor/features/Inno.Editor.Assets/Documents/AssetDraftDocuments.cs#L270) | Applies a previously validated neutral record; failed recovery leaves the draft unchanged. `change`: Record owned by the shared History service. `direction`: Requested traversal direction. | — | — |
| [`public void Inno.Editor.Assets.AssetDraftDocuments.Start()`](../../src/composition/editor/features/Inno.Editor.Assets/Documents/AssetDraftDocuments.cs#L402) | Registers the feature provider with the headless document ownership service. | — | — |
| [`public void Inno.Editor.Assets.AssetDraftDocuments.Update()`](../../src/composition/editor/features/Inno.Editor.Assets/Documents/AssetDraftDocuments.cs#L412) | Imports explicit saves and reconciles source changes without owning UI gesture lifetimes. | — | — |
| [`public void Inno.Editor.Assets.AssetDraftDocuments.Dispose()`](../../src/composition/editor/features/Inno.Editor.Assets/Documents/AssetDraftDocuments.cs#L478) | Preserves unsaved recovery and unregisters the current feature provider. | — | — |
@@ -282,44 +297,44 @@ AssetDraftDocuments 的 Replace/ReplaceMany 立即记录中立 bytes,不延迟
| [`public string Inno.Editor.Assets.AssetDraftDocuments.Draft.error { get; internal set; }`](../../src/composition/editor/features/Inno.Editor.Assets/Documents/AssetDraftDocuments.cs#L602) | Gets the latest source, save or import diagnostic. | — | — |
| [`public bool Inno.Editor.Assets.AssetDraftDocuments.Draft.isDirty { get; }`](../../src/composition/editor/features/Inno.Editor.Assets/Documents/AssetDraftDocuments.cs#L606) | Gets whether detached bytes differ from the saved baseline. | — | — |
| [`public sealed class Inno.Editor.Assets.AssetEditingModule : Inno.Editor.Core.EditorModule`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.Creation.cs#L13) | Handles asset creation actions in the Editor file browser. | — | — |
-| [`public Inno.Assets.Pipeline.AssetFileEntry Inno.Editor.Assets.AssetEditingModule.CreateDirectory(Inno.Assets.AssetPath parent)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.Creation.cs#L27) | Creates a uniquely named directory and records its removal and restoration in shared History. `parent`: An existing writable source directory. | The indexed identity of the newly created directory. | `System.InvalidOperationException`: The source is read-only, unavailable, or cannot retain the History entry. |
-| [`public Inno.Assets.Pipeline.AssetFileEntry Inno.Editor.Assets.AssetEditingModule.CreateSource(Inno.Assets.AssetPath path, System.ReadOnlySpan bytes)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.Creation.cs#L75) | Creates a native or ordinary-text asset source as one recoverable shared-history operation. `path`: A new file in an existing writable asset directory. `bytes`: Complete source bytes supplied by the feature's native writer. | The indexed source identity, even when its first import reports a source error. | `System.IO.IOException`: The source already exists, has no existing parent, or cannot be installed. `System.InvalidOperationException`: The source mount is unavailable/read-only or history cannot retain the change. |
-| [`public Inno.Editor.Assets.AssetEditingModule.AssetEditingModule(Inno.Editor.Interactions.EditorInteractions interactions, Inno.Assets.Pipeline.AssetPipeline pipeline, Inno.Plugins.Authoring.PluginEnvironment plugins, Inno.Extensibility.Types.TypeCatalog types, Inno.Core.Logging.LogRouter logs)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.cs#L50) | Creates the asset editing service for one authoring generation. `interactions`: The active editor interaction entry point. `pipeline`: The isolated authoring asset pipeline used by browser operations. `plugins`: The active Plugin catalog that authoritatively identifies Plugin-owned source mounts. `types`: The active type catalog used to build extension registry snapshots. `logs`: The application log router used for Asset Browser operation diagnostics. | — | `System.ArgumentNullException`: Thrown when any required service is . |
+| [`public Inno.Assets.Pipeline.AssetFileEntry Inno.Editor.Assets.AssetEditingModule.CreateDirectory(Inno.Assets.AssetPath parent)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.Creation.cs#L27) | Creates a uniquely named directory and records its removal and restoration in shared History. `parent`: An existing writable source directory. | The indexed identity of the newly created directory. | `System.InvalidOperationException`: The source is read-only, unavailable, or cannot retain the History entry. |
+| [`public Inno.Assets.Pipeline.AssetFileEntry Inno.Editor.Assets.AssetEditingModule.CreateSource(Inno.Assets.AssetPath path, System.ReadOnlySpan bytes)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.Creation.cs#L75) | Creates a native or ordinary-text asset source as one recoverable shared-history operation. `path`: A new file in an existing writable asset directory. `bytes`: Complete source bytes supplied by the feature's native writer. | The indexed source identity, even when its first import reports a source error. | `System.IO.IOException`: The source already exists, has no existing parent, or cannot be installed. `System.InvalidOperationException`: The source mount is unavailable/read-only or history cannot retain the change. |
+| [`public Inno.Editor.Assets.AssetEditingModule.AssetEditingModule(Inno.Editor.Interactions.EditorInteractions interactions, Inno.Assets.Pipeline.AssetPipeline pipeline, Inno.Plugins.Authoring.PluginEnvironment plugins, Inno.Extensibility.Types.TypeCatalog types, Inno.Core.Logging.LogRouter logs)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.cs#L50) | Creates the asset editing service for one authoring generation. `interactions`: The active editor interaction entry point. `pipeline`: The isolated authoring asset pipeline used by browser operations. `plugins`: The active Plugin catalog that authoritatively identifies Plugin-owned source mounts. `types`: The active type catalog used to build extension registry snapshots. `logs`: The application log router used for Asset Browser operation diagnostics. | — | `System.ArgumentNullException`: Thrown when any required service is null. |
| [`public Inno.Editor.Interactions.EditorInteractions Inno.Editor.Assets.AssetEditingModule.interactions { get; }`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.cs#L71) | Gets the editor interaction owner used by source operations. | — | — |
| [`public Inno.Assets.Pipeline.AssetPipeline Inno.Editor.Assets.AssetEditingModule.pipeline { get; }`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.cs#L77) | Gets the authoritative authoring pipeline; mutations must use its existing ownership protocol. | — | — |
| [`public System.Collections.Generic.IReadOnlyList Inno.Editor.Assets.AssetEditingModule.creationTemplates { get; }`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.cs#L81) | Gets the current immutable creation menu declarations without retaining template instances. | — | — |
-| [`public bool Inno.Editor.Assets.AssetEditingModule.CanCreateAsset(string directory, string templateId)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.cs#L96) | Checks that a creation template and writable destination are available. `directory`: The source-relative writable destination directory. `templateId`: The stable identity of a discovered creation template. | True when the request is accepted; otherwise false. | — |
-| [`public Inno.Assets.Pipeline.AssetFileEntry Inno.Editor.Assets.AssetEditingModule.CreateAsset(string directory, string templateId)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.cs#L120) | Creates and imports a source using a discovered template and records the committed change. `directory`: The source-relative writable destination directory. `templateId`: The stable identity of a discovered creation template. | The committed source identity, or a validation result describing why the operation is unavailable. | — |
-| [`public bool Inno.Editor.Assets.AssetEditingModule.IsPluginSource(Inno.Assets.AssetSourceId source)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.cs#L170) | Determines whether the active Plugin catalog owns a source mount. `source`: The source mount identity to query. | True when the request is accepted; otherwise false. | — |
-| [`public bool Inno.Editor.Assets.AssetEditingModule.IsPluginRoot(Inno.Assets.Pipeline.AssetFileEntry entry)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.cs#L181) | Determines whether an indexed entry is the root of an installed Plugin. `entry`: The currently indexed source identity. | True when the request is accepted; otherwise false. | — |
-| [`public bool Inno.Editor.Assets.AssetEditingModule.TryCreateContext(Inno.Editor.Core.EditorContext editor, string relativePath, out Inno.Editor.Assets.AssetEditorContext? context)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.cs#L203) | Captures the currently indexed source and extension metadata for one immediate operation. `editor`: The current editor context used only during this invocation. `relativePath`: The isolated source-relative path to resolve. `context`: Receives the current source snapshot, or null when the source is unavailable. | True when the request is accepted; otherwise false. | — |
-| [`public bool Inno.Editor.Assets.AssetEditingModule.Open(Inno.Editor.Assets.AssetEditorContext context)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.cs#L230) | Opens a source using its current asset editor extension and reports rejected or failed opens. `context`: The immutable metadata captured for this immediate source operation. | True when the request is accepted; otherwise false. | — |
-| [`public Inno.Editor.Interactions.EditorValidationResult Inno.Editor.Assets.AssetEditingModule.ValidateRename(Inno.Editor.Assets.AssetEditorContext context, string newName)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.cs#L260) | Validates a requested name without modifying the source. `context`: The immutable metadata captured for this immediate source operation. `newName`: The requested entry name without its protected file extension. | The committed source identity, or a validation result describing why the operation is unavailable. | — |
-| [`public void Inno.Editor.Assets.AssetEditingModule.Rename(Inno.Editor.Assets.AssetEditorContext context, string newName)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.cs#L278) | Renames a source atomically and records its reversible history payload. `context`: The immutable metadata captured for this immediate source operation. `newName`: The requested entry name without its protected file extension. | — | — |
-| [`public bool Inno.Editor.Assets.AssetEditingModule.CanMoveToDirectory(string sourcePath, string targetDirectory)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.cs#L314) | Checks whether a source can move into the destination without a cycle or name collision. `sourcePath`: The current isolated source-relative path. `targetDirectory`: The isolated destination directory. | True when the request is accepted; otherwise false. | — |
-| [`public Inno.Assets.Pipeline.AssetFileEntry Inno.Editor.Assets.AssetEditingModule.MoveToDirectoryWithHistory(string sourcePath, string targetDirectory, Inno.Editor.Interactions.IEditorHistory history)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.cs#L334) | Moves a source and records the committed mutation in the supplied history. `sourcePath`: The current isolated source-relative path. `targetDirectory`: The isolated destination directory. `history`: The authoritative history that receives the committed mutation. | The committed source identity, or a validation result describing why the operation is unavailable. | — |
-| [`public bool Inno.Editor.Assets.AssetEditingModule.DeleteWithHistory(Inno.Editor.Assets.AssetEditorContext asset, Inno.Editor.Interactions.IEditorHistory history)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.cs#L411) | Deletes a source with a recoverable archive and records the committed mutation. `asset`: The captured source metadata to validate and delete. `history`: The authoritative History receiving this mutation. | True when the request is accepted; otherwise false. | — |
-| [`public void Inno.Editor.Assets.AssetEditingModule.SelectPath(string relativePath)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.cs#L462) | Selects the current source identity without retaining an indexed entry across generations. `relativePath`: The isolated source-relative path to resolve. | — | — |
-| [`public bool Inno.Editor.Assets.AssetEditingModule.TryCreateDragData(Inno.Editor.Assets.AssetEditorContext context, out Inno.Editor.Interactions.EditorDragData? data)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.cs#L481) | Creates identity-based drag data when the current extension permits dragging. `context`: The immutable metadata captured for this immediate source operation. `data`: Receives identity-based drag data, or null when dragging is unavailable. | True when the request is accepted; otherwise false. | — |
-| [`protected override void Inno.Editor.Assets.AssetEditingModule.OnStart(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.cs#L502) | Initializes this feature when its owning runtime becomes active. `context`: The context that supplies state and services for this operation. | — | — |
-| [`protected override void Inno.Editor.Assets.AssetEditingModule.OnStop(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.cs#L513) | Stops this feature before its owning runtime releases the active generation. `context`: The context that supplies state and services for this operation. | — | — |
+| [`public bool Inno.Editor.Assets.AssetEditingModule.CanCreateAsset(string directory, string templateId)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.cs#L96) | Checks that a creation template and writable destination are available. `directory`: The source-relative writable destination directory. `templateId`: The stable identity of a discovered creation template. | True when the request is accepted; otherwise false. | — |
+| [`public Inno.Assets.Pipeline.AssetFileEntry Inno.Editor.Assets.AssetEditingModule.CreateAsset(string directory, string templateId)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.cs#L120) | Creates and imports a source using a discovered template and records the committed change. `directory`: The source-relative writable destination directory. `templateId`: The stable identity of a discovered creation template. | The committed source identity, or a validation result describing why the operation is unavailable. | — |
+| [`public bool Inno.Editor.Assets.AssetEditingModule.IsPluginSource(Inno.Assets.AssetSourceId source)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.cs#L170) | Determines whether the active Plugin catalog owns a source mount. `source`: The source mount identity to query. | True when the request is accepted; otherwise false. | — |
+| [`public bool Inno.Editor.Assets.AssetEditingModule.IsPluginRoot(Inno.Assets.Pipeline.AssetFileEntry entry)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.cs#L181) | Determines whether an indexed entry is the root of an installed Plugin. `entry`: The currently indexed source identity. | True when the request is accepted; otherwise false. | — |
+| [`public bool Inno.Editor.Assets.AssetEditingModule.TryCreateContext(Inno.Editor.Core.EditorContext editor, string relativePath, out Inno.Editor.Assets.AssetEditorContext? context)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.cs#L203) | Captures the currently indexed source and extension metadata for one immediate operation. `editor`: The current editor context used only during this invocation. `relativePath`: The isolated source-relative path to resolve. `context`: Receives the current source snapshot, or null when the source is unavailable. | True when the request is accepted; otherwise false. | — |
+| [`public bool Inno.Editor.Assets.AssetEditingModule.Open(Inno.Editor.Assets.AssetEditorContext context)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.cs#L230) | Opens a source using its current asset editor extension and reports rejected or failed opens. `context`: The immutable metadata captured for this immediate source operation. | True when the request is accepted; otherwise false. | — |
+| [`public Inno.Editor.Interactions.EditorValidationResult Inno.Editor.Assets.AssetEditingModule.ValidateRename(Inno.Editor.Assets.AssetEditorContext context, string newName)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.cs#L260) | Validates a requested name without modifying the source. `context`: The immutable metadata captured for this immediate source operation. `newName`: The requested entry name without its protected file extension. | The committed source identity, or a validation result describing why the operation is unavailable. | — |
+| [`public void Inno.Editor.Assets.AssetEditingModule.Rename(Inno.Editor.Assets.AssetEditorContext context, string newName)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.cs#L278) | Renames a source atomically and records its reversible history payload. `context`: The immutable metadata captured for this immediate source operation. `newName`: The requested entry name without its protected file extension. | — | — |
+| [`public bool Inno.Editor.Assets.AssetEditingModule.CanMoveToDirectory(string sourcePath, string targetDirectory)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.cs#L314) | Checks whether a source can move into the destination without a cycle or name collision. `sourcePath`: The current isolated source-relative path. `targetDirectory`: The isolated destination directory. | True when the request is accepted; otherwise false. | — |
+| [`public Inno.Assets.Pipeline.AssetFileEntry Inno.Editor.Assets.AssetEditingModule.MoveToDirectoryWithHistory(string sourcePath, string targetDirectory, Inno.Editor.Interactions.IEditorHistory history)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.cs#L334) | Moves a source and records the committed mutation in the supplied history. `sourcePath`: The current isolated source-relative path. `targetDirectory`: The isolated destination directory. `history`: The authoritative history that receives the committed mutation. | The committed source identity, or a validation result describing why the operation is unavailable. | — |
+| [`public bool Inno.Editor.Assets.AssetEditingModule.DeleteWithHistory(Inno.Editor.Assets.AssetEditorContext asset, Inno.Editor.Interactions.IEditorHistory history)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.cs#L411) | Deletes a source with a recoverable archive and records the committed mutation. `asset`: The captured source metadata to validate and delete. `history`: The authoritative History receiving this mutation. | True when the request is accepted; otherwise false. | — |
+| [`public void Inno.Editor.Assets.AssetEditingModule.SelectPath(string relativePath)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.cs#L462) | Selects the current source identity without retaining an indexed entry across generations. `relativePath`: The isolated source-relative path to resolve. | — | — |
+| [`public bool Inno.Editor.Assets.AssetEditingModule.TryCreateDragData(Inno.Editor.Assets.AssetEditorContext context, out Inno.Editor.Interactions.EditorDragData? data)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.cs#L481) | Creates identity-based drag data when the current extension permits dragging. `context`: The immutable metadata captured for this immediate source operation. `data`: Receives identity-based drag data, or null when dragging is unavailable. | True when the request is accepted; otherwise false. | — |
+| [`protected override void Inno.Editor.Assets.AssetEditingModule.OnStart(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.cs#L502) | Initializes this feature when its owning runtime becomes active. `context`: The context that supplies state and services for this operation. | — | — |
+| [`protected override void Inno.Editor.Assets.AssetEditingModule.OnStop(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.cs#L513) | Stops this feature before its owning runtime releases the active generation. `context`: The context that supplies state and services for this operation. | — | — |
| [`protected override void Inno.Editor.Assets.AssetEditingModule.OnDispose()`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.cs#L521) | Releases resources retained by this feature after it has stopped. | — | — |
-| [`public Inno.Editor.Assets.AssetOperationValidation Inno.Editor.Assets.AssetEditingModule.ValidateDeleteSelection(Inno.Editor.Core.EditorContext editor, System.Collections.Generic.IReadOnlyList targets)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.Selection.cs#L28) | Checks the entire source selection before a batch mutation, including extension validation and read-only ownership. `editor`: The immediate Editor context. `targets`: Fresh source entries in selection order. | The first rejection, or a valid result when every source can be deleted. | — |
-| [`public void Inno.Editor.Assets.AssetEditingModule.DeleteSelection(Inno.Editor.Core.EditorContext editor, System.Collections.Generic.IReadOnlyList targets)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.Selection.cs#L68) | Deletes minimal selected source roots in one History transaction, restoring earlier deletions if a later one fails. `editor`: The immediate Editor context. `targets`: Fresh selected source entries; nested entries are covered by their selected directory. | — | `System.InvalidOperationException`: Validation or a mutation fails; rollback failures remain explicit. |
-| [`public bool Inno.Editor.Assets.AssetEditingModule.CanMoveSelection(System.Collections.Generic.IReadOnlyList targets, string targetDirectory)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.Selection.cs#L99) | Validates every minimal selected source and rejects destination collisions before a batch move. `targets`: Live source entries in selection order. `targetDirectory`: The writable project destination. | True when every source can move to a distinct destination. | — |
-| [`public void Inno.Editor.Assets.AssetEditingModule.MoveSelection(System.Collections.Generic.IReadOnlyList targets, string targetDirectory)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.Selection.cs#L126) | Moves selected source roots in one transaction; a later failure restores earlier moves. `targets`: Live entries, including descendants covered by a selected directory. `targetDirectory`: The writable project destination. | — | `System.InvalidOperationException`: Any source or destination rejects the operation. |
+| [`public Inno.Editor.Assets.AssetOperationValidation Inno.Editor.Assets.AssetEditingModule.ValidateDeleteSelection(Inno.Editor.Core.EditorContext editor, System.Collections.Generic.IReadOnlyList targets)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.Selection.cs#L28) | Checks the entire source selection before a batch mutation, including extension validation and read-only ownership. `editor`: The immediate Editor context. `targets`: Fresh source entries in selection order. | The first rejection, or a valid result when every source can be deleted. | — |
+| [`public void Inno.Editor.Assets.AssetEditingModule.DeleteSelection(Inno.Editor.Core.EditorContext editor, System.Collections.Generic.IReadOnlyList targets)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.Selection.cs#L68) | Deletes minimal selected source roots in one History transaction, restoring earlier deletions if a later one fails. `editor`: The immediate Editor context. `targets`: Fresh selected source entries; nested entries are covered by their selected directory. | — | `System.InvalidOperationException`: Validation or a mutation fails; rollback failures remain explicit. |
+| [`public bool Inno.Editor.Assets.AssetEditingModule.CanMoveSelection(System.Collections.Generic.IReadOnlyList targets, string targetDirectory)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.Selection.cs#L99) | Validates every minimal selected source and rejects destination collisions before a batch move. `targets`: Live source entries in selection order. `targetDirectory`: The writable project destination. | True when every source can move to a distinct destination. | — |
+| [`public void Inno.Editor.Assets.AssetEditingModule.MoveSelection(System.Collections.Generic.IReadOnlyList targets, string targetDirectory)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditingModule.Selection.cs#L126) | Moves selected source roots in one transaction; a later failure restores earlier moves. `targets`: Live entries, including descendants covered by a selected directory. `targetDirectory`: The writable project destination. | — | `System.InvalidOperationException`: Any source or destination rejects the operation. |
| [`public abstract class Inno.Editor.Assets.AssetEditor`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditor.cs#L7) | Customizes editor interactions for one imported asset type. | — | — |
-| [`public virtual bool Inno.Editor.Assets.AssetEditor.CanOpen(Inno.Editor.Assets.AssetEditorContext context)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditor.cs#L18) | Gets whether the fallback asset editor can open the supplied source entry. `context`: The immutable source and catalog snapshot for the operation. | when can handle the entry; otherwise, . | — |
-| [`public virtual void Inno.Editor.Assets.AssetEditor.Open(Inno.Editor.Assets.AssetEditorContext context)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditor.cs#L25) | Opens the supplied asset entry when no more specific typed open action handled it. `context`: The immutable source and catalog snapshot for the operation. | — | — |
-| [`public virtual Inno.Editor.Assets.AssetOperationValidation Inno.Editor.Assets.AssetEditor.ValidateRename(Inno.Editor.Assets.AssetEditorContext context, string targetPath)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditor.cs#L41) | Validates a requested asset move before the AssetPipeline transaction begins. `context`: The immutable snapshot of the source entry before the move. `targetPath`: The normalized source-relative destination path. | A valid result when the transaction may proceed, or a diagnostic describing the rejection. | — |
-| [`public virtual void Inno.Editor.Assets.AssetEditor.OnRenamed(Inno.Editor.Assets.AssetEditorContext context, string oldPath, string newPath)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditor.cs#L57) | Runs after an asset move transaction commits successfully. `context`: The immutable snapshot captured before the move. `oldPath`: The previous source-relative path. `newPath`: The committed source-relative destination path. | — | — |
-| [`public virtual Inno.Editor.Assets.AssetOperationValidation Inno.Editor.Assets.AssetEditor.ValidateDelete(Inno.Editor.Assets.AssetEditorContext context)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditor.cs#L73) | Validates a requested asset deletion before the AssetPipeline transaction begins. `context`: The immutable snapshot of the entry that would be deleted. | A valid result when the transaction may proceed, or a diagnostic describing the rejection. | — |
-| [`public virtual void Inno.Editor.Assets.AssetEditor.OnDeleted(Inno.Editor.Assets.AssetEditorContext context)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditor.cs#L80) | Runs after an asset deletion transaction commits successfully. `context`: The immutable snapshot captured before the entry was deleted. | — | — |
-| [`public virtual bool Inno.Editor.Assets.AssetEditor.CanStartDrag(Inno.Editor.Assets.AssetEditorContext context)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditor.cs#L93) | Gets whether the supplied entry can begin a managed editor drag operation. `context`: The immutable source and catalog snapshot for the entry. | when drag data can be created; otherwise, . | — |
-| [`public virtual Inno.Editor.Interactions.EditorDragData Inno.Editor.Assets.AssetEditor.CreateDragData(Inno.Editor.Assets.AssetEditorContext context)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditor.cs#L103) | Creates the managed source, preview label, and validity predicate for an asset drag. `context`: The immutable source and catalog snapshot for the entry. | The managed drag data published by the Asset Browser. | — |
-| [`protected Inno.Editor.Assets.AssetEditor.AssetEditor()`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditor.cs#L7) | Inherited or compiler-provided contract. | — | — |
+| [`public virtual bool Inno.Editor.Assets.AssetEditor.CanOpen(Inno.Editor.Assets.AssetEditorContext context)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditor.cs#L18) | Gets whether the fallback asset editor can open the supplied source entry. `context`: The immutable source and catalog snapshot for the operation. | true when Inno.Editor.Assets.AssetEditor.Open(Inno.Editor.Assets.AssetEditorContext) can handle the entry; otherwise, false. | — |
+| [`public virtual void Inno.Editor.Assets.AssetEditor.Open(Inno.Editor.Assets.AssetEditorContext context)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditor.cs#L25) | Opens the supplied asset entry when no more specific typed open action handled it. `context`: The immutable source and catalog snapshot for the operation. | — | — |
+| [`public virtual Inno.Editor.Assets.AssetOperationValidation Inno.Editor.Assets.AssetEditor.ValidateRename(Inno.Editor.Assets.AssetEditorContext context, string targetPath)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditor.cs#L41) | Validates a requested asset move before the AssetPipeline transaction begins. `context`: The immutable snapshot of the source entry before the move. `targetPath`: The normalized source-relative destination path. | A valid result when the transaction may proceed, or a diagnostic describing the rejection. | — |
+| [`public virtual void Inno.Editor.Assets.AssetEditor.OnRenamed(Inno.Editor.Assets.AssetEditorContext context, string oldPath, string newPath)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditor.cs#L57) | Runs after an asset move transaction commits successfully. `context`: The immutable snapshot captured before the move. `oldPath`: The previous source-relative path. `newPath`: The committed source-relative destination path. | — | — |
+| [`public virtual Inno.Editor.Assets.AssetOperationValidation Inno.Editor.Assets.AssetEditor.ValidateDelete(Inno.Editor.Assets.AssetEditorContext context)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditor.cs#L73) | Validates a requested asset deletion before the AssetPipeline transaction begins. `context`: The immutable snapshot of the entry that would be deleted. | A valid result when the transaction may proceed, or a diagnostic describing the rejection. | — |
+| [`public virtual void Inno.Editor.Assets.AssetEditor.OnDeleted(Inno.Editor.Assets.AssetEditorContext context)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditor.cs#L80) | Runs after an asset deletion transaction commits successfully. `context`: The immutable snapshot captured before the entry was deleted. | — | — |
+| [`public virtual bool Inno.Editor.Assets.AssetEditor.CanStartDrag(Inno.Editor.Assets.AssetEditorContext context)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditor.cs#L93) | Gets whether the supplied entry can begin a managed editor drag operation. `context`: The immutable source and catalog snapshot for the entry. | true when drag data can be created; otherwise, false. | — |
+| [`public virtual Inno.Editor.Interactions.EditorDragData Inno.Editor.Assets.AssetEditor.CreateDragData(Inno.Editor.Assets.AssetEditorContext context)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditor.cs#L103) | Creates the managed source, preview label, and validity predicate for an asset drag. `context`: The immutable source and catalog snapshot for the entry. | The managed drag data published by the Asset Browser. | — |
+| [`protected Inno.Editor.Assets.AssetEditor.AssetEditor()`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditor.cs#L7) | 由 C# 编译器生成的值契约成员。 | — | — |
| [`public sealed class Inno.Editor.Assets.AssetEditorAttribute : System.Attribute`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditorAttribute.cs#L8) | Associates an asset editor with an imported asset type. | — | — |
-| [`public Inno.Editor.Assets.AssetEditorAttribute.AssetEditorAttribute(System.Type assetType, bool useForChildren = false, int priority = 0)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditorAttribute.cs#L25) | Creates an asset-editor registration for an imported runtime asset type. `assetType`: The imported asset type handled by the editor. `useForChildren`: Whether the editor may also handle assignable derived asset types. `priority`: The tie-breaking priority after exactness and inheritance distance. | — | `System.ArgumentNullException`: Thrown when is . |
+| [`public Inno.Editor.Assets.AssetEditorAttribute.AssetEditorAttribute(System.Type assetType, bool useForChildren = false, int priority = 0)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditorAttribute.cs#L25) | Creates an asset-editor registration for an imported runtime asset type. `assetType`: The imported asset type handled by the editor. `useForChildren`: Whether the editor may also handle assignable derived asset types. `priority`: The tie-breaking priority after exactness and inheritance distance. | — | `System.ArgumentNullException`: Thrown when assetType is null. |
| [`public System.Type Inno.Editor.Assets.AssetEditorAttribute.assetType { get; }`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditorAttribute.cs#L38) | Gets the imported asset type handled by the editor. | — | — |
| [`public bool Inno.Editor.Assets.AssetEditorAttribute.useForChildren { get; }`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditorAttribute.cs#L42) | Gets whether derived asset types are accepted. | — | — |
| [`public int Inno.Editor.Assets.AssetEditorAttribute.priority { get; }`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditorAttribute.cs#L46) | Gets the tie-breaking priority. | — | — |
@@ -332,32 +347,43 @@ AssetDraftDocuments 的 Replace/ReplaceMany 立即记录中立 bytes,不延迟
| [`public Inno.Assets.AssetInfo? Inno.Editor.Assets.AssetEditorContext.info { get; }`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditorContext.cs#L86) | Gets the cataloged asset information when available. | — | — |
| [`public System.Type? Inno.Editor.Assets.AssetEditorContext.assetType { get; }`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetEditorContext.cs#L90) | Gets the resolved imported asset type when available. | — | — |
| [`public readonly record struct Inno.Editor.Assets.AssetOperationValidation : System.IEquatable`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetOperationValidation.cs#L5) | Describes whether an editor asset operation may proceed. | — | — |
-| [`public Inno.Editor.Assets.AssetOperationValidation.AssetOperationValidation(bool isValid, string message)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetOperationValidation.cs#L16) | Creates the validation result returned before an asset transaction begins. `isValid`: Whether the requested asset operation may proceed. `message`: The user-facing rejection diagnostic, or an empty string for a valid result. | — | — |
+| [`public Inno.Editor.Assets.AssetOperationValidation.AssetOperationValidation(bool isValid, string message)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetOperationValidation.cs#L16) | Creates the validation result returned before an asset transaction begins. `isValid`: Whether the requested asset operation may proceed. `message`: The user-facing rejection diagnostic, or an empty string for a valid result. | — | — |
| [`public bool Inno.Editor.Assets.AssetOperationValidation.isValid { get; }`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetOperationValidation.cs#L27) | Gets whether the operation may proceed. | — | — |
| [`public string Inno.Editor.Assets.AssetOperationValidation.message { get; }`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetOperationValidation.cs#L31) | Gets the validation diagnostic. | — | — |
| [`public static Inno.Editor.Assets.AssetOperationValidation Inno.Editor.Assets.AssetOperationValidation.valid { get; }`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetOperationValidation.cs#L35) | Gets a successful validation result. | — | — |
-| [`public static Inno.Editor.Assets.AssetOperationValidation Inno.Editor.Assets.AssetOperationValidation.Invalid(string message)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetOperationValidation.cs#L46) | Creates a failed asset-operation validation result. `message`: The user-facing diagnostic explaining why the operation was rejected. | An invalid validation result containing the supplied diagnostic. | — |
+| [`public static Inno.Editor.Assets.AssetOperationValidation Inno.Editor.Assets.AssetOperationValidation.Invalid(string message)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetOperationValidation.cs#L46) | Creates a failed asset-operation validation result. `message`: The user-facing diagnostic explaining why the operation was rejected. | An invalid validation result containing the supplied diagnostic. | — |
| [`public override string Inno.Editor.Assets.AssetOperationValidation.ToString()`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetOperationValidation.cs#L5) | Returns the fully qualified type name of this instance. | The fully qualified type name. | — |
-| [`public static bool Inno.Editor.Assets.AssetOperationValidation.operator !=(Inno.Editor.Assets.AssetOperationValidation left, Inno.Editor.Assets.AssetOperationValidation right)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetOperationValidation.cs#L5) | Inherited or compiler-provided contract. | — | — |
-| [`public static bool Inno.Editor.Assets.AssetOperationValidation.operator ==(Inno.Editor.Assets.AssetOperationValidation left, Inno.Editor.Assets.AssetOperationValidation right)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetOperationValidation.cs#L5) | Inherited or compiler-provided contract. | — | — |
+| [`public static bool Inno.Editor.Assets.AssetOperationValidation.operator !=(Inno.Editor.Assets.AssetOperationValidation left, Inno.Editor.Assets.AssetOperationValidation right)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetOperationValidation.cs#L5) | 由 C# 编译器生成的值契约成员。 | — | — |
+| [`public static bool Inno.Editor.Assets.AssetOperationValidation.operator ==(Inno.Editor.Assets.AssetOperationValidation left, Inno.Editor.Assets.AssetOperationValidation right)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetOperationValidation.cs#L5) | 由 C# 编译器生成的值契约成员。 | — | — |
| [`public override int Inno.Editor.Assets.AssetOperationValidation.GetHashCode()`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetOperationValidation.cs#L5) | Returns the hash code for this instance. | A 32-bit signed integer that is the hash code for this instance. | — |
-| [`public override bool Inno.Editor.Assets.AssetOperationValidation.Equals(object obj)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetOperationValidation.cs#L5) | Indicates whether this instance and a specified object are equal. `obj`: The object to compare with the current instance. | if and this instance are the same type and represent the same value; otherwise, . | — |
-| [`public bool Inno.Editor.Assets.AssetOperationValidation.Equals(Inno.Editor.Assets.AssetOperationValidation other)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetOperationValidation.cs#L5) | Indicates whether the current object is equal to another object of the same type. `other`: An object to compare with this object. | if the current object is equal to the parameter; otherwise, . | — |
+| [`public override bool Inno.Editor.Assets.AssetOperationValidation.Equals(object obj)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetOperationValidation.cs#L5) | Indicates whether this instance and a specified object are equal. `obj`: The object to compare with the current instance. | true if obj and this instance are the same type and represent the same value; otherwise, false. | — |
+| [`public bool Inno.Editor.Assets.AssetOperationValidation.Equals(Inno.Editor.Assets.AssetOperationValidation other)`](../../src/composition/editor/features/Inno.Editor.Assets/Editing/AssetOperationValidation.cs#L5) | Indicates whether the current object is equal to another object of the same type. `other`: An object to compare with this object. | true if the current object is equal to the other parameter; otherwise, false. | — |
| [`public sealed class Inno.Editor.Assets.AssetImportSettingsEdits : Inno.Editor.Core.EditorModule`](../../src/composition/editor/features/Inno.Editor.Assets/ImportSettings/AssetImportSettingsEdits.cs#L15) | Applies importer configuration through the common sidecar pipeline and stable-identity Editor history. | — | — |
-| [`public Inno.Editor.Assets.AssetImportSettingsEdits.AssetImportSettingsEdits(Inno.Assets.Pipeline.AssetPipeline assets, Inno.Core.Serialization.SerializationRegistry serialization, Inno.Extensibility.Types.TypeCatalog types, Inno.Editor.Interactions.EditorInteractions interactions)`](../../src/composition/editor/features/Inno.Editor.Assets/ImportSettings/AssetImportSettingsEdits.cs#L38) | Uses the authoring owners responsible for source identity, converter generations and shared undo. `assets`: Authoritative asset pipeline. `serialization`: Current owner converter registry. `types`: Current type generation owner. `interactions`: Shared Editor history owner. | — | — |
-| [`public bool Inno.Editor.Assets.AssetImportSettingsEdits.Apply(Inno.Assets.AssetPath path, Inno.Core.Serialization.ISerializable settings, string expectedFingerprint)`](../../src/composition/editor/features/Inno.Editor.Assets/ImportSettings/AssetImportSettingsEdits.cs#L65) | Saves one settings gesture, recording neutral before/after properties even when reimport reports an error. `path`: Writable source asset path. `settings`: Detached current-generation settings value. `expectedFingerprint`: Sidecar fingerprint captured when editing began. | Whether the saved configuration reimported successfully; false does not mean the settings were discarded. | — |
-| [`public sealed class Inno.Editor.Assets.AssetSampleImportModule : Inno.Editor.Core.EditorModule, System.IProgress`](../../src/composition/editor/features/Inno.Editor.Assets/Samples/AssetSampleImportModule.cs#L20) | Owns sample import validation, publication and rollback independently of its progress window. | — | — |
-| [`public override bool Inno.Editor.Assets.AssetSampleImportModule.blocksFollowingUpdates { get; }`](../../src/composition/editor/features/Inno.Editor.Assets/Samples/AssetSampleImportModule.cs#L50) | Defers later modules while the import pins their generation or requires a Host restart. | — | — |
-| [`public bool Inno.Editor.Assets.AssetSampleImportModule.isBusy { get; }`](../../src/composition/editor/features/Inno.Editor.Assets/Samples/AssetSampleImportModule.cs#L54) | Gets whether an import still owns validation or publication work. | — | — |
-| [`public bool Inno.Editor.Assets.AssetSampleImportModule.canImport { get; }`](../../src/composition/editor/features/Inno.Editor.Assets/Samples/AssetSampleImportModule.cs#L58) | Gets whether the current authoring generation admits a new sample import. | — | — |
-| [`public string Inno.Editor.Assets.AssetSampleImportModule.status { get; }`](../../src/composition/editor/features/Inno.Editor.Assets/Samples/AssetSampleImportModule.cs#L63) | Gets an immutable progress message captured under the progress owner lock. | — | — |
-| [`public float Inno.Editor.Assets.AssetSampleImportModule.progress { get; }`](../../src/composition/editor/features/Inno.Editor.Assets/Samples/AssetSampleImportModule.cs#L75) | Gets the most recent validation progress fraction. | — | — |
-| [`public void Inno.Editor.Assets.AssetSampleImportModule.Request(Inno.Assets.AssetPath source)`](../../src/composition/editor/features/Inno.Editor.Assets/Samples/AssetSampleImportModule.cs#L93) | Begins validating an installed sample before its source copy can be committed. `source`: The installed sample root to validate and import. | — | `System.InvalidOperationException`: The authoring generation is busy or faulted. |
-| [`public void Inno.Editor.Assets.AssetSampleImportModule.Cancel()`](../../src/composition/editor/features/Inno.Editor.Assets/Samples/AssetSampleImportModule.cs#L105) | Requests cancellation without releasing work that has not retired. | — | — |
-| [`public void Inno.Editor.Assets.AssetSampleImportModule.Report(Inno.Scripting.Compiler.ScriptCompilationProgress value)`](../../src/composition/editor/features/Inno.Editor.Assets/Samples/AssetSampleImportModule.cs#L118) | Receives asynchronous compilation progress without accessing live Editor state. `value`: The compiler stage and completion fraction. | — | — |
-| [`protected override void Inno.Editor.Assets.AssetSampleImportModule.OnUpdate(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/features/Inno.Editor.Assets/Samples/AssetSampleImportModule.cs#L125) | Advances completed background phases and publishes the validated import at a frame safe point. `context`: The current Editor frame and interaction services. | — | — |
-| [`protected override void Inno.Editor.Assets.AssetSampleImportModule.OnStop(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/features/Inno.Editor.Assets/Samples/AssetSampleImportModule.cs#L200) | Cancels and retires pending work before the scripting and asset dependencies stop. `context`: The stopping Editor's interaction services. | — | — |
-| [`protected override void Inno.Editor.Assets.AssetSampleImportModule.OnDispose()`](../../src/composition/editor/features/Inno.Editor.Assets/Samples/AssetSampleImportModule.cs#L209) | Retries retirement without releasing dependencies still used by background work. | — | — |
+| [`public Inno.Editor.Assets.AssetImportSettingsEdits.AssetImportSettingsEdits(Inno.Assets.Pipeline.AssetPipeline assets, Inno.Core.Serialization.SerializationRegistry serialization, Inno.Extensibility.Types.TypeCatalog types, Inno.Editor.Interactions.EditorInteractions interactions)`](../../src/composition/editor/features/Inno.Editor.Assets/ImportSettings/AssetImportSettingsEdits.cs#L38) | Uses the authoring owners responsible for source identity, converter generations and shared undo. `assets`: Authoritative asset pipeline. `serialization`: Current owner converter registry. `types`: Current type generation owner. `interactions`: Shared Editor history owner. | — | — |
+| [`public bool Inno.Editor.Assets.AssetImportSettingsEdits.Apply(Inno.Assets.AssetPath path, Inno.Core.Serialization.ISerializable settings, string expectedFingerprint)`](../../src/composition/editor/features/Inno.Editor.Assets/ImportSettings/AssetImportSettingsEdits.cs#L65) | Saves one settings gesture, recording neutral before/after properties even when reimport reports an error. `path`: Writable source asset path. `settings`: Detached current-generation settings value. `expectedFingerprint`: Sidecar fingerprint captured when editing began. | Whether the saved configuration reimported successfully; false does not mean the settings were discarded. | — |
+| [`public sealed class Inno.Editor.Assets.AssetSampleImportModule : Inno.Editor.Core.EditorModule`](../../src/composition/editor/features/Inno.Editor.Assets/Samples/AssetSampleImportModule.cs#L20) | Owns sample import validation, publication and rollback independently of its progress window. | — | — |
+| [`public override bool Inno.Editor.Assets.AssetSampleImportModule.blocksFollowingUpdates { get; }`](../../src/composition/editor/features/Inno.Editor.Assets/Samples/AssetSampleImportModule.cs#L51) | Defers later modules while the import pins their generation or requires a Host restart. | — | — |
+| [`public bool Inno.Editor.Assets.AssetSampleImportModule.isBusy { get; }`](../../src/composition/editor/features/Inno.Editor.Assets/Samples/AssetSampleImportModule.cs#L55) | Gets whether an import still owns validation or publication work. | — | — |
+| [`public bool Inno.Editor.Assets.AssetSampleImportModule.canImport { get; }`](../../src/composition/editor/features/Inno.Editor.Assets/Samples/AssetSampleImportModule.cs#L59) | Gets whether the current authoring generation admits a new sample import. | — | — |
+| [`public Inno.Editor.Assets.AssetSampleImportProgress Inno.Editor.Assets.AssetSampleImportModule.progress { get; }`](../../src/composition/editor/features/Inno.Editor.Assets/Samples/AssetSampleImportModule.cs#L64) | Gets a complete immutable progress snapshot under the existing owner lock. | — | — |
+| [`public void Inno.Editor.Assets.AssetSampleImportModule.Request(Inno.Assets.AssetPath source)`](../../src/composition/editor/features/Inno.Editor.Assets/Samples/AssetSampleImportModule.cs#L82) | Begins validating an installed sample before its source copy can be committed. `source`: The installed sample root to validate and import. | — | `System.InvalidOperationException`: The authoring generation is busy or faulted. |
+| [`public void Inno.Editor.Assets.AssetSampleImportModule.Cancel(long operationId)`](../../src/composition/editor/features/Inno.Editor.Assets/Samples/AssetSampleImportModule.cs#L114) | Cancels only the import observed by the presentation. `operationId`: The current import identity captured by the caller. | — | — |
+| [`protected override void Inno.Editor.Assets.AssetSampleImportModule.OnUpdate(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/features/Inno.Editor.Assets/Samples/AssetSampleImportModule.cs#L126) | Advances completed background phases and publishes the validated import at a frame safe point. `context`: The current Editor frame and interaction services. | — | — |
+| [`protected override void Inno.Editor.Assets.AssetSampleImportModule.OnStop(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/features/Inno.Editor.Assets/Samples/AssetSampleImportModule.cs#L202) | Cancels and retires pending work before the scripting and asset dependencies stop. `context`: The stopping Editor's interaction services. | — | — |
+| [`protected override void Inno.Editor.Assets.AssetSampleImportModule.OnDispose()`](../../src/composition/editor/features/Inno.Editor.Assets/Samples/AssetSampleImportModule.cs#L211) | Retries retirement without releasing dependencies still used by background work. | — | — |
+| [`public readonly record struct Inno.Editor.Assets.AssetSampleImportProgress : System.IEquatable`](../../src/composition/editor/features/Inno.Editor.Assets/Samples/AssetSampleImportProgress.cs#L18) | Contains one atomically captured sample import status. `operationId`: The import identity within its owner. `fraction`: The completed validation and publication fraction. `status`: The current stage description. `cancellationRequested`: Whether cancellation is draining owned work. | — | — |
+| [`public Inno.Editor.Assets.AssetSampleImportProgress.AssetSampleImportProgress(long operationId, float fraction, string status, bool cancellationRequested)`](../../src/composition/editor/features/Inno.Editor.Assets/Samples/AssetSampleImportProgress.cs#L18) | Contains one atomically captured sample import status. `operationId`: The import identity within its owner. `fraction`: The completed validation and publication fraction. `status`: The current stage description. `cancellationRequested`: Whether cancellation is draining owned work. | — | — |
+| [`public long Inno.Editor.Assets.AssetSampleImportProgress.operationId { get; init; }`](../../src/composition/editor/features/Inno.Editor.Assets/Samples/AssetSampleImportProgress.cs#L19) | The import identity within its owner. | — | — |
+| [`public float Inno.Editor.Assets.AssetSampleImportProgress.fraction { get; init; }`](../../src/composition/editor/features/Inno.Editor.Assets/Samples/AssetSampleImportProgress.cs#L20) | The completed validation and publication fraction. | — | — |
+| [`public string Inno.Editor.Assets.AssetSampleImportProgress.status { get; init; }`](../../src/composition/editor/features/Inno.Editor.Assets/Samples/AssetSampleImportProgress.cs#L21) | The current stage description. | — | — |
+| [`public bool Inno.Editor.Assets.AssetSampleImportProgress.cancellationRequested { get; init; }`](../../src/composition/editor/features/Inno.Editor.Assets/Samples/AssetSampleImportProgress.cs#L22) | Whether cancellation is draining owned work. | — | — |
+| [`public override string Inno.Editor.Assets.AssetSampleImportProgress.ToString()`](../../src/composition/editor/features/Inno.Editor.Assets/Samples/AssetSampleImportProgress.cs#L18) | Returns the fully qualified type name of this instance. | The fully qualified type name. | — |
+| [`public static bool Inno.Editor.Assets.AssetSampleImportProgress.operator !=(Inno.Editor.Assets.AssetSampleImportProgress left, Inno.Editor.Assets.AssetSampleImportProgress right)`](../../src/composition/editor/features/Inno.Editor.Assets/Samples/AssetSampleImportProgress.cs#L18) | 由 C# 编译器生成的值契约成员。 | — | — |
+| [`public static bool Inno.Editor.Assets.AssetSampleImportProgress.operator ==(Inno.Editor.Assets.AssetSampleImportProgress left, Inno.Editor.Assets.AssetSampleImportProgress right)`](../../src/composition/editor/features/Inno.Editor.Assets/Samples/AssetSampleImportProgress.cs#L18) | 由 C# 编译器生成的值契约成员。 | — | — |
+| [`public override int Inno.Editor.Assets.AssetSampleImportProgress.GetHashCode()`](../../src/composition/editor/features/Inno.Editor.Assets/Samples/AssetSampleImportProgress.cs#L18) | Returns the hash code for this instance. | A 32-bit signed integer that is the hash code for this instance. | — |
+| [`public override bool Inno.Editor.Assets.AssetSampleImportProgress.Equals(object obj)`](../../src/composition/editor/features/Inno.Editor.Assets/Samples/AssetSampleImportProgress.cs#L18) | Indicates whether this instance and a specified object are equal. `obj`: The object to compare with the current instance. | true if obj and this instance are the same type and represent the same value; otherwise, false. | — |
+| [`public bool Inno.Editor.Assets.AssetSampleImportProgress.Equals(Inno.Editor.Assets.AssetSampleImportProgress other)`](../../src/composition/editor/features/Inno.Editor.Assets/Samples/AssetSampleImportProgress.cs#L18) | Indicates whether the current object is equal to another object of the same type. `other`: An object to compare with this object. | true if the current object is equal to the other parameter; otherwise, false. | — |
+| [`public void Inno.Editor.Assets.AssetSampleImportProgress.Deconstruct(out long operationId, out float fraction, out string status, out bool cancellationRequested)`](../../src/composition/editor/features/Inno.Editor.Assets/Samples/AssetSampleImportProgress.cs#L18) | 由 C# 编译器生成的值契约成员。 | — | — |
## 项目依赖
@@ -367,7 +393,7 @@ AssetDraftDocuments 的 Replace/ReplaceMany 立即记录中立 bytes,不延迟
| `Inno.Core.IO` | 实现依赖;不传递 compile surface |
| `Inno.Core.Execution` | 实现依赖;不传递 compile surface |
| `Inno.Scripting.Api` | 实现依赖;不传递 compile surface |
-| `Inno.Scripting.Compiler` | 公开签名依赖 |
+| `Inno.Scripting.Compiler` | 实现依赖;不传递 compile surface |
| `Inno.Core.Serialization` | 公开签名依赖 |
| `Inno.Core.Logging` | 公开签名依赖 |
| `Inno.Extensibility.Types` | 公开签名依赖 |
diff --git a/docs/editor/Inno.Editor.Core.md b/docs/editor/Inno.Editor.Core.md
index cbedc027..e5fd134b 100644
--- a/docs/editor/Inno.Editor.Core.md
+++ b/docs/editor/Inno.Editor.Core.md
@@ -265,11 +265,20 @@ Editor 模块更新与 Reload 事务使用 Edit Session;Play Tick 和运行对
`EditorDisplayNames.Nicify` 为菜单、Inspector 与插件控件格式化标识符,不需要 ImGui session 或原生 context。空白输入得到空标签;下划线、连字符及小写到大写的边界产生空格。
+## Modal 的本帧准备契约
+
+内容自适应 Modal 通过 protected `OnPrepare(EditorContext, Vector2)` 捕获本帧状态并返回所需内容尺寸。输入、输出均为已经应用当前尺度的呈现坐标,不再乘 Zoom。高度未明确声明时必须测量;无效或缺失结果会隔离该扩展并报告诊断。
+
+内容自适应窗口在打开前准备;明确尺寸的可调整窗口在原生输入确定本帧内容区之后准备。两种策略每次呈现都只准备一次、绘制一次。准备只能读取快照和测量,不能构建、发布、取消或修改 History;用户动作在绘制后交回原业务 owner。
+
+`initialSize` 的两个维度分别解释:正宽度即使配合零高度也有效;零宽度使用通用默认宽度;零高度使用本帧测量。显式尺寸和用户可调整尺寸保持自己的策略。公开 `Prepare` 与 `Draw` 是框架驱动入口,继续从脚本 API 排除;派生扩展实现 protected hooks。
+
## 当前源码公开 API 清单
此清单对应当前 SDK 求值与源码符号;内部类型不构成公开 API。
+
@@ -279,6 +288,7 @@ Editor 模块更新与 Reload 事务使用 Edit Session;Play Tick 和运行对
+
@@ -423,38 +433,40 @@ Editor 模块更新与 Reload 事务使用 Edit Session;Play Tick 和运行对
-| API 与源码 | 契约与参数 | 返回值 | 重要异常 |
-| --- | --- | --- | --- |
+| API | 职责与参数 | 返回语义 | 失败条件 |
+|---|---|---|---|
| [`public abstract class Inno.Editor.Core.EditorModal`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModal.cs#L10) | Defines non-dockable modal editor content. | — | — |
-| [`public abstract bool Inno.Editor.Core.EditorModal.isVisible { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModal.cs#L15) | Gets whether the modal should currently be visible. | — | — |
-| [`public virtual bool Inno.Editor.Core.EditorModal.blocksInteraction { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModal.cs#L20) | Gets whether the modal prevents interaction with regular editor views. | — | — |
-| [`public virtual bool Inno.Editor.Core.EditorModal.canMove { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModal.cs#L25) | Gets whether the modal window can be moved inside the main viewport. | — | — |
-| [`public virtual bool Inno.Editor.Core.EditorModal.canResize { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModal.cs#L30) | Gets whether the modal window can be resized by the user. | — | — |
-| [`public virtual bool Inno.Editor.Core.EditorModal.allowScrolling { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModal.cs#L36) | Gets whether the modal window owns scrolling when its content overflows. Disable this when a child region owns all scrolling. | — | — |
-| [`public virtual System.Numerics.Vector2 Inno.Editor.Core.EditorModal.initialSize { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModal.cs#L42) | Gets the initial modal size in unscaled editor units, or when the runtime should size the modal from its content. | — | — |
-| [`public virtual System.Numerics.Vector2 Inno.Editor.Core.EditorModal.minimumSize { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModal.cs#L48) | Gets the minimum modal size in unscaled editor units, or when no explicit minimum is required. | — | — |
-| [`public void Inno.Editor.Core.EditorModal.Draw(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModal.cs#L60) | Draws the modal body inside the runtime-managed centered window. `context`: The shared editor context containing current project and frame state. | — | `System.ArgumentNullException`: Thrown when is . |
-| [`protected abstract void Inno.Editor.Core.EditorModal.OnDraw(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModal.cs#L72) | Draws the modal body inside the runtime-managed centered window. `context`: The shared editor context containing current project and frame state. | — | — |
-| [`protected Inno.Editor.Core.EditorModal.EditorModal()`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModal.cs#L10) | Inherited or compiler-provided contract. | — | — |
+| [`public System.Numerics.Vector2? Inno.Editor.Core.EditorModal.Prepare(Inno.Editor.Core.EditorContext context, System.Numerics.Vector2 availableContentSize)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModal.cs#L32) | Captures presentation state before submitting content. Content-sized windows prepare before opening; explicitly sized resizable windows prepare after current input establishes their content bounds. `context`: The owner-thread editor context for this frame. `availableContentSize`: The bounded content area in current presentation coordinates, already scaled. | The required content size, or null for an explicitly sized window. | `System.ArgumentNullException`: The context is null. `System.ArgumentOutOfRangeException`: The available extent is not finite and positive. |
+| [`public abstract bool Inno.Editor.Core.EditorModal.isVisible { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModal.cs#L46) | Gets whether the modal should currently be visible. | — | — |
+| [`public virtual bool Inno.Editor.Core.EditorModal.blocksInteraction { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModal.cs#L51) | Gets whether the modal prevents interaction with regular editor views. | — | — |
+| [`public virtual bool Inno.Editor.Core.EditorModal.canMove { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModal.cs#L56) | Gets whether the modal window can be moved inside the main viewport. | — | — |
+| [`public virtual bool Inno.Editor.Core.EditorModal.canResize { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModal.cs#L61) | Gets whether the modal window can be resized by the user. | — | — |
+| [`public virtual bool Inno.Editor.Core.EditorModal.allowScrolling { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModal.cs#L67) | Gets whether the modal window owns scrolling when its content overflows. Disable this when a child region owns all scrolling. | — | — |
+| [`public virtual System.Numerics.Vector2 Inno.Editor.Core.EditorModal.initialSize { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModal.cs#L73) | Gets the initial modal size in unscaled editor units, or P:System.Numerics.Vector2.Zero when the runtime should size the modal from its content. | — | — |
+| [`public virtual System.Numerics.Vector2 Inno.Editor.Core.EditorModal.minimumSize { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModal.cs#L79) | Gets the minimum modal size in unscaled editor units, or P:System.Numerics.Vector2.Zero when no explicit minimum is required. | — | — |
+| [`public void Inno.Editor.Core.EditorModal.Draw(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModal.cs#L91) | Draws the modal body inside the runtime-managed centered window. `context`: The shared editor context containing current project and frame state. | — | `System.ArgumentNullException`: Thrown when context is null. |
+| [`protected abstract void Inno.Editor.Core.EditorModal.OnDraw(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModal.cs#L103) | Draws the modal body inside the runtime-managed centered window. `context`: The shared editor context containing current project and frame state. | — | — |
+| [`protected virtual System.Numerics.Vector2? Inno.Editor.Core.EditorModal.OnPrepare(Inno.Editor.Core.EditorContext context, System.Numerics.Vector2 availableContentSize)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModal.cs#L118) | Captures the state consumed by OnDraw and measures it without drawing or performing domain operations. Content-sized modals must return a finite, nonnegative size. Fixed-size modals may return null. `context`: The current owner-thread context. `availableContentSize`: The bounded, already scaled content area. | The content extent required by the captured state, or null for explicit sizing. | — |
+| [`protected Inno.Editor.Core.EditorModal.EditorModal()`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModal.cs#L10) | 由 C# 编译器生成的值契约成员。 | — | — |
| [`public sealed class Inno.Editor.Core.EditorModalAttribute : System.Attribute`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModalAttribute.cs#L9) | Registers a centered editor modal for automatic discovery. | — | — |
-| [`public Inno.Editor.Core.EditorModalAttribute.EditorModalAttribute(string id, string title, int order = 0)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModalAttribute.cs#L26) | Creates a centered modal registration with a stable identity and draw order. `id`: The stable identity used to retain modal transition state across refreshes. `title`: The visible title rendered by the modal host. `order`: The stable ordering value when multiple modals are visible. | — | `System.ArgumentException`: Thrown when or is empty. |
+| [`public Inno.Editor.Core.EditorModalAttribute.EditorModalAttribute(string id, string title, int order = 0)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModalAttribute.cs#L26) | Creates a centered modal registration with a stable identity and draw order. `id`: The stable identity used to retain modal transition state across refreshes. `title`: The visible title rendered by the modal host. `order`: The stable ordering value when multiple modals are visible. | — | `System.ArgumentException`: Thrown when id or title is empty. |
| [`public string Inno.Editor.Core.EditorModalAttribute.id { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModalAttribute.cs#L43) | Gets the stable modal identifier. | — | — |
| [`public string Inno.Editor.Core.EditorModalAttribute.title { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModalAttribute.cs#L48) | Gets the visible modal title. | — | — |
| [`public int Inno.Editor.Core.EditorModalAttribute.order { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModalAttribute.cs#L53) | Gets the stable draw order. | — | — |
| [`public abstract class Inno.Editor.Core.EditorModule : System.IDisposable`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModule.cs#L13) | Owns optional shared state and lifecycle for one editor feature. Simple panels and actions do not need a module. | — | — |
| [`public virtual bool Inno.Editor.Core.EditorModule.blocksFollowingUpdates { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModule.cs#L28) | Gets whether modules ordered after this module must defer their updates for the current frame. | — | — |
-| [`public void Inno.Editor.Core.EditorModule.Start(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModule.cs#L46) | Starts the module after the containing extension generation becomes active. `context`: The shared editor context for the active runtime. | — | `System.ArgumentNullException`: Thrown when is . `System.ObjectDisposedException`: Thrown after the module has been disposed. `System.InvalidOperationException`: Thrown when the module is already started. |
-| [`public void Inno.Editor.Core.EditorModule.Update(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModule.cs#L74) | Updates the module once per editor frame before panels and modals are drawn. `context`: The shared editor context containing the current frame state. | — | `System.ArgumentNullException`: Thrown when is . `System.ObjectDisposedException`: Thrown after the module has been disposed. `System.InvalidOperationException`: Thrown when the module is not started. |
-| [`public void Inno.Editor.Core.EditorModule.Stop(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModule.cs#L102) | Stops the module before the containing extension generation is released. `context`: The shared editor context for the runtime being stopped. | — | `System.ArgumentNullException`: Thrown when is . `System.ObjectDisposedException`: Thrown after the module has been disposed. `Inno.Core.Execution.RetirementPendingException`: Live work still depends on this module. Its owner must retain it and retry Stop before disposal. |
-| [`protected virtual void Inno.Editor.Core.EditorModule.OnStart(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModule.cs#L133) | Runs after the module generation becomes active and before its first update. `context`: The shared editor context for the active runtime. | — | — |
-| [`protected virtual void Inno.Editor.Core.EditorModule.OnUpdate(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModule.cs#L143) | Runs once per editor frame before views are drawn. `context`: The shared editor context containing the current frame state. | — | — |
-| [`protected virtual void Inno.Editor.Core.EditorModule.OnStop(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModule.cs#L157) | Runs before the module generation is released and its disposable instances are destroyed. `context`: The shared editor context for the runtime being stopped. | — | — |
-| [`protected virtual void Inno.Editor.Core.EditorModule.Capture(Inno.Editor.Core.EditorState state)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModule.cs#L172) | Captures readable project state owned by this module. `state`: The writable parameter that receives the complete readable state for this module. | — | — |
-| [`protected virtual void Inno.Editor.Core.EditorModule.Restore(Inno.Editor.Core.EditorState state)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModule.cs#L187) | Restores readable project state owned by this module. `state`: The read-only state parameter for this module. Missing or incompatible values return the fallback supplied to . | — | — |
+| [`public void Inno.Editor.Core.EditorModule.Start(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModule.cs#L46) | Starts the module after the containing extension generation becomes active. `context`: The shared editor context for the active runtime. | — | `System.ArgumentNullException`: Thrown when context is null. `System.ObjectDisposedException`: Thrown after the module has been disposed. `System.InvalidOperationException`: Thrown when the module is already started. |
+| [`public void Inno.Editor.Core.EditorModule.Update(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModule.cs#L74) | Updates the module once per editor frame before panels and modals are drawn. `context`: The shared editor context containing the current frame state. | — | `System.ArgumentNullException`: Thrown when context is null. `System.ObjectDisposedException`: Thrown after the module has been disposed. `System.InvalidOperationException`: Thrown when the module is not started. |
+| [`public void Inno.Editor.Core.EditorModule.Stop(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModule.cs#L102) | Stops the module before the containing extension generation is released. `context`: The shared editor context for the runtime being stopped. | — | `System.ArgumentNullException`: Thrown when context is null. `System.ObjectDisposedException`: Thrown after the module has been disposed. `Inno.Core.Execution.RetirementPendingException`: Live work still depends on this module. Its owner must retain it and retry Stop before disposal. |
+| [`protected virtual void Inno.Editor.Core.EditorModule.OnStart(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModule.cs#L133) | Runs after the module generation becomes active and before its first update. `context`: The shared editor context for the active runtime. | — | — |
+| [`protected virtual void Inno.Editor.Core.EditorModule.OnUpdate(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModule.cs#L143) | Runs once per editor frame before views are drawn. `context`: The shared editor context containing the current frame state. | — | — |
+| [`protected virtual void Inno.Editor.Core.EditorModule.OnStop(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModule.cs#L157) | Runs before the module generation is released and its disposable instances are destroyed. `context`: The shared editor context for the runtime being stopped. | — | — |
+| [`protected virtual void Inno.Editor.Core.EditorModule.Capture(Inno.Editor.Core.EditorState state)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModule.cs#L172) | Captures readable project state owned by this module. `state`: The writable parameter that receives the complete readable state for this module. | — | — |
+| [`protected virtual void Inno.Editor.Core.EditorModule.Restore(Inno.Editor.Core.EditorState state)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModule.cs#L187) | Restores readable project state owned by this module. `state`: The read-only state parameter for this module. Missing or incompatible values return the fallback supplied to Inno.Editor.Core.EditorState.Get``1(System.String,``0). | — | — |
| [`protected virtual void Inno.Editor.Core.EditorModule.OnDispose()`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModule.cs#L195) | Releases resources owned by this module after it has stopped and left the active extension generation. | — | — |
-| [`protected Inno.Editor.Core.EditorModule.EditorModule()`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModule.cs#L13) | Inherited or compiler-provided contract. | — | — |
+| [`protected Inno.Editor.Core.EditorModule.EditorModule()`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModule.cs#L13) | 由 C# 编译器生成的值契约成员。 | — | — |
| [`public sealed class Inno.Editor.Core.EditorModuleAttribute : System.Attribute`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModuleAttribute.cs#L9) | Registers an editor feature module with a stable identity for automatic discovery. | — | — |
-| [`public Inno.Editor.Core.EditorModuleAttribute.EditorModuleAttribute(string id, int order = 0)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModuleAttribute.cs#L24) | Creates a module registration with stable identity and deterministic lifecycle order. `id`: The globally unique module identifier used for discovery diagnostics and optional persisted module state. `order`: The ascending order used to start and update the module. | — | `System.ArgumentException`: Thrown when is empty. |
+| [`public Inno.Editor.Core.EditorModuleAttribute.EditorModuleAttribute(string id, int order = 0)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModuleAttribute.cs#L24) | Creates a module registration with stable identity and deterministic lifecycle order. `id`: The globally unique module identifier used for discovery diagnostics and optional persisted module state. `order`: The ascending order used to start and update the module. | — | `System.ArgumentException`: Thrown when id is empty. |
| [`public string Inno.Editor.Core.EditorModuleAttribute.id { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModuleAttribute.cs#L37) | Gets the stable module identifier. | — | — |
| [`public int Inno.Editor.Core.EditorModuleAttribute.order { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorModuleAttribute.cs#L42) | Gets the stable lifecycle order. | — | — |
| [`public abstract class Inno.Editor.Core.EditorPanel`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorPanel.cs#L13) | Base class for editor panel implementations. | — | — |
@@ -462,17 +474,17 @@ Editor 模块更新与 Reload 事务使用 Edit Session;Play Tick 和运行对
| [`public virtual bool Inno.Editor.Core.EditorPanel.allowScrolling { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorPanel.cs#L31) | Gets whether the presentation backend may create a scroll range for this panel window. | — | — |
| [`public virtual System.Numerics.Vector2 Inno.Editor.Core.EditorPanel.initialSize { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorPanel.cs#L36) | Gets the initial floating size in UI coordinates; zero leaves native auto-sizing in control. Saved layouts take precedence. | — | — |
| [`public bool Inno.Editor.Core.EditorPanel.isOpen { get; set; }`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorPanel.cs#L41) | Gets or sets whether panel is visible. | — | — |
-| [`public void Inno.Editor.Core.EditorPanel.Attach(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorPanel.cs#L56) | Attaches the panel after its extension generation becomes active. `context`: The shared editor context for the active runtime. | — | `System.ArgumentNullException`: Thrown when is . `System.InvalidOperationException`: Thrown when the panel is already attached. |
-| [`public void Inno.Editor.Core.EditorPanel.Detach(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorPanel.cs#L82) | Detaches the panel before its extension generation is released. `context`: The shared editor context for the runtime being detached. | — | `System.ArgumentNullException`: Thrown when is . `Inno.Core.Execution.RetirementPendingException`: Panel work is still active. The owner must retain the panel and its dependencies and retry detachment. |
-| [`public void Inno.Editor.Core.EditorPanel.Draw(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorPanel.cs#L117) | Draws the complete dockable contents of the panel for the current frame. `context`: The shared editor context containing current selection, focus, and frame state. | — | `System.ArgumentNullException`: Thrown when is . `System.InvalidOperationException`: Thrown when the panel is not attached. |
-| [`protected abstract void Inno.Editor.Core.EditorPanel.OnDraw(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorPanel.cs#L131) | Draws the complete dockable contents of this panel for the current frame. `context`: The shared editor context containing current selection, focus, and frame state. | — | — |
-| [`protected virtual void Inno.Editor.Core.EditorPanel.OnAttach(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorPanel.cs#L139) | Runs after the panel is attached to an active extension generation. `context`: The shared editor context for the active runtime. | — | — |
-| [`protected virtual void Inno.Editor.Core.EditorPanel.OnDetach(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorPanel.cs#L153) | Runs before the panel is detached from its active extension generation. `context`: The shared editor context for the runtime being detached. | — | — |
-| [`protected virtual void Inno.Editor.Core.EditorPanel.Capture(Inno.Editor.Core.EditorState state)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorPanel.cs#L168) | Captures readable project state owned by this panel. `state`: The writable parameter that receives the complete readable state for this panel. | — | — |
-| [`protected virtual void Inno.Editor.Core.EditorPanel.Restore(Inno.Editor.Core.EditorState state)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorPanel.cs#L183) | Restores readable project state owned by this panel. `state`: The read-only state parameter for this panel. Missing or incompatible values return the fallback supplied to . | — | — |
-| [`protected Inno.Editor.Core.EditorPanel.EditorPanel()`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorPanel.cs#L13) | Inherited or compiler-provided contract. | — | — |
+| [`public void Inno.Editor.Core.EditorPanel.Attach(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorPanel.cs#L56) | Attaches the panel after its extension generation becomes active. `context`: The shared editor context for the active runtime. | — | `System.ArgumentNullException`: Thrown when context is null. `System.InvalidOperationException`: Thrown when the panel is already attached. |
+| [`public void Inno.Editor.Core.EditorPanel.Detach(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorPanel.cs#L82) | Detaches the panel before its extension generation is released. `context`: The shared editor context for the runtime being detached. | — | `System.ArgumentNullException`: Thrown when context is null. `Inno.Core.Execution.RetirementPendingException`: Panel work is still active. The owner must retain the panel and its dependencies and retry detachment. |
+| [`public void Inno.Editor.Core.EditorPanel.Draw(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorPanel.cs#L117) | Draws the complete dockable contents of the panel for the current frame. `context`: The shared editor context containing current selection, focus, and frame state. | — | `System.ArgumentNullException`: Thrown when context is null. `System.InvalidOperationException`: Thrown when the panel is not attached. |
+| [`protected abstract void Inno.Editor.Core.EditorPanel.OnDraw(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorPanel.cs#L131) | Draws the complete dockable contents of this panel for the current frame. `context`: The shared editor context containing current selection, focus, and frame state. | — | — |
+| [`protected virtual void Inno.Editor.Core.EditorPanel.OnAttach(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorPanel.cs#L139) | Runs after the panel is attached to an active extension generation. `context`: The shared editor context for the active runtime. | — | — |
+| [`protected virtual void Inno.Editor.Core.EditorPanel.OnDetach(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorPanel.cs#L153) | Runs before the panel is detached from its active extension generation. `context`: The shared editor context for the runtime being detached. | — | — |
+| [`protected virtual void Inno.Editor.Core.EditorPanel.Capture(Inno.Editor.Core.EditorState state)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorPanel.cs#L168) | Captures readable project state owned by this panel. `state`: The writable parameter that receives the complete readable state for this panel. | — | — |
+| [`protected virtual void Inno.Editor.Core.EditorPanel.Restore(Inno.Editor.Core.EditorState state)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorPanel.cs#L183) | Restores readable project state owned by this panel. `state`: The read-only state parameter for this panel. Missing or incompatible values return the fallback supplied to Inno.Editor.Core.EditorState.Get``1(System.String,``0). | — | — |
+| [`protected Inno.Editor.Core.EditorPanel.EditorPanel()`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorPanel.cs#L13) | 由 C# 编译器生成的值契约成员。 | — | — |
| [`public sealed class Inno.Editor.Core.EditorPanelAttribute : System.Attribute`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorPanelAttribute.cs#L9) | Registers an editor panel for automatic discovery. | — | — |
-| [`public Inno.Editor.Core.EditorPanelAttribute.EditorPanelAttribute(string id, string title, int order = 0, bool defaultOpen = true, string menuPath = "", bool separatorBefore = false)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorPanelAttribute.cs#L36) | Creates a dockable panel registration with stable identity and presentation metadata. `id`: The stable identity used for Panel-menu routing and reload-state retention. `title`: The visible dockable-window title. `order`: The stable panel and generated Panel-menu ordering value. `defaultOpen`: Whether a newly discovered panel is visible before retained state is available. `menuPath`: The optional slash-delimited category path under the generated Panel menu. `separatorBefore`: Whether the generated toggle is preceded by a separator within its final menu category. | — | `System.ArgumentException`: Thrown when or is empty, or when contains an empty segment. |
+| [`public Inno.Editor.Core.EditorPanelAttribute.EditorPanelAttribute(string id, string title, int order = 0, bool defaultOpen = true, string menuPath = "", bool separatorBefore = false)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorPanelAttribute.cs#L36) | Creates a dockable panel registration with stable identity and presentation metadata. `id`: The stable identity used for Panel-menu routing and reload-state retention. `title`: The visible dockable-window title. `order`: The stable panel and generated Panel-menu ordering value. `defaultOpen`: Whether a newly discovered panel is visible before retained state is available. `menuPath`: The optional slash-delimited category path under the generated Panel menu. `separatorBefore`: Whether the generated toggle is preceded by a separator within its final menu category. | — | `System.ArgumentException`: Thrown when id or title is empty, or when menuPath contains an empty segment. |
| [`public string Inno.Editor.Core.EditorPanelAttribute.id { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorPanelAttribute.cs#L59) | Gets the stable panel identifier. | — | — |
| [`public string Inno.Editor.Core.EditorPanelAttribute.title { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorPanelAttribute.cs#L64) | Gets the visible panel title. | — | — |
| [`public int Inno.Editor.Core.EditorPanelAttribute.order { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorPanelAttribute.cs#L69) | Gets the stable panel ordering value. | — | — |
@@ -480,92 +492,92 @@ Editor 模块更新与 Reload 事务使用 Edit Session;Play Tick 和运行对
| [`public string Inno.Editor.Core.EditorPanelAttribute.menuPath { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorPanelAttribute.cs#L79) | Gets the optional category path under the generated Panel menu. | — | — |
| [`public bool Inno.Editor.Core.EditorPanelAttribute.separatorBefore { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorPanelAttribute.cs#L84) | Gets whether the generated panel toggle begins a new visual group. | — | — |
| [`public static class Inno.Editor.Core.EditorTypeSpecificity`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorTypeSpecificity.cs#L7) | Ranks assignable editor extension targets by class ancestry, with interface registrations one step away. | — | — |
-| [`public static bool Inno.Editor.Core.EditorTypeSpecificity.TryGet(System.Type concreteType, System.Type candidateType, out int distance)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorTypeSpecificity.cs#L27) | Determines whether a registration accepts a concrete target and returns its specificity distance. `concreteType`: The target type supplied by the active extension generation. `candidateType`: The registered class or interface accepted by the extension. `distance`: Zero for an exact match, ancestry distance for classes, or one for an interface. | True when the registration accepts the target; otherwise false and the maximum distance. | `System.ArgumentNullException`: Either type is null. |
+| [`public static bool Inno.Editor.Core.EditorTypeSpecificity.TryGet(System.Type concreteType, System.Type candidateType, out int distance)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/EditorTypeSpecificity.cs#L27) | Determines whether a registration accepts a concrete target and returns its specificity distance. `concreteType`: The target type supplied by the active extension generation. `candidateType`: The registered class or interface accepted by the extension. `distance`: Zero for an exact match, ancestry distance for classes, or one for an interface. | True when the registration accepts the target; otherwise false and the maximum distance. | `System.ArgumentNullException`: Either type is null. |
| [`public interface Inno.Editor.Core.IEditorPanelReloadState`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/IEditorPanelReloadState.cs#L8) | Optionally migrates presentation-neutral panel state across assembly reloads. | — | — |
| [`System.ReadOnlyMemory Inno.Editor.Core.IEditorPanelReloadState.CaptureReloadState()`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/IEditorPanelReloadState.cs#L16) | Captures presentation-neutral state without retaining runtime or plugin object references. | An immutable byte payload that can be consumed by the replacement panel generation. | — |
-| [`void Inno.Editor.Core.IEditorPanelReloadState.RestoreReloadState(System.ReadOnlyMemory state)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/IEditorPanelReloadState.cs#L24) | Restores presentation-neutral state captured from the previous panel generation. `state`: The immutable payload returned by the retiring panel generation. | — | — |
+| [`void Inno.Editor.Core.IEditorPanelReloadState.RestoreReloadState(System.ReadOnlyMemory state)`](../../src/composition/editor/framework/Inno.Editor.Core/Extensions/IEditorPanelReloadState.cs#L24) | Restores presentation-neutral state captured from the previous panel generation. `state`: The immutable payload returned by the retiring panel generation. | — | — |
| [`public static class Inno.Editor.Core.EditorDisplayNames`](../../src/composition/editor/framework/Inno.Editor.Core/Presentation/EditorDisplayNames.cs#L9) | Formats readable Editor labels independently from a native UI context or session. | — | — |
-| [`public static string Inno.Editor.Core.EditorDisplayNames.Nicify(string name)`](../../src/composition/editor/framework/Inno.Editor.Core/Presentation/EditorDisplayNames.cs#L20) | Converts an identifier into a readable editor label. `name`: Source identifier. | A label with identifier separators and lower-to-upper transitions spaced; empty when the input is blank. | — |
+| [`public static string Inno.Editor.Core.EditorDisplayNames.Nicify(string name)`](../../src/composition/editor/framework/Inno.Editor.Core/Presentation/EditorDisplayNames.cs#L20) | Converts an identifier into a readable editor label. `name`: Source identifier. | A label with identifier separators and lower-to-upper transitions spaced; empty when the input is blank. | — |
| [`public sealed class Inno.Editor.Core.EditorReloadCoordinator : Inno.Scripting.Reload.IScriptReloadCoordinator`](../../src/composition/editor/framework/Inno.Editor.Core/Reloading/EditorReloadCoordinator.cs#L16) | Coordinates weakly registered editor feature migrations around atomic assembly reload sessions. | — | — |
-| [`public System.IDisposable Inno.Editor.Core.EditorReloadCoordinator.RegisterGuard(Inno.Editor.Core.IEditorReloadGuard guard)`](../../src/composition/editor/framework/Inno.Editor.Core/Reloading/EditorReloadCoordinator.cs#L34) | Registers a weak admission guard without stopping its owner or creating a generation transaction. `guard`: The owner whose current state determines reload admission. | A caller-owned lease retaining the guard until registration is released. | `System.ArgumentNullException`: The guard is null. |
-| [`public bool Inno.Editor.Core.EditorReloadCoordinator.CanRequestReload(out string? reason)`](../../src/composition/editor/framework/Inno.Editor.Core/Reloading/EditorReloadCoordinator.cs#L55) | Queries whether every registered owner accepts an explicit reload request. `reason`: The first blocking reason, or null when the request is allowed. | True when all live guards permit a manual request. | — |
-| [`public bool Inno.Editor.Core.EditorReloadCoordinator.CanActivateReload(out string? reason)`](../../src/composition/editor/framework/Inno.Editor.Core/Reloading/EditorReloadCoordinator.cs#L66) | Queries whether compilation and activation can proceed without interrupting a running session. `reason`: The first blocking reason, or null when activation is allowed. | True when all live guards permit generation work. | — |
-| [`public System.IDisposable Inno.Editor.Core.EditorReloadCoordinator.Register(Inno.Editor.Core.IEditorReloadParticipant participant)`](../../src/composition/editor/framework/Inno.Editor.Core/Reloading/EditorReloadCoordinator.cs#L81) | Registers an editor feature that owns generation-bound live state. `participant`: The feature participant. The coordinator retains only a weak reference to this instance. | A registration lease that strongly retains the participant until the lease is disposed. The coordinator itself retains only a weak reference. | `System.ArgumentNullException`: Thrown when is . |
-| [`public Inno.Extensibility.Reload.IAssemblyUnloadProbe Inno.Editor.Core.EditorReloadCoordinator.Execute(Inno.Extensibility.Modules.AssemblyReloadSession reload, Inno.Extensibility.Reload.IGenerationChange? externalChange = null)`](../../src/composition/editor/framework/Inno.Editor.Core/Reloading/EditorReloadCoordinator.cs#L113) | Applies one prepared assembly reload together with every registered editor feature migration. `reload`: The prepared assembly reload session to activate and complete. `externalChange`: Content recovery prepared before type publication, applied before Editor recovery, and restored before old values. | A monitor that observes cooperative unloading of assemblies retired by the committed reload. | `System.ArgumentNullException`: Thrown when is . `System.AggregateException`: Thrown when activation fails and one or more feature or assembly rollback stages also fail. |
+| [`public System.IDisposable Inno.Editor.Core.EditorReloadCoordinator.RegisterGuard(Inno.Editor.Core.IEditorReloadGuard guard)`](../../src/composition/editor/framework/Inno.Editor.Core/Reloading/EditorReloadCoordinator.cs#L34) | Registers a weak admission guard without stopping its owner or creating a generation transaction. `guard`: The owner whose current state determines reload admission. | A caller-owned lease retaining the guard until registration is released. | `System.ArgumentNullException`: The guard is null. |
+| [`public bool Inno.Editor.Core.EditorReloadCoordinator.CanRequestReload(out string? reason)`](../../src/composition/editor/framework/Inno.Editor.Core/Reloading/EditorReloadCoordinator.cs#L55) | Queries whether every registered owner accepts an explicit reload request. `reason`: The first blocking reason, or null when the request is allowed. | True when all live guards permit a manual request. | — |
+| [`public bool Inno.Editor.Core.EditorReloadCoordinator.CanActivateReload(out string? reason)`](../../src/composition/editor/framework/Inno.Editor.Core/Reloading/EditorReloadCoordinator.cs#L66) | Queries whether compilation and activation can proceed without interrupting a running session. `reason`: The first blocking reason, or null when activation is allowed. | True when all live guards permit generation work. | — |
+| [`public System.IDisposable Inno.Editor.Core.EditorReloadCoordinator.Register(Inno.Editor.Core.IEditorReloadParticipant participant)`](../../src/composition/editor/framework/Inno.Editor.Core/Reloading/EditorReloadCoordinator.cs#L81) | Registers an editor feature that owns generation-bound live state. `participant`: The feature participant. The coordinator retains only a weak reference to this instance. | A registration lease that strongly retains the participant until the lease is disposed. The coordinator itself retains only a weak reference. | `System.ArgumentNullException`: Thrown when participant is null. |
+| [`public Inno.Extensibility.Reload.IAssemblyUnloadProbe Inno.Editor.Core.EditorReloadCoordinator.Execute(Inno.Extensibility.Modules.AssemblyReloadSession reload, Inno.Extensibility.Reload.IGenerationChange? externalChange = null)`](../../src/composition/editor/framework/Inno.Editor.Core/Reloading/EditorReloadCoordinator.cs#L113) | Applies one prepared assembly reload together with every registered editor feature migration. `reload`: The prepared assembly reload session to activate and complete. `externalChange`: Content recovery prepared before type publication, applied before Editor recovery, and restored before old values. | A monitor that observes cooperative unloading of assemblies retired by the committed reload. | `System.ArgumentNullException`: Thrown when reload is null. `System.AggregateException`: Thrown when activation fails and one or more feature or assembly rollback stages also fail. |
| [`public void Inno.Editor.Core.EditorReloadCoordinator.RefreshDiagnostics()`](../../src/composition/editor/framework/Inno.Editor.Core/Reloading/EditorReloadCoordinator.cs#L128) | Requests every live participant to republish diagnostics derived from its current state. | — | — |
-| [`public Inno.Editor.Core.EditorReloadCoordinator.EditorReloadCoordinator()`](../../src/composition/editor/framework/Inno.Editor.Core/Reloading/EditorReloadCoordinator.cs#L16) | Inherited or compiler-provided contract. | — | — |
+| [`public Inno.Editor.Core.EditorReloadCoordinator.EditorReloadCoordinator()`](../../src/composition/editor/framework/Inno.Editor.Core/Reloading/EditorReloadCoordinator.cs#L16) | 由 C# 编译器生成的值契约成员。 | — | — |
| [`public interface Inno.Editor.Core.IEditorReloadGuard`](../../src/composition/editor/framework/Inno.Editor.Core/Reloading/IEditorReloadGuard.cs#L6) | Describes whether an editor owner has released the state required for a generation change. | — | — |
| [`bool Inno.Editor.Core.IEditorReloadGuard.canRequestReload { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Reloading/IEditorReloadGuard.cs#L11) | Gets whether an explicit user reload request may be accepted in the current owner state. | — | — |
| [`bool Inno.Editor.Core.IEditorReloadGuard.canActivateReload { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Reloading/IEditorReloadGuard.cs#L16) | Gets whether compilation and activation may proceed without a live isolated runtime session. | — | — |
| [`string? Inno.Editor.Core.IEditorReloadGuard.blockingReason { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Reloading/IEditorReloadGuard.cs#L21) | Gets the reason admission is blocked, or null when the owner is ready for reload. | — | — |
| [`public interface Inno.Editor.Core.IEditorReloadParticipant`](../../src/composition/editor/framework/Inno.Editor.Core/Reloading/IEditorReloadParticipant.cs#L10) | Contributes editor-owned live state to an assembly reload without coupling the reload requester to a feature domain. | — | — |
-| [`Inno.Extensibility.Reload.IGenerationChange Inno.Editor.Core.IEditorReloadParticipant.Capture(Inno.Extensibility.Modules.AssemblyReloadContext context)`](../../src/composition/editor/framework/Inno.Editor.Core/Reloading/IEditorReloadParticipant.cs#L21) | Captures one isolated transaction for the prepared assembly generation. `context`: The prepared assembly reload context containing previous and candidate participant state. | A transaction that has captured current state but has not modified live editor objects. | — |
+| [`Inno.Extensibility.Reload.IGenerationChange Inno.Editor.Core.IEditorReloadParticipant.Capture(Inno.Extensibility.Modules.AssemblyReloadContext context)`](../../src/composition/editor/framework/Inno.Editor.Core/Reloading/IEditorReloadParticipant.cs#L21) | Captures one isolated transaction for the prepared assembly generation. `context`: The prepared assembly reload context containing previous and candidate participant state. | A transaction that has captured current state but has not modified live editor objects. | — |
| [`void Inno.Editor.Core.IEditorReloadParticipant.RefreshDiagnostics()`](../../src/composition/editor/framework/Inno.Editor.Core/Reloading/IEditorReloadParticipant.cs#L26) | Republishes diagnostics derived from the participant's current live state. | — | — |
| [`public sealed class Inno.Editor.Core.EditorContext`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorContext.cs#L13) | Provides passive project and frame state shared by editor extensions. Interaction routing is supplied separately by Inno.Editor.Interactions. | — | — |
-| [`public Inno.Editor.Core.EditorContext.EditorContext(string projectDirectory, Inno.Editor.Core.EditorKeyboardPolicy keyboard)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorContext.cs#L31) | Creates a passive editor context for one project. `projectDirectory`: The project root containing Assets and Library. `keyboard`: The explicit immutable conventions selected by product composition. | — | `System.ArgumentNullException`: The keyboard policy is null. `System.ArgumentException`: Thrown when is empty. |
-| [`public string Inno.Editor.Core.EditorContext.projectDirectory { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorContext.cs#L47) | Gets the normalized project root directory. | — | — |
-| [`public Inno.Editor.Core.EditorKeyboardPolicy Inno.Editor.Core.EditorContext.keyboard { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorContext.cs#L52) | Gets the immutable keyboard conventions shared by discovery, dispatch and presentation. | — | — |
-| [`public Inno.Editor.Core.EditorStatistics Inno.Editor.Core.EditorContext.statistics { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorContext.cs#L57) | Gets the frame-scoped statistics exchange used by independent editor features and viewers. | — | — |
-| [`public string Inno.Editor.Core.EditorContext.layoutPath { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorContext.cs#L63) | Gets the absolute path of the project editor layout document. | — | — |
-| [`public string Inno.Editor.Core.EditorContext.imguiLayout { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorContext.cs#L69) | Gets the Dear ImGui layout text without editor module or panel state sections. | — | — |
-| [`public System.Collections.Generic.IReadOnlyList Inno.Editor.Core.EditorContext.GetLayoutSectionNames(string prefix = "")`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorContext.cs#L86) | Gets layout section names matching an ordinal prefix. `prefix`: The prefix to match, or an empty string for every section. | A stable sorted snapshot of matching section names. | `System.ArgumentNullException`: Thrown when is . |
-| [`public bool Inno.Editor.Core.EditorContext.TryGetLayoutSection(string sectionName, out System.Collections.Generic.IReadOnlyDictionary values)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorContext.cs#L104) | Tries to read one independent editor layout section snapshot. `sectionName`: The section name without its INI header syntax. `values`: The copied values when the section exists. | when the requested section exists. | `System.ArgumentException`: Thrown when is empty or cannot be represented in the layout. |
-| [`public void Inno.Editor.Core.EditorContext.SetLayoutSection(string sectionName, System.Collections.Generic.IEnumerable> values)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorContext.cs#L126) | Adds or replaces one human-readable editor layout section in memory. `sectionName`: The section name without its INI header syntax. `values`: The complete scalar or JSON-formatted values. | — | `System.ArgumentNullException`: Thrown when is . `System.ArgumentException`: Thrown when a section name, key, or value cannot be represented in the layout. |
-| [`public bool Inno.Editor.Core.EditorContext.RemoveLayoutSection(string sectionName)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorContext.cs#L145) | Removes one editor layout section from the in-memory document. `sectionName`: The section name without its INI header syntax. | when an existing section was removed. | `System.ArgumentException`: Thrown when is empty or cannot be represented in the layout. |
-| [`public void Inno.Editor.Core.EditorContext.SetImGuiLayout(string? value)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorContext.cs#L154) | Replaces the Dear ImGui layout while retaining editor module and panel state sections. `value`: The complete layout text returned by Dear ImGui. | — | — |
-| [`public bool Inno.Editor.Core.EditorContext.SaveLayoutIfChanged()`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorContext.cs#L169) | Atomically saves the project editor layout when it changed. | when a changed document was written. | `System.IO.IOException`: Thrown when the layout document cannot be written atomically. `System.UnauthorizedAccessException`: Thrown when the layout document is inaccessible. |
-| [`public void Inno.Editor.Core.EditorContext.SaveLayout()`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorContext.cs#L181) | Atomically rewrites the complete project editor layout document. | — | `System.IO.IOException`: Thrown when the layout document cannot be written atomically. `System.UnauthorizedAccessException`: Thrown when the layout document is inaccessible. |
-| [`public Inno.Editor.Core.EditorFrame Inno.Editor.Core.EditorContext.frame { get; internal set; }`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorContext.cs#L186) | Gets the latest immutable editor frame snapshot. | — | — |
-| [`public bool Inno.Editor.Core.EditorContext.isFocused { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorContext.cs#L191) | Gets whether any editor viewport currently owns application focus. | — | — |
-| [`public readonly record struct Inno.Editor.Core.EditorFrame : System.IEquatable`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorFrame.cs#L15) | Describes one immutable editor frame. `deltaTime`: The elapsed frame time in seconds. `totalTime`: The absolute editor runtime in seconds. `isFocused`: Whether an editor viewport owns application focus. | — | — |
-| [`public Inno.Editor.Core.EditorFrame.EditorFrame(float deltaTime, float totalTime, bool isFocused)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorFrame.cs#L15) | Describes one immutable editor frame. `deltaTime`: The elapsed frame time in seconds. `totalTime`: The absolute editor runtime in seconds. `isFocused`: Whether an editor viewport owns application focus. | — | — |
+| [`public Inno.Editor.Core.EditorContext.EditorContext(string projectDirectory, Inno.Editor.Core.EditorKeyboardPolicy keyboard, string? initialLayoutDocument = null)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorContext.cs#L41) | Creates a passive editor context for one project. `projectDirectory`: The project root containing Assets and Library. `keyboard`: The explicit immutable conventions selected by product composition. `initialLayoutDocument`: An optional host-owned initial settings document, installed atomically only when editor.ini does not exist. Existing documents, including empty files, are preserved. | — | `System.ArgumentNullException`: The keyboard policy is null. `System.ArgumentException`: Thrown when projectDirectory is empty. `System.IO.IOException`: The current document cannot be read or its initial document cannot be installed. `System.UnauthorizedAccessException`: The caller cannot access or initialize the project settings document. |
+| [`public string Inno.Editor.Core.EditorContext.projectDirectory { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorContext.cs#L58) | Gets the normalized project root directory. | — | — |
+| [`public Inno.Editor.Core.EditorKeyboardPolicy Inno.Editor.Core.EditorContext.keyboard { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorContext.cs#L63) | Gets the immutable keyboard conventions shared by discovery, dispatch and presentation. | — | — |
+| [`public Inno.Editor.Core.EditorStatistics Inno.Editor.Core.EditorContext.statistics { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorContext.cs#L68) | Gets the frame-scoped statistics exchange used by independent editor features and viewers. | — | — |
+| [`public string Inno.Editor.Core.EditorContext.layoutPath { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorContext.cs#L74) | Gets the absolute path of the project editor layout document. | — | — |
+| [`public string Inno.Editor.Core.EditorContext.imguiLayout { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorContext.cs#L80) | Gets the Dear ImGui layout text without editor module or panel state sections. | — | — |
+| [`public System.Collections.Generic.IReadOnlyList Inno.Editor.Core.EditorContext.GetLayoutSectionNames(string prefix = "")`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorContext.cs#L97) | Gets layout section names matching an ordinal prefix. `prefix`: The prefix to match, or an empty string for every section. | A stable sorted snapshot of matching section names. | `System.ArgumentNullException`: Thrown when prefix is null. |
+| [`public bool Inno.Editor.Core.EditorContext.TryGetLayoutSection(string sectionName, out System.Collections.Generic.IReadOnlyDictionary values)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorContext.cs#L115) | Tries to read one independent editor layout section snapshot. `sectionName`: The section name without its INI header syntax. `values`: The copied values when the section exists. | true when the requested section exists. | `System.ArgumentException`: Thrown when sectionName is empty or cannot be represented in the layout. |
+| [`public void Inno.Editor.Core.EditorContext.SetLayoutSection(string sectionName, System.Collections.Generic.IEnumerable> values)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorContext.cs#L137) | Adds or replaces one human-readable editor layout section in memory. `sectionName`: The section name without its INI header syntax. `values`: The complete scalar or JSON-formatted values. | — | `System.ArgumentNullException`: Thrown when values is null. `System.ArgumentException`: Thrown when a section name, key, or value cannot be represented in the layout. |
+| [`public bool Inno.Editor.Core.EditorContext.RemoveLayoutSection(string sectionName)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorContext.cs#L156) | Removes one editor layout section from the in-memory document. `sectionName`: The section name without its INI header syntax. | true when an existing section was removed. | `System.ArgumentException`: Thrown when sectionName is empty or cannot be represented in the layout. |
+| [`public void Inno.Editor.Core.EditorContext.SetImGuiLayout(string? value)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorContext.cs#L165) | Replaces the Dear ImGui layout while retaining editor module and panel state sections. `value`: The complete layout text returned by Dear ImGui. | — | — |
+| [`public bool Inno.Editor.Core.EditorContext.SaveLayoutIfChanged()`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorContext.cs#L180) | Atomically saves the project editor layout when it changed. | true when a changed document was written. | `System.IO.IOException`: Thrown when the layout document cannot be written atomically. `System.UnauthorizedAccessException`: Thrown when the layout document is inaccessible. |
+| [`public void Inno.Editor.Core.EditorContext.SaveLayout()`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorContext.cs#L192) | Atomically rewrites the complete project editor layout document. | — | `System.IO.IOException`: Thrown when the layout document cannot be written atomically. `System.UnauthorizedAccessException`: Thrown when the layout document is inaccessible. |
+| [`public Inno.Editor.Core.EditorFrame Inno.Editor.Core.EditorContext.frame { get; internal set; }`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorContext.cs#L197) | Gets the latest immutable editor frame snapshot. | — | — |
+| [`public bool Inno.Editor.Core.EditorContext.isFocused { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorContext.cs#L202) | Gets whether any editor viewport currently owns application focus. | — | — |
+| [`public readonly record struct Inno.Editor.Core.EditorFrame : System.IEquatable`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorFrame.cs#L15) | Describes one immutable editor frame. `deltaTime`: The elapsed frame time in seconds. `totalTime`: The absolute editor runtime in seconds. `isFocused`: Whether an editor viewport owns application focus. | — | — |
+| [`public Inno.Editor.Core.EditorFrame.EditorFrame(float deltaTime, float totalTime, bool isFocused)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorFrame.cs#L15) | Describes one immutable editor frame. `deltaTime`: The elapsed frame time in seconds. `totalTime`: The absolute editor runtime in seconds. `isFocused`: Whether an editor viewport owns application focus. | — | — |
| [`public float Inno.Editor.Core.EditorFrame.deltaTime { get; init; }`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorFrame.cs#L16) | The elapsed frame time in seconds. | — | — |
| [`public float Inno.Editor.Core.EditorFrame.totalTime { get; init; }`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorFrame.cs#L17) | The absolute editor runtime in seconds. | — | — |
| [`public bool Inno.Editor.Core.EditorFrame.isFocused { get; init; }`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorFrame.cs#L18) | Whether an editor viewport owns application focus. | — | — |
| [`public override string Inno.Editor.Core.EditorFrame.ToString()`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorFrame.cs#L15) | Returns the fully qualified type name of this instance. | The fully qualified type name. | — |
-| [`public static bool Inno.Editor.Core.EditorFrame.operator !=(Inno.Editor.Core.EditorFrame left, Inno.Editor.Core.EditorFrame right)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorFrame.cs#L15) | Inherited or compiler-provided contract. | — | — |
-| [`public static bool Inno.Editor.Core.EditorFrame.operator ==(Inno.Editor.Core.EditorFrame left, Inno.Editor.Core.EditorFrame right)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorFrame.cs#L15) | Inherited or compiler-provided contract. | — | — |
+| [`public static bool Inno.Editor.Core.EditorFrame.operator !=(Inno.Editor.Core.EditorFrame left, Inno.Editor.Core.EditorFrame right)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorFrame.cs#L15) | 由 C# 编译器生成的值契约成员。 | — | — |
+| [`public static bool Inno.Editor.Core.EditorFrame.operator ==(Inno.Editor.Core.EditorFrame left, Inno.Editor.Core.EditorFrame right)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorFrame.cs#L15) | 由 C# 编译器生成的值契约成员。 | — | — |
| [`public override int Inno.Editor.Core.EditorFrame.GetHashCode()`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorFrame.cs#L15) | Returns the hash code for this instance. | A 32-bit signed integer that is the hash code for this instance. | — |
-| [`public override bool Inno.Editor.Core.EditorFrame.Equals(object obj)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorFrame.cs#L15) | Indicates whether this instance and a specified object are equal. `obj`: The object to compare with the current instance. | if and this instance are the same type and represent the same value; otherwise, . | — |
-| [`public bool Inno.Editor.Core.EditorFrame.Equals(Inno.Editor.Core.EditorFrame other)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorFrame.cs#L15) | Indicates whether the current object is equal to another object of the same type. `other`: An object to compare with this object. | if the current object is equal to the parameter; otherwise, . | — |
-| [`public void Inno.Editor.Core.EditorFrame.Deconstruct(out float deltaTime, out float totalTime, out bool isFocused)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorFrame.cs#L15) | Inherited or compiler-provided contract. | — | — |
+| [`public override bool Inno.Editor.Core.EditorFrame.Equals(object obj)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorFrame.cs#L15) | Indicates whether this instance and a specified object are equal. `obj`: The object to compare with the current instance. | true if obj and this instance are the same type and represent the same value; otherwise, false. | — |
+| [`public bool Inno.Editor.Core.EditorFrame.Equals(Inno.Editor.Core.EditorFrame other)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorFrame.cs#L15) | Indicates whether the current object is equal to another object of the same type. `other`: An object to compare with this object. | true if the current object is equal to the other parameter; otherwise, false. | — |
+| [`public void Inno.Editor.Core.EditorFrame.Deconstruct(out float deltaTime, out float totalTime, out bool isFocused)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorFrame.cs#L15) | 由 C# 编译器生成的值契约成员。 | — | — |
| [`public sealed class Inno.Editor.Core.EditorKeyboardPolicy`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorKeyboardPolicy.cs#L9) | Supplies immutable keyboard conventions selected by the Editor product composition. | — | — |
-| [`public Inno.Editor.Core.EditorKeyboardPolicy.EditorKeyboardPolicy(Inno.Core.Input.KeyModifier primaryModifier, string superModifierLabel)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorKeyboardPolicy.cs#L23) | Defines the primary shortcut modifier and the display name of the Super modifier. `primaryModifier`: One Control, Super or Alt modifier used by symbolic primary shortcuts. `superModifierLabel`: The nonempty product-specific name displayed for the Super modifier. | — | `System.ArgumentException`: The modifier is not one supported modifier or the label is empty. |
+| [`public Inno.Editor.Core.EditorKeyboardPolicy.EditorKeyboardPolicy(Inno.Core.Input.KeyModifier primaryModifier, string superModifierLabel)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorKeyboardPolicy.cs#L23) | Defines the primary shortcut modifier and the display name of the Super modifier. `primaryModifier`: One Control, Super or Alt modifier used by symbolic primary shortcuts. `superModifierLabel`: The nonempty product-specific name displayed for the Super modifier. | — | `System.ArgumentException`: The modifier is not one supported modifier or the label is empty. |
| [`public Inno.Core.Input.KeyModifier Inno.Editor.Core.EditorKeyboardPolicy.primaryModifier { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorKeyboardPolicy.cs#L37) | Gets the modifier used when resolving symbolic primary shortcuts. | — | — |
| [`public string Inno.Editor.Core.EditorKeyboardPolicy.superModifierLabel { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorKeyboardPolicy.cs#L42) | Gets the product-selected display name of the Super modifier. | — | — |
| [`public abstract class Inno.Editor.Core.EditorRuntime : System.IDisposable`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorRuntime.cs#L8) | Defines the presentation-independent lifecycle of an editor runtime. | — | — |
-| [`protected Inno.Editor.Core.EditorRuntime.EditorRuntime(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorRuntime.cs#L19) | Creates a runtime for the supplied passive context. `context`: The shared editor context. | — | `System.ArgumentNullException`: Thrown when is . |
+| [`protected Inno.Editor.Core.EditorRuntime.EditorRuntime(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorRuntime.cs#L19) | Creates a runtime for the supplied passive context. `context`: The shared editor context. | — | `System.ArgumentNullException`: Thrown when context is null. |
| [`public Inno.Editor.Core.EditorContext Inno.Editor.Core.EditorRuntime.context { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorRuntime.cs#L27) | Gets the shared passive editor context. | — | — |
| [`public abstract void Inno.Editor.Core.EditorRuntime.Start()`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorRuntime.cs#L32) | Starts the runtime and activates its initial extension generation. | — | — |
-| [`public abstract void Inno.Editor.Core.EditorRuntime.Update(Inno.Editor.Core.EditorFrame frame)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorRuntime.cs#L40) | Updates the runtime for one editor frame. `frame`: The immutable frame state. | — | — |
-| [`protected void Inno.Editor.Core.EditorRuntime.SetFrame(Inno.Editor.Core.EditorFrame frame)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorRuntime.cs#L48) | Advances frame-scoped data and publishes the latest immutable frame. `frame`: The frame to publish. | — | — |
+| [`public abstract void Inno.Editor.Core.EditorRuntime.Update(Inno.Editor.Core.EditorFrame frame)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorRuntime.cs#L40) | Updates the runtime for one editor frame. `frame`: The immutable frame state. | — | — |
+| [`protected void Inno.Editor.Core.EditorRuntime.SetFrame(Inno.Editor.Core.EditorFrame frame)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorRuntime.cs#L48) | Advances frame-scoped data and publishes the latest immutable frame. `frame`: The frame to publish. | — | — |
| [`public abstract void Inno.Editor.Core.EditorRuntime.Dispose()`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorRuntime.cs#L57) | Stops the runtime and releases active extensions. | — | — |
| [`public abstract class Inno.Editor.Core.EditorState`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorState.cs#L14) | Provides the serialization-neutral parameter used to capture or restore one editor extension's project state. | — | — |
| [`protected Inno.Editor.Core.EditorState.EditorState()`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorState.cs#L19) | Initializes the base contract for a runtime-owned editor state parameter. | — | — |
-| [`public abstract T Inno.Editor.Core.EditorState.Get(string key, T fallback)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorState.cs#L42) | Reads a compatible value or returns the caller-provided fallback. `key`: The stable key local to the owning module or panel. `fallback`: The value returned when the key is absent, malformed, or incompatible with . `T`: The neutral value type expected by the caller. | The stored compatible value, or . | `System.ArgumentException`: Thrown when is empty. |
-| [`public abstract void Inno.Editor.Core.EditorState.Set(string key, T value)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorState.cs#L68) | Writes one neutral value under a stable extension-local key. `key`: The stable key local to the owning module or panel. `value`: The value to persist. `T`: The neutral value type supplied by the caller. | — | `System.ArgumentException`: Thrown when is empty. `System.InvalidOperationException`: Thrown when the state parameter was supplied for restoration and is therefore read-only. `System.NotSupportedException`: Thrown when cannot be represented by the runtime state serializer. |
+| [`public abstract T Inno.Editor.Core.EditorState.Get(string key, T fallback)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorState.cs#L42) | Reads a compatible value or returns the caller-provided fallback. `T`: The neutral value type expected by the caller. `key`: The stable key local to the owning module or panel. `fallback`: The value returned when the key is absent, malformed, or incompatible with T. | The stored compatible value, or fallback. | `System.ArgumentException`: Thrown when key is empty. |
+| [`public abstract void Inno.Editor.Core.EditorState.Set(string key, T value)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorState.cs#L68) | Writes one neutral value under a stable extension-local key. `T`: The neutral value type supplied by the caller. `key`: The stable key local to the owning module or panel. `value`: The value to persist. | — | `System.ArgumentException`: Thrown when key is empty. `System.InvalidOperationException`: Thrown when the state parameter was supplied for restoration and is therefore read-only. `System.NotSupportedException`: Thrown when value cannot be represented by the runtime state serializer. |
| [`public readonly record struct Inno.Editor.Core.EditorStatisticId : System.IEquatable`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L10) | Identifies one editor statistic across panels, modules, and reloadable extensions. | — | — |
-| [`public Inno.Editor.Core.EditorStatisticId.EditorStatisticId(string value)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L21) | Creates a globally stable statistic identifier. `value`: Non-empty globally stable identity. | — | `System.ArgumentException`: Thrown when is empty. |
+| [`public Inno.Editor.Core.EditorStatisticId.EditorStatisticId(string value)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L21) | Creates a globally stable statistic identifier. `value`: Non-empty globally stable identity. | — | `System.ArgumentException`: Thrown when value is empty. |
| [`public string Inno.Editor.Core.EditorStatisticId.value { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L30) | Gets the globally stable identity. | — | — |
| [`public bool Inno.Editor.Core.EditorStatisticId.isValid { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L35) | Gets whether this identifier contains a usable value. | — | — |
| [`public override string Inno.Editor.Core.EditorStatisticId.ToString()`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L43) | Formats this value as a human-readable representation. | The human-readable representation of this value. | — |
-| [`public static bool Inno.Editor.Core.EditorStatisticId.operator !=(Inno.Editor.Core.EditorStatisticId left, Inno.Editor.Core.EditorStatisticId right)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L10) | Inherited or compiler-provided contract. | — | — |
-| [`public static bool Inno.Editor.Core.EditorStatisticId.operator ==(Inno.Editor.Core.EditorStatisticId left, Inno.Editor.Core.EditorStatisticId right)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L10) | Inherited or compiler-provided contract. | — | — |
+| [`public static bool Inno.Editor.Core.EditorStatisticId.operator !=(Inno.Editor.Core.EditorStatisticId left, Inno.Editor.Core.EditorStatisticId right)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L10) | 由 C# 编译器生成的值契约成员。 | — | — |
+| [`public static bool Inno.Editor.Core.EditorStatisticId.operator ==(Inno.Editor.Core.EditorStatisticId left, Inno.Editor.Core.EditorStatisticId right)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L10) | 由 C# 编译器生成的值契约成员。 | — | — |
| [`public override int Inno.Editor.Core.EditorStatisticId.GetHashCode()`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L10) | Returns the hash code for this instance. | A 32-bit signed integer that is the hash code for this instance. | — |
-| [`public override bool Inno.Editor.Core.EditorStatisticId.Equals(object obj)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L10) | Indicates whether this instance and a specified object are equal. `obj`: The object to compare with the current instance. | if and this instance are the same type and represent the same value; otherwise, . | — |
-| [`public bool Inno.Editor.Core.EditorStatisticId.Equals(Inno.Editor.Core.EditorStatisticId other)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L10) | Indicates whether the current object is equal to another object of the same type. `other`: An object to compare with this object. | if the current object is equal to the parameter; otherwise, . | — |
+| [`public override bool Inno.Editor.Core.EditorStatisticId.Equals(object obj)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L10) | Indicates whether this instance and a specified object are equal. `obj`: The object to compare with the current instance. | true if obj and this instance are the same type and represent the same value; otherwise, false. | — |
+| [`public bool Inno.Editor.Core.EditorStatisticId.Equals(Inno.Editor.Core.EditorStatisticId other)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L10) | Indicates whether the current object is equal to another object of the same type. `other`: An object to compare with this object. | true if the current object is equal to the other parameter; otherwise, false. | — |
| [`public readonly record struct Inno.Editor.Core.EditorStatisticGroupId : System.IEquatable`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L49) | Identifies one visual group in the editor statistics presentation. | — | — |
-| [`public Inno.Editor.Core.EditorStatisticGroupId.EditorStatisticGroupId(string value)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L60) | Creates a globally stable statistic-group identifier. `value`: Non-empty globally stable identity. | — | `System.ArgumentException`: Thrown when is empty. |
+| [`public Inno.Editor.Core.EditorStatisticGroupId.EditorStatisticGroupId(string value)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L60) | Creates a globally stable statistic-group identifier. `value`: Non-empty globally stable identity. | — | `System.ArgumentException`: Thrown when value is empty. |
| [`public string Inno.Editor.Core.EditorStatisticGroupId.value { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L69) | Gets the globally stable identity. | — | — |
| [`public bool Inno.Editor.Core.EditorStatisticGroupId.isValid { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L74) | Gets whether this identifier contains a usable value. | — | — |
| [`public override string Inno.Editor.Core.EditorStatisticGroupId.ToString()`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L82) | Formats this value as a human-readable representation. | The human-readable representation of this value. | — |
-| [`public static bool Inno.Editor.Core.EditorStatisticGroupId.operator !=(Inno.Editor.Core.EditorStatisticGroupId left, Inno.Editor.Core.EditorStatisticGroupId right)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L49) | Inherited or compiler-provided contract. | — | — |
-| [`public static bool Inno.Editor.Core.EditorStatisticGroupId.operator ==(Inno.Editor.Core.EditorStatisticGroupId left, Inno.Editor.Core.EditorStatisticGroupId right)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L49) | Inherited or compiler-provided contract. | — | — |
+| [`public static bool Inno.Editor.Core.EditorStatisticGroupId.operator !=(Inno.Editor.Core.EditorStatisticGroupId left, Inno.Editor.Core.EditorStatisticGroupId right)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L49) | 由 C# 编译器生成的值契约成员。 | — | — |
+| [`public static bool Inno.Editor.Core.EditorStatisticGroupId.operator ==(Inno.Editor.Core.EditorStatisticGroupId left, Inno.Editor.Core.EditorStatisticGroupId right)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L49) | 由 C# 编译器生成的值契约成员。 | — | — |
| [`public override int Inno.Editor.Core.EditorStatisticGroupId.GetHashCode()`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L49) | Returns the hash code for this instance. | A 32-bit signed integer that is the hash code for this instance. | — |
-| [`public override bool Inno.Editor.Core.EditorStatisticGroupId.Equals(object obj)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L49) | Indicates whether this instance and a specified object are equal. `obj`: The object to compare with the current instance. | if and this instance are the same type and represent the same value; otherwise, . | — |
-| [`public bool Inno.Editor.Core.EditorStatisticGroupId.Equals(Inno.Editor.Core.EditorStatisticGroupId other)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L49) | Indicates whether the current object is equal to another object of the same type. `other`: An object to compare with this object. | if the current object is equal to the parameter; otherwise, . | — |
+| [`public override bool Inno.Editor.Core.EditorStatisticGroupId.Equals(object obj)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L49) | Indicates whether this instance and a specified object are equal. `obj`: The object to compare with the current instance. | true if obj and this instance are the same type and represent the same value; otherwise, false. | — |
+| [`public bool Inno.Editor.Core.EditorStatisticGroupId.Equals(Inno.Editor.Core.EditorStatisticGroupId other)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L49) | Indicates whether the current object is equal to another object of the same type. `other`: An object to compare with this object. | true if the current object is equal to the other parameter; otherwise, false. | — |
| [`public sealed class Inno.Editor.Core.EditorStatistic`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L88) | Describes one immutable, presentation-ready statistic without retaining provider instances or types. | — | — |
-| [`public Inno.Editor.Core.EditorStatistic.EditorStatistic(Inno.Editor.Core.EditorStatisticId id, Inno.Editor.Core.EditorStatisticGroupId groupId, string groupName, string label, string value, int groupOrder = 0, int order = 0)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L117) | Creates one statistic contribution. `id`: Globally stable statistic identity used for replacement within a frame. `groupId`: Stable visual group identity. `groupName`: User-facing group heading. `label`: User-facing metric label. `value`: Already formatted user-facing value. `groupOrder`: Ascending group presentation order. `order`: Ascending metric order within the group. | — | `System.ArgumentException`: Thrown when an identifier, group name, label, or value is empty. |
+| [`public Inno.Editor.Core.EditorStatistic.EditorStatistic(Inno.Editor.Core.EditorStatisticId id, Inno.Editor.Core.EditorStatisticGroupId groupId, string groupName, string label, string value, int groupOrder = 0, int order = 0)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L117) | Creates one statistic contribution. `id`: Globally stable statistic identity used for replacement within a frame. `groupId`: Stable visual group identity. `groupName`: User-facing group heading. `label`: User-facing metric label. `value`: Already formatted user-facing value. `groupOrder`: Ascending group presentation order. `order`: Ascending metric order within the group. | — | `System.ArgumentException`: Thrown when an identifier, group name, label, or value is empty. |
| [`public Inno.Editor.Core.EditorStatisticId Inno.Editor.Core.EditorStatistic.id { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L145) | Gets the globally stable statistic identity. | — | — |
| [`public Inno.Editor.Core.EditorStatisticGroupId Inno.Editor.Core.EditorStatistic.groupId { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L150) | Gets the stable visual group identity. | — | — |
| [`public string Inno.Editor.Core.EditorStatistic.groupName { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L155) | Gets the user-facing group heading. | — | — |
@@ -574,10 +586,10 @@ Editor 模块更新与 Reload 事务使用 Edit Session;Play Tick 和运行对
| [`public int Inno.Editor.Core.EditorStatistic.groupOrder { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L170) | Gets ascending group presentation order. | — | — |
| [`public int Inno.Editor.Core.EditorStatistic.order { get; }`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L175) | Gets ascending metric order within the group. | — | — |
| [`public sealed class Inno.Editor.Core.EditorStatistics`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L185) | Exchanges frame-scoped, reload-safe statistics between independent editor features and viewers. | — | — |
-| [`public void Inno.Editor.Core.EditorStatistics.Publish(Inno.Editor.Core.EditorStatistic statistic)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L202) | Publishes or replaces one statistic for the current editor frame. `statistic`: Immutable contribution containing no runtime provider references. | — | `System.ArgumentNullException`: Thrown when is . |
-| [`public void Inno.Editor.Core.EditorStatistics.Publish(System.Collections.Generic.IEnumerable statistics)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L223) | Publishes or replaces several statistics for the current editor frame. `statistics`: Contributions to publish in enumeration order. | — | `System.ArgumentNullException`: Thrown when or one of its values is null. |
+| [`public void Inno.Editor.Core.EditorStatistics.Publish(Inno.Editor.Core.EditorStatistic statistic)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L202) | Publishes or replaces one statistic for the current editor frame. `statistic`: Immutable contribution containing no runtime provider references. | — | `System.ArgumentNullException`: Thrown when statistic is null. |
+| [`public void Inno.Editor.Core.EditorStatistics.Publish(System.Collections.Generic.IEnumerable statistics)`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L223) | Publishes or replaces several statistics for the current editor frame. `statistics`: Contributions to publish in enumeration order. | — | `System.ArgumentNullException`: Thrown when statistics or one of its values is null. |
| [`public System.Collections.Generic.IReadOnlyList Inno.Editor.Core.EditorStatistics.GetSnapshot()`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L238) | Gets a deterministic snapshot combining current contributions with the previous completed frame for providers that draw after their consumer. | An immutable, sorted snapshot containing at most one value for each stable statistic ID. Unchanged content reuses the same snapshot; previously returned snapshots remain valid. | — |
-| [`public Inno.Editor.Core.EditorStatistics.EditorStatistics()`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L185) | Inherited or compiler-provided contract. | — | — |
+| [`public Inno.Editor.Core.EditorStatistics.EditorStatistics()`](../../src/composition/editor/framework/Inno.Editor.Core/Runtime/EditorStatistics.cs#L185) | 由 C# 编译器生成的值契约成员。 | — | — |
## 项目依赖
diff --git a/docs/editor/Inno.Editor.Exporting.md b/docs/editor/Inno.Editor.Exporting.md
index ed4a3391..4dcfb010 100644
--- a/docs/editor/Inno.Editor.Exporting.md
+++ b/docs/editor/Inno.Editor.Exporting.md
@@ -38,43 +38,75 @@ Editor/CLI 已完成这个协调;源码工作区中的 Project 用户不需要
EditorExportService 是无界面的导出 owner:StartGame/StartPlugin、Cancel、progress、错误和任务 drain 全部复用 Build pipeline 与 LifetimeScope。Workbench 拥有输入表单与阻塞 modal。服务不引用 ImGui、Panel 或 hosting;关闭时先取消并等待任务释放资源,不能让隐藏窗口丢弃活动导出。
+## 导出呈现快照
+
+`EditorExportService.progress` 返回一份 owner-thread `EditorExportProgress`,包含当前操作身份、百分比、状态、错误、忙碌和取消请求。无可测量总量时 fraction 为 null,通用弹窗显示活动态;Support Pack 准备因此不再伪装成 0%。后台进度继续使用原有队列,但记录关联其所属操作;迟到记录和取消后的普通进度不会覆盖当前状态。呈现通过 `Cancel(operationId)` 请求取消,资源仍由现有导出事务退休。
+
+Support Pack 细分阶段与工具活动由独立的 #57 处理,本页不将它描述为已经实现。
+
## 当前源码公开 API 清单
此清单对应当前 SDK 求值与源码符号;内部类型不构成公开 API。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
-
-| API 与源码 | 契约与参数 | 返回值 | 重要异常 |
-| --- | --- | --- | --- |
+| API | 职责与参数 | 返回语义 | 失败条件 |
+|---|---|---|---|
+| [`public readonly record struct Inno.Editor.Exporting.EditorExportProgress : System.IEquatable`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportProgress.cs#L24) | Contains one owner-thread export presentation snapshot. `operationId`: The export identity within this service. `fraction`: The last measured completion fraction, or null while the active phase has no measured total. `status`: The actual stage or outcome message. `error`: The current failure diagnostic, or empty. `isBusy`: Whether work still owns resources. `cancellationRequested`: Whether cancellation is draining work. | — | — |
+| [`public Inno.Editor.Exporting.EditorExportProgress.EditorExportProgress(long operationId, float? fraction, string status, string error, bool isBusy, bool cancellationRequested)`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportProgress.cs#L24) | Contains one owner-thread export presentation snapshot. `operationId`: The export identity within this service. `fraction`: The last measured completion fraction, or null while the active phase has no measured total. `status`: The actual stage or outcome message. `error`: The current failure diagnostic, or empty. `isBusy`: Whether work still owns resources. `cancellationRequested`: Whether cancellation is draining work. | — | — |
+| [`public long Inno.Editor.Exporting.EditorExportProgress.operationId { get; init; }`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportProgress.cs#L25) | The export identity within this service. | — | — |
+| [`public float? Inno.Editor.Exporting.EditorExportProgress.fraction { get; init; }`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportProgress.cs#L26) | The last measured completion fraction, or null while the active phase has no measured total. | — | — |
+| [`public string Inno.Editor.Exporting.EditorExportProgress.status { get; init; }`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportProgress.cs#L27) | The actual stage or outcome message. | — | — |
+| [`public string Inno.Editor.Exporting.EditorExportProgress.error { get; init; }`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportProgress.cs#L28) | The current failure diagnostic, or empty. | — | — |
+| [`public bool Inno.Editor.Exporting.EditorExportProgress.isBusy { get; init; }`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportProgress.cs#L29) | Whether work still owns resources. | — | — |
+| [`public bool Inno.Editor.Exporting.EditorExportProgress.cancellationRequested { get; init; }`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportProgress.cs#L30) | Whether cancellation is draining work. | — | — |
+| [`public override string Inno.Editor.Exporting.EditorExportProgress.ToString()`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportProgress.cs#L24) | Returns the fully qualified type name of this instance. | The fully qualified type name. | — |
+| [`public static bool Inno.Editor.Exporting.EditorExportProgress.operator !=(Inno.Editor.Exporting.EditorExportProgress left, Inno.Editor.Exporting.EditorExportProgress right)`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportProgress.cs#L24) | 由 C# 编译器生成的值契约成员。 | — | — |
+| [`public static bool Inno.Editor.Exporting.EditorExportProgress.operator ==(Inno.Editor.Exporting.EditorExportProgress left, Inno.Editor.Exporting.EditorExportProgress right)`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportProgress.cs#L24) | 由 C# 编译器生成的值契约成员。 | — | — |
+| [`public override int Inno.Editor.Exporting.EditorExportProgress.GetHashCode()`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportProgress.cs#L24) | Returns the hash code for this instance. | A 32-bit signed integer that is the hash code for this instance. | — |
+| [`public override bool Inno.Editor.Exporting.EditorExportProgress.Equals(object obj)`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportProgress.cs#L24) | Indicates whether this instance and a specified object are equal. `obj`: The object to compare with the current instance. | true if obj and this instance are the same type and represent the same value; otherwise, false. | — |
+| [`public bool Inno.Editor.Exporting.EditorExportProgress.Equals(Inno.Editor.Exporting.EditorExportProgress other)`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportProgress.cs#L24) | Indicates whether the current object is equal to another object of the same type. `other`: An object to compare with this object. | true if the current object is equal to the other parameter; otherwise, false. | — |
+| [`public void Inno.Editor.Exporting.EditorExportProgress.Deconstruct(out long operationId, out float? fraction, out string status, out string error, out bool isBusy, out bool cancellationRequested)`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportProgress.cs#L24) | 由 C# 编译器生成的值契约成员。 | — | — |
| [`public sealed class Inno.Editor.Exporting.EditorExportService : Inno.Editor.Core.EditorModule`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportService.cs#L20) | Owns asynchronous export, progress, cancellation and retirement independently from presentation. | — | — |
-| [`public bool Inno.Editor.Exporting.EditorExportService.isPluginBusy { get; }`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportService.cs#L42) | Gets whether a Plugin source export still owns build resources. | — | — |
-| [`public bool Inno.Editor.Exporting.EditorExportService.isGameBusy { get; }`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportService.cs#L46) | Gets whether a game export or its Support Pack preparation is active. | — | — |
-| [`public string Inno.Editor.Exporting.EditorExportService.status { get; private set; }`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportService.cs#L50) | Gets the latest owner-thread progress message. | — | — |
-| [`public string Inno.Editor.Exporting.EditorExportService.error { get; private set; }`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportService.cs#L54) | Gets the last failure or cancellation diagnostic, or an empty string. | — | — |
-| [`public float Inno.Editor.Exporting.EditorExportService.gameProgress { get; private set; }`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportService.cs#L58) | Gets monotonic progress for the current game build, from zero through one. | — | — |
-| [`public System.Collections.Generic.IReadOnlyList Inno.Editor.Exporting.EditorExportService.availableGameTargets { get; }`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportService.cs#L62) | Gets the targets registered by the active Build distribution. | — | — |
-| [`public System.Collections.Generic.IReadOnlyList Inno.Editor.Exporting.EditorExportService.GetManagedDeployments(Inno.Build.BuildTargetId target)`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportService.cs#L73) | Gets deployment implementations registered for a target. `target`: The explicitly chosen build target. | The registered deployment choices; no host fallback is introduced. | — |
-| [`public string Inno.Editor.Exporting.EditorExportService.GetGameTargetDisplayName(Inno.Build.BuildTargetId target)`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportService.cs#L83) | Gets a registered target label or a diagnostic for an unavailable target. `target`: The target to describe. | A presentation label; never used as a routing identity. | — |
-| [`public void Inno.Editor.Exporting.EditorExportService.StartPlugin(Inno.Build.PluginBuildRequest request)`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportService.cs#L96) | Starts a source-package export using the existing Build pipeline. `request`: The complete, explicitly selected package request. | — | `System.InvalidOperationException`: Another export still owns the service. |
-| [`public void Inno.Editor.Exporting.EditorExportService.StartGame(Inno.Build.GameBuildRequest request)`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportService.cs#L115) | Prepares the selected Support Pack before capturing and building the game. `request`: The complete game request; no form or window state is retained. | — | `System.InvalidOperationException`: Another export still owns the service. |
-| [`public void Inno.Editor.Exporting.EditorExportService.Cancel()`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportService.cs#L137) | Requests cancellation without releasing resources before their owned work drains. | — | — |
-| [`protected override void Inno.Editor.Exporting.EditorExportService.OnUpdate(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportService.cs#L157) | Advances compilation tickets, build progress, and completed export tasks. `context`: The active Editor context for the current frame. | — | — |
-| [`protected override void Inno.Editor.Exporting.EditorExportService.OnStop(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportService.cs#L177) | Cancels and drains active export work before the Editor generation is stopped. `context`: The active Editor context being stopped. | — | — |
-| [`protected override void Inno.Editor.Exporting.EditorExportService.OnDispose()`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportService.cs#L185) | Drains export cleanup before releasing cancellation resources owned by this module. | — | — |
+| [`public bool Inno.Editor.Exporting.EditorExportService.isPluginBusy { get; }`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportService.cs#L46) | Gets whether a Plugin source export still owns build resources. | — | — |
+| [`public bool Inno.Editor.Exporting.EditorExportService.isGameBusy { get; }`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportService.cs#L50) | Gets whether a game export or its Support Pack preparation is active. | — | — |
+| [`public Inno.Editor.Exporting.EditorExportProgress Inno.Editor.Exporting.EditorExportService.progress { get; }`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportService.cs#L54) | Gets one owner-thread snapshot for the current export, including cancellation and action identity. | — | — |
+| [`public void Inno.Editor.Exporting.EditorExportService.Cancel(long operationId)`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportService.cs#L63) | Cancels the observed export only while that operation still owns this service. `operationId`: The operation observed by the caller. | — | — |
+| [`public System.Collections.Generic.IReadOnlyList Inno.Editor.Exporting.EditorExportService.availableGameTargets { get; }`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportService.cs#L72) | Gets the targets registered by the active Build distribution. | — | — |
+| [`public System.Collections.Generic.IReadOnlyList Inno.Editor.Exporting.EditorExportService.GetManagedDeployments(Inno.Build.BuildTargetId target)`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportService.cs#L83) | Gets deployment implementations registered for a target. `target`: The explicitly chosen build target. | The registered deployment choices; no host fallback is introduced. | — |
+| [`public string Inno.Editor.Exporting.EditorExportService.GetGameTargetDisplayName(Inno.Build.BuildTargetId target)`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportService.cs#L93) | Gets a registered target label or a diagnostic for an unavailable target. `target`: The target to describe. | A presentation label; never used as a routing identity. | — |
+| [`public void Inno.Editor.Exporting.EditorExportService.StartPlugin(Inno.Build.PluginBuildRequest request)`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportService.cs#L106) | Starts a source-package export using the existing Build pipeline. `request`: The complete, explicitly selected package request. | — | `System.InvalidOperationException`: Another export still owns the service. |
+| [`public void Inno.Editor.Exporting.EditorExportService.StartGame(Inno.Build.GameBuildRequest request)`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportService.cs#L125) | Prepares the selected Support Pack before capturing and building the game. `request`: The complete game request; no form or window state is retained. | — | `System.InvalidOperationException`: Another export still owns the service. |
+| [`protected override void Inno.Editor.Exporting.EditorExportService.OnUpdate(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportService.cs#L167) | Advances compilation tickets, build progress, and completed export tasks. `context`: The active Editor context for the current frame. | — | — |
+| [`protected override void Inno.Editor.Exporting.EditorExportService.OnStop(Inno.Editor.Core.EditorContext context)`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportService.cs#L190) | Cancels and drains active export work before the Editor generation is stopped. `context`: The active Editor context being stopped. | — | — |
+| [`protected override void Inno.Editor.Exporting.EditorExportService.OnDispose()`](../../src/composition/editor/features/Inno.Editor.Exporting/Runtime/EditorExportService.cs#L198) | Drains export cleanup before releasing cancellation resources owned by this module. | — | — |
## 项目依赖
diff --git a/docs/editor/Inno.Editor.ImGui.md b/docs/editor/Inno.Editor.ImGui.md
index 286fa28a..756be1d8 100644
--- a/docs/editor/Inno.Editor.ImGui.md
+++ b/docs/editor/Inno.Editor.ImGui.md
@@ -231,6 +231,43 @@ static void DrawHelp()
}
```
+## 动态消息与进度弹窗
+
+`MeasureDialog` 与 `DrawDialog` 复用同一份 `DialogPresentation`。presentation 只含文本、可选进度、详情和动作策略;`DialogLayout` 只公开所需 `size`,其余布局计算属于 Widget 内部。Renderer 不认识脚本、导出、Sample 或具体平台。
+
+正文很长时只有一个滚动 Child;Modal 拥有外层 padding,正文不重复增加 inset。进度和操作行留在正文之外,尺寸、换行宽度、字体和动作状态来自同一帧。未知总量通过 indeterminate 显示活动,不生成虚假百分比。测量在 Session 内最多复用两份结果,每份文本总量不超过 16,384 字符;键覆盖可用区域、实际字体与烘焙身份、字形/源变化、尺度及布局值。缓存只保留中立值,Session 退休时清除;共享或 remapped 字体按请求重新测量,不延长原生字体借用。Escape 只有在调用方明确开启 `cancelOnEscape` 时才触发动作,不能把任意按钮隐式视为 Cancel。
+
+以下示例通过当前逻辑 API 实现一个可关闭消息窗口:
+
+```csharp
+using System.Numerics;
+using InnoEditor.Core;
+using InnoEditor.ImGui;
+
+[EditorModal("example.message", "Message")]
+public sealed class MessageModal : EditorModal
+{
+ private bool m_visible = true;
+ private DialogPresentation m_content;
+ private DialogLayout m_layout;
+ public override bool isVisible => m_visible;
+ public override bool allowScrolling => false;
+ protected override Vector2? OnPrepare(
+ EditorContext context,
+ Vector2 availableContentSize
+ ) {
+ m_content = new("A message that can wrap.", actionLabel: "Close", cancelOnEscape: true);
+ m_layout = EditorUiSession.current.widgets.MeasureDialog(m_content, availableContentSize);
+ return m_layout.size;
+ }
+ protected override void OnDraw(EditorContext context)
+ {
+ if (EditorUiSession.current.widgets.DrawDialog(m_content, m_layout))
+ m_visible = false;
+ }
+}
+```
+
## 当前源码公开 API 清单
此清单对应当前 SDK 求值与源码符号;内部类型不构成公开 API。
@@ -360,6 +397,7 @@ static void DrawHelp()
+
@@ -1205,7 +1243,6 @@ static void DrawHelp()
-
@@ -1300,6 +1337,8 @@ static void DrawHelp()
+
+
@@ -1362,6 +1401,7 @@ static void DrawHelp()
+
@@ -1372,6 +1412,24 @@ static void DrawHelp()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1456,39 +1514,39 @@ static void DrawHelp()
-| API 与源码 | 契约与参数 | 返回值 | 重要异常 |
-| --- | --- | --- | --- |
+| API | 职责与参数 | 返回语义 | 失败条件 |
+|---|---|---|---|
| [`public static class Inno.Editor.ImGui.ImGui`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Controls.cs#L9) | Provides pointer-free controls within the active Editor UI session. | — | — |
-| [`public static bool Inno.Editor.ImGui.ImGui.InvisibleButton(string label, System.Numerics.Vector2 size, Inno.Editor.ImGui.ImGuiButtonFlags flags = Inno.Editor.ImGui.ImGuiButtonFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Controls.cs#L26) | Submits an explicitly drawn control interaction rectangle. `label`: The visible label and optional stable ID suffix. `size`: The explicit two-dimensional extent. `flags`: The explicit control and interaction options. | True when the documented control event or condition is present; otherwise false. | — |
-| [`public static bool Inno.Editor.ImGui.ImGui.MenuItem(string label, string shortcut = "", bool selected = false, bool enabled = true)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Controls.cs#L53) | Draws a menu item with explicit availability and checked state. `label`: The visible label and optional stable ID suffix. `shortcut`: A display label only; execution remains with the Action router. `selected`: Whether the item is currently selected. `enabled`: Whether the control can accept input. | True when the documented control event or condition is present; otherwise false. | — |
-| [`public static bool Inno.Editor.ImGui.ImGui.SliderInt(string label, ref int value, int minimum, int maximum, string format = "%d", Inno.Editor.ImGui.ImGuiSliderFlags flags = Inno.Editor.ImGui.ImGuiSliderFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Controls.cs#L87) | Edits an integer within explicit inclusive bounds. `label`: The visible label and optional stable ID suffix. `value`: The caller-owned value updated only after an accepted edit. `minimum`: The inclusive lower bound or upper-left corner. `maximum`: The inclusive upper bound or lower-right corner. `format`: The numeric display format. `flags`: The explicit control and interaction options. | True when the documented control event or condition is present; otherwise false. | — |
-| [`public static bool Inno.Editor.ImGui.ImGui.DragInt(string label, ref int value, float speed = 1, int minimum = 0, int maximum = 0, string format = "%d", Inno.Editor.ImGui.ImGuiSliderFlags flags = Inno.Editor.ImGui.ImGuiSliderFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Controls.cs#L126) | Edits an integer by pointer drag with explicit speed and optional bounds. `label`: The visible label and optional stable ID suffix. `value`: The caller-owned value updated only after an accepted edit. `speed`: The pointer movement multiplier. `minimum`: The inclusive lower bound or upper-left corner. `maximum`: The inclusive upper bound or lower-right corner. `format`: The numeric display format. `flags`: The explicit control and interaction options. | True when the documented control event or condition is present; otherwise false. | — |
-| [`public static uint Inno.Editor.ImGui.ImGui.GetStyleColor(Inno.Editor.ImGui.ImGuiCol color)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Drawing.cs#L20) | Gets the current style color including the active alpha. `color`: The packed RGBA color or semantic style slot. | A copied value from the active presentation context. | — |
-| [`public static uint Inno.Editor.ImGui.ImGui.GetControlId(string label)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Drawing.cs#L35) | Derives a control identity from the current window and ID stack. `label`: The visible label and optional stable ID suffix. | A copied value from the active presentation context. | — |
-| [`public static void Inno.Editor.ImGui.ImGui.PushClipRect(System.Numerics.Vector2 minimum, System.Numerics.Vector2 maximum, bool intersect)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Drawing.cs#L53) | Clips subsequent controls and drawing to a screen rectangle. `minimum`: The inclusive lower bound or upper-left corner. `maximum`: The inclusive upper bound or lower-right corner. `intersect`: Whether to intersect the enclosing clip. | — | — |
+| [`public static bool Inno.Editor.ImGui.ImGui.InvisibleButton(string label, System.Numerics.Vector2 size, Inno.Editor.ImGui.ImGuiButtonFlags flags = Inno.Editor.ImGui.ImGuiButtonFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Controls.cs#L26) | Submits an explicitly drawn control interaction rectangle. `label`: The visible label and optional stable ID suffix. `size`: The explicit two-dimensional extent. `flags`: The explicit control and interaction options. | True when the documented control event or condition is present; otherwise false. | — |
+| [`public static bool Inno.Editor.ImGui.ImGui.MenuItem(string label, string shortcut = "", bool selected = false, bool enabled = true)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Controls.cs#L53) | Draws a menu item with explicit availability and checked state. `label`: The visible label and optional stable ID suffix. `shortcut`: A display label only; execution remains with the Action router. `selected`: Whether the item is currently selected. `enabled`: Whether the control can accept input. | True when the documented control event or condition is present; otherwise false. | — |
+| [`public static bool Inno.Editor.ImGui.ImGui.SliderInt(string label, ref int value, int minimum, int maximum, string format = "%d", Inno.Editor.ImGui.ImGuiSliderFlags flags = Inno.Editor.ImGui.ImGuiSliderFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Controls.cs#L87) | Edits an integer within explicit inclusive bounds. `label`: The visible label and optional stable ID suffix. `value`: The caller-owned value updated only after an accepted edit. `minimum`: The inclusive lower bound or upper-left corner. `maximum`: The inclusive upper bound or lower-right corner. `format`: The numeric display format. `flags`: The explicit control and interaction options. | True when the documented control event or condition is present; otherwise false. | — |
+| [`public static bool Inno.Editor.ImGui.ImGui.DragInt(string label, ref int value, float speed = 1, int minimum = 0, int maximum = 0, string format = "%d", Inno.Editor.ImGui.ImGuiSliderFlags flags = Inno.Editor.ImGui.ImGuiSliderFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Controls.cs#L126) | Edits an integer by pointer drag with explicit speed and optional bounds. `label`: The visible label and optional stable ID suffix. `value`: The caller-owned value updated only after an accepted edit. `speed`: The pointer movement multiplier. `minimum`: The inclusive lower bound or upper-left corner. `maximum`: The inclusive upper bound or lower-right corner. `format`: The numeric display format. `flags`: The explicit control and interaction options. | True when the documented control event or condition is present; otherwise false. | — |
+| [`public static uint Inno.Editor.ImGui.ImGui.GetStyleColor(Inno.Editor.ImGui.ImGuiCol color)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Drawing.cs#L20) | Gets the current style color including the active alpha. `color`: The packed RGBA color or semantic style slot. | A copied value from the active presentation context. | — |
+| [`public static uint Inno.Editor.ImGui.ImGui.GetControlId(string label)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Drawing.cs#L35) | Derives a control identity from the current window and ID stack. `label`: The visible label and optional stable ID suffix. | A copied value from the active presentation context. | — |
+| [`public static void Inno.Editor.ImGui.ImGui.PushClipRect(System.Numerics.Vector2 minimum, System.Numerics.Vector2 maximum, bool intersect)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Drawing.cs#L53) | Clips subsequent controls and drawing to a screen rectangle. `minimum`: The inclusive lower bound or upper-left corner. `maximum`: The inclusive upper bound or lower-right corner. `intersect`: Whether to intersect the enclosing clip. | — | — |
| [`public static void Inno.Editor.ImGui.ImGui.PopClipRect()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Drawing.cs#L65) | Restores the enclosing control clip after a matching push. | — | — |
| [`public static System.Numerics.Vector2 Inno.Editor.ImGui.ImGui.GetMousePos()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Input.cs#L17) | Gets the current pointer position in screen-space UI units. | A copied value from the active presentation context. | — |
-| [`public static bool Inno.Editor.ImGui.ImGui.IsMouseClicked(Inno.Editor.ImGui.ImGuiMouseButton button, bool repeat = false)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Input.cs#L35) | Checks a pointer-button press in the current frame. `button`: The pointer button to inspect. `repeat`: Whether a held key or button may produce repeats. | True when the documented control event or condition is present; otherwise false. | — |
-| [`public static bool Inno.Editor.ImGui.ImGui.IsMouseReleased(Inno.Editor.ImGui.ImGuiMouseButton button)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Input.cs#L52) | Checks a pointer-button release in the current frame. `button`: The pointer button to inspect. | True when the documented control event or condition is present; otherwise false. | — |
-| [`public static bool Inno.Editor.ImGui.ImGui.IsMouseDoubleClicked(Inno.Editor.ImGui.ImGuiMouseButton button)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Input.cs#L67) | Checks the backend-classified double-click event. `button`: The pointer button to inspect. | True when the documented control event or condition is present; otherwise false. | — |
-| [`public static bool Inno.Editor.ImGui.ImGui.IsKeyDown(Inno.Editor.ImGui.ImGuiKey key)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Input.cs#L82) | Checks whether a presentation key remains held. `key`: The presentation key to inspect. | True when the documented control event or condition is present; otherwise false. | — |
-| [`public static bool Inno.Editor.ImGui.ImGui.IsKeyPressed(Inno.Editor.ImGui.ImGuiKey key, bool repeat = true)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Input.cs#L100) | Checks a presentation-key press with explicit repeat policy. `key`: The presentation key to inspect. `repeat`: Whether a held key or button may produce repeats. | True when the documented control event or condition is present; otherwise false. | — |
-| [`public static void Inno.Editor.ImGui.ImGui.ResetMouseDragDelta(Inno.Editor.ImGui.ImGuiMouseButton button)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Input.cs#L114) | Resets the consumed pointer-drag distance. `button`: The pointer button to inspect. | — | — |
-| [`public static void Inno.Editor.ImGui.ImGui.SetMouseCursor(Inno.Editor.ImGui.ImGuiMouseCursor cursor)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Input.cs#L126) | Requests the semantic cursor for the hovered control. `cursor`: The semantic pointer shape. | — | — |
-| [`public static bool Inno.Editor.ImGui.ImGui.IsMouseHoveringRect(System.Numerics.Vector2 minimum, System.Numerics.Vector2 maximum, bool clip = true)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Input.cs#L147) | Checks pointer containment in a screen rectangle with optional window clipping. `minimum`: The inclusive lower bound or upper-left corner. `maximum`: The inclusive upper bound or lower-right corner. `clip`: Whether the current clipping rectangle participates. | True when the documented control event or condition is present; otherwise false. | — |
-| [`public static bool Inno.Editor.ImGui.ImGui.IsWindowHovered(Inno.Editor.ImGui.ImGuiHoveredFlags flags = Inno.Editor.ImGui.ImGuiHoveredFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Input.cs#L165) | Checks window hover under the declared interaction policy. `flags`: The explicit control and interaction options. | True when the documented control event or condition is present; otherwise false. | — |
-| [`public static bool Inno.Editor.ImGui.ImGui.IsWindowFocused(Inno.Editor.ImGui.ImGuiFocusedFlags flags = Inno.Editor.ImGui.ImGuiFocusedFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Input.cs#L180) | Checks keyboard focus within the declared window scope. `flags`: The explicit control and interaction options. | True when the documented control event or condition is present; otherwise false. | — |
+| [`public static bool Inno.Editor.ImGui.ImGui.IsMouseClicked(Inno.Editor.ImGui.ImGuiMouseButton button, bool repeat = false)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Input.cs#L35) | Checks a pointer-button press in the current frame. `button`: The pointer button to inspect. `repeat`: Whether a held key or button may produce repeats. | True when the documented control event or condition is present; otherwise false. | — |
+| [`public static bool Inno.Editor.ImGui.ImGui.IsMouseReleased(Inno.Editor.ImGui.ImGuiMouseButton button)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Input.cs#L52) | Checks a pointer-button release in the current frame. `button`: The pointer button to inspect. | True when the documented control event or condition is present; otherwise false. | — |
+| [`public static bool Inno.Editor.ImGui.ImGui.IsMouseDoubleClicked(Inno.Editor.ImGui.ImGuiMouseButton button)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Input.cs#L67) | Checks the backend-classified double-click event. `button`: The pointer button to inspect. | True when the documented control event or condition is present; otherwise false. | — |
+| [`public static bool Inno.Editor.ImGui.ImGui.IsKeyDown(Inno.Editor.ImGui.ImGuiKey key)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Input.cs#L82) | Checks whether a presentation key remains held. `key`: The presentation key to inspect. | True when the documented control event or condition is present; otherwise false. | — |
+| [`public static bool Inno.Editor.ImGui.ImGui.IsKeyPressed(Inno.Editor.ImGui.ImGuiKey key, bool repeat = true)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Input.cs#L100) | Checks a presentation-key press with explicit repeat policy. `key`: The presentation key to inspect. `repeat`: Whether a held key or button may produce repeats. | True when the documented control event or condition is present; otherwise false. | — |
+| [`public static void Inno.Editor.ImGui.ImGui.ResetMouseDragDelta(Inno.Editor.ImGui.ImGuiMouseButton button)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Input.cs#L114) | Resets the consumed pointer-drag distance. `button`: The pointer button to inspect. | — | — |
+| [`public static void Inno.Editor.ImGui.ImGui.SetMouseCursor(Inno.Editor.ImGui.ImGuiMouseCursor cursor)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Input.cs#L126) | Requests the semantic cursor for the hovered control. `cursor`: The semantic pointer shape. | — | — |
+| [`public static bool Inno.Editor.ImGui.ImGui.IsMouseHoveringRect(System.Numerics.Vector2 minimum, System.Numerics.Vector2 maximum, bool clip = true)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Input.cs#L147) | Checks pointer containment in a screen rectangle with optional window clipping. `minimum`: The inclusive lower bound or upper-left corner. `maximum`: The inclusive upper bound or lower-right corner. `clip`: Whether the current clipping rectangle participates. | True when the documented control event or condition is present; otherwise false. | — |
+| [`public static bool Inno.Editor.ImGui.ImGui.IsWindowHovered(Inno.Editor.ImGui.ImGuiHoveredFlags flags = Inno.Editor.ImGui.ImGuiHoveredFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Input.cs#L165) | Checks window hover under the declared interaction policy. `flags`: The explicit control and interaction options. | True when the documented control event or condition is present; otherwise false. | — |
+| [`public static bool Inno.Editor.ImGui.ImGui.IsWindowFocused(Inno.Editor.ImGui.ImGuiFocusedFlags flags = Inno.Editor.ImGui.ImGuiFocusedFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Input.cs#L180) | Checks keyboard focus within the declared window scope. `flags`: The explicit control and interaction options. | True when the documented control event or condition is present; otherwise false. | — |
| [`public static bool Inno.Editor.ImGui.ImGui.IsAnyItemHovered()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Input.cs#L192) | Checks whether a submitted control currently owns hover. | True when the documented control event or condition is present; otherwise false. | — |
| [`public static bool Inno.Editor.ImGui.ImGui.IsAnyItemActive()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Input.cs#L204) | Checks whether a submitted control owns an active interaction. | True when the documented control event or condition is present; otherwise false. | — |
| [`public static bool Inno.Editor.ImGui.ImGui.IsItemActivated()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Input.cs#L216) | Checks the first frame of the last control interaction. | True when the documented control event or condition is present; otherwise false. | — |
| [`public static bool Inno.Editor.ImGui.ImGui.IsItemDeactivatedAfterEdit()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Input.cs#L228) | Checks the completion frame of an edited control. | True when the documented control event or condition is present; otherwise false. | — |
-| [`public static void Inno.Editor.ImGui.ImGui.SetKeyboardFocusHere(int offset = 0)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Input.cs#L240) | Requests focus for a relative control position. `offset`: The relative focus offset from the next submitted control. | — | — |
+| [`public static void Inno.Editor.ImGui.ImGui.SetKeyboardFocusHere(int offset = 0)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Input.cs#L240) | Requests focus for a relative control position. `offset`: The relative focus offset from the next submitted control. | — | — |
| [`public static void Inno.Editor.ImGui.ImGui.SetItemDefaultFocus()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Input.cs#L249) | Chooses the last item as the default selection in an appearing popup. | — | — |
-| [`public static void Inno.Editor.ImGui.ImGui.SetClipboardText(string text)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Input.cs#L261) | Copies literal text through the host clipboard adapter. `text`: Literal text; no formatting interpretation is applied. | — | — |
+| [`public static void Inno.Editor.ImGui.ImGui.SetClipboardText(string text)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Input.cs#L261) | Copies literal text through the host clipboard adapter. `text`: Literal text; no formatting interpretation is applied. | — | — |
| [`public static int Inno.Editor.ImGui.ImGui.GetFrameCount()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Input.cs#L273) | Gets the current native frame identity for transient diagnostics. | A copied value from the active presentation context. | — |
-| [`public static void Inno.Editor.ImGui.ImGui.SetCursorScreenPosition(System.Numerics.Vector2 position)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Layout.cs#L17) | Places the next control at a screen-space location. `position`: The requested coordinate in UI units. | — | — |
-| [`public static void Inno.Editor.ImGui.ImGui.SetCursorPosX(float position)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Layout.cs#L29) | Changes only the local horizontal layout cursor. `position`: The requested coordinate in UI units. | — | — |
-| [`public static void Inno.Editor.ImGui.ImGui.SetCursorPosY(float position)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Layout.cs#L41) | Changes only the local vertical layout cursor. `position`: The requested coordinate in UI units. | — | — |
+| [`public static void Inno.Editor.ImGui.ImGui.SetCursorScreenPosition(System.Numerics.Vector2 position)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Layout.cs#L17) | Places the next control at a screen-space location. `position`: The requested coordinate in UI units. | — | — |
+| [`public static void Inno.Editor.ImGui.ImGui.SetCursorPosX(float position)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Layout.cs#L29) | Changes only the local horizontal layout cursor. `position`: The requested coordinate in UI units. | — | — |
+| [`public static void Inno.Editor.ImGui.ImGui.SetCursorPosY(float position)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Layout.cs#L41) | Changes only the local vertical layout cursor. `position`: The requested coordinate in UI units. | — | — |
| [`public static float Inno.Editor.ImGui.ImGui.GetCursorPosX()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Layout.cs#L53) | Gets the local horizontal layout cursor. | A copied value from the active presentation context. | — |
| [`public static float Inno.Editor.ImGui.ImGui.GetCursorPosY()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Layout.cs#L65) | Gets the local vertical layout cursor. | A copied value from the active presentation context. | — |
| [`public static System.Numerics.Vector2 Inno.Editor.ImGui.ImGui.GetWindowPos()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Layout.cs#L77) | Gets the current window screen-space origin. | A copied value from the active presentation context. | — |
@@ -1500,100 +1558,101 @@ static void DrawHelp()
| [`public static float Inno.Editor.ImGui.ImGui.GetWindowDpiScale()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Layout.cs#L149) | Gets the native viewport scale for the current window. | A copied value from the active presentation context. | — |
| [`public static void Inno.Editor.ImGui.ImGui.AlignTextToFramePadding()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Layout.cs#L158) | Aligns the next text baseline with framed controls. | — | — |
| [`public static void Inno.Editor.ImGui.ImGui.SetNextItemAllowOverlap()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Layout.cs#L167) | Allows explicitly layered controls to share the next item bounds. | — | — |
-| [`public static void Inno.Editor.ImGui.ImGui.SetNextWindowSize(System.Numerics.Vector2 size, Inno.Editor.ImGui.ImGuiCond condition = Inno.Editor.ImGui.ImGuiCond.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Layout.cs#L182) | Requests a size for the next window under an explicit layout condition. `size`: The explicit two-dimensional extent. `condition`: The condition controlling when the request is applied. | — | — |
-| [`public static void Inno.Editor.ImGui.ImGui.SetNextWindowContentSize(System.Numerics.Vector2 size)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Layout.cs#L196) | Declares virtual content size for the next scrollable window. `size`: The explicit two-dimensional extent. | — | — |
-| [`public static void Inno.Editor.ImGui.ImGui.Indent(float amount = 0)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Layout.cs#L208) | Indents subsequent controls by an explicit amount or the standard step. `amount`: The requested layout distance. | — | — |
-| [`public static void Inno.Editor.ImGui.ImGui.Unindent(float amount = 0)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Layout.cs#L220) | Restores a matching indentation step. `amount`: The requested layout distance. | — | — |
-| [`public static void Inno.Editor.ImGui.ImGui.PushTextWrapPos(float position = 0)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Layout.cs#L232) | Restricts subsequent text wrapping to a local horizontal boundary. `position`: The requested coordinate in UI units. | — | — |
+| [`public static void Inno.Editor.ImGui.ImGui.SetNextWindowSize(System.Numerics.Vector2 size, Inno.Editor.ImGui.ImGuiCond condition = Inno.Editor.ImGui.ImGuiCond.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Layout.cs#L182) | Requests a size for the next window under an explicit layout condition. `size`: The explicit two-dimensional extent. `condition`: The condition controlling when the request is applied. | — | — |
+| [`public static void Inno.Editor.ImGui.ImGui.SetNextWindowContentSize(System.Numerics.Vector2 size)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Layout.cs#L196) | Declares virtual content size for the next scrollable window. `size`: The explicit two-dimensional extent. | — | — |
+| [`public static void Inno.Editor.ImGui.ImGui.Indent(float amount = 0)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Layout.cs#L208) | Indents subsequent controls by an explicit amount or the standard step. `amount`: The requested layout distance. | — | — |
+| [`public static void Inno.Editor.ImGui.ImGui.Unindent(float amount = 0)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Layout.cs#L220) | Restores a matching indentation step. `amount`: The requested layout distance. | — | — |
+| [`public static void Inno.Editor.ImGui.ImGui.PushTextWrapPos(float position = 0)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Layout.cs#L232) | Restricts subsequent text wrapping to a local horizontal boundary. `position`: The requested coordinate in UI units. | — | — |
| [`public static void Inno.Editor.ImGui.ImGui.PopTextWrapPos()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Layout.cs#L241) | Restores the enclosing text-wrap boundary. | — | — |
| [`public static float Inno.Editor.ImGui.ImGui.GetScrollY()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Layout.cs#L253) | Gets the current vertical scroll position. | A copied value from the active presentation context. | — |
| [`public static float Inno.Editor.ImGui.ImGui.GetScrollMaxY()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Layout.cs#L265) | Gets the current vertical scroll range. | A copied value from the active presentation context. | — |
-| [`public static void Inno.Editor.ImGui.ImGui.SetScrollHereY(float ratio = 0.5)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Layout.cs#L277) | Scrolls the most recently submitted control into the requested relative position. `ratio`: The relative alignment from zero through one. | — | — |
-| [`public static bool Inno.Editor.ImGui.ImGui.TableSetColumnIndex(int index)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Tables.cs#L20) | Selects a declared table column for subsequent controls. `index`: The zero-based item index. | True when the documented control event or condition is present; otherwise false. | — |
-| [`public static void Inno.Editor.ImGui.ImGui.TableSetBgColor(Inno.Editor.ImGui.ImGuiTableBgTarget target, uint color, int column = -1)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Tables.cs#L38) | Sets a table row or cell background through the current table scope. `target`: The table background role. `color`: The packed RGBA color or semantic style slot. `column`: The target column, or -1 for the current row. | — | — |
+| [`public static void Inno.Editor.ImGui.ImGui.SetScrollHereY(float ratio = 0.5)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Layout.cs#L277) | Scrolls the most recently submitted control into the requested relative position. `ratio`: The relative alignment from zero through one. | — | — |
+| [`public static bool Inno.Editor.ImGui.ImGui.TableSetColumnIndex(int index)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Tables.cs#L20) | Selects a declared table column for subsequent controls. `index`: The zero-based item index. | True when the documented control event or condition is present; otherwise false. | — |
+| [`public static void Inno.Editor.ImGui.ImGui.TableSetBgColor(Inno.Editor.ImGui.ImGuiTableBgTarget target, uint color, int column = -1)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/ImGui.Tables.cs#L38) | Sets a table row or cell background through the current table scope. `target`: The table background role. `color`: The packed RGBA color or semantic style slot. `column`: The target column, or -1 for the current row. | — | — |
| [`public static Inno.Editor.ImGui.EditorUiLayout Inno.Editor.ImGui.ImGui.GetLayout()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Drawing/ImGui.Drawing.cs#L16) | Copies the current UI layout metrics. | Value metrics valid independently from the native style pointer. | — |
| [`public static Inno.Editor.ImGui.EditorUiInput Inno.Editor.ImGui.ImGui.GetInput()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Drawing/ImGui.Drawing.cs#L28) | Copies the input facts for this frame. | A neutral value snapshot; no pointer or callback is retained. | — |
-| [`public static System.Numerics.Vector4 Inno.Editor.ImGui.ImGui.GetStyleColorValue(Inno.Editor.ImGui.ImGuiCol color)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Drawing/ImGui.Drawing.cs#L43) | Copies an unmodulated style color for compound presentation. `color`: The semantic style color slot. | The copied linear vector of UI color components. | — |
+| [`public static System.Numerics.Vector4 Inno.Editor.ImGui.ImGui.GetStyleColorValue(Inno.Editor.ImGui.ImGuiCol color)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Drawing/ImGui.Drawing.cs#L43) | Copies an unmodulated style color for compound presentation. `color`: The semantic style color slot. | The copied linear vector of UI color components. | — |
| [`public static (uint id, System.Numerics.Vector2 position) Inno.Editor.ImGui.ImGui.GetViewport()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Drawing/ImGui.Drawing.cs#L55) | Gets the logical viewport identity and copied position for the current window. | The viewport ID and its screen-space origin. | — |
| [`public static (float minimumX, float maximumX, float rowMinimum, float rowMaximum) Inno.Editor.ImGui.ImGui.GetTableBounds()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Drawing/ImGui.Drawing.cs#L71) | Gets the table and current row bounds needed by row overlays. | The table's horizontal bounds and current row's vertical bounds. | `System.InvalidOperationException`: No valid drawing frame or active table exists. |
| [`public static (float minimumX, float maximumX, System.Numerics.Vector2 workMaximum, System.Numerics.Vector2 padding) Inno.Editor.ImGui.ImGui.GetWindowBounds()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Drawing/ImGui.Drawing.cs#L89) | Gets copied inner and work bounds for the current window. | Screen-space horizontal bounds and work maximum. | `System.InvalidOperationException`: No valid drawing session or native frame is active. |
| [`public static (System.Numerics.Vector2 minimum, System.Numerics.Vector2 maximum) Inno.Editor.ImGui.ImGui.GetClipBounds()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Drawing/ImGui.Drawing.cs#L105) | Copies the current window's effective clip after parent and viewport clipping. | Screen-space minimum and maximum values for bounding frame-local submission work. | `System.InvalidOperationException`: No valid drawing session or native frame is active. |
| [`public static Inno.Editor.ImGui.EditorDrawList Inno.Editor.ImGui.ImGui.GetDrawList()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Drawing/ImGui.Drawing.cs#L118) | Borrows drawing commands for the current window and frame without exposing native memory. | A value that rejects use after a window, frame, context or session change. | — |
-| [`public static bool Inno.Editor.ImGui.ImGui.HasDragPayload(string protocol)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Drawing/ImGui.Drawing.cs#L128) | Checks the active payload's logical protocol without exposing its native buffer. `protocol`: The exact drag protocol name. | True when a drag of that protocol is currently active. | — |
-| [`public static System.Numerics.Vector2 Inno.Editor.ImGui.ImGui.MeasureText(string text, float scale)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Drawing/ImGui.Drawing.cs#L150) | Measures literal text at a relative font scale. `text`: The literal text to measure. `scale`: Scale relative to the current font. | The copied width and height in UI pixels. | — |
-| [`public static void Inno.Editor.ImGui.ImGui.Text(string text)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L20) | Draws unformatted text. `text`: Literal text to draw; percent characters are displayed without format-string interpretation. | — | — |
-| [`public static bool Inno.Editor.ImGui.ImGui.Button(string label, System.Numerics.Vector2 size = default(System.Numerics.Vector2))`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L38) | Draws a standard button. `label`: The visible label and optional ImGui identity suffix. `size`: The requested size, or zero components for automatic sizing. | when the button is activated. | — |
-| [`public static bool Inno.Editor.ImGui.ImGui.SmallButton(string label)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L55) | Draws a compact button. `label`: The visible label and optional ImGui identity suffix. | when the button is activated. | — |
-| [`public static bool Inno.Editor.ImGui.ImGui.Checkbox(string label, ref bool value)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L73) | Draws and edits a Boolean value. `label`: The control label. `value`: The checked state, updated when the user toggles the control. | when the value changes. | — |
-| [`public static bool Inno.Editor.ImGui.ImGui.InputText(string label, ref string value, int capacity = 1024, Inno.Editor.ImGui.ImGuiInputTextFlags flags = Inno.Editor.ImGui.ImGuiInputTextFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L102) | Draws and edits a bounded UTF-8 text value. `label`: The control label. `value`: The managed string to display and update. `capacity`: The positive maximum UTF-8 buffer capacity, including the terminator. `flags`: Text editing behavior. | when the control reports an edit or submit event. | `System.ArgumentOutOfRangeException`: Thrown when is not positive. |
-| [`public static bool Inno.Editor.ImGui.ImGui.InputTextWithHint(string label, string hint, ref string value, int capacity = 1024, Inno.Editor.ImGui.ImGuiInputTextFlags flags = Inno.Editor.ImGui.ImGuiInputTextFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L136) | Draws and edits a bounded UTF-8 text value with placeholder text. `label`: The control label. `hint`: The placeholder shown while the value is empty. `value`: The managed string to display and update. `capacity`: The positive maximum UTF-8 buffer capacity, including the terminator. `flags`: Text editing behavior. | when the control reports an edit or submit event. | `System.ArgumentOutOfRangeException`: Thrown when is not positive. |
-| [`public static bool Inno.Editor.ImGui.ImGui.InputInt(string label, ref int value, int step = 1, int fastStep = 100, Inno.Editor.ImGui.ImGuiInputTextFlags flags = Inno.Editor.ImGui.ImGuiInputTextFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L168) | Draws and edits an integer value. `label`: The control label. `value`: The integer displayed by the control and replaced after an accepted edit. `step`: Increment used by the ordinary step button. `fastStep`: Increment used by the accelerated step button. `flags`: Text editing options for the numeric field. | when the value changes. | — |
-| [`public static bool Inno.Editor.ImGui.ImGui.InputFloat(string label, ref float value)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L191) | Draws and edits a floating-point value. `label`: The control label. `value`: The number displayed with three fractional digits and replaced after an accepted edit. | when the value changes. | — |
-| [`public static bool Inno.Editor.ImGui.ImGui.DragFloat(string label, ref float value, float speed = 1, float minimum = 0, float maximum = 0)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L220) | Draws a floating-point drag control. `label`: The control label. `value`: The value to display and update. `speed`: The drag speed. `minimum`: The inclusive minimum, or zero with a zero maximum for no clamping. `maximum`: The inclusive maximum, or zero with a zero minimum for no clamping. | when the value changes. | — |
-| [`public static bool Inno.Editor.ImGui.ImGui.SliderFloat(string label, ref float value, float minimum, float maximum, Inno.Editor.ImGui.ImGuiSliderFlags flags = Inno.Editor.ImGui.ImGuiSliderFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L252) | Draws a bounded floating-point slider. `label`: The control label. `value`: The value to display and update. `minimum`: The inclusive minimum. `maximum`: The inclusive maximum. `flags`: Slider behavior. | when the value changes. | — |
-| [`public static bool Inno.Editor.ImGui.ImGui.ColorEdit4(string label, ref System.Numerics.Vector4 value, Inno.Editor.ImGui.ImGuiColorEditFlags flags = Inno.Editor.ImGui.ImGuiColorEditFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L278) | Draws and edits a four-component color. `label`: The control label. `value`: The RGBA value to display and update. `flags`: Color editing behavior. | when the value changes. | — |
-| [`public static bool Inno.Editor.ImGui.ImGui.ColorEditLinear4(string label, ref System.Numerics.Vector4 value, Inno.Editor.ImGui.ImGuiColorEditFlags flags = Inno.Editor.ImGui.ImGuiColorEditFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L308) | Displays a linear RGBA color through a display-sRGB picker and returns edits in linear space. `label`: The stable identity and visible label of the color control. `value`: Linear RGB and alpha; only changed RGB channels are decoded, while alpha is never transfer-encoded. `flags`: Dear ImGui color-edit flags; display modes interpret sRGB values and input storage must be RGB. | True if the display color changed and contains decoded linear RGB. | `System.ArgumentException`: HSV input storage conflicts with the linear-RGB value contract. |
-| [`public static bool Inno.Editor.ImGui.ImGui.BeginChild(string id, System.Numerics.Vector2 size = default(System.Numerics.Vector2), Inno.Editor.ImGui.ImGuiChildFlags flags = Inno.Editor.ImGui.ImGuiChildFlags.None, Inno.Editor.ImGui.ImGuiWindowFlags windowFlags = Inno.Editor.ImGui.ImGuiWindowFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L346) | Begins a child region. `id`: The child identity. `size`: The requested child size. `flags`: Child-region behavior. `windowFlags`: Scroll and window policies for the child. | when child contents should be submitted. | — |
+| [`public static bool Inno.Editor.ImGui.ImGui.HasDragPayload(string protocol)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Drawing/ImGui.Drawing.cs#L128) | Checks the active payload's logical protocol without exposing its native buffer. `protocol`: The exact drag protocol name. | True when a drag of that protocol is currently active. | — |
+| [`public static System.Numerics.Vector2 Inno.Editor.ImGui.ImGui.MeasureText(string text, float scale)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Drawing/ImGui.Drawing.cs#L150) | Measures literal text at a relative font scale. `text`: The literal text to measure. `scale`: Scale relative to the current font. | The copied width and height in UI pixels. | — |
+| [`public static void Inno.Editor.ImGui.ImGui.Text(string text)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L20) | Draws unformatted text. `text`: Literal text to draw; percent characters are displayed without format-string interpretation. | — | — |
+| [`public static bool Inno.Editor.ImGui.ImGui.Button(string label, System.Numerics.Vector2 size = default(System.Numerics.Vector2))`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L38) | Draws a standard button. `label`: The visible label and optional ImGui identity suffix. `size`: The requested size, or zero components for automatic sizing. | true when the button is activated. | — |
+| [`public static bool Inno.Editor.ImGui.ImGui.SmallButton(string label)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L55) | Draws a compact button. `label`: The visible label and optional ImGui identity suffix. | true when the button is activated. | — |
+| [`public static bool Inno.Editor.ImGui.ImGui.Checkbox(string label, ref bool value)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L73) | Draws and edits a Boolean value. `label`: The control label. `value`: The checked state, updated when the user toggles the control. | true when the value changes. | — |
+| [`public static bool Inno.Editor.ImGui.ImGui.InputText(string label, ref string value, int capacity = 1024, Inno.Editor.ImGui.ImGuiInputTextFlags flags = Inno.Editor.ImGui.ImGuiInputTextFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L102) | Draws and edits a bounded UTF-8 text value. `label`: The control label. `value`: The managed string to display and update. `capacity`: The positive maximum UTF-8 buffer capacity, including the terminator. `flags`: Text editing behavior. | true when the control reports an edit or submit event. | `System.ArgumentOutOfRangeException`: Thrown when capacity is not positive. |
+| [`public static bool Inno.Editor.ImGui.ImGui.InputTextWithHint(string label, string hint, ref string value, int capacity = 1024, Inno.Editor.ImGui.ImGuiInputTextFlags flags = Inno.Editor.ImGui.ImGuiInputTextFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L136) | Draws and edits a bounded UTF-8 text value with placeholder text. `label`: The control label. `hint`: The placeholder shown while the value is empty. `value`: The managed string to display and update. `capacity`: The positive maximum UTF-8 buffer capacity, including the terminator. `flags`: Text editing behavior. | true when the control reports an edit or submit event. | `System.ArgumentOutOfRangeException`: Thrown when capacity is not positive. |
+| [`public static bool Inno.Editor.ImGui.ImGui.InputInt(string label, ref int value, int step = 1, int fastStep = 100, Inno.Editor.ImGui.ImGuiInputTextFlags flags = Inno.Editor.ImGui.ImGuiInputTextFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L168) | Draws and edits an integer value. `label`: The control label. `value`: The integer displayed by the control and replaced after an accepted edit. `step`: Increment used by the ordinary step button. `fastStep`: Increment used by the accelerated step button. `flags`: Text editing options for the numeric field. | true when the value changes. | — |
+| [`public static bool Inno.Editor.ImGui.ImGui.InputFloat(string label, ref float value)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L191) | Draws and edits a floating-point value. `label`: The control label. `value`: The number displayed with three fractional digits and replaced after an accepted edit. | true when the value changes. | — |
+| [`public static bool Inno.Editor.ImGui.ImGui.DragFloat(string label, ref float value, float speed = 1, float minimum = 0, float maximum = 0)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L220) | Draws a floating-point drag control. `label`: The control label. `value`: The value to display and update. `speed`: The drag speed. `minimum`: The inclusive minimum, or zero with a zero maximum for no clamping. `maximum`: The inclusive maximum, or zero with a zero minimum for no clamping. | true when the value changes. | — |
+| [`public static bool Inno.Editor.ImGui.ImGui.SliderFloat(string label, ref float value, float minimum, float maximum, Inno.Editor.ImGui.ImGuiSliderFlags flags = Inno.Editor.ImGui.ImGuiSliderFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L252) | Draws a bounded floating-point slider. `label`: The control label. `value`: The value to display and update. `minimum`: The inclusive minimum. `maximum`: The inclusive maximum. `flags`: Slider behavior. | true when the value changes. | — |
+| [`public static bool Inno.Editor.ImGui.ImGui.ColorEdit4(string label, ref System.Numerics.Vector4 value, Inno.Editor.ImGui.ImGuiColorEditFlags flags = Inno.Editor.ImGui.ImGuiColorEditFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L278) | Draws and edits a four-component color. `label`: The control label. `value`: The RGBA value to display and update. `flags`: Color editing behavior. | true when the value changes. | — |
+| [`public static bool Inno.Editor.ImGui.ImGui.ColorEditLinear4(string label, ref System.Numerics.Vector4 value, Inno.Editor.ImGui.ImGuiColorEditFlags flags = Inno.Editor.ImGui.ImGuiColorEditFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L308) | Displays a linear RGBA color through a display-sRGB picker and returns edits in linear space. `label`: The stable identity and visible label of the color control. `value`: Linear RGB and alpha; only changed RGB channels are decoded, while alpha is never transfer-encoded. `flags`: Dear ImGui color-edit flags; display modes interpret sRGB values and input storage must be RGB. | True if the display color changed and value contains decoded linear RGB. | `System.ArgumentException`: HSV input storage conflicts with the linear-RGB value contract. |
+| [`public static bool Inno.Editor.ImGui.ImGui.BeginChild(string id, System.Numerics.Vector2 size = default(System.Numerics.Vector2), Inno.Editor.ImGui.ImGuiChildFlags flags = Inno.Editor.ImGui.ImGuiChildFlags.None, Inno.Editor.ImGui.ImGuiWindowFlags windowFlags = Inno.Editor.ImGui.ImGuiWindowFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L346) | Begins a child region. `id`: The child identity. `size`: The requested child size. `flags`: Child-region behavior. `windowFlags`: Scroll and window policies for the child. | true when child contents should be submitted. | — |
| [`public static void Inno.Editor.ImGui.ImGui.EndChild()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L359) | Ends the current child region. | — | — |
-| [`public static bool Inno.Editor.ImGui.ImGui.BeginTable(string id, int columns, Inno.Editor.ImGui.ImGuiTableFlags flags = Inno.Editor.ImGui.ImGuiTableFlags.None, System.Numerics.Vector2 size = default(System.Numerics.Vector2), float innerWidth = 0)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L386) | Begins a table. `id`: The table identity. `columns`: The positive column count. `flags`: Table behavior. `size`: The requested outer size. `innerWidth`: Optional inner scrolling width; zero uses the outer size. | when table contents should be submitted. | — |
+| [`public static bool Inno.Editor.ImGui.ImGui.BeginTable(string id, int columns, Inno.Editor.ImGui.ImGuiTableFlags flags = Inno.Editor.ImGui.ImGuiTableFlags.None, System.Numerics.Vector2 size = default(System.Numerics.Vector2), float innerWidth = 0)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L386) | Begins a table. `id`: The table identity. `columns`: The positive column count. `flags`: Table behavior. `size`: The requested outer size. `innerWidth`: Optional inner scrolling width; zero uses the outer size. | true when table contents should be submitted. | — |
| [`public static void Inno.Editor.ImGui.ImGui.EndTable()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L400) | Ends the current table. | — | — |
-| [`public static void Inno.Editor.ImGui.ImGui.TableSetupColumn(string label, Inno.Editor.ImGui.ImGuiTableColumnFlags flags = Inno.Editor.ImGui.ImGuiTableColumnFlags.None, float widthOrWeight = 0)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L418) | Declares one table column. `label`: The column label. `flags`: Column behavior. `widthOrWeight`: The initial fixed width or stretch weight. | — | — |
+| [`public static void Inno.Editor.ImGui.ImGui.TableSetupColumn(string label, Inno.Editor.ImGui.ImGuiTableColumnFlags flags = Inno.Editor.ImGui.ImGuiTableColumnFlags.None, float widthOrWeight = 0)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L418) | Declares one table column. `label`: The column label. `flags`: Column behavior. `widthOrWeight`: The initial fixed width or stretch weight. | — | — |
| [`public static void Inno.Editor.ImGui.ImGui.TableHeadersRow()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L430) | Draws the table header row from configured column labels. | — | — |
-| [`public static void Inno.Editor.ImGui.ImGui.TableNextRow(Inno.Editor.ImGui.ImGuiTableRowFlags flags = Inno.Editor.ImGui.ImGuiTableRowFlags.None, float minimumHeight = 0)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L445) | Advances to the next table row. `flags`: Row presentation flags. `minimumHeight`: Minimum row height in UI pixels. | — | — |
-| [`public static bool Inno.Editor.ImGui.ImGui.TableNextColumn()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L459) | Advances to the next table column. | when the column is visible. | — |
-| [`public static bool Inno.Editor.ImGui.ImGui.BeginCombo(string label, string preview, Inno.Editor.ImGui.ImGuiComboFlags flags = Inno.Editor.ImGui.ImGuiComboFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L480) | Begins a combo popup. `label`: The control label. `preview`: The preview text. `flags`: Combo behavior. | when combo contents should be submitted. | — |
+| [`public static void Inno.Editor.ImGui.ImGui.TableNextRow(Inno.Editor.ImGui.ImGuiTableRowFlags flags = Inno.Editor.ImGui.ImGuiTableRowFlags.None, float minimumHeight = 0)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L445) | Advances to the next table row. `flags`: Row presentation flags. `minimumHeight`: Minimum row height in UI pixels. | — | — |
+| [`public static bool Inno.Editor.ImGui.ImGui.TableNextColumn()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L459) | Advances to the next table column. | true when the column is visible. | — |
+| [`public static bool Inno.Editor.ImGui.ImGui.BeginCombo(string label, string preview, Inno.Editor.ImGui.ImGuiComboFlags flags = Inno.Editor.ImGui.ImGuiComboFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L480) | Begins a combo popup. `label`: The control label. `preview`: The preview text. `flags`: Combo behavior. | true when combo contents should be submitted. | — |
| [`public static void Inno.Editor.ImGui.ImGui.EndCombo()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L492) | Ends the current combo popup. | — | — |
-| [`public static bool Inno.Editor.ImGui.ImGui.Selectable(string label, bool selected = false, Inno.Editor.ImGui.ImGuiSelectableFlags flags = Inno.Editor.ImGui.ImGuiSelectableFlags.None, System.Numerics.Vector2 size = default(System.Numerics.Vector2))`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L516) | Draws one selectable item. `label`: The visible label and identity. `selected`: Whether the item is currently selected. `flags`: Selectable behavior. `size`: The interaction bounds, or zero for the ordinary content size. | when the item is activated. | — |
-| [`public static bool Inno.Editor.ImGui.ImGui.CollapsingHeader(string label, Inno.Editor.ImGui.ImGuiTreeNodeFlags flags = Inno.Editor.ImGui.ImGuiTreeNodeFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L538) | Draws a collapsible section header. `label`: The visible label and identity. `flags`: Tree-node behavior. | when the section is open. | — |
-| [`public static bool Inno.Editor.ImGui.ImGui.TreeNode(string label, Inno.Editor.ImGui.ImGuiTreeNodeFlags flags = Inno.Editor.ImGui.ImGuiTreeNodeFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L558) | Draws a tree node and pushes its tree scope when it is open. `label`: The visible label and identity. `flags`: Tree-node behavior. | when child contents should be submitted. | — |
+| [`public static bool Inno.Editor.ImGui.ImGui.Selectable(string label, bool selected = false, Inno.Editor.ImGui.ImGuiSelectableFlags flags = Inno.Editor.ImGui.ImGuiSelectableFlags.None, System.Numerics.Vector2 size = default(System.Numerics.Vector2))`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L516) | Draws one selectable item. `label`: The visible label and identity. `selected`: Whether the item is currently selected. `flags`: Selectable behavior. `size`: The interaction bounds, or zero for the ordinary content size. | true when the item is activated. | — |
+| [`public static bool Inno.Editor.ImGui.ImGui.CollapsingHeader(string label, Inno.Editor.ImGui.ImGuiTreeNodeFlags flags = Inno.Editor.ImGui.ImGuiTreeNodeFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L538) | Draws a collapsible section header. `label`: The visible label and identity. `flags`: Tree-node behavior. | true when the section is open. | — |
+| [`public static bool Inno.Editor.ImGui.ImGui.TreeNode(string label, Inno.Editor.ImGui.ImGuiTreeNodeFlags flags = Inno.Editor.ImGui.ImGuiTreeNodeFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L558) | Draws a tree node and pushes its tree scope when it is open. `label`: The visible label and identity. `flags`: Tree-node behavior. | true when child contents should be submitted. | — |
| [`public static void Inno.Editor.ImGui.ImGui.TreePop()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L569) | Ends the current open tree-node scope. | — | — |
-| [`public static bool Inno.Editor.ImGui.ImGui.BeginTabBar(string id, Inno.Editor.ImGui.ImGuiTabBarFlags flags = Inno.Editor.ImGui.ImGuiTabBarFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L587) | Begins a tab bar. `id`: The tab bar identity. `flags`: Tab-bar behavior. | when tab contents should be submitted. | — |
+| [`public static bool Inno.Editor.ImGui.ImGui.BeginTabBar(string id, Inno.Editor.ImGui.ImGuiTabBarFlags flags = Inno.Editor.ImGui.ImGuiTabBarFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L587) | Begins a tab bar. `id`: The tab bar identity. `flags`: Tab-bar behavior. | true when tab contents should be submitted. | — |
| [`public static void Inno.Editor.ImGui.ImGui.EndTabBar()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L598) | Ends the current tab bar. | — | — |
-| [`public static bool Inno.Editor.ImGui.ImGui.BeginTabItem(string label, Inno.Editor.ImGui.ImGuiTabItemFlags flags = Inno.Editor.ImGui.ImGuiTabItemFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L616) | Begins one tab item. `label`: The tab label and identity. `flags`: Tab-item behavior. | when tab contents should be submitted. | — |
-| [`public static bool Inno.Editor.ImGui.ImGui.BeginTabItem(string label, ref bool isOpen, Inno.Editor.ImGui.ImGuiTabItemFlags flags = Inno.Editor.ImGui.ImGuiTabItemFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L639) | Begins one closeable tab item. `label`: The tab label and identity. `isOpen`: Receives whether the tab remains open. `flags`: Tab-item behavior. | when tab contents should be submitted. | — |
+| [`public static bool Inno.Editor.ImGui.ImGui.BeginTabItem(string label, Inno.Editor.ImGui.ImGuiTabItemFlags flags = Inno.Editor.ImGui.ImGuiTabItemFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L616) | Begins one tab item. `label`: The tab label and identity. `flags`: Tab-item behavior. | true when tab contents should be submitted. | — |
+| [`public static bool Inno.Editor.ImGui.ImGui.BeginTabItem(string label, ref bool isOpen, Inno.Editor.ImGui.ImGuiTabItemFlags flags = Inno.Editor.ImGui.ImGuiTabItemFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L639) | Begins one closeable tab item. `label`: The tab label and identity. `isOpen`: Receives whether the tab remains open. `flags`: Tab-item behavior. | true when tab contents should be submitted. | — |
| [`public static void Inno.Editor.ImGui.ImGui.EndTabItem()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L650) | Ends the current tab item. | — | — |
-| [`public static void Inno.Editor.ImGui.ImGui.OpenPopup(string id, Inno.Editor.ImGui.ImGuiPopupFlags flags = Inno.Editor.ImGui.ImGuiPopupFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L665) | Opens a named popup. `id`: The popup identity. `flags`: Popup opening behavior. | — | — |
-| [`public static bool Inno.Editor.ImGui.ImGui.BeginPopup(string id, Inno.Editor.ImGui.ImGuiWindowFlags flags = Inno.Editor.ImGui.ImGuiWindowFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L685) | Begins a named popup. `id`: The popup identity. `flags`: Popup window behavior. | when popup contents should be submitted. | — |
+| [`public static void Inno.Editor.ImGui.ImGui.OpenPopup(string id, Inno.Editor.ImGui.ImGuiPopupFlags flags = Inno.Editor.ImGui.ImGuiPopupFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L665) | Opens a named popup. `id`: The popup identity. `flags`: Popup opening behavior. | — | — |
+| [`public static bool Inno.Editor.ImGui.ImGui.BeginPopup(string id, Inno.Editor.ImGui.ImGuiWindowFlags flags = Inno.Editor.ImGui.ImGuiWindowFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L685) | Begins a named popup. `id`: The popup identity. `flags`: Popup window behavior. | true when popup contents should be submitted. | — |
| [`public static void Inno.Editor.ImGui.ImGui.EndPopup()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L696) | Ends the current popup. | — | — |
| [`public static void Inno.Editor.ImGui.ImGui.CloseCurrentPopup()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L705) | Closes the current popup. | — | — |
| [`public static bool Inno.Editor.ImGui.ImGui.IsAnyPopupOpen()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L720) | Reads whether an open popup or modal currently prevents underlying canvas and list input. | True when any popup is open in this native context, independently of its identifier or nesting. | `System.InvalidOperationException`: No valid drawing session or native frame is active. |
-| [`public static void Inno.Editor.ImGui.ImGui.BeginDisabled(bool disabled = true)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L732) | Begins a disabled block. `disabled`: Whether controls in the block are disabled. | — | — |
+| [`public static void Inno.Editor.ImGui.ImGui.BeginDisabled(bool disabled = true)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L732) | Begins a disabled block. `disabled`: Whether controls in the block are disabled. | — | — |
| [`public static void Inno.Editor.ImGui.ImGui.EndDisabled()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L741) | Ends the current disabled block. | — | — |
| [`public static void Inno.Editor.ImGui.ImGui.BeginGroup()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L750) | Begins an item group. | — | — |
| [`public static void Inno.Editor.ImGui.ImGui.EndGroup()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L759) | Ends the current item group. | — | — |
-| [`public static void Inno.Editor.ImGui.ImGui.PushId(string id)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L771) | Pushes a string identity onto the ImGui ID stack. `id`: The stable identity used to locate the requested value. | — | — |
-| [`public static void Inno.Editor.ImGui.ImGui.PushId(int id)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L783) | Pushes an integer identity onto the ImGui ID stack. `id`: The stable identity used to locate the requested value. | — | — |
+| [`public static void Inno.Editor.ImGui.ImGui.PushId(string id)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L771) | Pushes a string identity onto the ImGui ID stack. `id`: The stable identity used to locate the requested value. | — | — |
+| [`public static void Inno.Editor.ImGui.ImGui.PushId(int id)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L783) | Pushes an integer identity onto the ImGui ID stack. `id`: The stable identity used to locate the requested value. | — | — |
| [`public static void Inno.Editor.ImGui.ImGui.PopId()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L792) | Pops one identity from the ImGui ID stack. | — | — |
-| [`public static void Inno.Editor.ImGui.ImGui.PushStyleColor(Inno.Editor.ImGui.ImGuiCol color, System.Numerics.Vector4 value)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L807) | Pushes one color override. `color`: The style color slot. `value`: The linear RGBA value. | — | — |
-| [`public static void Inno.Editor.ImGui.ImGui.PopStyleColor(int count = 1)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L821) | Pops color overrides. `count`: The positive number of overrides to pop. | — | — |
-| [`public static void Inno.Editor.ImGui.ImGui.PushStyleVar(Inno.Editor.ImGui.ImGuiStyleVar style, float value)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L836) | Pushes one scalar style override. `style`: The style variable. `value`: The scalar value. | — | — |
-| [`public static void Inno.Editor.ImGui.ImGui.PushStyleVar(Inno.Editor.ImGui.ImGuiStyleVar style, System.Numerics.Vector2 value)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L853) | Pushes one two-component style override. `style`: The style variable. `value`: The vector value. | — | — |
-| [`public static void Inno.Editor.ImGui.ImGui.PopStyleVar(int count = 1)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L867) | Pops style-variable overrides. `count`: The positive number of overrides to pop. | — | — |
-| [`public static void Inno.Editor.ImGui.ImGui.SameLine(float offset = 0, float spacing = -1)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L882) | Places the next item on the same line. `offset`: The horizontal offset from the line start, or zero for automatic placement. `spacing`: The explicit spacing, or a negative value for the current style spacing. | — | — |
+| [`public static void Inno.Editor.ImGui.ImGui.PushStyleColor(Inno.Editor.ImGui.ImGuiCol color, System.Numerics.Vector4 value)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L807) | Pushes one color override. `color`: The style color slot. `value`: The linear RGBA value. | — | — |
+| [`public static void Inno.Editor.ImGui.ImGui.PopStyleColor(int count = 1)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L821) | Pops color overrides. `count`: The positive number of overrides to pop. | — | — |
+| [`public static void Inno.Editor.ImGui.ImGui.PushStyleVar(Inno.Editor.ImGui.ImGuiStyleVar style, float value)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L836) | Pushes one scalar style override. `style`: The style variable. `value`: The scalar value. | — | — |
+| [`public static void Inno.Editor.ImGui.ImGui.PushStyleVar(Inno.Editor.ImGui.ImGuiStyleVar style, System.Numerics.Vector2 value)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L853) | Pushes one two-component style override. `style`: The style variable. `value`: The vector value. | — | — |
+| [`public static void Inno.Editor.ImGui.ImGui.PopStyleVar(int count = 1)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L867) | Pops style-variable overrides. `count`: The positive number of overrides to pop. | — | — |
+| [`public static void Inno.Editor.ImGui.ImGui.SameLine(float offset = 0, float spacing = -1)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L882) | Places the next item on the same line. `offset`: The horizontal offset from the line start, or zero for automatic placement. `spacing`: The explicit spacing, or a negative value for the current style spacing. | — | — |
| [`public static void Inno.Editor.ImGui.ImGui.Separator()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L893) | Draws a horizontal separator. | — | — |
-| [`public static void Inno.Editor.ImGui.ImGui.SeparatorText(string label)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L905) | Draws a labeled horizontal separator. `label`: The label text validated by the separator text operation. | — | — |
+| [`public static void Inno.Editor.ImGui.ImGui.SeparatorText(string label)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L905) | Draws a labeled horizontal separator. `label`: The label text validated by the separator text operation. | — | — |
| [`public static void Inno.Editor.ImGui.ImGui.Spacing()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L914) | Adds one standard vertical spacing unit. | — | — |
-| [`public static void Inno.Editor.ImGui.ImGui.Dummy(System.Numerics.Vector2 size)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L926) | Advances layout by an invisible size. `size`: The size consumed by dummy; ownership remains with the caller unless explicitly stated otherwise. | — | — |
-| [`public static void Inno.Editor.ImGui.ImGui.SetNextItemWidth(float width)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L938) | Sets the width of the next item. `width`: The width in logical units or pixels required by this operation. | — | — |
+| [`public static void Inno.Editor.ImGui.ImGui.Dummy(System.Numerics.Vector2 size)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L926) | Advances layout by an invisible size. `size`: The size consumed by dummy; ownership remains with the caller unless explicitly stated otherwise. | — | — |
+| [`public static void Inno.Editor.ImGui.ImGui.SetNextItemWidth(float width)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L938) | Sets the width of the next item. `width`: The width in logical units or pixels required by this operation. | — | — |
| [`public static void Inno.Editor.ImGui.ImGui.FocusNextItem()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L950) | Requests keyboard focus for the next submitted item in the current frame and window. | — | `System.InvalidOperationException`: No matching owner-thread drawing session is active. |
| [`public static System.Numerics.Vector2 Inno.Editor.ImGui.ImGui.GetContentRegionAvailable()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L962) | Gets the remaining content size in the current region. | The remaining local width and height. | — |
| [`public static System.Numerics.Vector2 Inno.Editor.ImGui.ImGui.GetCursorPosition()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L974) | Gets the current local cursor position. | The local cursor position. | — |
-| [`public static void Inno.Editor.ImGui.ImGui.SetCursorPosition(System.Numerics.Vector2 position)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L986) | Sets the current local cursor position. `position`: The position consumed by set cursor position; ownership remains with the caller unless explicitly stated otherwise. | — | — |
+| [`public static void Inno.Editor.ImGui.ImGui.SetCursorPosition(System.Numerics.Vector2 position)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L986) | Sets the current local cursor position. `position`: The position consumed by set cursor position; ownership remains with the caller unless explicitly stated otherwise. | — | — |
| [`public static System.Numerics.Vector2 Inno.Editor.ImGui.ImGui.GetCursorScreenPosition()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L998) | Gets the current screen-space cursor position. | The screen-space cursor position. | — |
| [`public static System.Numerics.Vector2 Inno.Editor.ImGui.ImGui.GetItemMinimum()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L1010) | Gets the minimum screen-space corner of the previous item. | The item minimum corner. | — |
| [`public static System.Numerics.Vector2 Inno.Editor.ImGui.ImGui.GetItemMaximum()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L1022) | Gets the maximum screen-space corner of the previous item. | The item maximum corner. | — |
-| [`public static System.Numerics.Vector2 Inno.Editor.ImGui.ImGui.MeasureText(string text)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L1037) | Measures text using the current font. `text`: The text text validated by the measure text operation. | The measured width and height. | — |
-| [`public static bool Inno.Editor.ImGui.ImGui.IsItemHovered(Inno.Editor.ImGui.ImGuiHoveredFlags flags = Inno.Editor.ImGui.ImGuiHoveredFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L1052) | Gets whether the previous item is hovered. `flags`: Hovered query behavior. | when the query succeeds. | — |
-| [`public static bool Inno.Editor.ImGui.ImGui.IsItemActive()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L1064) | Gets whether the previous item is active. | while the item owns an active interaction. | — |
-| [`public static bool Inno.Editor.ImGui.ImGui.IsItemClicked(Inno.Editor.ImGui.ImGuiMouseButton button = Inno.Editor.ImGui.ImGuiMouseButton.Left)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L1079) | Gets whether the previous item was clicked with a mouse button. `button`: The mouse button to query. | when the item was clicked. | — |
-| [`public static bool Inno.Editor.ImGui.ImGui.IsMouseButtonDown(Inno.Editor.ImGui.ImGuiMouseButton button = Inno.Editor.ImGui.ImGuiMouseButton.Left)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L1094) | Gets whether a mouse button is held in the current Editor UI frame, including input consumed by UI controls. `button`: The UI mouse button to query. | True while the button is held; callers must also check their item's active or hovered state before editing. | — |
-| [`public static System.Numerics.Vector2 Inno.Editor.ImGui.ImGui.GetMouseDragDelta(Inno.Editor.ImGui.ImGuiMouseButton button = Inno.Editor.ImGui.ImGuiMouseButton.Left, float threshold = -1)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L1113) | Gets accumulated pointer displacement from the current UI drag's starting position for timeline and canvas controls. `button`: The button that owns the drag. `threshold`: Movement required to start dragging, or a negative value to use the Editor's configured threshold. | Displacement in UI coordinates, or zero before the drag threshold is crossed or when no drag is available. The value is cumulative; it must be applied to a captured starting value, not added again each frame. | — |
-| [`public static uint Inno.Editor.ImGui.ImGui.ToPackedColor(System.Numerics.Vector4 color)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L1130) | Converts a floating-point RGBA color to Dear ImGui packed color order. `color`: The color consumed by to packed color; ownership remains with the caller unless explicitly stated otherwise. | The packed color value. | — |
-| [`public static void Inno.Editor.ImGui.ImGui.DrawLine(System.Numerics.Vector2 start, System.Numerics.Vector2 end, uint color, float thickness = 1)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L1153) | Adds a line to the current window draw list. `start`: The screen-space start point. `end`: The screen-space end point. `color`: The packed ImGui color. `thickness`: The line thickness. | — | — |
-| [`public static void Inno.Editor.ImGui.ImGui.DrawRectangle(System.Numerics.Vector2 minimum, System.Numerics.Vector2 maximum, uint color, float rounding = 0, float thickness = 1)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L1181) | Adds a rectangle outline to the current window draw list. `minimum`: The screen-space minimum corner. `maximum`: The screen-space maximum corner. `color`: The packed ImGui color. `rounding`: The corner rounding radius. `thickness`: The outline thickness. | — | — |
-| [`public static void Inno.Editor.ImGui.ImGui.DrawFilledRectangle(System.Numerics.Vector2 minimum, System.Numerics.Vector2 maximum, uint color, float rounding = 0)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L1207) | Adds a filled rectangle to the current window draw list. `minimum`: The screen-space minimum corner. `maximum`: The screen-space maximum corner. `color`: The packed ImGui color. `rounding`: The corner rounding radius. | — | — |
-| [`public static void Inno.Editor.ImGui.ImGui.DrawCubicCurve(System.Numerics.Vector2 start, System.Numerics.Vector2 firstControl, System.Numerics.Vector2 secondControl, System.Numerics.Vector2 end, uint color, float thickness = 1)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L1238) | Draws a cubic curve without exposing a native draw list or borrowed pointer. `start`: The first screen-space endpoint. `firstControl`: The control point beside the first endpoint. `secondControl`: The control point beside the final endpoint. `end`: The final screen-space endpoint. `color`: The packed presentation color. `thickness`: The positive stroke width. | — | — |
-| [`public static void Inno.Editor.ImGui.ImGui.DrawText(System.Numerics.Vector2 position, uint color, string text)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L1263) | Adds text to the current window draw list. `position`: The screen-space text origin. `color`: The packed ImGui color. `text`: The text to draw. | — | — |
+| [`public static System.Numerics.Vector2 Inno.Editor.ImGui.ImGui.MeasureText(string text)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L1037) | Measures text using the current font. `text`: The text text validated by the measure text operation. | The measured width and height. | — |
+| [`public static System.Numerics.Vector2 Inno.Editor.ImGui.ImGui.MeasureWrappedText(string text, float wrapWidth)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L1058) | Measures literal text using the same current font and wrap width as wrapped drawing. `text`: The literal text, including explicit line breaks. `wrapWidth`: The available width in already scaled presentation coordinates. | The copied natural text extent at the specified width. | `System.ArgumentOutOfRangeException`: The width is not finite and positive. `System.InvalidOperationException`: The owning UI thread, frame or native context is not active. `System.ObjectDisposedException`: The owning UI session has retired. |
+| [`public static bool Inno.Editor.ImGui.ImGui.IsItemHovered(Inno.Editor.ImGui.ImGuiHoveredFlags flags = Inno.Editor.ImGui.ImGuiHoveredFlags.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L1084) | Gets whether the previous item is hovered. `flags`: Hovered query behavior. | true when the query succeeds. | — |
+| [`public static bool Inno.Editor.ImGui.ImGui.IsItemActive()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L1096) | Gets whether the previous item is active. | true while the item owns an active interaction. | — |
+| [`public static bool Inno.Editor.ImGui.ImGui.IsItemClicked(Inno.Editor.ImGui.ImGuiMouseButton button = Inno.Editor.ImGui.ImGuiMouseButton.Left)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L1111) | Gets whether the previous item was clicked with a mouse button. `button`: The mouse button to query. | true when the item was clicked. | — |
+| [`public static bool Inno.Editor.ImGui.ImGui.IsMouseButtonDown(Inno.Editor.ImGui.ImGuiMouseButton button = Inno.Editor.ImGui.ImGuiMouseButton.Left)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L1126) | Gets whether a mouse button is held in the current Editor UI frame, including input consumed by UI controls. `button`: The UI mouse button to query. | True while the button is held; callers must also check their item's active or hovered state before editing. | — |
+| [`public static System.Numerics.Vector2 Inno.Editor.ImGui.ImGui.GetMouseDragDelta(Inno.Editor.ImGui.ImGuiMouseButton button = Inno.Editor.ImGui.ImGuiMouseButton.Left, float threshold = -1)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L1145) | Gets accumulated pointer displacement from the current UI drag's starting position for timeline and canvas controls. `button`: The button that owns the drag. `threshold`: Movement required to start dragging, or a negative value to use the Editor's configured threshold. | Displacement in UI coordinates, or zero before the drag threshold is crossed or when no drag is available. The value is cumulative; it must be applied to a captured starting value, not added again each frame. | — |
+| [`public static uint Inno.Editor.ImGui.ImGui.ToPackedColor(System.Numerics.Vector4 color)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L1162) | Converts a floating-point RGBA color to Dear ImGui packed color order. `color`: The color consumed by to packed color; ownership remains with the caller unless explicitly stated otherwise. | The packed color value. | — |
+| [`public static void Inno.Editor.ImGui.ImGui.DrawLine(System.Numerics.Vector2 start, System.Numerics.Vector2 end, uint color, float thickness = 1)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L1185) | Adds a line to the current window draw list. `start`: The screen-space start point. `end`: The screen-space end point. `color`: The packed ImGui color. `thickness`: The line thickness. | — | — |
+| [`public static void Inno.Editor.ImGui.ImGui.DrawRectangle(System.Numerics.Vector2 minimum, System.Numerics.Vector2 maximum, uint color, float rounding = 0, float thickness = 1)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L1213) | Adds a rectangle outline to the current window draw list. `minimum`: The screen-space minimum corner. `maximum`: The screen-space maximum corner. `color`: The packed ImGui color. `rounding`: The corner rounding radius. `thickness`: The outline thickness. | — | — |
+| [`public static void Inno.Editor.ImGui.ImGui.DrawFilledRectangle(System.Numerics.Vector2 minimum, System.Numerics.Vector2 maximum, uint color, float rounding = 0)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L1239) | Adds a filled rectangle to the current window draw list. `minimum`: The screen-space minimum corner. `maximum`: The screen-space maximum corner. `color`: The packed ImGui color. `rounding`: The corner rounding radius. | — | — |
+| [`public static void Inno.Editor.ImGui.ImGui.DrawCubicCurve(System.Numerics.Vector2 start, System.Numerics.Vector2 firstControl, System.Numerics.Vector2 secondControl, System.Numerics.Vector2 end, uint color, float thickness = 1)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L1270) | Draws a cubic curve without exposing a native draw list or borrowed pointer. `start`: The first screen-space endpoint. `firstControl`: The control point beside the first endpoint. `secondControl`: The control point beside the final endpoint. `end`: The final screen-space endpoint. `color`: The packed presentation color. `thickness`: The positive stroke width. | — | — |
+| [`public static void Inno.Editor.ImGui.ImGui.DrawText(System.Numerics.Vector2 position, uint color, string text)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/ImGui.cs#L1295) | Adds text to the current window draw list. `position`: The screen-space text origin. `color`: The packed ImGui color. `text`: The text to draw. | — | — |
| [`public enum Inno.Editor.ImGui.ImGuiButtonFlags : int`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/Options/ImGuiButtonFlags.cs#L8) | Defines the supported button flags choices at the Editor presentation boundary. | — | — |
| [`Inno.Editor.ImGui.ImGuiButtonFlags.None = 0`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/Options/ImGuiButtonFlags.cs#L13) | Uses the ordinary behavior without additional options. | — | — |
| [`Inno.Editor.ImGui.ImGuiButtonFlags.MouseButtonLeft = 1`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/Options/ImGuiButtonFlags.cs#L17) | React on left mouse button (default) | — | — |
@@ -2201,44 +2260,44 @@ static void DrawHelp()
| [`Inno.Editor.ImGui.ImGuiWindowFlags.Modal = 134217728`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/Options/ImGuiWindowFlags.cs#L125) | Don't use! For internal use by BeginPopupModal() | — | — |
| [`Inno.Editor.ImGui.ImGuiWindowFlags.ChildMenu = 268435456`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Controls/Options/ImGuiWindowFlags.cs#L129) | Don't use! For internal use by BeginMenu() | — | — |
| [`public readonly struct Inno.Editor.ImGui.EditorDrawList`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Drawing/EditorDrawList.cs#L11) | A pointer-free drawing borrow valid only in its original window, UI session and frame. | — | — |
-| [`public void Inno.Editor.ImGui.EditorDrawList.Line(System.Numerics.Vector2 start, System.Numerics.Vector2 end, uint color, float thickness = 1)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Drawing/EditorDrawList.cs#L39) | Adds a straight screen-space stroke. `start`: The first endpoint. `end`: The final endpoint. `color`: Packed RGBA color. `thickness`: Stroke width in UI pixels. | — | — |
-| [`public void Inno.Editor.ImGui.EditorDrawList.FilledRectangle(System.Numerics.Vector2 minimum, System.Numerics.Vector2 maximum, uint color, float rounding = 0, bool topCornersOnly = false)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Drawing/EditorDrawList.cs#L63) | Adds a filled rectangular surface. `minimum`: The upper-left corner. `maximum`: The lower-right corner. `color`: Packed RGBA color. `rounding`: Corner radius. `topCornersOnly`: Whether only the two top corners should be rounded. | — | — |
-| [`public void Inno.Editor.ImGui.EditorDrawList.Rectangle(System.Numerics.Vector2 minimum, System.Numerics.Vector2 maximum, uint color, float rounding = 0, float thickness = 1)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Drawing/EditorDrawList.cs#L88) | Adds a rectangular outline. `minimum`: The upper-left corner. `maximum`: The lower-right corner. `color`: Packed RGBA color. `rounding`: Corner radius. `thickness`: Stroke width in UI pixels. | — | — |
-| [`public void Inno.Editor.ImGui.EditorDrawList.FilledCircle(System.Numerics.Vector2 center, float radius, uint color)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Drawing/EditorDrawList.cs#L107) | Adds a filled circle with backend-selected tessellation. `center`: The screen-space center. `radius`: The nonnegative radius. `color`: Packed RGBA color. | — | — |
-| [`public void Inno.Editor.ImGui.EditorDrawList.Text(System.Numerics.Vector2 position, uint color, string text, float scale = 1)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Drawing/EditorDrawList.cs#L131) | Adds literal text using the current font and an explicit scale. `position`: Screen-space text origin. `color`: Packed RGBA color. `text`: Literal managed text; encoded only for this synchronous call. `scale`: Positive scale relative to the current font size. | — | — |
-| [`public void Inno.Editor.ImGui.EditorDrawList.PushClip(System.Numerics.Vector2 minimum, System.Numerics.Vector2 maximum, bool intersect = true)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Drawing/EditorDrawList.cs#L157) | Restricts subsequent drawing to one screen rectangle. `minimum`: The clip minimum. `maximum`: The clip maximum. `intersect`: Whether to intersect the enclosing clip. | — | — |
+| [`public void Inno.Editor.ImGui.EditorDrawList.Line(System.Numerics.Vector2 start, System.Numerics.Vector2 end, uint color, float thickness = 1)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Drawing/EditorDrawList.cs#L39) | Adds a straight screen-space stroke. `start`: The first endpoint. `end`: The final endpoint. `color`: Packed RGBA color. `thickness`: Stroke width in UI pixels. | — | — |
+| [`public void Inno.Editor.ImGui.EditorDrawList.FilledRectangle(System.Numerics.Vector2 minimum, System.Numerics.Vector2 maximum, uint color, float rounding = 0, bool topCornersOnly = false)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Drawing/EditorDrawList.cs#L63) | Adds a filled rectangular surface. `minimum`: The upper-left corner. `maximum`: The lower-right corner. `color`: Packed RGBA color. `rounding`: Corner radius. `topCornersOnly`: Whether only the two top corners should be rounded. | — | — |
+| [`public void Inno.Editor.ImGui.EditorDrawList.Rectangle(System.Numerics.Vector2 minimum, System.Numerics.Vector2 maximum, uint color, float rounding = 0, float thickness = 1)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Drawing/EditorDrawList.cs#L88) | Adds a rectangular outline. `minimum`: The upper-left corner. `maximum`: The lower-right corner. `color`: Packed RGBA color. `rounding`: Corner radius. `thickness`: Stroke width in UI pixels. | — | — |
+| [`public void Inno.Editor.ImGui.EditorDrawList.FilledCircle(System.Numerics.Vector2 center, float radius, uint color)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Drawing/EditorDrawList.cs#L107) | Adds a filled circle with backend-selected tessellation. `center`: The screen-space center. `radius`: The nonnegative radius. `color`: Packed RGBA color. | — | — |
+| [`public void Inno.Editor.ImGui.EditorDrawList.Text(System.Numerics.Vector2 position, uint color, string text, float scale = 1)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Drawing/EditorDrawList.cs#L131) | Adds literal text using the current font and an explicit scale. `position`: Screen-space text origin. `color`: Packed RGBA color. `text`: Literal managed text; encoded only for this synchronous call. `scale`: Positive scale relative to the current font size. | — | — |
+| [`public void Inno.Editor.ImGui.EditorDrawList.PushClip(System.Numerics.Vector2 minimum, System.Numerics.Vector2 maximum, bool intersect = true)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Drawing/EditorDrawList.cs#L157) | Restricts subsequent drawing to one screen rectangle. `minimum`: The clip minimum. `maximum`: The clip maximum. `intersect`: Whether to intersect the enclosing clip. | — | — |
| [`public void Inno.Editor.ImGui.EditorDrawList.PopClip()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Drawing/EditorDrawList.cs#L169) | Restores the enclosing clip after a matching PushClip. | — | — |
-| [`public void Inno.Editor.ImGui.EditorDrawList.SplitChannels(int count)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Drawing/EditorDrawList.cs#L176) | Begins ordered draw channels within this window. `count`: The positive number of layers. | — | — |
-| [`public void Inno.Editor.ImGui.EditorDrawList.SetChannel(int index)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Drawing/EditorDrawList.cs#L188) | Selects a channel from the current split. `index`: The zero-based channel. | — | — |
+| [`public void Inno.Editor.ImGui.EditorDrawList.SplitChannels(int count)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Drawing/EditorDrawList.cs#L176) | Begins ordered draw channels within this window. `count`: The positive number of layers. | — | — |
+| [`public void Inno.Editor.ImGui.EditorDrawList.SetChannel(int index)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Drawing/EditorDrawList.cs#L188) | Selects a channel from the current split. `index`: The zero-based channel. | — | — |
| [`public void Inno.Editor.ImGui.EditorDrawList.MergeChannels()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Drawing/EditorDrawList.cs#L192) | Merges the current split back into ordered draw commands. | — | — |
| [`public static class Inno.Editor.ImGui.EditorDragDropRenderer`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorDragDropRenderer.cs#L12) | Bridges managed editor drag sessions to the native ImGui payload API. | — | — |
-| [`public static bool Inno.Editor.ImGui.EditorDragDropRenderer.Source(Inno.Editor.Interactions.EditorInteraction interaction, Inno.Editor.Interactions.EditorDragData data, System.Action? drawPreview = null)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorDragDropRenderer.cs#L30) | Publishes managed drag data for the most recently submitted ImGui item. `interaction`: The interaction area and target that produced the drag source. `data`: The managed drag data published by the source. `drawPreview`: An optional callback that draws the native drag preview. | while the item is an active drag source. | — |
-| [`public static Inno.Editor.ImGui.EditorDropWidgetResult Inno.Editor.ImGui.EditorDragDropRenderer.Target(Inno.Editor.Interactions.EditorInteraction interaction, Inno.Editor.Interactions.EditorDropPlacement placement = Inno.Editor.Interactions.EditorDropPlacement.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorDragDropRenderer.cs#L51) | Evaluates and, on delivery, accepts a managed drag on the most recently submitted ImGui item. `interaction`: The interaction area and managed drop target. `placement`: The requested position relative to the target. | The native preview state together with the managed compatibility and delivery results. | — |
+| [`public static bool Inno.Editor.ImGui.EditorDragDropRenderer.Source(Inno.Editor.Interactions.EditorInteraction interaction, Inno.Editor.Interactions.EditorDragData data, System.Action? drawPreview = null)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorDragDropRenderer.cs#L30) | Publishes managed drag data for the most recently submitted ImGui item. `interaction`: The interaction area and target that produced the drag source. `data`: The managed drag data published by the source. `drawPreview`: An optional callback that draws the native drag preview. | true while the item is an active drag source. | — |
+| [`public static Inno.Editor.ImGui.EditorDropWidgetResult Inno.Editor.ImGui.EditorDragDropRenderer.Target(Inno.Editor.Interactions.EditorInteraction interaction, Inno.Editor.Interactions.EditorDropPlacement placement = Inno.Editor.Interactions.EditorDropPlacement.None)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorDragDropRenderer.cs#L51) | Evaluates and, on delivery, accepts a managed drag on the most recently submitted ImGui item. `interaction`: The interaction area and managed drop target. `placement`: The requested position relative to the target. | The native preview state together with the managed compatibility and delivery results. | — |
| [`public readonly record struct Inno.Editor.ImGui.EditorDropWidgetResult : System.IEquatable`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorDragDropRenderer.cs#L74) | Reports the preview and delivery state of an ImGui editor drop target. | — | — |
-| [`public Inno.Editor.ImGui.EditorDropWidgetResult.EditorDropWidgetResult(bool isPreviewing, Inno.Editor.Interactions.EditorDropStatus status, Inno.Editor.Interactions.EditorDropResult result)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorDragDropRenderer.cs#L88) | Creates a combined native-preview and managed-drop result. `isPreviewing`: Whether a compatible native payload is currently hovering the target. `status`: The compatibility and visual state returned by the managed drop router. `result`: The result produced when the payload was delivered. | — | — |
+| [`public Inno.Editor.ImGui.EditorDropWidgetResult.EditorDropWidgetResult(bool isPreviewing, Inno.Editor.Interactions.EditorDropStatus status, Inno.Editor.Interactions.EditorDropResult result)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorDragDropRenderer.cs#L88) | Creates a combined native-preview and managed-drop result. `isPreviewing`: Whether a compatible native payload is currently hovering the target. `status`: The compatibility and visual state returned by the managed drop router. `result`: The result produced when the payload was delivered. | — | — |
| [`public bool Inno.Editor.ImGui.EditorDropWidgetResult.isPreviewing { get; }`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorDragDropRenderer.cs#L101) | Gets whether a compatible native payload is hovering the target. | — | — |
| [`public Inno.Editor.Interactions.EditorDropStatus Inno.Editor.ImGui.EditorDropWidgetResult.status { get; }`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorDragDropRenderer.cs#L105) | Gets the managed drop compatibility status. | — | — |
| [`public Inno.Editor.Interactions.EditorDropResult Inno.Editor.ImGui.EditorDropWidgetResult.result { get; }`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorDragDropRenderer.cs#L109) | Gets the delivered drop result. | — | — |
| [`public static Inno.Editor.ImGui.EditorDropWidgetResult Inno.Editor.ImGui.EditorDropWidgetResult.none { get; }`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorDragDropRenderer.cs#L113) | Gets an inactive drop target result. | — | — |
| [`public override string Inno.Editor.ImGui.EditorDropWidgetResult.ToString()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorDragDropRenderer.cs#L74) | Returns the fully qualified type name of this instance. | The fully qualified type name. | — |
-| [`public static bool Inno.Editor.ImGui.EditorDropWidgetResult.operator !=(Inno.Editor.ImGui.EditorDropWidgetResult left, Inno.Editor.ImGui.EditorDropWidgetResult right)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorDragDropRenderer.cs#L74) | Inherited or compiler-provided contract. | — | — |
-| [`public static bool Inno.Editor.ImGui.EditorDropWidgetResult.operator ==(Inno.Editor.ImGui.EditorDropWidgetResult left, Inno.Editor.ImGui.EditorDropWidgetResult right)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorDragDropRenderer.cs#L74) | Inherited or compiler-provided contract. | — | — |
+| [`public static bool Inno.Editor.ImGui.EditorDropWidgetResult.operator !=(Inno.Editor.ImGui.EditorDropWidgetResult left, Inno.Editor.ImGui.EditorDropWidgetResult right)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorDragDropRenderer.cs#L74) | 由 C# 编译器生成的值契约成员。 | — | — |
+| [`public static bool Inno.Editor.ImGui.EditorDropWidgetResult.operator ==(Inno.Editor.ImGui.EditorDropWidgetResult left, Inno.Editor.ImGui.EditorDropWidgetResult right)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorDragDropRenderer.cs#L74) | 由 C# 编译器生成的值契约成员。 | — | — |
| [`public override int Inno.Editor.ImGui.EditorDropWidgetResult.GetHashCode()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorDragDropRenderer.cs#L74) | Returns the hash code for this instance. | A 32-bit signed integer that is the hash code for this instance. | — |
-| [`public override bool Inno.Editor.ImGui.EditorDropWidgetResult.Equals(object obj)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorDragDropRenderer.cs#L74) | Indicates whether this instance and a specified object are equal. `obj`: The object to compare with the current instance. | if and this instance are the same type and represent the same value; otherwise, . | — |
-| [`public bool Inno.Editor.ImGui.EditorDropWidgetResult.Equals(Inno.Editor.ImGui.EditorDropWidgetResult other)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorDragDropRenderer.cs#L74) | Indicates whether the current object is equal to another object of the same type. `other`: An object to compare with this object. | if the current object is equal to the parameter; otherwise, . | — |
+| [`public override bool Inno.Editor.ImGui.EditorDropWidgetResult.Equals(object obj)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorDragDropRenderer.cs#L74) | Indicates whether this instance and a specified object are equal. `obj`: The object to compare with the current instance. | true if obj and this instance are the same type and represent the same value; otherwise, false. | — |
+| [`public bool Inno.Editor.ImGui.EditorDropWidgetResult.Equals(Inno.Editor.ImGui.EditorDropWidgetResult other)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorDragDropRenderer.cs#L74) | Indicates whether the current object is equal to another object of the same type. `other`: An object to compare with this object. | true if the current object is equal to the other parameter; otherwise, false. | — |
| [`public sealed class Inno.Editor.ImGui.EditorGameInputCapture`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorGameInputCapture.cs#L13) | Routes platform input to the Play session only while the visible Game View owns focus. | — | — |
-| [`public Inno.Editor.ImGui.EditorGameInputCapture.EditorGameInputCapture(System.Func resolveWindow)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorGameInputCapture.cs#L35) | Creates a capture policy using a presentation viewport to platform window resolver. `resolveWindow`: Returns a live window ID for a viewport, or null when absent. | — | `System.ArgumentNullException`: Thrown when the resolver is null. |
+| [`public Inno.Editor.ImGui.EditorGameInputCapture.EditorGameInputCapture(System.Func resolveWindow)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorGameInputCapture.cs#L35) | Creates a capture policy using a presentation viewport to platform window resolver. `resolveWindow`: Returns a live window ID for a viewport, or null when absent. | — | `System.ArgumentNullException`: Thrown when the resolver is null. |
| [`public void Inno.Editor.ImGui.EditorGameInputCapture.BeginFrame()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorGameInputCapture.cs#L43) | Starts a presentation pass in which the visible Game View must report its current bounds. | — | — |
-| [`public bool Inno.Editor.ImGui.EditorGameInputCapture.Report(uint viewportId, System.Numerics.Vector2 origin, System.Numerics.Vector2 size, bool focused, bool hovered)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorGameInputCapture.cs#L66) | Reports the Game View image in coordinates local to its platform window. `viewportId`: The presentation viewport containing the Game View. `origin`: The image's upper-left corner relative to that window. `size`: The visible image size in logical pixels. `focused`: Whether the Game View is selected and its platform window has focus. `hovered`: Whether the image is inside the frontmost hovered ImGui window. | when the Game View and its platform window both own focus. | — |
+| [`public bool Inno.Editor.ImGui.EditorGameInputCapture.Report(uint viewportId, System.Numerics.Vector2 origin, System.Numerics.Vector2 size, bool focused, bool hovered)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorGameInputCapture.cs#L66) | Reports the Game View image in coordinates local to its platform window. `viewportId`: The presentation viewport containing the Game View. `origin`: The image's upper-left corner relative to that window. `size`: The visible image size in logical pixels. `focused`: Whether the Game View is selected and its platform window has focus. `hovered`: Whether the image is inside the frontmost hovered ImGui window. | true when the Game View and its platform window both own focus. | — |
| [`public uint Inno.Editor.ImGui.EditorGameInputCapture.CompleteFrame()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorGameInputCapture.cs#L89) | Ends a presentation pass and identifies input that must be released after focus loss. | The former platform window ID to reset, or zero if no reset is needed. | — |
-| [`public Inno.Core.Events.Event? Inno.Editor.ImGui.EditorGameInputCapture.Route(Inno.Core.Events.Event evnt)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorGameInputCapture.cs#L126) | Filters an engine event through the current Game View focus and pointer bounds. `evnt`: The original backend-neutral platform event. | A routed event or a synthetic focus reset, or null when the Game View must not receive input. | `System.ArgumentNullException`: Thrown when the event is null. |
+| [`public Inno.Core.Events.Event? Inno.Editor.ImGui.EditorGameInputCapture.Route(Inno.Core.Events.Event evnt)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorGameInputCapture.cs#L126) | Filters an engine event through the current Game View focus and pointer bounds. `evnt`: The original backend-neutral platform event. | A routed event or a synthetic focus reset, or null when the Game View must not receive input. | `System.ArgumentNullException`: Thrown when the event is null. |
| [`public sealed class Inno.Editor.ImGui.EditorMenuRenderer`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorMenuRenderer.cs#L15) | Renders immutable editor menu models through ImGui. | — | — |
-| [`public bool Inno.Editor.ImGui.EditorMenuRenderer.ContextMenu(string id, Inno.Editor.Interactions.EditorInteraction interaction)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorMenuRenderer.cs#L43) | Draws a resolved right-click menu for the most recently submitted ImGui item. `id`: The stable popup identifier in the current ImGui ID scope. `interaction`: The interaction area and optional operation target. | while the context popup is open and its items were drawn. | — |
-| [`public bool Inno.Editor.ImGui.EditorMenuRenderer.ContextMenu(string id, Inno.Editor.Interactions.EditorInteraction scopeInteraction, Inno.Editor.Interactions.EditorInteraction itemInteraction)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorMenuRenderer.cs#L88) | Draws one context popup composed from an item interaction and its containing-scope interaction. `id`: Stable popup identifier in the current ImGui ID scope. `scopeInteraction`: Container interaction whose commands are shown first, such as creation commands for a directory. `itemInteraction`: Selected-item interaction whose commands are shown after the container commands. | while the context popup is open and at least one command group was drawn. | — |
-| [`public bool Inno.Editor.ImGui.EditorMenuRenderer.WindowContextMenu(string id, Inno.Editor.Interactions.EditorInteraction interaction)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorMenuRenderer.cs#L132) | Draws a resolved right-click menu when the current ImGui window's unoccupied background is clicked. `id`: The stable popup identifier in the current ImGui ID scope. `interaction`: The interaction area and directory target for the background operation. | while the background context popup is open and its items were drawn. | — |
-| [`public void Inno.Editor.ImGui.EditorMenuRenderer.MainMenu(Inno.Editor.Interactions.EditorInteraction interaction)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorMenuRenderer.cs#L215) | Draws the complete editor main menu bar for the supplied menu context. `interaction`: The main-menu interaction area. | — | — |
-| [`public void Inno.Editor.ImGui.EditorMenuRenderer.DrawItems(Inno.Editor.Interactions.EditorInteraction interaction, System.Collections.Generic.IReadOnlyList items)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorMenuRenderer.cs#L309) | Recursively draws resolved menu nodes into the currently open popup or menu. `interaction`: The interaction used to resolve shortcuts and enqueue selected actions. `items`: The immutable menu nodes to draw in display order. | — | — |
-| [`public bool Inno.Editor.ImGui.EditorMenuRenderer.DrawSearchItems(Inno.Editor.Interactions.EditorInteraction interaction, System.Collections.Generic.IReadOnlyList items, string search)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorMenuRenderer.cs#L364) | Draws matching leaf commands as a flat searchable list. `interaction`: The interaction used to enqueue selected actions. `items`: The immutable menu tree whose leaves should be searched. `search`: The case-insensitive text matched against each slash-delimited leaf path. | when a command was selected. | — |
+| [`public bool Inno.Editor.ImGui.EditorMenuRenderer.ContextMenu(string id, Inno.Editor.Interactions.EditorInteraction interaction)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorMenuRenderer.cs#L43) | Draws a resolved right-click menu for the most recently submitted ImGui item. `id`: The stable popup identifier in the current ImGui ID scope. `interaction`: The interaction area and optional operation target. | true while the context popup is open and its items were drawn. | — |
+| [`public bool Inno.Editor.ImGui.EditorMenuRenderer.ContextMenu(string id, Inno.Editor.Interactions.EditorInteraction scopeInteraction, Inno.Editor.Interactions.EditorInteraction itemInteraction)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorMenuRenderer.cs#L88) | Draws one context popup composed from an item interaction and its containing-scope interaction. `id`: Stable popup identifier in the current ImGui ID scope. `scopeInteraction`: Container interaction whose commands are shown first, such as creation commands for a directory. `itemInteraction`: Selected-item interaction whose commands are shown after the container commands. | true while the context popup is open and at least one command group was drawn. | — |
+| [`public bool Inno.Editor.ImGui.EditorMenuRenderer.WindowContextMenu(string id, Inno.Editor.Interactions.EditorInteraction interaction)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorMenuRenderer.cs#L132) | Draws a resolved right-click menu when the current ImGui window's unoccupied background is clicked. `id`: The stable popup identifier in the current ImGui ID scope. `interaction`: The interaction area and directory target for the background operation. | true while the background context popup is open and its items were drawn. | — |
+| [`public void Inno.Editor.ImGui.EditorMenuRenderer.MainMenu(Inno.Editor.Interactions.EditorInteraction interaction)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorMenuRenderer.cs#L215) | Draws the complete editor main menu bar for the supplied menu context. `interaction`: The main-menu interaction area. | — | — |
+| [`public void Inno.Editor.ImGui.EditorMenuRenderer.DrawItems(Inno.Editor.Interactions.EditorInteraction interaction, System.Collections.Generic.IReadOnlyList items)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorMenuRenderer.cs#L309) | Recursively draws resolved menu nodes into the currently open popup or menu. `interaction`: The interaction used to resolve shortcuts and enqueue selected actions. `items`: The immutable menu nodes to draw in display order. | — | — |
+| [`public bool Inno.Editor.ImGui.EditorMenuRenderer.DrawSearchItems(Inno.Editor.Interactions.EditorInteraction interaction, System.Collections.Generic.IReadOnlyList items, string search)`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorMenuRenderer.cs#L364) | Draws matching leaf commands as a flat searchable list. `interaction`: The interaction used to enqueue selected actions. `items`: The immutable menu tree whose leaves should be searched. `search`: The case-insensitive text matched against each slash-delimited leaf path. | true when a command was selected. | — |
| [`public readonly struct Inno.Editor.ImGui.EditorUiInput`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorUiInput.cs#L8) | Copies frame input facts used by presentation without exposing native input storage. | — | — |
| [`public bool Inno.Editor.ImGui.EditorUiInput.alt { get; }`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorUiInput.cs#L13) | Gets whether Alt is held. | — | — |
| [`public bool Inno.Editor.ImGui.EditorUiInput.control { get; }`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorUiInput.cs#L17) | Gets whether the physical Control modifier is held, independently of native shortcut conventions. | — | — |
@@ -2258,16 +2317,16 @@ static void DrawHelp()
| [`public System.IDisposable Inno.Editor.ImGui.EditorUiSession.Enter()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorUiSession.cs#L81) | Activates this session for a synchronous callback while preserving the enclosing scope. | An owner-thread scope that must be released in reverse activation order. | `System.ObjectDisposedException`: The session has retired. `System.InvalidOperationException`: The caller is not the owner thread. |
| [`public void Inno.Editor.ImGui.EditorUiSession.Dispose()`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/EditorUiSession.cs#L97) | Releases presentation state after all drawing scopes and domain edit gestures have ended. | — | `System.InvalidOperationException`: A drawing scope is active or the caller is not the owner thread. |
| [`public sealed class Inno.Editor.ImGui.ImGuiEditorRuntime : Inno.Editor.Core.EditorRuntime`](../../src/composition/editor/presentation/Inno.Editor.ImGui/Runtime/ImGuiEditorRuntime.cs#L21) | Presents the backend-independent editor interaction runtime through ImGui. | — | — |
-| [`public Inno.Editor.ImGui.ImGuiEditorRuntime.ImGuiEditorRuntime(Inno.Editor.Core.EditorContext context, Inno.Extensibility.Types.TypeCatalog types, Inno.Core.Logging.LogRouter logs, System.Collections.Generic.IEnumerable