{"version":3,"file":"toast.mjs","sources":["../../../../../src/components/va-toast/toast.ts"],"sourcesContent":["import { VNode, createVNode, render, AppContext } from 'vue'\n\nimport { getGlobal } from '../../utils/ssr'\nimport type { ToastOptions } from './types'\n\nimport _VaToast from './VaToast.vue'\nimport { withConfigTransport } from '../../services/config-transport'\n\nexport const VaToast = withConfigTransport(_VaToast)\n\nlet seed = 1\n\ndeclare global {\n  interface Window {\n    vaToastInstances: VNode[]\n  }\n}\n\ngetGlobal().vaToastInstances = []\n\ntype OptionKeys = keyof ToastOptions;\n\nexport type VaToastId = string\n\nconst getNodeProps = (vNode: VNode): Record<OptionKeys, any> => {\n  return (vNode.component?.props as Record<OptionKeys, any>) || {}\n}\n\nconst closeNotification = (targetInstance: VNode | null, destroyElementFn: () => void) => {\n  if (!targetInstance) { return }\n\n  if (!getGlobal().vaToastInstances.length) {\n    seed = 1\n    return\n  }\n\n  const targetInstanceIndex = getGlobal().vaToastInstances.findIndex((instance) => instance === targetInstance)\n\n  if (targetInstanceIndex < 0) { return }\n\n  destroyElementFn()\n\n  getGlobal().vaToastInstances = getGlobal().vaToastInstances.reduce((acc: any[], instance, index) => {\n    if (instance === targetInstance) {\n      return acc\n    }\n\n    return [...acc, instance]\n  }, [])\n\n  if (!getGlobal().vaToastInstances.length) {\n    seed = 1\n  }\n}\n\nconst destroy = (el: HTMLElement | null | undefined, node: VNode | null) => {\n  if (el) {\n    render(null, el)\n    el.remove()\n  }\n  el = null\n  node = null\n}\n\nconst mount = (component: any, {\n  props,\n  children,\n  element,\n  appContext,\n}: { props?: { [key: string]: any }; children?: any; element?: HTMLElement; appContext?: AppContext } = {}): { vNode: VNode; el?: HTMLElement } => {\n  let el: HTMLElement | null | undefined = element\n\n  // eslint-disable-next-line prefer-const\n  let vNode: VNode | null\n\n  const onClose = () => {\n    closeNotification(vNode, () => destroy(el, vNode))\n\n    if (props?.onClose) {\n      props.onClose()\n    }\n  }\n\n  vNode = createVNode(component, { ...props, onClose }, children)\n\n  if (appContext) {\n    vNode.appContext = appContext\n  }\n\n  if (el) {\n    render(vNode, el)\n  } else if (typeof document !== 'undefined') {\n    render(vNode, el = document.createElement('div'))\n  }\n\n  return { vNode, el }\n}\n\nexport const closeAllNotifications = (appContext?: AppContext) => {\n  if (!getGlobal().vaToastInstances.length) {\n    seed = 1\n    return\n  }\n  getGlobal().vaToastInstances.forEach(instance => {\n    if (appContext && instance.appContext !== appContext) { return }\n    getNodeProps(instance).onClose()\n  })\n}\n\nexport const closeById = (id: string) => {\n  const targetInstance = getGlobal().vaToastInstances.find(instance => instance.el?.id === id)\n\n  if (targetInstance) {\n    const nodeProps = getNodeProps(targetInstance)\n    nodeProps.onClose()\n  }\n}\n\nconst getToastOptions = (options: string | ToastOptions): any => {\n  if (typeof options === 'string') {\n    return {\n      message: options,\n    }\n  }\n  return options\n}\n\nexport const createToastInstance = (customProps: ToastOptions | string, appContext?: AppContext): VaToastId | null => {\n  const { vNode, el } = mount(VaToast, { appContext, props: getToastOptions(customProps) })\n\n  const nodeProps = getNodeProps(vNode)\n\n  if (el && vNode.el && nodeProps) {\n    document.body.appendChild(el.childNodes[0])\n\n    vNode.el.id = 'notification_' + seed\n\n    seed += 1\n\n    getGlobal().vaToastInstances.push(vNode)\n\n    return vNode.el.id as VaToastId\n  }\n\n  return null\n}\n\nexport type { ToastOptions as NotificationOptions } from './types'\n"],"names":["_VaToast"],"mappings":";;;;;AAQa,MAAA,UAAU,oBAAoBA,SAAQ;AAEnD,IAAI,OAAO;AAQX,UAAU,EAAE,mBAAmB;AAM/B,MAAM,eAAe,CAAC,UAA0C;;AACtD,WAAA,WAAM,cAAN,mBAAiB,UAAqC;AAChE;AAEA,MAAM,oBAAoB,CAAC,gBAA8B,qBAAiC;AACxF,MAAI,CAAC,gBAAgB;AAAE;AAAA,EAAO;AAE9B,MAAI,CAAC,UAAA,EAAY,iBAAiB,QAAQ;AACjC,WAAA;AACP;AAAA,EACF;AAEM,QAAA,sBAAsB,YAAY,iBAAiB,UAAU,CAAC,aAAa,aAAa,cAAc;AAE5G,MAAI,sBAAsB,GAAG;AAAE;AAAA,EAAO;AAErB;AAEP,YAAA,EAAE,mBAAmB,YAAY,iBAAiB,OAAO,CAAC,KAAY,UAAU,UAAU;AAClG,QAAI,aAAa,gBAAgB;AACxB,aAAA;AAAA,IACT;AAEO,WAAA,CAAC,GAAG,KAAK,QAAQ;AAAA,EAC1B,GAAG,CAAE,CAAA;AAEL,MAAI,CAAC,UAAA,EAAY,iBAAiB,QAAQ;AACjC,WAAA;AAAA,EACT;AACF;AAEA,MAAM,UAAU,CAAC,IAAoC,SAAuB;AAC1E,MAAI,IAAI;AACN,WAAO,MAAM,EAAE;AACf,OAAG,OAAO;AAAA,EACZ;AACK,OAAA;AAEP;AAEA,MAAM,QAAQ,CAAC,WAAgB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,IAAwG,OAA2C;AACjJ,MAAI,KAAqC;AAGrC,MAAA;AAEJ,QAAM,UAAU,MAAM;AACpB,sBAAkB,OAAO,MAAM,QAAQ,EAAS,CAAC;AAEjD,QAAI,+BAAO,SAAS;AAClB,YAAM,QAAQ;AAAA,IAChB;AAAA,EAAA;AAGF,UAAQ,YAAY,WAAW,EAAE,GAAG,OAAO,QAAA,GAAW,QAAQ;AAE9D,MAAI,YAAY;AACd,UAAM,aAAa;AAAA,EACrB;AAEA,MAAI,IAAI;AACN,WAAO,OAAO,EAAE;AAAA,EAAA,WACP,OAAO,aAAa,aAAa;AAC1C,WAAO,OAAO,KAAK,SAAS,cAAc,KAAK,CAAC;AAAA,EAClD;AAEO,SAAA,EAAE,OAAO;AAClB;AAEa,MAAA,wBAAwB,CAAC,eAA4B;AAChE,MAAI,CAAC,UAAA,EAAY,iBAAiB,QAAQ;AACjC,WAAA;AACP;AAAA,EACF;AACU,cAAE,iBAAiB,QAAQ,CAAY,aAAA;AAC3C,QAAA,cAAc,SAAS,eAAe,YAAY;AAAE;AAAA,IAAO;AAClD,iBAAA,QAAQ,EAAE;EAAQ,CAChC;AACH;AAEa,MAAA,YAAY,CAAC,OAAe;AACjC,QAAA,iBAAiB,YAAY,iBAAiB,KAAK,CAAY,aAAA;;AAAA,2BAAS,OAAT,mBAAa,QAAO;AAAA,GAAE;AAE3F,MAAI,gBAAgB;AACZ,UAAA,YAAY,aAAa,cAAc;AAC7C,cAAU,QAAQ;AAAA,EACpB;AACF;AAEA,MAAM,kBAAkB,CAAC,YAAwC;AAC3D,MAAA,OAAO,YAAY,UAAU;AACxB,WAAA;AAAA,MACL,SAAS;AAAA,IAAA;AAAA,EAEb;AACO,SAAA;AACT;AAEa,MAAA,sBAAsB,CAAC,aAAoC,eAA8C;AACpH,QAAM,EAAE,OAAO,GAAG,IAAI,MAAM,SAAS,EAAE,YAAY,OAAO,gBAAgB,WAAW,EAAG,CAAA;AAElF,QAAA,YAAY,aAAa,KAAK;AAEhC,MAAA,MAAM,MAAM,MAAM,WAAW;AAC/B,aAAS,KAAK,YAAY,GAAG,WAAW,CAAC,CAAC;AAEpC,UAAA,GAAG,KAAK,kBAAkB;AAExB,YAAA;AAEE,gBAAE,iBAAiB,KAAK,KAAK;AAEvC,WAAO,MAAM,GAAG;AAAA,EAClB;AAEO,SAAA;AACT;"}