@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
TypeScript
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 {};