@molecule/app-ide-react 1.19.13 → 1.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatPanel.d.ts","sourceRoot":"","sources":["../../src/components/ChatPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAa,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"ChatPanel.d.ts","sourceRoot":"","sources":["../../src/components/ChatPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
import { Fragment, memo, useCallback, useEffect, useMemo, useReducer, useRef, useState, } from 'react';
|
|
2
|
+
import { Fragment, memo, useCallback, useEffect, useLayoutEffect, useMemo, useReducer, useRef, useState, } from 'react';
|
|
3
3
|
import { formatTokenCount, isDeprecated, partitionByDeprecation, PROVIDER_BRAND_COLORS, } from '@molecule/app-ai-models';
|
|
4
4
|
import { getProvider as getVoiceProvider, listVoiceEngines, selectVoiceEngine, voiceEngineCoversLanguage, } from '@molecule/app-ai-voice';
|
|
5
5
|
import { getCountryFlag } from '@molecule/app-country-flags';
|
|
@@ -522,6 +522,13 @@ function ThinkingBlock({ content, durationMs, isStreaming, }) {
|
|
|
522
522
|
// ---------------------------------------------------------------------------
|
|
523
523
|
/** Height threshold (px) above which user messages get collapsed. */
|
|
524
524
|
const USER_MSG_COLLAPSE_HEIGHT = 150;
|
|
525
|
+
/**
|
|
526
|
+
* Distance from the top (px) at which scrolling up pages in older timeline
|
|
527
|
+
* items. Same idea as the 80px bottom threshold of the stick-to-bottom
|
|
528
|
+
* detector: a margin, so the trigger fires while the user is still moving,
|
|
529
|
+
* not only pinned exactly at scrollTop 0.
|
|
530
|
+
*/
|
|
531
|
+
const LOAD_EARLIER_THRESHOLD_PX = 120;
|
|
525
532
|
// ---------------------------------------------------------------------------
|
|
526
533
|
// App version (P4-08)
|
|
527
534
|
// ---------------------------------------------------------------------------
|
|
@@ -1693,7 +1700,11 @@ function ChatInner({ projectId, endpoint, initialMessage, onInitialMessageSent,
|
|
|
1693
1700
|
// The tests strip sits above the commit bar and starts collapsed, like it.
|
|
1694
1701
|
const [testsBarExpanded, setTestsBarExpanded] = useState(false);
|
|
1695
1702
|
const [commitCards, setCommitCards] = useState([]);
|
|
1696
|
-
/**
|
|
1703
|
+
/**
|
|
1704
|
+
* Number of timeline items rendered in the DOM. Starts at the most recent
|
|
1705
|
+
* page and grows as the user scrolls toward the top of the conversation
|
|
1706
|
+
* (auto-load of earlier history — no button to click).
|
|
1707
|
+
*/
|
|
1697
1708
|
const [maxVisibleItems, setMaxVisibleItems] = useState(60);
|
|
1698
1709
|
// ── Undo tracking ───────────────────────────────────────────────────────────
|
|
1699
1710
|
// Tracks which tool calls are currently in the "undone" state so /undo can
|
|
@@ -3199,6 +3210,33 @@ function ChatInner({ projectId, endpoint, initialMessage, onInitialMessageSent,
|
|
|
3199
3210
|
const messagesContainerRef = useRef(null);
|
|
3200
3211
|
const userScrolledUpRef = useRef(false);
|
|
3201
3212
|
const sentInitialRef = useRef(null);
|
|
3213
|
+
// ── Auto-load earlier history on scroll-up ─────────────────────────────────
|
|
3214
|
+
// The timeline only mounts the most recent `maxVisibleItems` items; when the
|
|
3215
|
+
// user scrolls near the top, the next older page is mounted in and the scroll
|
|
3216
|
+
// position is anchored (see the layout effect below) so the reading place
|
|
3217
|
+
// stays put across the prepend. Replaces the old "Show earlier messages"
|
|
3218
|
+
// button (2026-10-11): paging happens as you approach the top, not on click.
|
|
3219
|
+
//
|
|
3220
|
+
// The once-registered `scroll` listener reads both values through refs —
|
|
3221
|
+
// `timeline` does not exist yet where the listener is declared, and the
|
|
3222
|
+
// listener must not re-register on every streamed item.
|
|
3223
|
+
/** scrollHeight captured when a page load was triggered; consumed by the anchor effect. */
|
|
3224
|
+
const pendingAnchorHeightRef = useRef(null);
|
|
3225
|
+
/** Whether older items are currently held back (assigned during render). */
|
|
3226
|
+
const hasHiddenEarlierRef = useRef(false);
|
|
3227
|
+
// Keeps the viewport still across a prepend. Native scroll anchoring is
|
|
3228
|
+
// disabled on the container (overflowAnchor: 'none') so this is the only
|
|
3229
|
+
// mechanism adjusting the offset — otherwise both would fire and double-jump.
|
|
3230
|
+
useLayoutEffect(() => {
|
|
3231
|
+
const anchor = pendingAnchorHeightRef.current;
|
|
3232
|
+
if (anchor === null)
|
|
3233
|
+
return;
|
|
3234
|
+
pendingAnchorHeightRef.current = null;
|
|
3235
|
+
const el = messagesContainerRef.current;
|
|
3236
|
+
if (!el)
|
|
3237
|
+
return;
|
|
3238
|
+
el.scrollTop += el.scrollHeight - anchor;
|
|
3239
|
+
}, [maxVisibleItems]);
|
|
3202
3240
|
// "Should we stick to the bottom?" — derived ONLY from the actual scroll
|
|
3203
3241
|
// position after a scroll event, never from touch direction or content size.
|
|
3204
3242
|
//
|
|
@@ -3219,6 +3257,12 @@ function ChatInner({ projectId, endpoint, initialMessage, onInitialMessageSent,
|
|
|
3219
3257
|
return;
|
|
3220
3258
|
const onScroll = () => {
|
|
3221
3259
|
userScrolledUpRef.current = el.scrollHeight - el.scrollTop - el.clientHeight > 80;
|
|
3260
|
+
// Near the top with older history held back: mount the next page in. The
|
|
3261
|
+
// anchor effect above keeps the viewport still across the prepend.
|
|
3262
|
+
if (el.scrollTop <= LOAD_EARLIER_THRESHOLD_PX && hasHiddenEarlierRef.current) {
|
|
3263
|
+
pendingAnchorHeightRef.current = el.scrollHeight;
|
|
3264
|
+
setMaxVisibleItems((n) => n + 40);
|
|
3265
|
+
}
|
|
3222
3266
|
};
|
|
3223
3267
|
el.addEventListener('scroll', onScroll, { passive: true });
|
|
3224
3268
|
return () => el.removeEventListener('scroll', onScroll);
|
|
@@ -5863,6 +5907,10 @@ function ChatInner({ projectId, endpoint, initialMessage, onInitialMessageSent,
|
|
|
5863
5907
|
});
|
|
5864
5908
|
};
|
|
5865
5909
|
const renderedTimeline = timeline.length > maxVisibleItems ? timeline.slice(-maxVisibleItems) : timeline;
|
|
5910
|
+
// Read by the once-registered scroll listener (declared with the other scroll
|
|
5911
|
+
// refs, before `timeline` exists) to decide whether scrolling near the top
|
|
5912
|
+
// should mount the next older page.
|
|
5913
|
+
hasHiddenEarlierRef.current = timeline.length > maxVisibleItems;
|
|
5866
5914
|
/**
|
|
5867
5915
|
* Where (if anywhere) a timeline item carries its time. Typed user messages and
|
|
5868
5916
|
* team notes carry it in their header row and always qualify; Synthase replies
|
|
@@ -5981,7 +6029,15 @@ function ChatInner({ projectId, endpoint, initialMessage, onInitialMessageSent,
|
|
|
5981
6029
|
// is gone. No scrollbar-gutter:stable reservation (it made the right padding
|
|
5982
6030
|
// visibly larger than the left); the thin scrollbar just overlays when the
|
|
5983
6031
|
// timeline overflows.
|
|
5984
|
-
|
|
6032
|
+
// overflowAnchor off: prepending an older page above the viewport is
|
|
6033
|
+
// compensated by ChatPanel's own anchor effect — native scroll anchoring
|
|
6034
|
+
// must not adjust the offset on top of it (double correction = jump).
|
|
6035
|
+
style: {
|
|
6036
|
+
flex: 1,
|
|
6037
|
+
overflowY: 'auto',
|
|
6038
|
+
scrollbarWidth: 'thin',
|
|
6039
|
+
overflowAnchor: 'none',
|
|
6040
|
+
}, children: [timeline.length === 0 &&
|
|
5985
6041
|
!isLoading &&
|
|
5986
6042
|
!isRemoteStreaming &&
|
|
5987
6043
|
!awaitingSandboxBoot &&
|
|
@@ -5996,14 +6052,7 @@ function ChatInner({ projectId, endpoint, initialMessage, onInitialMessageSent,
|
|
|
5996
6052
|
textAlign: 'center',
|
|
5997
6053
|
}, children: [_jsx(Icon, { name: "logo-mark", size: 28, "aria-hidden": "true", style: { opacity: 0.5 } }), _jsx("span", { style: { maxWidth: 320 }, children: t('ide.chat.emptyState', undefined, {
|
|
5998
6054
|
defaultValue: 'Describe what you want to build...',
|
|
5999
|
-
}) })] })),
|
|
6000
|
-
// A quiet, non-committal timeline action — SECONDARY, the semantic
|
|
6001
|
-
// DESIGN.md reserves for what sits beside the real CTAs. Box model,
|
|
6002
|
-
// type scale and hover come from the ClassMap instead of the
|
|
6003
|
-
// hand-rolled 4px-radius currentColor frame this used to be.
|
|
6004
|
-
className: cm.cn(cm.button({ variant: 'solid', color: 'secondary', size: 'xs' }), cm.touchTargetCompact), children: t('ide.chat.showEarlier', undefined, {
|
|
6005
|
-
defaultValue: 'Show earlier messages',
|
|
6006
|
-
}) }) })), renderedTimeline.map((item) => (_jsx(ChatItemBoundary, { onError: onRenderError, render: () => withTimelineTimestamp(item, (() => {
|
|
6055
|
+
}) })] })), renderedTimeline.map((item) => (_jsx(ChatItemBoundary, { onError: onRenderError, render: () => withTimelineTimestamp(item, (() => {
|
|
6007
6056
|
if (item.kind === 'commit')
|
|
6008
6057
|
return (_jsx(CommitCardItem, { card: item.card, onRevert: canEdit === false ? undefined : handleRevertCommit }, item.card.id));
|
|
6009
6058
|
if (item.kind === 'activity')
|