-
}>
-
-
-
-
-
-
-
-
-
-
0}>
-
-
-
+}): JSX.Element => {
+ const [slot, setSlot] = createStore({
+ open: false,
+ show: false,
+ fade: false,
+ })
+
+ let f: number | undefined
+ const clear = () => {
+ if (f !== undefined) window.clearTimeout(f)
+ f = undefined
+ }
+
+ onCleanup(clear)
+ createEffect(
+ on(
+ () => props.isWorking(),
+ (on, prev) => {
+ clear()
+ if (on) {
+ setSlot({ open: true, show: true, fade: false })
+ return
+ }
+ if (prev) {
+ setSlot({ open: false, show: true, fade: true })
+ f = window.setTimeout(() => setSlot({ show: false, fade: false }), 260)
+ return
+ }
+ setSlot({ open: false, show: false, fade: false })
+ },
+ { defer: true },
+ ),
+ )
+
+ return (
+
{
+ props.setHoverSession(undefined)
+ if (props.sidebarOpened()) return
+ props.clearHoverProjectSoon()
+ }}
+ >
+ 0)}>
+ 0,
+ }}
+ aria-hidden="true"
+ />
+
+
+
+
+
+
+ {props.session.title}
+
-
- {props.session.title}
-
-
-
-)
+
+ )
+}
const SessionHoverPreview = (props: {
mobile?: boolean
@@ -204,8 +253,18 @@ export const SessionItem = (props: SessionItemProps): JSX.Element => {
})
const isWorking = createMemo(() => {
if (hasPermissions()) return false
+ const pending = (sessionStore.message[props.session.id] ?? []).findLast(
+ (message) =>
+ message.role === "assistant" &&
+ typeof (message as { time?: { completed?: unknown } }).time?.completed !== "number",
+ )
const status = sessionStore.session_status[props.session.id]
- return status?.type === "busy" || status?.type === "retry"
+ return (
+ pending !== undefined ||
+ status?.type === "busy" ||
+ status?.type === "retry" ||
+ (status !== undefined && status.type !== "idle")
+ )
})
const tint = createMemo(() => {
@@ -300,7 +359,7 @@ export const SessionItem = (props: SessionItemProps): JSX.Element => {
return (
Promise
language: ReturnType
}): JSX.Element => (
-