{ "version": 3, "sources": ["../../../../../../../../source/febe/ui/src/scripts/classes/Hatch.ts", "../../../../../../../../source/febe/ui/static/svg/icons/close.svg", "../../../../../../../../source/febe/ui/src/scripts/components/Modal.ts"], "sourcesContent": ["function _escape(str = \"\") {\n let r = /[&<>\"'\\/]/g;\n return (\n \"\" +\n str.replace(r, (m) => {\n return {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n '\"': \""\",\n \"'\": \"'\",\n \"/\": \"/\",\n }[m];\n })\n );\n}\n\nexport class SafeString {\n s: string;\n constructor(s: string) {\n this.s = s;\n }\n toString() {\n return this.s;\n }\n}\n\nexport function Domifier(str: string) {\n const dom = new DOMParser();\n return dom.parseFromString(str, \"text/html\").querySelector(\"body\").firstChild as Element;\n}\n\nexport function Hatch(tmpl: any, ...vs: any): SafeString {\n let result = \"\";\n for (let i = 0; i < vs.length; i++) {\n if (vs[i] instanceof SafeString) result += tmpl[i] + vs[i].toString();\n else result += tmpl[i] + _escape(String(vs[i]));\n }\n return new SafeString(result + tmpl[vs.length]);\n}\n\nexport function HatchMap(list: any, func: Function) {\n let mapped = list.map(func);\n return new SafeString(mapped.map((v: any) => (v instanceof SafeString ? v : _escape(String(v)))).join(\"\"));\n}\n", "", "import close from \"@icons/close.svg\";\nimport { Hatch, SafeString } from \"../classes/Hatch.js\";\n\ninterface ModalOptions {\n cb?: Function;\n body: SafeString;\n onclose?: Function;\n}\n\ninterface FormModalOptions extends ModalOptions {\n action: string;\n successMsg?: string;\n failedMsg?: string;\n method?: \"POST\" | \"GET\";\n cb?: Function;\n}\n\nexport class Modal {\n body: SafeString;\n el: HTMLElement;\n cb?: Function;\n onclose?: Function;\n\n constructor(options: ModalOptions) {\n this.body = options.body;\n this.onclose = options.onclose;\n this.cb = options.cb;\n document.body.appendChild(this.getTemplate(options));\n }\n\n close() {\n this.el.classList.add(\"out\");\n if (this.onclose) this.onclose();\n setTimeout(() => {\n this.el.remove();\n }, 400);\n }\n\n getTemplate(options: ModalOptions) {\n this.el = document.createElement(\"div\");\n this.el.classList.add(\"modal\");\n this.el.classList.add(\"out\");\n this.el.innerHTML = Hatch`\n
\n \n ${options.body}\n
\n
\n `.s;\n\n this.el.querySelectorAll(\".modal-backdrop, [data-close]\").forEach((item) => {\n item.addEventListener(\"click\", (e: Event) => {\n if (item.tagName !== \"A\") {\n e.preventDefault();\n }\n this.close();\n });\n });\n\n this.el.querySelectorAll(\".modal-backdrop, [data-cb]\").forEach((item) => {\n item.addEventListener(\"click\", (e: Event) => {\n this.cb?.();\n });\n });\n\n window.addEventListener(\"keydown\", (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n this.close();\n }\n });\n\n setTimeout(() => {\n this.el.classList.remove(\"out\");\n }, 1);\n return this.el;\n }\n}\n\nexport class FormModal extends Modal {\n body: SafeString;\n action: string;\n method?: \"POST\" | \"GET\";\n\n constructor(options: FormModalOptions) {\n let form = Hatch`\n
\n ${options.body}\n \n
\n `;\n options.body = form;\n super(options);\n\n this.action = options.action;\n }\n}\n\nexport class FetchFormModal extends FormModal {\n successMsg?: string;\n failedMsg?: string;\n cb?: Function;\n\n constructor(options: FormModalOptions) {\n super(options);\n this.successMsg = options.successMsg;\n this.failedMsg = options.failedMsg;\n this.method = options.method;\n this.cb = options.cb;\n this.afterRender();\n }\n\n afterRender() {\n let form = this.el.querySelector(\"form\");\n form.addEventListener(\"submit\", async (e: Event) => {\n e.preventDefault();\n let req = await fetch(this.action, {\n body: new FormData(form),\n method: this.method || \"post\",\n });\n if (req.ok) {\n this.close();\n if (this.cb) this.cb();\n globalThis.notification.notify({\n type: \"info\",\n message: this.successMsg || \"The action was successful\",\n title: \"Success\",\n });\n } else {\n globalThis.notification.notify({\n type: \"danger\",\n message: this.failedMsg || \"The action failed, feel free to get in touch if the problem persists.\",\n title: \"Failed\",\n });\n }\n });\n }\n}\n"], "mappings": "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", "names": ["_escape", "str", "r", "m", "SafeString", "s", "Domifier", "Hatch", "tmpl", "vs", "result", "i", "HatchMap", "list", "func", "mapped", "v", "close_default", "Modal", "options", "Hatch", "SafeString", "close_default", "item", "e", "FormModal", "form", "FetchFormModal"] }