mirror of
https://github.com/getpaseo/paseo.git
synced 2026-10-25 02:32:47 +00:00
* 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.
37 lines
949 B
TypeScript
37 lines
949 B
TypeScript
import type { ComponentType, FunctionComponent, ReactNode } from "react";
|
|
import type { PluginIconProps } from "./contracts.js";
|
|
|
|
export interface ModalProps {
|
|
title: string;
|
|
icon?: ReactNode;
|
|
open: boolean;
|
|
onOpenChange(open: boolean): void;
|
|
children: ReactNode;
|
|
}
|
|
|
|
export interface ModalContentProps {
|
|
children: ReactNode;
|
|
}
|
|
|
|
export interface ModalComponent extends FunctionComponent<ModalProps> {
|
|
Content: ComponentType<ModalContentProps>;
|
|
}
|
|
|
|
export type ToastVariant = "default" | "info" | "success" | "warning" | "error";
|
|
|
|
export interface ToastOptions {
|
|
variant?: ToastVariant;
|
|
durationMs?: number;
|
|
}
|
|
|
|
export interface ToastApi {
|
|
show(message: string, options?: ToastOptions): void;
|
|
error(message: string): void;
|
|
}
|
|
|
|
export declare const Icon: ComponentType<PluginIconProps>;
|
|
export declare const Modal: ModalComponent;
|
|
export declare function useToast(): ToastApi;
|
|
|
|
export type { PluginIconProps } from "./contracts.js";
|