Merge pull request #2527 from deepseek-harness/fix/cordis-tool-styles
fix(web): align the sidebar Cordis panel with menu and footer conventions
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import { useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'
|
||||
import type { JobView } from '@deepseek-ai/dsh-client-runtime/client'
|
||||
import { IconChevronDownOutline14, StateDot, type StateDotState } from '@deepseek-ai/dsh-client-ui-primitives'
|
||||
import { IconChevronDownOutline14, StateDot, useDismissOnOutsidePointer, type StateDotState } from '@deepseek-ai/dsh-client-ui-primitives'
|
||||
import type { PropsLocale, PropsRuntime, TranslateNS } from '@deepseek-ai/dsh-client-ui-slots'
|
||||
import { NS } from './locales.ts'
|
||||
import type {} from '@deepseek-ai/dsh-client-ui-conversation/client'
|
||||
@@ -101,16 +101,7 @@ export function JobListAction({ sessionId, useSessions, t }: JobListActionProps)
|
||||
const rows = useMemo(() => ordered(jobs), [jobs])
|
||||
const liveCount = useMemo(() => jobs.filter(isLive).length, [jobs])
|
||||
|
||||
useEffect(() => {
|
||||
if (!open) return
|
||||
const closeOutside = (event: PointerEvent): void => {
|
||||
if (event.target instanceof Node && !rootRef.current?.contains(event.target)) {
|
||||
setOpen(false)
|
||||
}
|
||||
}
|
||||
document.addEventListener('pointerdown', closeOutside)
|
||||
return () => { document.removeEventListener('pointerdown', closeOutside) }
|
||||
}, [open])
|
||||
useDismissOnOutsidePointer(rootRef, open, setOpen)
|
||||
|
||||
// The clock only runs while an open list is showing something that moves.
|
||||
useEffect(() => {
|
||||
|
||||
@@ -13,6 +13,7 @@ export { Input } from './Input.tsx'
|
||||
export { Menu } from './Menu.tsx'
|
||||
export type { MenuEntry, MenuItem, MenuSeparator, MenuLabel } from './Menu.tsx'
|
||||
export { useAnchoredMaxHeight } from './useAnchoredMaxHeight.ts'
|
||||
export { useDismissOnOutsidePointer } from './useDismissOnOutsidePointer.ts'
|
||||
export { HoverCard } from './HoverCard.tsx'
|
||||
export { Modal } from './Modal.tsx'
|
||||
export { OnboardingSurface } from './OnboardingSurface.tsx'
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
/**
|
||||
* Outside-pointer dismissal for trigger-owned popovers (jobs list, Cordis
|
||||
* panel): while the surface is open, a pointerdown outside the root closes it.
|
||||
*/
|
||||
import { useEffect } from 'react'
|
||||
import type { RefObject } from 'react'
|
||||
|
||||
/**
|
||||
* Close an open popover when a pointerdown lands outside its root element.
|
||||
* @param root - element containing both the trigger and the open surface.
|
||||
* @param open - whether the surface is showing; false detaches the listener.
|
||||
* @param setOpen - state setter invoked with false on an outside pointerdown.
|
||||
*/
|
||||
export function useDismissOnOutsidePointer(
|
||||
root: RefObject<HTMLElement | null>,
|
||||
open: boolean,
|
||||
setOpen: (open: boolean) => void,
|
||||
): void {
|
||||
useEffect(() => {
|
||||
if (!open) return
|
||||
const closeOutside = (event: PointerEvent): void => {
|
||||
if (event.target instanceof Node && !root.current?.contains(event.target)) {
|
||||
setOpen(false)
|
||||
}
|
||||
}
|
||||
document.addEventListener('pointerdown', closeOutside)
|
||||
return () => { document.removeEventListener('pointerdown', closeOutside) }
|
||||
}, [root, open, setOpen])
|
||||
}
|
||||
@@ -1,19 +1,19 @@
|
||||
/* Settings shell (figma 501:29904 mask context / 501:29947 panel): sidebar
|
||||
foot trigger row + centered 1080x700 modal panel. The trigger uses the
|
||||
sidebar's 34px compact row / 36px rail circle rhythm; the
|
||||
sidebar foot's 42px row / 36px rail circle rhythm; the
|
||||
panel is a two-column layout — 188px nav rail + content column with a
|
||||
54px header and the 24px-padded options area. */
|
||||
|
||||
/* Trigger row: match the other wide sidebar controls' compact vertical rhythm. */
|
||||
/* Trigger row: the 42px foot-row box shared with the Cordis footer action. */
|
||||
.trigger {
|
||||
flex: none;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
width: calc(100% + 8px);
|
||||
height: 34px;
|
||||
margin: 4px -4px 4px;
|
||||
padding: 6px 2px 6px 10px;
|
||||
width: calc(100% + 4px);
|
||||
height: 42px;
|
||||
margin: 4px -2px;
|
||||
padding: 0 10px 0 8px;
|
||||
box-sizing: border-box;
|
||||
border: none;
|
||||
border-radius: 12px;
|
||||
|
||||
Reference in New Issue
Block a user