Files
paseo/packages/app/src/contexts/toast-api-context.tsx
T
Mohamed Boudra deb846eed6 Let plugins use Paseo modals, icons, and toasts (#3967)
* feat(plugins): add React Native UI primitives

Give client plugins host-owned adaptive UI without exposing app internals. Preserve plugin runtime contexts when modal content moves through the compact portal host.

* docs(plugins): clarify host UI reference

* refactor(plugins): harden host UI boundary

Replace mocked pass-through coverage with a real browser plugin journey, keep host runtime ownership inside the evaluator, preserve toast context across compact portals, and expose modal content as a compound component.

* fix(plugins): defer native UI presentation runtime

Loading the plugin evaluator initialized the modal and toast presentation stacks even when no plugin requested host UI. Keep the capability stable while delaying platform-heavy presentation code until Modal.Content renders.

* refactor(plugins): move modal metadata to root

Keep Modal.Content body-only while the top-level Modal owns the host-rendered title and leading icon. This leaves presentation metadata stable as the compound API gains future regions.
2026-08-28 11:43:30 +02:00

17 lines
548 B
TypeScript

import { createContext, useContext, type ReactNode } from "react";
import type { ToastApi } from "@/components/toast-host";
const ToastContext = createContext<ToastApi | null>(null);
export function useToast(): ToastApi {
const value = useContext(ToastContext);
if (!value) {
throw new Error("useToast must be used within ToastProvider");
}
return value;
}
export function ToastApiProvider({ api, children }: { api: ToastApi; children: ReactNode }) {
return <ToastContext.Provider value={api}>{children}</ToastContext.Provider>;
}