summaryrefslogtreecommitdiffhomepage
path: root/packages/ui/src/context
diff options
context:
space:
mode:
authorAaron Iker <[email protected]>2026-01-30 18:57:49 +0100
committerGitHub <[email protected]>2026-01-30 17:57:49 +0000
commit20619a6a26ec0cfc2707b7ed13387715e9f9cdaa (patch)
tree50b8aa69da65642789c3fa92f65034a9dd1361df /packages/ui/src/context
parent1bbe84ed8d0eceb96af06b971690ebd0b0213580 (diff)
downloadopencode-20619a6a26ec0cfc2707b7ed13387715e9f9cdaa.tar.gz
opencode-20619a6a26ec0cfc2707b7ed13387715e9f9cdaa.zip
feat: Transitions, spacing, scroll fade, prompt area update (#11168)
Co-authored-by: Github Action <[email protected]> Co-authored-by: Copilot <[email protected]> Co-authored-by: aaroniker <[email protected]>
Diffstat (limited to 'packages/ui/src/context')
-rw-r--r--packages/ui/src/context/dialog.tsx24
1 files changed, 24 insertions, 0 deletions
diff --git a/packages/ui/src/context/dialog.tsx b/packages/ui/src/context/dialog.tsx
index afba5f648..bd47b86d3 100644
--- a/packages/ui/src/context/dialog.tsx
+++ b/packages/ui/src/context/dialog.tsx
@@ -28,6 +28,7 @@ const Context = createContext<ReturnType<typeof init>>()
function init() {
const [active, setActive] = createSignal<Active | undefined>()
+ const [renders, setRenders] = createSignal<Record<string, JSX.Element>>({})
const timer = { current: undefined as ReturnType<typeof setTimeout> | undefined }
const lock = { value: false }
@@ -118,12 +119,28 @@ function init() {
setActive({ id, node, dispose, owner, onClose, setClosing })
}
+ const render = (element: JSX.Element, id: string, owner: Owner) => {
+ setRenders((renders) => ({ ...renders, [id]: element }))
+ show(() => element, owner, () => {
+ setRenders((renders) => {
+ const { [id]: _, ...rest } = renders
+ return rest
+ })
+ })
+ }
+
+ const isActive = (id: string) => {
+ return renders()[id] !== undefined
+ }
+
return {
get active() {
return active()
},
+ isActive,
close,
show,
+ render,
}
}
@@ -152,10 +169,17 @@ export function useDialog() {
get active() {
return ctx.active
},
+ isActive(id: string) {
+ return ctx.isActive(id)
+ },
show(element: DialogElement, onClose?: () => void) {
const base = ctx.active?.owner ?? owner
ctx.show(element, base, onClose)
},
+ render(element: JSX.Element, id: string) {
+ const base = ctx.active?.owner ?? owner
+ ctx.render(element, id, base)
+ },
close() {
ctx.close()
},