mirror of
https://github.com/murashit/codex-panel.git
synced 2026-07-22 06:57:10 +00:00
Tighten chat panel UI bridge placement
This commit is contained in:
parent
a7406997e5
commit
783b375617
17 changed files with 27 additions and 24 deletions
|
|
@ -5,8 +5,8 @@ import { runtimeSnapshotForChatState } from "../../application/runtime/snapshot"
|
|||
import type { ChatStateStore } from "../../application/state/store";
|
||||
import { resolveRuntimeControls } from "../../domain/runtime/resolution";
|
||||
import { ChatComposerController } from "../../panel/composer-controller";
|
||||
import type { ChatMessageScrollController } from "../../panel/message-stream-scroll-controller";
|
||||
import { type ChatPanelComposerSurface, chatPanelComposerProjection } from "../../panel/surface/composer-projection";
|
||||
import type { ChatMessageScrollController } from "../../panel/surface/message-stream-scroll";
|
||||
import type { ChatPanelEnvironment } from "../contracts";
|
||||
import { createVaultComposerAttachmentHandler } from "../obsidian/composer-attachments.obsidian";
|
||||
import { VaultComposerContextReferenceProvider } from "../obsidian/vault-composer-context-reference-provider.obsidian";
|
||||
|
|
|
|||
|
|
@ -3,10 +3,10 @@ import type { PendingRequestActions } from "../../application/pending-requests/p
|
|||
import type { ChatStateStore } from "../../application/state/store";
|
||||
import type { HistoryController } from "../../application/threads/history-controller";
|
||||
import type { ThreadRenameEditorActions } from "../../application/threads/rename-editor-actions";
|
||||
import type { ChatMessageScrollController } from "../../panel/message-stream-scroll-controller";
|
||||
import type { ChatPanelShellParts } from "../../panel/shell.dom";
|
||||
import type { ChatPanelGoalSurface } from "../../panel/surface/goal-projection";
|
||||
import { MessageStreamPresenter } from "../../panel/surface/message-stream-presenter";
|
||||
import type { ChatMessageScrollController } from "../../panel/surface/message-stream-scroll";
|
||||
import type { ChatPanelToolbarSurface } from "../../panel/surface/toolbar-projection";
|
||||
import { createToolbarUiActions, type ToolbarPanelActions } from "../../panel/toolbar-actions";
|
||||
import { toolbarOutsidePointerHit } from "../../panel/toolbar-hit-test.dom";
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ import type { ChatResumeWorkTracker } from "../application/threads/resume-work";
|
|||
import { createStructuredSystemItem, createSystemItem } from "../domain/message-stream/factories/system-items";
|
||||
import type { MessageStreamNoticeSection } from "../domain/message-stream/items";
|
||||
import type { ChatComposerController } from "../panel/composer-controller";
|
||||
import type { ChatMessageScrollController } from "../panel/surface/message-stream-scroll";
|
||||
import type { ChatMessageScrollController } from "../panel/message-stream-scroll-controller";
|
||||
import { createComposerBundle } from "./bundles/composer-bundle";
|
||||
import { type ChatPanelConnectionBundle, createConnectionBundle } from "./bundles/connection-bundle";
|
||||
import { createReconnectAction } from "./bundles/reconnect-bundle";
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ import type { ChatState } from "../application/state/root-reducer";
|
|||
import { type ChatStateStore, createChatStateStore } from "../application/state/store";
|
||||
import { parseRestoredThreadState, type RestoredThreadPlaceholderState } from "../application/threads/restored-thread-lifecycle";
|
||||
import { ChatResumeWorkTracker } from "../application/threads/resume-work";
|
||||
import { type ChatMessageScrollController, createChatMessageScrollController } from "../panel/message-stream-scroll-controller";
|
||||
import { renderChatPanelShell, unmountChatPanelShell } from "../panel/shell.dom";
|
||||
import { type ChatMessageScrollController, createChatMessageScrollController } from "../panel/surface/message-stream-scroll";
|
||||
import type { ChatPanelEnvironment, ChatPanelHandle, ChatWorkspacePanelSnapshot, ChatWorkspacePanelTurnLifecycle } from "./contracts";
|
||||
import { type ChatViewDeferredTasks, createChatViewDeferredTasks } from "./session/deferred-work";
|
||||
import { type ChatPanelSessionGraph, createChatPanelSessionGraph } from "./session-graph";
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
import type { ComposerBoundaryScrollAction } from "../../application/composer/boundary-scroll";
|
||||
import type { ComposerBoundaryScrollAction } from "../application/composer/boundary-scroll";
|
||||
import type {
|
||||
MessageStreamScrollCommand,
|
||||
MessageStreamScrollControllerBinding,
|
||||
MessageStreamScrollPort,
|
||||
} from "../../ui/message-stream/flow-scroll.measure";
|
||||
} from "../ui/message-stream/flow-scroll.measure";
|
||||
|
||||
export interface ChatMessageScrollController extends MessageStreamScrollControllerBinding {
|
||||
showLatest(): void;
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
import { Component, h, type ComponentChild as UiNode } from "preact";
|
||||
|
||||
import { disposeDomListeners, listenDomEvent } from "../../../../shared/ui/dom-events.dom";
|
||||
import { MESSAGE_CONTENT_RENDERED_EVENT } from "./content-events";
|
||||
import { MESSAGE_CONTENT_RENDERED_EVENT } from "./content-rendered-event.dom";
|
||||
|
||||
type MessageScrollDirection = -1 | 1;
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ import { micromark } from "micromark";
|
|||
import { type App, type Component, MarkdownRenderer, Notice } from "obsidian";
|
||||
|
||||
import { isAbsoluteFileHref, vaultFileLinkTarget, vaultRelativeFileLinkTarget } from "../../../../shared/obsidian/file-links";
|
||||
import { notifyMessageContentRendered } from "./content-events";
|
||||
import { notifyMessageContentRendered } from "./content-rendered-event.dom";
|
||||
|
||||
interface MarkdownMessageRendererOptions {
|
||||
app: App;
|
||||
|
|
|
|||
|
|
@ -1,14 +1,8 @@
|
|||
import { listenOutsideDomEvent } from "../../../../shared/ui/dom-events.dom";
|
||||
|
||||
export interface McpElicitationValidityMessage {
|
||||
fieldId: string;
|
||||
message: string;
|
||||
}
|
||||
|
||||
export function closeMessageRoleMenuOnOutsidePointer(root: HTMLElement, onClose: () => void): () => void {
|
||||
return listenOutsideDomEvent(root, "pointerdown", onClose, true);
|
||||
}
|
||||
|
||||
export function focusPendingRequestControl(container: HTMLElement | null): void {
|
||||
if (!container) return;
|
||||
for (const selector of [
|
||||
|
|
@ -11,7 +11,11 @@ import type {
|
|||
PendingUserInputViewModel,
|
||||
} from "../../presentation/pending-requests/view-model";
|
||||
import type { PendingRequestBlockActions } from "./context";
|
||||
import { applyMcpElicitationFormValidity, focusPendingRequestControl, type McpElicitationValidityMessage } from "./message-stream.dom";
|
||||
import {
|
||||
applyMcpElicitationFormValidity,
|
||||
focusPendingRequestControl,
|
||||
type McpElicitationValidityMessage,
|
||||
} from "./pending-request-block.dom";
|
||||
import { createStatusMessageClassName } from "./status";
|
||||
|
||||
export function pendingRequestBlockNode(
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ import { useEffect, useLayoutEffect, useRef, useState } from "preact/hooks";
|
|||
|
||||
import { listenDomEvent, listenOutsideDomEvent } from "../../../../shared/ui/dom-events.dom";
|
||||
import type { MessageStreamTextView } from "../../presentation/message-stream/text-view";
|
||||
import { MESSAGE_CONTENT_RENDERED_EVENT } from "./content-events";
|
||||
import { MESSAGE_CONTENT_RENDERED_EVENT } from "./content-rendered-event.dom";
|
||||
import type { TextItemContentContext } from "./context";
|
||||
|
||||
const USER_MESSAGE_COLLAPSE_HEIGHT_PX = 360;
|
||||
|
|
|
|||
5
src/features/chat/ui/message-stream/text.dom.ts
Normal file
5
src/features/chat/ui/message-stream/text.dom.ts
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
import { listenOutsideDomEvent } from "../../../../shared/ui/dom-events.dom";
|
||||
|
||||
export function closeMessageRoleMenuOnOutsidePointer(root: HTMLElement, onClose: () => void): () => void {
|
||||
return listenOutsideDomEvent(root, "pointerdown", onClose, true);
|
||||
}
|
||||
|
|
@ -9,7 +9,7 @@ import type {
|
|||
TextItemDetailSectionView,
|
||||
} from "../../presentation/message-stream/text-view";
|
||||
import type { TextItemActionContext, TextItemContext, TextItemDetailStateContext, TextItemMetadataContext } from "./context";
|
||||
import { closeMessageRoleMenuOnOutsidePointer } from "./message-stream.dom";
|
||||
import { closeMessageRoleMenuOnOutsidePointer } from "./text.dom";
|
||||
import { CollapsibleTextContent, TextContent } from "./text-content.dom";
|
||||
|
||||
export function textNode(view: MessageStreamTextView, context: TextItemContext): UiNode {
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@ import type { ChatPanelEnvironment } from "../../../../src/features/chat/host/co
|
|||
import { createChatViewDeferredTasks } from "../../../../src/features/chat/host/session/deferred-work";
|
||||
import { createChatPanelSessionGraph } from "../../../../src/features/chat/host/session-graph";
|
||||
import { ChatComposerController } from "../../../../src/features/chat/panel/composer-controller";
|
||||
import { createChatMessageScrollController } from "../../../../src/features/chat/panel/message-stream-scroll-controller";
|
||||
import { MessageStreamPresenter } from "../../../../src/features/chat/panel/surface/message-stream-presenter";
|
||||
import { createChatMessageScrollController } from "../../../../src/features/chat/panel/surface/message-stream-scroll";
|
||||
import { type CodexPanelSettings, DEFAULT_SETTINGS } from "../../../../src/settings/model";
|
||||
import { ConnectionWorkTracker } from "../../../../src/shared/lifecycle/connection-work";
|
||||
import { installObsidianDomShims } from "../../../support/dom";
|
||||
|
|
|
|||
|
|
@ -6,15 +6,15 @@ import { beforeEach, describe, expect, it, vi } from "vitest";
|
|||
|
||||
import { type ChatAction, type ChatState, chatReducer } from "../../../../../src/features/chat/application/state/root-reducer";
|
||||
import { type ChatStateStore, createChatStateStore } from "../../../../../src/features/chat/application/state/store";
|
||||
import {
|
||||
type ChatMessageScrollController,
|
||||
createChatMessageScrollController,
|
||||
} from "../../../../../src/features/chat/panel/message-stream-scroll-controller";
|
||||
import { MessageStreamPresenter } from "../../../../../src/features/chat/panel/surface/message-stream-presenter";
|
||||
import {
|
||||
type ChatMessageStreamSurfaceContext,
|
||||
messageStreamSurfaceProjectionFromModel,
|
||||
} from "../../../../../src/features/chat/panel/surface/message-stream-projection";
|
||||
import {
|
||||
type ChatMessageScrollController,
|
||||
createChatMessageScrollController,
|
||||
} from "../../../../../src/features/chat/panel/surface/message-stream-scroll";
|
||||
import { MarkdownMessageRenderer } from "../../../../../src/features/chat/ui/message-stream/markdown-renderer.obsidian";
|
||||
import { MessageStreamViewport } from "../../../../../src/features/chat/ui/message-stream/stream-blocks";
|
||||
import { renderUiRoot, unmountUiRoot } from "../../../../../src/shared/ui/ui-root.dom";
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import { act } from "preact/test-utils";
|
|||
import { describe, expect, it, vi } from "vitest";
|
||||
import { implementPlanTargetFromState } from "../../../../../src/features/chat/application/conversation/plan-implementation";
|
||||
import type { MessageStreamItem } from "../../../../../src/features/chat/domain/message-stream/items";
|
||||
import { MESSAGE_CONTENT_RENDERED_EVENT } from "../../../../../src/features/chat/ui/message-stream/content-events";
|
||||
import { MESSAGE_CONTENT_RENDERED_EVENT } from "../../../../../src/features/chat/ui/message-stream/content-rendered-event.dom";
|
||||
import { MarkdownMessageRenderer } from "../../../../../src/features/chat/ui/message-stream/markdown-renderer.obsidian";
|
||||
import { deferred } from "../../../../support/async";
|
||||
import { attributeValues, textContents, topLevelDetailsSummaries } from "../../../../support/dom";
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
import { h, type ComponentChild as UiNode } from "preact";
|
||||
import { act } from "preact/test-utils";
|
||||
import { afterEach, beforeEach, describe, expect, it } from "vitest";
|
||||
import { MESSAGE_CONTENT_RENDERED_EVENT } from "../../../../../src/features/chat/ui/message-stream/content-events";
|
||||
import { MESSAGE_CONTENT_RENDERED_EVENT } from "../../../../../src/features/chat/ui/message-stream/content-rendered-event.dom";
|
||||
import {
|
||||
MessageStreamFlowFrame,
|
||||
type MessageStreamScrollCommand,
|
||||
|
|
|
|||
Loading…
Reference in a new issue