diff options
| author | Adam <[email protected]> | 2025-12-14 20:32:14 -0600 |
|---|---|---|
| committer | Adam <[email protected]> | 2025-12-14 21:38:59 -0600 |
| commit | dda579c8ad30f81ade458769971d85ff7afee64c (patch) | |
| tree | 343c82906735fcfc82a5b2a178660aaab5bccb45 /packages/desktop/src/context | |
| parent | 4246cdb069502c96ab11e260eb36a07a0370b710 (diff) | |
| download | opencode-dda579c8ad30f81ade458769971d85ff7afee64c.tar.gz opencode-dda579c8ad30f81ade458769971d85ff7afee64c.zip | |
wip(desktop): progress
Diffstat (limited to 'packages/desktop/src/context')
| -rw-r--r-- | packages/desktop/src/context/dialog.tsx | 80 |
1 files changed, 0 insertions, 80 deletions
diff --git a/packages/desktop/src/context/dialog.tsx b/packages/desktop/src/context/dialog.tsx deleted file mode 100644 index cc49764fe..000000000 --- a/packages/desktop/src/context/dialog.tsx +++ /dev/null @@ -1,80 +0,0 @@ -import { createEffect, For, onCleanup, Show, type JSX } from "solid-js" -import { createStore } from "solid-js/store" -import { createSimpleContext } from "@opencode-ai/ui/context" - -type DialogElement = JSX.Element | (() => JSX.Element) - -export const { use: useDialog, provider: DialogProvider } = createSimpleContext({ - name: "Dialog", - init: () => { - const [store, setStore] = createStore({ - stack: [] as { - element: DialogElement - onClose?: () => void - }[], - }) - - function handleKeyDown(e: KeyboardEvent) { - if (e.key === "Escape" && store.stack.length > 0) { - const current = store.stack.at(-1)! - current.onClose?.() - setStore("stack", store.stack.slice(0, -1)) - e.preventDefault() - e.stopPropagation() - } - } - - createEffect(() => { - document.addEventListener("keydown", handleKeyDown, true) - onCleanup(() => { - document.removeEventListener("keydown", handleKeyDown, true) - }) - }) - - return { - get stack() { - return store.stack - }, - push(element: DialogElement, onClose?: () => void) { - setStore("stack", (s) => [...s, { element, onClose }]) - }, - pop() { - const current = store.stack.at(-1) - current?.onClose?.() - setStore("stack", store.stack.slice(0, -1)) - }, - replace(element: DialogElement, onClose?: () => void) { - for (const item of store.stack) { - item.onClose?.() - } - setStore("stack", [{ element, onClose }]) - }, - clear() { - for (const item of store.stack) { - item.onClose?.() - } - setStore("stack", []) - }, - } - }, -}) - -export function DialogRoot(props: { children?: JSX.Element }) { - const dialog = useDialog() - return ( - <> - {props.children} - <Show when={dialog.stack.length > 0}> - <div data-component="dialog-stack"> - <For each={dialog.stack}> - {(item, index) => ( - <Show when={index() === dialog.stack.length - 1}> - {typeof item.element === "function" ? item.element() : item.element} - </Show> - )} - </For> - </div> - </Show> - </> - ) -} |
