import { Toaster, createToastManager } from "@workspace/ui/components/toast" import { useOverlayScope } from "./scope-context" import { globalOverlayScope, type OverlayScope } from "./scope" import type { ToastOptions, ToastPromiseOptions, ToastUpdateOptions, } from "./types" const toastChannel = Symbol("overlay.toast") function getToastManager(scope: OverlayScope) { return scope.getChannel(toastChannel, createToastManager) } export function openToast>( options: ToastOptions ) { const { scope = globalOverlayScope, ...toastOptions } = options return getToastManager(scope).add(toastOptions) } export function updateToast>( id: string, options: ToastUpdateOptions ) { const { scope = globalOverlayScope, ...toastOptions } = options getToastManager(scope).update(id, toastOptions) } export function dismissToast({ id, scope = globalOverlayScope, }: { id?: string scope?: OverlayScope } = {}) { getToastManager(scope).close(id) } export function toastPromise< Value, Data extends object = Record, >(promise: Promise, options: ToastPromiseOptions) { const { scope = globalOverlayScope, ...toastOptions } = options return getToastManager(scope).promise(promise, toastOptions) } export interface ToastHostProps { scope?: OverlayScope } export function ToastHost({ scope }: ToastHostProps) { const contextualScope = useOverlayScope() const resolvedScope = scope ?? contextualScope return } export type { ToastOptions, ToastPromiseOptions, ToastUpdateOptions, } from "./types"