vuestic-ui
Version:
Vue 3 UI Framework
1 lines • 3.24 kB
Source Map (JSON)
{"version":3,"file":"modal.mjs","sources":["../../../../../src/components/va-modal/modal.ts"],"sourcesContent":["import { VaModal } from './VaModal'\nimport type { ModalOptions } from './types'\nimport { VNode, render, AppContext, h, nextTick } from 'vue'\n\ntype OptionKeys = keyof ModalOptions;\n\nconst getNodeProps = (vNode: VNode): Record<OptionKeys, any> => {\n return (vNode.component?.props as Record<OptionKeys, any>) || {}\n}\n\nconst destroy = (el: HTMLElement | null | undefined, vNode: VNode | null) => {\n if (el) {\n render(null, el)\n el.remove()\n }\n\n el = null\n vNode = null\n}\n\nconst mount = (\n component: any,\n { props, appContext }: { props?: ModalOptions; appContext?: AppContext } = {},\n): { vNode: VNode; el?: HTMLElement } => {\n const el: HTMLElement | undefined = document?.createElement('div')\n\n // eslint-disable-next-line prefer-const\n let vNode: VNode | null\n\n // handling the case when 'withoutTransitions = false'\n const onClose = (event: HTMLElement) => {\n props?.onClose?.(event)\n destroy(el, vNode)\n }\n\n // handling the case when 'withoutTransitions = true'\n const onUpdateModelValue = (value: boolean) => {\n props?.['onUpdate:modelValue']?.(value)\n\n if (props?.withoutTransitions && !value) {\n nextTick(() => { // this is required for all handlers to execute\n destroy(el, vNode)\n })\n }\n }\n\n vNode = h(component, {\n ...props,\n stateful: props?.stateful ?? true,\n modelValue: true,\n onClose,\n 'onUpdate:modelValue': onUpdateModelValue,\n })\n\n if (appContext) {\n vNode.appContext = appContext\n }\n\n if (el) {\n render(vNode, el)\n }\n\n return { vNode, el }\n}\n\nconst getModalOptions = (options: string | ModalOptions): ModalOptions => typeof options === 'string'\n ? { message: options }\n : options\n\nexport const createModalInstance = (customProps: ModalOptions | string, appContext?: AppContext): VNode => {\n const { vNode, el } = mount(VaModal, { appContext, props: getModalOptions(customProps) })\n\n if (el && vNode.el && getNodeProps(vNode)) {\n document.body.appendChild(el.childNodes[0])\n }\n\n return vNode\n}\n"],"names":[],"mappings":";;AAMA,MAAM,eAAe,CAAC,UAA0C;;AACtD,WAAA,WAAM,cAAN,mBAAiB,UAAqC;AAChE;AAEA,MAAM,UAAU,CAAC,IAAoC,UAAwB;AAC3E,MAAI,IAAI;AACN,WAAO,MAAM,EAAE;AACf,OAAG,OAAO;AAAA,EACZ;AAEK,OAAA;AAEP;AAEA,MAAM,QAAQ,CACZ,WACA,EAAE,OAAO,WAAW,IAAuD,CAAA,MACpC;AACjC,QAAA,KAA8B,qCAAU,cAAc;AAGxD,MAAA;AAGE,QAAA,UAAU,CAAC,UAAuB;;AACtC,yCAAO,YAAP,+BAAiB;AACjB,YAAQ,EAAS;AAAA,EAAA;AAIb,QAAA,qBAAqB,CAAC,UAAmB;;AACrC,yCAAA,2BAAA,+BAAyB;AAE7B,SAAA,+BAAO,uBAAsB,CAAC,OAAO;AACvC,eAAS,MAAM;AACb,gBAAQ,EAAS;AAAA,MAAA,CAClB;AAAA,IACH;AAAA,EAAA;AAGF,UAAQ,EAAE,WAAW;AAAA,IACnB,GAAG;AAAA,IACH,WAAU,+BAAO,aAAY;AAAA,IAC7B,YAAY;AAAA,IACZ;AAAA,IACA,uBAAuB;AAAA,EAAA,CACxB;AAED,MAAI,YAAY;AACd,UAAM,aAAa;AAAA,EACrB;AAEA,MAAI,IAAI;AACN,WAAO,OAAO,EAAE;AAAA,EAClB;AAEO,SAAA,EAAE,OAAO;AAClB;AAEA,MAAM,kBAAkB,CAAC,YAAiD,OAAO,YAAY,WACzF,EAAE,SAAS,QACX,IAAA;AAES,MAAA,sBAAsB,CAAC,aAAoC,eAAmC;AACzG,QAAM,EAAE,OAAO,GAAG,IAAI,MAAM,SAAS,EAAE,YAAY,OAAO,gBAAgB,WAAW,EAAG,CAAA;AAExF,MAAI,MAAM,MAAM,MAAM,aAAa,KAAK,GAAG;AACzC,aAAS,KAAK,YAAY,GAAG,WAAW,CAAC,CAAC;AAAA,EAC5C;AAEO,SAAA;AACT;"}