{"version":3,"file":"use-toast-RgQeRK87.js","sources":["../../src/components/ui/toast/use-toast.ts"],"sourcesContent":["import type { Component, VNode } from 'vue'\nimport type { ToastProps } from '.'\nimport { computed, ref } from 'vue'\n\nconst TOAST_LIMIT = 1\nconst TOAST_REMOVE_DELAY = 1000000\n\nexport type StringOrVNode =\n | string\n | VNode\n | (() => VNode)\n\ntype ToasterToast = ToastProps & {\n id: string\n title?: string\n description?: StringOrVNode\n action?: Component\n}\n\nconst actionTypes = {\n ADD_TOAST: 'ADD_TOAST',\n UPDATE_TOAST: 'UPDATE_TOAST',\n DISMISS_TOAST: 'DISMISS_TOAST',\n REMOVE_TOAST: 'REMOVE_TOAST',\n} as const\n\nlet count = 0\n\nfunction genId() {\n count = (count + 1) % Number.MAX_VALUE\n return count.toString()\n}\n\ntype ActionType = typeof actionTypes\n\ntype Action =\n | {\n type: ActionType['ADD_TOAST']\n toast: ToasterToast\n }\n | {\n type: ActionType['UPDATE_TOAST']\n toast: Partial\n }\n | {\n type: ActionType['DISMISS_TOAST']\n toastId?: ToasterToast['id']\n }\n | {\n type: ActionType['REMOVE_TOAST']\n toastId?: ToasterToast['id']\n }\n\ninterface State {\n toasts: ToasterToast[]\n}\n\nconst toastTimeouts = new Map>()\n\nfunction addToRemoveQueue(toastId: string) {\n if (toastTimeouts.has(toastId))\n return\n\n const timeout = setTimeout(() => {\n toastTimeouts.delete(toastId)\n dispatch({\n type: actionTypes.REMOVE_TOAST,\n toastId,\n })\n }, TOAST_REMOVE_DELAY)\n\n toastTimeouts.set(toastId, timeout)\n}\n\nconst state = ref({\n toasts: [],\n})\n\nfunction dispatch(action: Action) {\n switch (action.type) {\n case actionTypes.ADD_TOAST:\n state.value.toasts = [action.toast, ...state.value.toasts].slice(0, TOAST_LIMIT)\n break\n\n case actionTypes.UPDATE_TOAST:\n state.value.toasts = state.value.toasts.map(t =>\n t.id === action.toast.id ? { ...t, ...action.toast } : t,\n )\n break\n\n case actionTypes.DISMISS_TOAST: {\n const { toastId } = action\n\n if (toastId) {\n addToRemoveQueue(toastId)\n }\n else {\n state.value.toasts.forEach((toast) => {\n addToRemoveQueue(toast.id)\n })\n }\n\n state.value.toasts = state.value.toasts.map(t =>\n t.id === toastId || toastId === undefined\n ? {\n ...t,\n open: false,\n }\n : t,\n )\n break\n }\n\n case actionTypes.REMOVE_TOAST:\n if (action.toastId === undefined)\n state.value.toasts = []\n else\n state.value.toasts = state.value.toasts.filter(t => t.id !== action.toastId)\n\n break\n }\n}\n\nfunction useToast() {\n return {\n toasts: computed(() => state.value.toasts),\n toast,\n dismiss: (toastId?: string) => dispatch({ type: actionTypes.DISMISS_TOAST, toastId }),\n }\n}\n\ntype Toast = Omit\n\nfunction toast(props: Toast) {\n const id = genId()\n\n const update = (props: ToasterToast) =>\n dispatch({\n type: actionTypes.UPDATE_TOAST,\n toast: { ...props, id },\n })\n\n const dismiss = () => dispatch({ type: actionTypes.DISMISS_TOAST, toastId: id })\n\n dispatch({\n type: actionTypes.ADD_TOAST,\n toast: {\n ...props,\n id,\n open: true,\n onOpenChange: (open: boolean) => {\n if (!open)\n dismiss()\n },\n },\n })\n\n return {\n id,\n dismiss,\n update,\n }\n}\n\nexport { toast, useToast }\n"],"names":["actionTypes","count","toastTimeouts","Map","addToRemoveQueue","toastId","has","timeout","setTimeout","delete","dispatch","type","set","state","ref","toasts","action","value","toast","slice","map","t","id","forEach","open","filter","useToast","computed","dismiss","props","Number","MAX_VALUE","toString","onOpenChange","update"],"mappings":"qYAIA,MAeMA,EACO,YADPA,EAEU,eAFVA,EAGW,gBAHXA,EAIU,eAGhB,IAAIC,EAAQ,EA+BZ,MAAMC,MAAoBC,IAE1B,SAASC,EAAiBC,GACpB,GAAAH,EAAcI,IAAID,GACpB,OAEI,MAAAE,EAAUC,YAAW,KACzBN,EAAcO,OAAOJ,GACZK,EAAA,CACPC,KAAMX,EACNK,WACD,GA/DsB,KAkEXH,EAAAU,IAAIP,EAASE,EAC7B,CAEA,MAAMM,EAAQC,EAAW,CACvBC,OAAQ,KAGV,SAASL,EAASM,GAChB,OAAQA,EAAOL,MACb,KAAKX,EACHa,EAAMI,MAAMF,OAAS,CAACC,EAAOE,SAAUL,EAAMI,MAAMF,QAAQI,MAAM,EA7EnD,GA8Ed,MAEF,KAAKnB,EACHa,EAAMI,MAAMF,OAASF,EAAMI,MAAMF,OAAOK,KACtCC,GAAAA,EAAEC,KAAON,EAAOE,MAAMI,GAAK,IAAKD,KAAML,EAAOE,OAAUG,IAEzD,MAEF,KAAKrB,EAA2B,CACxB,MAAAK,QAAEA,GAAYW,EAEhBX,EACFD,EAAiBC,GAGjBQ,EAAMI,MAAMF,OAAOQ,SAASL,IAC1Bd,EAAiBc,EAAMI,GAAE,IAI7BT,EAAMI,MAAMF,OAASF,EAAMI,MAAMF,OAAOK,KACtCC,GAAAA,EAAEC,KAAOjB,QAAuB,IAAZA,EAChB,IACKgB,EACHG,MAAM,GAERH,IAEN,KAAA,CAGF,KAAKrB,OACoB,IAAnBgB,EAAOX,QACHQ,EAAAI,MAAMF,OAAS,GAEfF,EAAAI,MAAMF,OAASF,EAAMI,MAAMF,OAAOU,QAAYJ,GAAAA,EAAEC,KAAON,EAAOX,UAI5E,CAEA,SAASqB,IACA,MAAA,CACLX,OAAQY,GAAS,IAAMd,EAAMI,MAAMF,SACnCG,QACAU,QAAUvB,GAAqBK,EAAS,CAAEC,KAAMX,EAA2BK,YAE/E,CAIA,SAASa,EAAMW,GACb,MAAMP,GAzGGrB,GAAAA,EAAQ,GAAK6B,OAAOC,UACtB9B,EAAM+B,YAgHPJ,EAAU,IAAMlB,EAAS,CAAEC,KAAMX,EAA2BK,QAASiB,IAepE,OAbEZ,EAAA,CACPC,KAAMX,EACNkB,MAAO,IACFW,EACHP,KACAE,MAAM,EACNS,aAAeT,IACRA,GACKI,GAAA,KAKT,CACLN,KACAM,UACAM,OAxBcL,GACdnB,EAAS,CACPC,KAAMX,EACNkB,MAAO,IAAKW,EAAOP,QAuBzB"}