diff --git a/packages/app/src/components/dialog-delete-session.tsx b/packages/app/src/components/dialog-delete-session.tsx new file mode 100644 index 000000000..90c169a87 --- /dev/null +++ b/packages/app/src/components/dialog-delete-session.tsx @@ -0,0 +1,52 @@ +import { Dialog } from "@opencode-ai/ui/dialog" +import { Button } from "@opencode-ai/ui/button" +import { useDialog } from "@opencode-ai/ui/context/dialog" +import { createMemo, createSignal } from "solid-js" +import { useLanguage } from "@/context/language" +import { useSync } from "@/context/sync" +import { sessionTitle } from "@/utils/session-title" + +export function DialogDeleteSession(props: { + sessionID: string + onConfirm: () => Promise | void +}) { + const sync = useSync() + const language = useLanguage() + const dialog = useDialog() + const [deleting, setDeleting] = createSignal(false) + + const name = createMemo( + () => sessionTitle(sync.session.get(props.sessionID)?.title) ?? language.t("command.session.new"), + ) + + const handleDelete = async () => { + if (deleting()) return + setDeleting(true) + try { + await props.onConfirm() + dialog.close() + } finally { + setDeleting(false) + } + } + + return ( + +
+
+ + {language.t("session.delete.confirm", { name: name() })} + +
+
+ + +
+
+
+ ) +} diff --git a/packages/app/src/components/dialog-select-model.tsx b/packages/app/src/components/dialog-select-model.tsx index 39b0c3dc8..a8577228d 100644 --- a/packages/app/src/components/dialog-select-model.tsx +++ b/packages/app/src/components/dialog-select-model.tsx @@ -82,7 +82,7 @@ const ModelList: Component<{
{i.name} - {(tag) => {language.t(`model.tag.${tag}`)}} + {(tag) => {language.t(`model.tag.${tag}`)}}
) @@ -166,8 +166,8 @@ export function ModelSelectorPopover(props: { { close("escape") event.preventDefault() @@ -196,9 +196,9 @@ export function ModelSelectorPopover(props: {
= (props) => { as="div" variant="ghost" size="normal" - class="h-[28px]! min-w-0 w-44 px-3 justify-start! text-13-medium! text-text-base group rounded-full! border! border-border-strong-base! transition-colors hover:bg-surface-base-hover" + class="h-[28px]! min-w-0 w-44 px-1.5 justify-start! text-13-regular! text-text-base group rounded-xl! transition-colors hover:bg-surface-base-hover" style={triggerStyle()} onClick={() => { void import("@/components/dialog-select-model-unpaid").then((x) => { @@ -1163,7 +1164,7 @@ export const PromptInput: Component = (props) => { size: "normal", style: triggerStyle(), class: - "h-[28px]! min-w-0 w-44 px-3 justify-start! text-13-medium! text-text-base group rounded-full! border! border-border-strong-base! transition-colors hover:bg-surface-base-hover", + "h-[28px]! min-w-0 w-44 px-1.5 justify-start! text-13-regular! text-text-base group rounded-xl! transition-colors hover:bg-surface-base-hover", "data-action": "prompt-model", }} onClose={restoreFocus} @@ -1207,21 +1208,23 @@ export const PromptInput: Component = (props) => { "aria-haspopup": "menu", style: triggerStyle(), class: - "h-[28px] px-3 max-w-[140px] inline-flex items-center gap-1.5 rounded-full border border-border-strong-base text-13-medium text-text-base transition-colors hover:bg-surface-base-hover", + "h-[28px] px-2 max-w-[160px] inline-flex items-center gap-1.5 rounded-xl text-13-regular text-text-base transition-colors hover:bg-surface-base-hover", } as any } trigger={ <> - + {translateVariant(language.t, local.model.variant.current() ?? "default")} } - class="min-w-32 border border-border-base bg-surface-raised-stronger-non-alpha p-2 shadow-md" - style={{ "border-radius": "16px" }} + class="min-w-32 bg-surface-raised-stronger-non-alpha" >
+
+ {language.t("prompt.variant.popover.title")} +
{(variant) => { const active = createMemo(() => (local.model.variant.current() ?? "default") === variant) @@ -1230,8 +1233,7 @@ export const PromptInput: Component = (props) => { type="button" role="menuitemradio" aria-checked={active()} - class="flex w-full items-center justify-between gap-2 rounded-md px-2 py-1.5 text-left text-13-medium text-text-strong outline-none hover:bg-surface-raised-base-hover focus-visible:bg-surface-raised-base-hover" - classList={{ "font-medium": active() }} + class="flex w-full items-center justify-between gap-2 rounded-md px-2 py-1.5 text-left text-13-regular text-text-strong outline-none hover:bg-surface-raised-base-hover focus-visible:bg-surface-raised-base-hover" onClick={() => { local.model.variant.set(variant === "default" ? undefined : variant) setVariantOpen(false) @@ -1435,7 +1437,6 @@ export const PromptInput: Component = (props) => { onSubmit={handleSubmit} classList={{ "group/prompt-input": true, - "focus-within:shadow-xs-border": true, "border-icon-info-active border-dashed": store.draggingType !== null, [props.class ?? ""]: !!props.class, }} @@ -1479,7 +1480,7 @@ export const PromptInput: Component = (props) => { }} >
(scrollRef = el)} style={{ "scroll-padding-bottom": space }} > @@ -1566,7 +1567,7 @@ export const PromptInput: Component = (props) => { data-action="prompt-attach" type="button" variant="ghost" - class="size-7 shrink-0 p-0" + class="size-7 shrink-0 p-0 rounded-xl!" style={buttons()} onClick={pick} disabled={store.mode !== "normal"} @@ -1586,6 +1587,7 @@ export const PromptInput: Component = (props) => {
+ - {label()} + {label()} } - class="min-w-56 max-w-xs border border-border-base bg-surface-raised-stronger-non-alpha p-2 shadow-md" - style={{ "border-radius": "16px" }} + class="min-w-56 max-w-xs bg-surface-raised-stronger-non-alpha" >
-
+
{language.t("workspace.chip.popover.title")}
0} - fallback={
{language.t("workspace.chip.empty")}
} + fallback={
{language.t("workspace.chip.empty")}
} > {(workspace) => { @@ -96,17 +95,14 @@ export function WorkspaceChip(props: { style?: JSX.CSSProperties | string } = {} type="button" role="menuitemradio" aria-checked={active()} - class="flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-13-medium outline-none hover:bg-surface-raised-base-hover focus-visible:bg-surface-raised-base-hover" + class="flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-13-regular outline-none hover:bg-surface-raised-base-hover focus-visible:bg-surface-raised-base-hover" onClick={() => { navigate(`/${base64Encode(workspace.path)}/session`) setOpen(false) }} > - + {getFilename(workspace.path)} @@ -122,7 +118,7 @@ export function WorkspaceChip(props: { style?: JSX.CSSProperties | string } = {} type="button" role="menuitem" data-action="workspace-chip-add" - class="flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-13-medium text-text-base outline-none hover:bg-surface-raised-base-hover focus-visible:bg-surface-raised-base-hover" + class="flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-13-regular text-text-base outline-none hover:bg-surface-raised-base-hover focus-visible:bg-surface-raised-base-hover" onClick={() => { setOpen(false) layoutPage.openProject() diff --git a/packages/app/src/components/session-context-usage.tsx b/packages/app/src/components/session-context-usage.tsx index 5675c9922..bd84e7928 100644 --- a/packages/app/src/components/session-context-usage.tsx +++ b/packages/app/src/components/session-context-usage.tsx @@ -75,7 +75,7 @@ export function SessionContextUsage(props: SessionContextUsageProps) { -