@qilin-agent/client-ui-chat 3.1.3 → 3.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.i18n.yaml +25 -25
- package/README.md +12 -2
- package/README.zh.md +12 -2
- package/lib/client.js +2988 -2315
- package/lib/types/client/apply.d.ts +5 -0
- package/lib/types/client/chat/AssistantMarkdown.d.ts +7 -2
- package/lib/types/client/chat/AssistantNodeView.d.ts +3 -3
- package/lib/types/client/chat/ChatFlow.d.ts +4 -0
- package/lib/types/client/chat/ChatGroupSeat.d.ts +4 -3
- package/lib/types/client/chat/ChatNodeSeat.d.ts +11 -8
- package/lib/types/client/chat/ChatView.d.ts +1 -1
- package/lib/types/client/chat/ReasoningContent.d.ts +16 -0
- package/lib/types/client/chat/ReasoningRow.d.ts +5 -2
- package/lib/types/client/chat/flow-motion.d.ts +59 -0
- package/lib/types/client/chat/searchable-hidden.d.ts +10 -2
- package/lib/types/client/chat/use-chat-reading.d.ts +12 -4
- package/lib/types/client/chat/use-chat-scroll.d.ts +9 -1
- package/lib/types/client/chat/use-chat-viewport.d.ts +31 -3
- package/lib/types/client/chat/use-scroll-follow.d.ts +4 -3
- package/lib/types/client/contract/slots.d.ts +88 -6
- package/lib/types/client/contract/snapshot.d.ts +2 -0
- package/lib/types/client/contract/store.d.ts +3 -1
- package/lib/types/client/index.d.ts +1 -1
- package/lib/types/client/locale.d.ts +8 -0
- package/lib/types/client/presentation-policy.d.ts +16 -14
- package/lib/types/client/settings/TranscriptViewRow.d.ts +7 -2
- package/lib/types/client/stores.d.ts +11 -1
- package/lib/types/client/transcript-view.d.ts +13 -3
- package/package.json +37 -37
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
/** Register the Chat Conversation target, renderers, stats, and details surface. */
|
|
2
2
|
import type { Context } from '@qilin-agent/kylin';
|
|
3
|
+
import type { ChatFlowInjected, ChatNodeInjected } from './contract/slots.ts';
|
|
4
|
+
/** Bind group and header visibility to the viewport of one flow render. */
|
|
5
|
+
export declare const CHAT_FLOW_INJECT: ChatFlowInjected;
|
|
6
|
+
/** Bind node-local sources and forward the flow's existing visibility hook. */
|
|
7
|
+
export declare const CHAT_NODE_INJECT: ChatNodeInjected;
|
|
3
8
|
/** Services required by the Chat target and its presentation registrations. */
|
|
4
9
|
export declare const inject: string[];
|
|
5
10
|
/**
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { MarkdownFileMentions } from '@qilin-agent/client-ui-primitives';
|
|
2
|
-
import type {
|
|
2
|
+
import type { PropsRenderSlots } from '@qilin-agent/client-ui-slots';
|
|
3
|
+
import type { ChatNodeOwnerProps, ChatViewSlotProps, UseGroupAction, UsePresentation } from '../contract/slots.ts';
|
|
3
4
|
import type { AssistantBlock } from '../contract/snapshot.ts';
|
|
4
5
|
/**
|
|
5
6
|
* Standalone fallback for image destinations (query/fragment suffixes are ignored).
|
|
@@ -30,6 +31,8 @@ export interface AssistantMarkdownProps {
|
|
|
30
31
|
renderMessageImages: ChatNodeOwnerProps['renderMessageImages'];
|
|
31
32
|
/** Hide reasoning that belongs to the Turn-level process disclosure. */
|
|
32
33
|
reasoningHidden?: boolean | undefined;
|
|
34
|
+
/** Process hiding bound by the node slot to its current viewport. */
|
|
35
|
+
useGroupAction: UseGroupAction;
|
|
33
36
|
/** Reveal the owning Turn-level process disclosure. */
|
|
34
37
|
revealProcess?: (() => void) | undefined;
|
|
35
38
|
/** Resolved prose file mentions for this Assistant's closing turn. */
|
|
@@ -39,9 +42,11 @@ export interface AssistantMarkdownProps {
|
|
|
39
42
|
* compositions previews every settled reasoning summary (the Standard mode).
|
|
40
43
|
*/
|
|
41
44
|
usePresentation?: UsePresentation | undefined;
|
|
45
|
+
/** Expanded-reasoning Body Slot renderer declared by this node's owner. */
|
|
46
|
+
renderSlot: PropsRenderSlots<'conversation.chat.reasoning.body'>['renderSlot'];
|
|
42
47
|
/** The owning view's locale seat, passed down as a plain prop. */
|
|
43
48
|
t: ChatViewSlotProps['t'];
|
|
44
49
|
}
|
|
45
50
|
/** Reasoning block as the Think variant summary row (figma 39:28304). */
|
|
46
|
-
export declare const AssistantMarkdown: import("react").MemoExoticComponent<({ groupPart, blocks, streaming, interrupted, renderMessageImages, reasoningHidden, revealProcess, mentions, usePresentation, t, }: AssistantMarkdownProps) => import("react").JSX.Element | null>;
|
|
51
|
+
export declare const AssistantMarkdown: import("react").MemoExoticComponent<({ groupPart, blocks, streaming, interrupted, renderMessageImages, reasoningHidden, revealProcess, mentions, usePresentation, useGroupAction, renderSlot, t, }: AssistantMarkdownProps) => import("react").JSX.Element | null>;
|
|
47
52
|
//# sourceMappingURL=AssistantMarkdown.d.ts.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { InjectFace } from '@qilin-agent/client-ui-slots';
|
|
1
|
+
import type { InjectFace, PropsRenderSlots } from '@qilin-agent/client-ui-slots';
|
|
2
2
|
import type { ChatNodeViewProps, PresentationInjected } from '../contract/slots.ts';
|
|
3
|
-
type AssistantNodeViewProps = ChatNodeViewProps<'assistant-step'> & InjectFace<PresentationInjected>;
|
|
3
|
+
type AssistantNodeViewProps = ChatNodeViewProps<'assistant-step'> & InjectFace<PresentationInjected> & PropsRenderSlots<'conversation.chat.reasoning.body'>;
|
|
4
4
|
/** Streaming, settled, and interrupted Assistant states share one keyed renderer instance. */
|
|
5
|
-
export declare const AssistantNodeView: import("react").MemoExoticComponent<({ node, groupPart, useTurnData, turnProcess, openFile, renderMessageImages, fileMentions, usePresentation, t, }: AssistantNodeViewProps) => import("react").JSX.Element>;
|
|
5
|
+
export declare const AssistantNodeView: import("react").MemoExoticComponent<({ node, groupPart, useGroupAction, useTurnData, turnProcess, openFile, renderMessageImages, fileMentions, usePresentation, renderSlot, t, }: AssistantNodeViewProps) => import("react").JSX.Element>;
|
|
6
6
|
export {};
|
|
7
7
|
//# sourceMappingURL=AssistantNodeView.d.ts.map
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ChatFlowSlotProps } from '../contract/slots.ts';
|
|
2
|
+
/** Render the flow without adding a DOM parent or changing keyed row positions. */
|
|
3
|
+
export declare const ChatFlow: import("react").MemoExoticComponent<({ entries, pendingInputs, lastInputTurn, deferCollapse, useSession, useChat, useChatNode, useChatNodeBottom, useChatNodeProcess, useChatGroup, usePresentation, useStore, actions, renderSlot, t, useGroupAction, useGroupHeaderAction, cwd, openFile, openSkill, inspectCall, forkAt, editUserMessage, loadImage, fileMentions, }: ChatFlowSlotProps) => import("react").JSX.Element[]>;
|
|
4
|
+
//# sourceMappingURL=ChatFlow.d.ts.map
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
/** Stable process container; display policy changes visibility, never member parents. */
|
|
2
2
|
import { type ComponentProps } from 'react';
|
|
3
3
|
import type { GroupKey } from '@qilin-agent/client-ui-conversation/client';
|
|
4
|
-
import type {
|
|
4
|
+
import type { ChatFlowSlotProps } from '../contract/slots.ts';
|
|
5
5
|
import { ChatNodeSeat } from './ChatNodeSeat.tsx';
|
|
6
6
|
type SeatProps = Omit<ComponentProps<typeof ChatNodeSeat>, 'nodeKey' | 'groupPart'>;
|
|
7
7
|
type ChatGroupSeatProps = SeatProps & {
|
|
8
8
|
readonly groupKey: GroupKey;
|
|
9
|
-
readonly useChatGroup:
|
|
9
|
+
readonly useChatGroup: ChatFlowSlotProps['useChatGroup'];
|
|
10
|
+
readonly useGroupHeaderAction: ChatFlowSlotProps['useGroupHeaderAction'];
|
|
10
11
|
};
|
|
11
12
|
/** Render a process group with local disclosure and the existing outer-Turn visibility. */
|
|
12
|
-
export declare const ChatGroupSeat: import("react").MemoExoticComponent<({ groupKey, useChatGroup, ...props }: ChatGroupSeatProps) => import("react").JSX.Element | null>;
|
|
13
|
+
export declare const ChatGroupSeat: import("react").MemoExoticComponent<({ groupKey, useChatGroup, useGroupHeaderAction, ...props }: ChatGroupSeatProps) => import("react").JSX.Element | null>;
|
|
13
14
|
export {};
|
|
14
15
|
//# sourceMappingURL=ChatGroupSeat.d.ts.map
|
|
@@ -1,22 +1,25 @@
|
|
|
1
|
-
import type { ChatNodeOwnerProps,
|
|
1
|
+
import type { ChatNodeOwnerProps, ChatFlowSlotProps, UsePresentation } from '../contract/slots.ts';
|
|
2
2
|
import type { ChatNodeStore } from '../contract/snapshot.ts';
|
|
3
3
|
interface ChatNodeSeatProps extends ChatNodeOwnerProps {
|
|
4
4
|
readonly nodeKey: string;
|
|
5
5
|
/** A replaced Builder must rebind keyed hooks even when references and keys survive. */
|
|
6
6
|
readonly nodeStore: ChatNodeStore;
|
|
7
|
-
readonly useChatNode:
|
|
8
|
-
readonly useChatNodeProcess:
|
|
7
|
+
readonly useChatNode: ChatFlowSlotProps['useChatNode'];
|
|
8
|
+
readonly useChatNodeProcess: ChatFlowSlotProps['useChatNodeProcess'];
|
|
9
9
|
readonly usePresentation: UsePresentation;
|
|
10
|
-
readonly useStore:
|
|
11
|
-
readonly actions:
|
|
12
|
-
readonly renderSlot:
|
|
13
|
-
readonly t:
|
|
10
|
+
readonly useStore: ChatFlowSlotProps['useStore'];
|
|
11
|
+
readonly actions: ChatFlowSlotProps['actions'];
|
|
12
|
+
readonly renderSlot: ChatFlowSlotProps['renderSlot'];
|
|
13
|
+
readonly t: ChatFlowSlotProps['t'];
|
|
14
|
+
readonly useChatNodeBottom: ChatFlowSlotProps['useChatNodeBottom'];
|
|
15
|
+
readonly deferCollapse: boolean;
|
|
16
|
+
readonly useGroupAction: ChatFlowSlotProps['useGroupAction'];
|
|
14
17
|
}
|
|
15
18
|
/**
|
|
16
19
|
* Subscribe, apply Turn-process visibility, and dispatch one stable Context key.
|
|
17
20
|
* Policy reads select this seat's own conclusion, so a mode change re-renders
|
|
18
21
|
* only seats whose visibility actually changes.
|
|
19
22
|
*/
|
|
20
|
-
export declare const ChatNodeSeat: import("react").MemoExoticComponent<({ nodeKey, groupPart, useChatNode, useChatNodeProcess, usePresentation, cwd, openFile, openSkill, inspectCall, forkAt, editUserMessage, loadImage, renderMessageImages, fileMentions, useStore, actions, renderSlot, t, }: ChatNodeSeatProps) => import("react").JSX.Element | null>;
|
|
23
|
+
export declare const ChatNodeSeat: import("react").MemoExoticComponent<({ nodeKey, groupPart, useChatNode, useChatNodeProcess, usePresentation, cwd, openFile, openSkill, inspectCall, forkAt, editUserMessage, loadImage, renderMessageImages, fileMentions, useStore, actions, renderSlot, t, useChatNodeBottom, deferCollapse, useGroupAction, }: ChatNodeSeatProps) => import("react").JSX.Element | null>;
|
|
21
24
|
export {};
|
|
22
25
|
//# sourceMappingURL=ChatNodeSeat.d.ts.map
|
|
@@ -3,5 +3,5 @@ import type { ChatViewSlotProps } from '../contract/slots.ts';
|
|
|
3
3
|
* The chat view slot entry: pure component over the composed props; each
|
|
4
4
|
* ordered business Node crosses the keyed renderer seat.
|
|
5
5
|
*/
|
|
6
|
-
export declare function ChatView({ useSession, useChat,
|
|
6
|
+
export declare function ChatView({ useSession, useChat, useConversation, useSessions, renderSlot, sessionId, openFile, openSkill, openExternalLink, loadOlder, loadThrough, loadImage, openTrajectory, chatScroll, forkAt, fileMentions, editUserMessage, usePresentation, useProjection, t, }: ChatViewSlotProps): import("react").JSX.Element;
|
|
7
7
|
//# sourceMappingURL=ChatView.d.ts.map
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { FactoryComponentPropsOf, PropsRenderFactories, PropsRuntime } from '@qilin-agent/client-ui-slots';
|
|
2
|
+
type ReasoningBodyProps = PropsRuntime<'conversation.chat.reasoning.body'> & PropsRenderFactories;
|
|
3
|
+
/**
|
|
4
|
+
* Render compact reasoning with caller-supplied labels or Chat's defaults.
|
|
5
|
+
* @param props - display text, streaming state, optional localized labels, and the Factory's locale seat; no Session is required.
|
|
6
|
+
* @returns the standard reasoning content; supplied labels are used without merging defaults.
|
|
7
|
+
*/
|
|
8
|
+
export declare const ReasoningContent: import("react").MemoExoticComponent<({ text, running, labels, t }: FactoryComponentPropsOf<"conversation.chat.reasoning.content">) => import("react").JSX.Element>;
|
|
9
|
+
/**
|
|
10
|
+
* Render the default Body through the same Factory available to third-party wrappers.
|
|
11
|
+
* @param props - original reasoning and the framework's Factory renderer.
|
|
12
|
+
* @returns an occurrence of the official reasoning Content Factory.
|
|
13
|
+
*/
|
|
14
|
+
export declare function DefaultReasoningBody({ text, running, renderFactorySlot }: ReasoningBodyProps): import("react").ReactNode;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=ReasoningContent.d.ts.map
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { PropsRenderSlots } from '@qilin-agent/client-ui-slots';
|
|
1
2
|
import type { ChatViewSlotProps, UsePresentation } from '../contract/slots.ts';
|
|
2
3
|
/**
|
|
3
4
|
* Render one assistant reasoning block collapsed until the reader opens it. The
|
|
@@ -8,13 +9,15 @@ import type { ChatViewSlotProps, UsePresentation } from '../contract/slots.ts';
|
|
|
8
9
|
* @param props.text - complete or streaming reasoning text.
|
|
9
10
|
* @param props.running - whether this block is the streaming tail.
|
|
10
11
|
* @param props.usePresentation - live display-policy selector for this reasoning row.
|
|
11
|
-
* @param props.
|
|
12
|
+
* @param props.renderSlot - the declared expanded-body slot every reasoning body renders through.
|
|
13
|
+
* @param props.t - conversation locale seat for status and row copy.
|
|
12
14
|
* @returns the reasoning disclosure.
|
|
13
15
|
*/
|
|
14
|
-
export declare function ReasoningRow({ text, running, usePresentation, t }: {
|
|
16
|
+
export declare function ReasoningRow({ text, running, usePresentation, renderSlot, t }: {
|
|
15
17
|
text: string;
|
|
16
18
|
running: boolean;
|
|
17
19
|
usePresentation?: UsePresentation | undefined;
|
|
20
|
+
renderSlot: PropsRenderSlots<'conversation.chat.reasoning.body'>['renderSlot'];
|
|
18
21
|
t: ChatViewSlotProps['t'];
|
|
19
22
|
}): import("react").JSX.Element;
|
|
20
23
|
//# sourceMappingURL=ReasoningRow.d.ts.map
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fade-then-close transitions owned by one Chat viewport. Rows fade before their boxes close;
|
|
3
|
+
* the owner reserves removed height and holds scrolling until that viewport's folds finish.
|
|
4
|
+
* Motion is opt-in under `[data-chat-motion]`, respects reduced motion, and clears temporary styles.
|
|
5
|
+
*/
|
|
6
|
+
import { type RefObject } from 'react';
|
|
7
|
+
/** Row-local operations supplied by the containing viewport. */
|
|
8
|
+
export interface FlowMotionRows {
|
|
9
|
+
/** @param element - visible row. @param done - commits hidden state before idle callbacks run. */
|
|
10
|
+
collapse(element: HTMLElement, done: () => void): void;
|
|
11
|
+
/** @param element - newly visible row to grow to its natural size. */
|
|
12
|
+
reveal(element: HTMLElement): void;
|
|
13
|
+
/** @param element - row whose active transition should be cancelled without hiding it. */
|
|
14
|
+
cancelMotion(element: HTMLElement): void;
|
|
15
|
+
}
|
|
16
|
+
/** Animation lifetime and fold coordination for one viewport. */
|
|
17
|
+
export interface FlowMotion extends FlowMotionRows {
|
|
18
|
+
/** @returns whether a row owned by this viewport is closing. */
|
|
19
|
+
foldActive(): boolean;
|
|
20
|
+
/** @param listener - callback after the last fold. @returns cancellation for a pending callback. */
|
|
21
|
+
onFoldIdle(listener: () => void): () => void;
|
|
22
|
+
/** Cancel owned animations and pending work when the viewport detaches. */
|
|
23
|
+
clear(): void;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Decide whether a row may animate: inside a live scope and not under reduced motion.
|
|
27
|
+
* @param element - row about to be hidden.
|
|
28
|
+
* @returns whether the fade-then-close transition applies.
|
|
29
|
+
*/
|
|
30
|
+
export declare function motionEnabled(element: HTMLElement): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Whether a row is already hidden or on its way there.
|
|
33
|
+
* @param element - row under Turn-level visibility control.
|
|
34
|
+
* @returns hidden attribute present or a collapse transition outstanding.
|
|
35
|
+
*/
|
|
36
|
+
export declare function hiddenOrCollapsing(element: HTMLElement): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Create animation coordination without cross-viewport broadcasts.
|
|
39
|
+
* @param reserve - reserve the deduplicated removed height in this viewport.
|
|
40
|
+
* @param foldingChanged - disable or restore this viewport's native scroll anchoring.
|
|
41
|
+
* @returns stable callbacks and cleanup for this viewport's animations.
|
|
42
|
+
*/
|
|
43
|
+
export declare function createFlowMotion(reserve: (px: number) => void, foldingChanged: (active: boolean) => void): FlowMotion;
|
|
44
|
+
/**
|
|
45
|
+
* Apply searchable hiding with the containing Chat viewport's optional fold animation.
|
|
46
|
+
* @param hidden - desired visibility.
|
|
47
|
+
* @param reveal - browser-find and focus-protection callback.
|
|
48
|
+
* @param motion - owning viewport's row callbacks; absent in standalone rendering.
|
|
49
|
+
* @returns the stable subtree ref.
|
|
50
|
+
*/
|
|
51
|
+
export declare function useFlowHidden(hidden: boolean, reveal: () => void, motion: FlowMotionRows | undefined): RefObject<HTMLDivElement>;
|
|
52
|
+
/**
|
|
53
|
+
* Toggle a plain hidden attribute on the fold clock, growing newly revealed headers.
|
|
54
|
+
* @param ref - element whose visibility follows hidden.
|
|
55
|
+
* @param hidden - desired hidden state.
|
|
56
|
+
* @param motion - containing viewport's row callbacks.
|
|
57
|
+
*/
|
|
58
|
+
export declare function useMotionHidden(ref: RefObject<HTMLElement | null>, hidden: boolean, motion: FlowMotionRows): void;
|
|
59
|
+
//# sourceMappingURL=flow-motion.d.ts.map
|
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
import { type RefObject } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Optional visibility operation; its caller owns cancellation and eventually commits the attribute.
|
|
4
|
+
* @param element - stable subtree root.
|
|
5
|
+
* @param hidden - desired hidden state.
|
|
6
|
+
* @param commit - apply the final visibility before reporting the operation complete.
|
|
7
|
+
*/
|
|
8
|
+
export type HiddenTransition = (element: HTMLElement, hidden: boolean, commit: () => void) => void;
|
|
2
9
|
/**
|
|
3
10
|
* Apply searchable hidden state without unmounting a stable subtree.
|
|
4
11
|
* @param hidden - whether the subtree is currently hidden.
|
|
5
|
-
* @param reveal - callback for browser find's
|
|
12
|
+
* @param reveal - callback for browser find's beforematch reveal.
|
|
13
|
+
* @param transition - optional caller-owned visibility operation; otherwise apply synchronously.
|
|
6
14
|
* @returns ref for the stable subtree root.
|
|
7
15
|
*/
|
|
8
|
-
export declare function useSearchableHidden(hidden: boolean, reveal: () => void): RefObject<HTMLDivElement>;
|
|
16
|
+
export declare function useSearchableHidden(hidden: boolean, reveal: () => void, transition?: HiddenTransition): RefObject<HTMLDivElement>;
|
|
9
17
|
//# sourceMappingURL=searchable-hidden.d.ts.map
|
|
@@ -52,8 +52,13 @@ export declare class ChatReading {
|
|
|
52
52
|
dispose(): void;
|
|
53
53
|
/** Release bottom follow and pending sampling for an explicit navigation. */
|
|
54
54
|
pauseFollowing(): void;
|
|
55
|
-
/**
|
|
56
|
-
|
|
55
|
+
/**
|
|
56
|
+
* Land at the current floor and clear saved reader position.
|
|
57
|
+
* @param behavior - immediate positioning, or one native animation when the reader's own input moved the tail.
|
|
58
|
+
*/
|
|
59
|
+
followTail(behavior?: 'instant' | 'smooth'): void;
|
|
60
|
+
/** Stop a native follow animation where it is; the next sampled position decides follow intent. */
|
|
61
|
+
interruptFollow(): void;
|
|
57
62
|
/** Restore the Session's semantic position, or follow the tail when none is saved. */
|
|
58
63
|
restore(): void;
|
|
59
64
|
/**
|
|
@@ -71,8 +76,11 @@ export declare class ChatReading {
|
|
|
71
76
|
* @param scroll - attributed scroll delivery; other reader movement remains pending until sampled.
|
|
72
77
|
*/
|
|
73
78
|
readonly onScroll: (scroll: ViewportScroll) => void;
|
|
74
|
-
/**
|
|
75
|
-
|
|
79
|
+
/**
|
|
80
|
+
* Settle pending reader movement; only the outer scroller can finish its native follow animation.
|
|
81
|
+
* @param outer - whether the event belongs to the outer scroller rather than a process body.
|
|
82
|
+
*/
|
|
83
|
+
readonly onScrollEnd: (outer?: boolean) => void;
|
|
76
84
|
/**
|
|
77
85
|
* Reconcile a layout change without overriding unsampled reader input.
|
|
78
86
|
* A resize the reader did not cause moves their row; put it back on its
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
/** Composes viewport operations, reading policy, and history navigation for Chat. */
|
|
2
2
|
import { type RefObject } from 'react';
|
|
3
|
+
import type { TranscriptViewMode } from '../../chat-settings.ts';
|
|
3
4
|
import type { ChatSnapshot } from '../contract/snapshot.ts';
|
|
4
5
|
import type { ChatViewSlotProps } from '../contract/slots.ts';
|
|
5
6
|
import { type ChatNavigation, type ChatNavigationInput } from './use-chat-navigation.ts';
|
|
6
7
|
import { type ChatReadingState } from './use-chat-reading.ts';
|
|
8
|
+
import type { FlowMotionRows } from './flow-motion.ts';
|
|
7
9
|
/** Committed content and Session operations used to reconcile scroll ownership. */
|
|
8
10
|
export interface ChatScrollInput extends ChatNavigationInput {
|
|
9
11
|
readonly chatScroll: ChatViewSlotProps['chatScroll'];
|
|
@@ -14,6 +16,10 @@ export interface ChatScrollInput extends ChatNavigationInput {
|
|
|
14
16
|
readonly steeringId: string | null;
|
|
15
17
|
readonly submissionId: string | null;
|
|
16
18
|
readonly running: boolean;
|
|
19
|
+
/** Enable the browser-local delayed-fold experiment and its input reveal animation. */
|
|
20
|
+
readonly deferCompletedTurns: boolean;
|
|
21
|
+
/** A changed work-details preference resets fold reservations after the layout settles. */
|
|
22
|
+
readonly transcriptView: TranscriptViewMode;
|
|
17
23
|
readonly loadedTurns: ReturnType<ChatSnapshot['navigation']['items']>;
|
|
18
24
|
}
|
|
19
25
|
interface ChatScrollState extends ChatReadingState {
|
|
@@ -23,9 +29,11 @@ interface ChatScrollState extends ChatReadingState {
|
|
|
23
29
|
readonly navigateToTurn: ChatNavigation['navigateToTurn'];
|
|
24
30
|
readonly loadEarlier: ChatNavigation['loadEarlier'];
|
|
25
31
|
readonly returnToBottom: () => void;
|
|
32
|
+
readonly motion: FlowMotionRows;
|
|
26
33
|
}
|
|
27
34
|
/**
|
|
28
|
-
* Coordinate scroll policy after Chat content commits.
|
|
35
|
+
* Coordinate scroll policy after Chat content commits. Initial history must be ready
|
|
36
|
+
* before automatic scroll or resize handling can initialize reading state and fold motion.
|
|
29
37
|
* New submitted input supersedes pending reader sampling.
|
|
30
38
|
* @param input - current Chat content, scroll memory, and history operations.
|
|
31
39
|
* @returns element refs, visible reading state, and navigation callbacks.
|
|
@@ -17,9 +17,12 @@ export interface ViewportLanding {
|
|
|
17
17
|
}
|
|
18
18
|
interface ViewportEvents {
|
|
19
19
|
scroll: (event: ViewportScroll) => void;
|
|
20
|
-
|
|
20
|
+
/** Settled scroll; `outer` distinguishes the transcript scroller from a process body. */
|
|
21
|
+
scrollEnd: (outer: boolean) => void;
|
|
21
22
|
resize: () => void;
|
|
22
23
|
interact: () => void;
|
|
24
|
+
/** Any reading gesture, before paging ownership is consulted. */
|
|
25
|
+
intent?: () => void;
|
|
23
26
|
}
|
|
24
27
|
/** Owns one Chat scrollport's DOM operations, event listeners, and size observer. */
|
|
25
28
|
export declare class ChatViewport {
|
|
@@ -31,6 +34,8 @@ export declare class ChatViewport {
|
|
|
31
34
|
private resized;
|
|
32
35
|
private readerIntent;
|
|
33
36
|
private paging;
|
|
37
|
+
/** Transition state and row callbacks owned by this viewport's attachment. */
|
|
38
|
+
readonly motion: import("./flow-motion.ts").FlowMotion;
|
|
34
39
|
/**
|
|
35
40
|
* Bind to the containing scrollport and observe content and viewport sizes.
|
|
36
41
|
* @param list - Chat root inside an optional shared conversation scrollport.
|
|
@@ -57,6 +62,27 @@ export declare class ChatViewport {
|
|
|
57
62
|
get latestTurn(): number | null;
|
|
58
63
|
/** Discard geometry-dependent landing knowledge while retaining scroll attribution. */
|
|
59
64
|
invalidate(): void;
|
|
65
|
+
private spacerHeight;
|
|
66
|
+
private setSpacer;
|
|
67
|
+
/**
|
|
68
|
+
* Add room below the flow before rows above the reader close, so the scrollport never clamps:
|
|
69
|
+
* the closing gap pulls the content below it upward while everything above stays put.
|
|
70
|
+
* @param px - height about to leave the flow.
|
|
71
|
+
*/
|
|
72
|
+
reserveBelow(px: number): void;
|
|
73
|
+
/** Clear fold reservations after a display-mode change, allowing the scroll range to shrink. */
|
|
74
|
+
resetBelow(): void;
|
|
75
|
+
/**
|
|
76
|
+
* Give reserved room back only as content grows into it, never by scrolling back down: growth fills
|
|
77
|
+
* the blank before it moves the floor. Holds still while rows are closing, because trimming mid-close
|
|
78
|
+
* would let the next frame clamp.
|
|
79
|
+
*/
|
|
80
|
+
reclaimBelow(): void;
|
|
81
|
+
/**
|
|
82
|
+
* Stop an outstanding native follow animation at its current position before a reading gesture.
|
|
83
|
+
* @param follow - follow controller bound to this scrollport.
|
|
84
|
+
*/
|
|
85
|
+
interruptFollow(follow: ScrollFollow): void;
|
|
60
86
|
/**
|
|
61
87
|
* Accept a sampled reader position without retaining a known landing.
|
|
62
88
|
* @param metrics - settled reader position used as the next attribution baseline.
|
|
@@ -148,9 +174,11 @@ export declare class ChatViewport {
|
|
|
148
174
|
/**
|
|
149
175
|
* Align the scrollport with its current floor.
|
|
150
176
|
* @param follow - independent follow intent and scrolling controller.
|
|
151
|
-
* @
|
|
177
|
+
* @param behavior - immediate positioning, or one native animation for a reader-caused tail change.
|
|
178
|
+
* @returns the actual floor landing, or null while detached. A smooth landing reports the starting
|
|
179
|
+
* position; native scroll delivery moves it.
|
|
152
180
|
*/
|
|
153
|
-
scrollToBottom(follow: ScrollFollow): ViewportLanding | null;
|
|
181
|
+
scrollToBottom(follow: ScrollFollow, behavior?: 'instant' | 'smooth'): ViewportLanding | null;
|
|
154
182
|
private align;
|
|
155
183
|
private write;
|
|
156
184
|
private readonly onScroll;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** Scroll position,
|
|
1
|
+
/** Scroll position, caller-supplied floor, and viewport height; raw measurements use the physical floor. */
|
|
2
2
|
export interface ViewportMetrics {
|
|
3
3
|
readonly top: number;
|
|
4
4
|
readonly floor: number;
|
|
@@ -80,11 +80,12 @@ export declare class ScrollFollow {
|
|
|
80
80
|
jump(element: HTMLElement, metrics: ViewportMetrics, top: number): ViewportMetrics;
|
|
81
81
|
/**
|
|
82
82
|
* Follow the measured floor, respecting reduced motion for smooth requests.
|
|
83
|
-
*
|
|
83
|
+
* Smooth requests preserve an outstanding target; immediate follow updates
|
|
84
|
+
* retarget active motion when content changes the floor.
|
|
84
85
|
* Within-tolerance positioning is immediate while no animation is outstanding.
|
|
85
86
|
* @param element - scrolling element.
|
|
86
87
|
* @param metrics - current geometry.
|
|
87
|
-
* @param behavior - native animation for growth, or immediate positioning.
|
|
88
|
+
* @param behavior - native animation for growth, or immediate positioning unless motion is already active.
|
|
88
89
|
* @returns current geometry; smooth requests retain their starting position until native scroll delivery.
|
|
89
90
|
*/
|
|
90
91
|
toBottom(element: HTMLElement, metrics: ViewportMetrics, behavior: 'instant' | 'smooth'): ViewportMetrics;
|
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
/** Chat-owned Slot declarations and composed component props. */
|
|
2
|
+
import type { RefObject } from 'react';
|
|
2
3
|
import type { MessageId } from '@qilin-agent/llm/brand';
|
|
3
4
|
import type { SessionId, SessionSeq } from '@qilin-agent/session/types';
|
|
4
|
-
import type {
|
|
5
|
+
import type { PendingSubmission } from '@qilin-agent/api-session-controller/client';
|
|
6
|
+
import type { InboxState } from '@qilin-agent/agent/types';
|
|
7
|
+
import type { CommandNode, CompactionSummaryNode, ConversationGroupData, ConversationLocationDataStore, ConversationTurnDataMap, GroupSnapshot, MessageImageLoader, MessageImagesOwnerProps, RenderEntry, RenderMessageImages, TurnLocation } from '@qilin-agent/client-ui-conversation/client';
|
|
5
8
|
import type { InjectFace, KeyedSnapshotSelectorHook, PropsLocale, PropsRenderSlots, PropsRuntime, PropsStore, SlotHookFactory, SnapshotSelectorHook } from '@qilin-agent/client-ui-slots';
|
|
6
|
-
import type {
|
|
9
|
+
import type { ObservableSnapshot } from '@qilin-agent/client-store';
|
|
10
|
+
import type { MarkdownFileMentions, MarkdownLabels } from '@qilin-agent/client-ui-primitives';
|
|
7
11
|
import type { createChatStore } from '../stores.ts';
|
|
12
|
+
import type { ChatPresentationPolicy } from '../presentation-policy.ts';
|
|
13
|
+
import type { FlowMotionRows } from '../chat/flow-motion.ts';
|
|
8
14
|
import type { ToolCallId } from './store.ts';
|
|
9
15
|
import type { ChatConversationViewNode, ChatNode, ChatNodeKind } from './chat-nodes.ts';
|
|
10
16
|
import type { ChatNodeProcessSource, ChatNodeSource, ChatSnapshot, ChatTurnProcessPresentation } from './snapshot.ts';
|
|
11
17
|
import type { TurnProcessSpec } from './turn-process.ts';
|
|
12
|
-
import type { ObservableSnapshot } from '@qilin-agent/client-store';
|
|
13
|
-
import type { ChatPresentationPolicy } from '../presentation-policy.ts';
|
|
14
18
|
import type { PerformanceUsageMode } from '../../chat-settings.ts';
|
|
15
19
|
/** Selector hook over the current Conversation binding's Chat target. */
|
|
16
20
|
export type UseChat = SnapshotSelectorHook<ChatSnapshot>;
|
|
@@ -68,16 +72,43 @@ export type UseDisclosure = () => {
|
|
|
68
72
|
readonly setExpanded: (open: boolean) => void;
|
|
69
73
|
readonly toggle: () => void;
|
|
70
74
|
};
|
|
71
|
-
/**
|
|
75
|
+
/**
|
|
76
|
+
* Searchable process hiding bound to the current node render's viewport.
|
|
77
|
+
* @param hidden - desired hidden state.
|
|
78
|
+
* @param reveal - browser-find and focus-protection callback.
|
|
79
|
+
* @returns the stable process-container ref.
|
|
80
|
+
*/
|
|
81
|
+
export type UseGroupAction = (hidden: boolean, reveal: () => void) => RefObject<HTMLDivElement>;
|
|
82
|
+
/**
|
|
83
|
+
* Plain header visibility bound to the flow's viewport, including growth on reveal.
|
|
84
|
+
* @param ref - stable header element.
|
|
85
|
+
* @param hidden - desired hidden state.
|
|
86
|
+
*/
|
|
87
|
+
export type UseGroupHeaderAction = (ref: RefObject<HTMLElement | null>, hidden: boolean) => void;
|
|
88
|
+
/** Viewport capability supplied once for each rendered Chat flow. */
|
|
89
|
+
export interface ChatFlowHookContext {
|
|
90
|
+
readonly motion: FlowMotionRows;
|
|
91
|
+
}
|
|
92
|
+
/** Flow-wide behavior hooks bound to one viewport, independently of Session identity. */
|
|
93
|
+
export interface ChatFlowInjected {
|
|
94
|
+
hooks: {
|
|
95
|
+
groupAction: SlotHookFactory<'conversation.chat.flow', UseGroupAction>;
|
|
96
|
+
groupHeaderAction: SlotHookFactory<'conversation.chat.flow', UseGroupHeaderAction>;
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
/** Stable sources and capabilities bound to one rendered Chat Node. */
|
|
72
100
|
export interface ChatNodeHookContext {
|
|
73
101
|
readonly turnData: ConversationLocationDataStore<ConversationTurnDataMap> | undefined;
|
|
74
102
|
readonly disclosureReset: ObservableSnapshot<number>;
|
|
103
|
+
/** Absent for standalone rendering without a Chat flow. */
|
|
104
|
+
readonly useGroupAction?: UseGroupAction | undefined;
|
|
75
105
|
}
|
|
76
106
|
/** Slot-level Hook factories for keyed Chat renderers. */
|
|
77
107
|
export interface ChatNodeInjected {
|
|
78
108
|
hooks: {
|
|
79
109
|
turnData: SlotHookFactory<'conversation.chat.node', UseChatNodeTurnData>;
|
|
80
110
|
disclosure: SlotHookFactory<'conversation.chat.node', UseDisclosure>;
|
|
111
|
+
groupAction: SlotHookFactory<'conversation.chat.node', UseGroupAction>;
|
|
81
112
|
};
|
|
82
113
|
}
|
|
83
114
|
/** Stable owner currency delivered to a keyed Chat renderer. */
|
|
@@ -129,6 +160,18 @@ export interface PerformanceUsageInjected {
|
|
|
129
160
|
}
|
|
130
161
|
/** Full props of one keyed Chat renderer. */
|
|
131
162
|
export type ChatNodeViewProps<Kind extends ChatNodeKind = ChatNodeKind> = PropsRuntime<'conversation.chat.node', Kind> & PropsLocale<'chat'>;
|
|
163
|
+
/** Original model-provided reasoning offered to the expanded Body Slot. */
|
|
164
|
+
export interface ReasoningBodyOwnerProps {
|
|
165
|
+
/** Complete or streaming reasoning text. */
|
|
166
|
+
readonly text: string;
|
|
167
|
+
/** Whether the reasoning tail is still streaming. */
|
|
168
|
+
readonly running: boolean;
|
|
169
|
+
}
|
|
170
|
+
/** Session-independent original or derived display input to the Content Factory. */
|
|
171
|
+
export interface ReasoningContentInput extends ReasoningBodyOwnerProps {
|
|
172
|
+
/** Localized Markdown controls, used unchanged when supplied; omission uses Chat's defaults. */
|
|
173
|
+
readonly labels?: MarkdownLabels;
|
|
174
|
+
}
|
|
132
175
|
/** Command-row owner share. */
|
|
133
176
|
export interface CommandRowOwnerProps {
|
|
134
177
|
node: CommandNode;
|
|
@@ -153,6 +196,8 @@ export interface ChatViewInjected {
|
|
|
153
196
|
keyedHooks: {
|
|
154
197
|
/** Resolve the stable source for one Chat Node key. */
|
|
155
198
|
chatNode: (key: string) => ChatNodeSource;
|
|
199
|
+
/** Observe assembler-owned bottom membership for one Node. */
|
|
200
|
+
chatNodeBottom: (key: string) => ObservableSnapshot<boolean>;
|
|
156
201
|
/** Resolve the stable Turn-process source for one Chat Node key. */
|
|
157
202
|
chatNodeProcess: (key: string) => ChatNodeProcessSource;
|
|
158
203
|
/** Resolve one optional group without subscribing the root View to its data. */
|
|
@@ -182,8 +227,19 @@ export interface ChatViewInjected {
|
|
|
182
227
|
editUserMessage?: ((text: string) => void) | undefined;
|
|
183
228
|
fileMentions: (owner: TurnTailOwnerProps) => MarkdownFileMentions | undefined;
|
|
184
229
|
}
|
|
230
|
+
/** Existing Session-owned node sources shared by the view and its flow renderer. */
|
|
231
|
+
export type ChatFlowDataInjected = Pick<ChatViewInjected, 'hooks' | 'keyedHooks'>;
|
|
232
|
+
/** Ordered rows and reconciled local echoes rendered inside one Chat viewport. */
|
|
233
|
+
export interface ChatFlowOwnerProps extends Pick<ChatNodeOwnerProps, 'cwd' | 'openSkill' | 'openFile' | 'inspectCall' | 'forkAt' | 'editUserMessage' | 'loadImage' | 'fileMentions'> {
|
|
234
|
+
readonly entries: readonly RenderEntry[];
|
|
235
|
+
readonly pendingInputs: readonly (PendingSubmission | InboxState['next-step'][number])[];
|
|
236
|
+
readonly lastInputTurn: number | undefined;
|
|
237
|
+
readonly deferCollapse: boolean;
|
|
238
|
+
}
|
|
239
|
+
/** Full props of the Chat-owned flow renderer. */
|
|
240
|
+
export type ChatFlowSlotProps = PropsRuntime<'conversation.chat.flow'> & PropsRenderSlots<'conversation.chat.node' | 'conversation.message.images'> & PropsStore<ChatStore> & InjectFace<ChatFlowDataInjected> & PropsLocale<'chat'>;
|
|
185
241
|
/** Full Chat view props. */
|
|
186
|
-
export type ChatViewSlotProps = PropsRuntime<'conversation.view'> & PropsRenderSlots<'conversation.chat.
|
|
242
|
+
export type ChatViewSlotProps = PropsRuntime<'conversation.view'> & PropsRenderSlots<'conversation.chat.flow'> & PropsStore<ChatStore> & InjectFace<ChatViewInjected> & PropsLocale<'chat'>;
|
|
187
243
|
/** Full props of the durable-message image renderer. */
|
|
188
244
|
export type MessageImagesProps = PropsRuntime<'conversation.message.images'> & PropsLocale<'conversation'>;
|
|
189
245
|
declare module '@qilin-agent/client-ui-slots' {
|
|
@@ -195,7 +251,23 @@ declare module '@qilin-agent/client-ui-slots' {
|
|
|
195
251
|
/** Chat target, transcript node, statistics, and details copy. */
|
|
196
252
|
chat: import('../locale.ts').ChatKey;
|
|
197
253
|
}
|
|
254
|
+
interface SlotFactoryMap {
|
|
255
|
+
/** Session-independent reasoning Markdown with Chat labels and compact typography. */
|
|
256
|
+
'conversation.chat.reasoning.content': {
|
|
257
|
+
scope: 'root';
|
|
258
|
+
props: ReasoningContentInput;
|
|
259
|
+
locale: 'chat';
|
|
260
|
+
};
|
|
261
|
+
}
|
|
198
262
|
interface SlotMap {
|
|
263
|
+
/** Ordered Chat rows and local echoes with viewport-bound visibility hooks. */
|
|
264
|
+
'conversation.chat.flow': {
|
|
265
|
+
kind: 'single';
|
|
266
|
+
scope: 'session';
|
|
267
|
+
owner: ChatFlowOwnerProps;
|
|
268
|
+
hookContext: ChatFlowHookContext;
|
|
269
|
+
inject: ChatFlowInjected;
|
|
270
|
+
};
|
|
199
271
|
/**
|
|
200
272
|
* Final Chat node renderer, keyed by `ChatNodeKind`. The component receives
|
|
201
273
|
* the typed node, shared Chat actions, and Turn-data hook. Reusing a key
|
|
@@ -223,6 +295,16 @@ declare module '@qilin-agent/client-ui-slots' {
|
|
|
223
295
|
scope: 'session';
|
|
224
296
|
owner: MessageImagesOwnerProps;
|
|
225
297
|
};
|
|
298
|
+
/**
|
|
299
|
+
* Expanded reasoning body with the unchanged model text. The official entry
|
|
300
|
+
* has priority 100 and calls the reasoning Content Factory; smaller priority
|
|
301
|
+
* values replace it. Contributions must preserve access to the original text.
|
|
302
|
+
*/
|
|
303
|
+
'conversation.chat.reasoning.body': {
|
|
304
|
+
kind: 'single';
|
|
305
|
+
scope: 'session';
|
|
306
|
+
owner: ReasoningBodyOwnerProps;
|
|
307
|
+
};
|
|
226
308
|
/**
|
|
227
309
|
* Command row keyed by the command name. The component receives the folded
|
|
228
310
|
* command lifecycle and linked compaction when present. Reusing a key
|
|
@@ -23,6 +23,8 @@ export interface ChatNodeStore {
|
|
|
23
23
|
get(key: string): ChatConversationViewNode | undefined;
|
|
24
24
|
/** @param key - stable Conversation Context key. @returns its identity-stable observable source. */
|
|
25
25
|
source(key: string): ChatNodeSource;
|
|
26
|
+
/** @param key - Chat Node identity. @returns whether the visible Node belongs to the last Turn in the loaded timeline. */
|
|
27
|
+
bottomSource(key: string): ObservableSnapshot<boolean>;
|
|
26
28
|
/**
|
|
27
29
|
* Observe one Turn's data for a single Node kind, including hidden Nodes, in anchor order.
|
|
28
30
|
* Other Turns and kinds do not notify this source.
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
/** Chat-owned per-Session view state. */
|
|
2
2
|
/** Tool call identity as carried by Chat nodes. */
|
|
3
3
|
export type ToolCallId = string;
|
|
4
|
-
/** One
|
|
4
|
+
/** One manual whole-Turn disclosure choice for a Turn answer generation. */
|
|
5
5
|
export interface TurnProcessViewEntry {
|
|
6
6
|
readonly turn: number;
|
|
7
7
|
readonly answerStep: number;
|
|
8
|
+
/** Explicitly collapsed; absent means explicitly opened. */
|
|
9
|
+
readonly collapsed?: true;
|
|
8
10
|
}
|
|
9
11
|
/** Per-Session state shared only by the Chat view and details surface. */
|
|
10
12
|
export interface ChatStoreState {
|
|
@@ -18,7 +18,7 @@ export type { ChatStoreState, ToolCallId, TurnProcessViewEntry } from './contrac
|
|
|
18
18
|
export type { TranscriptViewRowInjected, TranscriptViewRowProps } from './settings/TranscriptViewRow.tsx';
|
|
19
19
|
export type { TranscriptViewMode } from '../chat-settings.ts';
|
|
20
20
|
export type { ChatPresentationPolicy } from './presentation-policy.ts';
|
|
21
|
-
export type { AssistantActionOwnerProps, ChatFileMentions, ChatNodeHookContext, ChatNodeInjected, ChatNodeOwnerProps, ChatNodeViewProps, ChatScrollPosition, ChatStore, ChatViewInjected, ChatViewSlotProps, CommandRowOwnerProps, CommandRowProps, MessageImagesProps, OpenFileOptions, PerformanceUsageInjected, PresentationInjected, TurnProcessOwnerProps, TurnTailOwnerProps, UseChat, UseChatNodeTurnData, UseDisclosure, UsePresentation, } from './contract/slots.ts';
|
|
21
|
+
export type { AssistantActionOwnerProps, ChatFileMentions, ChatNodeHookContext, ChatNodeInjected, ChatNodeOwnerProps, ChatNodeViewProps, ChatScrollPosition, ChatStore, ChatViewInjected, ChatViewSlotProps, ChatFlowDataInjected, ChatFlowHookContext, ChatFlowInjected, ChatFlowOwnerProps, ChatFlowSlotProps, UseGroupHeaderAction, ReasoningBodyOwnerProps, ReasoningContentInput, CommandRowOwnerProps, CommandRowProps, MessageImagesProps, OpenFileOptions, PerformanceUsageInjected, PresentationInjected, TurnProcessOwnerProps, TurnTailOwnerProps, UseChat, UseChatNodeTurnData, UseDisclosure, UsePresentation, UseGroupAction, } from './contract/slots.ts';
|
|
22
22
|
export type { ProcessActivity, ProcessActivitySummary, ProcessGroupData, } from './contract/process-groups.ts';
|
|
23
23
|
export type { TurnProcessSpec, } from './contract/turn-process.ts';
|
|
24
24
|
export type { ChatKey } from './locale.ts';
|
|
@@ -45,6 +45,10 @@ export declare const zh: {
|
|
|
45
45
|
'settings.links.description': string;
|
|
46
46
|
'settings.links.sidebar': string;
|
|
47
47
|
'settings.links.newTab': string;
|
|
48
|
+
'settings.collapse.title': string;
|
|
49
|
+
'settings.collapse.description': string;
|
|
50
|
+
'settings.collapse.completion': string;
|
|
51
|
+
'settings.collapse.nextInput': string;
|
|
48
52
|
'fileOpen.title': string;
|
|
49
53
|
'fileOpen.unknown': string;
|
|
50
54
|
'message.extraBlock': string;
|
|
@@ -233,6 +237,10 @@ export declare const en: {
|
|
|
233
237
|
'settings.links.description': string;
|
|
234
238
|
'settings.links.sidebar': string;
|
|
235
239
|
'settings.links.newTab': string;
|
|
240
|
+
'settings.collapse.title': string;
|
|
241
|
+
'settings.collapse.description': string;
|
|
242
|
+
'settings.collapse.completion': string;
|
|
243
|
+
'settings.collapse.nextInput': string;
|
|
236
244
|
'fileOpen.title': string;
|
|
237
245
|
'fileOpen.unknown': string;
|
|
238
246
|
'message.extraBlock': string;
|