|
|
@@ -1745,80 +1745,84 @@ export default function Page() {
|
|
|
|
|
|
<div
|
|
|
classList={{
|
|
|
- "@container relative shrink-0 flex flex-col min-h-0 h-full bg-background-stronger flex-1 md:flex-none": true,
|
|
|
+ "@container relative shrink-0 flex flex-col min-h-0 h-full flex-1 md:flex-none": true,
|
|
|
"duration-[240ms] ease-[cubic-bezier(0.22,1,0.36,1)] will-change-[width] motion-reduce:transition-none":
|
|
|
!size.active() && !ui.reviewSnap,
|
|
|
"transition-[width]": !isV2NewSessionPage(),
|
|
|
- "rounded-[10px] shadow-[var(--v2-elevation-raised)]": settings.general.newLayoutDesigns() && !!params.id,
|
|
|
}}
|
|
|
style={{
|
|
|
width: sessionPanelWidth(),
|
|
|
}}
|
|
|
>
|
|
|
<div
|
|
|
- class="flex-1 min-h-0 overflow-hidden"
|
|
|
classList={{
|
|
|
- "rounded-[10px]": settings.general.newLayoutDesigns(),
|
|
|
+ "flex-1 min-h-0 flex flex-col": true,
|
|
|
+ "bg-v2-background-bg-deep": isV2NewSessionPage(),
|
|
|
+ "bg-background-stronger": !isV2NewSessionPage(),
|
|
|
+ "rounded-[10px] overflow-hidden": settings.general.newLayoutDesigns(),
|
|
|
+ "shadow-[var(--v2-elevation-raised)]": settings.general.newLayoutDesigns() && !!params.id,
|
|
|
}}
|
|
|
>
|
|
|
- <Switch>
|
|
|
- <Match when={params.id && mobileChanges()}>
|
|
|
- <div class="relative h-full overflow-hidden">
|
|
|
- {reviewContent({
|
|
|
- diffStyle: "unified",
|
|
|
- classes: {
|
|
|
- root: "pb-8",
|
|
|
- header: "px-4",
|
|
|
- container: "px-4",
|
|
|
- },
|
|
|
- loadingClass: "px-4 py-4 text-text-weak",
|
|
|
- emptyClass: "h-full pb-64 -mt-4 flex flex-col items-center justify-center text-center gap-6",
|
|
|
- })}
|
|
|
- </div>
|
|
|
- </Match>
|
|
|
- <Match when={params.id}>
|
|
|
- <Show when={messagesReady()}>
|
|
|
- <MessageTimeline
|
|
|
- actions={actions}
|
|
|
- scroll={ui.scroll}
|
|
|
- onResumeScroll={resumeScroll}
|
|
|
- setScrollRef={setScrollRef}
|
|
|
- onScheduleScrollState={scheduleScrollState}
|
|
|
- onAutoScrollHandleScroll={autoScroll.handleScroll}
|
|
|
- onMarkScrollGesture={markScrollGesture}
|
|
|
- hasScrollGesture={hasScrollGesture}
|
|
|
- onUserScroll={markUserScroll}
|
|
|
- onHistoryScroll={historyLoader.onScrollerScroll}
|
|
|
- onAutoScrollInteraction={autoScroll.handleInteraction}
|
|
|
- shouldAnchorBottom={() =>
|
|
|
- !location.hash && !store.messageId && !ui.pendingMessage && !autoScroll.userScrolled()
|
|
|
- }
|
|
|
- centered={centered()}
|
|
|
- setContentRef={(el) => {
|
|
|
- content = el
|
|
|
- autoScroll.contentRef(el)
|
|
|
-
|
|
|
- const root = scroller
|
|
|
- if (root) scheduleScrollState(root)
|
|
|
- }}
|
|
|
- historyShift={historyLoader.shift()}
|
|
|
- userMessages={historyLoader.userMessages()}
|
|
|
- anchor={anchor}
|
|
|
- setRevealMessage={(fn) => {
|
|
|
- revealMessage = fn
|
|
|
- }}
|
|
|
- />
|
|
|
- </Show>
|
|
|
- </Match>
|
|
|
- <Match when={true}>
|
|
|
- <Show when={newSessionDesign()} fallback={<NewSessionView worktree={newSessionWorktree()} />}>
|
|
|
- <NewSessionDesignView>{composerRegion("inline")}</NewSessionDesignView>
|
|
|
- </Show>
|
|
|
- </Match>
|
|
|
- </Switch>
|
|
|
- </div>
|
|
|
+ <div class="flex-1 min-h-0 overflow-hidden">
|
|
|
+ <Switch>
|
|
|
+ <Match when={params.id && mobileChanges()}>
|
|
|
+ <div class="relative h-full overflow-hidden">
|
|
|
+ {reviewContent({
|
|
|
+ diffStyle: "unified",
|
|
|
+ classes: {
|
|
|
+ root: "pb-8",
|
|
|
+ header: "px-4",
|
|
|
+ container: "px-4",
|
|
|
+ },
|
|
|
+ loadingClass: "px-4 py-4 text-text-weak",
|
|
|
+ emptyClass: "h-full pb-64 -mt-4 flex flex-col items-center justify-center text-center gap-6",
|
|
|
+ })}
|
|
|
+ </div>
|
|
|
+ </Match>
|
|
|
+ <Match when={params.id}>
|
|
|
+ <Show when={messagesReady()}>
|
|
|
+ <MessageTimeline
|
|
|
+ actions={actions}
|
|
|
+ scroll={ui.scroll}
|
|
|
+ onResumeScroll={resumeScroll}
|
|
|
+ setScrollRef={setScrollRef}
|
|
|
+ onScheduleScrollState={scheduleScrollState}
|
|
|
+ onAutoScrollHandleScroll={autoScroll.handleScroll}
|
|
|
+ onMarkScrollGesture={markScrollGesture}
|
|
|
+ hasScrollGesture={hasScrollGesture}
|
|
|
+ onUserScroll={markUserScroll}
|
|
|
+ onHistoryScroll={historyLoader.onScrollerScroll}
|
|
|
+ onAutoScrollInteraction={autoScroll.handleInteraction}
|
|
|
+ shouldAnchorBottom={() =>
|
|
|
+ !location.hash && !store.messageId && !ui.pendingMessage && !autoScroll.userScrolled()
|
|
|
+ }
|
|
|
+ centered={centered()}
|
|
|
+ setContentRef={(el) => {
|
|
|
+ content = el
|
|
|
+ autoScroll.contentRef(el)
|
|
|
+
|
|
|
+ const root = scroller
|
|
|
+ if (root) scheduleScrollState(root)
|
|
|
+ }}
|
|
|
+ historyShift={historyLoader.shift()}
|
|
|
+ userMessages={historyLoader.userMessages()}
|
|
|
+ anchor={anchor}
|
|
|
+ setRevealMessage={(fn) => {
|
|
|
+ revealMessage = fn
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ </Show>
|
|
|
+ </Match>
|
|
|
+ <Match when={true}>
|
|
|
+ <Show when={newSessionDesign()} fallback={<NewSessionView worktree={newSessionWorktree()} />}>
|
|
|
+ <NewSessionDesignView>{composerRegion("inline")}</NewSessionDesignView>
|
|
|
+ </Show>
|
|
|
+ </Match>
|
|
|
+ </Switch>
|
|
|
+ </div>
|
|
|
|
|
|
- <Show when={params.id || !newSessionDesign()}>{composerRegion("dock")}</Show>
|
|
|
+ <Show when={params.id || !newSessionDesign()}>{composerRegion("dock")}</Show>
|
|
|
+ </div>
|
|
|
|
|
|
<Show when={desktopReviewOpen()}>
|
|
|
<div onPointerDown={() => size.start()}>
|