UNPKG

@selenite/commons

Version:

This typescript package provides a set of frequently used utilities, types and svelte actions for building projects with Typescript and Svelte.

66 lines (65 loc) 2.5 kB
import type { Component, Snippet, SvelteComponent } from 'svelte'; type ButtonLevel = 'primary' | 'secondary' | 'danger' | 'neutral' | 'warning'; export type ModalButton = { level?: ButtonLevel; label: string; description?: string; onclick: () => void; }; export declare const modalButtonTypes: readonly ["cancel", "promptConfirm", "close", "submit"]; export type ModalButtonType = (typeof modalButtonTypes)[number]; export type ModalButtonSettings = ModalButton | ModalButtonType | ({ type: ModalButtonType; } & Partial<ModalButton>) | { formId: string; }; export type BaseModalSettings = { divider?: boolean; title?: string | Snippet; buttons?: ModalButtonSettings[]; response?: (r: unknown) => void; }; type Props = Record<string, unknown>; export type ComponentModalSettings<P extends Props = Props> = { component: Component<P & { modal: ComponentModalSettings; }, { getResponse?: () => unknown; }>; props: P; } & BaseModalSettings; export type SnippetModalSettings<P extends Props = Props> = { snippet: Snippet<[P]>; props: P; } & BaseModalSettings; export type PromptModalSettings = { prompt: string; initial?: string; } & BaseModalSettings; export type ModalSettings<P extends Props = Props> = PromptModalSettings | ComponentModalSettings<P> | SnippetModalSettings<P>; export declare function isComponentModalSettings<P extends Props>(modal: ModalSettings<P>): modal is ComponentModalSettings<P>; export declare function isSnippetModalSettings<P extends Props>(modal: ModalSettings<P>): modal is SnippetModalSettings<P>; export declare function isPromptModalSettings(modal: ModalSettings): modal is PromptModalSettings; export declare function modalButtonTypeToButton(type: ModalButtonType): ModalButton; /** * Singleton that manages modals. * * The singleton can be accessed with `Modal.instance`. */ export declare class Modal { #private; static get instance(): Modal; queue: ModalSettings[]; lastModal: ModalSettings<Props> | undefined; promptInput: HTMLInputElement | undefined; contentContainer: HTMLElement | undefined; childComponent: (SvelteComponent<Record<string, any>, any, any> & { getResponse?: () => Promise<unknown> | unknown; }) | undefined; resolvedButtons: ModalButton[] | undefined; private constructor(); show<P extends Props>(params: ModalSettings<P>): void; close(): void; } export declare const modals: Modal; export {};