@customizer/modal-x
Version:
Modal-X = **This Vue Plugin provides a simple and flexible way to create modals for your web applications using a file-based approach. Easily define modal content in separate files, allowing for better organization and maintainability with minimal effort.
60 lines (47 loc) • 1.4 kB
TypeScript
import { Component, Plugin } from "vue"
import { FileNames } from "./FileNameEnums"
interface ModalOptions {
closeonEsc?: boolean,
closeOnOverlayClick?: boolean,
}
const defaultOptions: ModalOptions = {
closeonEsc: true,
closeOnOverlayClick: true
}
type ModalCallback<T> = (response: T) => void
interface Modal<T extends any, D extends any> {
filename: string,
data: D,
cb: ModalCallback<T>
}
interface Spinner {
id: string,
modal: Component,
group: string
}
interface FetchedModals {
id: string,
modal: Component
}
declare module '@customizer/modal-x' {
/**
*
*/
export function useModal<T extends any>(): ({
getModal: <T, D extends any>(filename: FileNames) => Modal<T, D>,
modals: Modal[],
spinners: Spinner[],
setOptions: (options: ModalOptions = defaultOptions) => void,
openModal: <T extends any , D extends any>(filename: FileNames, data?: D, cb?: ModalCallback<T>) => void
closeModal: (data?: any) => void
fetchedModals: FetchedModals[],
getModal: (filename: FileNames) => Modal
});
export function getModal(filename: FileNames): Modal
export function openModal<T extends any , D extends any>(filename: FileNames, data?: D, cb?: ModalCallback<T>): void
export function closeModal(data?: any): void
export function setOptions(options: ModalOptions);
export const ModalParent: Component
const modal: Plugin
export default modal
}