tweak(ui): improve collpase area
This commit is contained in:
parent
5d419a0211
commit
752e449e38
2 changed files with 7 additions and 27 deletions
|
|
@ -233,25 +233,10 @@ export const SessionQuestionDock: Component<{ request: QuestionRequest; onSubmit
|
||||||
setStore("editing", false)
|
setStore("editing", false)
|
||||||
}
|
}
|
||||||
|
|
||||||
const click = (target: EventTarget | null) => {
|
|
||||||
if (store.sending) return
|
|
||||||
if (!(target instanceof Node)) {
|
|
||||||
fold()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
const list = root?.querySelector('[data-slot="question-options"]')
|
|
||||||
if (list instanceof HTMLElement && list.contains(target)) return
|
|
||||||
fold()
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<DockPrompt
|
<DockPrompt
|
||||||
kind="question"
|
kind="question"
|
||||||
ref={(el) => (root = el)}
|
ref={(el) => (root = el)}
|
||||||
bodyProps={{
|
|
||||||
onClick: (event) => click(event.target),
|
|
||||||
}}
|
|
||||||
header={
|
header={
|
||||||
<div
|
<div
|
||||||
data-action="session-question-toggle"
|
data-action="session-question-toggle"
|
||||||
|
|
@ -259,10 +244,7 @@ export const SessionQuestionDock: Component<{ request: QuestionRequest; onSubmit
|
||||||
role="button"
|
role="button"
|
||||||
tabIndex={0}
|
tabIndex={0}
|
||||||
style={{ margin: "0 -10px", padding: "0 0 0 10px" }}
|
style={{ margin: "0 -10px", padding: "0 0 0 10px" }}
|
||||||
onClick={(event) => {
|
onClick={fold}
|
||||||
event.stopPropagation()
|
|
||||||
fold()
|
|
||||||
}}
|
|
||||||
onKeyDown={(event) => {
|
onKeyDown={(event) => {
|
||||||
if (event.key !== "Enter" && event.key !== " ") return
|
if (event.key !== "Enter" && event.key !== " ") return
|
||||||
event.preventDefault()
|
event.preventDefault()
|
||||||
|
|
@ -314,14 +296,13 @@ export const SessionQuestionDock: Component<{ request: QuestionRequest; onSubmit
|
||||||
classList={{
|
classList={{
|
||||||
"mb-6": store.collapsed && picked() === 0,
|
"mb-6": store.collapsed && picked() === 0,
|
||||||
}}
|
}}
|
||||||
onClick={(event) => {
|
role={store.collapsed ? "button" : undefined}
|
||||||
event.stopPropagation()
|
tabIndex={store.collapsed ? 0 : undefined}
|
||||||
fold()
|
onClick={fold}
|
||||||
}}
|
|
||||||
onKeyDown={(event) => {
|
onKeyDown={(event) => {
|
||||||
|
if (!store.collapsed) return
|
||||||
if (event.key !== "Enter" && event.key !== " ") return
|
if (event.key !== "Enter" && event.key !== " ") return
|
||||||
event.preventDefault()
|
event.preventDefault()
|
||||||
event.stopPropagation()
|
|
||||||
fold()
|
fold()
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import type { ComponentProps, JSX } from "solid-js"
|
import type { JSX } from "solid-js"
|
||||||
import { DockShell, DockTray } from "./dock-surface"
|
import { DockShell, DockTray } from "./dock-surface"
|
||||||
|
|
||||||
export function DockPrompt(props: {
|
export function DockPrompt(props: {
|
||||||
|
|
@ -7,13 +7,12 @@ export function DockPrompt(props: {
|
||||||
children: JSX.Element
|
children: JSX.Element
|
||||||
footer: JSX.Element
|
footer: JSX.Element
|
||||||
ref?: (el: HTMLDivElement) => void
|
ref?: (el: HTMLDivElement) => void
|
||||||
bodyProps?: Omit<ComponentProps<"div">, "children">
|
|
||||||
}) {
|
}) {
|
||||||
const slot = (name: string) => `${props.kind}-${name}`
|
const slot = (name: string) => `${props.kind}-${name}`
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div data-component="dock-prompt" data-kind={props.kind} ref={props.ref}>
|
<div data-component="dock-prompt" data-kind={props.kind} ref={props.ref}>
|
||||||
<DockShell {...(props.bodyProps ?? {})} data-slot={slot("body")}>
|
<DockShell data-slot={slot("body")}>
|
||||||
<div data-slot={slot("header")}>{props.header}</div>
|
<div data-slot={slot("header")}>{props.header}</div>
|
||||||
<div data-slot={slot("content")}>{props.children}</div>
|
<div data-slot={slot("content")}>{props.children}</div>
|
||||||
</DockShell>
|
</DockShell>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue