@kalel1500/kalion-js 0.10.1-beta.0 → 0.10.1-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"kalion-js.es.js","sources":["../../src/app/core/_types/index.ts","../../src/app/core/infrastructure/utilities/general/Constants.ts","../../src/app/core/infrastructure/utilities/_internal/helpers.ts","../../src/app/core/infrastructure/utilities/broadcasting/EchoService.ts","../../src/app/core/infrastructure/utilities/broadcasting/ProcessChecker.ts","../../src/app/core/infrastructure/utilities/broadcasting/Reverb.ts","../../src/app/core/infrastructure/utilities/components/html/Btn.ts","../../src/app/core/infrastructure/utilities/components/html/Icon.ts","../../src/app/core/infrastructure/utilities/components/Component.ts","../../src/app/core/infrastructure/utilities/general/Cookie.ts","../../src/app/core/infrastructure/utilities/general/global.ts","../../src/app/core/infrastructure/utilities/general/Html.ts","../../src/app/core/infrastructure/utilities/general/Instantiable.ts","../../src/app/core/infrastructure/utilities/general/LDate.ts","../../src/app/core/infrastructure/utilities/general/LStorage.ts","../../src/app/core/infrastructure/utilities/general/Mutation.ts","../../src/app/core/infrastructure/utilities/general/Notify.ts","../../src/app/core/infrastructure/utilities/general/Ttable.ts","../../node_modules/sweetalert2/dist/sweetalert2.js","../../src/app/core/infrastructure/utilities/modals/SModal.ts","../../src/app/core/infrastructure/utilities/routing/Route.ts","../../src/app/core/infrastructure/utilities/routing/Url.ts","../../src/app/core/infrastructure/utilities/tests/TestConstants.ts","../../src/app/core/infrastructure/utilities/translation/Translator.ts","../../src/app/core/domain/exceptions/CannotOpenModalException.ts","../../src/app/core/domain/exceptions/CannotOpenModalWarning.ts","../../src/app/core/domain/exceptions/InvalidValueException.ts","../../src/app/core/domain/objects/value-objects/StringVo.ts","../../src/app/core/domain/objects/value-objects/IntVo.ts","../../src/app/core/domain/objects/value-objects/EnumVo.ts","../../src/app/core/domain/services/Test.ts","../../src/app/core/domain/services/DomService.ts","../../src/app/core/domain/services/ThemeSwitcher.ts","../../src/app/core/application/LayoutListenersUseCase.ts","../../src/app/providers/UtilitiesServiceProvider.ts"],"sourcesContent":["import { EventCallBackMethods } from 'tabulator-tables';\r\nimport Echo from 'laravel-echo';\r\n\r\ndeclare global {\r\n interface Window {\r\n Pusher: any;\r\n Echo: Echo<'reverb'>;\r\n }\r\n}\r\n\r\nexport type EnvVariables = {\r\n readonly VITE_CONF_MINIFY?: string;\r\n readonly VITE_CONF_SOURCEMAP?: string;\r\n readonly VITE_CONF_USE_APPCODE_IN_SOURCE_PATH?: string;\r\n\r\n readonly VITE_BROADCASTING_ENABLED?: string; // notInEnv\r\n\r\n readonly VITE_REVERB_APP_KEY?: string; // notInEnv\r\n readonly VITE_REVERB_HOST?: string; // notInEnv\r\n readonly VITE_REVERB_PORT?: string; // notInEnv\r\n readonly VITE_REVERB_SCHEME?: string; // notInEnv\r\n\r\n readonly VITE_APP_ENV?: string;\r\n readonly VITE_APP_NAME?: string;\r\n readonly VITE_APP_CODE?: string;\r\n\r\n readonly VITE_TS_STORAGE_VERSION?: string;\r\n readonly VITE_TS_USE_BOOSTRAP_CLASSES?: string; // notInEnv\r\n}\r\n\r\n// Define una interfaz para la configuración por defecto\r\nexport interface DefaultConstants {\r\n token: string | null;\r\n lang: string;\r\n langDouble: string;\r\n defaultZoneName: string;\r\n appIcon: string;\r\n routeName_checkReverb: string;\r\n routeName_checkQueue: string;\r\n\r\n readonly VITE_BROADCASTING_ENABLED: boolean;\r\n\r\n readonly VITE_REVERB_APP_KEY: string | undefined;\r\n readonly VITE_REVERB_HOST: string;\r\n readonly VITE_REVERB_PORT: number;\r\n readonly VITE_REVERB_SCHEME: string;\r\n\r\n readonly VITE_APP_ENV: string;\r\n readonly VITE_APP_NAME: string;\r\n readonly VITE_APP_CODE: string;\r\n\r\n readonly VITE_TS_STORAGE_VERSION: string;\r\n readonly VITE_TS_USE_BOOSTRAP_CLASSES: boolean;\r\n}\r\n\r\nexport interface Translation {\r\n [key: string]: string;\r\n}\r\n\r\nexport interface DefaultTranslations extends Translation {\r\n save: string;\r\n cancel: string;\r\n delete: string;\r\n move_to: string;\r\n close: string;\r\n detail: string;\r\n copy: string;\r\n search_placeholder: string;\r\n select_placeholder: string;\r\n select_value_placeholder: string;\r\n copied_text: string;\r\n confirm_delete_record_NAME: string;\r\n confirm_delete_FIELD_NAME: string;\r\n record_RECORD_doesnt_exist_in_the_TABLE_table: string;\r\n min_MIN_characters_on_search: string;\r\n add_FIELD: string;\r\n see_FIELD: string;\r\n edit_FIELD_NAME: string;\r\n the_page: string;\r\n cannot_save_an_error: string;\r\n incorrect_blade_format: string;\r\n to_empty: string;\r\n launch: string;\r\n correct: string;\r\n ok: string;\r\n reload_page: string;\r\n unforeseen_error: string;\r\n loading: string;\r\n loading_dots: string;\r\n search: string;\r\n searching_dots: string,\r\n no_results: string,\r\n filter: string;\r\n date: string;\r\n download_completed: string;\r\n fetch_error_message: string;\r\n some_class_does_not_meet_the_INTERFACE_interface_contract: string;\r\n it_has_been_called_a_JS_component_that_does_not_match_the_current_page: string;\r\n need_NUMBER_characters: string;\r\n a_loader_was_expected_on_the_page: string;\r\n check_if_the_loader_was_in_a_div: string;\r\n you_do_not_have_permissions_to_edit: string;\r\n}\r\n\r\nexport enum CheckableProcess {\r\n reverb = \"reverb\",\r\n queue = \"queue\",\r\n}\r\n\r\nexport enum StorageProcessKeys {\r\n reverb = \"reverbFailed\",\r\n queue = \"queueFailed\",\r\n}\r\n\r\nexport interface FetchParams {\r\n url: string;\r\n type?: string;\r\n params?: {};\r\n}\r\n\r\nexport interface FetchParamsSimple {\r\n url: string;\r\n type: string;\r\n}\r\n\r\nexport interface CatchParams {\r\n error: any;\r\n title?: string;\r\n text?: string;\r\n html?: string;\r\n reloadOnClose?: boolean;\r\n footer?: string;\r\n from?: string;\r\n}\r\n\r\nexport type ApiObject = Record<string, any>;\r\nexport type DataType = ApiObject | string;\r\n\r\nexport interface FetchResponse<T = DataType> {\r\n ok: boolean;\r\n success: boolean;\r\n message: string;\r\n data?: T;\r\n}\r\n\r\nexport interface ResponseEventFetch<T = DataType> {\r\n processName: CheckableProcess;\r\n response: FetchResponse<T>;\r\n}\r\n\r\nexport interface FetchBroadcastingResponse<T = DataType> extends FetchResponse {\r\n data: {\r\n broadcasting: FetchResponse<T>,\r\n [p: string]: any\r\n };\r\n}\r\n\r\nexport type FetchResponseOrBroadcasting<T = DataType> = FetchResponse<T> | FetchBroadcastingResponse<T>;\r\n\r\nexport type FetchReturnType<R> = R extends FetchResponse<any> ? R : FetchResponse;\r\n\r\nexport type Nullish = null | undefined;\r\nexport type StrOrNullish = string | Nullish;\r\nexport type StrIntOrNullish = number | StrOrNullish;\r\n\r\nexport type AvailableValidations =\r\n 'optional'\r\n | 'required'\r\n | `min:${number}`\r\n | `max:${number}`\r\n | 'color'\r\n | 'array'\r\n | 'number'\r\n | 'boolean'\r\n | `required_if:${'1' | '0'}`;\r\n\r\nexport type ValidationRules = {\r\n [P: string]: AvailableValidations[] | string | number | boolean | null | undefined;\r\n};\r\n\r\nexport type ValidationResponse = {\r\n success: boolean;\r\n messages: string[];\r\n validated: Record<string, any>;\r\n};\r\n\r\nexport type ValidationInternalData = {\r\n success: boolean[];\r\n messages: string[];\r\n validated: Record<string, any>;\r\n};\r\n\r\nexport type SyncOrAsync<T> = T | Promise<T> | { toPromise: () => T };\r\n\r\nexport type NullHTMLButtonElement = HTMLButtonElement | null;\r\n\r\nexport type TableSettingEvents = Partial<EventCallBackMethods>;\r\n\r\nexport type TranslationReplacements = Record<string, StrOrNullish>;\r\n\r\nexport enum Theme {\r\n dark = \"dark\",\r\n light = \"light\",\r\n system = \"system\",\r\n}\r\n\r\nexport type ThemeButtons = Record<Theme, HTMLElement | null>\r\n\r\nexport type UserPreferences = {\r\n version: string;\r\n theme: Theme;\r\n sidebar_collapsed: boolean;\r\n sidebar_state_per_page: boolean;\r\n};\r\n\r\nexport type ViewData<T> = {\r\n success: boolean;\r\n message: string;\r\n data: T;\r\n};\r\n\r\nexport type Sizes =\r\n '2xs' |\r\n 'xs' |\r\n 'sm' |\r\n 'base' |\r\n 'lg' |\r\n 'lx';\r\n\r\nexport type Colors =\r\n 'blue' |\r\n 'dark' |\r\n 'green' |\r\n 'red' |\r\n 'emerald' |\r\n 'light' |\r\n 'yellow' |\r\n 'gray';\r\n\r\nexport type ConfigBtn = {\r\n id?: string;\r\n size: Sizes;\r\n color: Colors;\r\n slot?: string;\r\n extraClasses?: string;\r\n extraAttributes?: string;\r\n isLink?: boolean;\r\n linkUrl?: string;\r\n linkBlank?: boolean;\r\n};\r\n\r\nexport type ConfigIcon = {\r\n outline?: boolean;\r\n strokeWidth?: string;\r\n size?: string;\r\n};\r\n\r\nexport type ComponentType =\r\n 'btn' |\r\n 'icon';\r\nexport type IconType =\r\n 'info' |\r\n 'save' |\r\n 'cancel' |\r\n 'delete' |\r\n 'new' |\r\n 'reload' |\r\n 'move' |\r\n 'edit';\r\nexport type ComponentName =\r\n `btn` |\r\n `icon.${IconType}`;\r\n\r\n","import { DefaultConstants } from '@/app';\r\n\r\n// Implementa la clase Constants usando la interfaz\r\nexport class Constants<T extends DefaultConstants> {\r\n private static instance: Constants<any>;\r\n public constants: T;\r\n\r\n private constructor() {\r\n // Define valores por defecto\r\n this.constants = {\r\n token: document.querySelector('meta[name=\"csrf-token\"]')?.getAttribute('content') ?? null,\r\n lang: 'es',\r\n langDouble: 'es-Es',\r\n defaultZoneName: 'Europe/Madrid', // Europe/Lisbon\r\n appIcon: new URL('/resources/images/logo-app.png', 'http://localhost/laravel-starter-template/').href,\r\n routeName_checkReverb: 'kalion.ajax.process.checkReverb',\r\n routeName_checkQueue: 'kalion.ajax.process.checkQueue',\r\n\r\n // Vite\r\n VITE_BROADCASTING_ENABLED: false,\r\n\r\n VITE_REVERB_APP_KEY: undefined,\r\n VITE_REVERB_HOST: 'localhost',\r\n VITE_REVERB_PORT: 8080,\r\n VITE_REVERB_SCHEME: 'http',\r\n\r\n VITE_APP_ENV: 'local',\r\n VITE_APP_NAME: 'Laravel',\r\n VITE_APP_CODE: 'laravel',\r\n\r\n VITE_TS_STORAGE_VERSION: '0.0',\r\n VITE_TS_USE_BOOSTRAP_CLASSES: false,\r\n } as T;\r\n }\r\n\r\n // Método para obtener la instancia única de la clase (Singleton)\r\n public static getInstance<U extends DefaultConstants>(): Constants<U> {\r\n if (!Constants.instance) {\r\n Constants.instance = new Constants<U>();\r\n }\r\n return Constants.instance;\r\n }\r\n\r\n // Método estático para obtener el valor de una constante específica\r\n public get<K extends keyof T>(key: K): T[K] {\r\n // return Constants.getInstance().getConstants()[key];\r\n return this.constants[key];\r\n }\r\n\r\n public extend(newConfig: Partial<T>): void {\r\n const filteredNewConfig = Object.fromEntries(\r\n Object.entries(newConfig).filter(([_, value]) => value !== undefined)\r\n );\r\n this.constants = {...this.constants, ...filteredNewConfig};\r\n }\r\n\r\n // Función para obtener todas las constantes de configuración\r\n public getConstants(): T {\r\n return this.constants;\r\n }\r\n}\r\n","import { DefaultConstants, DefaultTranslations, TranslationReplacements, Translator } from '@/app';\r\nimport { Constants } from '@/app/core/infrastructure/utilities/general/Constants';\r\n\r\nexport const __const = <T extends keyof DefaultConstants>(key: T): DefaultConstants[T] => {\r\n return Constants.getInstance().get(key);\r\n};\r\n\r\nexport const ___ = (key: keyof DefaultTranslations, replacements?: TranslationReplacements) => {\r\n return Translator.getInstance().get(key, replacements);\r\n};\r\n","import Echo from 'laravel-echo';\r\nimport Pusher from 'pusher-js';\r\nimport { ProcessChecker } from '@/app';\r\nimport { __const } from '@/app/core/infrastructure/utilities/_internal/helpers';\r\n\r\nexport class EchoService {\r\n static #connectionFailed: boolean | null = null;\r\n static #isStarted = false;\r\n\r\n static start() {\r\n if (!__const('VITE_BROADCASTING_ENABLED')) return;\r\n\r\n // initEcho\r\n\r\n window.Pusher = Pusher;\r\n\r\n window.Echo = new Echo({\r\n broadcaster: 'reverb',\r\n key: __const('VITE_REVERB_APP_KEY'),\r\n wsHost: __const('VITE_REVERB_HOST'),\r\n wsPort: __const('VITE_REVERB_PORT') ?? 80,\r\n wssPort: __const('VITE_REVERB_PORT') ?? 443,\r\n forceTLS: (__const('VITE_REVERB_SCHEME') ?? 'https') === 'https',\r\n enabledTransports: ['ws', 'wss'],\r\n });\r\n\r\n\r\n // initBinds\r\n\r\n const pusherErrorFunction = (error: any, type: string) => {\r\n EchoService.#connectionFailed = true;\r\n console.error(`[-------------------------------------------------------------]`);\r\n console.error(`Ha habido un error en la conexion con los websockets [${type}]:`);\r\n console.error(error);\r\n };\r\n const pusherSuccessFunction = (type: string) => {\r\n EchoService.#connectionFailed = false;\r\n console.info(`[${type}]`);\r\n };\r\n\r\n const echoConnection = window.Echo.connector.pusher.connection;\r\n\r\n // Cambio cualquer estado\r\n echoConnection.bind('state_change', (states: any) => {\r\n console.info(`pusher.connection.state changed to [${states.current}]`);\r\n ProcessChecker.checkReverb().then();\r\n });\r\n\r\n // ------------------------------------------------------------- Estados de ok -------------------------------------------------------------------\r\n\r\n echoConnection.bind('initialized', () => console.info('[initialized]'));\r\n\r\n echoConnection.bind('connecting', () => console.info('[connecting]'));\r\n\r\n echoConnection.bind('connected', () => pusherSuccessFunction('connected'));\r\n\r\n // ----------------------------------------------------------- Estados de error ------------------------------------------------------------------\r\n\r\n echoConnection.bind('error', (error: any) => pusherErrorFunction(error, 'error'));\r\n\r\n echoConnection.bind('failed', (error: any) => pusherErrorFunction(error, 'failed'));\r\n\r\n echoConnection.bind('disconnected', (error: any) => pusherErrorFunction(error, 'disconnected'));\r\n\r\n echoConnection.bind('unavailable', (error: any) => pusherErrorFunction(error, 'unavailable'));\r\n\r\n }\r\n\r\n // -----------------------------------------------------------------------------------------------------------------\r\n // ----- GETTERS AND SETTERS----------------------------------------------------------------------------------------\r\n\r\n static isFailed(): boolean {\r\n return EchoService.#connectionFailed === true;\r\n }\r\n\r\n static checkAndUpdateConnectedStatus() {\r\n if (!EchoService.#isStarted) return;\r\n const echoConnection = window.Echo.connector.pusher.connection;\r\n if (EchoService.#connectionFailed === true && echoConnection.state === 'connected') {\r\n EchoService.#connectionFailed = false;\r\n }\r\n }\r\n}\r\n","import { route } from 'ziggy-js';\r\nimport { __const } from '@/app/core/infrastructure/utilities/_internal/helpers';\r\nimport {\r\n CheckableProcess,\r\n EchoService,\r\n FetchBroadcastingResponse, FetchResponse, FetchResponseOrBroadcasting,\r\n g,\r\n LStorage,\r\n ResponseEventFetch,\r\n StorageProcessKeys,\r\n} from '@/app';\r\n\r\nexport class ProcessChecker\r\n{\r\n public static divMessage = {\r\n reverb: document.querySelector<HTMLDivElement>('#reverbErrorMessage'),\r\n queue: document.querySelector<HTMLDivElement>('#queueErrorMessage'),\r\n };\r\n public static routes = {\r\n reverb: route(__const('routeName_checkReverb')),\r\n queue: route(__const('routeName_checkQueue')),\r\n };\r\n\r\n public static STORAGE = {\r\n reverb: {\r\n isFailed() {\r\n return LStorage.getItem(StorageProcessKeys.reverb) === '1';\r\n },\r\n setAsFailed() {\r\n LStorage.setItem(StorageProcessKeys.reverb, '1');\r\n },\r\n setAsWorked() {\r\n LStorage.setItem(StorageProcessKeys.reverb, '0');\r\n },\r\n },\r\n queue: {\r\n isFailed() {\r\n return LStorage.getItem(StorageProcessKeys.queue) === '1';\r\n },\r\n setAsFailed() {\r\n LStorage.setItem(StorageProcessKeys.queue, '1');\r\n },\r\n setAsWorked() {\r\n LStorage.setItem(StorageProcessKeys.queue, '0');\r\n },\r\n }\r\n };\r\n\r\n public static startBtnListeners() {\r\n document.getElementById('btnCheckReverb')?.addEventListener('click', () => {\r\n ProcessChecker.checkReverb().then();\r\n });\r\n\r\n document.getElementById('btnCheckQueue')?.addEventListener('click', () => {\r\n ProcessChecker.checkQueue().then();\r\n });\r\n }\r\n\r\n public static startListenCheckChannels() {\r\n if (__const('VITE_BROADCASTING_ENABLED')) {\r\n window.Echo.channel('process-status')\r\n .listen('.ProcessStatusChecked', (res: ResponseEventFetch) => {\r\n if (res.response.success) {\r\n ProcessChecker.STORAGE[res.processName].setAsWorked();\r\n } else {\r\n ProcessChecker.STORAGE[res.processName].setAsFailed();\r\n }\r\n\r\n ProcessChecker.displayMessageBasedOnStorage(res.processName);\r\n });\r\n }\r\n }\r\n\r\n public static async checkReverb<T extends FetchBroadcastingResponse>(fromResult: T|undefined = undefined) {\r\n const subMessage = ProcessChecker.divMessage.reverb?.querySelector('#reverbSubmessage');\r\n subMessage?.classList.add(g.getHiddenClass());\r\n await g.sleep(200);\r\n EchoService.checkAndUpdateConnectedStatus();\r\n if (EchoService.isFailed() || !__const('VITE_BROADCASTING_ENABLED')) {\r\n ProcessChecker.STORAGE.reverb.setAsFailed();\r\n ProcessChecker.displayMessageBasedOnStorage(CheckableProcess.reverb);\r\n subMessage?.classList.remove(g.getHiddenClass());\r\n return false;\r\n }\r\n\r\n return await ProcessChecker.checkProcess(CheckableProcess.reverb, fromResult);\r\n }\r\n\r\n public static async checkQueue<T extends FetchBroadcastingResponse>(fromResult: T|undefined = undefined) {\r\n return await ProcessChecker.checkProcess(CheckableProcess.queue, fromResult);\r\n }\r\n\r\n private static async checkProcess(processName: CheckableProcess, fromResult: FetchBroadcastingResponse|undefined) {\r\n let processResult = false;\r\n g.addSpinner(ProcessChecker.divMessage[processName]);\r\n try {\r\n const result = fromResult ?? await g.fetchStrict<FetchResponseOrBroadcasting>({url: ProcessChecker.routes[processName]});\r\n\r\n let success = result.ok && result.success;\r\n\r\n if (typeof result.data === 'object' && result.data?.hasOwnProperty('broadcasting')) {\r\n //throw new Error(`No se ha encontrado la propiedad \"broadcasting\" en la \"response\" al comprobar el proceso \"${processName}\"`);\r\n const broadcasting: FetchResponse = result.data?.broadcasting;\r\n success = broadcasting.ok && broadcasting.success;\r\n }\r\n\r\n if (!success) {\r\n ProcessChecker.STORAGE[processName].setAsFailed();\r\n } else {\r\n ProcessChecker.STORAGE[processName].setAsWorked();\r\n processResult = true;\r\n }\r\n\r\n ProcessChecker.displayMessageBasedOnStorage(processName);\r\n } catch (e) {\r\n g.catchCode({error: e});\r\n }\r\n\r\n g.removeSpinner(ProcessChecker.divMessage[processName]);\r\n return processResult;\r\n }\r\n\r\n public static displayMessageBasedOnStorage(processName: CheckableProcess) {\r\n const hiddenClass = g.getHiddenClass();\r\n if (ProcessChecker.STORAGE[processName].isFailed()) {\r\n ProcessChecker.divMessage[processName]?.classList.remove(hiddenClass);\r\n } else {\r\n ProcessChecker.divMessage[processName]?.classList.add(hiddenClass);\r\n }\r\n }\r\n}","import { __const } from '@/app/core/infrastructure/utilities/_internal/helpers';\r\nimport { CheckableProcess, ProcessChecker } from '@/app';\r\n\r\nexport class Reverb\r\n{\r\n constructor() {\r\n ProcessChecker.startBtnListeners();\r\n ProcessChecker.startListenCheckChannels();\r\n ProcessChecker.displayMessageBasedOnStorage(CheckableProcess.reverb);\r\n ProcessChecker.displayMessageBasedOnStorage(CheckableProcess.queue);\r\n }\r\n\r\n startListenChannel(channelName: string, events: { event: string, callback: Function }[]) {\r\n if (__const('VITE_BROADCASTING_ENABLED')) {\r\n let channel = window.Echo.channel(channelName);\r\n events.forEach(event => {\r\n channel = channel.listen(event.event, (e: any) => {\r\n ProcessChecker.STORAGE.reverb.setAsWorked();\r\n ProcessChecker.displayMessageBasedOnStorage(CheckableProcess.reverb);\r\n event.callback(e);\r\n });\r\n });\r\n }\r\n }\r\n\r\n}","import { Colors, ConfigBtn, g } from '@/app';\r\n\r\ntype getHtmlParams = {\r\n htmlId?: string;\r\n finalClasses: string;\r\n extraAttributes: string;\r\n slot: string;\r\n isLink: boolean;\r\n linkUrl?: string;\r\n linkBlank?: boolean;\r\n};\r\n\r\nexport class Btn {\r\n private static getHtml({\r\n htmlId,\r\n finalClasses,\r\n extraAttributes,\r\n slot,\r\n isLink = false,\r\n linkUrl = '#',\r\n linkBlank,\r\n }: getHtmlParams)\r\n {\r\n return isLink\r\n ? `<a href=\"${linkUrl}\" ${linkBlank ? 'target=\"_blank\"' : ''} ><button class=\"${finalClasses}\">${slot}</button></a>`\r\n : `<button type=\"button\" ${htmlId} class=\"${finalClasses}\" ${extraAttributes}>${slot}</button>`;\r\n }\r\n\r\n static tailwind({id, size = 'base', color = 'blue', slot = '', extraClasses = '', extraAttributes = '', isLink = false, linkUrl, linkBlank}: ConfigBtn): string {\r\n const defaultClasses = 'rounded-lg font-medium focus:outline-none focus:ring-2';\r\n const sizeClasses = {\r\n '2xs': 'px-1.5 py-1 text-xs ',\r\n xs: 'px-3 py-2 text-xs ',\r\n sm: 'px-3 py-2 text-sm ',\r\n base: 'px-5 py-2.5 text-sm ',\r\n lg: 'px-5 py-3 text-base',\r\n lx: 'px-6 py-3.5 text-base',\r\n };\r\n const colorClasses: Record<Colors, string> = {\r\n blue: ' bg-blue-700 text-white hover:bg-blue-800 focus:ring-blue-300 dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800',\r\n dark: ' bg-gray-800 text-white hover:bg-gray-900 focus:ring-gray-300 dark:border-gray-700 dark:bg-gray-800 dark:hover:bg-gray-700 dark:focus:ring-gray-700',\r\n green: ' bg-green-700 text-white hover:bg-green-800 focus:ring-green-300 dark:bg-green-600 dark:hover:bg-green-700 dark:focus:ring-green-800',\r\n red: ' bg-red-700 text-white hover:bg-red-800 focus:ring-red-300 dark:bg-red-600 dark:hover:bg-red-700 dark:focus:ring-red-900',\r\n emerald: ' bg-emerald-600 text-white hover:bg-emerald-700 focus:ring-emerald-300 dark:bg-emerald-500 dark:hover:bg-emerald-700 dark:focus:ring-emerald-900',\r\n light: 'border border-gray-300 bg-white text-gray-900 hover:bg-gray-100 focus:ring-gray-100 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:hover:border-gray-600 dark:hover:bg-gray-700 dark:focus:ring-gray-700',\r\n yellow: ' bg-yellow-400 text-white hover:bg-yellow-500 focus:ring-yellow-300 dark:focus:ring-yellow-900',\r\n gray: ' bg-gray-500 text-white hover:bg-gray-600 focus:ring-gray-300 dark:focus:ring-gray-900',\r\n };\r\n const finalClasses = g.mergeTailwindClasses(`${defaultClasses} ${sizeClasses[size]} ${colorClasses[color]}`, extraClasses);\r\n const htmlId = id ? `id=\"${id}\"` : '';\r\n // return `<button type=\"button\" ${htmlId} class=\"${finalClasses}\" ${extraAttributes}>${slot}</button>`;\r\n return Btn.getHtml({htmlId, finalClasses, extraAttributes, slot, isLink, linkUrl, linkBlank});\r\n }\r\n\r\n static bootstrap({id, size = 'base', color = 'blue', slot = '', extraClasses = '', extraAttributes = '', isLink = false, linkUrl, linkBlank}: ConfigBtn): string {\r\n const defaultClasses = 'btn';\r\n const sizeClasses = {\r\n '2xs': 'btn-xs',\r\n xs: 'btn-xs',\r\n sm: 'btn-sm',\r\n base: '',\r\n lg: 'btn-lg',\r\n lx: 'btn-lg',\r\n };\r\n const colorClasses: Record<Colors, string> = {\r\n blue: 'btn-primary',\r\n dark: 'btn-dark',\r\n green: 'btn-success',\r\n red: 'btn-danger',\r\n emerald: 'btn-info',\r\n light: 'btn-light',\r\n yellow: 'btn-warning',\r\n gray: 'btn-secondary',\r\n };\r\n const finalClasses = `${defaultClasses} ${sizeClasses[size]} ${colorClasses[color]} ${extraClasses}`;\r\n const htmlId = id ? `id=\"${id}\"` : '';\r\n // return `<button type=\"button\" class=\"${finalClasses}\" ${extraAttributes}>${slot}</button>`;\r\n return Btn.getHtml({htmlId, finalClasses, extraAttributes, slot, isLink, linkUrl, linkBlank});\r\n }\r\n}","import { ConfigIcon, IconType } from '@/app';\r\n\r\nexport class Icon {\r\n static tailwind(name: IconType, { outline = false, strokeWidth = '1.5', size = 'size-6' }: ConfigIcon): string {\r\n const icons: Record<IconType, string> = {\r\n info: (outline)\r\n ? `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"${strokeWidth}\" stroke=\"currentColor\" class=\"${size}\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m11.25 11.25.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9-3.75h.008v.008H12V8.25Z\" />\r\n </svg>\r\n `\r\n : `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class=\"${size}\">\r\n <path fill-rule=\"evenodd\" d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm8.706-1.442c1.146-.573 2.437.463 2.126 1.706l-.709 2.836.042-.02a.75.75 0 0 1 .67 1.34l-.04.022c-1.147.573-2.438-.463-2.127-1.706l.71-2.836-.042.02a.75.75 0 1 1-.671-1.34l.041-.022ZM12 9a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Z\" clip-rule=\"evenodd\" />\r\n </svg>\r\n `,\r\n save: (outline)\r\n ? `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"${strokeWidth}\" stroke=\"currentColor\" class=\"${size}\">\r\n <path stroke=\"currentColor\" stroke-linejoin=\"round\" d=\"M4 5a1 1 0 0 1 1-1h11.586a1 1 0 0 1 .707.293l2.414 2.414a1 1 0 0 1 .293.707V19a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V5Z\"/>\r\n <path stroke=\"currentColor\" stroke-linejoin=\"round\" d=\"M8 4h8v4H8V4Zm7 10a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z\"/>\r\n </svg>\r\n `\r\n : `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class=\"${size}\">\r\n <path fill-rule=\"evenodd\" d=\"M5 3a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V7.414A2 2 0 0 0 20.414 6L18 3.586A2 2 0 0 0 16.586 3H5Zm10 11a3 3 0 1 1-6 0 3 3 0 0 1 6 0ZM8 7V5h8v2a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1Z\" clip-rule=\"evenodd\"/>\r\n </svg>\r\n `,\r\n cancel: (outline)\r\n ? `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"${strokeWidth}\" stroke=\"currentColor\" class=\"${size}\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M18.364 18.364A9 9 0 0 0 5.636 5.636m12.728 12.728A9 9 0 0 1 5.636 5.636m12.728 12.728L5.636 5.636\" />\r\n </svg>\r\n `\r\n :\r\n `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class=\"${size}\">\r\n <path fill-rule=\"evenodd\" d=\"m6.72 5.66 11.62 11.62A8.25 8.25 0 0 0 6.72 5.66Zm10.56 12.68L5.66 6.72a8.25 8.25 0 0 0 11.62 11.62ZM5.105 5.106c3.807-3.808 9.98-3.808 13.788 0 3.808 3.807 3.808 9.98 0 13.788-3.807 3.808-9.98 3.808-13.788 0-3.808-3.807-3.808-9.98 0-13.788Z\" clip-rule=\"evenodd\" />\r\n </svg>\r\n `,\r\n delete: (outline)\r\n ? `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"${strokeWidth}\" stroke=\"currentColor\" class=\"${size}\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m14.74 9-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 0 1-2.244 2.077H8.084a2.25 2.25 0 0 1-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 0 0-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 0 1 3.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 0 0-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 0 0-7.5 0\" />\r\n </svg>\r\n `\r\n : `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class=\"${size}\">\r\n <path fill-rule=\"evenodd\" d=\"M16.5 4.478v.227a48.816 48.816 0 0 1 3.878.512.75.75 0 1 1-.256 1.478l-.209-.035-1.005 13.07a3 3 0 0 1-2.991 2.77H8.084a3 3 0 0 1-2.991-2.77L4.087 6.66l-.209.035a.75.75 0 0 1-.256-1.478A48.567 48.567 0 0 1 7.5 4.705v-.227c0-1.564 1.213-2.9 2.816-2.951a52.662 52.662 0 0 1 3.369 0c1.603.051 2.815 1.387 2.815 2.951Zm-6.136-1.452a51.196 51.196 0 0 1 3.273 0C14.39 3.05 15 3.684 15 4.478v.113a49.488 49.488 0 0 0-6 0v-.113c0-.794.609-1.428 1.364-1.452Zm-.355 5.945a.75.75 0 1 0-1.5.058l.347 9a.75.75 0 1 0 1.499-.058l-.346-9Zm5.48.058a.75.75 0 1 0-1.498-.058l-.347 9a.75.75 0 0 0 1.5.058l.345-9Z\" clip-rule=\"evenodd\" />\r\n </svg>\r\n `,\r\n new: (outline)\r\n ? `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"${strokeWidth}\" stroke=\"currentColor\" class=\"${size}\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 9v6m3-3H9m12 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z\" />\r\n </svg>\r\n `\r\n : `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class=\"${size}\">\r\n <path fill-rule=\"evenodd\" d=\"M12 2.25c-5.385 0-9.75 4.365-9.75 9.75s4.365 9.75 9.75 9.75 9.75-4.365 9.75-9.75S17.385 2.25 12 2.25ZM12.75 9a.75.75 0 0 0-1.5 0v2.25H9a.75.75 0 0 0 0 1.5h2.25V15a.75.75 0 0 0 1.5 0v-2.25H15a.75.75 0 0 0 0-1.5h-2.25V9Z\" clip-rule=\"evenodd\" />\r\n </svg>\r\n `,\r\n reload: (outline)\r\n ? `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"${strokeWidth}\" stroke=\"currentColor\" class=\"${size}\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0 3.181 3.183a8.25 8.25 0 0 0 13.803-3.7M4.031 9.865a8.25 8.25 0 0 1 13.803-3.7l3.181 3.182m0-4.991v4.99\" />\r\n </svg>\r\n `\r\n : `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class=\"${size}\">\r\n <path fill-rule=\"evenodd\" d=\"M4.755 10.059a7.5 7.5 0 0 1 12.548-3.364l1.903 1.903h-3.183a.75.75 0 1 0 0 1.5h4.992a.75.75 0 0 0 .75-.75V4.356a.75.75 0 0 0-1.5 0v3.18l-1.9-1.9A9 9 0 0 0 3.306 9.67a.75.75 0 1 0 1.45.388Zm15.408 3.352a.75.75 0 0 0-.919.53 7.5 7.5 0 0 1-12.548 3.364l-1.902-1.903h3.183a.75.75 0 0 0 0-1.5H2.984a.75.75 0 0 0-.75.75v4.992a.75.75 0 0 0 1.5 0v-3.18l1.9 1.9a9 9 0 0 0 15.059-4.035.75.75 0 0 0-.53-.918Z\" clip-rule=\"evenodd\" />\r\n </svg>\r\n `,\r\n move: (outline)\r\n ? `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"${strokeWidth}\" stroke=\"currentColor\" class=\"${size}\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M10.5 6h9.75M10.5 6a1.5 1.5 0 1 1-3 0m3 0a1.5 1.5 0 1 0-3 0M3.75 6H7.5m3 12h9.75m-9.75 0a1.5 1.5 0 0 1-3 0m3 0a1.5 1.5 0 0 0-3 0m-3.75 0H7.5m9-6h3.75m-3.75 0a1.5 1.5 0 0 1-3 0m3 0a1.5 1.5 0 0 0-3 0m-9.75 0h9.75\" />\r\n </svg>\r\n `\r\n : `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class=\"${size}\">\r\n <path d=\"M6 12a.75.75 0 0 1-.75-.75v-7.5a.75.75 0 1 1 1.5 0v7.5A.75.75 0 0 1 6 12ZM18 12a.75.75 0 0 1-.75-.75v-7.5a.75.75 0 0 1 1.5 0v7.5A.75.75 0 0 1 18 12ZM6.75 20.25v-1.5a.75.75 0 0 0-1.5 0v1.5a.75.75 0 0 0 1.5 0ZM18.75 18.75v1.5a.75.75 0 0 1-1.5 0v-1.5a.75.75 0 0 1 1.5 0ZM12.75 5.25v-1.5a.75.75 0 0 0-1.5 0v1.5a.75.75 0 0 0 1.5 0ZM12 21a.75.75 0 0 1-.75-.75v-7.5a.75.75 0 0 1 1.5 0v7.5A.75.75 0 0 1 12 21ZM3.75 15a2.25 2.25 0 1 0 4.5 0 2.25 2.25 0 0 0-4.5 0ZM12 11.25a2.25 2.25 0 1 1 0-4.5 2.25 2.25 0 0 1 0 4.5ZM15.75 15a2.25 2.25 0 1 0 4.5 0 2.25 2.25 0 0 0-4.5 0Z\" />\r\n </svg>\r\n `,\r\n edit: (outline)\r\n ? `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"${strokeWidth}\" stroke=\"currentColor\" class=\"${size}\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m16.862 4.487 1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L10.582 16.07a4.5 4.5 0 0 1-1.897 1.13L6 18l.8-2.685a4.5 4.5 0 0 1 1.13-1.897l8.932-8.931Zm0 0L19.5 7.125M18 14v4.75A2.25 2.25 0 0 1 15.75 21H5.25A2.25 2.25 0 0 1 3 18.75V8.25A2.25 2.25 0 0 1 5.25 6H10\" />\r\n </svg>\r\n `\r\n : `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class=\"${size}\">\r\n <path d=\"M21.731 2.269a2.625 2.625 0 0 0-3.712 0l-1.157 1.157 3.712 3.712 1.157-1.157a2.625 2.625 0 0 0 0-3.712ZM19.513 8.199l-3.712-3.712-8.4 8.4a5.25 5.25 0 0 0-1.32 2.214l-.8 2.685a.75.75 0 0 0 .933.933l2.685-.8a5.25 5.25 0 0 0 2.214-1.32l8.4-8.4Z\" />\r\n <path d=\"M5.25 5.25a3 3 0 0 0-3 3v10.5a3 3 0 0 0 3 3h10.5a3 3 0 0 0 3-3V13.5a.75.75 0 0 0-1.5 0v5.25a1.5 1.5 0 0 1-1.5 1.5H5.25a1.5 1.5 0 0 1-1.5-1.5V8.25a1.5 1.5 0 0 1 1.5-1.5h5.25a.75.75 0 0 0 0-1.5H5.25Z\" />\r\n </svg>\r\n `,\r\n };\r\n return icons[name];\r\n }\r\n\r\n static bootstrap(name: IconType): string {\r\n const icons: Record<IconType, string> = {\r\n info: `<i class=\"fa fa-info-circle\"></i>`,\r\n save: `<i class=\"far fa-save\"></i>`,\r\n cancel: `<i class=\"fa fa-ban\"></i>`,\r\n delete: `<i class=\"fa fa-times\"></i>`,\r\n new: `<i class=\"fas fa-plus-square\"></i>`,\r\n reload: `<i class=\"fa fa-sync-alt\"></i>`,\r\n move: `<i class=\"fas fa-suitcase-rolling\"></i>`,\r\n edit: `<i class=\"far fa-edit\"></i>`,\r\n };\r\n return icons[name];\r\n }\r\n}\r\n","import { Btn, ComponentName, ComponentType, ConfigBtn, ConfigIcon, Icon, IconType } from '@/app';\r\nimport { __const } from '@/app/core/infrastructure/utilities/_internal/helpers';\r\n\r\nexport class Component {\r\n static get<T extends ComponentName>(component: T, config?: T extends `btn` ? ConfigBtn : ConfigIcon): string {\r\n const [type, name] = component.split('.') as [ComponentType, string];\r\n const useBootstrap = __const('VITE_TS_USE_BOOSTRAP_CLASSES');\r\n\r\n if (type === 'btn') {\r\n return useBootstrap ? Btn.bootstrap(config as ConfigBtn) : Btn.tailwind(config as ConfigBtn);\r\n } else if (type === 'icon') {\r\n return useBootstrap ? Icon.bootstrap(name as IconType) : Icon.tailwind(name as IconType, config as ConfigIcon);\r\n }\r\n return '';\r\n }\r\n}","import { g, UserPreferences } from '@/app';\r\nimport { __const } from '@/app/core/infrastructure/utilities/_internal/helpers';\r\n\r\nexport class Cookie {\r\n private cookiePreferencesName: string = g.slugify(__const('VITE_APP_NAME'), '_') + '_kalion_user_preferences';\r\n\r\n static new()\r\n {\r\n return new Cookie();\r\n }\r\n\r\n get(name: string): string | null\r\n {\r\n const cookies = document.cookie.split(\"; \");\r\n const cookie = cookies.find((row) => row.startsWith(`${name}=`));\r\n return cookie ? decodeURIComponent(cookie.split(\"=\")[1]) : null;\r\n }\r\n\r\n set(name: string, value: string, days: number): void\r\n {\r\n const expires = new Date();\r\n expires.setTime(expires.getTime() + days * 24 * 60 * 60 * 1000);\r\n document.cookie = `${name}=${encodeURIComponent(value)}; expires=${expires.toUTCString()}; path=/`;\r\n }\r\n\r\n delete(name: string): void\r\n {\r\n document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/`;\r\n }\r\n\r\n\r\n preferences(): UserPreferences | null\r\n {\r\n const cookieValue = this.get(this.cookiePreferencesName);\r\n return cookieValue ? JSON.parse(cookieValue) : null;\r\n }\r\n\r\n setPreferences(preferences: UserPreferences): void\r\n {\r\n const serializedPreferences = encodeURIComponent(JSON.stringify(preferences));\r\n const expires = new Date(Date.now() + 30 * 24 * 60 * 60 * 1000).toUTCString(); // 30 días\r\n document.cookie = `${this.cookiePreferencesName}=${serializedPreferences}; path=/; expires=${expires}`;\r\n\r\n // Otra opción es atacar al endpoint para que sea el backend el que modifique la cookie:\r\n /*g.fetch({\r\n url: route('kalion.ajax.cookie.update', {_query: {preferences: serializedPreferences}}),\r\n type: 'PUT'\r\n }).then();*/\r\n }\r\n\r\n setPreference<K extends keyof UserPreferences>(key: K, value: UserPreferences[K]): void {\r\n const preferences = this.preferences();\r\n if (preferences !== null) {\r\n preferences[key] = value;\r\n this.setPreferences(preferences);\r\n }\r\n }\r\n}\r\n","import {\r\n CatchParams,\r\n FetchParams, FetchReturnType, SModal,\r\n ValidationInternalData,\r\n ValidationResponse,\r\n ValidationRules,\r\n} from '@/app';\r\nimport { ___, __const } from '@/app/core/infrastructure/utilities/_internal/helpers';\r\n\r\ntype Value = string | string[];\r\ntype Key = string | string[] | null;\r\n\r\nexport class g {\r\n static errorModalIsShowed: boolean = false;\r\n\r\n static isNotNull(variable: any): boolean {\r\n return variable !== null;\r\n }\r\n\r\n static isObject(variable: any): boolean {\r\n return typeof variable === 'object' && variable !== null;\r\n }\r\n\r\n static isUndefined(variable: any): boolean {\r\n return typeof variable === 'undefined';\r\n }\r\n\r\n static escapeHtml(html: string): string {\r\n return html\r\n .replaceAll('&', '&amp;')\r\n .replaceAll('<', '&lt;')\r\n .replaceAll('>', '&gt;')\r\n .replaceAll('\"', '&quot;')\r\n .replaceAll('\\'', '&#039;');\r\n }\r\n\r\n static handleGlobalError(event: Event | string, source?: string, lineno?: number, colno?: number, error?: Error) {\r\n // console.log({event, source, lineno, colno, error,});\r\n // console.log('--------------');\r\n\r\n let message = error?.message;\r\n if (message === undefined && typeof event === 'string') {\r\n message = event;\r\n }\r\n if (message === undefined) {\r\n message = 'No se ha podido obtener ningun mensaje del error';\r\n }\r\n\r\n console.warn(message);\r\n // console.warn({event, source, lineno, colno, error});\r\n\r\n // TODO Canals - mirgrar a Tingle para no pisar otro modal que este abierto: alert(g.escapeHtml(error?.message ?? \"Formato error imprevisto\"));\r\n SModal.errorModal({\r\n title: 'Error imprevisto',\r\n html: `<span class=\"restriction-message\">${g.escapeHtml(message)}</span>`,\r\n cancelButtonText: 'Ok',\r\n }).then(result => {\r\n g.errorModalIsShowed = false;\r\n }).catch(e => {\r\n //\r\n });\r\n g.errorModalIsShowed = true;\r\n return false;\r\n }\r\n\r\n private static async fetchBase<R>({\r\n url,\r\n type = 'GET',\r\n params = undefined,\r\n }: FetchParams, strict: boolean): Promise<FetchReturnType<R>>\r\n {\r\n try {\r\n let fetchParams = {\r\n method: type, // *GET, POST, PUT, DELETE, etc.\r\n headers: {\r\n 'Content-Type': 'application/json', // \"Content-Type\": \"application/x-www-form-urlencoded\",\r\n 'Accept': 'application/json',\r\n 'X-Requested-With': 'XMLHttpRequest',\r\n 'X-CSRF-TOKEN': __const('token'),\r\n },\r\n } as RequestInit;\r\n\r\n if (type !== 'GET' && params !== undefined) {\r\n fetchParams.body = JSON.stringify(params);\r\n }\r\n\r\n const response = await fetch(url, fetchParams);\r\n const result = await response.json() as FetchReturnType<R> | string;\r\n\r\n if (typeof result === 'string') {\r\n const reason = result === '' ? 'El servidor ha devuelto una respuesta vacia' : result;\r\n return Promise.reject(reason);\r\n }\r\n\r\n result.ok = response.ok;\r\n if (strict && !response.ok) {\r\n return Promise.reject(result);\r\n }\r\n\r\n return Promise.resolve(result);\r\n } catch (e) {\r\n console.error('Error con fetch');\r\n return Promise.reject(e);\r\n }\r\n }\r\n\r\n static async fetch<R>({url, type = 'GET', params = undefined}: FetchParams): Promise<FetchReturnType<R>>\r\n {\r\n return await g.fetchBase<R>({url, type, params}, false);\r\n }\r\n\r\n static async fetchStrict<R>({url, type = 'GET', params = undefined}: FetchParams): Promise<FetchReturnType<R>>\r\n {\r\n return await g.fetchBase<R>({url, type, params}, true);\r\n }\r\n\r\n static async fetchString({url, type = 'GET', params = undefined}: FetchParams): Promise<{ok: boolean, text: string}>\r\n {\r\n try {\r\n let fetchParams = {\r\n method: type, // *GET, POST, PUT, DELETE, etc.\r\n headers: {\r\n 'X-Requested-With': 'XMLHttpRequest',\r\n 'X-CSRF-TOKEN': __const('token'),\r\n },\r\n } as RequestInit;\r\n\r\n if (type !== 'GET' && params !== undefined) {\r\n fetchParams.body = JSON.stringify(params);\r\n }\r\n\r\n const response = await fetch(url, fetchParams);\r\n const text = await response.text();\r\n\r\n return Promise.resolve({\r\n ok: response.ok,\r\n text: text,\r\n });\r\n } catch (e) {\r\n console.error('Error con fetch');\r\n return Promise.reject(e);\r\n }\r\n }\r\n\r\n static catchCode({\r\n error,\r\n title = undefined,\r\n text = undefined,\r\n html = undefined,\r\n reloadOnClose = false,\r\n footer = undefined,\r\n from = undefined,\r\n }: CatchParams)\r\n {\r\n console.error(error);\r\n\r\n if (g.errorModalIsShowed) return;\r\n\r\n if (!g.isUndefined(from)) {\r\n console.log('From:', from);\r\n }\r\n\r\n const message = g.getErrorMessage(text, error);\r\n const finalHtml = html\r\n ? html\r\n : `<span class=\"restriction-message\">${g.escapeHtml(message)}</span>`;\r\n\r\n // Abrir modal\r\n SModal.errorModal({\r\n icon: 'error',\r\n title: title,\r\n html: finalHtml,\r\n confirmButtonText: (reloadOnClose) ? ___('reload_page') : ___('ok'),\r\n footer: footer,\r\n }, true)\r\n .then((result) => {\r\n g.errorModalIsShowed = false;\r\n if (reloadOnClose && result.isConfirmed) {\r\n location.reload();\r\n }\r\n });\r\n g.errorModalIsShowed = true;\r\n }\r\n\r\n private static getErrorMessage(text: string|undefined, error: any): string\r\n {\r\n if (text !== undefined) {\r\n return text;\r\n }\r\n if (!g.isObject(error)) {\r\n return error;\r\n }\r\n\r\n return error.hasOwnProperty('message') ? error.message : 'Error imprevisto';\r\n }\r\n\r\n static sleep(ms: number) {\r\n return new Promise(resolve => setTimeout(resolve, ms));\r\n }\r\n\r\n static strIsEmpty(str: any) {\r\n if (typeof str !== 'string') return false;\r\n return !Boolean(str.trim());\r\n }\r\n\r\n static isEmpty(value: any) {\r\n return g.isNullish(value) || g.strIsEmpty(value) || Number.isNaN(value);\r\n }\r\n\r\n static deleteArrayItemsWhere(array: any[], filterFunc: (e: any) => boolean, nameField: string) {\r\n let deleteItems = array.filter(filterFunc);\r\n deleteItems.forEach(deleteItem => array.splice(array.findIndex(item => item[nameField] === deleteItem[nameField]), 1));\r\n return array;\r\n }\r\n\r\n static valueFailsRequiredValidation(value: any) {\r\n // return (!value && value !== 0) || value.length === 0 || /^\\s*$/.test(value)\r\n return value === null || value === undefined || (typeof value === 'string' && value.trim().length === 0);\r\n }\r\n\r\n static validate(data: Record<string, any>, rules: ValidationRules): ValidationResponse {\r\n // creamos el objeto de respuesta\r\n let res: ValidationInternalData = {success: [], messages: [], validated: {}};\r\n\r\n // Recorremos el objeto de Reglas de valicacion\r\n Object.entries(rules).forEach(([key, value]) => {\r\n\r\n if (!Array.isArray(value)) {\r\n res.validated[key] = value;\r\n return;\r\n }\r\n\r\n // Recorremos las reglas de la validacion acual\r\n value.forEach(item => { // item = required, index = 0\r\n\r\n // Separar la regla de los parametros\r\n let arrayItems = item.split(':');\r\n\r\n // Logica segun el tipo de validacion\r\n switch (arrayItems[0]) {\r\n case 'optional':\r\n if (data.hasOwnProperty(key) && data[key] !== undefined) {\r\n res.validated[key] = data[key];\r\n } else {\r\n res.validated[key] = null;\r\n }\r\n break;\r\n case 'required':\r\n if (g.valueFailsRequiredValidation(data[key])) {\r\n res.success.push(false);\r\n res.messages.push(`El campo \"${key}\" es obligatorio`);\r\n } else {\r\n res.validated[key] = data[key];\r\n }\r\n break;\r\n case 'min':\r\n if (data[key]) {\r\n if (data[key].length < parseInt(arrayItems[1])) {\r\n res.success.push(false);\r\n res.messages.push(`El campo \"${key}\" ha de tener como mínimo ${arrayItems[1]} caracteres`);\r\n } else {\r\n res.validated[key] = data[key];\r\n }\r\n }\r\n break;\r\n case 'max':\r\n if (data[key]) {\r\n if (data[key].length > parseInt(arrayItems[1])) {\r\n res.success.push(false);\r\n res.messages.push(`El campo \"${key}\" ha de tener como máximo ${arrayItems[1]} caracteres`);\r\n } else {\r\n res.validated[key] = data[key];\r\n }\r\n }\r\n break;\r\n case 'color':\r\n if (data[key]) {\r\n if (!data[key].match(/^(#[a-fA-F0-9]{6})$/i)) {\r\n res.success.push(false);\r\n res.messages.push(`El campo \"${key}\" ha de tener formato hexadecimal, por ejemplo, #FFCC00`);\r\n } else {\r\n res.validated[key] = data[key];\r\n }\r\n }\r\n break;\r\n case 'array':\r\n if (data[key]) {\r\n if (!Array.isArray(data[key])) {\r\n res.success.push(false);\r\n res.messages.push(`El campo \"${key}\" debe ser un array`);\r\n } else {\r\n res.validated[key] = data[key];\r\n }\r\n }\r\n break;\r\n case 'number':\r\n if (data[key]) {\r\n if (!Number.isInteger(parseInt(data[key]))) {\r\n res.success.push(false);\r\n res.messages.push(`El campo \"${key}\" debe ser un numero`);\r\n } else {\r\n res.validated[key] = data[key];\r\n }\r\n }\r\n break;\r\n case 'boolean':\r\n if (data[key]) {\r\n if (typeof (!!data[key]) !== 'boolean') {\r\n res.success.push(false);\r\n res.messages.push(`El campo \"${key}\" debe ser verdadero o falso`);\r\n } else {\r\n res.validated[key] = data[key];\r\n }\r\n }\r\n break;\r\n case 'required_if':\r\n if (arrayItems[1] === '1' && g.valueFailsRequiredValidation(data[key])) {\r\n res.success.push(false);\r\n res.messages.push(`El campo \"${key}\" es obligatorio en esta situación`);\r\n } else {\r\n res.validated[key] = data[key] ?? null;\r\n }\r\n break;\r\n default:\r\n res.success.push(false);\r\n res.messages.push(`La validación introducida no esta controlada`);\r\n }\r\n });\r\n\r\n });\r\n\r\n return {success: (!res.success.includes(false)), messages: res.messages, validated: res.validated};\r\n }\r\n\r\n static strIncludesAny(str: string, values: string[]) {\r\n let res = false;\r\n values.forEach(value => {\r\n if (str.includes(value)) {\r\n res = true;\r\n }\r\n });\r\n return res;\r\n }\r\n\r\n static eventClosest(event: Event, selectors: string): HTMLElement | null {\r\n return (event?.target as HTMLElement).closest(selectors);\r\n }\r\n\r\n static showPageLoader() {\r\n const body = document.querySelector('body');\r\n body?.classList.add('overlay-body');\r\n // TODO Canals - (tailwind) pasar a componente\r\n body?.insertAdjacentHTML('beforeend', '<div id=\"page-loader\" class=\"overlay\"><div class=\"loader-container\"><div class=\"loader\"></div></div></div>');\r\n }\r\n\r\n static removePageLoader() {\r\n const body = document.querySelector('body');\r\n const loader = document.querySelector('#page-loader');\r\n body?.classList.remove('overlay-body');\r\n loader?.remove();\r\n }\r\n\r\n static reloadPage() {\r\n g.showPageLoader();\r\n location.reload();\r\n }\r\n\r\n static startTooltips() {\r\n import('bootstrap').then(bootstrap => {\r\n const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle=\"tooltip\"]');\r\n const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl));\r\n }).catch(error => {\r\n console.error('Tabulator-tables no está instalado o no se pudo cargar.', error);\r\n });\r\n }\r\n\r\n static addSpinner(selectors: string | HTMLElement | NodeListOf<HTMLElement> | null, size: 'sm' | 'md' = 'md') {\r\n if (selectors === null) return;\r\n\r\n // TODO Canals - (tailwind) pasar a componente\r\n const sizeClass = (size === 'sm') ? 'spinner-border-sm' : '';\r\n const spinnerHtml = `<div class=\"spinner-border ${sizeClass}\" data-added-in=\"general\" role=\"status\"><span class=\"visually-hidden\">Loading...</span></div>`;\r\n if (selectors instanceof HTMLElement) {\r\n selectors.insertAdjacentHTML('afterbegin', spinnerHtml);\r\n } else if (selectors instanceof NodeList) {\r\n selectors.forEach((item) => {\r\n item.insertAdjacentHTML('afterbegin', spinnerHtml);\r\n });\r\n } else {\r\n const elements = document.querySelectorAll<HTMLElement>(selectors);\r\n elements.forEach(item => {\r\n item.insertAdjacentHTML('afterbegin', spinnerHtml);\r\n });\r\n }\r\n }\r\n\r\n static removeSpinner(selectors: string | HTMLElement | NodeListOf<HTMLElement> | null) {\r\n if (selectors === null) return;\r\n\r\n if (selectors instanceof HTMLElement) {\r\n selectors.querySelector('[data-added-in=\"general\"]')?.remove();\r\n } else if (selectors instanceof NodeList) {\r\n selectors.forEach((item) => {\r\n item.querySelector('[data-added-in=\"general\"]')?.remove();\r\n });\r\n } else {\r\n const elements = document.querySelectorAll<HTMLElement>(selectors);\r\n elements.forEach(item => {\r\n item.querySelector('[data-added-in=\"general\"]')?.remove();\r\n });\r\n }\r\n }\r\n\r\n static consoleInfo(message?: any) {\r\n if (message) console.info(`%c INFO - ${message}`, 'background: #222; color: #bada55; padding: 0.5rem');\r\n }\r\n\r\n // Función para comprobar si un valor es truthy\r\n static isTruthy(value: any) {\r\n return !!value;\r\n }\r\n\r\n // Función para comprobar si un valor es falsy\r\n static isFalsy(value: any) {\r\n return !value;\r\n }\r\n\r\n // Función para comprobar si un valor es nullish (null o undefined)\r\n static isNullish(value: any) {\r\n return value === null || value === undefined;\r\n }\r\n\r\n /*static pluck(array: any[], key: string) {\r\n return array.map(i => i[key]);\r\n }\r\n\r\n static pluck(array: Record<any, any>[], value: string, key: string) {\r\n return array.reduce((acc, obj) => {\r\n acc[obj[key]] = obj[value];\r\n return acc;\r\n }, {});\r\n }*/\r\n\r\n static dataGet(target: any, key: Key, defaultValue: any = null): any {\r\n if (key === null) {\r\n return target;\r\n }\r\n\r\n const keys = Array.isArray(key) ? key : key.split('.');\r\n\r\n for (let i = 0; i < keys.length; i++) {\r\n const segment = keys[i];\r\n\r\n if (segment === null) {\r\n return target;\r\n }\r\n\r\n if (segment === '*') {\r\n if (typeof target[Symbol.iterator] !== 'function') {\r\n return defaultValue;\r\n }\r\n\r\n const result: any[] = [];\r\n for (const item of target) {\r\n result.push(g.dataGet(item, keys.slice(i + 1)));\r\n }\r\n return result.flat();\r\n }\r\n\r\n if (target && (typeof target === 'object' || Array.isArray(target)) && segment in target) {\r\n target = target[segment];\r\n } else {\r\n return defaultValue;\r\n }\r\n }\r\n\r\n return target;\r\n }\r\n\r\n static explodePluckParameters(value: Value, key: Key): [Value, Key] {\r\n const valueArray = typeof value === 'string' ? value.split('.') : value;\r\n const keyArray = key === null || Array.isArray(key) ? key : key.split('.');\r\n return [valueArray, keyArray];\r\n }\r\n\r\n\r\n static pluck(array: Record<any, any>[], value: Key): any[];\r\n static pluck(array: Record<any, any>[], value: Key, key: Key): Record<any, any>;\r\n static pluck(array: Record<any, any>[], value: Value, key: Key = null): any {\r\n const results: any = key === null ? [] : {};\r\n [value, key] = g.explodePluckParameters(value, key);\r\n\r\n for (const item of array) {\r\n const itemValue = g.dataGet(item, value);\r\n\r\n if (key === null) {\r\n results.push(itemValue);\r\n } else {\r\n let itemKey = g.dataGet(item, key);\r\n\r\n if (itemKey && typeof itemKey === 'object' && typeof itemKey.toString === 'function') {\r\n itemKey = itemKey.toString();\r\n }\r\n\r\n results[itemKey] = itemValue;\r\n }\r\n }\r\n\r\n return results;\r\n }\r\n\r\n static slugify(text: string, separator: string = '-'): string {\r\n if (!text) return '';\r\n\r\n // Normaliza el texto a formato NFD y remueve los diacríticos\r\n text = text.normalize(\"NFD\").replace(/\\p{Diacritic}/gu, \"\");\r\n\r\n // Convierte a minúsculas, reemplaza caracteres no alfanuméricos con el separador\r\n text = text.toLowerCase()\r\n .replace(/[^a-z0-9]+/g, separator) // Reemplaza caracteres no alfanuméricos por el separador\r\n .replace(new RegExp(`^${separator}|${separator}$`, 'g'), ''); // Elimina separadores extra\r\n\r\n return text;\r\n }\r\n\r\n static getHiddenClass()\r\n {\r\n return __const('VITE_TS_USE_BOOSTRAP_CLASSES') ? 'd-none' : 'hidden';\r\n }\r\n\r\n static mergeTailwindClasses (defaultCls: string, extraCls: string) {\r\n const defaultArray = defaultCls.split(' ').filter(Boolean);\r\n const extraArray = extraCls.split(' ').filter(Boolean);\r\n return [\r\n ...defaultArray.filter(cls => !extraArray.some(extra => extra.startsWith(cls.split('-')[0]))),\r\n ...extraArray\r\n ].join(' ');\r\n }\r\n}\r\n","export class Html {\r\n static compareTailwindClassesHTML(htmlA: string, htmlB: string) {\r\n // Función auxiliar para extraer las clases de un string de clases\r\n function extractClassesFromElement(element: Element) {\r\n const classList = element.getAttribute('class');\r\n return classList ? classList.split(' ').sort().join(' ') : '';\r\n }\r\n\r\n // Función para obtener un array de clases ordenadas de todos los elementos del HTML\r\n function getSortedClassesArray(htmlString: string) {\r\n const parser = new DOMParser();\r\n const doc = parser.parseFromString(htmlString, 'text/html');\r\n const allElements = doc.querySelectorAll('*'); // Selecciona todos los elementos\r\n return Array.from(allElements).map(extractClassesFromElement);\r\n }\r\n\r\n // Obtener las clases de ambos fragmentos HTML\r\n const classesA = getSortedClassesArray(htmlA);\r\n const classesB = getSortedClassesArray(htmlB);\r\n\r\n // Comparar ambos arrays de clases\r\n if (classesA.length !== classesB.length) return false;\r\n return classesA.every((classA, index) => classA === classesB[index]);\r\n }\r\n\r\n static compareHTMLElementsStructure(htmlA: string, htmlB: string) {\r\n // Función auxiliar para obtener los atributos de un elemento como un objeto\r\n function getAttributesMap(element: Element) {\r\n const attributes: Record<string, string> = {};\r\n for (const attr of Array.from(element.attributes)) {\r\n // Omitir la propiedad \"style\"\r\n if (attr.name === 'style') continue;\r\n\r\n // Si el atributo es 'class', ordenamos las clases\r\n if (attr.name === 'class') {\r\n attributes[attr.name] = attr.value.split(' ').sort().join(' ').trim();\r\n } else {\r\n attributes[attr.name] = attr.value.trim();\r\n }\r\n }\r\n return attributes;\r\n }\r\n\r\n // Función auxiliar para comparar dos objetos de atributos\r\n function compareAttributes(attrsA: Record<string, string>, attrsB: Record<string, string>) {\r\n const keysA = Object.keys(attrsA);\r\n const keysB = Object.keys(attrsB);\r\n\r\n // Comparar la cantidad de atributos\r\n if (keysA.length !== keysB.length) return false;\r\n\r\n // Comparar cada atributo y su valor\r\n return keysA.every(key => attrsA[key] === attrsB[key]);\r\n }\r\n\r\n // Función recursiva para comparar dos elementos y su estructura\r\n function compareElements(elementA: Element, elementB: Element) {\r\n // Comparar las etiquetas\r\n if (elementA.tagName !== elementB.tagName) return false;\r\n\r\n // Comparar los atributos\r\n const attrsA = getAttributesMap(elementA);\r\n const attrsB = getAttributesMap(elementB);\r\n if (!compareAttributes(attrsA, attrsB)) return false;\r\n\r\n // Comparar la cantidad de hijos\r\n const childrenA = elementA.children;\r\n const childrenB = elementB.children;\r\n if (childrenA.length !== childrenB.length) return false;\r\n\r\n // Comparar recursivamente los hijos\r\n for (let i = 0; i < childrenA.length; i++) {\r\n if (!compareElements(childrenA[i], childrenB[i])) return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n // Función para obtener el primer elemento del HTML\r\n function getRootElement(htmlString: string) {\r\n const parser = new DOMParser();\r\n const doc = parser.parseFromString(htmlString, 'text/html');\r\n return doc.body.firstElementChild; // Obtener el primer elemento del body\r\n }\r\n\r\n // Obtener los elementos raíz de ambos fragmentos HTML\r\n const rootA = getRootElement(htmlA);\r\n const rootB = getRootElement(htmlB);\r\n\r\n // Verificar que ambos elementos raíz existan\r\n if (!rootA || !rootB) return false;\r\n\r\n // Comparar las estructuras de los dos elementos raíz\r\n return compareElements(rootA, rootB);\r\n }\r\n}","type Constructor<T = {}> = new (...args: any[]) => T;\r\n\r\nexport class Instantiable {\r\n // Método estático para instanciar clases hijas\r\n static new<T extends Constructor>(this: T, ...args: ConstructorParameters<T>): InstanceType<T> {\r\n return new this(...args) as InstanceType<T>;\r\n }\r\n}\r\n","import { DateTime } from 'luxon';\r\nimport { DateTimeUnit } from 'luxon/src/datetime';\r\nimport { DurationObjectUnits } from 'luxon/src/duration';\r\n\r\ntype ReceivedDate = string | DateTime\r\ntype ReceivedNullableDate = string | DateTime | null | undefined\r\n\r\nexport class LDate {\r\n // Consultar formatos en: https://moment.github.io/luxon/#/formatting\r\n static formats = {\r\n date_startYear: 'yyyy-LL-dd',\r\n date_startDay: 'dd-LL-yyyy',\r\n date_startYear_slash: 'yyyy/LL/dd',\r\n date_startDay_slash: 'dd/LL/yyyy',\r\n date_startMonthWithoutDay_slash: 'LL/yyyy',\r\n\r\n datetime_startYear: 'yyyy-LL-dd HH:mm:ss',\r\n datetime_startYear_oneWord: 'yyyyLLdd_HHmmss',\r\n\r\n time: 'HH:mm:ss',\r\n timeWithoutHours: 'mm:ss',\r\n\r\n timestamp_seconds: 'X',\r\n };\r\n\r\n static #isDatetime(date: any) {\r\n return (date instanceof DateTime);\r\n }\r\n\r\n static now() {\r\n return DateTime.now();\r\n }\r\n\r\n static local() {\r\n return DateTime.local();\r\n }\r\n\r\n static parse(date: string) {\r\n return DateTime.fromSQL(date);\r\n }\r\n\r\n static format(date: ReceivedDate, format: string) {\r\n const datetime = (date instanceof DateTime) ? date : LDate.parse(date);\r\n return datetime.toFormat(format);\r\n }\r\n\r\n static toSeconds(date: ReceivedDate) {\r\n return LDate.format(date, LDate.formats.timestamp_seconds);\r\n }\r\n\r\n static hasSame(d1: ReceivedNullableDate, d2: ReceivedNullableDate, unit: DateTimeUnit) {\r\n if (d1 === null || d2 === null || d1 === undefined || d2 === undefined) return false;\r\n d1 = (d1 instanceof DateTime) ? d1 : LDate.parse(d1);\r\n d2 = (d2 instanceof DateTime) ? d2 : LDate.parse(d2);\r\n return d1.hasSame(d2, unit);\r\n }\r\n\r\n static diffNow(date: ReceivedNullableDate, unit: keyof DurationObjectUnits = 'seconds') {\r\n if (date === null || date === undefined) return null;\r\n const d = (date instanceof DateTime) ? date : LDate.parse(date);\r\n return (d.isValid) ? d.diffNow(unit).toObject()[unit] : 0;\r\n }\r\n\r\n static diff(d1: ReceivedNullableDate, d2: ReceivedNullableDate, unit: keyof DurationObjectUnits = 'seconds') {\r\n if (d1 === null || d2 === null || d1 === undefined || d2 === undefined) return null;\r\n const date1 = (d1 instanceof DateTime) ? d1 : LDate.parse(d1);\r\n const date2 = (d2 instanceof DateTime) ? d2 : LDate.parse(d2);\r\n return date1.diff(date2, unit).toObject()[unit];\r\n }\r\n\r\n static getTimeId() {\r\n return LDate.format(LDate.now(), LDate.formats.datetime_startYear_oneWord);\r\n }\r\n}\r\n","import { LDate } from '@/app';\r\nimport { __const } from '@/app/core/infrastructure/utilities/_internal/helpers';\r\n\r\nexport class LStorage {\r\n\r\n static readonly VERSION = __const('VITE_TS_STORAGE_VERSION'); // Cambia este valor para invalidar el localStorage\r\n static readonly VERSION_KEY = 'config-version';\r\n\r\n static setItem(key: string, value: string) {\r\n window.localStorage.setItem(key, value);\r\n }\r\n\r\n static getItem(key: string) {\r\n return window.localStorage.getItem(key);\r\n }\r\n\r\n static removeItem(key: string) {\r\n window.localStorage.removeItem(key);\r\n }\r\n\r\n static exist(key: string) {\r\n return LStorage.getItem(key) !== null;\r\n }\r\n\r\n static checkAndUpdateVersion() {\r\n const savedVersion = localStorage.getItem(LStorage.VERSION_KEY);\r\n if (savedVersion !== LStorage.VERSION) {\r\n localStorage.clear();\r\n localStorage.setItem(LStorage.VERSION_KEY, LStorage.VERSION);\r\n }\r\n }\r\n\r\n\r\n static isFirstConnectionInDay() {\r\n const validSecondsToBeCountedAsTheSameDay = 10;\r\n const lastConn = LStorage.getItem('lastConnection');\r\n const diffNow = LDate.diffNow(lastConn, 'seconds');\r\n return (\r\n !LStorage.exist('lastConnection')\r\n ||\r\n !LDate.hasSame(LDate.now(), lastConn, 'day')\r\n ||\r\n (Math.abs(diffNow ?? 0) < validSecondsToBeCountedAsTheSameDay)\r\n );\r\n }\r\n\r\n static setNowAsLastConnection() {\r\n LStorage.setItem('lastConnection', LDate.toSeconds(LDate.now()));\r\n }\r\n\r\n}\r\n","type MutationParams = {\r\n elementId: string;\r\n class: string;\r\n whenHave: () => void;\r\n whenHavent: () => void;\r\n}\r\n\r\nexport class Mutation {\r\n static observeClass(params: MutationParams) {\r\n let isDrawerOpen: null | boolean = null;\r\n const element = document.getElementById(params.elementId);\r\n\r\n if (element === null) return;\r\n\r\n // Crear un MutationObserver para observar los cambios de atributos\r\n const observer = new MutationObserver((mutations) => {\r\n mutations.forEach((mutation) => {\r\n if (mutation.attributeName === 'class') {\r\n const drawerClosed = element.classList.contains(params.class);\r\n\r\n if (drawerClosed && isDrawerOpen !== false) {\r\n params.whenHave();\r\n isDrawerOpen = false;\r\n } else if (!drawerClosed && isDrawerOpen !== true) {\r\n params.whenHavent();\r\n isDrawerOpen = true;\r\n }\r\n }\r\n });\r\n });\r\n\r\n // Configurar el observer para observar cambios en los atributos\r\n observer.observe(element, {attributes: true});\r\n }\r\n\r\n static observe(targetNode: HTMLElement, options: MutationObserverInit, mutationCallback: () => {})\r\n {\r\n const observer = new MutationObserver((mutations) => {\r\n mutations.forEach(mutationCallback);\r\n });\r\n\r\n // Configurar el observer para observar cambios en los atributos\r\n observer.observe(targetNode, {attributes: true});\r\n }\r\n}\r\n","import { g, LDate, LStorage } from '@/app';\r\nimport { __const } from '@/app/core/infrastructure/utilities/_internal/helpers';\r\n\r\ntype LaunchParams = {\r\n title: string,\r\n body?: string,\r\n openUrl?: string\r\n when: 'hidden' | 'unfocused' | 'all'\r\n}\r\n\r\nexport class Notify {\r\n readonly #title: string;\r\n readonly #body?: string;\r\n readonly #openUrl?: string;\r\n\r\n static STORAGE = {\r\n getAll() {\r\n return LStorage.getItem('notified');\r\n },\r\n check(key: string) {\r\n return LStorage.getItem('notified') === key;\r\n },\r\n saveNotified(key: string) {\r\n LStorage.setItem('notified', key);\r\n },\r\n deleteNotified() {\r\n LStorage.removeItem('notified');\r\n },\r\n };\r\n\r\n constructor(title: string, body?: string, openUrl?: string) {\r\n this.#title = title;\r\n this.#body = body;\r\n this.#openUrl = openUrl;\r\n }\r\n\r\n /*original()\r\n {\r\n // Let's check if the browser supports notifications\r\n if (!(\"Notification\" in window)) {\r\n alert(\"This browser does not support desktop notification\")\r\n }\r\n // Let's check whether notification permissions have already been granted\r\n else if (Notification.permission === \"granted\") {\r\n // If it's okay let's create a notification\r\n this.#createNotification()\r\n }\r\n // Otherwise, we need to ask the user for permission\r\n else if (Notification.permission !== \"denied\") {\r\n Notification.requestPermission().then(r => {\r\n // If the user accepts, let's create a notification\r\n if (r === \"granted\") {\r\n this.#createNotification()\r\n }\r\n });\r\n }\r\n }*/\r\n\r\n #createNotification() {\r\n const notification = new Notification(this.#title, {icon: __const('appIcon'), body: this.#body});\r\n notification.onclick = () => window.open(this.#openUrl);\r\n }\r\n\r\n static checkAndRequestPermission() {\r\n if (!('Notification' in window)) {\r\n alert('This browser does not support desktop notification');\r\n } else if (Notification.permission !== 'denied' && Notification.permission !== 'granted') {\r\n Notification.requestPermission().then();\r\n }\r\n }\r\n\r\n static launch({title = 'titulo', body = undefined, openUrl = undefined, when}: LaunchParams) {\r\n if (when === 'hidden' && document.visibilityState === 'visible') return;\r\n if (when === 'unfocused' && document.hasFocus()) return;\r\n\r\n const id = LDate.getTimeId();\r\n if (Notify.STORAGE.check(id)) {\r\n const rand = Math.floor(Math.random() * 100);\r\n g.consoleInfo(`notificacion evitada: [${id}_${rand}] -> ${body}`);\r\n return;\r\n }\r\n Notify.STORAGE.saveNotified(id);\r\n\r\n const notify = new Notify(title, body, openUrl);\r\n notify.#createNotification();\r\n }\r\n}\r\n","import {\r\n CellComponent,\r\n EventCallBackMethods,\r\n JSONRecord,\r\n LabelValue,\r\n ListEditorParams,\r\n Options,\r\n RowComponent,\r\n TabulatorFull as Tabulator,\r\n} from 'tabulator-tables';\r\nimport {\r\n Component,\r\n FetchParamsSimple,\r\n g,\r\n NullHTMLButtonElement,\r\n SModal,\r\n TableSettingEvents,\r\n ValidationRules,\r\n} from '@/app';\r\n\r\nexport class Ttable {\r\n readonly tableId: string | HTMLElement;\r\n table: Tabulator;\r\n isEditable = false;\r\n readonly orderFieldName: string;\r\n\r\n constructor(tableId: string | HTMLElement, options: Options, settingEvents: TableSettingEvents, orderFieldName?: string) {\r\n this.tableId = tableId;\r\n this.orderFieldName = orderFieldName ?? 'order';\r\n\r\n this.table = new Tabulator(this.tableId, options);\r\n Object.entries(settingEvents).forEach(entry => {\r\n const key = entry[0] as keyof EventCallBackMethods;\r\n const value = entry[1];\r\n this.table.on(key, value);\r\n });\r\n }\r\n\r\n isEditableCell(cell: CellComponent) {\r\n return (cell.getRow().getData().id === undefined) ? true : this.isEditable;\r\n }\r\n\r\n addClassEditableOnEditableCells(row: RowComponent) {\r\n const cells = row.getCells().filter(cell => {\r\n let editable = cell.getColumn().getDefinition().editable;\r\n editable = (typeof editable === 'function') ? editable(cell) : editable;\r\n return editable !== false;\r\n });\r\n cells.forEach((cell) => {\r\n cell.getElement().classList.add('cell-editable');\r\n });\r\n }\r\n\r\n static formatListValuesToLabelValueStructure(values: JSONRecord): LabelValue[] {\r\n const dataArray: LabelValue[] = [];\r\n Object.entries(values).forEach(([key, value]) => {\r\n if (key === 'null' || key === 'undefined' || key === '') return;\r\n const intKey = parseInt(String(key));\r\n dataArray.push({\r\n 'label': String(value),\r\n 'value': (isNaN(intKey)) ? key : intKey,\r\n });\r\n });\r\n return dataArray;\r\n }\r\n\r\n /**\r\n * -----------------------------------------------------------------------------------------------------------------\r\n * ----- VARIABLES Y FUNCIONES GENERICAS Y COFNIGURACIONES PREDETERMINADAS------------------------------------------\r\n */\r\n\r\n static defaultSettings: Options = {\r\n columnDefaults: {\r\n headerSort: false,\r\n headerTooltip: true,\r\n headerSortTristate: true, // permitir quitar ordenacion\r\n },\r\n ajaxConfig: {\r\n headers: {\r\n 'Accept': 'application/json', //tell the server we need JSON back\r\n 'X-Requested-With': 'XMLHttpRequest', //fix to help some frameworks respond correctly to request\r\n 'Content-type': 'application/json; charset=utf-8', //set the character encoding of the request\r\n },\r\n },\r\n layout: 'fitData',\r\n locale: 'es-es',\r\n height: '65vh',\r\n filterMode: 'local',\r\n sortMode: 'local',\r\n columnHeaderSortMulti: true, // ordenacion multiple\r\n sortOrderReverse: true, // ordenacion en el orden en que se pulsan las columnas\r\n pagination: true,\r\n paginationMode: 'local',\r\n paginationSize: 30,\r\n paginationCounter: (pageSize, currentRow, currentPage, totalRows, totalPages) => {\r\n const finalCurrentRow = currentRow + (pageSize - 1);\r\n return `Mostrando ${currentRow} - ${finalCurrentRow} filas de ${totalRows}`;\r\n },\r\n ajaxResponse: (url, params, response) => {\r\n /*let data = response.data;\r\n let regVisibles = (data.per_page < data.total) ? data.per_page : data.total;\r\n let el = document.getElementById(\"footerinfo\");\r\n if (el) {\r\n el.innerHTML = `Mostrando ${regVisibles} de ${data.total}`;\r\n }*/\r\n return response.data; //return data to tabulator\r\n },\r\n footerElement: `<span class=\"mx-1\" id=\"footerinfo\"></span>`,\r\n langs: {\r\n 'es-es': {\r\n 'columns': {\r\n 'name': 'Nombre', //replace the title of column name with the value \"Name\"\r\n },\r\n 'data': {\r\n 'loading': 'Cargando', //data loader text\r\n 'error': 'Error', //data error text\r\n },\r\n 'groups': { //copy for the auto generated item count in group header\r\n 'item': 'elemento', //the singular for item\r\n 'items': 'elementos', //the plural for items\r\n },\r\n 'pagination': {\r\n 'page_size': 'Tamaño de página', //label for the page size select element\r\n 'page_title': 'Mostrar página',//tooltip text for the numeric page button, appears in front of the page number (eg. \"Show Page\" will result in a tool tip of \"Show Page 1\" on the page 1 button)\r\n 'first': 'Primera', //text for the first page button\r\n 'first_title': 'Primera página', //tooltip text for the first page button\r\n 'last': 'Última',\r\n 'last_title': 'Última página',\r\n 'prev': 'Anterior',\r\n 'prev_title': 'Anterior página',\r\n 'next': 'Siguiente',\r\n 'next_title': 'Siguiente página',\r\n 'all': 'Todo',\r\n 'counter': {\r\n 'showing': 'Mostrando',\r\n 'of': 'de',\r\n 'rows': 'filas',\r\n 'pages': 'páginas',\r\n },\r\n },\r\n 'headerFilters': {\r\n 'default': 'filtrar columna...', //default header filter placeholder text\r\n 'columns': {\r\n 'name': 'filtrar nombre...', //replace default header filter text for column name\r\n },\r\n },\r\n },\r\n },\r\n };\r\n\r\n static buttons = {\r\n linkBtnInfo: (title: string, url: string, blank: boolean) => {\r\n // return `<a href=\"${url}\" title=\"${title}\" ${blank ? 'target=\"_blank\"' : ''} ><button class=\"mx-1 btn btn-xs btn-info\"><i class=\"fa fa-info-circle\"></i></button></a>`;\r\n return Component.get('btn', {\r\n size: '2xs',\r\n color: 'emerald',\r\n slot: Component.get('icon.info', {size: 'size-4'}),\r\n extraClasses: 'mx-1',\r\n extraAttributes: `title=\"${title}\"`,\r\n isLink: true,\r\n linkUrl: url,\r\n linkBlank: blank\r\n });\r\n },\r\n linkBtnEdit: (title: string, url: string) => {\r\n // return `<a href=\"${url}\" title=\"${title}\"><button class=\"mx-1 btn btn-xs btn-warning\"><i class=\"far fa-edit\"></i></button></a>`;\r\n return Component.get('btn', {\r\n size: '2xs',\r\n color: 'yellow',\r\n slot: Component.get('icon.edit', {size: 'size-4'}),\r\n extraClasses: 'mx-1',\r\n extraAttributes: `title=\"${title}\"`,\r\n isLink: true,\r\n linkUrl: url,\r\n });\r\n },\r\n linkTextEdit: (title: string, url: string) => {\r\n const icon = Component.get('icon.edit', {size: 'size-4'});\r\n return `<a href=\"${url}\" title=\"${title}\">${icon}</a>`;\r\n },\r\n btnInfo: (title: string) => {\r\n // return `<button class=\"mx-1 btn btn-xs btn-info\" data-action=\"info\" title=\"${title}\"><i class=\"fa fa-info-circle\"></i></button>`;\r\n return Component.get('btn', {\r\n size: '2xs',\r\n color: 'emerald',\r\n slot: Component.get('icon.info', {size: 'size-4'}),\r\n extraClasses: 'mx-1',\r\n extraAttributes: `data-action=\"info\" title=\"${title}\"`,\r\n });\r\n },\r\n btnSave: (title: string, showText = false) => {\r\n // let text = showText ? title : '';\r\n // return `<button class=\"mx-1 btn btn-xs btn-success\" data-action=\"save\" title=\"${title}\"><i class=\"far fa-save\"></i> ${text}</button>`;\r\n const text = showText ? title : '';\r\n const icon = Component.get('icon.save', {size: 'size-4'});\r\n return Component.get('btn', {\r\n size: '2xs',\r\n color: 'green',\r\n slot: `${icon} ${text}`,\r\n extraClasses: 'mx-1',\r\n extraAttributes: `data-action=\"save\" title=\"${title}\"`,\r\n });\r\n },\r\n btnCancel: (title: string, showText = false) => {\r\n // let text = showText ? title : '';\r\n // return `<button class=\"mx-1 btn btn-xs btn-danger\" data-action=\"cancel\" title=\"${title}\"><i class=\"fa fa-ban\" aria-hidden=\"true\"></i> ${text}</button>`;\r\n const text = showText ? title : '';\r\n const icon = Component.get('icon.cancel', {size: 'size-4', outline: true, strokeWidth: '3'});\r\n return Component.get('btn', {\r\n size: '2xs',\r\n color: 'red',\r\n slot: `${icon} ${text}`,\r\n extraClasses: 'mx-1',\r\n extraAttributes: `data-action=\"cancel\" title=\"${title}\"`,\r\n });\r\n },\r\n btnDelete: (title: string, showText = false) => {\r\n // let text = showText ? title : '';\r\n // return `<button class=\"mx-1 btn btn-xs btn-danger\" data-action=\"delete\" title=\"${title}\"><i class=\"fa fa-times\"></i> ${text}</button>`;\r\n const text = showText ? title : '';\r\n const icon = Component.get('icon.delete', {size: 'size-4'});\r\n return Component.get('btn', {\r\n size: '2xs',\r\n color: 'red',\r\n slot: `${icon} ${text}`,\r\n extraClasses: 'mx-1',\r\n extraAttributes: `data-action=\"delete\" title=\"${title}\"`,\r\n });\r\n },\r\n btnEdit: (title: string, showText = false) => {\r\n const text = showText ? title : '';\r\n const icon = Component.get('icon.edit', {size: 'size-4'});\r\n return Component.get('btn', {\r\n size: '2xs',\r\n color: 'yellow',\r\n slot: `${icon} ${text}`,\r\n extraClasses: 'mx-1',\r\n extraAttributes: `data-action=\"edit\" title=\"${title}\"`,\r\n });\r\n },\r\n btnNew: (title: string, id?: string) => {\r\n // const htmlId = (id === undefined) ? '' : `id=\"${id}\"`;\r\n // return `<button ${htmlId} class=\"mx-1 btn btn-xs btn-primary\" data-action=\"new\" title=\"${title}\"><i class=\"fas fa-plus-square\"></i></button>`;\r\n const icon = Component.get('icon.new', {size: 'size-4'});\r\n return Component.get('btn', {\r\n id: id,\r\n size: '2xs',\r\n color: 'blue',\r\n slot: `${icon}`,\r\n extraClasses: 'mx-1',\r\n extraAttributes: `data-action=\"new\" title=\"${title}\"`,\r\n });\r\n },\r\n btnReload: (title: string) => {\r\n // return `<a href=\"${url}\" title=\"${title}\"><button class=\"mx-1 btn btn-xs btn-info\"><i class=\"fas fa-sync-alt\"></i></button></a>`;\r\n // return `<button class=\"mx-1 btn btn-xs btn-info\" data-action=\"reload\" title=\"${title}\"><i class=\"fa fa-sync-alt\"></i></button>`;\r\n const icon = Component.get('icon.reload', {size: 'size-4'});\r\n return Component.get('btn', {\r\n size: '2xs',\r\n color: 'emerald',\r\n slot: `${icon}`,\r\n extraClasses: 'mx-1',\r\n extraAttributes: `data-action=\"reload\" title=\"${title}\"`,\r\n });\r\n },\r\n btnMove: (title: string) => {\r\n // return `<button class=\"mx-1 btn btn-xs btn-secondary\" data-action=\"move\" title=\"${title}\"><i class=\"fas fa-suitcase-rolling\"></i></button>`;\r\n const icon = Component.get('icon.move', {size: 'size-4'});\r\n return Component.get('btn', {\r\n size: '2xs',\r\n color: 'gray',\r\n slot: `${icon}`,\r\n extraClasses: 'mx-1',\r\n extraAttributes: `data-action=\"move\" title=\"${title}\"`,\r\n });\r\n },\r\n };\r\n\r\n /*-----formatterParams-----------------------------------------------------------------------------------------------*/\r\n\r\n static formatterParams_lookupBoolean = {undefined: '', null: '', 0: 'No', 1: 'Si'};\r\n\r\n static formatterParams_lookupSimple(values: JSONRecord): JSONRecord {\r\n const copy = Object.assign({}, values);\r\n copy['undefined'] = '';\r\n copy['null'] = '';\r\n return copy;\r\n }\r\n\r\n /*-----editorParams-----------------------------------------------------------------------------------------------*/\r\n\r\n static defaultListEditorParams: ListEditorParams = {\r\n //Value Options (You should use ONE of these per editor)\r\n // values: {1: \"TEST AS21 PRO\", 25: \"TEST MCA\"}, //an array of values or value/label objects\r\n // valuesURL: \"http://myvalues.com\", //a url to load the values from\r\n // valuesLookup:\"active\", //get the values from the currently active rows in this column\r\n\r\n clearable: true,\r\n\r\n verticalNavigation: 'hybrid', //navigate to new row when at the top or bottom of the selection list\r\n maxWidth: true, //prevent width of list item from exceeding width of cell\r\n placeholderLoading: 'Loading list...', // set custom placeholder when loading list values\r\n placeholderEmpty: 'No Results Found', // set custom placeholder when list is empty\r\n\r\n //Select Options (only available when autocomplete:false)\r\n // multiselect: true, //allow selection of multiple items from the list\r\n\r\n //Autocomplete Options (only available when autocomplete:true)\r\n autocomplete: true, //enable autocomplete mode,\r\n // filterRemote: true, //pass filter term to remote server in request instead of filtering\r\n // filterDelay: 500, //delay in milliseconds after typing before filter begins\r\n listOnEmpty: true,\r\n // freetext:true, //allow the user to set the value of the cell to a free text entry\r\n };\r\n\r\n static editorParams_listBoolean: ListEditorParams = {\r\n ...Ttable.defaultListEditorParams,\r\n clearable: false,\r\n autocomplete: false,\r\n listOnEmpty: undefined,\r\n allowEmpty: false,\r\n values: [{label: 'No', value: 0}, {label: 'Si', value: 1}],\r\n };\r\n\r\n static editorParams_list(values: JSONRecord, {searchable} = {searchable: true}): ListEditorParams {\r\n return {\r\n ...Ttable.defaultListEditorParams,\r\n autocomplete: searchable,\r\n listOnEmpty: (!searchable) ? undefined : true,\r\n allowEmpty: false,\r\n values: Ttable.formatListValuesToLabelValueStructure(values),\r\n };\r\n }\r\n\r\n static editorParams_listFix(values: JSONRecord): ListEditorParams {\r\n return {\r\n ...Ttable.defaultListEditorParams,\r\n clearable: false,\r\n autocomplete: false,\r\n listOnEmpty: undefined,\r\n allowEmpty: false,\r\n values: Ttable.formatListValuesToLabelValueStructure(values),\r\n };\r\n }\r\n\r\n static editorParams_listBig(values: JSONRecord): ListEditorParams {\r\n return {\r\n ...Ttable.defaultListEditorParams,\r\n listOnEmpty: false,\r\n allowEmpty: true,\r\n filterFunc: (term, label, value, item) => { //replace built in filter function with custom\r\n /*term - the string being searched for\r\n label - the text lable for the item\r\n value - the value for the item\r\n item - the original value object for the item\r\n const res = label.includes(`/.*${term}.*!/`)*/\r\n if (term.length < 3) return false;\r\n return String(label).toLowerCase().indexOf(String(term).toLowerCase()) > -1;\r\n },\r\n values: Ttable.formatListValuesToLabelValueStructure(values),\r\n };\r\n }\r\n\r\n /*-----headerFilterParams-----------------------------------------------------------------------------------------*/\r\n\r\n static headerFilterParams_listBoolean = {values: {0: 'No', 1: 'Si'}};\r\n\r\n static headerFilterParams_listSimple(values: JSONRecord | any[]): ListEditorParams {\r\n return {values: values};\r\n }\r\n\r\n static headerFilterParams_listBig(values: JSONRecord): ListEditorParams {\r\n return {\r\n ...Ttable.defaultListEditorParams,\r\n listOnEmpty: false,\r\n allowEmpty: true,\r\n values: values,\r\n };\r\n }\r\n\r\n\r\n /**\r\n * -----------------------------------------------------------------------------------------------------------------\r\n * ----- OTRAS FUNCIONES -------------------------------------------------------------------------------------------\r\n */\r\n\r\n defaultListenerBtnEdit(btnEdit: NullHTMLButtonElement, btnCancelEdit: NullHTMLButtonElement) {\r\n const hiddenClass = g.getHiddenClass();\r\n btnEdit?.classList.add(hiddenClass);\r\n btnCancelEdit?.classList.remove(hiddenClass);\r\n this.isEditable = true;\r\n this.table.redraw(true);\r\n }\r\n\r\n defaultListenerBtnCancel(btnEdit: NullHTMLButtonElement, btnCancelEdit: NullHTMLButtonElement) {\r\n const hiddenClass = g.getHiddenClass();\r\n btnCancelEdit?.classList.add(hiddenClass);\r\n btnEdit?.classList.remove(hiddenClass);\r\n this.isEditable = false;\r\n this.table.replaceData().then();\r\n // this.table.redraw(true);\r\n }\r\n\r\n defaultListenerBtnAddRow(data = {}) {\r\n this.table.addRow(data, true).then();\r\n }\r\n\r\n async saveDataOnRowMovedEvent(row: RowComponent, {url, type}: FetchParamsSimple) {\r\n try {\r\n //row - row component\r\n let newData = row.getTable().getData();\r\n newData = newData.map((item, key) => {\r\n item[this.orderFieldName] = key + 1;\r\n return item;\r\n });\r\n const result = await g.fetch({url: url, type: type, params: {rowsTabulator: newData}});\r\n SModal.toastInfo({icon: (result.success && result.ok) ? 'success' : 'error', title: result.message}).then();\r\n this.table.replaceData().then();\r\n } catch (e) {\r\n g.catchCode({error: e});\r\n }\r\n }\r\n\r\n // TODO canals - ¿hacer estatica?\r\n changeColorsOnRowMovedEvent(row: RowComponent): Promise<{ isEdited: boolean }> {\r\n const position = row.getPosition();\r\n const data = row.getTable().getData() as Record<any, any>[];\r\n if (!position) Promise.reject('No se ha encontrado la posicion').then();\r\n\r\n // Recorrer todas las filas para valorar su color en ese momento\r\n let isEdited = false;\r\n const rows = row.getTable().getRows();\r\n rows.forEach(row => {\r\n const currentRowPosition = row.getPosition();\r\n if (!currentRowPosition) return;\r\n\r\n // Si la fila actual es la movida y su posicion es diferente a la guardada -> pintar fondo fila\r\n if (position === currentRowPosition && position !== data[position - 1][this.orderFieldName]) {\r\n row.getElement().classList.add('last-row-moved');\r\n } else {\r\n row.getElement().classList.remove('last-row-moved');\r\n }\r\n\r\n // Si la posicion de la fila actual es diferente a la guardada -> pintar fondo celda\r\n const cell = row.getCells()[1];\r\n if (currentRowPosition !== data[currentRowPosition - 1][this.orderFieldName]) {\r\n cell.getElement().classList.add('cell-position-changed');\r\n isEdited = true;\r\n } else {\r\n cell.getElement().classList.remove('cell-position-changed');\r\n }\r\n });\r\n\r\n return Promise.resolve({isEdited});\r\n }\r\n\r\n async saveOrderOfAllData({url, type}: FetchParamsSimple) {\r\n const arrayTabulator = this.table.getData();\r\n arrayTabulator.map((item, index) => {\r\n item[this.orderFieldName] = index + 1;\r\n return item;\r\n });\r\n\r\n try {\r\n // Ajax to launch Status/Mitigation\r\n const actionResult = await g.fetch({url, type, params: {rowsTabulator: arrayTabulator}});\r\n\r\n // Check if result is wrong and update modal content\r\n if (!actionResult.success || !actionResult.ok) {\r\n SModal.errorModal({html: actionResult.message}).then();\r\n return;\r\n }\r\n\r\n SModal.toastSuccess({title: actionResult.message}).then();\r\n this.table.replaceData().then();\r\n } catch (err) {\r\n g.catchCode({error: err});\r\n }\r\n }\r\n\r\n static async defaultActionSave(cell: CellComponent, url: string, rules: ValidationRules, preventReplaceData = false): Promise<boolean> {\r\n const cellData = cell.getData();\r\n const type = (cellData.id) ? 'PUT' : 'POST';\r\n\r\n let validation = g.validate(cellData, rules);\r\n if (!validation.success) {\r\n SModal.errorModal({html: validation.messages.join('<br>')}).then();\r\n return false;\r\n }\r\n\r\n try {\r\n const result = await g.fetch({url: url, type: type, params: validation.validated});\r\n const success = result.success && result.ok;\r\n if (success) {\r\n SModal.toastSuccess({title: result.message}).then();\r\n if (!preventReplaceData) cell.getTable().replaceData().then();\r\n } else {\r\n SModal.errorModal({html: result.message}).then();\r\n }\r\n return success;\r\n } catch (e) {\r\n g.catchCode({error: e});\r\n return false;\r\n }\r\n }\r\n\r\n static async defaultActionDelete(cell: CellComponent, url: string, {\r\n title = 'Eliminar',\r\n html = undefined,\r\n preventReplaceData = false,\r\n }: { title?: string, html?: string, preventReplaceData?: boolean }): Promise<boolean> {\r\n try {\r\n const resultModal = await SModal.confirmModal({title: title, html: html});\r\n if (!resultModal.isConfirmed) {\r\n return false;\r\n }\r\n\r\n let result: boolean;\r\n try {\r\n const resultDelete = await g.fetch({url: url, type: 'DELETE'});\r\n const success = resultDelete.success && resultDelete.ok;\r\n if (success) {\r\n SModal.toastSuccess({title: resultDelete.message}).then();\r\n } else {\r\n SModal.errorModal({html: resultDelete.message}).then();\r\n }\r\n result = success;\r\n } catch (e) {\r\n g.catchCode({error: e});\r\n result = false;\r\n }\r\n if (!preventReplaceData) cell.getTable().replaceData().then();\r\n return result;\r\n } catch (e) {\r\n g.catchCode({error: e});\r\n return false;\r\n }\r\n }\r\n\r\n static defaultActionCancel(cell: CellComponent) {\r\n cell.getRow().delete().then();\r\n }\r\n\r\n defaultFormatterCellActions(cell: CellComponent) {\r\n let strBtns = '';\r\n if (cell.getData().id === undefined) {\r\n strBtns += Ttable.buttons.btnSave('Guardar');\r\n strBtns += Ttable.buttons.btnCancel('Cancelar');\r\n return strBtns;\r\n }\r\n\r\n if (this.isEditable) {\r\n strBtns += Ttable.buttons.btnSave('Guardar');\r\n strBtns += Ttable.buttons.btnDelete('Eliminar');\r\n }\r\n return strBtns;\r\n }\r\n\r\n static customFormatterLookup(cell: CellComponent, formatterParams: Record<any, any>): string {\r\n return formatterParams[cell.getValue()];\r\n }\r\n\r\n static getObjectWithThisValue(__this: any): {} {\r\n return {_this: __this};\r\n }\r\n}\r\n","/*!\n* sweetalert2 v11.22.0\n* Released under the MIT License.\n*/\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Sweetalert2 = factory());\n})(this, (function () { 'use strict';\n\n function _assertClassBrand(e, t, n) {\n if (\"function\" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n;\n throw new TypeError(\"Private element is not present on this object\");\n }\n function _checkPrivateRedeclaration(e, t) {\n if (t.has(e)) throw new TypeError(\"Cannot initialize the same private elements twice on an object\");\n }\n function _classPrivateFieldGet2(s, a) {\n return s.get(_assertClassBrand(s, a));\n }\n function _classPrivateFieldInitSpec(e, t, a) {\n _checkPrivateRedeclaration(e, t), t.set(e, a);\n }\n function _classPrivateFieldSet2(s, a, r) {\n return s.set(_assertClassBrand(s, a), r), r;\n }\n\n const RESTORE_FOCUS_TIMEOUT = 100;\n\n /** @type {GlobalState} */\n const globalState = {};\n const focusPreviousActiveElement = () => {\n if (globalState.previousActiveElement instanceof HTMLElement) {\n globalState.previousActiveElement.focus();\n globalState.previousActiveElement = null;\n } else if (document.body) {\n document.body.focus();\n }\n };\n\n /**\n * Restore previous active (focused) element\n *\n * @param {boolean} returnFocus\n * @returns {Promise<void>}\n */\n const restoreActiveElement = returnFocus => {\n return new Promise(resolve => {\n if (!returnFocus) {\n return resolve();\n }\n const x = window.scrollX;\n const y = window.scrollY;\n globalState.restoreFocusTimeout = setTimeout(() => {\n focusPreviousActiveElement();\n resolve();\n }, RESTORE_FOCUS_TIMEOUT); // issues/900\n\n window.scrollTo(x, y);\n });\n };\n\n const swalPrefix = 'swal2-';\n\n /**\n * @typedef {Record<SwalClass, string>} SwalClasses\n */\n\n /**\n * @typedef {'success' | 'warning' | 'info' | 'question' | 'error'} SwalIcon\n * @typedef {Record<SwalIcon, string>} SwalIcons\n */\n\n /** @type {SwalClass[]} */\n const classNames = ['container', 'shown', 'height-auto', 'iosfix', 'popup', 'modal', 'no-backdrop', 'no-transition', 'toast', 'toast-shown', 'show', 'hide', 'close', 'title', 'html-container', 'actions', 'confirm', 'deny', 'cancel', 'footer', 'icon', 'icon-content', 'image', 'input', 'file', 'range', 'select', 'radio', 'checkbox', 'label', 'textarea', 'inputerror', 'input-label', 'validation-message', 'progress-steps', 'active-progress-step', 'progress-step', 'progress-step-line', 'loader', 'loading', 'styled', 'top', 'top-start', 'top-end', 'top-left', 'top-right', 'center', 'center-start', 'center-end', 'center-left', 'center-right', 'bottom', 'bottom-start', 'bottom-end', 'bottom-left', 'bottom-right', 'grow-row', 'grow-column', 'grow-fullscreen', 'rtl', 'timer-progress-bar', 'timer-progress-bar-container', 'scrollbar-measure', 'icon-success', 'icon-warning', 'icon-info', 'icon-question', 'icon-error', 'draggable', 'dragging'];\n const swalClasses = classNames.reduce((acc, className) => {\n acc[className] = swalPrefix + className;\n return acc;\n }, /** @type {SwalClasses} */{});\n\n /** @type {SwalIcon[]} */\n const icons = ['success', 'warning', 'info', 'question', 'error'];\n const iconTypes = icons.reduce((acc, icon) => {\n acc[icon] = swalPrefix + icon;\n return acc;\n }, /** @type {SwalIcons} */{});\n\n const consolePrefix = 'SweetAlert2:';\n\n /**\n * Capitalize the first letter of a string\n *\n * @param {string} str\n * @returns {string}\n */\n const capitalizeFirstLetter = str => str.charAt(0).toUpperCase() + str.slice(1);\n\n /**\n * Standardize console warnings\n *\n * @param {string | string[]} message\n */\n const warn = message => {\n console.warn(`${consolePrefix} ${typeof message === 'object' ? message.join(' ') : message}`);\n };\n\n /**\n * Standardize console errors\n *\n * @param {string} message\n */\n const error = message => {\n console.error(`${consolePrefix} ${message}`);\n };\n\n /**\n * Private global state for `warnOnce`\n *\n * @type {string[]}\n * @private\n */\n const previousWarnOnceMessages = [];\n\n /**\n * Show a console warning, but only if it hasn't already been shown\n *\n * @param {string} message\n */\n const warnOnce = message => {\n if (!previousWarnOnceMessages.includes(message)) {\n previousWarnOnceMessages.push(message);\n warn(message);\n }\n };\n\n /**\n * Show a one-time console warning about deprecated params/methods\n *\n * @param {string} deprecatedParam\n * @param {string?} useInstead\n */\n const warnAboutDeprecation = (deprecatedParam, useInstead = null) => {\n warnOnce(`\"${deprecatedParam}\" is deprecated and will be removed in the next major release.${useInstead ? ` Use \"${useInstead}\" instead.` : ''}`);\n };\n\n /**\n * If `arg` is a function, call it (with no arguments or context) and return the result.\n * Otherwise, just pass the value through\n *\n * @param {Function | any} arg\n * @returns {any}\n */\n const callIfFunction = arg => typeof arg === 'function' ? arg() : arg;\n\n /**\n * @param {any} arg\n * @returns {boolean}\n */\n const hasToPromiseFn = arg => arg && typeof arg.toPromise === 'function';\n\n /**\n * @param {any} arg\n * @returns {Promise<any>}\n */\n const asPromise = arg => hasToPromiseFn(arg) ? arg.toPromise() : Promise.resolve(arg);\n\n /**\n * @param {any} arg\n * @returns {boolean}\n */\n const isPromise = arg => arg && Promise.resolve(arg) === arg;\n\n /**\n * Gets the popup container which contains the backdrop and the popup itself.\n *\n * @returns {HTMLElement | null}\n */\n const getContainer = () => document.body.querySelector(`.${swalClasses.container}`);\n\n /**\n * @param {string} selectorString\n * @returns {HTMLElement | null}\n */\n const elementBySelector = selectorString => {\n const container = getContainer();\n return container ? container.querySelector(selectorString) : null;\n };\n\n /**\n * @param {string} className\n * @returns {HTMLElement | null}\n */\n const elementByClass = className => {\n return elementBySelector(`.${className}`);\n };\n\n /**\n * @returns {HTMLElement | null}\n */\n const getPopup = () => elementByClass(swalClasses.popup);\n\n /**\n * @returns {HTMLElement | null}\n */\n const getIcon = () => elementByClass(swalClasses.icon);\n\n /**\n * @returns {HTMLElement | null}\n */\n const getIconContent = () => elementByClass(swalClasses['icon-content']);\n\n /**\n * @returns {HTMLElement | null}\n */\n const getTitle = () => elementByClass(swalClasses.title);\n\n /**\n * @returns {HTMLElement | null}\n */\n const getHtmlContainer = () => elementByClass(swalClasses['html-container']);\n\n /**\n * @returns {HTMLElement | null}\n */\n const getImage = () => elementByClass(swalClasses.image);\n\n /**\n * @returns {HTMLElement | null}\n */\n const getProgressSteps = () => elementByClass(swalClasses['progress-steps']);\n\n /**\n * @returns {HTMLElement | null}\n */\n const getValidationMessage = () => elementByClass(swalClasses['validation-message']);\n\n /**\n * @returns {HTMLButtonElement | null}\n */\n const getConfirmButton = () => (/** @type {HTMLButtonElement} */elementBySelector(`.${swalClasses.actions} .${swalClasses.confirm}`));\n\n /**\n * @returns {HTMLButtonElement | null}\n */\n const getCancelButton = () => (/** @type {HTMLButtonElement} */elementBySelector(`.${swalClasses.actions} .${swalClasses.cancel}`));\n\n /**\n * @returns {HTMLButtonElement | null}\n */\n const getDenyButton = () => (/** @type {HTMLButtonElement} */elementBySelector(`.${swalClasses.actions} .${swalClasses.deny}`));\n\n /**\n * @returns {HTMLElement | null}\n */\n const getInputLabel = () => elementByClass(swalClasses['input-label']);\n\n /**\n * @returns {HTMLElement | null}\n */\n const getLoader = () => elementBySelector(`.${swalClasses.loader}`);\n\n /**\n * @returns {HTMLElement | null}\n */\n const getActions = () => elementByClass(swalClasses.actions);\n\n /**\n * @returns {HTMLElement | null}\n */\n const getFooter = () => elementByClass(swalClasses.footer);\n\n /**\n * @returns {HTMLElement | null}\n */\n const getTimerProgressBar = () => elementByClass(swalClasses['timer-progress-bar']);\n\n /**\n * @returns {HTMLElement | null}\n */\n const getCloseButton = () => elementByClass(swalClasses.close);\n\n // https://github.com/jkup/focusable/blob/master/index.js\n const focusable = `\n a[href],\n area[href],\n input:not([disabled]),\n select:not([disabled]),\n textarea:not([disabled]),\n button:not([disabled]),\n iframe,\n object,\n embed,\n [tabindex=\"0\"],\n [contenteditable],\n audio[controls],\n video[controls],\n summary\n`;\n /**\n * @returns {HTMLElement[]}\n */\n const getFocusableElements = () => {\n const popup = getPopup();\n if (!popup) {\n return [];\n }\n /** @type {NodeListOf<HTMLElement>} */\n const focusableElementsWithTabindex = popup.querySelectorAll('[tabindex]:not([tabindex=\"-1\"]):not([tabindex=\"0\"])');\n const focusableElementsWithTabindexSorted = Array.from(focusableElementsWithTabindex)\n // sort according to tabindex\n .sort((a, b) => {\n const tabindexA = parseInt(a.getAttribute('tabindex') || '0');\n const tabindexB = parseInt(b.getAttribute('tabindex') || '0');\n if (tabindexA > tabindexB) {\n return 1;\n } else if (tabindexA < tabindexB) {\n return -1;\n }\n return 0;\n });\n\n /** @type {NodeListOf<HTMLElement>} */\n const otherFocusableElements = popup.querySelectorAll(focusable);\n const otherFocusableElementsFiltered = Array.from(otherFocusableElements).filter(el => el.getAttribute('tabindex') !== '-1');\n return [...new Set(focusableElementsWithTabindexSorted.concat(otherFocusableElementsFiltered))].filter(el => isVisible$1(el));\n };\n\n /**\n * @returns {boolean}\n */\n const isModal = () => {\n return hasClass(document.body, swalClasses.shown) && !hasClass(document.body, swalClasses['toast-shown']) && !hasClass(document.body, swalClasses['no-backdrop']);\n };\n\n /**\n * @returns {boolean}\n */\n const isToast = () => {\n const popup = getPopup();\n if (!popup) {\n return false;\n }\n return hasClass(popup, swalClasses.toast);\n };\n\n /**\n * @returns {boolean}\n */\n const isLoading = () => {\n const popup = getPopup();\n if (!popup) {\n return false;\n }\n return popup.hasAttribute('data-loading');\n };\n\n /**\n * Securely set innerHTML of an element\n * https://github.com/sweetalert2/sweetalert2/issues/1926\n *\n * @param {HTMLElement} elem\n * @param {string} html\n */\n const setInnerHtml = (elem, html) => {\n elem.textContent = '';\n if (html) {\n const parser = new DOMParser();\n const parsed = parser.parseFromString(html, `text/html`);\n const head = parsed.querySelector('head');\n if (head) {\n Array.from(head.childNodes).forEach(child => {\n elem.appendChild(child);\n });\n }\n const body = parsed.querySelector('body');\n if (body) {\n Array.from(body.childNodes).forEach(child => {\n if (child instanceof HTMLVideoElement || child instanceof HTMLAudioElement) {\n elem.appendChild(child.cloneNode(true)); // https://github.com/sweetalert2/sweetalert2/issues/2507\n } else {\n elem.appendChild(child);\n }\n });\n }\n }\n };\n\n /**\n * @param {HTMLElement} elem\n * @param {string} className\n * @returns {boolean}\n */\n const hasClass = (elem, className) => {\n if (!className) {\n return false;\n }\n const classList = className.split(/\\s+/);\n for (let i = 0; i < classList.length; i++) {\n if (!elem.classList.contains(classList[i])) {\n return false;\n }\n }\n return true;\n };\n\n /**\n * @param {HTMLElement} elem\n * @param {SweetAlertOptions} params\n */\n const removeCustomClasses = (elem, params) => {\n Array.from(elem.classList).forEach(className => {\n if (!Object.values(swalClasses).includes(className) && !Object.values(iconTypes).includes(className) && !Object.values(params.showClass || {}).includes(className)) {\n elem.classList.remove(className);\n }\n });\n };\n\n /**\n * @param {HTMLElement} elem\n * @param {SweetAlertOptions} params\n * @param {string} className\n */\n const applyCustomClass = (elem, params, className) => {\n removeCustomClasses(elem, params);\n if (!params.customClass) {\n return;\n }\n const customClass = params.customClass[(/** @type {keyof SweetAlertCustomClass} */className)];\n if (!customClass) {\n return;\n }\n if (typeof customClass !== 'string' && !customClass.forEach) {\n warn(`Invalid type of customClass.${className}! Expected string or iterable object, got \"${typeof customClass}\"`);\n return;\n }\n addClass(elem, customClass);\n };\n\n /**\n * @param {HTMLElement} popup\n * @param {import('./renderers/renderInput').InputClass | SweetAlertInput} inputClass\n * @returns {HTMLInputElement | null}\n */\n const getInput$1 = (popup, inputClass) => {\n if (!inputClass) {\n return null;\n }\n switch (inputClass) {\n case 'select':\n case 'textarea':\n case 'file':\n return popup.querySelector(`.${swalClasses.popup} > .${swalClasses[inputClass]}`);\n case 'checkbox':\n return popup.querySelector(`.${swalClasses.popup} > .${swalClasses.checkbox} input`);\n case 'radio':\n return popup.querySelector(`.${swalClasses.popup} > .${swalClasses.radio} input:checked`) || popup.querySelector(`.${swalClasses.popup} > .${swalClasses.radio} input:first-child`);\n case 'range':\n return popup.querySelector(`.${swalClasses.popup} > .${swalClasses.range} input`);\n default:\n return popup.querySelector(`.${swalClasses.popup} > .${swalClasses.input}`);\n }\n };\n\n /**\n * @param {HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement} input\n */\n const focusInput = input => {\n input.focus();\n\n // place cursor at end of text in text input\n if (input.type !== 'file') {\n // http://stackoverflow.com/a/2345915\n const val = input.value;\n input.value = '';\n input.value = val;\n }\n };\n\n /**\n * @param {HTMLElement | HTMLElement[] | null} target\n * @param {string | string[] | readonly string[] | undefined} classList\n * @param {boolean} condition\n */\n const toggleClass = (target, classList, condition) => {\n if (!target || !classList) {\n return;\n }\n if (typeof classList === 'string') {\n classList = classList.split(/\\s+/).filter(Boolean);\n }\n classList.forEach(className => {\n if (Array.isArray(target)) {\n target.forEach(elem => {\n if (condition) {\n elem.classList.add(className);\n } else {\n elem.classList.remove(className);\n }\n });\n } else {\n if (condition) {\n target.classList.add(className);\n } else {\n target.classList.remove(className);\n }\n }\n });\n };\n\n /**\n * @param {HTMLElement | HTMLElement[] | null} target\n * @param {string | string[] | readonly string[] | undefined} classList\n */\n const addClass = (target, classList) => {\n toggleClass(target, classList, true);\n };\n\n /**\n * @param {HTMLElement | HTMLElement[] | null} target\n * @param {string | string[] | readonly string[] | undefined} classList\n */\n const removeClass = (target, classList) => {\n toggleClass(target, classList, false);\n };\n\n /**\n * Get direct child of an element by class name\n *\n * @param {HTMLElement} elem\n * @param {string} className\n * @returns {HTMLElement | undefined}\n */\n const getDirectChildByClass = (elem, className) => {\n const children = Array.from(elem.children);\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (child instanceof HTMLElement && hasClass(child, className)) {\n return child;\n }\n }\n };\n\n /**\n * @param {HTMLElement} elem\n * @param {string} property\n * @param {*} value\n */\n const applyNumericalStyle = (elem, property, value) => {\n if (value === `${parseInt(value)}`) {\n value = parseInt(value);\n }\n if (value || parseInt(value) === 0) {\n elem.style.setProperty(property, typeof value === 'number' ? `${value}px` : value);\n } else {\n elem.style.removeProperty(property);\n }\n };\n\n /**\n * @param {HTMLElement | null} elem\n * @param {string} display\n */\n const show = (elem, display = 'flex') => {\n if (!elem) {\n return;\n }\n elem.style.display = display;\n };\n\n /**\n * @param {HTMLElement | null} elem\n */\n const hide = elem => {\n if (!elem) {\n return;\n }\n elem.style.display = 'none';\n };\n\n /**\n * @param {HTMLElement | null} elem\n * @param {string} display\n */\n const showWhenInnerHtmlPresent = (elem, display = 'block') => {\n if (!elem) {\n return;\n }\n new MutationObserver(() => {\n toggle(elem, elem.innerHTML, display);\n }).observe(elem, {\n childList: true,\n subtree: true\n });\n };\n\n /**\n * @param {HTMLElement} parent\n * @param {string} selector\n * @param {string} property\n * @param {string} value\n */\n const setStyle = (parent, selector, property, value) => {\n /** @type {HTMLElement | null} */\n const el = parent.querySelector(selector);\n if (el) {\n el.style.setProperty(property, value);\n }\n };\n\n /**\n * @param {HTMLElement} elem\n * @param {any} condition\n * @param {string} display\n */\n const toggle = (elem, condition, display = 'flex') => {\n if (condition) {\n show(elem, display);\n } else {\n hide(elem);\n }\n };\n\n /**\n * borrowed from jquery $(elem).is(':visible') implementation\n *\n * @param {HTMLElement | null} elem\n * @returns {boolean}\n */\n const isVisible$1 = elem => !!(elem && (elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length));\n\n /**\n * @returns {boolean}\n */\n const allButtonsAreHidden = () => !isVisible$1(getConfirmButton()) && !isVisible$1(getDenyButton()) && !isVisible$1(getCancelButton());\n\n /**\n * @param {HTMLElement} elem\n * @returns {boolean}\n */\n const isScrollable = elem => !!(elem.scrollHeight > elem.clientHeight);\n\n /**\n * @param {HTMLElement} element\n * @param {HTMLElement} stopElement\n * @returns {boolean}\n */\n const selfOrParentIsScrollable = (element, stopElement) => {\n let parent = element;\n while (parent && parent !== stopElement) {\n if (isScrollable(parent)) {\n return true;\n }\n parent = parent.parentElement;\n }\n return false;\n };\n\n /**\n * borrowed from https://stackoverflow.com/a/46352119\n *\n * @param {HTMLElement} elem\n * @returns {boolean}\n */\n const hasCssAnimation = elem => {\n const style = window.getComputedStyle(elem);\n const animDuration = parseFloat(style.getPropertyValue('animation-duration') || '0');\n const transDuration = parseFloat(style.getPropertyValue('transition-duration') || '0');\n return animDuration > 0 || transDuration > 0;\n };\n\n /**\n * @param {number} timer\n * @param {boolean} reset\n */\n const animateTimerProgressBar = (timer, reset = false) => {\n const timerProgressBar = getTimerProgressBar();\n if (!timerProgressBar) {\n return;\n }\n if (isVisible$1(timerProgressBar)) {\n if (reset) {\n timerProgressBar.style.transition = 'none';\n timerProgressBar.style.width = '100%';\n }\n setTimeout(() => {\n timerProgressBar.style.transition = `width ${timer / 1000}s linear`;\n timerProgressBar.style.width = '0%';\n }, 10);\n }\n };\n const stopTimerProgressBar = () => {\n const timerProgressBar = getTimerProgressBar();\n if (!timerProgressBar) {\n return;\n }\n const timerProgressBarWidth = parseInt(window.getComputedStyle(timerProgressBar).width);\n timerProgressBar.style.removeProperty('transition');\n timerProgressBar.style.width = '100%';\n const timerProgressBarFullWidth = parseInt(window.getComputedStyle(timerProgressBar).width);\n const timerProgressBarPercent = timerProgressBarWidth / timerProgressBarFullWidth * 100;\n timerProgressBar.style.width = `${timerProgressBarPercent}%`;\n };\n\n /**\n * Detect Node env\n *\n * @returns {boolean}\n */\n const isNodeEnv = () => typeof window === 'undefined' || typeof document === 'undefined';\n\n const sweetHTML = `\n <div aria-labelledby=\"${swalClasses.title}\" aria-describedby=\"${swalClasses['html-container']}\" class=\"${swalClasses.popup}\" tabindex=\"-1\">\n <button type=\"button\" class=\"${swalClasses.close}\"></button>\n <ul class=\"${swalClasses['progress-steps']}\"></ul>\n <div class=\"${swalClasses.icon}\"></div>\n <img class=\"${swalClasses.image}\" />\n <h2 class=\"${swalClasses.title}\" id=\"${swalClasses.title}\"></h2>\n <div class=\"${swalClasses['html-container']}\" id=\"${swalClasses['html-container']}\"></div>\n <input class=\"${swalClasses.input}\" id=\"${swalClasses.input}\" />\n <input type=\"file\" class=\"${swalClasses.file}\" />\n <div class=\"${swalClasses.range}\">\n <input type=\"range\" />\n <output></output>\n </div>\n <select class=\"${swalClasses.select}\" id=\"${swalClasses.select}\"></select>\n <div class=\"${swalClasses.radio}\"></div>\n <label class=\"${swalClasses.checkbox}\">\n <input type=\"checkbox\" id=\"${swalClasses.checkbox}\" />\n <span class=\"${swalClasses.label}\"></span>\n </label>\n <textarea class=\"${swalClasses.textarea}\" id=\"${swalClasses.textarea}\"></textarea>\n <div class=\"${swalClasses['validation-message']}\" id=\"${swalClasses['validation-message']}\"></div>\n <div class=\"${swalClasses.actions}\">\n <div class=\"${swalClasses.loader}\"></div>\n <button type=\"button\" class=\"${swalClasses.confirm}\"></button>\n <button type=\"button\" class=\"${swalClasses.deny}\"></button>\n <button type=\"button\" class=\"${swalClasses.cancel}\"></button>\n </div>\n <div class=\"${swalClasses.footer}\"></div>\n <div class=\"${swalClasses['timer-progress-bar-container']}\">\n <div class=\"${swalClasses['timer-progress-bar']}\"></div>\n </div>\n </div>\n`.replace(/(^|\\n)\\s*/g, '');\n\n /**\n * @returns {boolean}\n */\n const resetOldContainer = () => {\n const oldContainer = getContainer();\n if (!oldContainer) {\n return false;\n }\n oldContainer.remove();\n removeClass([document.documentElement, document.body], [swalClasses['no-backdrop'], swalClasses['toast-shown'], swalClasses['has-column']]);\n return true;\n };\n const resetValidationMessage$1 = () => {\n globalState.currentInstance.resetValidationMessage();\n };\n const addInputChangeListeners = () => {\n const popup = getPopup();\n const input = getDirectChildByClass(popup, swalClasses.input);\n const file = getDirectChildByClass(popup, swalClasses.file);\n /** @type {HTMLInputElement} */\n const range = popup.querySelector(`.${swalClasses.range} input`);\n /** @type {HTMLOutputElement} */\n const rangeOutput = popup.querySelector(`.${swalClasses.range} output`);\n const select = getDirectChildByClass(popup, swalClasses.select);\n /** @type {HTMLInputElement} */\n const checkbox = popup.querySelector(`.${swalClasses.checkbox} input`);\n const textarea = getDirectChildByClass(popup, swalClasses.textarea);\n input.oninput = resetValidationMessage$1;\n file.onchange = resetValidationMessage$1;\n select.onchange = resetValidationMessage$1;\n checkbox.onchange = resetValidationMessage$1;\n textarea.oninput = resetValidationMessage$1;\n range.oninput = () => {\n resetValidationMessage$1();\n rangeOutput.value = range.value;\n };\n range.onchange = () => {\n resetValidationMessage$1();\n rangeOutput.value = range.value;\n };\n };\n\n /**\n * @param {string | HTMLElement} target\n * @returns {HTMLElement}\n */\n const getTarget = target => typeof target === 'string' ? document.querySelector(target) : target;\n\n /**\n * @param {SweetAlertOptions} params\n */\n const setupAccessibility = params => {\n const popup = getPopup();\n popup.setAttribute('role', params.toast ? 'alert' : 'dialog');\n popup.setAttribute('aria-live', params.toast ? 'polite' : 'assertive');\n if (!params.toast) {\n popup.setAttribute('aria-modal', 'true');\n }\n };\n\n /**\n * @param {HTMLElement} targetElement\n */\n const setupRTL = targetElement => {\n if (window.getComputedStyle(targetElement).direction === 'rtl') {\n addClass(getContainer(), swalClasses.rtl);\n }\n };\n\n /**\n * Add modal + backdrop + no-war message for Russians to DOM\n *\n * @param {SweetAlertOptions} params\n */\n const init = params => {\n // Clean up the old popup container if it exists\n const oldContainerExisted = resetOldContainer();\n if (isNodeEnv()) {\n error('SweetAlert2 requires document to initialize');\n return;\n }\n const container = document.createElement('div');\n container.className = swalClasses.container;\n if (oldContainerExisted) {\n addClass(container, swalClasses['no-transition']);\n }\n setInnerHtml(container, sweetHTML);\n container.dataset['swal2Theme'] = params.theme;\n const targetElement = getTarget(params.target);\n targetElement.appendChild(container);\n if (params.topLayer) {\n container.setAttribute('popover', '');\n container.showPopover();\n }\n setupAccessibility(params);\n setupRTL(targetElement);\n addInputChangeListeners();\n };\n\n /**\n * @param {HTMLElement | object | string} param\n * @param {HTMLElement} target\n */\n const parseHtmlToContainer = (param, target) => {\n // DOM element\n if (param instanceof HTMLElement) {\n target.appendChild(param);\n }\n\n // Object\n else if (typeof param === 'object') {\n handleObject(param, target);\n }\n\n // Plain string\n else if (param) {\n setInnerHtml(target, param);\n }\n };\n\n /**\n * @param {any} param\n * @param {HTMLElement} target\n */\n const handleObject = (param, target) => {\n // JQuery element(s)\n if (param.jquery) {\n handleJqueryElem(target, param);\n }\n\n // For other objects use their string representation\n else {\n setInnerHtml(target, param.toString());\n }\n };\n\n /**\n * @param {HTMLElement} target\n * @param {any} elem\n */\n const handleJqueryElem = (target, elem) => {\n target.textContent = '';\n if (0 in elem) {\n for (let i = 0; i in elem; i++) {\n target.appendChild(elem[i].cloneNode(true));\n }\n } else {\n target.appendChild(elem.cloneNode(true));\n }\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const renderActions = (instance, params) => {\n const actions = getActions();\n const loader = getLoader();\n if (!actions || !loader) {\n return;\n }\n\n // Actions (buttons) wrapper\n if (!params.showConfirmButton && !params.showDenyButton && !params.showCancelButton) {\n hide(actions);\n } else {\n show(actions);\n }\n\n // Custom class\n applyCustomClass(actions, params, 'actions');\n\n // Render all the buttons\n renderButtons(actions, loader, params);\n\n // Loader\n setInnerHtml(loader, params.loaderHtml || '');\n applyCustomClass(loader, params, 'loader');\n };\n\n /**\n * @param {HTMLElement} actions\n * @param {HTMLElement} loader\n * @param {SweetAlertOptions} params\n */\n function renderButtons(actions, loader, params) {\n const confirmButton = getConfirmButton();\n const denyButton = getDenyButton();\n const cancelButton = getCancelButton();\n if (!confirmButton || !denyButton || !cancelButton) {\n return;\n }\n\n // Render buttons\n renderButton(confirmButton, 'confirm', params);\n renderButton(denyButton, 'deny', params);\n renderButton(cancelButton, 'cancel', params);\n handleButtonsStyling(confirmButton, denyButton, cancelButton, params);\n if (params.reverseButtons) {\n if (params.toast) {\n actions.insertBefore(cancelButton, confirmButton);\n actions.insertBefore(denyButton, confirmButton);\n } else {\n actions.insertBefore(cancelButton, loader);\n actions.insertBefore(denyButton, loader);\n actions.insertBefore(confirmButton, loader);\n }\n }\n }\n\n /**\n * @param {HTMLElement} confirmButton\n * @param {HTMLElement} denyButton\n * @param {HTMLElement} cancelButton\n * @param {SweetAlertOptions} params\n */\n function handleButtonsStyling(confirmButton, denyButton, cancelButton, params) {\n if (!params.buttonsStyling) {\n removeClass([confirmButton, denyButton, cancelButton], swalClasses.styled);\n return;\n }\n addClass([confirmButton, denyButton, cancelButton], swalClasses.styled);\n\n // Apply custom background colors to action buttons\n if (params.confirmButtonColor) {\n confirmButton.style.setProperty('--swal2-confirm-button-background-color', params.confirmButtonColor);\n }\n if (params.denyButtonColor) {\n denyButton.style.setProperty('--swal2-deny-button-background-color', params.denyButtonColor);\n }\n if (params.cancelButtonColor) {\n cancelButton.style.setProperty('--swal2-cancel-button-background-color', params.cancelButtonColor);\n }\n\n // Apply the outline color to action buttons\n applyOutlineColor(confirmButton);\n applyOutlineColor(denyButton);\n applyOutlineColor(cancelButton);\n }\n\n /**\n * @param {HTMLElement} button\n */\n function applyOutlineColor(button) {\n const buttonStyle = window.getComputedStyle(button);\n if (buttonStyle.getPropertyValue('--swal2-action-button-focus-box-shadow')) {\n // If the button already has a custom outline color, no need to change it\n return;\n }\n const outlineColor = buttonStyle.backgroundColor.replace(/rgba?\\((\\d+), (\\d+), (\\d+).*/, 'rgba($1, $2, $3, 0.5)');\n button.style.setProperty('--swal2-action-button-focus-box-shadow', buttonStyle.getPropertyValue('--swal2-outline').replace(/ rgba\\(.*/, ` ${outlineColor}`));\n }\n\n /**\n * @param {HTMLElement} button\n * @param {'confirm' | 'deny' | 'cancel'} buttonType\n * @param {SweetAlertOptions} params\n */\n function renderButton(button, buttonType, params) {\n const buttonName = /** @type {'Confirm' | 'Deny' | 'Cancel'} */capitalizeFirstLetter(buttonType);\n toggle(button, params[`show${buttonName}Button`], 'inline-block');\n setInnerHtml(button, params[`${buttonType}ButtonText`] || ''); // Set caption text\n button.setAttribute('aria-label', params[`${buttonType}ButtonAriaLabel`] || ''); // ARIA label\n\n // Add buttons custom classes\n button.className = swalClasses[buttonType];\n applyCustomClass(button, params, `${buttonType}Button`);\n }\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const renderCloseButton = (instance, params) => {\n const closeButton = getCloseButton();\n if (!closeButton) {\n return;\n }\n setInnerHtml(closeButton, params.closeButtonHtml || '');\n\n // Custom class\n applyCustomClass(closeButton, params, 'closeButton');\n toggle(closeButton, params.showCloseButton);\n closeButton.setAttribute('aria-label', params.closeButtonAriaLabel || '');\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const renderContainer = (instance, params) => {\n const container = getContainer();\n if (!container) {\n return;\n }\n handleBackdropParam(container, params.backdrop);\n handlePositionParam(container, params.position);\n handleGrowParam(container, params.grow);\n\n // Custom class\n applyCustomClass(container, params, 'container');\n };\n\n /**\n * @param {HTMLElement} container\n * @param {SweetAlertOptions['backdrop']} backdrop\n */\n function handleBackdropParam(container, backdrop) {\n if (typeof backdrop === 'string') {\n container.style.background = backdrop;\n } else if (!backdrop) {\n addClass([document.documentElement, document.body], swalClasses['no-backdrop']);\n }\n }\n\n /**\n * @param {HTMLElement} container\n * @param {SweetAlertOptions['position']} position\n */\n function handlePositionParam(container, position) {\n if (!position) {\n return;\n }\n if (position in swalClasses) {\n addClass(container, swalClasses[position]);\n } else {\n warn('The \"position\" parameter is not valid, defaulting to \"center\"');\n addClass(container, swalClasses.center);\n }\n }\n\n /**\n * @param {HTMLElement} container\n * @param {SweetAlertOptions['grow']} grow\n */\n function handleGrowParam(container, grow) {\n if (!grow) {\n return;\n }\n addClass(container, swalClasses[`grow-${grow}`]);\n }\n\n /**\n * This module contains `WeakMap`s for each effectively-\"private property\" that a `Swal` has.\n * For example, to set the private property \"foo\" of `this` to \"bar\", you can `privateProps.foo.set(this, 'bar')`\n * This is the approach that Babel will probably take to implement private methods/fields\n * https://github.com/tc39/proposal-private-methods\n * https://github.com/babel/babel/pull/7555\n * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module*\n * then we can use that language feature.\n */\n\n var privateProps = {\n innerParams: new WeakMap(),\n domCache: new WeakMap()\n };\n\n /// <reference path=\"../../../../sweetalert2.d.ts\"/>\n\n\n /** @type {InputClass[]} */\n const inputClasses = ['input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea'];\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const renderInput = (instance, params) => {\n const popup = getPopup();\n if (!popup) {\n return;\n }\n const innerParams = privateProps.innerParams.get(instance);\n const rerender = !innerParams || params.input !== innerParams.input;\n inputClasses.forEach(inputClass => {\n const inputContainer = getDirectChildByClass(popup, swalClasses[inputClass]);\n if (!inputContainer) {\n return;\n }\n\n // set attributes\n setAttributes(inputClass, params.inputAttributes);\n\n // set class\n inputContainer.className = swalClasses[inputClass];\n if (rerender) {\n hide(inputContainer);\n }\n });\n if (params.input) {\n if (rerender) {\n showInput(params);\n }\n // set custom class\n setCustomClass(params);\n }\n };\n\n /**\n * @param {SweetAlertOptions} params\n */\n const showInput = params => {\n if (!params.input) {\n return;\n }\n if (!renderInputType[params.input]) {\n error(`Unexpected type of input! Expected ${Object.keys(renderInputType).join(' | ')}, got \"${params.input}\"`);\n return;\n }\n const inputContainer = getInputContainer(params.input);\n if (!inputContainer) {\n return;\n }\n const input = renderInputType[params.input](inputContainer, params);\n show(inputContainer);\n\n // input autofocus\n if (params.inputAutoFocus) {\n setTimeout(() => {\n focusInput(input);\n });\n }\n };\n\n /**\n * @param {HTMLInputElement} input\n */\n const removeAttributes = input => {\n for (let i = 0; i < input.attributes.length; i++) {\n const attrName = input.attributes[i].name;\n if (!['id', 'type', 'value', 'style'].includes(attrName)) {\n input.removeAttribute(attrName);\n }\n }\n };\n\n /**\n * @param {InputClass} inputClass\n * @param {SweetAlertOptions['inputAttributes']} inputAttributes\n */\n const setAttributes = (inputClass, inputAttributes) => {\n const popup = getPopup();\n if (!popup) {\n return;\n }\n const input = getInput$1(popup, inputClass);\n if (!input) {\n return;\n }\n removeAttributes(input);\n for (const attr in inputAttributes) {\n input.setAttribute(attr, inputAttributes[attr]);\n }\n };\n\n /**\n * @param {SweetAlertOptions} params\n */\n const setCustomClass = params => {\n if (!params.input) {\n return;\n }\n const inputContainer = getInputContainer(params.input);\n if (inputContainer) {\n applyCustomClass(inputContainer, params, 'input');\n }\n };\n\n /**\n * @param {HTMLInputElement | HTMLTextAreaElement} input\n * @param {SweetAlertOptions} params\n */\n const setInputPlaceholder = (input, params) => {\n if (!input.placeholder && params.inputPlaceholder) {\n input.placeholder = params.inputPlaceholder;\n }\n };\n\n /**\n * @param {Input} input\n * @param {Input} prependTo\n * @param {SweetAlertOptions} params\n */\n const setInputLabel = (input, prependTo, params) => {\n if (params.inputLabel) {\n const label = document.createElement('label');\n const labelClass = swalClasses['input-label'];\n label.setAttribute('for', input.id);\n label.className = labelClass;\n if (typeof params.customClass === 'object') {\n addClass(label, params.customClass.inputLabel);\n }\n label.innerText = params.inputLabel;\n prependTo.insertAdjacentElement('beforebegin', label);\n }\n };\n\n /**\n * @param {SweetAlertInput} inputType\n * @returns {HTMLElement | undefined}\n */\n const getInputContainer = inputType => {\n const popup = getPopup();\n if (!popup) {\n return;\n }\n return getDirectChildByClass(popup, swalClasses[(/** @type {SwalClass} */inputType)] || swalClasses.input);\n };\n\n /**\n * @param {HTMLInputElement | HTMLOutputElement | HTMLTextAreaElement} input\n * @param {SweetAlertOptions['inputValue']} inputValue\n */\n const checkAndSetInputValue = (input, inputValue) => {\n if (['string', 'number'].includes(typeof inputValue)) {\n input.value = `${inputValue}`;\n } else if (!isPromise(inputValue)) {\n warn(`Unexpected type of inputValue! Expected \"string\", \"number\" or \"Promise\", got \"${typeof inputValue}\"`);\n }\n };\n\n /** @type {Record<SweetAlertInput, (input: Input | HTMLElement, params: SweetAlertOptions) => Input>} */\n const renderInputType = {};\n\n /**\n * @param {HTMLInputElement} input\n * @param {SweetAlertOptions} params\n * @returns {HTMLInputElement}\n */\n renderInputType.text = renderInputType.email = renderInputType.password = renderInputType.number = renderInputType.tel = renderInputType.url = renderInputType.search = renderInputType.date = renderInputType['datetime-local'] = renderInputType.time = renderInputType.week = renderInputType.month = /** @type {(input: Input | HTMLElement, params: SweetAlertOptions) => Input} */\n (input, params) => {\n checkAndSetInputValue(input, params.inputValue);\n setInputLabel(input, input, params);\n setInputPlaceholder(input, params);\n input.type = params.input;\n return input;\n };\n\n /**\n * @param {HTMLInputElement} input\n * @param {SweetAlertOptions} params\n * @returns {HTMLInputElement}\n */\n renderInputType.file = (input, params) => {\n setInputLabel(input, input, params);\n setInputPlaceholder(input, params);\n return input;\n };\n\n /**\n * @param {HTMLInputElement} range\n * @param {SweetAlertOptions} params\n * @returns {HTMLInputElement}\n */\n renderInputType.range = (range, params) => {\n const rangeInput = range.querySelector('input');\n const rangeOutput = range.querySelector('output');\n checkAndSetInputValue(rangeInput, params.inputValue);\n rangeInput.type = params.input;\n checkAndSetInputValue(rangeOutput, params.inputValue);\n setInputLabel(rangeInput, range, params);\n return range;\n };\n\n /**\n * @param {HTMLSelectElement} select\n * @param {SweetAlertOptions} params\n * @returns {HTMLSelectElement}\n */\n renderInputType.select = (select, params) => {\n select.textContent = '';\n if (params.inputPlaceholder) {\n const placeholder = document.createElement('option');\n setInnerHtml(placeholder, params.inputPlaceholder);\n placeholder.value = '';\n placeholder.disabled = true;\n placeholder.selected = true;\n select.appendChild(placeholder);\n }\n setInputLabel(select, select, params);\n return select;\n };\n\n /**\n * @param {HTMLInputElement} radio\n * @returns {HTMLInputElement}\n */\n renderInputType.radio = radio => {\n radio.textContent = '';\n return radio;\n };\n\n /**\n * @param {HTMLLabelElement} checkboxContainer\n * @param {SweetAlertOptions} params\n * @returns {HTMLInputElement}\n */\n renderInputType.checkbox = (checkboxContainer, params) => {\n const checkbox = getInput$1(getPopup(), 'checkbox');\n checkbox.value = '1';\n checkbox.checked = Boolean(params.inputValue);\n const label = checkboxContainer.querySelector('span');\n setInnerHtml(label, params.inputPlaceholder || params.inputLabel);\n return checkbox;\n };\n\n /**\n * @param {HTMLTextAreaElement} textarea\n * @param {SweetAlertOptions} params\n * @returns {HTMLTextAreaElement}\n */\n renderInputType.textarea = (textarea, params) => {\n checkAndSetInputValue(textarea, params.inputValue);\n setInputPlaceholder(textarea, params);\n setInputLabel(textarea, textarea, params);\n\n /**\n * @param {HTMLElement} el\n * @returns {number}\n */\n const getMargin = el => parseInt(window.getComputedStyle(el).marginLeft) + parseInt(window.getComputedStyle(el).marginRight);\n\n // https://github.com/sweetalert2/sweetalert2/issues/2291\n setTimeout(() => {\n // https://github.com/sweetalert2/sweetalert2/issues/1699\n if ('MutationObserver' in window) {\n const initialPopupWidth = parseInt(window.getComputedStyle(getPopup()).width);\n const textareaResizeHandler = () => {\n // check if texarea is still in document (i.e. popup wasn't closed in the meantime)\n if (!document.body.contains(textarea)) {\n return;\n }\n const textareaWidth = textarea.offsetWidth + getMargin(textarea);\n if (textareaWidth > initialPopupWidth) {\n getPopup().style.width = `${textareaWidth}px`;\n } else {\n applyNumericalStyle(getPopup(), 'width', params.width);\n }\n };\n new MutationObserver(textareaResizeHandler).observe(textarea, {\n attributes: true,\n attributeFilter: ['style']\n });\n }\n });\n return textarea;\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const renderContent = (instance, params) => {\n const htmlContainer = getHtmlContainer();\n if (!htmlContainer) {\n return;\n }\n showWhenInnerHtmlPresent(htmlContainer);\n applyCustomClass(htmlContainer, params, 'htmlContainer');\n\n // Content as HTML\n if (params.html) {\n parseHtmlToContainer(params.html, htmlContainer);\n show(htmlContainer, 'block');\n }\n\n // Content as plain text\n else if (params.text) {\n htmlContainer.textContent = params.text;\n show(htmlContainer, 'block');\n }\n\n // No content\n else {\n hide(htmlContainer);\n }\n renderInput(instance, params);\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const renderFooter = (instance, params) => {\n const footer = getFooter();\n if (!footer) {\n return;\n }\n showWhenInnerHtmlPresent(footer);\n toggle(footer, params.footer, 'block');\n if (params.footer) {\n parseHtmlToContainer(params.footer, footer);\n }\n\n // Custom class\n applyCustomClass(footer, params, 'footer');\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const renderIcon = (instance, params) => {\n const innerParams = privateProps.innerParams.get(instance);\n const icon = getIcon();\n if (!icon) {\n return;\n }\n\n // if the given icon already rendered, apply the styling without re-rendering the icon\n if (innerParams && params.icon === innerParams.icon) {\n // Custom or default content\n setContent(icon, params);\n applyStyles(icon, params);\n return;\n }\n if (!params.icon && !params.iconHtml) {\n hide(icon);\n return;\n }\n if (params.icon && Object.keys(iconTypes).indexOf(params.icon) === -1) {\n error(`Unknown icon! Expected \"success\", \"error\", \"warning\", \"info\" or \"question\", got \"${params.icon}\"`);\n hide(icon);\n return;\n }\n show(icon);\n\n // Custom or default content\n setContent(icon, params);\n applyStyles(icon, params);\n\n // Animate icon\n addClass(icon, params.showClass && params.showClass.icon);\n\n // Re-adjust the success icon on system theme change\n const colorSchemeQueryList = window.matchMedia('(prefers-color-scheme: dark)');\n colorSchemeQueryList.addEventListener('change', adjustSuccessIconBackgroundColor);\n };\n\n /**\n * @param {HTMLElement} icon\n * @param {SweetAlertOptions} params\n */\n const applyStyles = (icon, params) => {\n for (const [iconType, iconClassName] of Object.entries(iconTypes)) {\n if (params.icon !== iconType) {\n removeClass(icon, iconClassName);\n }\n }\n addClass(icon, params.icon && iconTypes[params.icon]);\n\n // Icon color\n setColor(icon, params);\n\n // Success icon background color\n adjustSuccessIconBackgroundColor();\n\n // Custom class\n applyCustomClass(icon, params, 'icon');\n };\n\n // Adjust success icon background color to match the popup background color\n const adjustSuccessIconBackgroundColor = () => {\n const popup = getPopup();\n if (!popup) {\n return;\n }\n const popupBackgroundColor = window.getComputedStyle(popup).getPropertyValue('background-color');\n /** @type {NodeListOf<HTMLElement>} */\n const successIconParts = popup.querySelectorAll('[class^=swal2-success-circular-line], .swal2-success-fix');\n for (let i = 0; i < successIconParts.length; i++) {\n successIconParts[i].style.backgroundColor = popupBackgroundColor;\n }\n };\n const successIconHtml = `\n <div class=\"swal2-success-circular-line-left\"></div>\n <span class=\"swal2-success-line-tip\"></span> <span class=\"swal2-success-line-long\"></span>\n <div class=\"swal2-success-ring\"></div> <div class=\"swal2-success-fix\"></div>\n <div class=\"swal2-success-circular-line-right\"></div>\n`;\n const errorIconHtml = `\n <span class=\"swal2-x-mark\">\n <span class=\"swal2-x-mark-line-left\"></span>\n <span class=\"swal2-x-mark-line-right\"></span>\n </span>\n`;\n\n /**\n * @param {HTMLElement} icon\n * @param {SweetAlertOptions} params\n */\n const setContent = (icon, params) => {\n if (!params.icon && !params.iconHtml) {\n return;\n }\n let oldContent = icon.innerHTML;\n let newContent = '';\n if (params.iconHtml) {\n newContent = iconContent(params.iconHtml);\n } else if (params.icon === 'success') {\n newContent = successIconHtml;\n oldContent = oldContent.replace(/ style=\".*?\"/g, ''); // undo adjustSuccessIconBackgroundColor()\n } else if (params.icon === 'error') {\n newContent = errorIconHtml;\n } else if (params.icon) {\n const defaultIconHtml = {\n question: '?',\n warning: '!',\n info: 'i'\n };\n newContent = iconContent(defaultIconHtml[params.icon]);\n }\n if (oldContent.trim() !== newContent.trim()) {\n setInnerHtml(icon, newContent);\n }\n };\n\n /**\n * @param {HTMLElement} icon\n * @param {SweetAlertOptions} params\n */\n const setColor = (icon, params) => {\n if (!params.iconColor) {\n return;\n }\n icon.style.color = params.iconColor;\n icon.style.borderColor = params.iconColor;\n for (const sel of ['.swal2-success-line-tip', '.swal2-success-line-long', '.swal2-x-mark-line-left', '.swal2-x-mark-line-right']) {\n setStyle(icon, sel, 'background-color', params.iconColor);\n }\n setStyle(icon, '.swal2-success-ring', 'border-color', params.iconColor);\n };\n\n /**\n * @param {string} content\n * @returns {string}\n */\n const iconContent = content => `<div class=\"${swalClasses['icon-content']}\">${content}</div>`;\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const renderImage = (instance, params) => {\n const image = getImage();\n if (!image) {\n return;\n }\n if (!params.imageUrl) {\n hide(image);\n return;\n }\n show(image, '');\n\n // Src, alt\n image.setAttribute('src', params.imageUrl);\n image.setAttribute('alt', params.imageAlt || '');\n\n // Width, height\n applyNumericalStyle(image, 'width', params.imageWidth);\n applyNumericalStyle(image, 'height', params.imageHeight);\n\n // Class\n image.className = swalClasses.image;\n applyCustomClass(image, params, 'image');\n };\n\n let dragging = false;\n let mousedownX = 0;\n let mousedownY = 0;\n let initialX = 0;\n let initialY = 0;\n\n /**\n * @param {HTMLElement} popup\n */\n const addDraggableListeners = popup => {\n popup.addEventListener('mousedown', down);\n document.body.addEventListener('mousemove', move);\n popup.addEventListener('mouseup', up);\n popup.addEventListener('touchstart', down);\n document.body.addEventListener('touchmove', move);\n popup.addEventListener('touchend', up);\n };\n\n /**\n * @param {HTMLElement} popup\n */\n const removeDraggableListeners = popup => {\n popup.removeEventListener('mousedown', down);\n document.body.removeEventListener('mousemove', move);\n popup.removeEventListener('mouseup', up);\n popup.removeEventListener('touchstart', down);\n document.body.removeEventListener('touchmove', move);\n popup.removeEventListener('touchend', up);\n };\n\n /**\n * @param {MouseEvent | TouchEvent} event\n */\n const down = event => {\n const popup = getPopup();\n if (event.target === popup || getIcon().contains(/** @type {HTMLElement} */event.target)) {\n dragging = true;\n const clientXY = getClientXY(event);\n mousedownX = clientXY.clientX;\n mousedownY = clientXY.clientY;\n initialX = parseInt(popup.style.insetInlineStart) || 0;\n initialY = parseInt(popup.style.insetBlockStart) || 0;\n addClass(popup, 'swal2-dragging');\n }\n };\n\n /**\n * @param {MouseEvent | TouchEvent} event\n */\n const move = event => {\n const popup = getPopup();\n if (dragging) {\n let {\n clientX,\n clientY\n } = getClientXY(event);\n popup.style.insetInlineStart = `${initialX + (clientX - mousedownX)}px`;\n popup.style.insetBlockStart = `${initialY + (clientY - mousedownY)}px`;\n }\n };\n const up = () => {\n const popup = getPopup();\n dragging = false;\n removeClass(popup, 'swal2-dragging');\n };\n\n /**\n * @param {MouseEvent | TouchEvent} event\n * @returns {{ clientX: number, clientY: number }}\n */\n const getClientXY = event => {\n let clientX = 0,\n clientY = 0;\n if (event.type.startsWith('mouse')) {\n clientX = /** @type {MouseEvent} */event.clientX;\n clientY = /** @type {MouseEvent} */event.clientY;\n } else if (event.type.startsWith('touch')) {\n clientX = /** @type {TouchEvent} */event.touches[0].clientX;\n clientY = /** @type {TouchEvent} */event.touches[0].clientY;\n }\n return {\n clientX,\n clientY\n };\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const renderPopup = (instance, params) => {\n const container = getContainer();\n const popup = getPopup();\n if (!container || !popup) {\n return;\n }\n\n // Width\n // https://github.com/sweetalert2/sweetalert2/issues/2170\n if (params.toast) {\n applyNumericalStyle(container, 'width', params.width);\n popup.style.width = '100%';\n const loader = getLoader();\n if (loader) {\n popup.insertBefore(loader, getIcon());\n }\n } else {\n applyNumericalStyle(popup, 'width', params.width);\n }\n\n // Padding\n applyNumericalStyle(popup, 'padding', params.padding);\n\n // Color\n if (params.color) {\n popup.style.color = params.color;\n }\n\n // Background\n if (params.background) {\n popup.style.background = params.background;\n }\n hide(getValidationMessage());\n\n // Classes\n addClasses$1(popup, params);\n if (params.draggable && !params.toast) {\n addClass(popup, swalClasses.draggable);\n addDraggableListeners(popup);\n } else {\n removeClass(popup, swalClasses.draggable);\n removeDraggableListeners(popup);\n }\n };\n\n /**\n * @param {HTMLElement} popup\n * @param {SweetAlertOptions} params\n */\n const addClasses$1 = (popup, params) => {\n const showClass = params.showClass || {};\n // Default Class + showClass when updating Swal.update({})\n popup.className = `${swalClasses.popup} ${isVisible$1(popup) ? showClass.popup : ''}`;\n if (params.toast) {\n addClass([document.documentElement, document.body], swalClasses['toast-shown']);\n addClass(popup, swalClasses.toast);\n } else {\n addClass(popup, swalClasses.modal);\n }\n\n // Custom class\n applyCustomClass(popup, params, 'popup');\n // TODO: remove in the next major\n if (typeof params.customClass === 'string') {\n addClass(popup, params.customClass);\n }\n\n // Icon class (#1842)\n if (params.icon) {\n addClass(popup, swalClasses[`icon-${params.icon}`]);\n }\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const renderProgressSteps = (instance, params) => {\n const progressStepsContainer = getProgressSteps();\n if (!progressStepsContainer) {\n return;\n }\n const {\n progressSteps,\n currentProgressStep\n } = params;\n if (!progressSteps || progressSteps.length === 0 || currentProgressStep === undefined) {\n hide(progressStepsContainer);\n return;\n }\n show(progressStepsContainer);\n progressStepsContainer.textContent = '';\n if (currentProgressStep >= progressSteps.length) {\n warn('Invalid currentProgressStep parameter, it should be less than progressSteps.length ' + '(currentProgressStep like JS arrays starts from 0)');\n }\n progressSteps.forEach((step, index) => {\n const stepEl = createStepElement(step);\n progressStepsContainer.appendChild(stepEl);\n if (index === currentProgressStep) {\n addClass(stepEl, swalClasses['active-progress-step']);\n }\n if (index !== progressSteps.length - 1) {\n const lineEl = createLineElement(params);\n progressStepsContainer.appendChild(lineEl);\n }\n });\n };\n\n /**\n * @param {string} step\n * @returns {HTMLLIElement}\n */\n const createStepElement = step => {\n const stepEl = document.createElement('li');\n addClass(stepEl, swalClasses['progress-step']);\n setInnerHtml(stepEl, step);\n return stepEl;\n };\n\n /**\n * @param {SweetAlertOptions} params\n * @returns {HTMLLIElement}\n */\n const createLineElement = params => {\n const lineEl = document.createElement('li');\n addClass(lineEl, swalClasses['progress-step-line']);\n if (params.progressStepsDistance) {\n applyNumericalStyle(lineEl, 'width', params.progressStepsDistance);\n }\n return lineEl;\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const renderTitle = (instance, params) => {\n const title = getTitle();\n if (!title) {\n return;\n }\n showWhenInnerHtmlPresent(title);\n toggle(title, params.title || params.titleText, 'block');\n if (params.title) {\n parseHtmlToContainer(params.title, title);\n }\n if (params.titleText) {\n title.innerText = params.titleText;\n }\n\n // Custom class\n applyCustomClass(title, params, 'title');\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const render = (instance, params) => {\n renderPopup(instance, params);\n renderContainer(instance, params);\n renderProgressSteps(instance, params);\n renderIcon(instance, params);\n renderImage(instance, params);\n renderTitle(instance, params);\n renderCloseButton(instance, params);\n renderContent(instance, params);\n renderActions(instance, params);\n renderFooter(instance, params);\n const popup = getPopup();\n if (typeof params.didRender === 'function' && popup) {\n params.didRender(popup);\n }\n globalState.eventEmitter.emit('didRender', popup);\n };\n\n /*\n * Global function to determine if SweetAlert2 popup is shown\n */\n const isVisible = () => {\n return isVisible$1(getPopup());\n };\n\n /*\n * Global function to click 'Confirm' button\n */\n const clickConfirm = () => {\n var _dom$getConfirmButton;\n return (_dom$getConfirmButton = getConfirmButton()) === null || _dom$getConfirmButton === void 0 ? void 0 : _dom$getConfirmButton.click();\n };\n\n /*\n * Global function to click 'Deny' button\n */\n const clickDeny = () => {\n var _dom$getDenyButton;\n return (_dom$getDenyButton = getDenyButton()) === null || _dom$getDenyButton === void 0 ? void 0 : _dom$getDenyButton.click();\n };\n\n /*\n * Global function to click 'Cancel' button\n */\n const clickCancel = () => {\n var _dom$getCancelButton;\n return (_dom$getCancelButton = getCancelButton()) === null || _dom$getCancelButton === void 0 ? void 0 : _dom$getCancelButton.click();\n };\n\n /** @typedef {'cancel' | 'backdrop' | 'close' | 'esc' | 'timer'} DismissReason */\n\n /** @type {Record<DismissReason, DismissReason>} */\n const DismissReason = Object.freeze({\n cancel: 'cancel',\n backdrop: 'backdrop',\n close: 'close',\n esc: 'esc',\n timer: 'timer'\n });\n\n /**\n * @param {GlobalState} globalState\n */\n const removeKeydownHandler = globalState => {\n if (globalState.keydownTarget && globalState.keydownHandlerAdded) {\n globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, {\n capture: globalState.keydownListenerCapture\n });\n globalState.keydownHandlerAdded = false;\n }\n };\n\n /**\n * @param {GlobalState} globalState\n * @param {SweetAlertOptions} innerParams\n * @param {*} dismissWith\n */\n const addKeydownHandler = (globalState, innerParams, dismissWith) => {\n removeKeydownHandler(globalState);\n if (!innerParams.toast) {\n globalState.keydownHandler = e => keydownHandler(innerParams, e, dismissWith);\n globalState.keydownTarget = innerParams.keydownListenerCapture ? window : getPopup();\n globalState.keydownListenerCapture = innerParams.keydownListenerCapture;\n globalState.keydownTarget.addEventListener('keydown', globalState.keydownHandler, {\n capture: globalState.keydownListenerCapture\n });\n globalState.keydownHandlerAdded = true;\n }\n };\n\n /**\n * @param {number} index\n * @param {number} increment\n */\n const setFocus = (index, increment) => {\n var _dom$getPopup;\n const focusableElements = getFocusableElements();\n // search for visible elements and select the next possible match\n if (focusableElements.length) {\n index = index + increment;\n\n // shift + tab when .swal2-popup is focused\n if (index === -2) {\n index = focusableElements.length - 1;\n }\n\n // rollover to first item\n if (index === focusableElements.length) {\n index = 0;\n\n // go to last item\n } else if (index === -1) {\n index = focusableElements.length - 1;\n }\n focusableElements[index].focus();\n return;\n }\n // no visible focusable elements, focus the popup\n (_dom$getPopup = getPopup()) === null || _dom$getPopup === void 0 || _dom$getPopup.focus();\n };\n const arrowKeysNextButton = ['ArrowRight', 'ArrowDown'];\n const arrowKeysPreviousButton = ['ArrowLeft', 'ArrowUp'];\n\n /**\n * @param {SweetAlertOptions} innerParams\n * @param {KeyboardEvent} event\n * @param {Function} dismissWith\n */\n const keydownHandler = (innerParams, event, dismissWith) => {\n if (!innerParams) {\n return; // This instance has already been destroyed\n }\n\n // Ignore keydown during IME composition\n // https://developer.mozilla.org/en-US/docs/Web/API/Document/keydown_event#ignoring_keydown_during_ime_composition\n // https://github.com/sweetalert2/sweetalert2/issues/720\n // https://github.com/sweetalert2/sweetalert2/issues/2406\n if (event.isComposing || event.keyCode === 229) {\n return;\n }\n if (innerParams.stopKeydownPropagation) {\n event.stopPropagation();\n }\n\n // ENTER\n if (event.key === 'Enter') {\n handleEnter(event, innerParams);\n }\n\n // TAB\n else if (event.key === 'Tab') {\n handleTab(event);\n }\n\n // ARROWS - switch focus between buttons\n else if ([...arrowKeysNextButton, ...arrowKeysPreviousButton].includes(event.key)) {\n handleArrows(event.key);\n }\n\n // ESC\n else if (event.key === 'Escape') {\n handleEsc(event, innerParams, dismissWith);\n }\n };\n\n /**\n * @param {KeyboardEvent} event\n * @param {SweetAlertOptions} innerParams\n */\n const handleEnter = (event, innerParams) => {\n // https://github.com/sweetalert2/sweetalert2/issues/2386\n if (!callIfFunction(innerParams.allowEnterKey)) {\n return;\n }\n const input = getInput$1(getPopup(), innerParams.input);\n if (event.target && input && event.target instanceof HTMLElement && event.target.outerHTML === input.outerHTML) {\n if (['textarea', 'file'].includes(innerParams.input)) {\n return; // do not submit\n }\n clickConfirm();\n event.preventDefault();\n }\n };\n\n /**\n * @param {KeyboardEvent} event\n */\n const handleTab = event => {\n const targetElement = event.target;\n const focusableElements = getFocusableElements();\n let btnIndex = -1;\n for (let i = 0; i < focusableElements.length; i++) {\n if (targetElement === focusableElements[i]) {\n btnIndex = i;\n break;\n }\n }\n\n // Cycle to the next button\n if (!event.shiftKey) {\n setFocus(btnIndex, 1);\n }\n\n // Cycle to the prev button\n else {\n setFocus(btnIndex, -1);\n }\n event.stopPropagation();\n event.preventDefault();\n };\n\n /**\n * @param {string} key\n */\n const handleArrows = key => {\n const actions = getActions();\n const confirmButton = getConfirmButton();\n const denyButton = getDenyButton();\n const cancelButton = getCancelButton();\n if (!actions || !confirmButton || !denyButton || !cancelButton) {\n return;\n }\n /** @type HTMLElement[] */\n const buttons = [confirmButton, denyButton, cancelButton];\n if (document.activeElement instanceof HTMLElement && !buttons.includes(document.activeElement)) {\n return;\n }\n const sibling = arrowKeysNextButton.includes(key) ? 'nextElementSibling' : 'previousElementSibling';\n let buttonToFocus = document.activeElement;\n if (!buttonToFocus) {\n return;\n }\n for (let i = 0; i < actions.children.length; i++) {\n buttonToFocus = buttonToFocus[sibling];\n if (!buttonToFocus) {\n return;\n }\n if (buttonToFocus instanceof HTMLButtonElement && isVisible$1(buttonToFocus)) {\n break;\n }\n }\n if (buttonToFocus instanceof HTMLButtonElement) {\n buttonToFocus.focus();\n }\n };\n\n /**\n * @param {KeyboardEvent} event\n * @param {SweetAlertOptions} innerParams\n * @param {Function} dismissWith\n */\n const handleEsc = (event, innerParams, dismissWith) => {\n if (callIfFunction(innerParams.allowEscapeKey)) {\n event.preventDefault();\n dismissWith(DismissReason.esc);\n }\n };\n\n /**\n * This module contains `WeakMap`s for each effectively-\"private property\" that a `Swal` has.\n * For example, to set the private property \"foo\" of `this` to \"bar\", you can `privateProps.foo.set(this, 'bar')`\n * This is the approach that Babel will probably take to implement private methods/fields\n * https://github.com/tc39/proposal-private-methods\n * https://github.com/babel/babel/pull/7555\n * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module*\n * then we can use that language feature.\n */\n\n var privateMethods = {\n swalPromiseResolve: new WeakMap(),\n swalPromiseReject: new WeakMap()\n };\n\n // From https://developer.paciellogroup.com/blog/2018/06/the-current-state-of-modal-dialog-accessibility/\n // Adding aria-hidden=\"true\" to elements outside of the active modal dialog ensures that\n // elements not within the active modal dialog will not be surfaced if a user opens a screen\n // reader’s list of elements (headings, form controls, landmarks, etc.) in the document.\n\n const setAriaHidden = () => {\n const container = getContainer();\n const bodyChildren = Array.from(document.body.children);\n bodyChildren.forEach(el => {\n if (el.contains(container)) {\n return;\n }\n if (el.hasAttribute('aria-hidden')) {\n el.setAttribute('data-previous-aria-hidden', el.getAttribute('aria-hidden') || '');\n }\n el.setAttribute('aria-hidden', 'true');\n });\n };\n const unsetAriaHidden = () => {\n const bodyChildren = Array.from(document.body.children);\n bodyChildren.forEach(el => {\n if (el.hasAttribute('data-previous-aria-hidden')) {\n el.setAttribute('aria-hidden', el.getAttribute('data-previous-aria-hidden') || '');\n el.removeAttribute('data-previous-aria-hidden');\n } else {\n el.removeAttribute('aria-hidden');\n }\n });\n };\n\n // @ts-ignore\n const isSafariOrIOS = typeof window !== 'undefined' && !!window.GestureEvent; // true for Safari desktop + all iOS browsers https://stackoverflow.com/a/70585394\n\n /**\n * Fix iOS scrolling\n * http://stackoverflow.com/q/39626302\n */\n const iOSfix = () => {\n if (isSafariOrIOS && !hasClass(document.body, swalClasses.iosfix)) {\n const offset = document.body.scrollTop;\n document.body.style.top = `${offset * -1}px`;\n addClass(document.body, swalClasses.iosfix);\n lockBodyScroll();\n }\n };\n\n /**\n * https://github.com/sweetalert2/sweetalert2/issues/1246\n */\n const lockBodyScroll = () => {\n const container = getContainer();\n if (!container) {\n return;\n }\n /** @type {boolean} */\n let preventTouchMove;\n /**\n * @param {TouchEvent} event\n */\n container.ontouchstart = event => {\n preventTouchMove = shouldPreventTouchMove(event);\n };\n /**\n * @param {TouchEvent} event\n */\n container.ontouchmove = event => {\n if (preventTouchMove) {\n event.preventDefault();\n event.stopPropagation();\n }\n };\n };\n\n /**\n * @param {TouchEvent} event\n * @returns {boolean}\n */\n const shouldPreventTouchMove = event => {\n const target = event.target;\n const container = getContainer();\n const htmlContainer = getHtmlContainer();\n if (!container || !htmlContainer) {\n return false;\n }\n if (isStylus(event) || isZoom(event)) {\n return false;\n }\n if (target === container) {\n return true;\n }\n if (!isScrollable(container) && target instanceof HTMLElement && !selfOrParentIsScrollable(target, htmlContainer) &&\n // #2823\n target.tagName !== 'INPUT' &&\n // #1603\n target.tagName !== 'TEXTAREA' &&\n // #2266\n !(isScrollable(htmlContainer) &&\n // #1944\n htmlContainer.contains(target))) {\n return true;\n }\n return false;\n };\n\n /**\n * https://github.com/sweetalert2/sweetalert2/issues/1786\n *\n * @param {*} event\n * @returns {boolean}\n */\n const isStylus = event => {\n return event.touches && event.touches.length && event.touches[0].touchType === 'stylus';\n };\n\n /**\n * https://github.com/sweetalert2/sweetalert2/issues/1891\n *\n * @param {TouchEvent} event\n * @returns {boolean}\n */\n const isZoom = event => {\n return event.touches && event.touches.length > 1;\n };\n const undoIOSfix = () => {\n if (hasClass(document.body, swalClasses.iosfix)) {\n const offset = parseInt(document.body.style.top, 10);\n removeClass(document.body, swalClasses.iosfix);\n document.body.style.top = '';\n document.body.scrollTop = offset * -1;\n }\n };\n\n /**\n * Measure scrollbar width for padding body during modal show/hide\n * https://github.com/twbs/bootstrap/blob/master/js/src/modal.js\n *\n * @returns {number}\n */\n const measureScrollbar = () => {\n const scrollDiv = document.createElement('div');\n scrollDiv.className = swalClasses['scrollbar-measure'];\n document.body.appendChild(scrollDiv);\n const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n document.body.removeChild(scrollDiv);\n return scrollbarWidth;\n };\n\n /**\n * Remember state in cases where opening and handling a modal will fiddle with it.\n * @type {number | null}\n */\n let previousBodyPadding = null;\n\n /**\n * @param {string} initialBodyOverflow\n */\n const replaceScrollbarWithPadding = initialBodyOverflow => {\n // for queues, do not do this more than once\n if (previousBodyPadding !== null) {\n return;\n }\n // if the body has overflow\n if (document.body.scrollHeight > window.innerHeight || initialBodyOverflow === 'scroll' // https://github.com/sweetalert2/sweetalert2/issues/2663\n ) {\n // add padding so the content doesn't shift after removal of scrollbar\n previousBodyPadding = parseInt(window.getComputedStyle(document.body).getPropertyValue('padding-right'));\n document.body.style.paddingRight = `${previousBodyPadding + measureScrollbar()}px`;\n }\n };\n const undoReplaceScrollbarWithPadding = () => {\n if (previousBodyPadding !== null) {\n document.body.style.paddingRight = `${previousBodyPadding}px`;\n previousBodyPadding = null;\n }\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {HTMLElement} container\n * @param {boolean} returnFocus\n * @param {Function} didClose\n */\n function removePopupAndResetState(instance, container, returnFocus, didClose) {\n if (isToast()) {\n triggerDidCloseAndDispose(instance, didClose);\n } else {\n restoreActiveElement(returnFocus).then(() => triggerDidCloseAndDispose(instance, didClose));\n removeKeydownHandler(globalState);\n }\n\n // workaround for https://github.com/sweetalert2/sweetalert2/issues/2088\n // for some reason removing the container in Safari will scroll the document to bottom\n if (isSafariOrIOS) {\n container.setAttribute('style', 'display:none !important');\n container.removeAttribute('class');\n container.innerHTML = '';\n } else {\n container.remove();\n }\n if (isModal()) {\n undoReplaceScrollbarWithPadding();\n undoIOSfix();\n unsetAriaHidden();\n }\n removeBodyClasses();\n }\n\n /**\n * Remove SweetAlert2 classes from body\n */\n function removeBodyClasses() {\n removeClass([document.documentElement, document.body], [swalClasses.shown, swalClasses['height-auto'], swalClasses['no-backdrop'], swalClasses['toast-shown']]);\n }\n\n /**\n * Instance method to close sweetAlert\n *\n * @param {any} resolveValue\n */\n function close(resolveValue) {\n resolveValue = prepareResolveValue(resolveValue);\n const swalPromiseResolve = privateMethods.swalPromiseResolve.get(this);\n const didClose = triggerClosePopup(this);\n if (this.isAwaitingPromise) {\n // A swal awaiting for a promise (after a click on Confirm or Deny) cannot be dismissed anymore #2335\n if (!resolveValue.isDismissed) {\n handleAwaitingPromise(this);\n swalPromiseResolve(resolveValue);\n }\n } else if (didClose) {\n // Resolve Swal promise\n swalPromiseResolve(resolveValue);\n }\n }\n const triggerClosePopup = instance => {\n const popup = getPopup();\n if (!popup) {\n return false;\n }\n const innerParams = privateProps.innerParams.get(instance);\n if (!innerParams || hasClass(popup, innerParams.hideClass.popup)) {\n return false;\n }\n removeClass(popup, innerParams.showClass.popup);\n addClass(popup, innerParams.hideClass.popup);\n const backdrop = getContainer();\n removeClass(backdrop, innerParams.showClass.backdrop);\n addClass(backdrop, innerParams.hideClass.backdrop);\n handlePopupAnimation(instance, popup, innerParams);\n return true;\n };\n\n /**\n * @param {any} error\n */\n function rejectPromise(error) {\n const rejectPromise = privateMethods.swalPromiseReject.get(this);\n handleAwaitingPromise(this);\n if (rejectPromise) {\n // Reject Swal promise\n rejectPromise(error);\n }\n }\n\n /**\n * @param {SweetAlert} instance\n */\n const handleAwaitingPromise = instance => {\n if (instance.isAwaitingPromise) {\n delete instance.isAwaitingPromise;\n // The instance might have been previously partly destroyed, we must resume the destroy process in this case #2335\n if (!privateProps.innerParams.get(instance)) {\n instance._destroy();\n }\n }\n };\n\n /**\n * @param {any} resolveValue\n * @returns {SweetAlertResult}\n */\n const prepareResolveValue = resolveValue => {\n // When user calls Swal.close()\n if (typeof resolveValue === 'undefined') {\n return {\n isConfirmed: false,\n isDenied: false,\n isDismissed: true\n };\n }\n return Object.assign({\n isConfirmed: false,\n isDenied: false,\n isDismissed: false\n }, resolveValue);\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {HTMLElement} popup\n * @param {SweetAlertOptions} innerParams\n */\n const handlePopupAnimation = (instance, popup, innerParams) => {\n var _globalState$eventEmi;\n const container = getContainer();\n // If animation is supported, animate\n const animationIsSupported = hasCssAnimation(popup);\n if (typeof innerParams.willClose === 'function') {\n innerParams.willClose(popup);\n }\n (_globalState$eventEmi = globalState.eventEmitter) === null || _globalState$eventEmi === void 0 || _globalState$eventEmi.emit('willClose', popup);\n if (animationIsSupported) {\n animatePopup(instance, popup, container, innerParams.returnFocus, innerParams.didClose);\n } else {\n // Otherwise, remove immediately\n removePopupAndResetState(instance, container, innerParams.returnFocus, innerParams.didClose);\n }\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {HTMLElement} popup\n * @param {HTMLElement} container\n * @param {boolean} returnFocus\n * @param {Function} didClose\n */\n const animatePopup = (instance, popup, container, returnFocus, didClose) => {\n globalState.swalCloseEventFinishedCallback = removePopupAndResetState.bind(null, instance, container, returnFocus, didClose);\n /**\n * @param {AnimationEvent | TransitionEvent} e\n */\n const swalCloseAnimationFinished = function (e) {\n if (e.target === popup) {\n var _globalState$swalClos;\n (_globalState$swalClos = globalState.swalCloseEventFinishedCallback) === null || _globalState$swalClos === void 0 || _globalState$swalClos.call(globalState);\n delete globalState.swalCloseEventFinishedCallback;\n popup.removeEventListener('animationend', swalCloseAnimationFinished);\n popup.removeEventListener('transitionend', swalCloseAnimationFinished);\n }\n };\n popup.addEventListener('animationend', swalCloseAnimationFinished);\n popup.addEventListener('transitionend', swalCloseAnimationFinished);\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {Function} didClose\n */\n const triggerDidCloseAndDispose = (instance, didClose) => {\n setTimeout(() => {\n var _globalState$eventEmi2;\n if (typeof didClose === 'function') {\n didClose.bind(instance.params)();\n }\n (_globalState$eventEmi2 = globalState.eventEmitter) === null || _globalState$eventEmi2 === void 0 || _globalState$eventEmi2.emit('didClose');\n // instance might have been destroyed already\n if (instance._destroy) {\n instance._destroy();\n }\n });\n };\n\n /**\n * Shows loader (spinner), this is useful with AJAX requests.\n * By default the loader be shown instead of the \"Confirm\" button.\n *\n * @param {HTMLButtonElement | null} [buttonToReplace]\n */\n const showLoading = buttonToReplace => {\n let popup = getPopup();\n if (!popup) {\n new Swal();\n }\n popup = getPopup();\n if (!popup) {\n return;\n }\n const loader = getLoader();\n if (isToast()) {\n hide(getIcon());\n } else {\n replaceButton(popup, buttonToReplace);\n }\n show(loader);\n popup.setAttribute('data-loading', 'true');\n popup.setAttribute('aria-busy', 'true');\n popup.focus();\n };\n\n /**\n * @param {HTMLElement} popup\n * @param {HTMLButtonElement | null} [buttonToReplace]\n */\n const replaceButton = (popup, buttonToReplace) => {\n const actions = getActions();\n const loader = getLoader();\n if (!actions || !loader) {\n return;\n }\n if (!buttonToReplace && isVisible$1(getConfirmButton())) {\n buttonToReplace = getConfirmButton();\n }\n show(actions);\n if (buttonToReplace) {\n hide(buttonToReplace);\n loader.setAttribute('data-button-to-replace', buttonToReplace.className);\n actions.insertBefore(loader, buttonToReplace);\n }\n addClass([popup, actions], swalClasses.loading);\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const handleInputOptionsAndValue = (instance, params) => {\n if (params.input === 'select' || params.input === 'radio') {\n handleInputOptions(instance, params);\n } else if (['text', 'email', 'number', 'tel', 'textarea'].some(i => i === params.input) && (hasToPromiseFn(params.inputValue) || isPromise(params.inputValue))) {\n showLoading(getConfirmButton());\n handleInputValue(instance, params);\n }\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} innerParams\n * @returns {SweetAlertInputValue}\n */\n const getInputValue = (instance, innerParams) => {\n const input = instance.getInput();\n if (!input) {\n return null;\n }\n switch (innerParams.input) {\n case 'checkbox':\n return getCheckboxValue(input);\n case 'radio':\n return getRadioValue(input);\n case 'file':\n return getFileValue(input);\n default:\n return innerParams.inputAutoTrim ? input.value.trim() : input.value;\n }\n };\n\n /**\n * @param {HTMLInputElement} input\n * @returns {number}\n */\n const getCheckboxValue = input => input.checked ? 1 : 0;\n\n /**\n * @param {HTMLInputElement} input\n * @returns {string | null}\n */\n const getRadioValue = input => input.checked ? input.value : null;\n\n /**\n * @param {HTMLInputElement} input\n * @returns {FileList | File | null}\n */\n const getFileValue = input => input.files && input.files.length ? input.getAttribute('multiple') !== null ? input.files : input.files[0] : null;\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const handleInputOptions = (instance, params) => {\n const popup = getPopup();\n if (!popup) {\n return;\n }\n /**\n * @param {Record<string, any>} inputOptions\n */\n const processInputOptions = inputOptions => {\n if (params.input === 'select') {\n populateSelectOptions(popup, formatInputOptions(inputOptions), params);\n } else if (params.input === 'radio') {\n populateRadioOptions(popup, formatInputOptions(inputOptions), params);\n }\n };\n if (hasToPromiseFn(params.inputOptions) || isPromise(params.inputOptions)) {\n showLoading(getConfirmButton());\n asPromise(params.inputOptions).then(inputOptions => {\n instance.hideLoading();\n processInputOptions(inputOptions);\n });\n } else if (typeof params.inputOptions === 'object') {\n processInputOptions(params.inputOptions);\n } else {\n error(`Unexpected type of inputOptions! Expected object, Map or Promise, got ${typeof params.inputOptions}`);\n }\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const handleInputValue = (instance, params) => {\n const input = instance.getInput();\n if (!input) {\n return;\n }\n hide(input);\n asPromise(params.inputValue).then(inputValue => {\n input.value = params.input === 'number' ? `${parseFloat(inputValue) || 0}` : `${inputValue}`;\n show(input);\n input.focus();\n instance.hideLoading();\n }).catch(err => {\n error(`Error in inputValue promise: ${err}`);\n input.value = '';\n show(input);\n input.focus();\n instance.hideLoading();\n });\n };\n\n /**\n * @param {HTMLElement} popup\n * @param {InputOptionFlattened[]} inputOptions\n * @param {SweetAlertOptions} params\n */\n function populateSelectOptions(popup, inputOptions, params) {\n const select = getDirectChildByClass(popup, swalClasses.select);\n if (!select) {\n return;\n }\n /**\n * @param {HTMLElement} parent\n * @param {string} optionLabel\n * @param {string} optionValue\n */\n const renderOption = (parent, optionLabel, optionValue) => {\n const option = document.createElement('option');\n option.value = optionValue;\n setInnerHtml(option, optionLabel);\n option.selected = isSelected(optionValue, params.inputValue);\n parent.appendChild(option);\n };\n inputOptions.forEach(inputOption => {\n const optionValue = inputOption[0];\n const optionLabel = inputOption[1];\n // <optgroup> spec:\n // https://www.w3.org/TR/html401/interact/forms.html#h-17.6\n // \"...all OPTGROUP elements must be specified directly within a SELECT element (i.e., groups may not be nested)...\"\n // check whether this is a <optgroup>\n if (Array.isArray(optionLabel)) {\n // if it is an array, then it is an <optgroup>\n const optgroup = document.createElement('optgroup');\n optgroup.label = optionValue;\n optgroup.disabled = false; // not configurable for now\n select.appendChild(optgroup);\n optionLabel.forEach(o => renderOption(optgroup, o[1], o[0]));\n } else {\n // case of <option>\n renderOption(select, optionLabel, optionValue);\n }\n });\n select.focus();\n }\n\n /**\n * @param {HTMLElement} popup\n * @param {InputOptionFlattened[]} inputOptions\n * @param {SweetAlertOptions} params\n */\n function populateRadioOptions(popup, inputOptions, params) {\n const radio = getDirectChildByClass(popup, swalClasses.radio);\n if (!radio) {\n return;\n }\n inputOptions.forEach(inputOption => {\n const radioValue = inputOption[0];\n const radioLabel = inputOption[1];\n const radioInput = document.createElement('input');\n const radioLabelElement = document.createElement('label');\n radioInput.type = 'radio';\n radioInput.name = swalClasses.radio;\n radioInput.value = radioValue;\n if (isSelected(radioValue, params.inputValue)) {\n radioInput.checked = true;\n }\n const label = document.createElement('span');\n setInnerHtml(label, radioLabel);\n label.className = swalClasses.label;\n radioLabelElement.appendChild(radioInput);\n radioLabelElement.appendChild(label);\n radio.appendChild(radioLabelElement);\n });\n const radios = radio.querySelectorAll('input');\n if (radios.length) {\n radios[0].focus();\n }\n }\n\n /**\n * Converts `inputOptions` into an array of `[value, label]`s\n *\n * @param {Record<string, any>} inputOptions\n * @typedef {string[]} InputOptionFlattened\n * @returns {InputOptionFlattened[]}\n */\n const formatInputOptions = inputOptions => {\n /** @type {InputOptionFlattened[]} */\n const result = [];\n if (inputOptions instanceof Map) {\n inputOptions.forEach((value, key) => {\n let valueFormatted = value;\n if (typeof valueFormatted === 'object') {\n // case of <optgroup>\n valueFormatted = formatInputOptions(valueFormatted);\n }\n result.push([key, valueFormatted]);\n });\n } else {\n Object.keys(inputOptions).forEach(key => {\n let valueFormatted = inputOptions[key];\n if (typeof valueFormatted === 'object') {\n // case of <optgroup>\n valueFormatted = formatInputOptions(valueFormatted);\n }\n result.push([key, valueFormatted]);\n });\n }\n return result;\n };\n\n /**\n * @param {string} optionValue\n * @param {SweetAlertInputValue} inputValue\n * @returns {boolean}\n */\n const isSelected = (optionValue, inputValue) => {\n return !!inputValue && inputValue.toString() === optionValue.toString();\n };\n\n /**\n * @param {SweetAlert} instance\n */\n const handleConfirmButtonClick = instance => {\n const innerParams = privateProps.innerParams.get(instance);\n instance.disableButtons();\n if (innerParams.input) {\n handleConfirmOrDenyWithInput(instance, 'confirm');\n } else {\n confirm(instance, true);\n }\n };\n\n /**\n * @param {SweetAlert} instance\n */\n const handleDenyButtonClick = instance => {\n const innerParams = privateProps.innerParams.get(instance);\n instance.disableButtons();\n if (innerParams.returnInputValueOnDeny) {\n handleConfirmOrDenyWithInput(instance, 'deny');\n } else {\n deny(instance, false);\n }\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {Function} dismissWith\n */\n const handleCancelButtonClick = (instance, dismissWith) => {\n instance.disableButtons();\n dismissWith(DismissReason.cancel);\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {'confirm' | 'deny'} type\n */\n const handleConfirmOrDenyWithInput = (instance, type) => {\n const innerParams = privateProps.innerParams.get(instance);\n if (!innerParams.input) {\n error(`The \"input\" parameter is needed to be set when using returnInputValueOn${capitalizeFirstLetter(type)}`);\n return;\n }\n const input = instance.getInput();\n const inputValue = getInputValue(instance, innerParams);\n if (innerParams.inputValidator) {\n handleInputValidator(instance, inputValue, type);\n } else if (input && !input.checkValidity()) {\n instance.enableButtons();\n instance.showValidationMessage(innerParams.validationMessage || input.validationMessage);\n } else if (type === 'deny') {\n deny(instance, inputValue);\n } else {\n confirm(instance, inputValue);\n }\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertInputValue} inputValue\n * @param {'confirm' | 'deny'} type\n */\n const handleInputValidator = (instance, inputValue, type) => {\n const innerParams = privateProps.innerParams.get(instance);\n instance.disableInput();\n const validationPromise = Promise.resolve().then(() => asPromise(innerParams.inputValidator(inputValue, innerParams.validationMessage)));\n validationPromise.then(validationMessage => {\n instance.enableButtons();\n instance.enableInput();\n if (validationMessage) {\n instance.showValidationMessage(validationMessage);\n } else if (type === 'deny') {\n deny(instance, inputValue);\n } else {\n confirm(instance, inputValue);\n }\n });\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {any} value\n */\n const deny = (instance, value) => {\n const innerParams = privateProps.innerParams.get(instance || undefined);\n if (innerParams.showLoaderOnDeny) {\n showLoading(getDenyButton());\n }\n if (innerParams.preDeny) {\n instance.isAwaitingPromise = true; // Flagging the instance as awaiting a promise so it's own promise's reject/resolve methods doesn't get destroyed until the result from this preDeny's promise is received\n const preDenyPromise = Promise.resolve().then(() => asPromise(innerParams.preDeny(value, innerParams.validationMessage)));\n preDenyPromise.then(preDenyValue => {\n if (preDenyValue === false) {\n instance.hideLoading();\n handleAwaitingPromise(instance);\n } else {\n instance.close({\n isDenied: true,\n value: typeof preDenyValue === 'undefined' ? value : preDenyValue\n });\n }\n }).catch(error => rejectWith(instance || undefined, error));\n } else {\n instance.close({\n isDenied: true,\n value\n });\n }\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {any} value\n */\n const succeedWith = (instance, value) => {\n instance.close({\n isConfirmed: true,\n value\n });\n };\n\n /**\n *\n * @param {SweetAlert} instance\n * @param {string} error\n */\n const rejectWith = (instance, error) => {\n instance.rejectPromise(error);\n };\n\n /**\n *\n * @param {SweetAlert} instance\n * @param {any} value\n */\n const confirm = (instance, value) => {\n const innerParams = privateProps.innerParams.get(instance || undefined);\n if (innerParams.showLoaderOnConfirm) {\n showLoading();\n }\n if (innerParams.preConfirm) {\n instance.resetValidationMessage();\n instance.isAwaitingPromise = true; // Flagging the instance as awaiting a promise so it's own promise's reject/resolve methods doesn't get destroyed until the result from this preConfirm's promise is received\n const preConfirmPromise = Promise.resolve().then(() => asPromise(innerParams.preConfirm(value, innerParams.validationMessage)));\n preConfirmPromise.then(preConfirmValue => {\n if (isVisible$1(getValidationMessage()) || preConfirmValue === false) {\n instance.hideLoading();\n handleAwaitingPromise(instance);\n } else {\n succeedWith(instance, typeof preConfirmValue === 'undefined' ? value : preConfirmValue);\n }\n }).catch(error => rejectWith(instance || undefined, error));\n } else {\n succeedWith(instance, value);\n }\n };\n\n /**\n * Hides loader and shows back the button which was hidden by .showLoading()\n */\n function hideLoading() {\n // do nothing if popup is closed\n const innerParams = privateProps.innerParams.get(this);\n if (!innerParams) {\n return;\n }\n const domCache = privateProps.domCache.get(this);\n hide(domCache.loader);\n if (isToast()) {\n if (innerParams.icon) {\n show(getIcon());\n }\n } else {\n showRelatedButton(domCache);\n }\n removeClass([domCache.popup, domCache.actions], swalClasses.loading);\n domCache.popup.removeAttribute('aria-busy');\n domCache.popup.removeAttribute('data-loading');\n domCache.confirmButton.disabled = false;\n domCache.denyButton.disabled = false;\n domCache.cancelButton.disabled = false;\n }\n const showRelatedButton = domCache => {\n const buttonToReplace = domCache.popup.getElementsByClassName(domCache.loader.getAttribute('data-button-to-replace'));\n if (buttonToReplace.length) {\n show(buttonToReplace[0], 'inline-block');\n } else if (allButtonsAreHidden()) {\n hide(domCache.actions);\n }\n };\n\n /**\n * Gets the input DOM node, this method works with input parameter.\n *\n * @returns {HTMLInputElement | null}\n */\n function getInput() {\n const innerParams = privateProps.innerParams.get(this);\n const domCache = privateProps.domCache.get(this);\n if (!domCache) {\n return null;\n }\n return getInput$1(domCache.popup, innerParams.input);\n }\n\n /**\n * @param {SweetAlert} instance\n * @param {string[]} buttons\n * @param {boolean} disabled\n */\n function setButtonsDisabled(instance, buttons, disabled) {\n const domCache = privateProps.domCache.get(instance);\n buttons.forEach(button => {\n domCache[button].disabled = disabled;\n });\n }\n\n /**\n * @param {HTMLInputElement | null} input\n * @param {boolean} disabled\n */\n function setInputDisabled(input, disabled) {\n const popup = getPopup();\n if (!popup || !input) {\n return;\n }\n if (input.type === 'radio') {\n /** @type {NodeListOf<HTMLInputElement>} */\n const radios = popup.querySelectorAll(`[name=\"${swalClasses.radio}\"]`);\n for (let i = 0; i < radios.length; i++) {\n radios[i].disabled = disabled;\n }\n } else {\n input.disabled = disabled;\n }\n }\n\n /**\n * Enable all the buttons\n * @this {SweetAlert}\n */\n function enableButtons() {\n setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], false);\n }\n\n /**\n * Disable all the buttons\n * @this {SweetAlert}\n */\n function disableButtons() {\n setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], true);\n }\n\n /**\n * Enable the input field\n * @this {SweetAlert}\n */\n function enableInput() {\n setInputDisabled(this.getInput(), false);\n }\n\n /**\n * Disable the input field\n * @this {SweetAlert}\n */\n function disableInput() {\n setInputDisabled(this.getInput(), true);\n }\n\n /**\n * Show block with validation message\n *\n * @param {string} error\n * @this {SweetAlert}\n */\n function showValidationMessage(error) {\n const domCache = privateProps.domCache.get(this);\n const params = privateProps.innerParams.get(this);\n setInnerHtml(domCache.validationMessage, error);\n domCache.validationMessage.className = swalClasses['validation-message'];\n if (params.customClass && params.customClass.validationMessage) {\n addClass(domCache.validationMessage, params.customClass.validationMessage);\n }\n show(domCache.validationMessage);\n const input = this.getInput();\n if (input) {\n input.setAttribute('aria-invalid', 'true');\n input.setAttribute('aria-describedby', swalClasses['validation-message']);\n focusInput(input);\n addClass(input, swalClasses.inputerror);\n }\n }\n\n /**\n * Hide block with validation message\n *\n * @this {SweetAlert}\n */\n function resetValidationMessage() {\n const domCache = privateProps.domCache.get(this);\n if (domCache.validationMessage) {\n hide(domCache.validationMessage);\n }\n const input = this.getInput();\n if (input) {\n input.removeAttribute('aria-invalid');\n input.removeAttribute('aria-describedby');\n removeClass(input, swalClasses.inputerror);\n }\n }\n\n const defaultParams = {\n title: '',\n titleText: '',\n text: '',\n html: '',\n footer: '',\n icon: undefined,\n iconColor: undefined,\n iconHtml: undefined,\n template: undefined,\n toast: false,\n draggable: false,\n animation: true,\n theme: 'light',\n showClass: {\n popup: 'swal2-show',\n backdrop: 'swal2-backdrop-show',\n icon: 'swal2-icon-show'\n },\n hideClass: {\n popup: 'swal2-hide',\n backdrop: 'swal2-backdrop-hide',\n icon: 'swal2-icon-hide'\n },\n customClass: {},\n target: 'body',\n color: undefined,\n backdrop: true,\n heightAuto: true,\n allowOutsideClick: true,\n allowEscapeKey: true,\n allowEnterKey: true,\n stopKeydownPropagation: true,\n keydownListenerCapture: false,\n showConfirmButton: true,\n showDenyButton: false,\n showCancelButton: false,\n preConfirm: undefined,\n preDeny: undefined,\n confirmButtonText: 'OK',\n confirmButtonAriaLabel: '',\n confirmButtonColor: undefined,\n denyButtonText: 'No',\n denyButtonAriaLabel: '',\n denyButtonColor: undefined,\n cancelButtonText: 'Cancel',\n cancelButtonAriaLabel: '',\n cancelButtonColor: undefined,\n buttonsStyling: true,\n reverseButtons: false,\n focusConfirm: true,\n focusDeny: false,\n focusCancel: false,\n returnFocus: true,\n showCloseButton: false,\n closeButtonHtml: '&times;',\n closeButtonAriaLabel: 'Close this dialog',\n loaderHtml: '',\n showLoaderOnConfirm: false,\n showLoaderOnDeny: false,\n imageUrl: undefined,\n imageWidth: undefined,\n imageHeight: undefined,\n imageAlt: '',\n timer: undefined,\n timerProgressBar: false,\n width: undefined,\n padding: undefined,\n background: undefined,\n input: undefined,\n inputPlaceholder: '',\n inputLabel: '',\n inputValue: '',\n inputOptions: {},\n inputAutoFocus: true,\n inputAutoTrim: true,\n inputAttributes: {},\n inputValidator: undefined,\n returnInputValueOnDeny: false,\n validationMessage: undefined,\n grow: false,\n position: 'center',\n progressSteps: [],\n currentProgressStep: undefined,\n progressStepsDistance: undefined,\n willOpen: undefined,\n didOpen: undefined,\n didRender: undefined,\n willClose: undefined,\n didClose: undefined,\n didDestroy: undefined,\n scrollbarPadding: true,\n topLayer: false\n };\n const updatableParams = ['allowEscapeKey', 'allowOutsideClick', 'background', 'buttonsStyling', 'cancelButtonAriaLabel', 'cancelButtonColor', 'cancelButtonText', 'closeButtonAriaLabel', 'closeButtonHtml', 'color', 'confirmButtonAriaLabel', 'confirmButtonColor', 'confirmButtonText', 'currentProgressStep', 'customClass', 'denyButtonAriaLabel', 'denyButtonColor', 'denyButtonText', 'didClose', 'didDestroy', 'draggable', 'footer', 'hideClass', 'html', 'icon', 'iconColor', 'iconHtml', 'imageAlt', 'imageHeight', 'imageUrl', 'imageWidth', 'preConfirm', 'preDeny', 'progressSteps', 'returnFocus', 'reverseButtons', 'showCancelButton', 'showCloseButton', 'showConfirmButton', 'showDenyButton', 'text', 'title', 'titleText', 'theme', 'willClose'];\n\n /** @type {Record<string, string | undefined>} */\n const deprecatedParams = {\n allowEnterKey: undefined\n };\n const toastIncompatibleParams = ['allowOutsideClick', 'allowEnterKey', 'backdrop', 'draggable', 'focusConfirm', 'focusDeny', 'focusCancel', 'returnFocus', 'heightAuto', 'keydownListenerCapture'];\n\n /**\n * Is valid parameter\n *\n * @param {string} paramName\n * @returns {boolean}\n */\n const isValidParameter = paramName => {\n return Object.prototype.hasOwnProperty.call(defaultParams, paramName);\n };\n\n /**\n * Is valid parameter for Swal.update() method\n *\n * @param {string} paramName\n * @returns {boolean}\n */\n const isUpdatableParameter = paramName => {\n return updatableParams.indexOf(paramName) !== -1;\n };\n\n /**\n * Is deprecated parameter\n *\n * @param {string} paramName\n * @returns {string | undefined}\n */\n const isDeprecatedParameter = paramName => {\n return deprecatedParams[paramName];\n };\n\n /**\n * @param {string} param\n */\n const checkIfParamIsValid = param => {\n if (!isValidParameter(param)) {\n warn(`Unknown parameter \"${param}\"`);\n }\n };\n\n /**\n * @param {string} param\n */\n const checkIfToastParamIsValid = param => {\n if (toastIncompatibleParams.includes(param)) {\n warn(`The parameter \"${param}\" is incompatible with toasts`);\n }\n };\n\n /**\n * @param {string} param\n */\n const checkIfParamIsDeprecated = param => {\n const isDeprecated = isDeprecatedParameter(param);\n if (isDeprecated) {\n warnAboutDeprecation(param, isDeprecated);\n }\n };\n\n /**\n * Show relevant warnings for given params\n *\n * @param {SweetAlertOptions} params\n */\n const showWarningsForParams = params => {\n if (params.backdrop === false && params.allowOutsideClick) {\n warn('\"allowOutsideClick\" parameter requires `backdrop` parameter to be set to `true`');\n }\n if (params.theme && !['light', 'dark', 'auto', 'minimal', 'borderless', 'embed-iframe', 'bulma', 'bulma-light', 'bulma-dark'].includes(params.theme)) {\n warn(`Invalid theme \"${params.theme}\"`);\n }\n for (const param in params) {\n checkIfParamIsValid(param);\n if (params.toast) {\n checkIfToastParamIsValid(param);\n }\n checkIfParamIsDeprecated(param);\n }\n };\n\n /**\n * Updates popup parameters.\n *\n * @param {SweetAlertOptions} params\n */\n function update(params) {\n const container = getContainer();\n const popup = getPopup();\n const innerParams = privateProps.innerParams.get(this);\n if (!popup || hasClass(popup, innerParams.hideClass.popup)) {\n warn(`You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup.`);\n return;\n }\n const validUpdatableParams = filterValidParams(params);\n const updatedParams = Object.assign({}, innerParams, validUpdatableParams);\n showWarningsForParams(updatedParams);\n container.dataset['swal2Theme'] = updatedParams.theme;\n render(this, updatedParams);\n privateProps.innerParams.set(this, updatedParams);\n Object.defineProperties(this, {\n params: {\n value: Object.assign({}, this.params, params),\n writable: false,\n enumerable: true\n }\n });\n }\n\n /**\n * @param {SweetAlertOptions} params\n * @returns {SweetAlertOptions}\n */\n const filterValidParams = params => {\n const validUpdatableParams = {};\n Object.keys(params).forEach(param => {\n if (isUpdatableParameter(param)) {\n validUpdatableParams[param] = params[param];\n } else {\n warn(`Invalid parameter to update: ${param}`);\n }\n });\n return validUpdatableParams;\n };\n\n /**\n * Dispose the current SweetAlert2 instance\n */\n function _destroy() {\n const domCache = privateProps.domCache.get(this);\n const innerParams = privateProps.innerParams.get(this);\n if (!innerParams) {\n disposeWeakMaps(this); // The WeakMaps might have been partly destroyed, we must recall it to dispose any remaining WeakMaps #2335\n return; // This instance has already been destroyed\n }\n\n // Check if there is another Swal closing\n if (domCache.popup && globalState.swalCloseEventFinishedCallback) {\n globalState.swalCloseEventFinishedCallback();\n delete globalState.swalCloseEventFinishedCallback;\n }\n if (typeof innerParams.didDestroy === 'function') {\n innerParams.didDestroy();\n }\n globalState.eventEmitter.emit('didDestroy');\n disposeSwal(this);\n }\n\n /**\n * @param {SweetAlert} instance\n */\n const disposeSwal = instance => {\n disposeWeakMaps(instance);\n // Unset this.params so GC will dispose it (#1569)\n delete instance.params;\n // Unset globalState props so GC will dispose globalState (#1569)\n delete globalState.keydownHandler;\n delete globalState.keydownTarget;\n // Unset currentInstance\n delete globalState.currentInstance;\n };\n\n /**\n * @param {SweetAlert} instance\n */\n const disposeWeakMaps = instance => {\n // If the current instance is awaiting a promise result, we keep the privateMethods to call them once the promise result is retrieved #2335\n if (instance.isAwaitingPromise) {\n unsetWeakMaps(privateProps, instance);\n instance.isAwaitingPromise = true;\n } else {\n unsetWeakMaps(privateMethods, instance);\n unsetWeakMaps(privateProps, instance);\n delete instance.isAwaitingPromise;\n // Unset instance methods\n delete instance.disableButtons;\n delete instance.enableButtons;\n delete instance.getInput;\n delete instance.disableInput;\n delete instance.enableInput;\n delete instance.hideLoading;\n delete instance.disableLoading;\n delete instance.showValidationMessage;\n delete instance.resetValidationMessage;\n delete instance.close;\n delete instance.closePopup;\n delete instance.closeModal;\n delete instance.closeToast;\n delete instance.rejectPromise;\n delete instance.update;\n delete instance._destroy;\n }\n };\n\n /**\n * @param {object} obj\n * @param {SweetAlert} instance\n */\n const unsetWeakMaps = (obj, instance) => {\n for (const i in obj) {\n obj[i].delete(instance);\n }\n };\n\n var instanceMethods = /*#__PURE__*/Object.freeze({\n __proto__: null,\n _destroy: _destroy,\n close: close,\n closeModal: close,\n closePopup: close,\n closeToast: close,\n disableButtons: disableButtons,\n disableInput: disableInput,\n disableLoading: hideLoading,\n enableButtons: enableButtons,\n enableInput: enableInput,\n getInput: getInput,\n handleAwaitingPromise: handleAwaitingPromise,\n hideLoading: hideLoading,\n rejectPromise: rejectPromise,\n resetValidationMessage: resetValidationMessage,\n showValidationMessage: showValidationMessage,\n update: update\n });\n\n /**\n * @param {SweetAlertOptions} innerParams\n * @param {DomCache} domCache\n * @param {Function} dismissWith\n */\n const handlePopupClick = (innerParams, domCache, dismissWith) => {\n if (innerParams.toast) {\n handleToastClick(innerParams, domCache, dismissWith);\n } else {\n // Ignore click events that had mousedown on the popup but mouseup on the container\n // This can happen when the user drags a slider\n handleModalMousedown(domCache);\n\n // Ignore click events that had mousedown on the container but mouseup on the popup\n handleContainerMousedown(domCache);\n handleModalClick(innerParams, domCache, dismissWith);\n }\n };\n\n /**\n * @param {SweetAlertOptions} innerParams\n * @param {DomCache} domCache\n * @param {Function} dismissWith\n */\n const handleToastClick = (innerParams, domCache, dismissWith) => {\n // Closing toast by internal click\n domCache.popup.onclick = () => {\n if (innerParams && (isAnyButtonShown(innerParams) || innerParams.timer || innerParams.input)) {\n return;\n }\n dismissWith(DismissReason.close);\n };\n };\n\n /**\n * @param {SweetAlertOptions} innerParams\n * @returns {boolean}\n */\n const isAnyButtonShown = innerParams => {\n return !!(innerParams.showConfirmButton || innerParams.showDenyButton || innerParams.showCancelButton || innerParams.showCloseButton);\n };\n let ignoreOutsideClick = false;\n\n /**\n * @param {DomCache} domCache\n */\n const handleModalMousedown = domCache => {\n domCache.popup.onmousedown = () => {\n domCache.container.onmouseup = function (e) {\n domCache.container.onmouseup = () => {};\n // We only check if the mouseup target is the container because usually it doesn't\n // have any other direct children aside of the popup\n if (e.target === domCache.container) {\n ignoreOutsideClick = true;\n }\n };\n };\n };\n\n /**\n * @param {DomCache} domCache\n */\n const handleContainerMousedown = domCache => {\n domCache.container.onmousedown = e => {\n // prevent the modal text from being selected on double click on the container (allowOutsideClick: false)\n if (e.target === domCache.container) {\n e.preventDefault();\n }\n domCache.popup.onmouseup = function (e) {\n domCache.popup.onmouseup = () => {};\n // We also need to check if the mouseup target is a child of the popup\n if (e.target === domCache.popup || e.target instanceof HTMLElement && domCache.popup.contains(e.target)) {\n ignoreOutsideClick = true;\n }\n };\n };\n };\n\n /**\n * @param {SweetAlertOptions} innerParams\n * @param {DomCache} domCache\n * @param {Function} dismissWith\n */\n const handleModalClick = (innerParams, domCache, dismissWith) => {\n domCache.container.onclick = e => {\n if (ignoreOutsideClick) {\n ignoreOutsideClick = false;\n return;\n }\n if (e.target === domCache.container && callIfFunction(innerParams.allowOutsideClick)) {\n dismissWith(DismissReason.backdrop);\n }\n };\n };\n\n const isJqueryElement = elem => typeof elem === 'object' && elem.jquery;\n const isElement = elem => elem instanceof Element || isJqueryElement(elem);\n const argsToParams = args => {\n const params = {};\n if (typeof args[0] === 'object' && !isElement(args[0])) {\n Object.assign(params, args[0]);\n } else {\n ['title', 'html', 'icon'].forEach((name, index) => {\n const arg = args[index];\n if (typeof arg === 'string' || isElement(arg)) {\n params[name] = arg;\n } else if (arg !== undefined) {\n error(`Unexpected type of ${name}! Expected \"string\" or \"Element\", got ${typeof arg}`);\n }\n });\n }\n return params;\n };\n\n /**\n * Main method to create a new SweetAlert2 popup\n *\n * @param {...SweetAlertOptions} args\n * @returns {Promise<SweetAlertResult>}\n */\n function fire(...args) {\n return new this(...args);\n }\n\n /**\n * Returns an extended version of `Swal` containing `params` as defaults.\n * Useful for reusing Swal configuration.\n *\n * For example:\n *\n * Before:\n * const textPromptOptions = { input: 'text', showCancelButton: true }\n * const {value: firstName} = await Swal.fire({ ...textPromptOptions, title: 'What is your first name?' })\n * const {value: lastName} = await Swal.fire({ ...textPromptOptions, title: 'What is your last name?' })\n *\n * After:\n * const TextPrompt = Swal.mixin({ input: 'text', showCancelButton: true })\n * const {value: firstName} = await TextPrompt('What is your first name?')\n * const {value: lastName} = await TextPrompt('What is your last name?')\n *\n * @param {SweetAlertOptions} mixinParams\n * @returns {SweetAlert}\n */\n function mixin(mixinParams) {\n class MixinSwal extends this {\n _main(params, priorityMixinParams) {\n return super._main(params, Object.assign({}, mixinParams, priorityMixinParams));\n }\n }\n // @ts-ignore\n return MixinSwal;\n }\n\n /**\n * If `timer` parameter is set, returns number of milliseconds of timer remained.\n * Otherwise, returns undefined.\n *\n * @returns {number | undefined}\n */\n const getTimerLeft = () => {\n return globalState.timeout && globalState.timeout.getTimerLeft();\n };\n\n /**\n * Stop timer. Returns number of milliseconds of timer remained.\n * If `timer` parameter isn't set, returns undefined.\n *\n * @returns {number | undefined}\n */\n const stopTimer = () => {\n if (globalState.timeout) {\n stopTimerProgressBar();\n return globalState.timeout.stop();\n }\n };\n\n /**\n * Resume timer. Returns number of milliseconds of timer remained.\n * If `timer` parameter isn't set, returns undefined.\n *\n * @returns {number | undefined}\n */\n const resumeTimer = () => {\n if (globalState.timeout) {\n const remaining = globalState.timeout.start();\n animateTimerProgressBar(remaining);\n return remaining;\n }\n };\n\n /**\n * Resume timer. Returns number of milliseconds of timer remained.\n * If `timer` parameter isn't set, returns undefined.\n *\n * @returns {number | undefined}\n */\n const toggleTimer = () => {\n const timer = globalState.timeout;\n return timer && (timer.running ? stopTimer() : resumeTimer());\n };\n\n /**\n * Increase timer. Returns number of milliseconds of an updated timer.\n * If `timer` parameter isn't set, returns undefined.\n *\n * @param {number} ms\n * @returns {number | undefined}\n */\n const increaseTimer = ms => {\n if (globalState.timeout) {\n const remaining = globalState.timeout.increase(ms);\n animateTimerProgressBar(remaining, true);\n return remaining;\n }\n };\n\n /**\n * Check if timer is running. Returns true if timer is running\n * or false if timer is paused or stopped.\n * If `timer` parameter isn't set, returns undefined\n *\n * @returns {boolean}\n */\n const isTimerRunning = () => {\n return !!(globalState.timeout && globalState.timeout.isRunning());\n };\n\n let bodyClickListenerAdded = false;\n const clickHandlers = {};\n\n /**\n * @param {string} attr\n */\n function bindClickHandler(attr = 'data-swal-template') {\n clickHandlers[attr] = this;\n if (!bodyClickListenerAdded) {\n document.body.addEventListener('click', bodyClickListener);\n bodyClickListenerAdded = true;\n }\n }\n const bodyClickListener = event => {\n for (let el = event.target; el && el !== document; el = el.parentNode) {\n for (const attr in clickHandlers) {\n const template = el.getAttribute(attr);\n if (template) {\n clickHandlers[attr].fire({\n template\n });\n return;\n }\n }\n }\n };\n\n // Source: https://gist.github.com/mudge/5830382?permalink_comment_id=2691957#gistcomment-2691957\n\n class EventEmitter {\n constructor() {\n /** @type {Events} */\n this.events = {};\n }\n\n /**\n * @param {string} eventName\n * @returns {EventHandlers}\n */\n _getHandlersByEventName(eventName) {\n if (typeof this.events[eventName] === 'undefined') {\n // not Set because we need to keep the FIFO order\n // https://github.com/sweetalert2/sweetalert2/pull/2763#discussion_r1748990334\n this.events[eventName] = [];\n }\n return this.events[eventName];\n }\n\n /**\n * @param {string} eventName\n * @param {EventHandler} eventHandler\n */\n on(eventName, eventHandler) {\n const currentHandlers = this._getHandlersByEventName(eventName);\n if (!currentHandlers.includes(eventHandler)) {\n currentHandlers.push(eventHandler);\n }\n }\n\n /**\n * @param {string} eventName\n * @param {EventHandler} eventHandler\n */\n once(eventName, eventHandler) {\n /**\n * @param {Array} args\n */\n const onceFn = (...args) => {\n this.removeListener(eventName, onceFn);\n eventHandler.apply(this, args);\n };\n this.on(eventName, onceFn);\n }\n\n /**\n * @param {string} eventName\n * @param {Array} args\n */\n emit(eventName, ...args) {\n this._getHandlersByEventName(eventName).forEach(\n /**\n * @param {EventHandler} eventHandler\n */\n eventHandler => {\n try {\n eventHandler.apply(this, args);\n } catch (error) {\n console.error(error);\n }\n });\n }\n\n /**\n * @param {string} eventName\n * @param {EventHandler} eventHandler\n */\n removeListener(eventName, eventHandler) {\n const currentHandlers = this._getHandlersByEventName(eventName);\n const index = currentHandlers.indexOf(eventHandler);\n if (index > -1) {\n currentHandlers.splice(index, 1);\n }\n }\n\n /**\n * @param {string} eventName\n */\n removeAllListeners(eventName) {\n if (this.events[eventName] !== undefined) {\n // https://github.com/sweetalert2/sweetalert2/pull/2763#discussion_r1749239222\n this.events[eventName].length = 0;\n }\n }\n reset() {\n this.events = {};\n }\n }\n\n globalState.eventEmitter = new EventEmitter();\n\n /**\n * @param {string} eventName\n * @param {EventHandler} eventHandler\n */\n const on = (eventName, eventHandler) => {\n globalState.eventEmitter.on(eventName, eventHandler);\n };\n\n /**\n * @param {string} eventName\n * @param {EventHandler} eventHandler\n */\n const once = (eventName, eventHandler) => {\n globalState.eventEmitter.once(eventName, eventHandler);\n };\n\n /**\n * @param {string} [eventName]\n * @param {EventHandler} [eventHandler]\n */\n const off = (eventName, eventHandler) => {\n // Remove all handlers for all events\n if (!eventName) {\n globalState.eventEmitter.reset();\n return;\n }\n if (eventHandler) {\n // Remove a specific handler\n globalState.eventEmitter.removeListener(eventName, eventHandler);\n } else {\n // Remove all handlers for a specific event\n globalState.eventEmitter.removeAllListeners(eventName);\n }\n };\n\n var staticMethods = /*#__PURE__*/Object.freeze({\n __proto__: null,\n argsToParams: argsToParams,\n bindClickHandler: bindClickHandler,\n clickCancel: clickCancel,\n clickConfirm: clickConfirm,\n clickDeny: clickDeny,\n enableLoading: showLoading,\n fire: fire,\n getActions: getActions,\n getCancelButton: getCancelButton,\n getCloseButton: getCloseButton,\n getConfirmButton: getConfirmButton,\n getContainer: getContainer,\n getDenyButton: getDenyButton,\n getFocusableElements: getFocusableElements,\n getFooter: getFooter,\n getHtmlContainer: getHtmlContainer,\n getIcon: getIcon,\n getIconContent: getIconContent,\n getImage: getImage,\n getInputLabel: getInputLabel,\n getLoader: getLoader,\n getPopup: getPopup,\n getProgressSteps: getProgressSteps,\n getTimerLeft: getTimerLeft,\n getTimerProgressBar: getTimerProgressBar,\n getTitle: getTitle,\n getValidationMessage: getValidationMessage,\n increaseTimer: increaseTimer,\n isDeprecatedParameter: isDeprecatedParameter,\n isLoading: isLoading,\n isTimerRunning: isTimerRunning,\n isUpdatableParameter: isUpdatableParameter,\n isValidParameter: isValidParameter,\n isVisible: isVisible,\n mixin: mixin,\n off: off,\n on: on,\n once: once,\n resumeTimer: resumeTimer,\n showLoading: showLoading,\n stopTimer: stopTimer,\n toggleTimer: toggleTimer\n });\n\n class Timer {\n /**\n * @param {Function} callback\n * @param {number} delay\n */\n constructor(callback, delay) {\n this.callback = callback;\n this.remaining = delay;\n this.running = false;\n this.start();\n }\n\n /**\n * @returns {number}\n */\n start() {\n if (!this.running) {\n this.running = true;\n this.started = new Date();\n this.id = setTimeout(this.callback, this.remaining);\n }\n return this.remaining;\n }\n\n /**\n * @returns {number}\n */\n stop() {\n if (this.started && this.running) {\n this.running = false;\n clearTimeout(this.id);\n this.remaining -= new Date().getTime() - this.started.getTime();\n }\n return this.remaining;\n }\n\n /**\n * @param {number} n\n * @returns {number}\n */\n increase(n) {\n const running = this.running;\n if (running) {\n this.stop();\n }\n this.remaining += n;\n if (running) {\n this.start();\n }\n return this.remaining;\n }\n\n /**\n * @returns {number}\n */\n getTimerLeft() {\n if (this.running) {\n this.stop();\n this.start();\n }\n return this.remaining;\n }\n\n /**\n * @returns {boolean}\n */\n isRunning() {\n return this.running;\n }\n }\n\n const swalStringParams = ['swal-title', 'swal-html', 'swal-footer'];\n\n /**\n * @param {SweetAlertOptions} params\n * @returns {SweetAlertOptions}\n */\n const getTemplateParams = params => {\n const template = typeof params.template === 'string' ? (/** @type {HTMLTemplateElement} */document.querySelector(params.template)) : params.template;\n if (!template) {\n return {};\n }\n /** @type {DocumentFragment} */\n const templateContent = template.content;\n showWarningsForElements(templateContent);\n const result = Object.assign(getSwalParams(templateContent), getSwalFunctionParams(templateContent), getSwalButtons(templateContent), getSwalImage(templateContent), getSwalIcon(templateContent), getSwalInput(templateContent), getSwalStringParams(templateContent, swalStringParams));\n return result;\n };\n\n /**\n * @param {DocumentFragment} templateContent\n * @returns {Record<string, any>}\n */\n const getSwalParams = templateContent => {\n /** @type {Record<string, any>} */\n const result = {};\n /** @type {HTMLElement[]} */\n const swalParams = Array.from(templateContent.querySelectorAll('swal-param'));\n swalParams.forEach(param => {\n showWarningsForAttributes(param, ['name', 'value']);\n const paramName = /** @type {keyof SweetAlertOptions} */param.getAttribute('name');\n const value = param.getAttribute('value');\n if (!paramName || !value) {\n return;\n }\n if (typeof defaultParams[paramName] === 'boolean') {\n result[paramName] = value !== 'false';\n } else if (typeof defaultParams[paramName] === 'object') {\n result[paramName] = JSON.parse(value);\n } else {\n result[paramName] = value;\n }\n });\n return result;\n };\n\n /**\n * @param {DocumentFragment} templateContent\n * @returns {Record<string, any>}\n */\n const getSwalFunctionParams = templateContent => {\n /** @type {Record<string, any>} */\n const result = {};\n /** @type {HTMLElement[]} */\n const swalFunctions = Array.from(templateContent.querySelectorAll('swal-function-param'));\n swalFunctions.forEach(param => {\n const paramName = /** @type {keyof SweetAlertOptions} */param.getAttribute('name');\n const value = param.getAttribute('value');\n if (!paramName || !value) {\n return;\n }\n result[paramName] = new Function(`return ${value}`)();\n });\n return result;\n };\n\n /**\n * @param {DocumentFragment} templateContent\n * @returns {Record<string, any>}\n */\n const getSwalButtons = templateContent => {\n /** @type {Record<string, any>} */\n const result = {};\n /** @type {HTMLElement[]} */\n const swalButtons = Array.from(templateContent.querySelectorAll('swal-button'));\n swalButtons.forEach(button => {\n showWarningsForAttributes(button, ['type', 'color', 'aria-label']);\n const type = button.getAttribute('type');\n if (!type || !['confirm', 'cancel', 'deny'].includes(type)) {\n return;\n }\n result[`${type}ButtonText`] = button.innerHTML;\n result[`show${capitalizeFirstLetter(type)}Button`] = true;\n if (button.hasAttribute('color')) {\n result[`${type}ButtonColor`] = button.getAttribute('color');\n }\n if (button.hasAttribute('aria-label')) {\n result[`${type}ButtonAriaLabel`] = button.getAttribute('aria-label');\n }\n });\n return result;\n };\n\n /**\n * @param {DocumentFragment} templateContent\n * @returns {Pick<SweetAlertOptions, 'imageUrl' | 'imageWidth' | 'imageHeight' | 'imageAlt'>}\n */\n const getSwalImage = templateContent => {\n const result = {};\n /** @type {HTMLElement | null} */\n const image = templateContent.querySelector('swal-image');\n if (image) {\n showWarningsForAttributes(image, ['src', 'width', 'height', 'alt']);\n if (image.hasAttribute('src')) {\n result.imageUrl = image.getAttribute('src') || undefined;\n }\n if (image.hasAttribute('width')) {\n result.imageWidth = image.getAttribute('width') || undefined;\n }\n if (image.hasAttribute('height')) {\n result.imageHeight = image.getAttribute('height') || undefined;\n }\n if (image.hasAttribute('alt')) {\n result.imageAlt = image.getAttribute('alt') || undefined;\n }\n }\n return result;\n };\n\n /**\n * @param {DocumentFragment} templateContent\n * @returns {Record<string, any>}\n */\n const getSwalIcon = templateContent => {\n const result = {};\n /** @type {HTMLElement | null} */\n const icon = templateContent.querySelector('swal-icon');\n if (icon) {\n showWarningsForAttributes(icon, ['type', 'color']);\n if (icon.hasAttribute('type')) {\n result.icon = icon.getAttribute('type');\n }\n if (icon.hasAttribute('color')) {\n result.iconColor = icon.getAttribute('color');\n }\n result.iconHtml = icon.innerHTML;\n }\n return result;\n };\n\n /**\n * @param {DocumentFragment} templateContent\n * @returns {Record<string, any>}\n */\n const getSwalInput = templateContent => {\n /** @type {Record<string, any>} */\n const result = {};\n /** @type {HTMLElement | null} */\n const input = templateContent.querySelector('swal-input');\n if (input) {\n showWarningsForAttributes(input, ['type', 'label', 'placeholder', 'value']);\n result.input = input.getAttribute('type') || 'text';\n if (input.hasAttribute('label')) {\n result.inputLabel = input.getAttribute('label');\n }\n if (input.hasAttribute('placeholder')) {\n result.inputPlaceholder = input.getAttribute('placeholder');\n }\n if (input.hasAttribute('value')) {\n result.inputValue = input.getAttribute('value');\n }\n }\n /** @type {HTMLElement[]} */\n const inputOptions = Array.from(templateContent.querySelectorAll('swal-input-option'));\n if (inputOptions.length) {\n result.inputOptions = {};\n inputOptions.forEach(option => {\n showWarningsForAttributes(option, ['value']);\n const optionValue = option.getAttribute('value');\n if (!optionValue) {\n return;\n }\n const optionName = option.innerHTML;\n result.inputOptions[optionValue] = optionName;\n });\n }\n return result;\n };\n\n /**\n * @param {DocumentFragment} templateContent\n * @param {string[]} paramNames\n * @returns {Record<string, any>}\n */\n const getSwalStringParams = (templateContent, paramNames) => {\n /** @type {Record<string, any>} */\n const result = {};\n for (const i in paramNames) {\n const paramName = paramNames[i];\n /** @type {HTMLElement | null} */\n const tag = templateContent.querySelector(paramName);\n if (tag) {\n showWarningsForAttributes(tag, []);\n result[paramName.replace(/^swal-/, '')] = tag.innerHTML.trim();\n }\n }\n return result;\n };\n\n /**\n * @param {DocumentFragment} templateContent\n */\n const showWarningsForElements = templateContent => {\n const allowedElements = swalStringParams.concat(['swal-param', 'swal-function-param', 'swal-button', 'swal-image', 'swal-icon', 'swal-input', 'swal-input-option']);\n Array.from(templateContent.children).forEach(el => {\n const tagName = el.tagName.toLowerCase();\n if (!allowedElements.includes(tagName)) {\n warn(`Unrecognized element <${tagName}>`);\n }\n });\n };\n\n /**\n * @param {HTMLElement} el\n * @param {string[]} allowedAttributes\n */\n const showWarningsForAttributes = (el, allowedAttributes) => {\n Array.from(el.attributes).forEach(attribute => {\n if (allowedAttributes.indexOf(attribute.name) === -1) {\n warn([`Unrecognized attribute \"${attribute.name}\" on <${el.tagName.toLowerCase()}>.`, `${allowedAttributes.length ? `Allowed attributes are: ${allowedAttributes.join(', ')}` : 'To set the value, use HTML within the element.'}`]);\n }\n });\n };\n\n const SHOW_CLASS_TIMEOUT = 10;\n\n /**\n * Open popup, add necessary classes and styles, fix scrollbar\n *\n * @param {SweetAlertOptions} params\n */\n const openPopup = params => {\n const container = getContainer();\n const popup = getPopup();\n if (typeof params.willOpen === 'function') {\n params.willOpen(popup);\n }\n globalState.eventEmitter.emit('willOpen', popup);\n const bodyStyles = window.getComputedStyle(document.body);\n const initialBodyOverflow = bodyStyles.overflowY;\n addClasses(container, popup, params);\n\n // scrolling is 'hidden' until animation is done, after that 'auto'\n setTimeout(() => {\n setScrollingVisibility(container, popup);\n }, SHOW_CLASS_TIMEOUT);\n if (isModal()) {\n fixScrollContainer(container, params.scrollbarPadding, initialBodyOverflow);\n setAriaHidden();\n }\n if (!isToast() && !globalState.previousActiveElement) {\n globalState.previousActiveElement = document.activeElement;\n }\n if (typeof params.didOpen === 'function') {\n setTimeout(() => params.didOpen(popup));\n }\n globalState.eventEmitter.emit('didOpen', popup);\n removeClass(container, swalClasses['no-transition']);\n };\n\n /**\n * @param {AnimationEvent} event\n */\n const swalOpenAnimationFinished = event => {\n const popup = getPopup();\n if (event.target !== popup) {\n return;\n }\n const container = getContainer();\n popup.removeEventListener('animationend', swalOpenAnimationFinished);\n popup.removeEventListener('transitionend', swalOpenAnimationFinished);\n container.style.overflowY = 'auto';\n };\n\n /**\n * @param {HTMLElement} container\n * @param {HTMLElement} popup\n */\n const setScrollingVisibility = (container, popup) => {\n if (hasCssAnimation(popup)) {\n container.style.overflowY = 'hidden';\n popup.addEventListener('animationend', swalOpenAnimationFinished);\n popup.addEventListener('transitionend', swalOpenAnimationFinished);\n } else {\n container.style.overflowY = 'auto';\n }\n };\n\n /**\n * @param {HTMLElement} container\n * @param {boolean} scrollbarPadding\n * @param {string} initialBodyOverflow\n */\n const fixScrollContainer = (container, scrollbarPadding, initialBodyOverflow) => {\n iOSfix();\n if (scrollbarPadding && initialBodyOverflow !== 'hidden') {\n replaceScrollbarWithPadding(initialBodyOverflow);\n }\n\n // sweetalert2/issues/1247\n setTimeout(() => {\n container.scrollTop = 0;\n });\n };\n\n /**\n * @param {HTMLElement} container\n * @param {HTMLElement} popup\n * @param {SweetAlertOptions} params\n */\n const addClasses = (container, popup, params) => {\n addClass(container, params.showClass.backdrop);\n if (params.animation) {\n // this workaround with opacity is needed for https://github.com/sweetalert2/sweetalert2/issues/2059\n popup.style.setProperty('opacity', '0', 'important');\n show(popup, 'grid');\n setTimeout(() => {\n // Animate popup right after showing it\n addClass(popup, params.showClass.popup);\n // and remove the opacity workaround\n popup.style.removeProperty('opacity');\n }, SHOW_CLASS_TIMEOUT); // 10ms in order to fix #2062\n } else {\n show(popup, 'grid');\n }\n addClass([document.documentElement, document.body], swalClasses.shown);\n if (params.heightAuto && params.backdrop && !params.toast) {\n addClass([document.documentElement, document.body], swalClasses['height-auto']);\n }\n };\n\n var defaultInputValidators = {\n /**\n * @param {string} string\n * @param {string} [validationMessage]\n * @returns {Promise<string | void>}\n */\n email: (string, validationMessage) => {\n return /^[a-zA-Z0-9.+_'-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z0-9-]+$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid email address');\n },\n /**\n * @param {string} string\n * @param {string} [validationMessage]\n * @returns {Promise<string | void>}\n */\n url: (string, validationMessage) => {\n // taken from https://stackoverflow.com/a/3809435 with a small change from #1306 and #2013\n return /^https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-z]{2,63}\\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid URL');\n }\n };\n\n /**\n * @param {SweetAlertOptions} params\n */\n function setDefaultInputValidators(params) {\n // Use default `inputValidator` for supported input types if not provided\n if (params.inputValidator) {\n return;\n }\n if (params.input === 'email') {\n params.inputValidator = defaultInputValidators['email'];\n }\n if (params.input === 'url') {\n params.inputValidator = defaultInputValidators['url'];\n }\n }\n\n /**\n * @param {SweetAlertOptions} params\n */\n function validateCustomTargetElement(params) {\n // Determine if the custom target element is valid\n if (!params.target || typeof params.target === 'string' && !document.querySelector(params.target) || typeof params.target !== 'string' && !params.target.appendChild) {\n warn('Target parameter is not valid, defaulting to \"body\"');\n params.target = 'body';\n }\n }\n\n /**\n * Set type, text and actions on popup\n *\n * @param {SweetAlertOptions} params\n */\n function setParameters(params) {\n setDefaultInputValidators(params);\n\n // showLoaderOnConfirm && preConfirm\n if (params.showLoaderOnConfirm && !params.preConfirm) {\n warn('showLoaderOnConfirm is set to true, but preConfirm is not defined.\\n' + 'showLoaderOnConfirm should be used together with preConfirm, see usage example:\\n' + 'https://sweetalert2.github.io/#ajax-request');\n }\n validateCustomTargetElement(params);\n\n // Replace newlines with <br> in title\n if (typeof params.title === 'string') {\n params.title = params.title.split('\\n').join('<br />');\n }\n init(params);\n }\n\n /** @type {SweetAlert} */\n let currentInstance;\n var _promise = /*#__PURE__*/new WeakMap();\n class SweetAlert {\n /**\n * @param {...any} args\n * @this {SweetAlert}\n */\n constructor(...args) {\n /**\n * @type {Promise<SweetAlertResult>}\n */\n _classPrivateFieldInitSpec(this, _promise, void 0);\n // Prevent run in Node env\n if (typeof window === 'undefined') {\n return;\n }\n currentInstance = this;\n\n // @ts-ignore\n const outerParams = Object.freeze(this.constructor.argsToParams(args));\n\n /** @type {Readonly<SweetAlertOptions>} */\n this.params = outerParams;\n\n /** @type {boolean} */\n this.isAwaitingPromise = false;\n _classPrivateFieldSet2(_promise, this, this._main(currentInstance.params));\n }\n _main(userParams, mixinParams = {}) {\n showWarningsForParams(Object.assign({}, mixinParams, userParams));\n if (globalState.currentInstance) {\n const swalPromiseResolve = privateMethods.swalPromiseResolve.get(globalState.currentInstance);\n const {\n isAwaitingPromise\n } = globalState.currentInstance;\n globalState.currentInstance._destroy();\n if (!isAwaitingPromise) {\n swalPromiseResolve({\n isDismissed: true\n });\n }\n if (isModal()) {\n unsetAriaHidden();\n }\n }\n globalState.currentInstance = currentInstance;\n const innerParams = prepareParams(userParams, mixinParams);\n setParameters(innerParams);\n Object.freeze(innerParams);\n\n // clear the previous timer\n if (globalState.timeout) {\n globalState.timeout.stop();\n delete globalState.timeout;\n }\n\n // clear the restore focus timeout\n clearTimeout(globalState.restoreFocusTimeout);\n const domCache = populateDomCache(currentInstance);\n render(currentInstance, innerParams);\n privateProps.innerParams.set(currentInstance, innerParams);\n return swalPromise(currentInstance, domCache, innerParams);\n }\n\n // `catch` cannot be the name of a module export, so we define our thenable methods here instead\n then(onFulfilled) {\n return _classPrivateFieldGet2(_promise, this).then(onFulfilled);\n }\n finally(onFinally) {\n return _classPrivateFieldGet2(_promise, this).finally(onFinally);\n }\n }\n\n /**\n * @param {SweetAlert} instance\n * @param {DomCache} domCache\n * @param {SweetAlertOptions} innerParams\n * @returns {Promise}\n */\n const swalPromise = (instance, domCache, innerParams) => {\n return new Promise((resolve, reject) => {\n // functions to handle all closings/dismissals\n /**\n * @param {DismissReason} dismiss\n */\n const dismissWith = dismiss => {\n instance.close({\n isDismissed: true,\n dismiss\n });\n };\n privateMethods.swalPromiseResolve.set(instance, resolve);\n privateMethods.swalPromiseReject.set(instance, reject);\n domCache.confirmButton.onclick = () => {\n handleConfirmButtonClick(instance);\n };\n domCache.denyButton.onclick = () => {\n handleDenyButtonClick(instance);\n };\n domCache.cancelButton.onclick = () => {\n handleCancelButtonClick(instance, dismissWith);\n };\n domCache.closeButton.onclick = () => {\n dismissWith(DismissReason.close);\n };\n handlePopupClick(innerParams, domCache, dismissWith);\n addKeydownHandler(globalState, innerParams, dismissWith);\n handleInputOptionsAndValue(instance, innerParams);\n openPopup(innerParams);\n setupTimer(globalState, innerParams, dismissWith);\n initFocus(domCache, innerParams);\n\n // Scroll container to top on open (#1247, #1946)\n setTimeout(() => {\n domCache.container.scrollTop = 0;\n });\n });\n };\n\n /**\n * @param {SweetAlertOptions} userParams\n * @param {SweetAlertOptions} mixinParams\n * @returns {SweetAlertOptions}\n */\n const prepareParams = (userParams, mixinParams) => {\n const templateParams = getTemplateParams(userParams);\n const params = Object.assign({}, defaultParams, mixinParams, templateParams, userParams); // precedence is described in #2131\n params.showClass = Object.assign({}, defaultParams.showClass, params.showClass);\n params.hideClass = Object.assign({}, defaultParams.hideClass, params.hideClass);\n if (params.animation === false) {\n params.showClass = {\n backdrop: 'swal2-noanimation'\n };\n params.hideClass = {};\n }\n return params;\n };\n\n /**\n * @param {SweetAlert} instance\n * @returns {DomCache}\n */\n const populateDomCache = instance => {\n const domCache = {\n popup: getPopup(),\n container: getContainer(),\n actions: getActions(),\n confirmButton: getConfirmButton(),\n denyButton: getDenyButton(),\n cancelButton: getCancelButton(),\n loader: getLoader(),\n closeButton: getCloseButton(),\n validationMessage: getValidationMessage(),\n progressSteps: getProgressSteps()\n };\n privateProps.domCache.set(instance, domCache);\n return domCache;\n };\n\n /**\n * @param {GlobalState} globalState\n * @param {SweetAlertOptions} innerParams\n * @param {Function} dismissWith\n */\n const setupTimer = (globalState, innerParams, dismissWith) => {\n const timerProgressBar = getTimerProgressBar();\n hide(timerProgressBar);\n if (innerParams.timer) {\n globalState.timeout = new Timer(() => {\n dismissWith('timer');\n delete globalState.timeout;\n }, innerParams.timer);\n if (innerParams.timerProgressBar) {\n show(timerProgressBar);\n applyCustomClass(timerProgressBar, innerParams, 'timerProgressBar');\n setTimeout(() => {\n if (globalState.timeout && globalState.timeout.running) {\n // timer can be already stopped or unset at this point\n animateTimerProgressBar(innerParams.timer);\n }\n });\n }\n }\n };\n\n /**\n * Initialize focus in the popup:\n *\n * 1. If `toast` is `true`, don't steal focus from the document.\n * 2. Else if there is an [autofocus] element, focus it.\n * 3. Else if `focusConfirm` is `true` and confirm button is visible, focus it.\n * 4. Else if `focusDeny` is `true` and deny button is visible, focus it.\n * 5. Else if `focusCancel` is `true` and cancel button is visible, focus it.\n * 6. Else focus the first focusable element in a popup (if any).\n *\n * @param {DomCache} domCache\n * @param {SweetAlertOptions} innerParams\n */\n const initFocus = (domCache, innerParams) => {\n if (innerParams.toast) {\n return;\n }\n // TODO: this is dumb, remove `allowEnterKey` param in the next major version\n if (!callIfFunction(innerParams.allowEnterKey)) {\n warnAboutDeprecation('allowEnterKey');\n blurActiveElement();\n return;\n }\n if (focusAutofocus(domCache)) {\n return;\n }\n if (focusButton(domCache, innerParams)) {\n return;\n }\n setFocus(-1, 1);\n };\n\n /**\n * @param {DomCache} domCache\n * @returns {boolean}\n */\n const focusAutofocus = domCache => {\n const autofocusElements = Array.from(domCache.popup.querySelectorAll('[autofocus]'));\n for (const autofocusElement of autofocusElements) {\n if (autofocusElement instanceof HTMLElement && isVisible$1(autofocusElement)) {\n autofocusElement.focus();\n return true;\n }\n }\n return false;\n };\n\n /**\n * @param {DomCache} domCache\n * @param {SweetAlertOptions} innerParams\n * @returns {boolean}\n */\n const focusButton = (domCache, innerParams) => {\n if (innerParams.focusDeny && isVisible$1(domCache.denyButton)) {\n domCache.denyButton.focus();\n return true;\n }\n if (innerParams.focusCancel && isVisible$1(domCache.cancelButton)) {\n domCache.cancelButton.focus();\n return true;\n }\n if (innerParams.focusConfirm && isVisible$1(domCache.confirmButton)) {\n domCache.confirmButton.focus();\n return true;\n }\n return false;\n };\n const blurActiveElement = () => {\n if (document.activeElement instanceof HTMLElement && typeof document.activeElement.blur === 'function') {\n document.activeElement.blur();\n }\n };\n\n // Dear russian users visiting russian sites. Let's have fun.\n if (typeof window !== 'undefined' && /^ru\\b/.test(navigator.language) && location.host.match(/\\.(ru|su|by|xn--p1ai)$/)) {\n const now = new Date();\n const initiationDate = localStorage.getItem('swal-initiation');\n if (!initiationDate) {\n localStorage.setItem('swal-initiation', `${now}`);\n } else if ((now.getTime() - Date.parse(initiationDate)) / (1000 * 60 * 60 * 24) > 3) {\n setTimeout(() => {\n document.body.style.pointerEvents = 'none';\n const ukrainianAnthem = document.createElement('audio');\n ukrainianAnthem.src = 'https://flag-gimn.ru/wp-content/uploads/2021/09/Ukraina.mp3';\n ukrainianAnthem.loop = true;\n document.body.appendChild(ukrainianAnthem);\n setTimeout(() => {\n ukrainianAnthem.play().catch(() => {\n // ignore\n });\n }, 2500);\n }, 500);\n }\n }\n\n // Assign instance methods from src/instanceMethods/*.js to prototype\n SweetAlert.prototype.disableButtons = disableButtons;\n SweetAlert.prototype.enableButtons = enableButtons;\n SweetAlert.prototype.getInput = getInput;\n SweetAlert.prototype.disableInput = disableInput;\n SweetAlert.prototype.enableInput = enableInput;\n SweetAlert.prototype.hideLoading = hideLoading;\n SweetAlert.prototype.disableLoading = hideLoading;\n SweetAlert.prototype.showValidationMessage = showValidationMessage;\n SweetAlert.prototype.resetValidationMessage = resetValidationMessage;\n SweetAlert.prototype.close = close;\n SweetAlert.prototype.closePopup = close;\n SweetAlert.prototype.closeModal = close;\n SweetAlert.prototype.closeToast = close;\n SweetAlert.prototype.rejectPromise = rejectPromise;\n SweetAlert.prototype.update = update;\n SweetAlert.prototype._destroy = _destroy;\n\n // Assign static methods from src/staticMethods/*.js to constructor\n Object.assign(SweetAlert, staticMethods);\n\n // Proxy to instance methods to constructor, for now, for backwards compatibility\n Object.keys(instanceMethods).forEach(key => {\n /**\n * @param {...any} args\n * @returns {any | undefined}\n */\n SweetAlert[key] = function (...args) {\n if (currentInstance && currentInstance[key]) {\n return currentInstance[key](...args);\n }\n return null;\n };\n });\n SweetAlert.DismissReason = DismissReason;\n SweetAlert.version = '11.22.0';\n\n const Swal = SweetAlert;\n // @ts-ignore\n Swal.default = Swal;\n\n return Swal;\n\n}));\nif (typeof this !== 'undefined' && this.Sweetalert2){this.swal = this.sweetAlert = this.Swal = this.SweetAlert = this.Sweetalert2}\n","import Swal from 'sweetalert2/dist/sweetalert2.js';\r\nimport type { SweetAlertCustomClass, SweetAlertIcon, SweetAlertInput, SweetAlertPosition } from 'sweetalert2';\r\nimport { CannotOpenModalException, CannotOpenModalWarning, FetchResponse, g, SyncOrAsync } from '@/app';\r\n\r\ntype ValueOrThunk<T> = T | (() => T)\r\n\r\ninterface BasicModalOptions {\r\n icon?: SweetAlertIcon;\r\n title?: string;\r\n text?: string;\r\n html?: string;\r\n width?: number | string;\r\n showConfirmButton?: boolean;\r\n confirmButtonText?: string;\r\n confirmButtonColor?: string;\r\n showCancelButton?: boolean;\r\n cancelButtonText?: string;\r\n cancelButtonColor?: string;\r\n showCloseButton?: boolean;\r\n allowOutsideClick?: ValueOrThunk<boolean> | false;\r\n showLoaderOnConfirm?: boolean;\r\n timer?: number;\r\n position?: SweetAlertPosition;\r\n willOpen?(popup: HTMLElement): void;\r\n didClose?(): void;\r\n didOpen?(popup: HTMLElement): void;\r\n didRender?(popup: HTMLElement): void;\r\n preConfirm?(inputValue: any): SyncOrAsync<any>;\r\n footer?: string;\r\n customClass?: SweetAlertCustomClass;\r\n}\r\n\r\ninterface UpdateModalOptions extends BasicModalOptions {\r\n hideLoading?: boolean;\r\n}\r\n\r\ninterface AjaxModalOptions extends BasicModalOptions {\r\n ajaxUrl: string;\r\n ajaxType?: string;\r\n ajaxParams?: {};\r\n footerOnFail?: string;\r\n}\r\n\r\ninterface InputModalOptions extends BasicModalOptions {\r\n input?: Exclude<SweetAlertInput, 'file'>;\r\n inputValue?: string;\r\n inputPlaceholder?: string;\r\n inputOptions?: SyncOrAsync<ReadonlyMap<string, string> | Record<string, any>>;\r\n inputId?: string;\r\n getValidationMessage?(value: string): string | null;\r\n preConfirm_url: string;\r\n preConfirm_type?: string;\r\n preConfirm_params?: { [key: string]: string };\r\n preConfirm_inputParamName?: string;\r\n preConfirm_permitConfirm?: boolean;\r\n preConfirm_ajaxOkCode?(): void;\r\n}\r\n\r\ninterface BladeModalOptions extends BasicModalOptions {\r\n ajaxUrl: string;\r\n showConfirmButton?: boolean;\r\n confirmButtonText?: string;\r\n jsActionsInModal?(p: {}): void;\r\n funcParam?: {};\r\n}\r\n\r\ninterface ToastOptions {\r\n icon?: SweetAlertIcon;\r\n title?: string;\r\n position?: SweetAlertPosition;\r\n timer?: number;\r\n}\r\n\r\ninterface ToastBothOptions {\r\n success: boolean;\r\n icon?: SweetAlertIcon;\r\n iconOk?: SweetAlertIcon;\r\n iconNok?: SweetAlertIcon;\r\n title?: string;\r\n titleOk?: string;\r\n titleNok?: string;\r\n timer?: number;\r\n timerOk?: number;\r\n timerNok?: number;\r\n position?: SweetAlertPosition;\r\n}\r\n\r\nconst InputsNeedsChangeListener = ['range', 'select', 'radio', 'checkbox', 'date', 'datetime-local', 'time', 'week', 'month'];\r\n\r\nexport class SModal {\r\n static colorBlue = '#3085d6';\r\n static colorRed = '#d33';\r\n static colorGray = '#aaa';\r\n\r\n static isPendigLoading = false;\r\n\r\n static mustAbortIfIsAlreadyOpen({isUpdate = false, ignorePendingLoading = false}): void {\r\n if (g.errorModalIsShowed) {\r\n throw new CannotOpenModalException('Se ha intentado abrir un modal cuando hay un modal de error abierto');\r\n }\r\n if (!ignorePendingLoading && !isUpdate && SModal.isPendigLoading) {\r\n throw new CannotOpenModalWarning('Se ha intentado abrir un modal cuando hay un modal de loading pendiente de actualizarse');\r\n }\r\n }\r\n\r\n static #checkAndExecuteShow(callback: Function): Promise<any> {\r\n try {\r\n return callback();\r\n } catch (e) {\r\n if (e instanceof CannotOpenModalException || e instanceof CannotOpenModalWarning) {\r\n g.consoleInfo(e.message);\r\n } else {\r\n throw e;\r\n }\r\n return Promise.reject();\r\n }\r\n }\r\n\r\n static #checkAndExecuteUpdate(callback: Function) {\r\n try {\r\n callback();\r\n } catch (e) {\r\n if (e instanceof CannotOpenModalException || e instanceof CannotOpenModalWarning) {\r\n g.consoleInfo(e.message);\r\n } else {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n static Toast = Swal.mixin({\r\n title: 'Your work has been saved',\r\n toast: true,\r\n position: 'top-end',\r\n showConfirmButton: false,\r\n timer: 3000,\r\n timerProgressBar: true,\r\n didOpen: (toast) => {\r\n toast.addEventListener('mouseenter', Swal.stopTimer);\r\n toast.addEventListener('mouseleave', Swal.resumeTimer);\r\n },\r\n });\r\n\r\n static toastInfo({\r\n icon = 'info',\r\n title = 'Your work has been saved',\r\n position = 'top-end',\r\n timer = 3000,\r\n }: ToastOptions) {\r\n return SModal.#checkAndExecuteShow(() => {\r\n SModal.mustAbortIfIsAlreadyOpen({});\r\n return SModal.Toast.fire({icon, title, position, timer});\r\n });\r\n }\r\n\r\n static toastSuccess({\r\n icon = 'success',\r\n title = 'Your work has been saved',\r\n position = 'top-end',\r\n timer = 3000,\r\n }: ToastOptions) {\r\n return SModal.#checkAndExecuteShow(() => {\r\n SModal.mustAbortIfIsAlreadyOpen({});\r\n return SModal.Toast.fire({icon, title, position, timer});\r\n });\r\n }\r\n\r\n static toastError({\r\n icon = 'error',\r\n title = 'Something error ocurred',\r\n position = 'top-end',\r\n timer = 3000,\r\n }: ToastOptions) {\r\n return SModal.#checkAndExecuteShow(() => {\r\n SModal.mustAbortIfIsAlreadyOpen({});\r\n return SModal.Toast.fire({icon, title, position, timer});\r\n });\r\n }\r\n\r\n static toastBottom({\r\n icon = 'success',\r\n title = 'Your work has been saved',\r\n position = 'bottom-end',\r\n timer = 3000,\r\n }: ToastOptions) {\r\n return SModal.#checkAndExecuteShow(() => {\r\n SModal.mustAbortIfIsAlreadyOpen({});\r\n return SModal.Toast.fire({icon, title, position, timer});\r\n });\r\n }\r\n\r\n static toastBoth({\r\n success,\r\n icon = undefined,\r\n iconOk = 'success',\r\n iconNok = 'error',\r\n title = undefined,\r\n titleOk = 'Your work has been saved',\r\n titleNok = 'Something error ocurred',\r\n timer = undefined,\r\n timerOk = 3000,\r\n timerNok = 4000,\r\n position = 'top-end',\r\n }: ToastBothOptions) {\r\n return SModal.#checkAndExecuteShow(() => {\r\n SModal.mustAbortIfIsAlreadyOpen({});\r\n icon = (icon !== undefined) ? icon : (success ? iconOk : iconNok);\r\n title = (title !== undefined) ? title : (success ? titleOk : titleNok);\r\n timer = (timer !== undefined) ? timer : (success ? timerOk : timerNok);\r\n return SModal.Toast.fire({icon, title, position, timer});\r\n });\r\n }\r\n\r\n static basic(params: BasicModalOptions) {\r\n return SModal.#checkAndExecuteShow(() => {\r\n SModal.mustAbortIfIsAlreadyOpen({});\r\n return Swal.fire(params);\r\n });\r\n }\r\n\r\n static successModal({\r\n icon = 'success',\r\n title = 'Correcto',\r\n html = 'Todo ha ido bien',\r\n width = 850,\r\n confirmButtonText = 'Ok',\r\n allowOutsideClick = () => !Swal.isLoading(),\r\n }: BasicModalOptions) {\r\n return SModal.#checkAndExecuteShow(() => {\r\n SModal.mustAbortIfIsAlreadyOpen({});\r\n return Swal.fire({\r\n icon: icon,\r\n title: title,\r\n html: html,\r\n width: width,\r\n confirmButtonText: confirmButtonText,\r\n allowOutsideClick: allowOutsideClick,\r\n });\r\n });\r\n }\r\n\r\n static errorModal({\r\n icon = 'error',\r\n title = 'Ups...): Algo ha ido mal',\r\n html = undefined,\r\n width = 850,\r\n confirmButtonText = 'Ok',\r\n allowOutsideClick = false,\r\n footer = undefined,\r\n }: BasicModalOptions, ignorePendingLoading = false) {\r\n return SModal.#checkAndExecuteShow(() => {\r\n SModal.mustAbortIfIsAlreadyOpen({ignorePendingLoading});\r\n return Swal.fire({\r\n icon: icon,\r\n title: title,\r\n html: html,\r\n width: width,\r\n showCloseButton: true,\r\n confirmButtonText: confirmButtonText,\r\n allowOutsideClick: allowOutsideClick,\r\n footer: footer,\r\n });\r\n });\r\n }\r\n\r\n static confirmModal({\r\n title = 'Confirmar',\r\n html = '¿Seguro que quieres realizar la acción?',\r\n width = 850,\r\n confirmButtonText = 'Ok',\r\n cancelButtonText = 'Cancelar',\r\n }: BasicModalOptions) {\r\n return SModal.#checkAndExecuteShow(() => {\r\n SModal.mustAbortIfIsAlreadyOpen({});\r\n return Swal.fire({\r\n title: title,\r\n html: html,\r\n width: width,\r\n showCancelButton: true,\r\n confirmButtonText: confirmButtonText,\r\n cancelButtonText: cancelButtonText,\r\n confirmButtonColor: SModal.colorRed,\r\n cancelButtonColor: SModal.colorGray,\r\n showLoaderOnConfirm: false,\r\n allowOutsideClick: false, // \"() => !Swal.isLoading()\" -> para que no se pueda cerras si esta cargando. | \"false\" -> para que no se pueda cerrar\r\n });\r\n });\r\n }\r\n\r\n static loadingModal({\r\n title = 'Calculando...',\r\n width = 850,\r\n willOpen = () => Swal.showLoading(),\r\n }: BasicModalOptions) {\r\n return SModal.#checkAndExecuteShow(() => {\r\n SModal.mustAbortIfIsAlreadyOpen({});\r\n SModal.isPendigLoading = true;\r\n return Swal.fire({\r\n title: title,\r\n width: width,\r\n showConfirmButton: false,\r\n willOpen: async (popup) => {\r\n await willOpen(popup);\r\n SModal.isPendigLoading = false;\r\n },\r\n allowOutsideClick: () => !Swal.isLoading(),\r\n });\r\n });\r\n }\r\n\r\n static loadingModalAndDoAction({\r\n title = 'Calculando...',\r\n ajaxUrl,\r\n ajaxType,\r\n ajaxParams,\r\n allowOutsideClick = () => !Swal.isLoading(),\r\n footerOnFail = undefined,\r\n }: AjaxModalOptions) {\r\n return SModal.#checkAndExecuteShow(() => {\r\n SModal.mustAbortIfIsAlreadyOpen({});\r\n SModal.isPendigLoading = true;\r\n return Swal.fire({\r\n title: title,\r\n width: 850,\r\n showConfirmButton: false,\r\n willOpen: async (popup) => {\r\n Swal.showLoading();\r\n try {\r\n // Ajax to launch Status/Mitigation\r\n const result = await g.fetch({url: ajaxUrl, type: ajaxType, params: ajaxParams});\r\n\r\n // Check if result is wrong and update modal content\r\n if (!result.success || !result.ok) {\r\n SModal.updateErrorModal({icon: 'warning', html: result.message});\r\n return;\r\n }\r\n\r\n // Update modal with success message\r\n SModal.updateSuccessModal({title: 'Correcto', html: result.message});\r\n } catch (e) {\r\n g.catchCode({error: e, footer: footerOnFail});\r\n }\r\n SModal.isPendigLoading = false;\r\n },\r\n allowOutsideClick: allowOutsideClick,\r\n });\r\n });\r\n }\r\n\r\n static updateModal(params: UpdateModalOptions) {\r\n SModal.#checkAndExecuteUpdate(() => {\r\n SModal.mustAbortIfIsAlreadyOpen({isUpdate: true});\r\n if (params.hideLoading === true) {\r\n Swal.hideLoading();\r\n delete params.hideLoading;\r\n }\r\n Swal.update(params);\r\n });\r\n }\r\n\r\n static updateSuccessModal({\r\n icon = 'success',\r\n title = 'Exito',\r\n html = 'Todo ha ido bien',\r\n hideLoading = true,\r\n footer = undefined,\r\n allowOutsideClick = undefined,\r\n }: UpdateModalOptions) {\r\n SModal.updateModal({\r\n icon: icon,\r\n title: title,\r\n html: html,\r\n hideLoading: hideLoading,\r\n footer: footer,\r\n allowOutsideClick: allowOutsideClick,\r\n showConfirmButton: true,\r\n });\r\n }\r\n\r\n static updateErrorModal({\r\n icon = 'error',\r\n title = 'Error',\r\n html = 'Ha habido algun error',\r\n hideLoading = true,\r\n footer = undefined,\r\n allowOutsideClick = undefined,\r\n }: UpdateModalOptions) {\r\n SModal.updateModal({\r\n icon: icon,\r\n title: title,\r\n html: html,\r\n hideLoading: hideLoading,\r\n footer: footer,\r\n allowOutsideClick: allowOutsideClick,\r\n showConfirmButton: true,\r\n });\r\n }\r\n\r\n static confirmModalAfterAjaxCheck({\r\n title = 'Confirmar',\r\n html = '¿Seguro que quieres realizar la acción?',\r\n confirmButtonText = 'Ok',\r\n confirmButtonColor = SModal.colorBlue,\r\n cancelButtonText = 'Cancelar',\r\n ajaxUrl,\r\n ajaxType = 'GET',\r\n ajaxParams,\r\n footerOnFail = undefined,\r\n }: AjaxModalOptions) {\r\n return SModal.#checkAndExecuteShow(() => {\r\n SModal.mustAbortIfIsAlreadyOpen({});\r\n return Swal.fire({\r\n title: title,\r\n width: 850,\r\n showCancelButton: true,\r\n confirmButtonText: confirmButtonText,\r\n cancelButtonText: cancelButtonText,\r\n confirmButtonColor: confirmButtonColor,\r\n cancelButtonColor: SModal.colorGray,\r\n showLoaderOnConfirm: false,\r\n willOpen: async () => {\r\n Swal.showLoading();\r\n try {\r\n const res = await g.fetch({url: ajaxUrl, type: ajaxType, params: ajaxParams});\r\n // await Hlp.sleep(1000);\r\n if (res.success && res.ok) {\r\n SModal.updateModal({html: html, confirmButtonColor: SModal.colorRed});\r\n } else {\r\n SModal.updateModal({\r\n html: `<span class=\"restriction-message\">${res.message}</span>`,\r\n showConfirmButton: false,\r\n showCancelButton: true,\r\n cancelButtonText: 'Ok',\r\n cancelButtonColor: SModal.colorBlue,\r\n });\r\n }\r\n } catch (e) {\r\n g.catchCode({\r\n error: e,\r\n footer: footerOnFail\r\n });\r\n }\r\n },\r\n allowOutsideClick: () => !Swal.isLoading(), // \"() => !Swal.isLoading()\" -> para que no se pueda cerras si esta cargando. | \"false\" -> para que no se pueda cerrar\r\n });\r\n });\r\n }\r\n\r\n static #inputModalBasic({\r\n title = 'Introduce los datos',\r\n width = 850,\r\n html = 'Introduce los datos',\r\n input = 'textarea',\r\n inputValue = '',\r\n inputId = 'inpName',\r\n inputPlaceholder = 'Placeholder...',\r\n inputOptions = undefined,\r\n getValidationMessage = () => null,\r\n preConfirm_url,\r\n preConfirm_type = 'GET',\r\n preConfirm_params = {},\r\n preConfirm_inputParamName = undefined,\r\n preConfirm_permitConfirm = true,\r\n preConfirm_ajaxOkCode = undefined,\r\n confirmButtonText = 'Guardar',\r\n showCancelButton = true,\r\n cancelButtonText = 'Cancelar',\r\n showLoaderOnConfirm = true,\r\n didClose = () => {},\r\n didOpen = () => {},\r\n }: InputModalOptions, fixedAndAlertChanges = false) {\r\n return SModal.#checkAndExecuteShow(() => {\r\n SModal.mustAbortIfIsAlreadyOpen({});\r\n const inputPassValidation = (value: string) => getValidationMessage(value) === null;\r\n const didOpenToAlertInputChanges = (el: HTMLElement) => {\r\n // execute received function\r\n didOpen(el);\r\n\r\n // Get variables\r\n let inputHtml = el.querySelector(`${input}[data-id=\"${inputId}\"]`);\r\n let swalContent = el.querySelector('.swal2-html-container') as Element;\r\n let confirmBtn = el.querySelector('.swal2-confirm') as HTMLButtonElement;\r\n\r\n // Add hidden error div\r\n const hiddenClass = g.getHiddenClass();\r\n // TODO Canals - (tailwind) pasar a componente\r\n swalContent.insertAdjacentHTML('afterbegin', `<div class=\"mySwalError alert alert-danger text-start ${hiddenClass}\"></div>`);\r\n let newDivError = swalContent.querySelector('.mySwalError') as HTMLElement;\r\n\r\n // Add hidden success div\r\n // TODO Canals - (tailwind) pasar a componente\r\n swalContent.insertAdjacentHTML('afterbegin', `<div class=\"mySwalSuccess alert alert-success text-start ${hiddenClass}\"></div>`);\r\n\r\n // Define validator function\r\n let keyUpValidationFunction = (e: any) => {\r\n let val = e?.target?.value ?? '';\r\n if (!inputPassValidation(val)) {\r\n newDivError.classList.remove(hiddenClass);\r\n newDivError.innerText = getValidationMessage(val) as string;\r\n confirmBtn.disabled = true;\r\n } else {\r\n newDivError.classList.add(hiddenClass);\r\n confirmBtn.disabled = false;\r\n }\r\n };\r\n\r\n // Start keyup listener\r\n if (fixedAndAlertChanges) {\r\n inputHtml?.addEventListener('keyup', keyUpValidationFunction);\r\n inputHtml?.addEventListener('blur', keyUpValidationFunction);\r\n } else {\r\n const listener = (InputsNeedsChangeListener.includes(input)) ? 'keyup' : 'change';\r\n inputHtml?.addEventListener(listener, keyUpValidationFunction);\r\n }\r\n\r\n // Launch default validation\r\n keyUpValidationFunction(null);\r\n };\r\n const final_permitConfirm = fixedAndAlertChanges ? false : preConfirm_permitConfirm;\r\n const final_didOpen = fixedAndAlertChanges ? didOpenToAlertInputChanges : didOpen;\r\n return Swal.fire({\r\n title: title,\r\n width: width,\r\n html: html,\r\n input: input,\r\n inputPlaceholder: inputPlaceholder,\r\n inputValue: inputValue,\r\n inputOptions: inputOptions,\r\n inputAttributes: {\r\n 'data-id': inputId,\r\n },\r\n confirmButtonText: confirmButtonText,\r\n showCancelButton: showCancelButton,\r\n cancelButtonText: cancelButtonText,\r\n showCloseButton: true,\r\n showLoaderOnConfirm: showLoaderOnConfirm,\r\n preConfirm: async (inputValue): Promise<FetchResponse | false> => {\r\n try {\r\n if (preConfirm_inputParamName !== undefined) {\r\n preConfirm_params[preConfirm_inputParamName] = inputValue;\r\n }\r\n let result = await g.fetch({url: preConfirm_url, type: preConfirm_type, params: preConfirm_params,});\r\n if (!result.success || !result.ok) {\r\n Swal.showValidationMessage(result.message);\r\n return false;\r\n }\r\n\r\n if (preConfirm_ajaxOkCode !== undefined) preConfirm_ajaxOkCode();\r\n\r\n if (fixedAndAlertChanges) {\r\n let successDiv = document.querySelector('.mySwalSuccess');\r\n if (successDiv !== null) {\r\n const hiddenClass = g.getHiddenClass();\r\n successDiv.classList.remove(hiddenClass);\r\n successDiv.innerHTML = `Guardado correctamente.`;\r\n setTimeout(() => {\r\n successDiv?.classList.add(hiddenClass);\r\n }, 2000);\r\n }\r\n }\r\n\r\n return final_permitConfirm ? result : false;\r\n } catch (e) {\r\n Swal.showValidationMessage(`Request failed: ${(e as FetchResponse).message}`);\r\n return false;\r\n }\r\n },\r\n allowOutsideClick: () => !Swal.isLoading(),\r\n inputValidator: (value) => {\r\n return new Promise((resolve) => {\r\n if (inputPassValidation(value)) {\r\n resolve();\r\n } else {\r\n resolve(getValidationMessage(value));\r\n }\r\n });\r\n },\r\n didOpen: final_didOpen,\r\n customClass: {\r\n container: 'swalForceWidth',\r\n },\r\n didClose: didClose,\r\n });\r\n });\r\n }\r\n\r\n static inputModal(params: InputModalOptions) {\r\n return SModal.#checkAndExecuteShow(() => {\r\n SModal.mustAbortIfIsAlreadyOpen({});\r\n return SModal.#inputModalBasic(params, false);\r\n });\r\n }\r\n\r\n static inputModalFixed(params: InputModalOptions) {\r\n return SModal.#checkAndExecuteShow(() => {\r\n SModal.mustAbortIfIsAlreadyOpen({});\r\n return SModal.#inputModalBasic(params, true);\r\n });\r\n }\r\n\r\n static bladeModal({\r\n ajaxUrl,\r\n showConfirmButton = false,\r\n confirmButtonText = '',\r\n jsActionsInModal = (p: {}) => {},\r\n funcParam = {},\r\n width = 850,\r\n didClose,\r\n }: BladeModalOptions) {\r\n return SModal.#checkAndExecuteShow(() => {\r\n SModal.mustAbortIfIsAlreadyOpen({});\r\n return Swal.fire({\r\n width: width,\r\n showConfirmButton: showConfirmButton,\r\n confirmButtonText: confirmButtonText,\r\n showCloseButton: true,\r\n willOpen: async () => {\r\n Swal.showLoading();\r\n try {\r\n const result: FetchResponse = await g.fetch({url: ajaxUrl});\r\n if (!result.success || !result.ok) {\r\n SModal.updateErrorModal({title: 'Ups...): Algo ha ido mal', html: result.message});\r\n return;\r\n }\r\n const html = (typeof result.data === 'string') ? result.data : 'Formato blade incorrecto.';\r\n SModal.updateModal({hideLoading: true, html: html});\r\n if (jsActionsInModal) jsActionsInModal(funcParam);\r\n } catch (e) {\r\n g.catchCode({error: e});\r\n }\r\n },\r\n allowOutsideClick: () => !Swal.isLoading(),\r\n didClose: didClose,\r\n });\r\n });\r\n }\r\n}\r\n","import { route } from 'ziggy-js';\r\nimport { g } from '@/app';\r\n\r\ntype ROUTES = {\r\n PAGES: {\r\n [name: string]: {\r\n uri: string,\r\n controller: any,\r\n method: string,\r\n makeDataRequest: boolean,\r\n }\r\n },\r\n COMPONENTS: {\r\n [name: string]: {\r\n controller: any,\r\n method: string,\r\n uris: string[],\r\n }\r\n },\r\n ALL: {\r\n [name: string]: {\r\n controller: any,\r\n method: string,\r\n except: string[],\r\n }\r\n },\r\n}\r\n\r\nexport class Route {\r\n static #ROUTES: ROUTES = {\r\n PAGES: {},\r\n COMPONENTS: {},\r\n ALL: {},\r\n };\r\n\r\n static page(uri: string, callback: [any, string], makeDataRequest = false): void {\r\n if (Array.isArray(callback) && (typeof makeDataRequest === 'boolean')) {\r\n const controller = callback[0];\r\n const method = callback[1];\r\n Route.#ROUTES['PAGES'][uri] = {\r\n uri: uri,\r\n controller: controller,\r\n method: method,\r\n makeDataRequest: makeDataRequest,\r\n };\r\n }\r\n }\r\n\r\n static component(callback: [any, string], uris: string[]): void {\r\n if (Array.isArray(callback) && Array.isArray(uris)) {\r\n const controller = callback[0];\r\n const method = callback[1];\r\n Route.#ROUTES['COMPONENTS'][`${controller.name}_${method}`] = {\r\n controller: controller,\r\n method: method,\r\n uris: uris,\r\n };\r\n }\r\n }\r\n\r\n static all(callback: [any, string], except: string[]): void {\r\n if (Array.isArray(callback) && Array.isArray(except)) {\r\n const controller = callback[0];\r\n const method = callback[1];\r\n Route.#ROUTES['ALL'][`${controller.name}_${method}`] = {\r\n controller: controller,\r\n method: method,\r\n except: except,\r\n };\r\n }\r\n }\r\n\r\n static dispatch(): void {\r\n if (!Route.existsRoutesDefinition()) return;\r\n\r\n Object.values(Route.#ROUTES['PAGES']).forEach(page => {\r\n if (route().current() === page.uri) {\r\n // Prueba de imports dinamicos para reducir tamaño del archivo js\r\n // const { default: ControllerClass } = await page.controller()\r\n // const controller = new ControllerClass()\r\n const controller = new page.controller();\r\n\r\n if (!page.makeDataRequest) {\r\n controller[page.method]();\r\n return;\r\n }\r\n\r\n g.fetchStrict({url: route(page.uri, route().params)})\r\n .then(viewData => {\r\n controller[page.method](viewData);\r\n })\r\n .catch(e => {\r\n g.catchCode({error: e});\r\n });\r\n return; // cortamos ejecucion porque ya no se va a cumplir la condicion para las demas rutas\r\n }\r\n });\r\n\r\n Object.values(Route.#ROUTES['COMPONENTS']).forEach(component => {\r\n const onRoutes = component.uris;\r\n const currentRoute = route().current();\r\n if (currentRoute !== undefined && onRoutes.includes(currentRoute)) {\r\n const controller = new component.controller();\r\n controller[component.method]();\r\n }\r\n });\r\n\r\n Object.values(Route.#ROUTES['ALL']).forEach(component => {\r\n const exceptRoutes = component.except;\r\n const currentRoute = route().current();\r\n if (currentRoute !== undefined && !exceptRoutes.includes(currentRoute)) {\r\n const controller = new component.controller();\r\n controller[component.method]();\r\n }\r\n });\r\n }\r\n\r\n static existsRoutesDefinition(): boolean {\r\n const routeVariable = route();\r\n // @ts-ignore\r\n return routeVariable.t.hasOwnProperty('url');\r\n }\r\n}\r\n","import { route } from 'ziggy-js';\r\nimport { g } from '@/app';\r\nimport { Filter } from 'tabulator-tables';\r\n\r\n// type QueryParams = { [p: string]: string | number }\r\ntype QueryParams = Record<string, unknown>\r\n\r\nexport class Url {\r\n static getCurrentUrl(): string {\r\n const current = (route().current() as string);\r\n const params = route().params;\r\n return route(current, params);\r\n }\r\n\r\n static #updateUrl(params: QueryParams) {\r\n // TODO Canals(revisar) - quiza hay que limitar por si se hace muy grande la query -> console.log(objectQueryParams.filters.length);\r\n const newUrl = route((route().current() as string), params);\r\n window.history.pushState({}, '', newUrl);\r\n }\r\n\r\n static addParamsToUrl(objectQueryParams: QueryParams, onStart = false) {\r\n let currentParams = route().params;\r\n let params = (onStart) ? {...objectQueryParams, ...currentParams} : {...currentParams, ...objectQueryParams};\r\n this.#updateUrl(params);\r\n }\r\n\r\n static removeParamsUrl(paramsToDelete: string[]) {\r\n let currentParams = route().params;\r\n paramsToDelete.forEach(item => {\r\n delete currentParams[item];\r\n });\r\n\r\n this.#updateUrl(currentParams);\r\n }\r\n\r\n static getEncodedFilters(): string | null {\r\n return route()?.params?.filters as string ?? null;\r\n }\r\n\r\n static getDecodedFilters(): Filter[] | null {\r\n const filters = Url.getEncodedFilters();\r\n let decodedFilters = null;\r\n if (filters) {\r\n try {\r\n decodedFilters = decodeURIComponent(filters);\r\n decodedFilters = JSON.parse(decodedFilters);\r\n } catch (e) {\r\n g.catchCode({error: e});\r\n return null;\r\n }\r\n }\r\n return decodedFilters;\r\n }\r\n}\r\n","import { __const } from '@/app/core/infrastructure/utilities/_internal/helpers';\r\n\r\nexport class TestConstants {\r\n private property_value: string = __const('VITE_APP_NAME');\r\n private constructor_value: string;\r\n\r\n constructor() {\r\n this.constructor_value = __const('VITE_APP_NAME');\r\n }\r\n\r\n printPropertyValue()\r\n {\r\n console.log(this.property_value);\r\n }\r\n\r\n printConstructorValue()\r\n {\r\n console.log(this.constructor_value);\r\n }\r\n\r\n printMethodValue()\r\n {\r\n console.log(__const('VITE_APP_NAME'));\r\n }\r\n\r\n}","import es from './lang/es.json';\r\nimport en from './lang/en.json';\r\nimport { DefaultTranslations, Translation, TranslationReplacements } from '@/app';\r\nimport { __const } from '@/app/core/infrastructure/utilities/_internal/helpers';\r\n\r\ninterface Translations<T extends Translation> {\r\n [key: string]: T;\r\n}\r\n\r\nexport class Translator<T extends DefaultTranslations> {\r\n private static instance: Translator<any>;\r\n private locale: string = __const('lang');\r\n private translations: Translations<DefaultTranslations> = {en, es};\r\n private externalTranslations: Translations<T> = {};\r\n\r\n public static getInstance<U extends DefaultTranslations>(): Translator<U> {\r\n if (!Translator.instance) {\r\n Translator.instance = new Translator<U>();\r\n }\r\n return Translator.instance;\r\n }\r\n\r\n public registerTranslations(locale: string, translations: Partial<T>): void {\r\n if (!this.externalTranslations[locale]) {\r\n this.externalTranslations[locale] = {} as T;\r\n }\r\n this.externalTranslations[locale] = {\r\n ...this.externalTranslations[locale],\r\n ...translations,\r\n };\r\n }\r\n\r\n public get<K extends keyof T>(key: K, replacements?: TranslationReplacements): string {\r\n const internalTranslation = this.translations[this.locale]?.[key as keyof DefaultTranslations];\r\n const externalTranslation = this.externalTranslations[this.locale]?.[key];\r\n let translation = externalTranslation || internalTranslation || (key as string);\r\n\r\n if (replacements) {\r\n for (const [placeholder, value] of Object.entries(replacements)) {\r\n if (value) {\r\n // Escapar correctamente el símbolo \":\" en el placeholder\r\n const regex = new RegExp(`(^|[^\\\\^]):${placeholder}`, 'g');\r\n translation = translation.replace(regex, `$1${value}`);\r\n }\r\n }\r\n }\r\n\r\n // Reemplazar el símbolo de escape (^:) con el símbolo \":\"\r\n translation = translation.replace(/\\^:/g, ':');\r\n\r\n return translation;\r\n }\r\n\r\n}\r\n","export class CannotOpenModalException extends Error {\r\n constructor(msg: string) {\r\n super(msg);\r\n this.name = 'CannotOpenModalException';\r\n }\r\n}\r\n","export class CannotOpenModalWarning extends Error {\r\n constructor(msg: string) {\r\n super(msg);\r\n this.name = 'CannotOpenModalWarning';\r\n }\r\n}\r\n","export class InvalidValueException extends Error {\r\n constructor(message: string) {\r\n super(message);\r\n this.name = 'InvalidValueException';\r\n }\r\n}\r\n","import { g, InvalidValueException, StrOrNullish } from '@/app';\r\n\r\nexport type StringVoParams = {\r\n allowNull?: boolean\r\n errorMessage?: string | null\r\n}\r\n\r\nexport class StringVo {\r\n protected _value: StrOrNullish;\r\n protected _allowNull: boolean;\r\n protected _errorMessage: string | null;\r\n\r\n constructor(value: StrOrNullish, params?: StringVoParams) {\r\n this._allowNull = params?.allowNull ?? false;\r\n this._errorMessage = params?.errorMessage ?? null;\r\n this._value = value;\r\n\r\n this.#ensureIsValidValue();\r\n }\r\n\r\n value() {\r\n return this._value;\r\n }\r\n\r\n #ensureIsValidValue() {\r\n if (!this._allowNull) {\r\n if (g.isEmpty(this._value)) {\r\n const message = (this._errorMessage === null) ? '<StringVo> no permite un valor vacio' : this._errorMessage;\r\n throw new InvalidValueException(message);\r\n }\r\n\r\n if (typeof this._value !== 'string') {\r\n const message = '<StringVo> ha de ser de tipo String';\r\n throw new InvalidValueException(message);\r\n }\r\n }\r\n }\r\n\r\n static from(value: StrOrNullish, params?: StringVoParams): StringVo {\r\n return new this(value, params);\r\n }\r\n}\r\n","import { g, InvalidValueException, StrIntOrNullish } from '@/app';\r\n\r\nexport type IntVoParams = {\r\n allowNull?: boolean\r\n}\r\n\r\nexport class IntVo {\r\n protected _value: StrIntOrNullish;\r\n protected _allowNull: boolean;\r\n\r\n constructor(value: StrIntOrNullish, params?: IntVoParams) {\r\n this._allowNull = params?.allowNull ?? false;\r\n this._value = value;\r\n\r\n this.#ensureIsValidValue();\r\n }\r\n\r\n value() {\r\n return this._value;\r\n }\r\n\r\n #ensureIsValidValue() {\r\n if (this._allowNull && g.isNullish(this._value)) return;\r\n\r\n if (typeof this._value === 'string') this._value = parseInt(this._value);\r\n\r\n if (typeof this._value !== 'number') {\r\n throw new InvalidValueException(`<IntVo> debe ser un entero y se ha recibido ${typeof this._value}`);\r\n }\r\n }\r\n\r\n static from(value: StrIntOrNullish, params?: IntVoParams): IntVo {\r\n return new this(value, params);\r\n }\r\n}\r\n","import { g, InvalidValueException, StrOrNullish } from '@/app';\r\n\r\nexport type EnumVoParams = {\r\n allowNull?: boolean\r\n}\r\n\r\nexport abstract class EnumVo {\r\n protected _value: StrOrNullish;\r\n protected _allowNull: boolean;\r\n protected _permittedValues: string[] = [];\r\n\r\n constructor(value: StrOrNullish, params?: EnumVoParams) {\r\n this.setPermittedValues();\r\n this._allowNull = params?.allowNull ?? false;\r\n this._value = value;\r\n this.#ensureIsValidValue();\r\n }\r\n\r\n abstract setPermittedValues(): void\r\n\r\n value() {\r\n return this._value;\r\n }\r\n\r\n #ensureIsValidValue() {\r\n if (g.isNullish(this._value)) {\r\n if (!this._allowNull) {\r\n const message = '<EnumVo> no permite un valor vacio';\r\n throw new InvalidValueException(message);\r\n } else {\r\n return;\r\n }\r\n }\r\n\r\n if (typeof this._value !== 'string') {\r\n const message = '<EnumVo> ha de ser de tipo String';\r\n throw new InvalidValueException(message);\r\n }\r\n\r\n if (!this._permittedValues.includes(this._value)) {\r\n const message = `<EnumVo> ha recibido un valor no permitido. Valores permitidos [${this._permittedValues.join(',')}]`;\r\n throw new InvalidValueException(message);\r\n }\r\n }\r\n\r\n static from<T extends EnumVo>(this: new (value: StrOrNullish, params?: EnumVoParams) => T, value: StrOrNullish, params?: EnumVoParams): T {\r\n return new this(value, params);\r\n }\r\n}\r\n","import { ___, __const } from '@/app/core/infrastructure/utilities/_internal/helpers';\r\n\r\nexport class Test {\r\n public static printConstant() {\r\n console.log(__const('lang'));\r\n console.log(__const('VITE_BROADCASTING_ENABLED'));\r\n }\r\n\r\n public static printTranslation() {\r\n console.log(___('no_results'));\r\n }\r\n}","import { Cookie, Instantiable, Theme, ThemeSwitcher } from '@/app';\r\n\r\nexport class DomService extends Instantiable {\r\n private $document = document.documentElement;\r\n\r\n startDarkMode() {\r\n\r\n const themeSwitcher = ThemeSwitcher.new();\r\n\r\n // Aplicar estado inicial del tema oscuro\r\n themeSwitcher.init();\r\n\r\n // Eventos de click para alternar el tema\r\n for (const [key, button] of Object.entries(themeSwitcher.buttons) as [Theme, HTMLElement | null][]) {\r\n button?.addEventListener('click', () => {\r\n switch (key) {\r\n case Theme.dark:\r\n themeSwitcher.toLightMode();\r\n break;\r\n case Theme.light:\r\n themeSwitcher.toSystemMode();\r\n break;\r\n case Theme.system:\r\n themeSwitcher.toDarkMode();\r\n break;\r\n }\r\n });\r\n }\r\n }\r\n\r\n startSidebarState() {\r\n /*// Clave personalizada para almacenar el estado del sidebar según la ruta actual\r\n const getSidebarKey = (routeName: string | undefined) => `sidebar-collapsed-${routeName}`;*/\r\n\r\n // Inicialización del estado del sidebar\r\n const sidebarToggleBtn = document.getElementById('sidebar-toggle');\r\n\r\n /*// Obtener el nombre de la ruta actual usando Ziggy\r\n const currentRoute = route().current();\r\n\r\n // Aplicar estado inicial del sidebar para la ruta actual\r\n const sidebarKey = getSidebarKey(currentRoute);\r\n this.initializeState(sidebarKey, 'sc', false);*/\r\n\r\n // Evento de click para alternar el estado del sidebar\r\n sidebarToggleBtn?.addEventListener('click', () => {\r\n const isCollapsed = !this.$document.classList.contains('sc');\r\n this.$document.classList.toggle('sc', isCollapsed);\r\n Cookie.new().setPreference('sidebar_collapsed', isCollapsed);\r\n });\r\n\r\n }\r\n\r\n startSidebarArrowsObserve()\r\n {\r\n const targetNode = document.getElementById(\"drawer-navigation\")?.firstElementChild as HTMLElement | null | undefined;\r\n\r\n if (!targetNode) return;\r\n\r\n // Create an observer instance linked to the callback function\r\n const observer = new MutationObserver((mutationList, observer) => {\r\n for (const mutation of mutationList) {\r\n if (mutation.type === 'attributes' && mutation.attributeName === 'aria-expanded') {\r\n const $button = mutation.target as HTMLElement;\r\n const $arrow = $button.querySelector('svg.chevron-down');\r\n if ($arrow !== null) {\r\n const isExpanded = $button.getAttribute('aria-expanded') === 'true';\r\n if (isExpanded) {\r\n $arrow.classList.add('-rotate-90');\r\n } else {\r\n $arrow.classList.remove('-rotate-90');\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n // Start observing the target node for configured mutations\r\n observer.observe(targetNode, { attributes: true, subtree: true });\r\n }\r\n}","import { Cookie, Instantiable, Theme, ThemeButtons } from '@/app';\r\n\r\nexport class ThemeSwitcher extends Instantiable\r\n{\r\n private $document = document.documentElement;\r\n private mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\r\n public buttons: ThemeButtons = {\r\n [Theme.dark]: document.getElementById('theme-dark'),\r\n [Theme.light]: document.getElementById('theme-light'),\r\n [Theme.system]: document.getElementById('theme-system'),\r\n };\r\n\r\n constructor()\r\n {\r\n super();\r\n\r\n // Validar que los Botones existen\r\n /*Object.values(this.buttons).forEach(button => {\r\n if (button === null) {\r\n throw new Error('No se ha encontrado alguno de los botones para alternar el tema oscuro.');\r\n }\r\n });*/\r\n }\r\n\r\n getTheme(): Theme\r\n {\r\n const preferences = Cookie.new().preferences();\r\n if (preferences === null) {\r\n throw new Error('No se han encontrado las preferencias en las cookies');\r\n }\r\n return preferences.theme;\r\n }\r\n\r\n init() {\r\n const theme = this.getTheme();\r\n localStorage.setItem('theme', theme);\r\n this.updateTheme(theme);\r\n this.mediaQuery.addEventListener('change', e => {\r\n this.getTheme() === 'system' && (e.matches ? this.setToDark(Theme.system) : this.setToLight(Theme.system));\r\n });\r\n }\r\n\r\n setToDark(e: Theme = Theme.dark) {\r\n this.$document.classList.add('dark');\r\n this.$document.setAttribute('data-theme', 'dark');\r\n this.$document.setAttribute('color-theme', e);\r\n }\r\n\r\n setToLight(e: Theme = Theme.light) {\r\n this.$document.classList.remove('dark');\r\n this.$document.setAttribute('data-theme', 'light');\r\n this.$document.setAttribute('color-theme', e);\r\n }\r\n\r\n updateTheme(theme: Theme) {\r\n\r\n // Mostrar el botón del tema recibido (y ocultar los demás)\r\n Object.values(this.buttons).forEach(button => button?.classList.remove('block!'));\r\n const themBtn = this.buttons[theme];\r\n themBtn?.classList.add('block!');\r\n\r\n switch (theme) {\r\n case Theme.system:\r\n this.mediaQuery.matches ? this.setToDark(Theme.system) : this.setToLight(Theme.system);\r\n break;\r\n case Theme.dark:\r\n this.setToDark();\r\n break;\r\n case Theme.light:\r\n this.setToLight();\r\n break;\r\n }\r\n }\r\n\r\n saveAndUpdate(theme: Theme) {\r\n localStorage.setItem('theme', theme);\r\n Cookie.new().setPreference('theme', theme);\r\n this.updateTheme(theme);\r\n }\r\n\r\n toDarkMode() {\r\n this.saveAndUpdate(Theme.dark);\r\n }\r\n\r\n toLightMode() {\r\n this.saveAndUpdate(Theme.light);\r\n }\r\n\r\n toSystemMode() {\r\n this.saveAndUpdate(Theme.system);\r\n }\r\n\r\n}","import { DomService, Instantiable, LStorage } from '@/app';\r\n\r\nexport class LayoutListenersUseCase extends Instantiable {\r\n __invoke() {\r\n LStorage.checkAndUpdateVersion();\r\n DomService.new().startDarkMode();\r\n DomService.new().startSidebarState();\r\n DomService.new().startSidebarArrowsObserve();\r\n }\r\n}","import { g, LayoutListenersUseCase, LStorage, Notify, StorageProcessKeys } from '@/app';\r\n\r\ntype Features = keyof typeof UtilitiesServiceProvider.actions;\r\n\r\nexport class UtilitiesServiceProvider {\r\n\r\n static actions = {\r\n startStorageDay: () => {\r\n if (LStorage.isFirstConnectionInDay()) {\r\n LStorage.setNowAsLastConnection();\r\n LStorage.removeItem(StorageProcessKeys.reverb);\r\n LStorage.removeItem(StorageProcessKeys.queue);\r\n }\r\n\r\n /*// let test = MyLuxon.stringToLxDate(MyStorage.getItem(\"lastConnection\"));\r\n // console.log(\"lastConnection\");\r\n // console.log(test.toFormat(MyLuxon.formats.datetime_startYear));\r\n\r\n // let now = MyLuxon.now();\r\n // console.log(\"hoy menos dos dias:\");\r\n // console.log(now.minus({day:2}).toFormat(MyLuxon.formats.date_startDay));\r\n // console.log(now.minus({day:2}).toFormat(MyLuxon.formats.timestamp_seconds));*/\r\n },\r\n enableTooltips: () => {\r\n g.startTooltips();\r\n },\r\n\r\n registerGlobalError: () => {\r\n window.onerror = (message, source, lineno, colno, error) => {\r\n return g.handleGlobalError(message, source, lineno, colno, error);\r\n };\r\n },\r\n enableNotifications: () => {\r\n Notify.checkAndRequestPermission();\r\n },\r\n startLayoutListeners: () => {\r\n LayoutListenersUseCase.new().__invoke();\r\n },\r\n };\r\n\r\n static features(actions: Features[]) {\r\n actions.forEach(item => {\r\n const action = this.actions[item];\r\n action();\r\n });\r\n }\r\n}"],"names":["CheckableProcess","StorageProcessKeys","Theme","_a","date","Tabulator","copy","row","this","globalState","close","error","rejectPromise","Swal","update","e","inputValue","ensureIsValidValue_fn","observer"],"mappings":"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","x_google_ignoreList":[18]}
1
+ {"version":3,"file":"kalion-js.es.js","sources":["../../src/app/core/_types/index.ts","../../src/app/core/infrastructure/utilities/general/Constants.ts","../../src/app/core/infrastructure/utilities/_internal/helpers.ts","../../src/app/core/infrastructure/utilities/broadcasting/EchoService.ts","../../src/app/core/infrastructure/utilities/broadcasting/ProcessChecker.ts","../../src/app/core/infrastructure/utilities/broadcasting/Reverb.ts","../../src/app/core/infrastructure/utilities/components/html/Btn.ts","../../src/app/core/infrastructure/utilities/components/html/Icon.ts","../../src/app/core/infrastructure/utilities/components/Component.ts","../../src/app/core/infrastructure/utilities/general/Cookie.ts","../../src/app/core/infrastructure/utilities/general/global.ts","../../src/app/core/infrastructure/utilities/general/Html.ts","../../src/app/core/infrastructure/utilities/general/Instantiable.ts","../../src/app/core/infrastructure/utilities/general/LDate.ts","../../src/app/core/infrastructure/utilities/general/LStorage.ts","../../src/app/core/infrastructure/utilities/general/Mutation.ts","../../src/app/core/infrastructure/utilities/general/Notify.ts","../../src/app/core/infrastructure/utilities/general/Ttable.ts","../../node_modules/sweetalert2/dist/sweetalert2.js","../../src/app/core/infrastructure/utilities/modals/SModal.ts","../../src/app/core/infrastructure/utilities/routing/Route.ts","../../src/app/core/infrastructure/utilities/routing/Url.ts","../../src/app/core/infrastructure/utilities/tests/TestConstants.ts","../../src/app/core/infrastructure/utilities/translation/Translator.ts","../../src/app/core/domain/exceptions/CannotOpenModalException.ts","../../src/app/core/domain/exceptions/CannotOpenModalWarning.ts","../../src/app/core/domain/exceptions/InvalidValueException.ts","../../src/app/core/domain/objects/value-objects/StringVo.ts","../../src/app/core/domain/objects/value-objects/IntVo.ts","../../src/app/core/domain/objects/value-objects/EnumVo.ts","../../src/app/core/domain/services/Test.ts","../../src/app/core/domain/services/DomService.ts","../../src/app/core/domain/services/ThemeSwitcher.ts","../../src/app/core/application/LayoutListenersUseCase.ts","../../src/app/providers/UtilitiesServiceProvider.ts"],"sourcesContent":["import { EventCallBackMethods } from 'tabulator-tables';\r\nimport Echo from 'laravel-echo';\r\n\r\ndeclare global {\r\n interface Window {\r\n Pusher: any;\r\n Echo: Echo<'reverb'>;\r\n }\r\n}\r\n\r\nexport type EnvVariables = {\r\n readonly VITE_CONF_MINIFY?: string;\r\n readonly VITE_CONF_SOURCEMAP?: string;\r\n readonly VITE_CONF_USE_APPCODE_IN_SOURCE_PATH?: string;\r\n\r\n readonly VITE_BROADCASTING_ENABLED?: string; // notInEnv\r\n\r\n readonly VITE_REVERB_APP_KEY?: string; // notInEnv\r\n readonly VITE_REVERB_HOST?: string; // notInEnv\r\n readonly VITE_REVERB_PORT?: string; // notInEnv\r\n readonly VITE_REVERB_SCHEME?: string; // notInEnv\r\n\r\n readonly VITE_APP_ENV?: string;\r\n readonly VITE_APP_NAME?: string;\r\n readonly VITE_APP_CODE?: string;\r\n\r\n readonly VITE_TS_STORAGE_VERSION?: string;\r\n readonly VITE_TS_USE_BOOSTRAP_CLASSES?: string; // notInEnv\r\n}\r\n\r\n// Define una interfaz para la configuración por defecto\r\nexport interface DefaultConstants {\r\n token: string | null;\r\n lang: string;\r\n langDouble: string;\r\n defaultZoneName: string;\r\n appIcon: string;\r\n routeName_checkReverb: string;\r\n routeName_checkQueue: string;\r\n\r\n readonly VITE_BROADCASTING_ENABLED: boolean;\r\n\r\n readonly VITE_REVERB_APP_KEY: string | undefined;\r\n readonly VITE_REVERB_HOST: string;\r\n readonly VITE_REVERB_PORT: number;\r\n readonly VITE_REVERB_SCHEME: string;\r\n\r\n readonly VITE_APP_ENV: string;\r\n readonly VITE_APP_NAME: string;\r\n readonly VITE_APP_CODE: string;\r\n\r\n readonly VITE_TS_STORAGE_VERSION: string;\r\n readonly VITE_TS_USE_BOOSTRAP_CLASSES: boolean;\r\n}\r\n\r\nexport interface Translation {\r\n [key: string]: string;\r\n}\r\n\r\nexport interface DefaultTranslations extends Translation {\r\n save: string;\r\n cancel: string;\r\n delete: string;\r\n move_to: string;\r\n close: string;\r\n detail: string;\r\n copy: string;\r\n search_placeholder: string;\r\n select_placeholder: string;\r\n select_value_placeholder: string;\r\n copied_text: string;\r\n confirm_delete_record_NAME: string;\r\n confirm_delete_FIELD_NAME: string;\r\n record_RECORD_doesnt_exist_in_the_TABLE_table: string;\r\n min_MIN_characters_on_search: string;\r\n add_FIELD: string;\r\n see_FIELD: string;\r\n edit_FIELD_NAME: string;\r\n the_page: string;\r\n cannot_save_an_error: string;\r\n incorrect_blade_format: string;\r\n to_empty: string;\r\n launch: string;\r\n correct: string;\r\n ok: string;\r\n reload_page: string;\r\n unforeseen_error: string;\r\n loading: string;\r\n loading_dots: string;\r\n search: string;\r\n searching_dots: string,\r\n no_results: string,\r\n filter: string;\r\n date: string;\r\n download_completed: string;\r\n fetch_error_message: string;\r\n some_class_does_not_meet_the_INTERFACE_interface_contract: string;\r\n it_has_been_called_a_JS_component_that_does_not_match_the_current_page: string;\r\n need_NUMBER_characters: string;\r\n a_loader_was_expected_on_the_page: string;\r\n check_if_the_loader_was_in_a_div: string;\r\n you_do_not_have_permissions_to_edit: string;\r\n}\r\n\r\nexport enum CheckableProcess {\r\n reverb = \"reverb\",\r\n queue = \"queue\",\r\n}\r\n\r\nexport enum StorageProcessKeys {\r\n reverb = \"reverbFailed\",\r\n queue = \"queueFailed\",\r\n}\r\n\r\nexport interface FetchParams {\r\n url: string;\r\n type?: string;\r\n params?: {};\r\n}\r\n\r\nexport interface FetchParamsSimple {\r\n url: string;\r\n type: string;\r\n}\r\n\r\nexport interface CatchParams {\r\n error: any;\r\n title?: string;\r\n text?: string;\r\n html?: string;\r\n reloadOnClose?: boolean;\r\n footer?: string;\r\n from?: string;\r\n}\r\n\r\nexport type ApiObject = Record<string, any>;\r\nexport type DataType = ApiObject | string;\r\n\r\nexport interface FetchResponse<T = DataType> {\r\n ok: boolean;\r\n success: boolean;\r\n message: string;\r\n data?: T;\r\n}\r\n\r\nexport interface ResponseEventFetch<T = DataType> {\r\n processName: CheckableProcess;\r\n response: FetchResponse<T>;\r\n}\r\n\r\nexport interface FetchBroadcastingResponse<T = DataType> extends FetchResponse {\r\n data: {\r\n broadcasting: FetchResponse<T>,\r\n [p: string]: any\r\n };\r\n}\r\n\r\nexport type FetchResponseOrBroadcasting<T = DataType> = FetchResponse<T> | FetchBroadcastingResponse<T>;\r\n\r\nexport type FetchReturnType<R> = R extends FetchResponse<any> ? R : FetchResponse;\r\n\r\nexport type Nullish = null | undefined;\r\nexport type StrOrNullish = string | Nullish;\r\nexport type StrIntOrNullish = number | StrOrNullish;\r\n\r\nexport type AvailableValidations =\r\n 'optional'\r\n | 'required'\r\n | `min:${number}`\r\n | `max:${number}`\r\n | 'color'\r\n | 'array'\r\n | 'number'\r\n | 'boolean'\r\n | `required_if:${'1' | '0'}`;\r\n\r\nexport type ValidationRules = {\r\n [P: string]: AvailableValidations[] | string | number | boolean | null | undefined;\r\n};\r\n\r\nexport type ValidationResponse = {\r\n success: boolean;\r\n messages: string[];\r\n validated: Record<string, any>;\r\n};\r\n\r\nexport type ValidationInternalData = {\r\n success: boolean[];\r\n messages: string[];\r\n validated: Record<string, any>;\r\n};\r\n\r\nexport type SyncOrAsync<T> = T | Promise<T> | { toPromise: () => T };\r\n\r\nexport type NullHTMLButtonElement = HTMLButtonElement | null;\r\n\r\nexport type TableSettingEvents = Partial<EventCallBackMethods>;\r\n\r\nexport type TranslationReplacements = Record<string, StrOrNullish>;\r\n\r\nexport enum Theme {\r\n dark = \"dark\",\r\n light = \"light\",\r\n system = \"system\",\r\n}\r\n\r\nexport type ThemeButtons = Record<Theme, HTMLElement | null>\r\n\r\nexport type UserPreferences = {\r\n version: string;\r\n theme: Theme;\r\n sidebar_collapsed: boolean;\r\n sidebar_state_per_page: boolean;\r\n};\r\n\r\nexport type ViewData<T> = {\r\n success: boolean;\r\n message: string;\r\n data: T;\r\n};\r\n\r\nexport type Sizes =\r\n '2xs' |\r\n 'xs' |\r\n 'sm' |\r\n 'base' |\r\n 'lg' |\r\n 'lx';\r\n\r\nexport type Colors =\r\n 'blue' |\r\n 'dark' |\r\n 'green' |\r\n 'red' |\r\n 'emerald' |\r\n 'light' |\r\n 'yellow' |\r\n 'gray';\r\n\r\nexport type ConfigBtn = {\r\n id?: string;\r\n size: Sizes;\r\n color: Colors;\r\n slot?: string;\r\n extraClasses?: string;\r\n extraAttributes?: string;\r\n isLink?: boolean;\r\n linkUrl?: string;\r\n linkBlank?: boolean;\r\n};\r\n\r\nexport type ConfigIcon = {\r\n outline?: boolean;\r\n strokeWidth?: string;\r\n size?: string;\r\n};\r\n\r\nexport type ComponentType =\r\n 'btn' |\r\n 'icon';\r\nexport type IconType =\r\n 'info' |\r\n 'save' |\r\n 'cancel' |\r\n 'delete' |\r\n 'new' |\r\n 'reload' |\r\n 'move' |\r\n 'edit';\r\nexport type ComponentName =\r\n `btn` |\r\n `icon.${IconType}`;\r\n\r\n","import { DefaultConstants } from '@/app';\r\n\r\n// Implementa la clase Constants usando la interfaz\r\nexport class Constants<T extends DefaultConstants> {\r\n private static instance: Constants<any>;\r\n public constants: T;\r\n\r\n private constructor() {\r\n // Define valores por defecto\r\n this.constants = {\r\n token: document.querySelector('meta[name=\"csrf-token\"]')?.getAttribute('content') ?? null,\r\n lang: 'es',\r\n langDouble: 'es-Es',\r\n defaultZoneName: 'Europe/Madrid', // Europe/Lisbon\r\n appIcon: new URL('/resources/images/logo-app.png', 'http://localhost/laravel-starter-template/').href,\r\n routeName_checkReverb: 'kalion.ajax.process.checkReverb',\r\n routeName_checkQueue: 'kalion.ajax.process.checkQueue',\r\n\r\n // Vite\r\n VITE_BROADCASTING_ENABLED: false,\r\n\r\n VITE_REVERB_APP_KEY: undefined,\r\n VITE_REVERB_HOST: 'localhost',\r\n VITE_REVERB_PORT: 8080,\r\n VITE_REVERB_SCHEME: 'http',\r\n\r\n VITE_APP_ENV: 'local',\r\n VITE_APP_NAME: 'Laravel',\r\n VITE_APP_CODE: 'laravel',\r\n\r\n VITE_TS_STORAGE_VERSION: '0.0',\r\n VITE_TS_USE_BOOSTRAP_CLASSES: false,\r\n } as T;\r\n }\r\n\r\n // Método para obtener la instancia única de la clase (Singleton)\r\n public static getInstance<U extends DefaultConstants>(): Constants<U> {\r\n if (!Constants.instance) {\r\n Constants.instance = new Constants<U>();\r\n }\r\n return Constants.instance;\r\n }\r\n\r\n // Método estático para obtener el valor de una constante específica\r\n public get<K extends keyof T>(key: K): T[K] {\r\n // return Constants.getInstance().getConstants()[key];\r\n return this.constants[key];\r\n }\r\n\r\n public extend(newConfig: Partial<T>): void {\r\n const filteredNewConfig = Object.fromEntries(\r\n Object.entries(newConfig).filter(([_, value]) => value !== undefined)\r\n );\r\n this.constants = {...this.constants, ...filteredNewConfig};\r\n }\r\n\r\n // Función para obtener todas las constantes de configuración\r\n public getConstants(): T {\r\n return this.constants;\r\n }\r\n}\r\n","import { DefaultConstants, DefaultTranslations, TranslationReplacements, Translator } from '@/app';\r\nimport { Constants } from '@/app/core/infrastructure/utilities/general/Constants';\r\n\r\nexport const __const = <T extends keyof DefaultConstants>(key: T): DefaultConstants[T] => {\r\n return Constants.getInstance().get(key);\r\n};\r\n\r\nexport const ___ = (key: keyof DefaultTranslations, replacements?: TranslationReplacements) => {\r\n return Translator.getInstance().get(key, replacements);\r\n};\r\n","import Echo from 'laravel-echo';\r\nimport Pusher from 'pusher-js';\r\nimport { ProcessChecker } from '@/app';\r\nimport { __const } from '@/app/core/infrastructure/utilities/_internal/helpers';\r\n\r\nexport class EchoService {\r\n static #connectionFailed: boolean | null = null;\r\n static #isStarted = false;\r\n\r\n static start() {\r\n if (!__const('VITE_BROADCASTING_ENABLED')) return;\r\n\r\n // initEcho\r\n\r\n window.Pusher = Pusher;\r\n\r\n window.Echo = new Echo({\r\n broadcaster: 'reverb',\r\n key: __const('VITE_REVERB_APP_KEY'),\r\n wsHost: __const('VITE_REVERB_HOST'),\r\n wsPort: __const('VITE_REVERB_PORT') ?? 80,\r\n wssPort: __const('VITE_REVERB_PORT') ?? 443,\r\n forceTLS: (__const('VITE_REVERB_SCHEME') ?? 'https') === 'https',\r\n enabledTransports: ['ws', 'wss'],\r\n });\r\n\r\n\r\n // initBinds\r\n\r\n const pusherErrorFunction = (error: any, type: string) => {\r\n EchoService.#connectionFailed = true;\r\n console.error(`[-------------------------------------------------------------]`);\r\n console.error(`Ha habido un error en la conexion con los websockets [${type}]:`);\r\n console.error(error);\r\n };\r\n const pusherSuccessFunction = (type: string) => {\r\n EchoService.#connectionFailed = false;\r\n console.info(`[${type}]`);\r\n };\r\n\r\n const echoConnection = window.Echo.connector.pusher.connection;\r\n\r\n // Cambio cualquer estado\r\n echoConnection.bind('state_change', (states: any) => {\r\n console.info(`pusher.connection.state changed to [${states.current}]`);\r\n ProcessChecker.checkReverb().then();\r\n });\r\n\r\n // ------------------------------------------------------------- Estados de ok -------------------------------------------------------------------\r\n\r\n echoConnection.bind('initialized', () => console.info('[initialized]'));\r\n\r\n echoConnection.bind('connecting', () => console.info('[connecting]'));\r\n\r\n echoConnection.bind('connected', () => pusherSuccessFunction('connected'));\r\n\r\n // ----------------------------------------------------------- Estados de error ------------------------------------------------------------------\r\n\r\n echoConnection.bind('error', (error: any) => pusherErrorFunction(error, 'error'));\r\n\r\n echoConnection.bind('failed', (error: any) => pusherErrorFunction(error, 'failed'));\r\n\r\n echoConnection.bind('disconnected', (error: any) => pusherErrorFunction(error, 'disconnected'));\r\n\r\n echoConnection.bind('unavailable', (error: any) => pusherErrorFunction(error, 'unavailable'));\r\n\r\n }\r\n\r\n // -----------------------------------------------------------------------------------------------------------------\r\n // ----- GETTERS AND SETTERS----------------------------------------------------------------------------------------\r\n\r\n static isFailed(): boolean {\r\n return EchoService.#connectionFailed === true;\r\n }\r\n\r\n static checkAndUpdateConnectedStatus() {\r\n if (!EchoService.#isStarted) return;\r\n const echoConnection = window.Echo.connector.pusher.connection;\r\n if (EchoService.#connectionFailed === true && echoConnection.state === 'connected') {\r\n EchoService.#connectionFailed = false;\r\n }\r\n }\r\n}\r\n","import { route } from 'ziggy-js';\r\nimport { __const } from '@/app/core/infrastructure/utilities/_internal/helpers';\r\nimport {\r\n CheckableProcess,\r\n EchoService,\r\n FetchBroadcastingResponse, FetchResponse, FetchResponseOrBroadcasting,\r\n g,\r\n LStorage,\r\n ResponseEventFetch,\r\n StorageProcessKeys,\r\n} from '@/app';\r\n\r\nexport class ProcessChecker\r\n{\r\n public static divMessage = {\r\n reverb: document.querySelector<HTMLDivElement>('#reverbErrorMessage'),\r\n queue: document.querySelector<HTMLDivElement>('#queueErrorMessage'),\r\n };\r\n public static routes = {\r\n reverb: route(__const('routeName_checkReverb')),\r\n queue: route(__const('routeName_checkQueue')),\r\n };\r\n\r\n public static STORAGE = {\r\n reverb: {\r\n isFailed() {\r\n return LStorage.getItem(StorageProcessKeys.reverb) === '1';\r\n },\r\n setAsFailed() {\r\n LStorage.setItem(StorageProcessKeys.reverb, '1');\r\n },\r\n setAsWorked() {\r\n LStorage.setItem(StorageProcessKeys.reverb, '0');\r\n },\r\n },\r\n queue: {\r\n isFailed() {\r\n return LStorage.getItem(StorageProcessKeys.queue) === '1';\r\n },\r\n setAsFailed() {\r\n LStorage.setItem(StorageProcessKeys.queue, '1');\r\n },\r\n setAsWorked() {\r\n LStorage.setItem(StorageProcessKeys.queue, '0');\r\n },\r\n }\r\n };\r\n\r\n public static startBtnListeners() {\r\n document.getElementById('btnCheckReverb')?.addEventListener('click', () => {\r\n ProcessChecker.checkReverb().then();\r\n });\r\n\r\n document.getElementById('btnCheckQueue')?.addEventListener('click', () => {\r\n ProcessChecker.checkQueue().then();\r\n });\r\n }\r\n\r\n public static startListenCheckChannels() {\r\n if (__const('VITE_BROADCASTING_ENABLED')) {\r\n window.Echo.channel('process-status')\r\n .listen('.ProcessStatusChecked', (res: ResponseEventFetch) => {\r\n if (res.response.success) {\r\n ProcessChecker.STORAGE[res.processName].setAsWorked();\r\n } else {\r\n ProcessChecker.STORAGE[res.processName].setAsFailed();\r\n }\r\n\r\n ProcessChecker.displayMessageBasedOnStorage(res.processName);\r\n });\r\n }\r\n }\r\n\r\n public static async checkReverb<T extends FetchBroadcastingResponse>(fromResult: T|undefined = undefined) {\r\n const subMessage = ProcessChecker.divMessage.reverb?.querySelector('#reverbSubmessage');\r\n subMessage?.classList.add(g.getHiddenClass());\r\n await g.sleep(200);\r\n EchoService.checkAndUpdateConnectedStatus();\r\n if (EchoService.isFailed() || !__const('VITE_BROADCASTING_ENABLED')) {\r\n ProcessChecker.STORAGE.reverb.setAsFailed();\r\n ProcessChecker.displayMessageBasedOnStorage(CheckableProcess.reverb);\r\n subMessage?.classList.remove(g.getHiddenClass());\r\n return false;\r\n }\r\n\r\n return await ProcessChecker.checkProcess(CheckableProcess.reverb, fromResult);\r\n }\r\n\r\n public static async checkQueue<T extends FetchBroadcastingResponse>(fromResult: T|undefined = undefined) {\r\n return await ProcessChecker.checkProcess(CheckableProcess.queue, fromResult);\r\n }\r\n\r\n private static async checkProcess(processName: CheckableProcess, fromResult: FetchBroadcastingResponse|undefined) {\r\n let processResult = false;\r\n g.addSpinner(ProcessChecker.divMessage[processName]);\r\n try {\r\n const result = fromResult ?? await g.fetchStrict<FetchResponseOrBroadcasting>({url: ProcessChecker.routes[processName]});\r\n\r\n let success = result.ok && result.success;\r\n\r\n if (typeof result.data === 'object' && result.data?.hasOwnProperty('broadcasting')) {\r\n //throw new Error(`No se ha encontrado la propiedad \"broadcasting\" en la \"response\" al comprobar el proceso \"${processName}\"`);\r\n const broadcasting: FetchResponse = result.data?.broadcasting;\r\n success = broadcasting.ok && broadcasting.success;\r\n }\r\n\r\n if (!success) {\r\n ProcessChecker.STORAGE[processName].setAsFailed();\r\n } else {\r\n ProcessChecker.STORAGE[processName].setAsWorked();\r\n processResult = true;\r\n }\r\n\r\n ProcessChecker.displayMessageBasedOnStorage(processName);\r\n } catch (e) {\r\n g.catchCode({error: e});\r\n }\r\n\r\n g.removeSpinner(ProcessChecker.divMessage[processName]);\r\n return processResult;\r\n }\r\n\r\n public static displayMessageBasedOnStorage(processName: CheckableProcess) {\r\n const hiddenClass = g.getHiddenClass();\r\n if (ProcessChecker.STORAGE[processName].isFailed()) {\r\n ProcessChecker.divMessage[processName]?.classList.remove(hiddenClass);\r\n } else {\r\n ProcessChecker.divMessage[processName]?.classList.add(hiddenClass);\r\n }\r\n }\r\n}","import { __const } from '@/app/core/infrastructure/utilities/_internal/helpers';\r\nimport { CheckableProcess, ProcessChecker } from '@/app';\r\n\r\nexport class Reverb\r\n{\r\n constructor() {\r\n ProcessChecker.startBtnListeners();\r\n ProcessChecker.startListenCheckChannels();\r\n ProcessChecker.displayMessageBasedOnStorage(CheckableProcess.reverb);\r\n ProcessChecker.displayMessageBasedOnStorage(CheckableProcess.queue);\r\n }\r\n\r\n startListenChannel(channelName: string, events: { event: string, callback: Function }[]) {\r\n if (__const('VITE_BROADCASTING_ENABLED')) {\r\n let channel = window.Echo.channel(channelName);\r\n events.forEach(event => {\r\n channel = channel.listen(event.event, (e: any) => {\r\n ProcessChecker.STORAGE.reverb.setAsWorked();\r\n ProcessChecker.displayMessageBasedOnStorage(CheckableProcess.reverb);\r\n event.callback(e);\r\n });\r\n });\r\n }\r\n }\r\n\r\n}","import { Colors, ConfigBtn, g } from '@/app';\r\n\r\ntype getHtmlParams = {\r\n htmlId?: string;\r\n finalClasses: string;\r\n extraAttributes: string;\r\n slot: string;\r\n isLink: boolean;\r\n linkUrl?: string;\r\n linkBlank?: boolean;\r\n};\r\n\r\nexport class Btn {\r\n private static getHtml({\r\n htmlId,\r\n finalClasses,\r\n extraAttributes,\r\n slot,\r\n isLink = false,\r\n linkUrl = '#',\r\n linkBlank,\r\n }: getHtmlParams)\r\n {\r\n return isLink\r\n ? `<a href=\"${linkUrl}\" ${linkBlank ? 'target=\"_blank\"' : ''} ><button class=\"${finalClasses}\">${slot}</button></a>`\r\n : `<button type=\"button\" ${htmlId} class=\"${finalClasses}\" ${extraAttributes}>${slot}</button>`;\r\n }\r\n\r\n static tailwind({id, size = 'base', color = 'blue', slot = '', extraClasses = '', extraAttributes = '', isLink = false, linkUrl, linkBlank}: ConfigBtn): string {\r\n const defaultClasses = 'rounded-lg font-medium focus:outline-none focus:ring-2';\r\n const sizeClasses = {\r\n '2xs': 'px-1.5 py-1 text-xs ',\r\n xs: 'px-3 py-2 text-xs ',\r\n sm: 'px-3 py-2 text-sm ',\r\n base: 'px-5 py-2.5 text-sm ',\r\n lg: 'px-5 py-3 text-base',\r\n lx: 'px-6 py-3.5 text-base',\r\n };\r\n const colorClasses: Record<Colors, string> = {\r\n blue: ' bg-blue-700 text-white hover:bg-blue-800 focus:ring-blue-300 dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800',\r\n dark: ' bg-gray-800 text-white hover:bg-gray-900 focus:ring-gray-300 dark:border-gray-700 dark:bg-gray-800 dark:hover:bg-gray-700 dark:focus:ring-gray-700',\r\n green: ' bg-green-700 text-white hover:bg-green-800 focus:ring-green-300 dark:bg-green-600 dark:hover:bg-green-700 dark:focus:ring-green-800',\r\n red: ' bg-red-700 text-white hover:bg-red-800 focus:ring-red-300 dark:bg-red-600 dark:hover:bg-red-700 dark:focus:ring-red-900',\r\n emerald: ' bg-emerald-600 text-white hover:bg-emerald-700 focus:ring-emerald-300 dark:bg-emerald-500 dark:hover:bg-emerald-700 dark:focus:ring-emerald-900',\r\n light: 'border border-gray-300 bg-white text-gray-900 hover:bg-gray-100 focus:ring-gray-100 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:hover:border-gray-600 dark:hover:bg-gray-700 dark:focus:ring-gray-700',\r\n yellow: ' bg-yellow-400 text-white hover:bg-yellow-500 focus:ring-yellow-300 dark:focus:ring-yellow-900',\r\n gray: ' bg-gray-500 text-white hover:bg-gray-600 focus:ring-gray-300 dark:focus:ring-gray-900',\r\n };\r\n const finalClasses = g.mergeTailwindClasses(`${defaultClasses} ${sizeClasses[size]} ${colorClasses[color]}`, extraClasses);\r\n const htmlId = id ? `id=\"${id}\"` : '';\r\n // return `<button type=\"button\" ${htmlId} class=\"${finalClasses}\" ${extraAttributes}>${slot}</button>`;\r\n return Btn.getHtml({htmlId, finalClasses, extraAttributes, slot, isLink, linkUrl, linkBlank});\r\n }\r\n\r\n static bootstrap({id, size = 'base', color = 'blue', slot = '', extraClasses = '', extraAttributes = '', isLink = false, linkUrl, linkBlank}: ConfigBtn): string {\r\n const defaultClasses = 'btn';\r\n const sizeClasses = {\r\n '2xs': 'btn-xs',\r\n xs: 'btn-xs',\r\n sm: 'btn-sm',\r\n base: '',\r\n lg: 'btn-lg',\r\n lx: 'btn-lg',\r\n };\r\n const colorClasses: Record<Colors, string> = {\r\n blue: 'btn-primary',\r\n dark: 'btn-dark',\r\n green: 'btn-success',\r\n red: 'btn-danger',\r\n emerald: 'btn-info',\r\n light: 'btn-light',\r\n yellow: 'btn-warning',\r\n gray: 'btn-secondary',\r\n };\r\n const finalClasses = `${defaultClasses} ${sizeClasses[size]} ${colorClasses[color]} ${extraClasses}`;\r\n const htmlId = id ? `id=\"${id}\"` : '';\r\n // return `<button type=\"button\" class=\"${finalClasses}\" ${extraAttributes}>${slot}</button>`;\r\n return Btn.getHtml({htmlId, finalClasses, extraAttributes, slot, isLink, linkUrl, linkBlank});\r\n }\r\n}","import { ConfigIcon, IconType } from '@/app';\r\n\r\nexport class Icon {\r\n static tailwind(name: IconType, { outline = false, strokeWidth = '1.5', size = 'size-6' }: ConfigIcon): string {\r\n const icons: Record<IconType, string> = {\r\n info: (outline)\r\n ? `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"${strokeWidth}\" stroke=\"currentColor\" class=\"${size}\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m11.25 11.25.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9-3.75h.008v.008H12V8.25Z\" />\r\n </svg>\r\n `\r\n : `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class=\"${size}\">\r\n <path fill-rule=\"evenodd\" d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm8.706-1.442c1.146-.573 2.437.463 2.126 1.706l-.709 2.836.042-.02a.75.75 0 0 1 .67 1.34l-.04.022c-1.147.573-2.438-.463-2.127-1.706l.71-2.836-.042.02a.75.75 0 1 1-.671-1.34l.041-.022ZM12 9a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Z\" clip-rule=\"evenodd\" />\r\n </svg>\r\n `,\r\n save: (outline)\r\n ? `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"${strokeWidth}\" stroke=\"currentColor\" class=\"${size}\">\r\n <path stroke=\"currentColor\" stroke-linejoin=\"round\" d=\"M4 5a1 1 0 0 1 1-1h11.586a1 1 0 0 1 .707.293l2.414 2.414a1 1 0 0 1 .293.707V19a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V5Z\"/>\r\n <path stroke=\"currentColor\" stroke-linejoin=\"round\" d=\"M8 4h8v4H8V4Zm7 10a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z\"/>\r\n </svg>\r\n `\r\n : `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class=\"${size}\">\r\n <path fill-rule=\"evenodd\" d=\"M5 3a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V7.414A2 2 0 0 0 20.414 6L18 3.586A2 2 0 0 0 16.586 3H5Zm10 11a3 3 0 1 1-6 0 3 3 0 0 1 6 0ZM8 7V5h8v2a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1Z\" clip-rule=\"evenodd\"/>\r\n </svg>\r\n `,\r\n cancel: (outline)\r\n ? `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"${strokeWidth}\" stroke=\"currentColor\" class=\"${size}\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M18.364 18.364A9 9 0 0 0 5.636 5.636m12.728 12.728A9 9 0 0 1 5.636 5.636m12.728 12.728L5.636 5.636\" />\r\n </svg>\r\n `\r\n :\r\n `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class=\"${size}\">\r\n <path fill-rule=\"evenodd\" d=\"m6.72 5.66 11.62 11.62A8.25 8.25 0 0 0 6.72 5.66Zm10.56 12.68L5.66 6.72a8.25 8.25 0 0 0 11.62 11.62ZM5.105 5.106c3.807-3.808 9.98-3.808 13.788 0 3.808 3.807 3.808 9.98 0 13.788-3.807 3.808-9.98 3.808-13.788 0-3.808-3.807-3.808-9.98 0-13.788Z\" clip-rule=\"evenodd\" />\r\n </svg>\r\n `,\r\n delete: (outline)\r\n ? `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"${strokeWidth}\" stroke=\"currentColor\" class=\"${size}\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m14.74 9-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 0 1-2.244 2.077H8.084a2.25 2.25 0 0 1-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 0 0-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 0 1 3.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 0 0-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 0 0-7.5 0\" />\r\n </svg>\r\n `\r\n : `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class=\"${size}\">\r\n <path fill-rule=\"evenodd\" d=\"M16.5 4.478v.227a48.816 48.816 0 0 1 3.878.512.75.75 0 1 1-.256 1.478l-.209-.035-1.005 13.07a3 3 0 0 1-2.991 2.77H8.084a3 3 0 0 1-2.991-2.77L4.087 6.66l-.209.035a.75.75 0 0 1-.256-1.478A48.567 48.567 0 0 1 7.5 4.705v-.227c0-1.564 1.213-2.9 2.816-2.951a52.662 52.662 0 0 1 3.369 0c1.603.051 2.815 1.387 2.815 2.951Zm-6.136-1.452a51.196 51.196 0 0 1 3.273 0C14.39 3.05 15 3.684 15 4.478v.113a49.488 49.488 0 0 0-6 0v-.113c0-.794.609-1.428 1.364-1.452Zm-.355 5.945a.75.75 0 1 0-1.5.058l.347 9a.75.75 0 1 0 1.499-.058l-.346-9Zm5.48.058a.75.75 0 1 0-1.498-.058l-.347 9a.75.75 0 0 0 1.5.058l.345-9Z\" clip-rule=\"evenodd\" />\r\n </svg>\r\n `,\r\n new: (outline)\r\n ? `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"${strokeWidth}\" stroke=\"currentColor\" class=\"${size}\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 9v6m3-3H9m12 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z\" />\r\n </svg>\r\n `\r\n : `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class=\"${size}\">\r\n <path fill-rule=\"evenodd\" d=\"M12 2.25c-5.385 0-9.75 4.365-9.75 9.75s4.365 9.75 9.75 9.75 9.75-4.365 9.75-9.75S17.385 2.25 12 2.25ZM12.75 9a.75.75 0 0 0-1.5 0v2.25H9a.75.75 0 0 0 0 1.5h2.25V15a.75.75 0 0 0 1.5 0v-2.25H15a.75.75 0 0 0 0-1.5h-2.25V9Z\" clip-rule=\"evenodd\" />\r\n </svg>\r\n `,\r\n reload: (outline)\r\n ? `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"${strokeWidth}\" stroke=\"currentColor\" class=\"${size}\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0 3.181 3.183a8.25 8.25 0 0 0 13.803-3.7M4.031 9.865a8.25 8.25 0 0 1 13.803-3.7l3.181 3.182m0-4.991v4.99\" />\r\n </svg>\r\n `\r\n : `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class=\"${size}\">\r\n <path fill-rule=\"evenodd\" d=\"M4.755 10.059a7.5 7.5 0 0 1 12.548-3.364l1.903 1.903h-3.183a.75.75 0 1 0 0 1.5h4.992a.75.75 0 0 0 .75-.75V4.356a.75.75 0 0 0-1.5 0v3.18l-1.9-1.9A9 9 0 0 0 3.306 9.67a.75.75 0 1 0 1.45.388Zm15.408 3.352a.75.75 0 0 0-.919.53 7.5 7.5 0 0 1-12.548 3.364l-1.902-1.903h3.183a.75.75 0 0 0 0-1.5H2.984a.75.75 0 0 0-.75.75v4.992a.75.75 0 0 0 1.5 0v-3.18l1.9 1.9a9 9 0 0 0 15.059-4.035.75.75 0 0 0-.53-.918Z\" clip-rule=\"evenodd\" />\r\n </svg>\r\n `,\r\n move: (outline)\r\n ? `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"${strokeWidth}\" stroke=\"currentColor\" class=\"${size}\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M10.5 6h9.75M10.5 6a1.5 1.5 0 1 1-3 0m3 0a1.5 1.5 0 1 0-3 0M3.75 6H7.5m3 12h9.75m-9.75 0a1.5 1.5 0 0 1-3 0m3 0a1.5 1.5 0 0 0-3 0m-3.75 0H7.5m9-6h3.75m-3.75 0a1.5 1.5 0 0 1-3 0m3 0a1.5 1.5 0 0 0-3 0m-9.75 0h9.75\" />\r\n </svg>\r\n `\r\n : `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class=\"${size}\">\r\n <path d=\"M6 12a.75.75 0 0 1-.75-.75v-7.5a.75.75 0 1 1 1.5 0v7.5A.75.75 0 0 1 6 12ZM18 12a.75.75 0 0 1-.75-.75v-7.5a.75.75 0 0 1 1.5 0v7.5A.75.75 0 0 1 18 12ZM6.75 20.25v-1.5a.75.75 0 0 0-1.5 0v1.5a.75.75 0 0 0 1.5 0ZM18.75 18.75v1.5a.75.75 0 0 1-1.5 0v-1.5a.75.75 0 0 1 1.5 0ZM12.75 5.25v-1.5a.75.75 0 0 0-1.5 0v1.5a.75.75 0 0 0 1.5 0ZM12 21a.75.75 0 0 1-.75-.75v-7.5a.75.75 0 0 1 1.5 0v7.5A.75.75 0 0 1 12 21ZM3.75 15a2.25 2.25 0 1 0 4.5 0 2.25 2.25 0 0 0-4.5 0ZM12 11.25a2.25 2.25 0 1 1 0-4.5 2.25 2.25 0 0 1 0 4.5ZM15.75 15a2.25 2.25 0 1 0 4.5 0 2.25 2.25 0 0 0-4.5 0Z\" />\r\n </svg>\r\n `,\r\n edit: (outline)\r\n ? `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"${strokeWidth}\" stroke=\"currentColor\" class=\"${size}\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m16.862 4.487 1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L10.582 16.07a4.5 4.5 0 0 1-1.897 1.13L6 18l.8-2.685a4.5 4.5 0 0 1 1.13-1.897l8.932-8.931Zm0 0L19.5 7.125M18 14v4.75A2.25 2.25 0 0 1 15.75 21H5.25A2.25 2.25 0 0 1 3 18.75V8.25A2.25 2.25 0 0 1 5.25 6H10\" />\r\n </svg>\r\n `\r\n : `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class=\"${size}\">\r\n <path d=\"M21.731 2.269a2.625 2.625 0 0 0-3.712 0l-1.157 1.157 3.712 3.712 1.157-1.157a2.625 2.625 0 0 0 0-3.712ZM19.513 8.199l-3.712-3.712-8.4 8.4a5.25 5.25 0 0 0-1.32 2.214l-.8 2.685a.75.75 0 0 0 .933.933l2.685-.8a5.25 5.25 0 0 0 2.214-1.32l8.4-8.4Z\" />\r\n <path d=\"M5.25 5.25a3 3 0 0 0-3 3v10.5a3 3 0 0 0 3 3h10.5a3 3 0 0 0 3-3V13.5a.75.75 0 0 0-1.5 0v5.25a1.5 1.5 0 0 1-1.5 1.5H5.25a1.5 1.5 0 0 1-1.5-1.5V8.25a1.5 1.5 0 0 1 1.5-1.5h5.25a.75.75 0 0 0 0-1.5H5.25Z\" />\r\n </svg>\r\n `,\r\n };\r\n return icons[name];\r\n }\r\n\r\n static bootstrap(name: IconType): string {\r\n const icons: Record<IconType, string> = {\r\n info: `<i class=\"fa fa-info-circle\"></i>`,\r\n save: `<i class=\"far fa-save\"></i>`,\r\n cancel: `<i class=\"fa fa-ban\"></i>`,\r\n delete: `<i class=\"fa fa-times\"></i>`,\r\n new: `<i class=\"fas fa-plus-square\"></i>`,\r\n reload: `<i class=\"fa fa-sync-alt\"></i>`,\r\n move: `<i class=\"fas fa-suitcase-rolling\"></i>`,\r\n edit: `<i class=\"far fa-edit\"></i>`,\r\n };\r\n return icons[name];\r\n }\r\n}\r\n","import { Btn, ComponentName, ComponentType, ConfigBtn, ConfigIcon, Icon, IconType } from '@/app';\r\nimport { __const } from '@/app/core/infrastructure/utilities/_internal/helpers';\r\n\r\nexport class Component {\r\n static get<T extends ComponentName>(component: T, config?: T extends `btn` ? ConfigBtn : ConfigIcon): string {\r\n const [type, name] = component.split('.') as [ComponentType, string];\r\n const useBootstrap = __const('VITE_TS_USE_BOOSTRAP_CLASSES');\r\n\r\n if (type === 'btn') {\r\n return useBootstrap ? Btn.bootstrap(config as ConfigBtn) : Btn.tailwind(config as ConfigBtn);\r\n } else if (type === 'icon') {\r\n return useBootstrap ? Icon.bootstrap(name as IconType) : Icon.tailwind(name as IconType, config as ConfigIcon);\r\n }\r\n return '';\r\n }\r\n}","import { g, UserPreferences } from '@/app';\r\nimport { __const } from '@/app/core/infrastructure/utilities/_internal/helpers';\r\n\r\nexport class Cookie {\r\n private cookiePreferencesName: string = g.slugify(__const('VITE_APP_NAME'), '_') + '_kalion_user_preferences';\r\n\r\n static new()\r\n {\r\n return new Cookie();\r\n }\r\n\r\n get(name: string): string | null\r\n {\r\n const cookies = document.cookie.split(\"; \");\r\n const cookie = cookies.find((row) => row.startsWith(`${name}=`));\r\n return cookie ? decodeURIComponent(cookie.split(\"=\")[1]) : null;\r\n }\r\n\r\n set(name: string, value: string, days: number): void\r\n {\r\n const expires = new Date();\r\n expires.setTime(expires.getTime() + days * 24 * 60 * 60 * 1000);\r\n document.cookie = `${name}=${encodeURIComponent(value)}; expires=${expires.toUTCString()}; path=/`;\r\n }\r\n\r\n delete(name: string): void\r\n {\r\n document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/`;\r\n }\r\n\r\n\r\n preferences(): UserPreferences | null\r\n {\r\n const cookieValue = this.get(this.cookiePreferencesName);\r\n return cookieValue ? JSON.parse(cookieValue) : null;\r\n }\r\n\r\n setPreferences(preferences: UserPreferences): void\r\n {\r\n const serializedPreferences = encodeURIComponent(JSON.stringify(preferences));\r\n const expires = new Date(Date.now() + 30 * 24 * 60 * 60 * 1000).toUTCString(); // 30 días\r\n document.cookie = `${this.cookiePreferencesName}=${serializedPreferences}; path=/; expires=${expires}`;\r\n\r\n // Otra opción es atacar al endpoint para que sea el backend el que modifique la cookie:\r\n /*g.fetch({\r\n url: route('kalion.ajax.cookie.update', {_query: {preferences: serializedPreferences}}),\r\n type: 'PUT'\r\n }).then();*/\r\n }\r\n\r\n setPreference<K extends keyof UserPreferences>(key: K, value: UserPreferences[K]): void {\r\n const preferences = this.preferences();\r\n if (preferences !== null) {\r\n preferences[key] = value;\r\n this.setPreferences(preferences);\r\n }\r\n }\r\n}\r\n","import {\r\n CatchParams,\r\n FetchParams, FetchReturnType, SModal,\r\n ValidationInternalData,\r\n ValidationResponse,\r\n ValidationRules,\r\n} from '@/app';\r\nimport { ___, __const } from '@/app/core/infrastructure/utilities/_internal/helpers';\r\n\r\ntype Value = string | string[];\r\ntype Key = string | string[] | null;\r\n\r\nexport class g {\r\n static errorModalIsShowed: boolean = false;\r\n\r\n static isNotNull(variable: any): boolean {\r\n return variable !== null;\r\n }\r\n\r\n static isObject(variable: any): boolean {\r\n return typeof variable === 'object' && variable !== null;\r\n }\r\n\r\n static isUndefined(variable: any): boolean {\r\n return typeof variable === 'undefined';\r\n }\r\n\r\n static escapeHtml(html: string): string {\r\n return html\r\n .replaceAll('&', '&amp;')\r\n .replaceAll('<', '&lt;')\r\n .replaceAll('>', '&gt;')\r\n .replaceAll('\"', '&quot;')\r\n .replaceAll('\\'', '&#039;');\r\n }\r\n\r\n static handleGlobalError(event: Event | string, source?: string, lineno?: number, colno?: number, error?: Error) {\r\n // console.log({event, source, lineno, colno, error,});\r\n // console.log('--------------');\r\n\r\n let message = error?.message;\r\n if (message === undefined && typeof event === 'string') {\r\n message = event;\r\n }\r\n if (message === undefined) {\r\n message = 'No se ha podido obtener ningun mensaje del error';\r\n }\r\n\r\n console.warn(message);\r\n // console.warn({event, source, lineno, colno, error});\r\n\r\n // TODO Canals - mirgrar a Tingle para no pisar otro modal que este abierto: alert(g.escapeHtml(error?.message ?? \"Formato error imprevisto\"));\r\n SModal.errorModal({\r\n title: 'Error imprevisto',\r\n html: `<span class=\"restriction-message\">${g.escapeHtml(message)}</span>`,\r\n cancelButtonText: 'Ok',\r\n }).then(result => {\r\n g.errorModalIsShowed = false;\r\n }).catch(e => {\r\n //\r\n });\r\n g.errorModalIsShowed = true;\r\n return false;\r\n }\r\n\r\n private static async fetchBase<R>({\r\n url,\r\n type = 'GET',\r\n params = undefined,\r\n }: FetchParams, strict: boolean): Promise<FetchReturnType<R>>\r\n {\r\n try {\r\n let fetchParams = {\r\n method: type, // *GET, POST, PUT, DELETE, etc.\r\n headers: {\r\n 'Content-Type': 'application/json', // \"Content-Type\": \"application/x-www-form-urlencoded\",\r\n 'Accept': 'application/json',\r\n 'X-Requested-With': 'XMLHttpRequest',\r\n 'X-CSRF-TOKEN': __const('token'),\r\n },\r\n } as RequestInit;\r\n\r\n if (type !== 'GET' && params !== undefined) {\r\n fetchParams.body = JSON.stringify(params);\r\n }\r\n\r\n const response = await fetch(url, fetchParams);\r\n const result = await response.json() as FetchReturnType<R> | string;\r\n\r\n if (typeof result === 'string') {\r\n const reason = result === '' ? 'El servidor ha devuelto una respuesta vacia' : result;\r\n return Promise.reject(reason);\r\n }\r\n\r\n result.ok = response.ok;\r\n if (strict && !response.ok) {\r\n return Promise.reject(result);\r\n }\r\n\r\n return Promise.resolve(result);\r\n } catch (e) {\r\n console.error('Error con fetch');\r\n return Promise.reject(e);\r\n }\r\n }\r\n\r\n static async fetch<R>({url, type = 'GET', params = undefined}: FetchParams): Promise<FetchReturnType<R>>\r\n {\r\n return await g.fetchBase<R>({url, type, params}, false);\r\n }\r\n\r\n static async fetchStrict<R>({url, type = 'GET', params = undefined}: FetchParams): Promise<FetchReturnType<R>>\r\n {\r\n return await g.fetchBase<R>({url, type, params}, true);\r\n }\r\n\r\n static async fetchString({url, type = 'GET', params = undefined}: FetchParams): Promise<{ok: boolean, text: string}>\r\n {\r\n try {\r\n let fetchParams = {\r\n method: type, // *GET, POST, PUT, DELETE, etc.\r\n headers: {\r\n 'X-Requested-With': 'XMLHttpRequest',\r\n 'X-CSRF-TOKEN': __const('token'),\r\n },\r\n } as RequestInit;\r\n\r\n if (type !== 'GET' && params !== undefined) {\r\n fetchParams.body = JSON.stringify(params);\r\n }\r\n\r\n const response = await fetch(url, fetchParams);\r\n const text = await response.text();\r\n\r\n return Promise.resolve({\r\n ok: response.ok,\r\n text: text,\r\n });\r\n } catch (e) {\r\n console.error('Error con fetch');\r\n return Promise.reject(e);\r\n }\r\n }\r\n\r\n static catchCode({\r\n error,\r\n title = undefined,\r\n text = undefined,\r\n html = undefined,\r\n reloadOnClose = false,\r\n footer = undefined,\r\n from = undefined,\r\n }: CatchParams)\r\n {\r\n console.error(error);\r\n\r\n if (g.errorModalIsShowed) return;\r\n\r\n if (!g.isUndefined(from)) {\r\n console.log('From:', from);\r\n }\r\n\r\n const message = g.getErrorMessage(text, error);\r\n const finalHtml = html\r\n ? html\r\n : `<span class=\"restriction-message\">${g.escapeHtml(message)}</span>`;\r\n\r\n // Abrir modal\r\n SModal.errorModal({\r\n icon: 'error',\r\n title: title,\r\n html: finalHtml,\r\n confirmButtonText: (reloadOnClose) ? ___('reload_page') : ___('ok'),\r\n footer: footer,\r\n }, true)\r\n .then((result) => {\r\n g.errorModalIsShowed = false;\r\n if (reloadOnClose && result.isConfirmed) {\r\n location.reload();\r\n }\r\n });\r\n g.errorModalIsShowed = true;\r\n }\r\n\r\n private static getErrorMessage(text: string|undefined, error: any): string\r\n {\r\n if (text !== undefined) {\r\n return text;\r\n }\r\n if (!g.isObject(error)) {\r\n return error;\r\n }\r\n\r\n return error.hasOwnProperty('message') ? error.message : 'Error imprevisto';\r\n }\r\n\r\n static sleep(ms: number) {\r\n return new Promise(resolve => setTimeout(resolve, ms));\r\n }\r\n\r\n static strIsEmpty(str: any) {\r\n if (typeof str !== 'string') return false;\r\n return !Boolean(str.trim());\r\n }\r\n\r\n static isEmpty(value: any) {\r\n return g.isNullish(value) || g.strIsEmpty(value) || Number.isNaN(value);\r\n }\r\n\r\n static deleteArrayItemsWhere(array: any[], filterFunc: (e: any) => boolean, nameField: string) {\r\n let deleteItems = array.filter(filterFunc);\r\n deleteItems.forEach(deleteItem => array.splice(array.findIndex(item => item[nameField] === deleteItem[nameField]), 1));\r\n return array;\r\n }\r\n\r\n static valueFailsRequiredValidation(value: any) {\r\n // return (!value && value !== 0) || value.length === 0 || /^\\s*$/.test(value)\r\n return value === null || value === undefined || (typeof value === 'string' && value.trim().length === 0);\r\n }\r\n\r\n static validate(data: Record<string, any>, rules: ValidationRules): ValidationResponse {\r\n // creamos el objeto de respuesta\r\n let res: ValidationInternalData = {success: [], messages: [], validated: {}};\r\n\r\n // Recorremos el objeto de Reglas de valicacion\r\n Object.entries(rules).forEach(([key, value]) => {\r\n\r\n if (!Array.isArray(value)) {\r\n res.validated[key] = value;\r\n return;\r\n }\r\n\r\n // Recorremos las reglas de la validacion acual\r\n value.forEach(item => { // item = required, index = 0\r\n\r\n // Separar la regla de los parametros\r\n let arrayItems = item.split(':');\r\n\r\n // Logica segun el tipo de validacion\r\n switch (arrayItems[0]) {\r\n case 'optional':\r\n if (data.hasOwnProperty(key) && data[key] !== undefined) {\r\n res.validated[key] = data[key];\r\n } else {\r\n res.validated[key] = null;\r\n }\r\n break;\r\n case 'required':\r\n if (g.valueFailsRequiredValidation(data[key])) {\r\n res.success.push(false);\r\n res.messages.push(`El campo \"${key}\" es obligatorio`);\r\n } else {\r\n res.validated[key] = data[key];\r\n }\r\n break;\r\n case 'min':\r\n if (data[key]) {\r\n if (data[key].length < parseInt(arrayItems[1])) {\r\n res.success.push(false);\r\n res.messages.push(`El campo \"${key}\" ha de tener como mínimo ${arrayItems[1]} caracteres`);\r\n } else {\r\n res.validated[key] = data[key];\r\n }\r\n }\r\n break;\r\n case 'max':\r\n if (data[key]) {\r\n if (data[key].length > parseInt(arrayItems[1])) {\r\n res.success.push(false);\r\n res.messages.push(`El campo \"${key}\" ha de tener como máximo ${arrayItems[1]} caracteres`);\r\n } else {\r\n res.validated[key] = data[key];\r\n }\r\n }\r\n break;\r\n case 'color':\r\n if (data[key]) {\r\n if (!data[key].match(/^(#[a-fA-F0-9]{6})$/i)) {\r\n res.success.push(false);\r\n res.messages.push(`El campo \"${key}\" ha de tener formato hexadecimal, por ejemplo, #FFCC00`);\r\n } else {\r\n res.validated[key] = data[key];\r\n }\r\n }\r\n break;\r\n case 'array':\r\n if (data[key]) {\r\n if (!Array.isArray(data[key])) {\r\n res.success.push(false);\r\n res.messages.push(`El campo \"${key}\" debe ser un array`);\r\n } else {\r\n res.validated[key] = data[key];\r\n }\r\n }\r\n break;\r\n case 'number':\r\n if (data[key]) {\r\n if (!Number.isInteger(parseInt(data[key]))) {\r\n res.success.push(false);\r\n res.messages.push(`El campo \"${key}\" debe ser un numero`);\r\n } else {\r\n res.validated[key] = data[key];\r\n }\r\n }\r\n break;\r\n case 'boolean':\r\n if (data[key]) {\r\n if (typeof (!!data[key]) !== 'boolean') {\r\n res.success.push(false);\r\n res.messages.push(`El campo \"${key}\" debe ser verdadero o falso`);\r\n } else {\r\n res.validated[key] = data[key];\r\n }\r\n }\r\n break;\r\n case 'required_if':\r\n if (arrayItems[1] === '1' && g.valueFailsRequiredValidation(data[key])) {\r\n res.success.push(false);\r\n res.messages.push(`El campo \"${key}\" es obligatorio en esta situación`);\r\n } else {\r\n res.validated[key] = data[key] ?? null;\r\n }\r\n break;\r\n default:\r\n res.success.push(false);\r\n res.messages.push(`La validación introducida no esta controlada`);\r\n }\r\n });\r\n\r\n });\r\n\r\n return {success: (!res.success.includes(false)), messages: res.messages, validated: res.validated};\r\n }\r\n\r\n static strIncludesAny(str: string, values: string[]) {\r\n let res = false;\r\n values.forEach(value => {\r\n if (str.includes(value)) {\r\n res = true;\r\n }\r\n });\r\n return res;\r\n }\r\n\r\n static eventClosest(event: Event, selectors: string): HTMLElement | null {\r\n return (event?.target as HTMLElement).closest(selectors);\r\n }\r\n\r\n static showPageLoader() {\r\n const body = document.querySelector('body');\r\n body?.classList.add('overlay-body');\r\n // TODO Canals - (tailwind) pasar a componente\r\n body?.insertAdjacentHTML('beforeend', '<div id=\"page-loader\" class=\"overlay\"><div class=\"loader-container\"><div class=\"loader\"></div></div></div>');\r\n }\r\n\r\n static removePageLoader() {\r\n const body = document.querySelector('body');\r\n const loader = document.querySelector('#page-loader');\r\n body?.classList.remove('overlay-body');\r\n loader?.remove();\r\n }\r\n\r\n static reloadPage() {\r\n g.showPageLoader();\r\n location.reload();\r\n }\r\n\r\n static startTooltips() {\r\n import('bootstrap').then(bootstrap => {\r\n const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle=\"tooltip\"]');\r\n const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl));\r\n }).catch(error => {\r\n console.error('Tabulator-tables no está instalado o no se pudo cargar.', error);\r\n });\r\n }\r\n\r\n static addSpinner(selectors: string | HTMLElement | NodeListOf<HTMLElement> | null, size: 'sm' | 'md' = 'md') {\r\n if (selectors === null) return;\r\n\r\n // TODO Canals - (tailwind) pasar a componente\r\n const sizeClass = (size === 'sm') ? 'spinner-border-sm' : '';\r\n const spinnerHtml = `<div class=\"spinner-border ${sizeClass}\" data-added-in=\"general\" role=\"status\"><span class=\"visually-hidden\">Loading...</span></div>`;\r\n if (selectors instanceof HTMLElement) {\r\n selectors.insertAdjacentHTML('afterbegin', spinnerHtml);\r\n } else if (selectors instanceof NodeList) {\r\n selectors.forEach((item) => {\r\n item.insertAdjacentHTML('afterbegin', spinnerHtml);\r\n });\r\n } else {\r\n const elements = document.querySelectorAll<HTMLElement>(selectors);\r\n elements.forEach(item => {\r\n item.insertAdjacentHTML('afterbegin', spinnerHtml);\r\n });\r\n }\r\n }\r\n\r\n static removeSpinner(selectors: string | HTMLElement | NodeListOf<HTMLElement> | null) {\r\n if (selectors === null) return;\r\n\r\n if (selectors instanceof HTMLElement) {\r\n selectors.querySelector('[data-added-in=\"general\"]')?.remove();\r\n } else if (selectors instanceof NodeList) {\r\n selectors.forEach((item) => {\r\n item.querySelector('[data-added-in=\"general\"]')?.remove();\r\n });\r\n } else {\r\n const elements = document.querySelectorAll<HTMLElement>(selectors);\r\n elements.forEach(item => {\r\n item.querySelector('[data-added-in=\"general\"]')?.remove();\r\n });\r\n }\r\n }\r\n\r\n static consoleInfo(message?: any) {\r\n if (message) console.info(`%c INFO - ${message}`, 'background: #222; color: #bada55; padding: 0.5rem');\r\n }\r\n\r\n // Función para comprobar si un valor es truthy\r\n static isTruthy(value: any) {\r\n return !!value;\r\n }\r\n\r\n // Función para comprobar si un valor es falsy\r\n static isFalsy(value: any) {\r\n return !value;\r\n }\r\n\r\n // Función para comprobar si un valor es nullish (null o undefined)\r\n static isNullish(value: any) {\r\n return value === null || value === undefined;\r\n }\r\n\r\n /*static pluck(array: any[], key: string) {\r\n return array.map(i => i[key]);\r\n }\r\n\r\n static pluck(array: Record<any, any>[], value: string, key: string) {\r\n return array.reduce((acc, obj) => {\r\n acc[obj[key]] = obj[value];\r\n return acc;\r\n }, {});\r\n }*/\r\n\r\n static dataGet(target: any, key: Key, defaultValue: any = null): any {\r\n if (key === null) {\r\n return target;\r\n }\r\n\r\n const keys = Array.isArray(key) ? key : key.split('.');\r\n\r\n for (let i = 0; i < keys.length; i++) {\r\n const segment = keys[i];\r\n\r\n if (segment === null) {\r\n return target;\r\n }\r\n\r\n if (segment === '*') {\r\n if (typeof target[Symbol.iterator] !== 'function') {\r\n return defaultValue;\r\n }\r\n\r\n const result: any[] = [];\r\n for (const item of target) {\r\n result.push(g.dataGet(item, keys.slice(i + 1)));\r\n }\r\n return result.flat();\r\n }\r\n\r\n if (target && (typeof target === 'object' || Array.isArray(target)) && segment in target) {\r\n target = target[segment];\r\n } else {\r\n return defaultValue;\r\n }\r\n }\r\n\r\n return target;\r\n }\r\n\r\n static explodePluckParameters(value: Value, key: Key): [Value, Key] {\r\n const valueArray = typeof value === 'string' ? value.split('.') : value;\r\n const keyArray = key === null || Array.isArray(key) ? key : key.split('.');\r\n return [valueArray, keyArray];\r\n }\r\n\r\n\r\n static pluck(array: Record<any, any>[], value: Key): any[];\r\n static pluck(array: Record<any, any>[], value: Key, key: Key): Record<any, any>;\r\n static pluck(array: Record<any, any>[], value: Value, key: Key = null): any {\r\n const results: any = key === null ? [] : {};\r\n [value, key] = g.explodePluckParameters(value, key);\r\n\r\n for (const item of array) {\r\n const itemValue = g.dataGet(item, value);\r\n\r\n if (key === null) {\r\n results.push(itemValue);\r\n } else {\r\n let itemKey = g.dataGet(item, key);\r\n\r\n if (itemKey && typeof itemKey === 'object' && typeof itemKey.toString === 'function') {\r\n itemKey = itemKey.toString();\r\n }\r\n\r\n results[itemKey] = itemValue;\r\n }\r\n }\r\n\r\n return results;\r\n }\r\n\r\n static slugify(text: string, separator: string = '-'): string {\r\n if (!text) return '';\r\n\r\n // Normaliza el texto a formato NFD y remueve los diacríticos\r\n text = text.normalize(\"NFD\").replace(/\\p{Diacritic}/gu, \"\");\r\n\r\n // Convierte a minúsculas, reemplaza caracteres no alfanuméricos con el separador\r\n text = text.toLowerCase()\r\n .replace(/[^a-z0-9]+/g, separator) // Reemplaza caracteres no alfanuméricos por el separador\r\n .replace(new RegExp(`^${separator}|${separator}$`, 'g'), ''); // Elimina separadores extra\r\n\r\n return text;\r\n }\r\n\r\n static getHiddenClass()\r\n {\r\n return __const('VITE_TS_USE_BOOSTRAP_CLASSES') ? 'd-none' : 'hidden';\r\n }\r\n\r\n static mergeTailwindClasses (defaultCls: string, extraCls: string) {\r\n const defaultArray = defaultCls.split(' ').filter(Boolean);\r\n const extraArray = extraCls.split(' ').filter(Boolean);\r\n return [\r\n ...defaultArray.filter(cls => !extraArray.some(extra => extra.startsWith(cls.split('-')[0]))),\r\n ...extraArray\r\n ].join(' ');\r\n }\r\n}\r\n","export class Html {\r\n static compareTailwindClassesHTML(htmlA: string, htmlB: string) {\r\n // Función auxiliar para extraer las clases de un string de clases\r\n function extractClassesFromElement(element: Element) {\r\n const classList = element.getAttribute('class');\r\n return classList ? classList.split(' ').sort().join(' ') : '';\r\n }\r\n\r\n // Función para obtener un array de clases ordenadas de todos los elementos del HTML\r\n function getSortedClassesArray(htmlString: string) {\r\n const parser = new DOMParser();\r\n const doc = parser.parseFromString(htmlString, 'text/html');\r\n const allElements = doc.querySelectorAll('*'); // Selecciona todos los elementos\r\n return Array.from(allElements).map(extractClassesFromElement);\r\n }\r\n\r\n // Obtener las clases de ambos fragmentos HTML\r\n const classesA = getSortedClassesArray(htmlA);\r\n const classesB = getSortedClassesArray(htmlB);\r\n\r\n // Comparar ambos arrays de clases\r\n if (classesA.length !== classesB.length) return false;\r\n return classesA.every((classA, index) => classA === classesB[index]);\r\n }\r\n\r\n static compareHTMLElementsStructure(htmlA: string, htmlB: string) {\r\n // Función auxiliar para obtener los atributos de un elemento como un objeto\r\n function getAttributesMap(element: Element) {\r\n const attributes: Record<string, string> = {};\r\n for (const attr of Array.from(element.attributes)) {\r\n // Omitir la propiedad \"style\"\r\n if (attr.name === 'style') continue;\r\n\r\n // Si el atributo es 'class', ordenamos las clases\r\n if (attr.name === 'class') {\r\n attributes[attr.name] = attr.value.split(' ').sort().join(' ').trim();\r\n } else {\r\n attributes[attr.name] = attr.value.trim();\r\n }\r\n }\r\n return attributes;\r\n }\r\n\r\n // Función auxiliar para comparar dos objetos de atributos\r\n function compareAttributes(attrsA: Record<string, string>, attrsB: Record<string, string>) {\r\n const keysA = Object.keys(attrsA);\r\n const keysB = Object.keys(attrsB);\r\n\r\n // Comparar la cantidad de atributos\r\n if (keysA.length !== keysB.length) return false;\r\n\r\n // Comparar cada atributo y su valor\r\n return keysA.every(key => attrsA[key] === attrsB[key]);\r\n }\r\n\r\n // Función recursiva para comparar dos elementos y su estructura\r\n function compareElements(elementA: Element, elementB: Element) {\r\n // Comparar las etiquetas\r\n if (elementA.tagName !== elementB.tagName) return false;\r\n\r\n // Comparar los atributos\r\n const attrsA = getAttributesMap(elementA);\r\n const attrsB = getAttributesMap(elementB);\r\n if (!compareAttributes(attrsA, attrsB)) return false;\r\n\r\n // Comparar la cantidad de hijos\r\n const childrenA = elementA.children;\r\n const childrenB = elementB.children;\r\n if (childrenA.length !== childrenB.length) return false;\r\n\r\n // Comparar recursivamente los hijos\r\n for (let i = 0; i < childrenA.length; i++) {\r\n if (!compareElements(childrenA[i], childrenB[i])) return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n // Función para obtener el primer elemento del HTML\r\n function getRootElement(htmlString: string) {\r\n const parser = new DOMParser();\r\n const doc = parser.parseFromString(htmlString, 'text/html');\r\n return doc.body.firstElementChild; // Obtener el primer elemento del body\r\n }\r\n\r\n // Obtener los elementos raíz de ambos fragmentos HTML\r\n const rootA = getRootElement(htmlA);\r\n const rootB = getRootElement(htmlB);\r\n\r\n // Verificar que ambos elementos raíz existan\r\n if (!rootA || !rootB) return false;\r\n\r\n // Comparar las estructuras de los dos elementos raíz\r\n return compareElements(rootA, rootB);\r\n }\r\n}","type Constructor<T = {}> = new (...args: any[]) => T;\r\n\r\nexport class Instantiable {\r\n // Método estático para instanciar clases hijas\r\n static new<T extends Constructor>(this: T, ...args: ConstructorParameters<T>): InstanceType<T> {\r\n return new this(...args) as InstanceType<T>;\r\n }\r\n}\r\n","import { DateTime } from 'luxon';\r\nimport { DateTimeUnit } from 'luxon/src/datetime';\r\nimport { DurationObjectUnits } from 'luxon/src/duration';\r\n\r\ntype ReceivedDate = string | DateTime\r\ntype ReceivedNullableDate = string | DateTime | null | undefined\r\n\r\nexport class LDate {\r\n // Consultar formatos en: https://moment.github.io/luxon/#/formatting\r\n static formats = {\r\n date_startYear: 'yyyy-LL-dd',\r\n date_startDay: 'dd-LL-yyyy',\r\n date_startYear_slash: 'yyyy/LL/dd',\r\n date_startDay_slash: 'dd/LL/yyyy',\r\n date_startMonthWithoutDay_slash: 'LL/yyyy',\r\n\r\n datetime_startYear: 'yyyy-LL-dd HH:mm:ss',\r\n datetime_startYear_oneWord: 'yyyyLLdd_HHmmss',\r\n\r\n time: 'HH:mm:ss',\r\n timeWithoutHours: 'mm:ss',\r\n\r\n timestamp_seconds: 'X',\r\n };\r\n\r\n static #isDatetime(date: any) {\r\n return (date instanceof DateTime);\r\n }\r\n\r\n static now() {\r\n return DateTime.now();\r\n }\r\n\r\n static local() {\r\n return DateTime.local();\r\n }\r\n\r\n static parse(date: string) {\r\n return DateTime.fromSQL(date);\r\n }\r\n\r\n static format(date: ReceivedDate, format: string) {\r\n const datetime = (date instanceof DateTime) ? date : LDate.parse(date);\r\n return datetime.toFormat(format);\r\n }\r\n\r\n static toSeconds(date: ReceivedDate) {\r\n return LDate.format(date, LDate.formats.timestamp_seconds);\r\n }\r\n\r\n static hasSame(d1: ReceivedNullableDate, d2: ReceivedNullableDate, unit: DateTimeUnit) {\r\n if (d1 === null || d2 === null || d1 === undefined || d2 === undefined) return false;\r\n d1 = (d1 instanceof DateTime) ? d1 : LDate.parse(d1);\r\n d2 = (d2 instanceof DateTime) ? d2 : LDate.parse(d2);\r\n return d1.hasSame(d2, unit);\r\n }\r\n\r\n static diffNow(date: ReceivedNullableDate, unit: keyof DurationObjectUnits = 'seconds') {\r\n if (date === null || date === undefined) return null;\r\n const d = (date instanceof DateTime) ? date : LDate.parse(date);\r\n return (d.isValid) ? d.diffNow(unit).toObject()[unit] : 0;\r\n }\r\n\r\n static diff(d1: ReceivedNullableDate, d2: ReceivedNullableDate, unit: keyof DurationObjectUnits = 'seconds') {\r\n if (d1 === null || d2 === null || d1 === undefined || d2 === undefined) return null;\r\n const date1 = (d1 instanceof DateTime) ? d1 : LDate.parse(d1);\r\n const date2 = (d2 instanceof DateTime) ? d2 : LDate.parse(d2);\r\n return date1.diff(date2, unit).toObject()[unit];\r\n }\r\n\r\n static getTimeId() {\r\n return LDate.format(LDate.now(), LDate.formats.datetime_startYear_oneWord);\r\n }\r\n}\r\n","import { LDate } from '@/app';\r\nimport { __const } from '@/app/core/infrastructure/utilities/_internal/helpers';\r\n\r\nexport class LStorage {\r\n\r\n static readonly VERSION = __const('VITE_TS_STORAGE_VERSION'); // Cambia este valor para invalidar el localStorage\r\n static readonly VERSION_KEY = 'config-version';\r\n\r\n static setItem(key: string, value: string) {\r\n window.localStorage.setItem(key, value);\r\n }\r\n\r\n static getItem(key: string) {\r\n return window.localStorage.getItem(key);\r\n }\r\n\r\n static removeItem(key: string) {\r\n window.localStorage.removeItem(key);\r\n }\r\n\r\n static exist(key: string) {\r\n return LStorage.getItem(key) !== null;\r\n }\r\n\r\n static checkAndUpdateVersion() {\r\n const savedVersion = localStorage.getItem(LStorage.VERSION_KEY);\r\n if (savedVersion !== LStorage.VERSION) {\r\n localStorage.clear();\r\n localStorage.setItem(LStorage.VERSION_KEY, LStorage.VERSION);\r\n }\r\n }\r\n\r\n\r\n static isFirstConnectionInDay() {\r\n const validSecondsToBeCountedAsTheSameDay = 10;\r\n const lastConn = LStorage.getItem('lastConnection');\r\n const diffNow = LDate.diffNow(lastConn, 'seconds');\r\n return (\r\n !LStorage.exist('lastConnection')\r\n ||\r\n !LDate.hasSame(LDate.now(), lastConn, 'day')\r\n ||\r\n (Math.abs(diffNow ?? 0) < validSecondsToBeCountedAsTheSameDay)\r\n );\r\n }\r\n\r\n static setNowAsLastConnection() {\r\n LStorage.setItem('lastConnection', LDate.toSeconds(LDate.now()));\r\n }\r\n\r\n}\r\n","type MutationParams = {\r\n elementId: string;\r\n class: string;\r\n whenHave: () => void;\r\n whenHavent: () => void;\r\n}\r\n\r\nexport class Mutation {\r\n static observeClass(params: MutationParams) {\r\n let isDrawerOpen: null | boolean = null;\r\n const element = document.getElementById(params.elementId);\r\n\r\n if (element === null) return;\r\n\r\n // Crear un MutationObserver para observar los cambios de atributos\r\n const observer = new MutationObserver((mutations) => {\r\n mutations.forEach((mutation) => {\r\n if (mutation.attributeName === 'class') {\r\n const drawerClosed = element.classList.contains(params.class);\r\n\r\n if (drawerClosed && isDrawerOpen !== false) {\r\n params.whenHave();\r\n isDrawerOpen = false;\r\n } else if (!drawerClosed && isDrawerOpen !== true) {\r\n params.whenHavent();\r\n isDrawerOpen = true;\r\n }\r\n }\r\n });\r\n });\r\n\r\n // Configurar el observer para observar cambios en los atributos\r\n observer.observe(element, {attributes: true});\r\n }\r\n\r\n static observe(targetNode: HTMLElement, options: MutationObserverInit, mutationCallback: () => {})\r\n {\r\n const observer = new MutationObserver((mutations) => {\r\n mutations.forEach(mutationCallback);\r\n });\r\n\r\n // Configurar el observer para observar cambios en los atributos\r\n observer.observe(targetNode, {attributes: true});\r\n }\r\n}\r\n","import { g, LDate, LStorage } from '@/app';\r\nimport { __const } from '@/app/core/infrastructure/utilities/_internal/helpers';\r\n\r\ntype LaunchParams = {\r\n title: string,\r\n body?: string,\r\n openUrl?: string\r\n when: 'hidden' | 'unfocused' | 'all'\r\n}\r\n\r\nexport class Notify {\r\n readonly #title: string;\r\n readonly #body?: string;\r\n readonly #openUrl?: string;\r\n\r\n static STORAGE = {\r\n getAll() {\r\n return LStorage.getItem('notified');\r\n },\r\n check(key: string) {\r\n return LStorage.getItem('notified') === key;\r\n },\r\n saveNotified(key: string) {\r\n LStorage.setItem('notified', key);\r\n },\r\n deleteNotified() {\r\n LStorage.removeItem('notified');\r\n },\r\n };\r\n\r\n constructor(title: string, body?: string, openUrl?: string) {\r\n this.#title = title;\r\n this.#body = body;\r\n this.#openUrl = openUrl;\r\n }\r\n\r\n /*original()\r\n {\r\n // Let's check if the browser supports notifications\r\n if (!(\"Notification\" in window)) {\r\n alert(\"This browser does not support desktop notification\")\r\n }\r\n // Let's check whether notification permissions have already been granted\r\n else if (Notification.permission === \"granted\") {\r\n // If it's okay let's create a notification\r\n this.#createNotification()\r\n }\r\n // Otherwise, we need to ask the user for permission\r\n else if (Notification.permission !== \"denied\") {\r\n Notification.requestPermission().then(r => {\r\n // If the user accepts, let's create a notification\r\n if (r === \"granted\") {\r\n this.#createNotification()\r\n }\r\n });\r\n }\r\n }*/\r\n\r\n #createNotification() {\r\n const notification = new Notification(this.#title, {icon: __const('appIcon'), body: this.#body});\r\n notification.onclick = () => window.open(this.#openUrl);\r\n }\r\n\r\n static checkAndRequestPermission() {\r\n if (!('Notification' in window)) {\r\n alert('This browser does not support desktop notification');\r\n } else if (Notification.permission !== 'denied' && Notification.permission !== 'granted') {\r\n Notification.requestPermission().then();\r\n }\r\n }\r\n\r\n static launch({title = 'titulo', body = undefined, openUrl = undefined, when}: LaunchParams) {\r\n if (when === 'hidden' && document.visibilityState === 'visible') return;\r\n if (when === 'unfocused' && document.hasFocus()) return;\r\n\r\n const id = LDate.getTimeId();\r\n if (Notify.STORAGE.check(id)) {\r\n const rand = Math.floor(Math.random() * 100);\r\n g.consoleInfo(`notificacion evitada: [${id}_${rand}] -> ${body}`);\r\n return;\r\n }\r\n Notify.STORAGE.saveNotified(id);\r\n\r\n const notify = new Notify(title, body, openUrl);\r\n notify.#createNotification();\r\n }\r\n}\r\n","import {\r\n CellComponent,\r\n EventCallBackMethods,\r\n JSONRecord,\r\n LabelValue,\r\n ListEditorParams,\r\n Options,\r\n RowComponent,\r\n TabulatorFull as Tabulator,\r\n} from 'tabulator-tables';\r\nimport {\r\n Component,\r\n FetchParamsSimple,\r\n g,\r\n NullHTMLButtonElement,\r\n SModal,\r\n TableSettingEvents,\r\n ValidationRules,\r\n} from '@/app';\r\n\r\nexport class Ttable {\r\n readonly tableId: string | HTMLElement;\r\n table: Tabulator;\r\n isEditable = false;\r\n readonly orderFieldName: string;\r\n\r\n constructor(tableId: string | HTMLElement, options: Options, settingEvents: TableSettingEvents, orderFieldName?: string) {\r\n this.tableId = tableId;\r\n this.orderFieldName = orderFieldName ?? 'order';\r\n\r\n this.table = new Tabulator(this.tableId, options);\r\n Object.entries(settingEvents).forEach(entry => {\r\n const key = entry[0] as keyof EventCallBackMethods;\r\n const value = entry[1];\r\n this.table.on(key, value);\r\n });\r\n }\r\n\r\n isEditableCell(cell: CellComponent) {\r\n return (cell.getRow().getData().id === undefined) ? true : this.isEditable;\r\n }\r\n\r\n addClassEditableOnEditableCells(row: RowComponent) {\r\n const cells = row.getCells().filter(cell => {\r\n let editable = cell.getColumn().getDefinition().editable;\r\n editable = (typeof editable === 'function') ? editable(cell) : editable;\r\n return editable !== false;\r\n });\r\n cells.forEach((cell) => {\r\n cell.getElement().classList.add('cell-editable');\r\n });\r\n }\r\n\r\n static formatListValuesToLabelValueStructure(values: JSONRecord): LabelValue[] {\r\n const dataArray: LabelValue[] = [];\r\n Object.entries(values).forEach(([key, value]) => {\r\n if (key === 'null' || key === 'undefined' || key === '') return;\r\n const intKey = parseInt(String(key));\r\n dataArray.push({\r\n 'label': String(value),\r\n 'value': (isNaN(intKey)) ? key : intKey,\r\n });\r\n });\r\n return dataArray;\r\n }\r\n\r\n /**\r\n * -----------------------------------------------------------------------------------------------------------------\r\n * ----- VARIABLES Y FUNCIONES GENERICAS Y COFNIGURACIONES PREDETERMINADAS------------------------------------------\r\n */\r\n\r\n static defaultSettings: Options = {\r\n columnDefaults: {\r\n headerSort: false,\r\n headerTooltip: true,\r\n headerSortTristate: true, // permitir quitar ordenacion\r\n },\r\n ajaxConfig: {\r\n headers: {\r\n 'Accept': 'application/json', //tell the server we need JSON back\r\n 'X-Requested-With': 'XMLHttpRequest', //fix to help some frameworks respond correctly to request\r\n 'Content-type': 'application/json; charset=utf-8', //set the character encoding of the request\r\n },\r\n },\r\n layout: 'fitData',\r\n locale: 'es-es',\r\n height: '65vh',\r\n filterMode: 'local',\r\n sortMode: 'local',\r\n columnHeaderSortMulti: true, // ordenacion multiple\r\n sortOrderReverse: true, // ordenacion en el orden en que se pulsan las columnas\r\n pagination: true,\r\n paginationMode: 'local',\r\n paginationSize: 30,\r\n paginationCounter: (pageSize, currentRow, currentPage, totalRows, totalPages) => {\r\n const finalCurrentRow = currentRow + (pageSize - 1);\r\n return `Mostrando ${currentRow} - ${finalCurrentRow} filas de ${totalRows}`;\r\n },\r\n ajaxResponse: (url, params, response) => {\r\n /*let data = response.data;\r\n let regVisibles = (data.per_page < data.total) ? data.per_page : data.total;\r\n let el = document.getElementById(\"footerinfo\");\r\n if (el) {\r\n el.innerHTML = `Mostrando ${regVisibles} de ${data.total}`;\r\n }*/\r\n return response.data; //return data to tabulator\r\n },\r\n footerElement: `<span class=\"mx-1\" id=\"footerinfo\"></span>`,\r\n langs: {\r\n 'es-es': {\r\n 'columns': {\r\n 'name': 'Nombre', //replace the title of column name with the value \"Name\"\r\n },\r\n 'data': {\r\n 'loading': 'Cargando', //data loader text\r\n 'error': 'Error', //data error text\r\n },\r\n 'groups': { //copy for the auto generated item count in group header\r\n 'item': 'elemento', //the singular for item\r\n 'items': 'elementos', //the plural for items\r\n },\r\n 'pagination': {\r\n 'page_size': 'Tamaño de página', //label for the page size select element\r\n 'page_title': 'Mostrar página',//tooltip text for the numeric page button, appears in front of the page number (eg. \"Show Page\" will result in a tool tip of \"Show Page 1\" on the page 1 button)\r\n 'first': 'Primera', //text for the first page button\r\n 'first_title': 'Primera página', //tooltip text for the first page button\r\n 'last': 'Última',\r\n 'last_title': 'Última página',\r\n 'prev': 'Anterior',\r\n 'prev_title': 'Anterior página',\r\n 'next': 'Siguiente',\r\n 'next_title': 'Siguiente página',\r\n 'all': 'Todo',\r\n 'counter': {\r\n 'showing': 'Mostrando',\r\n 'of': 'de',\r\n 'rows': 'filas',\r\n 'pages': 'páginas',\r\n },\r\n },\r\n 'headerFilters': {\r\n 'default': 'filtrar columna...', //default header filter placeholder text\r\n 'columns': {\r\n 'name': 'filtrar nombre...', //replace default header filter text for column name\r\n },\r\n },\r\n },\r\n },\r\n };\r\n\r\n static buttons = {\r\n linkBtnInfo: (title: string, url: string, blank: boolean) => {\r\n // return `<a href=\"${url}\" title=\"${title}\" ${blank ? 'target=\"_blank\"' : ''} ><button class=\"mx-1 btn btn-xs btn-info\"><i class=\"fa fa-info-circle\"></i></button></a>`;\r\n return Component.get('btn', {\r\n size: '2xs',\r\n color: 'emerald',\r\n slot: Component.get('icon.info', {size: 'size-4'}),\r\n extraClasses: 'mx-1',\r\n extraAttributes: `title=\"${title}\"`,\r\n isLink: true,\r\n linkUrl: url,\r\n linkBlank: blank\r\n });\r\n },\r\n linkBtnEdit: (title: string, url: string) => {\r\n // return `<a href=\"${url}\" title=\"${title}\"><button class=\"mx-1 btn btn-xs btn-warning\"><i class=\"far fa-edit\"></i></button></a>`;\r\n return Component.get('btn', {\r\n size: '2xs',\r\n color: 'yellow',\r\n slot: Component.get('icon.edit', {size: 'size-4'}),\r\n extraClasses: 'mx-1',\r\n extraAttributes: `title=\"${title}\"`,\r\n isLink: true,\r\n linkUrl: url,\r\n });\r\n },\r\n linkTextEdit: (title: string, url: string) => {\r\n const icon = Component.get('icon.edit', {size: 'size-4'});\r\n return `<a href=\"${url}\" title=\"${title}\">${icon}</a>`;\r\n },\r\n btnInfo: (title: string) => {\r\n // return `<button class=\"mx-1 btn btn-xs btn-info\" data-action=\"info\" title=\"${title}\"><i class=\"fa fa-info-circle\"></i></button>`;\r\n return Component.get('btn', {\r\n size: '2xs',\r\n color: 'emerald',\r\n slot: Component.get('icon.info', {size: 'size-4'}),\r\n extraClasses: 'mx-1',\r\n extraAttributes: `data-action=\"info\" title=\"${title}\"`,\r\n });\r\n },\r\n btnSave: (title: string, showText = false) => {\r\n // let text = showText ? title : '';\r\n // return `<button class=\"mx-1 btn btn-xs btn-success\" data-action=\"save\" title=\"${title}\"><i class=\"far fa-save\"></i> ${text}</button>`;\r\n const text = showText ? title : '';\r\n const icon = Component.get('icon.save', {size: 'size-4'});\r\n return Component.get('btn', {\r\n size: '2xs',\r\n color: 'green',\r\n slot: `${icon} ${text}`,\r\n extraClasses: 'mx-1',\r\n extraAttributes: `data-action=\"save\" title=\"${title}\"`,\r\n });\r\n },\r\n btnCancel: (title: string, showText = false) => {\r\n // let text = showText ? title : '';\r\n // return `<button class=\"mx-1 btn btn-xs btn-danger\" data-action=\"cancel\" title=\"${title}\"><i class=\"fa fa-ban\" aria-hidden=\"true\"></i> ${text}</button>`;\r\n const text = showText ? title : '';\r\n const icon = Component.get('icon.cancel', {size: 'size-4', outline: true, strokeWidth: '3'});\r\n return Component.get('btn', {\r\n size: '2xs',\r\n color: 'red',\r\n slot: `${icon} ${text}`,\r\n extraClasses: 'mx-1',\r\n extraAttributes: `data-action=\"cancel\" title=\"${title}\"`,\r\n });\r\n },\r\n btnDelete: (title: string, showText = false) => {\r\n // let text = showText ? title : '';\r\n // return `<button class=\"mx-1 btn btn-xs btn-danger\" data-action=\"delete\" title=\"${title}\"><i class=\"fa fa-times\"></i> ${text}</button>`;\r\n const text = showText ? title : '';\r\n const icon = Component.get('icon.delete', {size: 'size-4'});\r\n return Component.get('btn', {\r\n size: '2xs',\r\n color: 'red',\r\n slot: `${icon} ${text}`,\r\n extraClasses: 'mx-1',\r\n extraAttributes: `data-action=\"delete\" title=\"${title}\"`,\r\n });\r\n },\r\n btnEdit: (title: string, showText = false) => {\r\n const text = showText ? title : '';\r\n const icon = Component.get('icon.edit', {size: 'size-4'});\r\n return Component.get('btn', {\r\n size: '2xs',\r\n color: 'yellow',\r\n slot: `${icon} ${text}`,\r\n extraClasses: 'mx-1',\r\n extraAttributes: `data-action=\"edit\" title=\"${title}\"`,\r\n });\r\n },\r\n btnNew: (title: string, id?: string) => {\r\n // const htmlId = (id === undefined) ? '' : `id=\"${id}\"`;\r\n // return `<button ${htmlId} class=\"mx-1 btn btn-xs btn-primary\" data-action=\"new\" title=\"${title}\"><i class=\"fas fa-plus-square\"></i></button>`;\r\n const icon = Component.get('icon.new', {size: 'size-4'});\r\n return Component.get('btn', {\r\n id: id,\r\n size: '2xs',\r\n color: 'blue',\r\n slot: `${icon}`,\r\n extraClasses: 'mx-1',\r\n extraAttributes: `data-action=\"new\" title=\"${title}\"`,\r\n });\r\n },\r\n btnReload: (title: string) => {\r\n // return `<a href=\"${url}\" title=\"${title}\"><button class=\"mx-1 btn btn-xs btn-info\"><i class=\"fas fa-sync-alt\"></i></button></a>`;\r\n // return `<button class=\"mx-1 btn btn-xs btn-info\" data-action=\"reload\" title=\"${title}\"><i class=\"fa fa-sync-alt\"></i></button>`;\r\n const icon = Component.get('icon.reload', {size: 'size-4'});\r\n return Component.get('btn', {\r\n size: '2xs',\r\n color: 'emerald',\r\n slot: `${icon}`,\r\n extraClasses: 'mx-1',\r\n extraAttributes: `data-action=\"reload\" title=\"${title}\"`,\r\n });\r\n },\r\n btnMove: (title: string) => {\r\n // return `<button class=\"mx-1 btn btn-xs btn-secondary\" data-action=\"move\" title=\"${title}\"><i class=\"fas fa-suitcase-rolling\"></i></button>`;\r\n const icon = Component.get('icon.move', {size: 'size-4'});\r\n return Component.get('btn', {\r\n size: '2xs',\r\n color: 'gray',\r\n slot: `${icon}`,\r\n extraClasses: 'mx-1',\r\n extraAttributes: `data-action=\"move\" title=\"${title}\"`,\r\n });\r\n },\r\n };\r\n\r\n /*-----formatterParams-----------------------------------------------------------------------------------------------*/\r\n\r\n static formatterParams_lookupBoolean = {undefined: '', null: '', 0: 'No', 1: 'Si'};\r\n\r\n static formatterParams_lookupSimple(values: JSONRecord): JSONRecord {\r\n const copy = Object.assign({}, values);\r\n copy['undefined'] = '';\r\n copy['null'] = '';\r\n return copy;\r\n }\r\n\r\n /*-----editorParams-----------------------------------------------------------------------------------------------*/\r\n\r\n static defaultListEditorParams: ListEditorParams = {\r\n //Value Options (You should use ONE of these per editor)\r\n // values: {1: \"TEST AS21 PRO\", 25: \"TEST MCA\"}, //an array of values or value/label objects\r\n // valuesURL: \"http://myvalues.com\", //a url to load the values from\r\n // valuesLookup:\"active\", //get the values from the currently active rows in this column\r\n\r\n clearable: true,\r\n\r\n verticalNavigation: 'hybrid', //navigate to new row when at the top or bottom of the selection list\r\n maxWidth: true, //prevent width of list item from exceeding width of cell\r\n placeholderLoading: 'Loading list...', // set custom placeholder when loading list values\r\n placeholderEmpty: 'No Results Found', // set custom placeholder when list is empty\r\n\r\n //Select Options (only available when autocomplete:false)\r\n // multiselect: true, //allow selection of multiple items from the list\r\n\r\n //Autocomplete Options (only available when autocomplete:true)\r\n autocomplete: true, //enable autocomplete mode,\r\n // filterRemote: true, //pass filter term to remote server in request instead of filtering\r\n // filterDelay: 500, //delay in milliseconds after typing before filter begins\r\n listOnEmpty: true,\r\n // freetext:true, //allow the user to set the value of the cell to a free text entry\r\n };\r\n\r\n static editorParams_listBoolean: ListEditorParams = {\r\n ...Ttable.defaultListEditorParams,\r\n clearable: false,\r\n autocomplete: false,\r\n listOnEmpty: undefined,\r\n allowEmpty: false,\r\n values: [{label: 'No', value: 0}, {label: 'Si', value: 1}],\r\n };\r\n\r\n static editorParams_list(values: JSONRecord, {searchable} = {searchable: true}): ListEditorParams {\r\n return {\r\n ...Ttable.defaultListEditorParams,\r\n autocomplete: searchable,\r\n listOnEmpty: (!searchable) ? undefined : true,\r\n allowEmpty: false,\r\n values: Ttable.formatListValuesToLabelValueStructure(values),\r\n };\r\n }\r\n\r\n static editorParams_listFix(values: JSONRecord): ListEditorParams {\r\n return {\r\n ...Ttable.defaultListEditorParams,\r\n clearable: false,\r\n autocomplete: false,\r\n listOnEmpty: undefined,\r\n allowEmpty: false,\r\n values: Ttable.formatListValuesToLabelValueStructure(values),\r\n };\r\n }\r\n\r\n static editorParams_listBig(values: JSONRecord): ListEditorParams {\r\n return {\r\n ...Ttable.defaultListEditorParams,\r\n listOnEmpty: false,\r\n allowEmpty: true,\r\n filterFunc: (term, label, value, item) => { //replace built in filter function with custom\r\n /*term - the string being searched for\r\n label - the text lable for the item\r\n value - the value for the item\r\n item - the original value object for the item\r\n const res = label.includes(`/.*${term}.*!/`)*/\r\n if (term.length < 3) return false;\r\n return String(label).toLowerCase().indexOf(String(term).toLowerCase()) > -1;\r\n },\r\n values: Ttable.formatListValuesToLabelValueStructure(values),\r\n };\r\n }\r\n\r\n /*-----headerFilterParams-----------------------------------------------------------------------------------------*/\r\n\r\n static headerFilterParams_listBoolean = {values: {0: 'No', 1: 'Si'}};\r\n\r\n static headerFilterParams_listSimple(values: JSONRecord | any[]): ListEditorParams {\r\n return {values: values};\r\n }\r\n\r\n static headerFilterParams_listBig(values: JSONRecord): ListEditorParams {\r\n return {\r\n ...Ttable.defaultListEditorParams,\r\n listOnEmpty: false,\r\n allowEmpty: true,\r\n values: values,\r\n };\r\n }\r\n\r\n\r\n /**\r\n * -----------------------------------------------------------------------------------------------------------------\r\n * ----- OTRAS FUNCIONES -------------------------------------------------------------------------------------------\r\n */\r\n\r\n defaultListenerBtnEdit(btnEdit: NullHTMLButtonElement, btnCancelEdit: NullHTMLButtonElement) {\r\n const hiddenClass = g.getHiddenClass();\r\n btnEdit?.classList.add(hiddenClass);\r\n btnCancelEdit?.classList.remove(hiddenClass);\r\n this.isEditable = true;\r\n this.table.redraw(true);\r\n }\r\n\r\n defaultListenerBtnCancel(btnEdit: NullHTMLButtonElement, btnCancelEdit: NullHTMLButtonElement) {\r\n const hiddenClass = g.getHiddenClass();\r\n btnCancelEdit?.classList.add(hiddenClass);\r\n btnEdit?.classList.remove(hiddenClass);\r\n this.isEditable = false;\r\n this.table.replaceData().then();\r\n // this.table.redraw(true);\r\n }\r\n\r\n defaultListenerBtnAddRow(data = {}) {\r\n this.table.addRow(data, true).then();\r\n }\r\n\r\n async saveDataOnRowMovedEvent(row: RowComponent, {url, type}: FetchParamsSimple) {\r\n try {\r\n //row - row component\r\n let newData = row.getTable().getData();\r\n newData = newData.map((item, key) => {\r\n item[this.orderFieldName] = key + 1;\r\n return item;\r\n });\r\n const result = await g.fetch({url: url, type: type, params: {rowsTabulator: newData}});\r\n SModal.toastInfo({icon: (result.success && result.ok) ? 'success' : 'error', title: result.message}).then();\r\n this.table.replaceData().then();\r\n } catch (e) {\r\n g.catchCode({error: e});\r\n }\r\n }\r\n\r\n // TODO canals - ¿hacer estatica?\r\n changeColorsOnRowMovedEvent(row: RowComponent): Promise<{ isEdited: boolean }> {\r\n const position = row.getPosition();\r\n const data = row.getTable().getData() as Record<any, any>[];\r\n if (!position) Promise.reject('No se ha encontrado la posicion').then();\r\n\r\n // Recorrer todas las filas para valorar su color en ese momento\r\n let isEdited = false;\r\n const rows = row.getTable().getRows();\r\n rows.forEach(row => {\r\n const currentRowPosition = row.getPosition();\r\n if (!currentRowPosition) return;\r\n\r\n // Si la fila actual es la movida y su posicion es diferente a la guardada -> pintar fondo fila\r\n if (position === currentRowPosition && position !== data[position - 1][this.orderFieldName]) {\r\n row.getElement().classList.add('last-row-moved');\r\n } else {\r\n row.getElement().classList.remove('last-row-moved');\r\n }\r\n\r\n // Si la posicion de la fila actual es diferente a la guardada -> pintar fondo celda\r\n const cell = row.getCells()[1];\r\n if (currentRowPosition !== data[currentRowPosition - 1][this.orderFieldName]) {\r\n cell.getElement().classList.add('cell-position-changed');\r\n isEdited = true;\r\n } else {\r\n cell.getElement().classList.remove('cell-position-changed');\r\n }\r\n });\r\n\r\n return Promise.resolve({isEdited});\r\n }\r\n\r\n async saveOrderOfAllData({url, type}: FetchParamsSimple) {\r\n const arrayTabulator = this.table.getData();\r\n arrayTabulator.map((item, index) => {\r\n item[this.orderFieldName] = index + 1;\r\n return item;\r\n });\r\n\r\n try {\r\n // Ajax to launch Status/Mitigation\r\n const actionResult = await g.fetch({url, type, params: {rowsTabulator: arrayTabulator}});\r\n\r\n // Check if result is wrong and update modal content\r\n if (!actionResult.success || !actionResult.ok) {\r\n SModal.errorModal({html: actionResult.message}).then();\r\n return;\r\n }\r\n\r\n SModal.toastSuccess({title: actionResult.message}).then();\r\n this.table.replaceData().then();\r\n } catch (err) {\r\n g.catchCode({error: err});\r\n }\r\n }\r\n\r\n static async defaultActionSave(cell: CellComponent, url: string, rules: ValidationRules, preventReplaceData = false): Promise<boolean> {\r\n const cellData = cell.getData();\r\n const type = (cellData.id) ? 'PUT' : 'POST';\r\n\r\n let validation = g.validate(cellData, rules);\r\n if (!validation.success) {\r\n SModal.errorModal({html: validation.messages.join('<br>')}).then();\r\n return false;\r\n }\r\n\r\n try {\r\n const result = await g.fetch({url: url, type: type, params: validation.validated});\r\n const success = result.success && result.ok;\r\n if (success) {\r\n SModal.toastSuccess({title: result.message}).then();\r\n if (!preventReplaceData) cell.getTable().replaceData().then();\r\n } else {\r\n SModal.errorModal({html: result.message}).then();\r\n }\r\n return success;\r\n } catch (e) {\r\n g.catchCode({error: e});\r\n return false;\r\n }\r\n }\r\n\r\n static async defaultActionDelete(cell: CellComponent, url: string, {\r\n title = 'Eliminar',\r\n html = undefined,\r\n preventReplaceData = false,\r\n }: { title?: string, html?: string, preventReplaceData?: boolean }): Promise<boolean> {\r\n try {\r\n const resultModal = await SModal.confirmModal({title: title, html: html});\r\n if (!resultModal.isConfirmed) {\r\n return false;\r\n }\r\n\r\n let result: boolean;\r\n try {\r\n const resultDelete = await g.fetch({url: url, type: 'DELETE'});\r\n const success = resultDelete.success && resultDelete.ok;\r\n if (success) {\r\n SModal.toastSuccess({title: resultDelete.message}).then();\r\n } else {\r\n SModal.errorModal({html: resultDelete.message}).then();\r\n }\r\n result = success;\r\n } catch (e) {\r\n g.catchCode({error: e});\r\n result = false;\r\n }\r\n if (!preventReplaceData) cell.getTable().replaceData().then();\r\n return result;\r\n } catch (e) {\r\n g.catchCode({error: e});\r\n return false;\r\n }\r\n }\r\n\r\n static defaultActionCancel(cell: CellComponent) {\r\n cell.getRow().delete().then();\r\n }\r\n\r\n defaultFormatterCellActions(cell: CellComponent) {\r\n let strBtns = '';\r\n if (cell.getData().id === undefined) {\r\n strBtns += Ttable.buttons.btnSave('Guardar');\r\n strBtns += Ttable.buttons.btnCancel('Cancelar');\r\n return strBtns;\r\n }\r\n\r\n if (this.isEditable) {\r\n strBtns += Ttable.buttons.btnSave('Guardar');\r\n strBtns += Ttable.buttons.btnDelete('Eliminar');\r\n }\r\n return strBtns;\r\n }\r\n\r\n static customFormatterLookup(cell: CellComponent, formatterParams: Record<any, any>): string {\r\n return formatterParams[cell.getValue()];\r\n }\r\n\r\n static getObjectWithThisValue(__this: any): {} {\r\n return {_this: __this};\r\n }\r\n}\r\n","/*!\n* sweetalert2 v11.22.0\n* Released under the MIT License.\n*/\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Sweetalert2 = factory());\n})(this, (function () { 'use strict';\n\n function _assertClassBrand(e, t, n) {\n if (\"function\" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n;\n throw new TypeError(\"Private element is not present on this object\");\n }\n function _checkPrivateRedeclaration(e, t) {\n if (t.has(e)) throw new TypeError(\"Cannot initialize the same private elements twice on an object\");\n }\n function _classPrivateFieldGet2(s, a) {\n return s.get(_assertClassBrand(s, a));\n }\n function _classPrivateFieldInitSpec(e, t, a) {\n _checkPrivateRedeclaration(e, t), t.set(e, a);\n }\n function _classPrivateFieldSet2(s, a, r) {\n return s.set(_assertClassBrand(s, a), r), r;\n }\n\n const RESTORE_FOCUS_TIMEOUT = 100;\n\n /** @type {GlobalState} */\n const globalState = {};\n const focusPreviousActiveElement = () => {\n if (globalState.previousActiveElement instanceof HTMLElement) {\n globalState.previousActiveElement.focus();\n globalState.previousActiveElement = null;\n } else if (document.body) {\n document.body.focus();\n }\n };\n\n /**\n * Restore previous active (focused) element\n *\n * @param {boolean} returnFocus\n * @returns {Promise<void>}\n */\n const restoreActiveElement = returnFocus => {\n return new Promise(resolve => {\n if (!returnFocus) {\n return resolve();\n }\n const x = window.scrollX;\n const y = window.scrollY;\n globalState.restoreFocusTimeout = setTimeout(() => {\n focusPreviousActiveElement();\n resolve();\n }, RESTORE_FOCUS_TIMEOUT); // issues/900\n\n window.scrollTo(x, y);\n });\n };\n\n const swalPrefix = 'swal2-';\n\n /**\n * @typedef {Record<SwalClass, string>} SwalClasses\n */\n\n /**\n * @typedef {'success' | 'warning' | 'info' | 'question' | 'error'} SwalIcon\n * @typedef {Record<SwalIcon, string>} SwalIcons\n */\n\n /** @type {SwalClass[]} */\n const classNames = ['container', 'shown', 'height-auto', 'iosfix', 'popup', 'modal', 'no-backdrop', 'no-transition', 'toast', 'toast-shown', 'show', 'hide', 'close', 'title', 'html-container', 'actions', 'confirm', 'deny', 'cancel', 'footer', 'icon', 'icon-content', 'image', 'input', 'file', 'range', 'select', 'radio', 'checkbox', 'label', 'textarea', 'inputerror', 'input-label', 'validation-message', 'progress-steps', 'active-progress-step', 'progress-step', 'progress-step-line', 'loader', 'loading', 'styled', 'top', 'top-start', 'top-end', 'top-left', 'top-right', 'center', 'center-start', 'center-end', 'center-left', 'center-right', 'bottom', 'bottom-start', 'bottom-end', 'bottom-left', 'bottom-right', 'grow-row', 'grow-column', 'grow-fullscreen', 'rtl', 'timer-progress-bar', 'timer-progress-bar-container', 'scrollbar-measure', 'icon-success', 'icon-warning', 'icon-info', 'icon-question', 'icon-error', 'draggable', 'dragging'];\n const swalClasses = classNames.reduce((acc, className) => {\n acc[className] = swalPrefix + className;\n return acc;\n }, /** @type {SwalClasses} */{});\n\n /** @type {SwalIcon[]} */\n const icons = ['success', 'warning', 'info', 'question', 'error'];\n const iconTypes = icons.reduce((acc, icon) => {\n acc[icon] = swalPrefix + icon;\n return acc;\n }, /** @type {SwalIcons} */{});\n\n const consolePrefix = 'SweetAlert2:';\n\n /**\n * Capitalize the first letter of a string\n *\n * @param {string} str\n * @returns {string}\n */\n const capitalizeFirstLetter = str => str.charAt(0).toUpperCase() + str.slice(1);\n\n /**\n * Standardize console warnings\n *\n * @param {string | string[]} message\n */\n const warn = message => {\n console.warn(`${consolePrefix} ${typeof message === 'object' ? message.join(' ') : message}`);\n };\n\n /**\n * Standardize console errors\n *\n * @param {string} message\n */\n const error = message => {\n console.error(`${consolePrefix} ${message}`);\n };\n\n /**\n * Private global state for `warnOnce`\n *\n * @type {string[]}\n * @private\n */\n const previousWarnOnceMessages = [];\n\n /**\n * Show a console warning, but only if it hasn't already been shown\n *\n * @param {string} message\n */\n const warnOnce = message => {\n if (!previousWarnOnceMessages.includes(message)) {\n previousWarnOnceMessages.push(message);\n warn(message);\n }\n };\n\n /**\n * Show a one-time console warning about deprecated params/methods\n *\n * @param {string} deprecatedParam\n * @param {string?} useInstead\n */\n const warnAboutDeprecation = (deprecatedParam, useInstead = null) => {\n warnOnce(`\"${deprecatedParam}\" is deprecated and will be removed in the next major release.${useInstead ? ` Use \"${useInstead}\" instead.` : ''}`);\n };\n\n /**\n * If `arg` is a function, call it (with no arguments or context) and return the result.\n * Otherwise, just pass the value through\n *\n * @param {Function | any} arg\n * @returns {any}\n */\n const callIfFunction = arg => typeof arg === 'function' ? arg() : arg;\n\n /**\n * @param {any} arg\n * @returns {boolean}\n */\n const hasToPromiseFn = arg => arg && typeof arg.toPromise === 'function';\n\n /**\n * @param {any} arg\n * @returns {Promise<any>}\n */\n const asPromise = arg => hasToPromiseFn(arg) ? arg.toPromise() : Promise.resolve(arg);\n\n /**\n * @param {any} arg\n * @returns {boolean}\n */\n const isPromise = arg => arg && Promise.resolve(arg) === arg;\n\n /**\n * Gets the popup container which contains the backdrop and the popup itself.\n *\n * @returns {HTMLElement | null}\n */\n const getContainer = () => document.body.querySelector(`.${swalClasses.container}`);\n\n /**\n * @param {string} selectorString\n * @returns {HTMLElement | null}\n */\n const elementBySelector = selectorString => {\n const container = getContainer();\n return container ? container.querySelector(selectorString) : null;\n };\n\n /**\n * @param {string} className\n * @returns {HTMLElement | null}\n */\n const elementByClass = className => {\n return elementBySelector(`.${className}`);\n };\n\n /**\n * @returns {HTMLElement | null}\n */\n const getPopup = () => elementByClass(swalClasses.popup);\n\n /**\n * @returns {HTMLElement | null}\n */\n const getIcon = () => elementByClass(swalClasses.icon);\n\n /**\n * @returns {HTMLElement | null}\n */\n const getIconContent = () => elementByClass(swalClasses['icon-content']);\n\n /**\n * @returns {HTMLElement | null}\n */\n const getTitle = () => elementByClass(swalClasses.title);\n\n /**\n * @returns {HTMLElement | null}\n */\n const getHtmlContainer = () => elementByClass(swalClasses['html-container']);\n\n /**\n * @returns {HTMLElement | null}\n */\n const getImage = () => elementByClass(swalClasses.image);\n\n /**\n * @returns {HTMLElement | null}\n */\n const getProgressSteps = () => elementByClass(swalClasses['progress-steps']);\n\n /**\n * @returns {HTMLElement | null}\n */\n const getValidationMessage = () => elementByClass(swalClasses['validation-message']);\n\n /**\n * @returns {HTMLButtonElement | null}\n */\n const getConfirmButton = () => (/** @type {HTMLButtonElement} */elementBySelector(`.${swalClasses.actions} .${swalClasses.confirm}`));\n\n /**\n * @returns {HTMLButtonElement | null}\n */\n const getCancelButton = () => (/** @type {HTMLButtonElement} */elementBySelector(`.${swalClasses.actions} .${swalClasses.cancel}`));\n\n /**\n * @returns {HTMLButtonElement | null}\n */\n const getDenyButton = () => (/** @type {HTMLButtonElement} */elementBySelector(`.${swalClasses.actions} .${swalClasses.deny}`));\n\n /**\n * @returns {HTMLElement | null}\n */\n const getInputLabel = () => elementByClass(swalClasses['input-label']);\n\n /**\n * @returns {HTMLElement | null}\n */\n const getLoader = () => elementBySelector(`.${swalClasses.loader}`);\n\n /**\n * @returns {HTMLElement | null}\n */\n const getActions = () => elementByClass(swalClasses.actions);\n\n /**\n * @returns {HTMLElement | null}\n */\n const getFooter = () => elementByClass(swalClasses.footer);\n\n /**\n * @returns {HTMLElement | null}\n */\n const getTimerProgressBar = () => elementByClass(swalClasses['timer-progress-bar']);\n\n /**\n * @returns {HTMLElement | null}\n */\n const getCloseButton = () => elementByClass(swalClasses.close);\n\n // https://github.com/jkup/focusable/blob/master/index.js\n const focusable = `\n a[href],\n area[href],\n input:not([disabled]),\n select:not([disabled]),\n textarea:not([disabled]),\n button:not([disabled]),\n iframe,\n object,\n embed,\n [tabindex=\"0\"],\n [contenteditable],\n audio[controls],\n video[controls],\n summary\n`;\n /**\n * @returns {HTMLElement[]}\n */\n const getFocusableElements = () => {\n const popup = getPopup();\n if (!popup) {\n return [];\n }\n /** @type {NodeListOf<HTMLElement>} */\n const focusableElementsWithTabindex = popup.querySelectorAll('[tabindex]:not([tabindex=\"-1\"]):not([tabindex=\"0\"])');\n const focusableElementsWithTabindexSorted = Array.from(focusableElementsWithTabindex)\n // sort according to tabindex\n .sort((a, b) => {\n const tabindexA = parseInt(a.getAttribute('tabindex') || '0');\n const tabindexB = parseInt(b.getAttribute('tabindex') || '0');\n if (tabindexA > tabindexB) {\n return 1;\n } else if (tabindexA < tabindexB) {\n return -1;\n }\n return 0;\n });\n\n /** @type {NodeListOf<HTMLElement>} */\n const otherFocusableElements = popup.querySelectorAll(focusable);\n const otherFocusableElementsFiltered = Array.from(otherFocusableElements).filter(el => el.getAttribute('tabindex') !== '-1');\n return [...new Set(focusableElementsWithTabindexSorted.concat(otherFocusableElementsFiltered))].filter(el => isVisible$1(el));\n };\n\n /**\n * @returns {boolean}\n */\n const isModal = () => {\n return hasClass(document.body, swalClasses.shown) && !hasClass(document.body, swalClasses['toast-shown']) && !hasClass(document.body, swalClasses['no-backdrop']);\n };\n\n /**\n * @returns {boolean}\n */\n const isToast = () => {\n const popup = getPopup();\n if (!popup) {\n return false;\n }\n return hasClass(popup, swalClasses.toast);\n };\n\n /**\n * @returns {boolean}\n */\n const isLoading = () => {\n const popup = getPopup();\n if (!popup) {\n return false;\n }\n return popup.hasAttribute('data-loading');\n };\n\n /**\n * Securely set innerHTML of an element\n * https://github.com/sweetalert2/sweetalert2/issues/1926\n *\n * @param {HTMLElement} elem\n * @param {string} html\n */\n const setInnerHtml = (elem, html) => {\n elem.textContent = '';\n if (html) {\n const parser = new DOMParser();\n const parsed = parser.parseFromString(html, `text/html`);\n const head = parsed.querySelector('head');\n if (head) {\n Array.from(head.childNodes).forEach(child => {\n elem.appendChild(child);\n });\n }\n const body = parsed.querySelector('body');\n if (body) {\n Array.from(body.childNodes).forEach(child => {\n if (child instanceof HTMLVideoElement || child instanceof HTMLAudioElement) {\n elem.appendChild(child.cloneNode(true)); // https://github.com/sweetalert2/sweetalert2/issues/2507\n } else {\n elem.appendChild(child);\n }\n });\n }\n }\n };\n\n /**\n * @param {HTMLElement} elem\n * @param {string} className\n * @returns {boolean}\n */\n const hasClass = (elem, className) => {\n if (!className) {\n return false;\n }\n const classList = className.split(/\\s+/);\n for (let i = 0; i < classList.length; i++) {\n if (!elem.classList.contains(classList[i])) {\n return false;\n }\n }\n return true;\n };\n\n /**\n * @param {HTMLElement} elem\n * @param {SweetAlertOptions} params\n */\n const removeCustomClasses = (elem, params) => {\n Array.from(elem.classList).forEach(className => {\n if (!Object.values(swalClasses).includes(className) && !Object.values(iconTypes).includes(className) && !Object.values(params.showClass || {}).includes(className)) {\n elem.classList.remove(className);\n }\n });\n };\n\n /**\n * @param {HTMLElement} elem\n * @param {SweetAlertOptions} params\n * @param {string} className\n */\n const applyCustomClass = (elem, params, className) => {\n removeCustomClasses(elem, params);\n if (!params.customClass) {\n return;\n }\n const customClass = params.customClass[(/** @type {keyof SweetAlertCustomClass} */className)];\n if (!customClass) {\n return;\n }\n if (typeof customClass !== 'string' && !customClass.forEach) {\n warn(`Invalid type of customClass.${className}! Expected string or iterable object, got \"${typeof customClass}\"`);\n return;\n }\n addClass(elem, customClass);\n };\n\n /**\n * @param {HTMLElement} popup\n * @param {import('./renderers/renderInput').InputClass | SweetAlertInput} inputClass\n * @returns {HTMLInputElement | null}\n */\n const getInput$1 = (popup, inputClass) => {\n if (!inputClass) {\n return null;\n }\n switch (inputClass) {\n case 'select':\n case 'textarea':\n case 'file':\n return popup.querySelector(`.${swalClasses.popup} > .${swalClasses[inputClass]}`);\n case 'checkbox':\n return popup.querySelector(`.${swalClasses.popup} > .${swalClasses.checkbox} input`);\n case 'radio':\n return popup.querySelector(`.${swalClasses.popup} > .${swalClasses.radio} input:checked`) || popup.querySelector(`.${swalClasses.popup} > .${swalClasses.radio} input:first-child`);\n case 'range':\n return popup.querySelector(`.${swalClasses.popup} > .${swalClasses.range} input`);\n default:\n return popup.querySelector(`.${swalClasses.popup} > .${swalClasses.input}`);\n }\n };\n\n /**\n * @param {HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement} input\n */\n const focusInput = input => {\n input.focus();\n\n // place cursor at end of text in text input\n if (input.type !== 'file') {\n // http://stackoverflow.com/a/2345915\n const val = input.value;\n input.value = '';\n input.value = val;\n }\n };\n\n /**\n * @param {HTMLElement | HTMLElement[] | null} target\n * @param {string | string[] | readonly string[] | undefined} classList\n * @param {boolean} condition\n */\n const toggleClass = (target, classList, condition) => {\n if (!target || !classList) {\n return;\n }\n if (typeof classList === 'string') {\n classList = classList.split(/\\s+/).filter(Boolean);\n }\n classList.forEach(className => {\n if (Array.isArray(target)) {\n target.forEach(elem => {\n if (condition) {\n elem.classList.add(className);\n } else {\n elem.classList.remove(className);\n }\n });\n } else {\n if (condition) {\n target.classList.add(className);\n } else {\n target.classList.remove(className);\n }\n }\n });\n };\n\n /**\n * @param {HTMLElement | HTMLElement[] | null} target\n * @param {string | string[] | readonly string[] | undefined} classList\n */\n const addClass = (target, classList) => {\n toggleClass(target, classList, true);\n };\n\n /**\n * @param {HTMLElement | HTMLElement[] | null} target\n * @param {string | string[] | readonly string[] | undefined} classList\n */\n const removeClass = (target, classList) => {\n toggleClass(target, classList, false);\n };\n\n /**\n * Get direct child of an element by class name\n *\n * @param {HTMLElement} elem\n * @param {string} className\n * @returns {HTMLElement | undefined}\n */\n const getDirectChildByClass = (elem, className) => {\n const children = Array.from(elem.children);\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (child instanceof HTMLElement && hasClass(child, className)) {\n return child;\n }\n }\n };\n\n /**\n * @param {HTMLElement} elem\n * @param {string} property\n * @param {*} value\n */\n const applyNumericalStyle = (elem, property, value) => {\n if (value === `${parseInt(value)}`) {\n value = parseInt(value);\n }\n if (value || parseInt(value) === 0) {\n elem.style.setProperty(property, typeof value === 'number' ? `${value}px` : value);\n } else {\n elem.style.removeProperty(property);\n }\n };\n\n /**\n * @param {HTMLElement | null} elem\n * @param {string} display\n */\n const show = (elem, display = 'flex') => {\n if (!elem) {\n return;\n }\n elem.style.display = display;\n };\n\n /**\n * @param {HTMLElement | null} elem\n */\n const hide = elem => {\n if (!elem) {\n return;\n }\n elem.style.display = 'none';\n };\n\n /**\n * @param {HTMLElement | null} elem\n * @param {string} display\n */\n const showWhenInnerHtmlPresent = (elem, display = 'block') => {\n if (!elem) {\n return;\n }\n new MutationObserver(() => {\n toggle(elem, elem.innerHTML, display);\n }).observe(elem, {\n childList: true,\n subtree: true\n });\n };\n\n /**\n * @param {HTMLElement} parent\n * @param {string} selector\n * @param {string} property\n * @param {string} value\n */\n const setStyle = (parent, selector, property, value) => {\n /** @type {HTMLElement | null} */\n const el = parent.querySelector(selector);\n if (el) {\n el.style.setProperty(property, value);\n }\n };\n\n /**\n * @param {HTMLElement} elem\n * @param {any} condition\n * @param {string} display\n */\n const toggle = (elem, condition, display = 'flex') => {\n if (condition) {\n show(elem, display);\n } else {\n hide(elem);\n }\n };\n\n /**\n * borrowed from jquery $(elem).is(':visible') implementation\n *\n * @param {HTMLElement | null} elem\n * @returns {boolean}\n */\n const isVisible$1 = elem => !!(elem && (elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length));\n\n /**\n * @returns {boolean}\n */\n const allButtonsAreHidden = () => !isVisible$1(getConfirmButton()) && !isVisible$1(getDenyButton()) && !isVisible$1(getCancelButton());\n\n /**\n * @param {HTMLElement} elem\n * @returns {boolean}\n */\n const isScrollable = elem => !!(elem.scrollHeight > elem.clientHeight);\n\n /**\n * @param {HTMLElement} element\n * @param {HTMLElement} stopElement\n * @returns {boolean}\n */\n const selfOrParentIsScrollable = (element, stopElement) => {\n let parent = element;\n while (parent && parent !== stopElement) {\n if (isScrollable(parent)) {\n return true;\n }\n parent = parent.parentElement;\n }\n return false;\n };\n\n /**\n * borrowed from https://stackoverflow.com/a/46352119\n *\n * @param {HTMLElement} elem\n * @returns {boolean}\n */\n const hasCssAnimation = elem => {\n const style = window.getComputedStyle(elem);\n const animDuration = parseFloat(style.getPropertyValue('animation-duration') || '0');\n const transDuration = parseFloat(style.getPropertyValue('transition-duration') || '0');\n return animDuration > 0 || transDuration > 0;\n };\n\n /**\n * @param {number} timer\n * @param {boolean} reset\n */\n const animateTimerProgressBar = (timer, reset = false) => {\n const timerProgressBar = getTimerProgressBar();\n if (!timerProgressBar) {\n return;\n }\n if (isVisible$1(timerProgressBar)) {\n if (reset) {\n timerProgressBar.style.transition = 'none';\n timerProgressBar.style.width = '100%';\n }\n setTimeout(() => {\n timerProgressBar.style.transition = `width ${timer / 1000}s linear`;\n timerProgressBar.style.width = '0%';\n }, 10);\n }\n };\n const stopTimerProgressBar = () => {\n const timerProgressBar = getTimerProgressBar();\n if (!timerProgressBar) {\n return;\n }\n const timerProgressBarWidth = parseInt(window.getComputedStyle(timerProgressBar).width);\n timerProgressBar.style.removeProperty('transition');\n timerProgressBar.style.width = '100%';\n const timerProgressBarFullWidth = parseInt(window.getComputedStyle(timerProgressBar).width);\n const timerProgressBarPercent = timerProgressBarWidth / timerProgressBarFullWidth * 100;\n timerProgressBar.style.width = `${timerProgressBarPercent}%`;\n };\n\n /**\n * Detect Node env\n *\n * @returns {boolean}\n */\n const isNodeEnv = () => typeof window === 'undefined' || typeof document === 'undefined';\n\n const sweetHTML = `\n <div aria-labelledby=\"${swalClasses.title}\" aria-describedby=\"${swalClasses['html-container']}\" class=\"${swalClasses.popup}\" tabindex=\"-1\">\n <button type=\"button\" class=\"${swalClasses.close}\"></button>\n <ul class=\"${swalClasses['progress-steps']}\"></ul>\n <div class=\"${swalClasses.icon}\"></div>\n <img class=\"${swalClasses.image}\" />\n <h2 class=\"${swalClasses.title}\" id=\"${swalClasses.title}\"></h2>\n <div class=\"${swalClasses['html-container']}\" id=\"${swalClasses['html-container']}\"></div>\n <input class=\"${swalClasses.input}\" id=\"${swalClasses.input}\" />\n <input type=\"file\" class=\"${swalClasses.file}\" />\n <div class=\"${swalClasses.range}\">\n <input type=\"range\" />\n <output></output>\n </div>\n <select class=\"${swalClasses.select}\" id=\"${swalClasses.select}\"></select>\n <div class=\"${swalClasses.radio}\"></div>\n <label class=\"${swalClasses.checkbox}\">\n <input type=\"checkbox\" id=\"${swalClasses.checkbox}\" />\n <span class=\"${swalClasses.label}\"></span>\n </label>\n <textarea class=\"${swalClasses.textarea}\" id=\"${swalClasses.textarea}\"></textarea>\n <div class=\"${swalClasses['validation-message']}\" id=\"${swalClasses['validation-message']}\"></div>\n <div class=\"${swalClasses.actions}\">\n <div class=\"${swalClasses.loader}\"></div>\n <button type=\"button\" class=\"${swalClasses.confirm}\"></button>\n <button type=\"button\" class=\"${swalClasses.deny}\"></button>\n <button type=\"button\" class=\"${swalClasses.cancel}\"></button>\n </div>\n <div class=\"${swalClasses.footer}\"></div>\n <div class=\"${swalClasses['timer-progress-bar-container']}\">\n <div class=\"${swalClasses['timer-progress-bar']}\"></div>\n </div>\n </div>\n`.replace(/(^|\\n)\\s*/g, '');\n\n /**\n * @returns {boolean}\n */\n const resetOldContainer = () => {\n const oldContainer = getContainer();\n if (!oldContainer) {\n return false;\n }\n oldContainer.remove();\n removeClass([document.documentElement, document.body], [swalClasses['no-backdrop'], swalClasses['toast-shown'], swalClasses['has-column']]);\n return true;\n };\n const resetValidationMessage$1 = () => {\n globalState.currentInstance.resetValidationMessage();\n };\n const addInputChangeListeners = () => {\n const popup = getPopup();\n const input = getDirectChildByClass(popup, swalClasses.input);\n const file = getDirectChildByClass(popup, swalClasses.file);\n /** @type {HTMLInputElement} */\n const range = popup.querySelector(`.${swalClasses.range} input`);\n /** @type {HTMLOutputElement} */\n const rangeOutput = popup.querySelector(`.${swalClasses.range} output`);\n const select = getDirectChildByClass(popup, swalClasses.select);\n /** @type {HTMLInputElement} */\n const checkbox = popup.querySelector(`.${swalClasses.checkbox} input`);\n const textarea = getDirectChildByClass(popup, swalClasses.textarea);\n input.oninput = resetValidationMessage$1;\n file.onchange = resetValidationMessage$1;\n select.onchange = resetValidationMessage$1;\n checkbox.onchange = resetValidationMessage$1;\n textarea.oninput = resetValidationMessage$1;\n range.oninput = () => {\n resetValidationMessage$1();\n rangeOutput.value = range.value;\n };\n range.onchange = () => {\n resetValidationMessage$1();\n rangeOutput.value = range.value;\n };\n };\n\n /**\n * @param {string | HTMLElement} target\n * @returns {HTMLElement}\n */\n const getTarget = target => typeof target === 'string' ? document.querySelector(target) : target;\n\n /**\n * @param {SweetAlertOptions} params\n */\n const setupAccessibility = params => {\n const popup = getPopup();\n popup.setAttribute('role', params.toast ? 'alert' : 'dialog');\n popup.setAttribute('aria-live', params.toast ? 'polite' : 'assertive');\n if (!params.toast) {\n popup.setAttribute('aria-modal', 'true');\n }\n };\n\n /**\n * @param {HTMLElement} targetElement\n */\n const setupRTL = targetElement => {\n if (window.getComputedStyle(targetElement).direction === 'rtl') {\n addClass(getContainer(), swalClasses.rtl);\n }\n };\n\n /**\n * Add modal + backdrop + no-war message for Russians to DOM\n *\n * @param {SweetAlertOptions} params\n */\n const init = params => {\n // Clean up the old popup container if it exists\n const oldContainerExisted = resetOldContainer();\n if (isNodeEnv()) {\n error('SweetAlert2 requires document to initialize');\n return;\n }\n const container = document.createElement('div');\n container.className = swalClasses.container;\n if (oldContainerExisted) {\n addClass(container, swalClasses['no-transition']);\n }\n setInnerHtml(container, sweetHTML);\n container.dataset['swal2Theme'] = params.theme;\n const targetElement = getTarget(params.target);\n targetElement.appendChild(container);\n if (params.topLayer) {\n container.setAttribute('popover', '');\n container.showPopover();\n }\n setupAccessibility(params);\n setupRTL(targetElement);\n addInputChangeListeners();\n };\n\n /**\n * @param {HTMLElement | object | string} param\n * @param {HTMLElement} target\n */\n const parseHtmlToContainer = (param, target) => {\n // DOM element\n if (param instanceof HTMLElement) {\n target.appendChild(param);\n }\n\n // Object\n else if (typeof param === 'object') {\n handleObject(param, target);\n }\n\n // Plain string\n else if (param) {\n setInnerHtml(target, param);\n }\n };\n\n /**\n * @param {any} param\n * @param {HTMLElement} target\n */\n const handleObject = (param, target) => {\n // JQuery element(s)\n if (param.jquery) {\n handleJqueryElem(target, param);\n }\n\n // For other objects use their string representation\n else {\n setInnerHtml(target, param.toString());\n }\n };\n\n /**\n * @param {HTMLElement} target\n * @param {any} elem\n */\n const handleJqueryElem = (target, elem) => {\n target.textContent = '';\n if (0 in elem) {\n for (let i = 0; i in elem; i++) {\n target.appendChild(elem[i].cloneNode(true));\n }\n } else {\n target.appendChild(elem.cloneNode(true));\n }\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const renderActions = (instance, params) => {\n const actions = getActions();\n const loader = getLoader();\n if (!actions || !loader) {\n return;\n }\n\n // Actions (buttons) wrapper\n if (!params.showConfirmButton && !params.showDenyButton && !params.showCancelButton) {\n hide(actions);\n } else {\n show(actions);\n }\n\n // Custom class\n applyCustomClass(actions, params, 'actions');\n\n // Render all the buttons\n renderButtons(actions, loader, params);\n\n // Loader\n setInnerHtml(loader, params.loaderHtml || '');\n applyCustomClass(loader, params, 'loader');\n };\n\n /**\n * @param {HTMLElement} actions\n * @param {HTMLElement} loader\n * @param {SweetAlertOptions} params\n */\n function renderButtons(actions, loader, params) {\n const confirmButton = getConfirmButton();\n const denyButton = getDenyButton();\n const cancelButton = getCancelButton();\n if (!confirmButton || !denyButton || !cancelButton) {\n return;\n }\n\n // Render buttons\n renderButton(confirmButton, 'confirm', params);\n renderButton(denyButton, 'deny', params);\n renderButton(cancelButton, 'cancel', params);\n handleButtonsStyling(confirmButton, denyButton, cancelButton, params);\n if (params.reverseButtons) {\n if (params.toast) {\n actions.insertBefore(cancelButton, confirmButton);\n actions.insertBefore(denyButton, confirmButton);\n } else {\n actions.insertBefore(cancelButton, loader);\n actions.insertBefore(denyButton, loader);\n actions.insertBefore(confirmButton, loader);\n }\n }\n }\n\n /**\n * @param {HTMLElement} confirmButton\n * @param {HTMLElement} denyButton\n * @param {HTMLElement} cancelButton\n * @param {SweetAlertOptions} params\n */\n function handleButtonsStyling(confirmButton, denyButton, cancelButton, params) {\n if (!params.buttonsStyling) {\n removeClass([confirmButton, denyButton, cancelButton], swalClasses.styled);\n return;\n }\n addClass([confirmButton, denyButton, cancelButton], swalClasses.styled);\n\n // Apply custom background colors to action buttons\n if (params.confirmButtonColor) {\n confirmButton.style.setProperty('--swal2-confirm-button-background-color', params.confirmButtonColor);\n }\n if (params.denyButtonColor) {\n denyButton.style.setProperty('--swal2-deny-button-background-color', params.denyButtonColor);\n }\n if (params.cancelButtonColor) {\n cancelButton.style.setProperty('--swal2-cancel-button-background-color', params.cancelButtonColor);\n }\n\n // Apply the outline color to action buttons\n applyOutlineColor(confirmButton);\n applyOutlineColor(denyButton);\n applyOutlineColor(cancelButton);\n }\n\n /**\n * @param {HTMLElement} button\n */\n function applyOutlineColor(button) {\n const buttonStyle = window.getComputedStyle(button);\n if (buttonStyle.getPropertyValue('--swal2-action-button-focus-box-shadow')) {\n // If the button already has a custom outline color, no need to change it\n return;\n }\n const outlineColor = buttonStyle.backgroundColor.replace(/rgba?\\((\\d+), (\\d+), (\\d+).*/, 'rgba($1, $2, $3, 0.5)');\n button.style.setProperty('--swal2-action-button-focus-box-shadow', buttonStyle.getPropertyValue('--swal2-outline').replace(/ rgba\\(.*/, ` ${outlineColor}`));\n }\n\n /**\n * @param {HTMLElement} button\n * @param {'confirm' | 'deny' | 'cancel'} buttonType\n * @param {SweetAlertOptions} params\n */\n function renderButton(button, buttonType, params) {\n const buttonName = /** @type {'Confirm' | 'Deny' | 'Cancel'} */capitalizeFirstLetter(buttonType);\n toggle(button, params[`show${buttonName}Button`], 'inline-block');\n setInnerHtml(button, params[`${buttonType}ButtonText`] || ''); // Set caption text\n button.setAttribute('aria-label', params[`${buttonType}ButtonAriaLabel`] || ''); // ARIA label\n\n // Add buttons custom classes\n button.className = swalClasses[buttonType];\n applyCustomClass(button, params, `${buttonType}Button`);\n }\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const renderCloseButton = (instance, params) => {\n const closeButton = getCloseButton();\n if (!closeButton) {\n return;\n }\n setInnerHtml(closeButton, params.closeButtonHtml || '');\n\n // Custom class\n applyCustomClass(closeButton, params, 'closeButton');\n toggle(closeButton, params.showCloseButton);\n closeButton.setAttribute('aria-label', params.closeButtonAriaLabel || '');\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const renderContainer = (instance, params) => {\n const container = getContainer();\n if (!container) {\n return;\n }\n handleBackdropParam(container, params.backdrop);\n handlePositionParam(container, params.position);\n handleGrowParam(container, params.grow);\n\n // Custom class\n applyCustomClass(container, params, 'container');\n };\n\n /**\n * @param {HTMLElement} container\n * @param {SweetAlertOptions['backdrop']} backdrop\n */\n function handleBackdropParam(container, backdrop) {\n if (typeof backdrop === 'string') {\n container.style.background = backdrop;\n } else if (!backdrop) {\n addClass([document.documentElement, document.body], swalClasses['no-backdrop']);\n }\n }\n\n /**\n * @param {HTMLElement} container\n * @param {SweetAlertOptions['position']} position\n */\n function handlePositionParam(container, position) {\n if (!position) {\n return;\n }\n if (position in swalClasses) {\n addClass(container, swalClasses[position]);\n } else {\n warn('The \"position\" parameter is not valid, defaulting to \"center\"');\n addClass(container, swalClasses.center);\n }\n }\n\n /**\n * @param {HTMLElement} container\n * @param {SweetAlertOptions['grow']} grow\n */\n function handleGrowParam(container, grow) {\n if (!grow) {\n return;\n }\n addClass(container, swalClasses[`grow-${grow}`]);\n }\n\n /**\n * This module contains `WeakMap`s for each effectively-\"private property\" that a `Swal` has.\n * For example, to set the private property \"foo\" of `this` to \"bar\", you can `privateProps.foo.set(this, 'bar')`\n * This is the approach that Babel will probably take to implement private methods/fields\n * https://github.com/tc39/proposal-private-methods\n * https://github.com/babel/babel/pull/7555\n * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module*\n * then we can use that language feature.\n */\n\n var privateProps = {\n innerParams: new WeakMap(),\n domCache: new WeakMap()\n };\n\n /// <reference path=\"../../../../sweetalert2.d.ts\"/>\n\n\n /** @type {InputClass[]} */\n const inputClasses = ['input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea'];\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const renderInput = (instance, params) => {\n const popup = getPopup();\n if (!popup) {\n return;\n }\n const innerParams = privateProps.innerParams.get(instance);\n const rerender = !innerParams || params.input !== innerParams.input;\n inputClasses.forEach(inputClass => {\n const inputContainer = getDirectChildByClass(popup, swalClasses[inputClass]);\n if (!inputContainer) {\n return;\n }\n\n // set attributes\n setAttributes(inputClass, params.inputAttributes);\n\n // set class\n inputContainer.className = swalClasses[inputClass];\n if (rerender) {\n hide(inputContainer);\n }\n });\n if (params.input) {\n if (rerender) {\n showInput(params);\n }\n // set custom class\n setCustomClass(params);\n }\n };\n\n /**\n * @param {SweetAlertOptions} params\n */\n const showInput = params => {\n if (!params.input) {\n return;\n }\n if (!renderInputType[params.input]) {\n error(`Unexpected type of input! Expected ${Object.keys(renderInputType).join(' | ')}, got \"${params.input}\"`);\n return;\n }\n const inputContainer = getInputContainer(params.input);\n if (!inputContainer) {\n return;\n }\n const input = renderInputType[params.input](inputContainer, params);\n show(inputContainer);\n\n // input autofocus\n if (params.inputAutoFocus) {\n setTimeout(() => {\n focusInput(input);\n });\n }\n };\n\n /**\n * @param {HTMLInputElement} input\n */\n const removeAttributes = input => {\n for (let i = 0; i < input.attributes.length; i++) {\n const attrName = input.attributes[i].name;\n if (!['id', 'type', 'value', 'style'].includes(attrName)) {\n input.removeAttribute(attrName);\n }\n }\n };\n\n /**\n * @param {InputClass} inputClass\n * @param {SweetAlertOptions['inputAttributes']} inputAttributes\n */\n const setAttributes = (inputClass, inputAttributes) => {\n const popup = getPopup();\n if (!popup) {\n return;\n }\n const input = getInput$1(popup, inputClass);\n if (!input) {\n return;\n }\n removeAttributes(input);\n for (const attr in inputAttributes) {\n input.setAttribute(attr, inputAttributes[attr]);\n }\n };\n\n /**\n * @param {SweetAlertOptions} params\n */\n const setCustomClass = params => {\n if (!params.input) {\n return;\n }\n const inputContainer = getInputContainer(params.input);\n if (inputContainer) {\n applyCustomClass(inputContainer, params, 'input');\n }\n };\n\n /**\n * @param {HTMLInputElement | HTMLTextAreaElement} input\n * @param {SweetAlertOptions} params\n */\n const setInputPlaceholder = (input, params) => {\n if (!input.placeholder && params.inputPlaceholder) {\n input.placeholder = params.inputPlaceholder;\n }\n };\n\n /**\n * @param {Input} input\n * @param {Input} prependTo\n * @param {SweetAlertOptions} params\n */\n const setInputLabel = (input, prependTo, params) => {\n if (params.inputLabel) {\n const label = document.createElement('label');\n const labelClass = swalClasses['input-label'];\n label.setAttribute('for', input.id);\n label.className = labelClass;\n if (typeof params.customClass === 'object') {\n addClass(label, params.customClass.inputLabel);\n }\n label.innerText = params.inputLabel;\n prependTo.insertAdjacentElement('beforebegin', label);\n }\n };\n\n /**\n * @param {SweetAlertInput} inputType\n * @returns {HTMLElement | undefined}\n */\n const getInputContainer = inputType => {\n const popup = getPopup();\n if (!popup) {\n return;\n }\n return getDirectChildByClass(popup, swalClasses[(/** @type {SwalClass} */inputType)] || swalClasses.input);\n };\n\n /**\n * @param {HTMLInputElement | HTMLOutputElement | HTMLTextAreaElement} input\n * @param {SweetAlertOptions['inputValue']} inputValue\n */\n const checkAndSetInputValue = (input, inputValue) => {\n if (['string', 'number'].includes(typeof inputValue)) {\n input.value = `${inputValue}`;\n } else if (!isPromise(inputValue)) {\n warn(`Unexpected type of inputValue! Expected \"string\", \"number\" or \"Promise\", got \"${typeof inputValue}\"`);\n }\n };\n\n /** @type {Record<SweetAlertInput, (input: Input | HTMLElement, params: SweetAlertOptions) => Input>} */\n const renderInputType = {};\n\n /**\n * @param {HTMLInputElement} input\n * @param {SweetAlertOptions} params\n * @returns {HTMLInputElement}\n */\n renderInputType.text = renderInputType.email = renderInputType.password = renderInputType.number = renderInputType.tel = renderInputType.url = renderInputType.search = renderInputType.date = renderInputType['datetime-local'] = renderInputType.time = renderInputType.week = renderInputType.month = /** @type {(input: Input | HTMLElement, params: SweetAlertOptions) => Input} */\n (input, params) => {\n checkAndSetInputValue(input, params.inputValue);\n setInputLabel(input, input, params);\n setInputPlaceholder(input, params);\n input.type = params.input;\n return input;\n };\n\n /**\n * @param {HTMLInputElement} input\n * @param {SweetAlertOptions} params\n * @returns {HTMLInputElement}\n */\n renderInputType.file = (input, params) => {\n setInputLabel(input, input, params);\n setInputPlaceholder(input, params);\n return input;\n };\n\n /**\n * @param {HTMLInputElement} range\n * @param {SweetAlertOptions} params\n * @returns {HTMLInputElement}\n */\n renderInputType.range = (range, params) => {\n const rangeInput = range.querySelector('input');\n const rangeOutput = range.querySelector('output');\n checkAndSetInputValue(rangeInput, params.inputValue);\n rangeInput.type = params.input;\n checkAndSetInputValue(rangeOutput, params.inputValue);\n setInputLabel(rangeInput, range, params);\n return range;\n };\n\n /**\n * @param {HTMLSelectElement} select\n * @param {SweetAlertOptions} params\n * @returns {HTMLSelectElement}\n */\n renderInputType.select = (select, params) => {\n select.textContent = '';\n if (params.inputPlaceholder) {\n const placeholder = document.createElement('option');\n setInnerHtml(placeholder, params.inputPlaceholder);\n placeholder.value = '';\n placeholder.disabled = true;\n placeholder.selected = true;\n select.appendChild(placeholder);\n }\n setInputLabel(select, select, params);\n return select;\n };\n\n /**\n * @param {HTMLInputElement} radio\n * @returns {HTMLInputElement}\n */\n renderInputType.radio = radio => {\n radio.textContent = '';\n return radio;\n };\n\n /**\n * @param {HTMLLabelElement} checkboxContainer\n * @param {SweetAlertOptions} params\n * @returns {HTMLInputElement}\n */\n renderInputType.checkbox = (checkboxContainer, params) => {\n const checkbox = getInput$1(getPopup(), 'checkbox');\n checkbox.value = '1';\n checkbox.checked = Boolean(params.inputValue);\n const label = checkboxContainer.querySelector('span');\n setInnerHtml(label, params.inputPlaceholder || params.inputLabel);\n return checkbox;\n };\n\n /**\n * @param {HTMLTextAreaElement} textarea\n * @param {SweetAlertOptions} params\n * @returns {HTMLTextAreaElement}\n */\n renderInputType.textarea = (textarea, params) => {\n checkAndSetInputValue(textarea, params.inputValue);\n setInputPlaceholder(textarea, params);\n setInputLabel(textarea, textarea, params);\n\n /**\n * @param {HTMLElement} el\n * @returns {number}\n */\n const getMargin = el => parseInt(window.getComputedStyle(el).marginLeft) + parseInt(window.getComputedStyle(el).marginRight);\n\n // https://github.com/sweetalert2/sweetalert2/issues/2291\n setTimeout(() => {\n // https://github.com/sweetalert2/sweetalert2/issues/1699\n if ('MutationObserver' in window) {\n const initialPopupWidth = parseInt(window.getComputedStyle(getPopup()).width);\n const textareaResizeHandler = () => {\n // check if texarea is still in document (i.e. popup wasn't closed in the meantime)\n if (!document.body.contains(textarea)) {\n return;\n }\n const textareaWidth = textarea.offsetWidth + getMargin(textarea);\n if (textareaWidth > initialPopupWidth) {\n getPopup().style.width = `${textareaWidth}px`;\n } else {\n applyNumericalStyle(getPopup(), 'width', params.width);\n }\n };\n new MutationObserver(textareaResizeHandler).observe(textarea, {\n attributes: true,\n attributeFilter: ['style']\n });\n }\n });\n return textarea;\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const renderContent = (instance, params) => {\n const htmlContainer = getHtmlContainer();\n if (!htmlContainer) {\n return;\n }\n showWhenInnerHtmlPresent(htmlContainer);\n applyCustomClass(htmlContainer, params, 'htmlContainer');\n\n // Content as HTML\n if (params.html) {\n parseHtmlToContainer(params.html, htmlContainer);\n show(htmlContainer, 'block');\n }\n\n // Content as plain text\n else if (params.text) {\n htmlContainer.textContent = params.text;\n show(htmlContainer, 'block');\n }\n\n // No content\n else {\n hide(htmlContainer);\n }\n renderInput(instance, params);\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const renderFooter = (instance, params) => {\n const footer = getFooter();\n if (!footer) {\n return;\n }\n showWhenInnerHtmlPresent(footer);\n toggle(footer, params.footer, 'block');\n if (params.footer) {\n parseHtmlToContainer(params.footer, footer);\n }\n\n // Custom class\n applyCustomClass(footer, params, 'footer');\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const renderIcon = (instance, params) => {\n const innerParams = privateProps.innerParams.get(instance);\n const icon = getIcon();\n if (!icon) {\n return;\n }\n\n // if the given icon already rendered, apply the styling without re-rendering the icon\n if (innerParams && params.icon === innerParams.icon) {\n // Custom or default content\n setContent(icon, params);\n applyStyles(icon, params);\n return;\n }\n if (!params.icon && !params.iconHtml) {\n hide(icon);\n return;\n }\n if (params.icon && Object.keys(iconTypes).indexOf(params.icon) === -1) {\n error(`Unknown icon! Expected \"success\", \"error\", \"warning\", \"info\" or \"question\", got \"${params.icon}\"`);\n hide(icon);\n return;\n }\n show(icon);\n\n // Custom or default content\n setContent(icon, params);\n applyStyles(icon, params);\n\n // Animate icon\n addClass(icon, params.showClass && params.showClass.icon);\n\n // Re-adjust the success icon on system theme change\n const colorSchemeQueryList = window.matchMedia('(prefers-color-scheme: dark)');\n colorSchemeQueryList.addEventListener('change', adjustSuccessIconBackgroundColor);\n };\n\n /**\n * @param {HTMLElement} icon\n * @param {SweetAlertOptions} params\n */\n const applyStyles = (icon, params) => {\n for (const [iconType, iconClassName] of Object.entries(iconTypes)) {\n if (params.icon !== iconType) {\n removeClass(icon, iconClassName);\n }\n }\n addClass(icon, params.icon && iconTypes[params.icon]);\n\n // Icon color\n setColor(icon, params);\n\n // Success icon background color\n adjustSuccessIconBackgroundColor();\n\n // Custom class\n applyCustomClass(icon, params, 'icon');\n };\n\n // Adjust success icon background color to match the popup background color\n const adjustSuccessIconBackgroundColor = () => {\n const popup = getPopup();\n if (!popup) {\n return;\n }\n const popupBackgroundColor = window.getComputedStyle(popup).getPropertyValue('background-color');\n /** @type {NodeListOf<HTMLElement>} */\n const successIconParts = popup.querySelectorAll('[class^=swal2-success-circular-line], .swal2-success-fix');\n for (let i = 0; i < successIconParts.length; i++) {\n successIconParts[i].style.backgroundColor = popupBackgroundColor;\n }\n };\n const successIconHtml = `\n <div class=\"swal2-success-circular-line-left\"></div>\n <span class=\"swal2-success-line-tip\"></span> <span class=\"swal2-success-line-long\"></span>\n <div class=\"swal2-success-ring\"></div> <div class=\"swal2-success-fix\"></div>\n <div class=\"swal2-success-circular-line-right\"></div>\n`;\n const errorIconHtml = `\n <span class=\"swal2-x-mark\">\n <span class=\"swal2-x-mark-line-left\"></span>\n <span class=\"swal2-x-mark-line-right\"></span>\n </span>\n`;\n\n /**\n * @param {HTMLElement} icon\n * @param {SweetAlertOptions} params\n */\n const setContent = (icon, params) => {\n if (!params.icon && !params.iconHtml) {\n return;\n }\n let oldContent = icon.innerHTML;\n let newContent = '';\n if (params.iconHtml) {\n newContent = iconContent(params.iconHtml);\n } else if (params.icon === 'success') {\n newContent = successIconHtml;\n oldContent = oldContent.replace(/ style=\".*?\"/g, ''); // undo adjustSuccessIconBackgroundColor()\n } else if (params.icon === 'error') {\n newContent = errorIconHtml;\n } else if (params.icon) {\n const defaultIconHtml = {\n question: '?',\n warning: '!',\n info: 'i'\n };\n newContent = iconContent(defaultIconHtml[params.icon]);\n }\n if (oldContent.trim() !== newContent.trim()) {\n setInnerHtml(icon, newContent);\n }\n };\n\n /**\n * @param {HTMLElement} icon\n * @param {SweetAlertOptions} params\n */\n const setColor = (icon, params) => {\n if (!params.iconColor) {\n return;\n }\n icon.style.color = params.iconColor;\n icon.style.borderColor = params.iconColor;\n for (const sel of ['.swal2-success-line-tip', '.swal2-success-line-long', '.swal2-x-mark-line-left', '.swal2-x-mark-line-right']) {\n setStyle(icon, sel, 'background-color', params.iconColor);\n }\n setStyle(icon, '.swal2-success-ring', 'border-color', params.iconColor);\n };\n\n /**\n * @param {string} content\n * @returns {string}\n */\n const iconContent = content => `<div class=\"${swalClasses['icon-content']}\">${content}</div>`;\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const renderImage = (instance, params) => {\n const image = getImage();\n if (!image) {\n return;\n }\n if (!params.imageUrl) {\n hide(image);\n return;\n }\n show(image, '');\n\n // Src, alt\n image.setAttribute('src', params.imageUrl);\n image.setAttribute('alt', params.imageAlt || '');\n\n // Width, height\n applyNumericalStyle(image, 'width', params.imageWidth);\n applyNumericalStyle(image, 'height', params.imageHeight);\n\n // Class\n image.className = swalClasses.image;\n applyCustomClass(image, params, 'image');\n };\n\n let dragging = false;\n let mousedownX = 0;\n let mousedownY = 0;\n let initialX = 0;\n let initialY = 0;\n\n /**\n * @param {HTMLElement} popup\n */\n const addDraggableListeners = popup => {\n popup.addEventListener('mousedown', down);\n document.body.addEventListener('mousemove', move);\n popup.addEventListener('mouseup', up);\n popup.addEventListener('touchstart', down);\n document.body.addEventListener('touchmove', move);\n popup.addEventListener('touchend', up);\n };\n\n /**\n * @param {HTMLElement} popup\n */\n const removeDraggableListeners = popup => {\n popup.removeEventListener('mousedown', down);\n document.body.removeEventListener('mousemove', move);\n popup.removeEventListener('mouseup', up);\n popup.removeEventListener('touchstart', down);\n document.body.removeEventListener('touchmove', move);\n popup.removeEventListener('touchend', up);\n };\n\n /**\n * @param {MouseEvent | TouchEvent} event\n */\n const down = event => {\n const popup = getPopup();\n if (event.target === popup || getIcon().contains(/** @type {HTMLElement} */event.target)) {\n dragging = true;\n const clientXY = getClientXY(event);\n mousedownX = clientXY.clientX;\n mousedownY = clientXY.clientY;\n initialX = parseInt(popup.style.insetInlineStart) || 0;\n initialY = parseInt(popup.style.insetBlockStart) || 0;\n addClass(popup, 'swal2-dragging');\n }\n };\n\n /**\n * @param {MouseEvent | TouchEvent} event\n */\n const move = event => {\n const popup = getPopup();\n if (dragging) {\n let {\n clientX,\n clientY\n } = getClientXY(event);\n popup.style.insetInlineStart = `${initialX + (clientX - mousedownX)}px`;\n popup.style.insetBlockStart = `${initialY + (clientY - mousedownY)}px`;\n }\n };\n const up = () => {\n const popup = getPopup();\n dragging = false;\n removeClass(popup, 'swal2-dragging');\n };\n\n /**\n * @param {MouseEvent | TouchEvent} event\n * @returns {{ clientX: number, clientY: number }}\n */\n const getClientXY = event => {\n let clientX = 0,\n clientY = 0;\n if (event.type.startsWith('mouse')) {\n clientX = /** @type {MouseEvent} */event.clientX;\n clientY = /** @type {MouseEvent} */event.clientY;\n } else if (event.type.startsWith('touch')) {\n clientX = /** @type {TouchEvent} */event.touches[0].clientX;\n clientY = /** @type {TouchEvent} */event.touches[0].clientY;\n }\n return {\n clientX,\n clientY\n };\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const renderPopup = (instance, params) => {\n const container = getContainer();\n const popup = getPopup();\n if (!container || !popup) {\n return;\n }\n\n // Width\n // https://github.com/sweetalert2/sweetalert2/issues/2170\n if (params.toast) {\n applyNumericalStyle(container, 'width', params.width);\n popup.style.width = '100%';\n const loader = getLoader();\n if (loader) {\n popup.insertBefore(loader, getIcon());\n }\n } else {\n applyNumericalStyle(popup, 'width', params.width);\n }\n\n // Padding\n applyNumericalStyle(popup, 'padding', params.padding);\n\n // Color\n if (params.color) {\n popup.style.color = params.color;\n }\n\n // Background\n if (params.background) {\n popup.style.background = params.background;\n }\n hide(getValidationMessage());\n\n // Classes\n addClasses$1(popup, params);\n if (params.draggable && !params.toast) {\n addClass(popup, swalClasses.draggable);\n addDraggableListeners(popup);\n } else {\n removeClass(popup, swalClasses.draggable);\n removeDraggableListeners(popup);\n }\n };\n\n /**\n * @param {HTMLElement} popup\n * @param {SweetAlertOptions} params\n */\n const addClasses$1 = (popup, params) => {\n const showClass = params.showClass || {};\n // Default Class + showClass when updating Swal.update({})\n popup.className = `${swalClasses.popup} ${isVisible$1(popup) ? showClass.popup : ''}`;\n if (params.toast) {\n addClass([document.documentElement, document.body], swalClasses['toast-shown']);\n addClass(popup, swalClasses.toast);\n } else {\n addClass(popup, swalClasses.modal);\n }\n\n // Custom class\n applyCustomClass(popup, params, 'popup');\n // TODO: remove in the next major\n if (typeof params.customClass === 'string') {\n addClass(popup, params.customClass);\n }\n\n // Icon class (#1842)\n if (params.icon) {\n addClass(popup, swalClasses[`icon-${params.icon}`]);\n }\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const renderProgressSteps = (instance, params) => {\n const progressStepsContainer = getProgressSteps();\n if (!progressStepsContainer) {\n return;\n }\n const {\n progressSteps,\n currentProgressStep\n } = params;\n if (!progressSteps || progressSteps.length === 0 || currentProgressStep === undefined) {\n hide(progressStepsContainer);\n return;\n }\n show(progressStepsContainer);\n progressStepsContainer.textContent = '';\n if (currentProgressStep >= progressSteps.length) {\n warn('Invalid currentProgressStep parameter, it should be less than progressSteps.length ' + '(currentProgressStep like JS arrays starts from 0)');\n }\n progressSteps.forEach((step, index) => {\n const stepEl = createStepElement(step);\n progressStepsContainer.appendChild(stepEl);\n if (index === currentProgressStep) {\n addClass(stepEl, swalClasses['active-progress-step']);\n }\n if (index !== progressSteps.length - 1) {\n const lineEl = createLineElement(params);\n progressStepsContainer.appendChild(lineEl);\n }\n });\n };\n\n /**\n * @param {string} step\n * @returns {HTMLLIElement}\n */\n const createStepElement = step => {\n const stepEl = document.createElement('li');\n addClass(stepEl, swalClasses['progress-step']);\n setInnerHtml(stepEl, step);\n return stepEl;\n };\n\n /**\n * @param {SweetAlertOptions} params\n * @returns {HTMLLIElement}\n */\n const createLineElement = params => {\n const lineEl = document.createElement('li');\n addClass(lineEl, swalClasses['progress-step-line']);\n if (params.progressStepsDistance) {\n applyNumericalStyle(lineEl, 'width', params.progressStepsDistance);\n }\n return lineEl;\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const renderTitle = (instance, params) => {\n const title = getTitle();\n if (!title) {\n return;\n }\n showWhenInnerHtmlPresent(title);\n toggle(title, params.title || params.titleText, 'block');\n if (params.title) {\n parseHtmlToContainer(params.title, title);\n }\n if (params.titleText) {\n title.innerText = params.titleText;\n }\n\n // Custom class\n applyCustomClass(title, params, 'title');\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const render = (instance, params) => {\n renderPopup(instance, params);\n renderContainer(instance, params);\n renderProgressSteps(instance, params);\n renderIcon(instance, params);\n renderImage(instance, params);\n renderTitle(instance, params);\n renderCloseButton(instance, params);\n renderContent(instance, params);\n renderActions(instance, params);\n renderFooter(instance, params);\n const popup = getPopup();\n if (typeof params.didRender === 'function' && popup) {\n params.didRender(popup);\n }\n globalState.eventEmitter.emit('didRender', popup);\n };\n\n /*\n * Global function to determine if SweetAlert2 popup is shown\n */\n const isVisible = () => {\n return isVisible$1(getPopup());\n };\n\n /*\n * Global function to click 'Confirm' button\n */\n const clickConfirm = () => {\n var _dom$getConfirmButton;\n return (_dom$getConfirmButton = getConfirmButton()) === null || _dom$getConfirmButton === void 0 ? void 0 : _dom$getConfirmButton.click();\n };\n\n /*\n * Global function to click 'Deny' button\n */\n const clickDeny = () => {\n var _dom$getDenyButton;\n return (_dom$getDenyButton = getDenyButton()) === null || _dom$getDenyButton === void 0 ? void 0 : _dom$getDenyButton.click();\n };\n\n /*\n * Global function to click 'Cancel' button\n */\n const clickCancel = () => {\n var _dom$getCancelButton;\n return (_dom$getCancelButton = getCancelButton()) === null || _dom$getCancelButton === void 0 ? void 0 : _dom$getCancelButton.click();\n };\n\n /** @typedef {'cancel' | 'backdrop' | 'close' | 'esc' | 'timer'} DismissReason */\n\n /** @type {Record<DismissReason, DismissReason>} */\n const DismissReason = Object.freeze({\n cancel: 'cancel',\n backdrop: 'backdrop',\n close: 'close',\n esc: 'esc',\n timer: 'timer'\n });\n\n /**\n * @param {GlobalState} globalState\n */\n const removeKeydownHandler = globalState => {\n if (globalState.keydownTarget && globalState.keydownHandlerAdded) {\n globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, {\n capture: globalState.keydownListenerCapture\n });\n globalState.keydownHandlerAdded = false;\n }\n };\n\n /**\n * @param {GlobalState} globalState\n * @param {SweetAlertOptions} innerParams\n * @param {*} dismissWith\n */\n const addKeydownHandler = (globalState, innerParams, dismissWith) => {\n removeKeydownHandler(globalState);\n if (!innerParams.toast) {\n globalState.keydownHandler = e => keydownHandler(innerParams, e, dismissWith);\n globalState.keydownTarget = innerParams.keydownListenerCapture ? window : getPopup();\n globalState.keydownListenerCapture = innerParams.keydownListenerCapture;\n globalState.keydownTarget.addEventListener('keydown', globalState.keydownHandler, {\n capture: globalState.keydownListenerCapture\n });\n globalState.keydownHandlerAdded = true;\n }\n };\n\n /**\n * @param {number} index\n * @param {number} increment\n */\n const setFocus = (index, increment) => {\n var _dom$getPopup;\n const focusableElements = getFocusableElements();\n // search for visible elements and select the next possible match\n if (focusableElements.length) {\n index = index + increment;\n\n // shift + tab when .swal2-popup is focused\n if (index === -2) {\n index = focusableElements.length - 1;\n }\n\n // rollover to first item\n if (index === focusableElements.length) {\n index = 0;\n\n // go to last item\n } else if (index === -1) {\n index = focusableElements.length - 1;\n }\n focusableElements[index].focus();\n return;\n }\n // no visible focusable elements, focus the popup\n (_dom$getPopup = getPopup()) === null || _dom$getPopup === void 0 || _dom$getPopup.focus();\n };\n const arrowKeysNextButton = ['ArrowRight', 'ArrowDown'];\n const arrowKeysPreviousButton = ['ArrowLeft', 'ArrowUp'];\n\n /**\n * @param {SweetAlertOptions} innerParams\n * @param {KeyboardEvent} event\n * @param {Function} dismissWith\n */\n const keydownHandler = (innerParams, event, dismissWith) => {\n if (!innerParams) {\n return; // This instance has already been destroyed\n }\n\n // Ignore keydown during IME composition\n // https://developer.mozilla.org/en-US/docs/Web/API/Document/keydown_event#ignoring_keydown_during_ime_composition\n // https://github.com/sweetalert2/sweetalert2/issues/720\n // https://github.com/sweetalert2/sweetalert2/issues/2406\n if (event.isComposing || event.keyCode === 229) {\n return;\n }\n if (innerParams.stopKeydownPropagation) {\n event.stopPropagation();\n }\n\n // ENTER\n if (event.key === 'Enter') {\n handleEnter(event, innerParams);\n }\n\n // TAB\n else if (event.key === 'Tab') {\n handleTab(event);\n }\n\n // ARROWS - switch focus between buttons\n else if ([...arrowKeysNextButton, ...arrowKeysPreviousButton].includes(event.key)) {\n handleArrows(event.key);\n }\n\n // ESC\n else if (event.key === 'Escape') {\n handleEsc(event, innerParams, dismissWith);\n }\n };\n\n /**\n * @param {KeyboardEvent} event\n * @param {SweetAlertOptions} innerParams\n */\n const handleEnter = (event, innerParams) => {\n // https://github.com/sweetalert2/sweetalert2/issues/2386\n if (!callIfFunction(innerParams.allowEnterKey)) {\n return;\n }\n const input = getInput$1(getPopup(), innerParams.input);\n if (event.target && input && event.target instanceof HTMLElement && event.target.outerHTML === input.outerHTML) {\n if (['textarea', 'file'].includes(innerParams.input)) {\n return; // do not submit\n }\n clickConfirm();\n event.preventDefault();\n }\n };\n\n /**\n * @param {KeyboardEvent} event\n */\n const handleTab = event => {\n const targetElement = event.target;\n const focusableElements = getFocusableElements();\n let btnIndex = -1;\n for (let i = 0; i < focusableElements.length; i++) {\n if (targetElement === focusableElements[i]) {\n btnIndex = i;\n break;\n }\n }\n\n // Cycle to the next button\n if (!event.shiftKey) {\n setFocus(btnIndex, 1);\n }\n\n // Cycle to the prev button\n else {\n setFocus(btnIndex, -1);\n }\n event.stopPropagation();\n event.preventDefault();\n };\n\n /**\n * @param {string} key\n */\n const handleArrows = key => {\n const actions = getActions();\n const confirmButton = getConfirmButton();\n const denyButton = getDenyButton();\n const cancelButton = getCancelButton();\n if (!actions || !confirmButton || !denyButton || !cancelButton) {\n return;\n }\n /** @type HTMLElement[] */\n const buttons = [confirmButton, denyButton, cancelButton];\n if (document.activeElement instanceof HTMLElement && !buttons.includes(document.activeElement)) {\n return;\n }\n const sibling = arrowKeysNextButton.includes(key) ? 'nextElementSibling' : 'previousElementSibling';\n let buttonToFocus = document.activeElement;\n if (!buttonToFocus) {\n return;\n }\n for (let i = 0; i < actions.children.length; i++) {\n buttonToFocus = buttonToFocus[sibling];\n if (!buttonToFocus) {\n return;\n }\n if (buttonToFocus instanceof HTMLButtonElement && isVisible$1(buttonToFocus)) {\n break;\n }\n }\n if (buttonToFocus instanceof HTMLButtonElement) {\n buttonToFocus.focus();\n }\n };\n\n /**\n * @param {KeyboardEvent} event\n * @param {SweetAlertOptions} innerParams\n * @param {Function} dismissWith\n */\n const handleEsc = (event, innerParams, dismissWith) => {\n if (callIfFunction(innerParams.allowEscapeKey)) {\n event.preventDefault();\n dismissWith(DismissReason.esc);\n }\n };\n\n /**\n * This module contains `WeakMap`s for each effectively-\"private property\" that a `Swal` has.\n * For example, to set the private property \"foo\" of `this` to \"bar\", you can `privateProps.foo.set(this, 'bar')`\n * This is the approach that Babel will probably take to implement private methods/fields\n * https://github.com/tc39/proposal-private-methods\n * https://github.com/babel/babel/pull/7555\n * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module*\n * then we can use that language feature.\n */\n\n var privateMethods = {\n swalPromiseResolve: new WeakMap(),\n swalPromiseReject: new WeakMap()\n };\n\n // From https://developer.paciellogroup.com/blog/2018/06/the-current-state-of-modal-dialog-accessibility/\n // Adding aria-hidden=\"true\" to elements outside of the active modal dialog ensures that\n // elements not within the active modal dialog will not be surfaced if a user opens a screen\n // reader’s list of elements (headings, form controls, landmarks, etc.) in the document.\n\n const setAriaHidden = () => {\n const container = getContainer();\n const bodyChildren = Array.from(document.body.children);\n bodyChildren.forEach(el => {\n if (el.contains(container)) {\n return;\n }\n if (el.hasAttribute('aria-hidden')) {\n el.setAttribute('data-previous-aria-hidden', el.getAttribute('aria-hidden') || '');\n }\n el.setAttribute('aria-hidden', 'true');\n });\n };\n const unsetAriaHidden = () => {\n const bodyChildren = Array.from(document.body.children);\n bodyChildren.forEach(el => {\n if (el.hasAttribute('data-previous-aria-hidden')) {\n el.setAttribute('aria-hidden', el.getAttribute('data-previous-aria-hidden') || '');\n el.removeAttribute('data-previous-aria-hidden');\n } else {\n el.removeAttribute('aria-hidden');\n }\n });\n };\n\n // @ts-ignore\n const isSafariOrIOS = typeof window !== 'undefined' && !!window.GestureEvent; // true for Safari desktop + all iOS browsers https://stackoverflow.com/a/70585394\n\n /**\n * Fix iOS scrolling\n * http://stackoverflow.com/q/39626302\n */\n const iOSfix = () => {\n if (isSafariOrIOS && !hasClass(document.body, swalClasses.iosfix)) {\n const offset = document.body.scrollTop;\n document.body.style.top = `${offset * -1}px`;\n addClass(document.body, swalClasses.iosfix);\n lockBodyScroll();\n }\n };\n\n /**\n * https://github.com/sweetalert2/sweetalert2/issues/1246\n */\n const lockBodyScroll = () => {\n const container = getContainer();\n if (!container) {\n return;\n }\n /** @type {boolean} */\n let preventTouchMove;\n /**\n * @param {TouchEvent} event\n */\n container.ontouchstart = event => {\n preventTouchMove = shouldPreventTouchMove(event);\n };\n /**\n * @param {TouchEvent} event\n */\n container.ontouchmove = event => {\n if (preventTouchMove) {\n event.preventDefault();\n event.stopPropagation();\n }\n };\n };\n\n /**\n * @param {TouchEvent} event\n * @returns {boolean}\n */\n const shouldPreventTouchMove = event => {\n const target = event.target;\n const container = getContainer();\n const htmlContainer = getHtmlContainer();\n if (!container || !htmlContainer) {\n return false;\n }\n if (isStylus(event) || isZoom(event)) {\n return false;\n }\n if (target === container) {\n return true;\n }\n if (!isScrollable(container) && target instanceof HTMLElement && !selfOrParentIsScrollable(target, htmlContainer) &&\n // #2823\n target.tagName !== 'INPUT' &&\n // #1603\n target.tagName !== 'TEXTAREA' &&\n // #2266\n !(isScrollable(htmlContainer) &&\n // #1944\n htmlContainer.contains(target))) {\n return true;\n }\n return false;\n };\n\n /**\n * https://github.com/sweetalert2/sweetalert2/issues/1786\n *\n * @param {*} event\n * @returns {boolean}\n */\n const isStylus = event => {\n return event.touches && event.touches.length && event.touches[0].touchType === 'stylus';\n };\n\n /**\n * https://github.com/sweetalert2/sweetalert2/issues/1891\n *\n * @param {TouchEvent} event\n * @returns {boolean}\n */\n const isZoom = event => {\n return event.touches && event.touches.length > 1;\n };\n const undoIOSfix = () => {\n if (hasClass(document.body, swalClasses.iosfix)) {\n const offset = parseInt(document.body.style.top, 10);\n removeClass(document.body, swalClasses.iosfix);\n document.body.style.top = '';\n document.body.scrollTop = offset * -1;\n }\n };\n\n /**\n * Measure scrollbar width for padding body during modal show/hide\n * https://github.com/twbs/bootstrap/blob/master/js/src/modal.js\n *\n * @returns {number}\n */\n const measureScrollbar = () => {\n const scrollDiv = document.createElement('div');\n scrollDiv.className = swalClasses['scrollbar-measure'];\n document.body.appendChild(scrollDiv);\n const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n document.body.removeChild(scrollDiv);\n return scrollbarWidth;\n };\n\n /**\n * Remember state in cases where opening and handling a modal will fiddle with it.\n * @type {number | null}\n */\n let previousBodyPadding = null;\n\n /**\n * @param {string} initialBodyOverflow\n */\n const replaceScrollbarWithPadding = initialBodyOverflow => {\n // for queues, do not do this more than once\n if (previousBodyPadding !== null) {\n return;\n }\n // if the body has overflow\n if (document.body.scrollHeight > window.innerHeight || initialBodyOverflow === 'scroll' // https://github.com/sweetalert2/sweetalert2/issues/2663\n ) {\n // add padding so the content doesn't shift after removal of scrollbar\n previousBodyPadding = parseInt(window.getComputedStyle(document.body).getPropertyValue('padding-right'));\n document.body.style.paddingRight = `${previousBodyPadding + measureScrollbar()}px`;\n }\n };\n const undoReplaceScrollbarWithPadding = () => {\n if (previousBodyPadding !== null) {\n document.body.style.paddingRight = `${previousBodyPadding}px`;\n previousBodyPadding = null;\n }\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {HTMLElement} container\n * @param {boolean} returnFocus\n * @param {Function} didClose\n */\n function removePopupAndResetState(instance, container, returnFocus, didClose) {\n if (isToast()) {\n triggerDidCloseAndDispose(instance, didClose);\n } else {\n restoreActiveElement(returnFocus).then(() => triggerDidCloseAndDispose(instance, didClose));\n removeKeydownHandler(globalState);\n }\n\n // workaround for https://github.com/sweetalert2/sweetalert2/issues/2088\n // for some reason removing the container in Safari will scroll the document to bottom\n if (isSafariOrIOS) {\n container.setAttribute('style', 'display:none !important');\n container.removeAttribute('class');\n container.innerHTML = '';\n } else {\n container.remove();\n }\n if (isModal()) {\n undoReplaceScrollbarWithPadding();\n undoIOSfix();\n unsetAriaHidden();\n }\n removeBodyClasses();\n }\n\n /**\n * Remove SweetAlert2 classes from body\n */\n function removeBodyClasses() {\n removeClass([document.documentElement, document.body], [swalClasses.shown, swalClasses['height-auto'], swalClasses['no-backdrop'], swalClasses['toast-shown']]);\n }\n\n /**\n * Instance method to close sweetAlert\n *\n * @param {any} resolveValue\n */\n function close(resolveValue) {\n resolveValue = prepareResolveValue(resolveValue);\n const swalPromiseResolve = privateMethods.swalPromiseResolve.get(this);\n const didClose = triggerClosePopup(this);\n if (this.isAwaitingPromise) {\n // A swal awaiting for a promise (after a click on Confirm or Deny) cannot be dismissed anymore #2335\n if (!resolveValue.isDismissed) {\n handleAwaitingPromise(this);\n swalPromiseResolve(resolveValue);\n }\n } else if (didClose) {\n // Resolve Swal promise\n swalPromiseResolve(resolveValue);\n }\n }\n const triggerClosePopup = instance => {\n const popup = getPopup();\n if (!popup) {\n return false;\n }\n const innerParams = privateProps.innerParams.get(instance);\n if (!innerParams || hasClass(popup, innerParams.hideClass.popup)) {\n return false;\n }\n removeClass(popup, innerParams.showClass.popup);\n addClass(popup, innerParams.hideClass.popup);\n const backdrop = getContainer();\n removeClass(backdrop, innerParams.showClass.backdrop);\n addClass(backdrop, innerParams.hideClass.backdrop);\n handlePopupAnimation(instance, popup, innerParams);\n return true;\n };\n\n /**\n * @param {any} error\n */\n function rejectPromise(error) {\n const rejectPromise = privateMethods.swalPromiseReject.get(this);\n handleAwaitingPromise(this);\n if (rejectPromise) {\n // Reject Swal promise\n rejectPromise(error);\n }\n }\n\n /**\n * @param {SweetAlert} instance\n */\n const handleAwaitingPromise = instance => {\n if (instance.isAwaitingPromise) {\n delete instance.isAwaitingPromise;\n // The instance might have been previously partly destroyed, we must resume the destroy process in this case #2335\n if (!privateProps.innerParams.get(instance)) {\n instance._destroy();\n }\n }\n };\n\n /**\n * @param {any} resolveValue\n * @returns {SweetAlertResult}\n */\n const prepareResolveValue = resolveValue => {\n // When user calls Swal.close()\n if (typeof resolveValue === 'undefined') {\n return {\n isConfirmed: false,\n isDenied: false,\n isDismissed: true\n };\n }\n return Object.assign({\n isConfirmed: false,\n isDenied: false,\n isDismissed: false\n }, resolveValue);\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {HTMLElement} popup\n * @param {SweetAlertOptions} innerParams\n */\n const handlePopupAnimation = (instance, popup, innerParams) => {\n var _globalState$eventEmi;\n const container = getContainer();\n // If animation is supported, animate\n const animationIsSupported = hasCssAnimation(popup);\n if (typeof innerParams.willClose === 'function') {\n innerParams.willClose(popup);\n }\n (_globalState$eventEmi = globalState.eventEmitter) === null || _globalState$eventEmi === void 0 || _globalState$eventEmi.emit('willClose', popup);\n if (animationIsSupported) {\n animatePopup(instance, popup, container, innerParams.returnFocus, innerParams.didClose);\n } else {\n // Otherwise, remove immediately\n removePopupAndResetState(instance, container, innerParams.returnFocus, innerParams.didClose);\n }\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {HTMLElement} popup\n * @param {HTMLElement} container\n * @param {boolean} returnFocus\n * @param {Function} didClose\n */\n const animatePopup = (instance, popup, container, returnFocus, didClose) => {\n globalState.swalCloseEventFinishedCallback = removePopupAndResetState.bind(null, instance, container, returnFocus, didClose);\n /**\n * @param {AnimationEvent | TransitionEvent} e\n */\n const swalCloseAnimationFinished = function (e) {\n if (e.target === popup) {\n var _globalState$swalClos;\n (_globalState$swalClos = globalState.swalCloseEventFinishedCallback) === null || _globalState$swalClos === void 0 || _globalState$swalClos.call(globalState);\n delete globalState.swalCloseEventFinishedCallback;\n popup.removeEventListener('animationend', swalCloseAnimationFinished);\n popup.removeEventListener('transitionend', swalCloseAnimationFinished);\n }\n };\n popup.addEventListener('animationend', swalCloseAnimationFinished);\n popup.addEventListener('transitionend', swalCloseAnimationFinished);\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {Function} didClose\n */\n const triggerDidCloseAndDispose = (instance, didClose) => {\n setTimeout(() => {\n var _globalState$eventEmi2;\n if (typeof didClose === 'function') {\n didClose.bind(instance.params)();\n }\n (_globalState$eventEmi2 = globalState.eventEmitter) === null || _globalState$eventEmi2 === void 0 || _globalState$eventEmi2.emit('didClose');\n // instance might have been destroyed already\n if (instance._destroy) {\n instance._destroy();\n }\n });\n };\n\n /**\n * Shows loader (spinner), this is useful with AJAX requests.\n * By default the loader be shown instead of the \"Confirm\" button.\n *\n * @param {HTMLButtonElement | null} [buttonToReplace]\n */\n const showLoading = buttonToReplace => {\n let popup = getPopup();\n if (!popup) {\n new Swal();\n }\n popup = getPopup();\n if (!popup) {\n return;\n }\n const loader = getLoader();\n if (isToast()) {\n hide(getIcon());\n } else {\n replaceButton(popup, buttonToReplace);\n }\n show(loader);\n popup.setAttribute('data-loading', 'true');\n popup.setAttribute('aria-busy', 'true');\n popup.focus();\n };\n\n /**\n * @param {HTMLElement} popup\n * @param {HTMLButtonElement | null} [buttonToReplace]\n */\n const replaceButton = (popup, buttonToReplace) => {\n const actions = getActions();\n const loader = getLoader();\n if (!actions || !loader) {\n return;\n }\n if (!buttonToReplace && isVisible$1(getConfirmButton())) {\n buttonToReplace = getConfirmButton();\n }\n show(actions);\n if (buttonToReplace) {\n hide(buttonToReplace);\n loader.setAttribute('data-button-to-replace', buttonToReplace.className);\n actions.insertBefore(loader, buttonToReplace);\n }\n addClass([popup, actions], swalClasses.loading);\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const handleInputOptionsAndValue = (instance, params) => {\n if (params.input === 'select' || params.input === 'radio') {\n handleInputOptions(instance, params);\n } else if (['text', 'email', 'number', 'tel', 'textarea'].some(i => i === params.input) && (hasToPromiseFn(params.inputValue) || isPromise(params.inputValue))) {\n showLoading(getConfirmButton());\n handleInputValue(instance, params);\n }\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} innerParams\n * @returns {SweetAlertInputValue}\n */\n const getInputValue = (instance, innerParams) => {\n const input = instance.getInput();\n if (!input) {\n return null;\n }\n switch (innerParams.input) {\n case 'checkbox':\n return getCheckboxValue(input);\n case 'radio':\n return getRadioValue(input);\n case 'file':\n return getFileValue(input);\n default:\n return innerParams.inputAutoTrim ? input.value.trim() : input.value;\n }\n };\n\n /**\n * @param {HTMLInputElement} input\n * @returns {number}\n */\n const getCheckboxValue = input => input.checked ? 1 : 0;\n\n /**\n * @param {HTMLInputElement} input\n * @returns {string | null}\n */\n const getRadioValue = input => input.checked ? input.value : null;\n\n /**\n * @param {HTMLInputElement} input\n * @returns {FileList | File | null}\n */\n const getFileValue = input => input.files && input.files.length ? input.getAttribute('multiple') !== null ? input.files : input.files[0] : null;\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const handleInputOptions = (instance, params) => {\n const popup = getPopup();\n if (!popup) {\n return;\n }\n /**\n * @param {Record<string, any>} inputOptions\n */\n const processInputOptions = inputOptions => {\n if (params.input === 'select') {\n populateSelectOptions(popup, formatInputOptions(inputOptions), params);\n } else if (params.input === 'radio') {\n populateRadioOptions(popup, formatInputOptions(inputOptions), params);\n }\n };\n if (hasToPromiseFn(params.inputOptions) || isPromise(params.inputOptions)) {\n showLoading(getConfirmButton());\n asPromise(params.inputOptions).then(inputOptions => {\n instance.hideLoading();\n processInputOptions(inputOptions);\n });\n } else if (typeof params.inputOptions === 'object') {\n processInputOptions(params.inputOptions);\n } else {\n error(`Unexpected type of inputOptions! Expected object, Map or Promise, got ${typeof params.inputOptions}`);\n }\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const handleInputValue = (instance, params) => {\n const input = instance.getInput();\n if (!input) {\n return;\n }\n hide(input);\n asPromise(params.inputValue).then(inputValue => {\n input.value = params.input === 'number' ? `${parseFloat(inputValue) || 0}` : `${inputValue}`;\n show(input);\n input.focus();\n instance.hideLoading();\n }).catch(err => {\n error(`Error in inputValue promise: ${err}`);\n input.value = '';\n show(input);\n input.focus();\n instance.hideLoading();\n });\n };\n\n /**\n * @param {HTMLElement} popup\n * @param {InputOptionFlattened[]} inputOptions\n * @param {SweetAlertOptions} params\n */\n function populateSelectOptions(popup, inputOptions, params) {\n const select = getDirectChildByClass(popup, swalClasses.select);\n if (!select) {\n return;\n }\n /**\n * @param {HTMLElement} parent\n * @param {string} optionLabel\n * @param {string} optionValue\n */\n const renderOption = (parent, optionLabel, optionValue) => {\n const option = document.createElement('option');\n option.value = optionValue;\n setInnerHtml(option, optionLabel);\n option.selected = isSelected(optionValue, params.inputValue);\n parent.appendChild(option);\n };\n inputOptions.forEach(inputOption => {\n const optionValue = inputOption[0];\n const optionLabel = inputOption[1];\n // <optgroup> spec:\n // https://www.w3.org/TR/html401/interact/forms.html#h-17.6\n // \"...all OPTGROUP elements must be specified directly within a SELECT element (i.e., groups may not be nested)...\"\n // check whether this is a <optgroup>\n if (Array.isArray(optionLabel)) {\n // if it is an array, then it is an <optgroup>\n const optgroup = document.createElement('optgroup');\n optgroup.label = optionValue;\n optgroup.disabled = false; // not configurable for now\n select.appendChild(optgroup);\n optionLabel.forEach(o => renderOption(optgroup, o[1], o[0]));\n } else {\n // case of <option>\n renderOption(select, optionLabel, optionValue);\n }\n });\n select.focus();\n }\n\n /**\n * @param {HTMLElement} popup\n * @param {InputOptionFlattened[]} inputOptions\n * @param {SweetAlertOptions} params\n */\n function populateRadioOptions(popup, inputOptions, params) {\n const radio = getDirectChildByClass(popup, swalClasses.radio);\n if (!radio) {\n return;\n }\n inputOptions.forEach(inputOption => {\n const radioValue = inputOption[0];\n const radioLabel = inputOption[1];\n const radioInput = document.createElement('input');\n const radioLabelElement = document.createElement('label');\n radioInput.type = 'radio';\n radioInput.name = swalClasses.radio;\n radioInput.value = radioValue;\n if (isSelected(radioValue, params.inputValue)) {\n radioInput.checked = true;\n }\n const label = document.createElement('span');\n setInnerHtml(label, radioLabel);\n label.className = swalClasses.label;\n radioLabelElement.appendChild(radioInput);\n radioLabelElement.appendChild(label);\n radio.appendChild(radioLabelElement);\n });\n const radios = radio.querySelectorAll('input');\n if (radios.length) {\n radios[0].focus();\n }\n }\n\n /**\n * Converts `inputOptions` into an array of `[value, label]`s\n *\n * @param {Record<string, any>} inputOptions\n * @typedef {string[]} InputOptionFlattened\n * @returns {InputOptionFlattened[]}\n */\n const formatInputOptions = inputOptions => {\n /** @type {InputOptionFlattened[]} */\n const result = [];\n if (inputOptions instanceof Map) {\n inputOptions.forEach((value, key) => {\n let valueFormatted = value;\n if (typeof valueFormatted === 'object') {\n // case of <optgroup>\n valueFormatted = formatInputOptions(valueFormatted);\n }\n result.push([key, valueFormatted]);\n });\n } else {\n Object.keys(inputOptions).forEach(key => {\n let valueFormatted = inputOptions[key];\n if (typeof valueFormatted === 'object') {\n // case of <optgroup>\n valueFormatted = formatInputOptions(valueFormatted);\n }\n result.push([key, valueFormatted]);\n });\n }\n return result;\n };\n\n /**\n * @param {string} optionValue\n * @param {SweetAlertInputValue} inputValue\n * @returns {boolean}\n */\n const isSelected = (optionValue, inputValue) => {\n return !!inputValue && inputValue.toString() === optionValue.toString();\n };\n\n /**\n * @param {SweetAlert} instance\n */\n const handleConfirmButtonClick = instance => {\n const innerParams = privateProps.innerParams.get(instance);\n instance.disableButtons();\n if (innerParams.input) {\n handleConfirmOrDenyWithInput(instance, 'confirm');\n } else {\n confirm(instance, true);\n }\n };\n\n /**\n * @param {SweetAlert} instance\n */\n const handleDenyButtonClick = instance => {\n const innerParams = privateProps.innerParams.get(instance);\n instance.disableButtons();\n if (innerParams.returnInputValueOnDeny) {\n handleConfirmOrDenyWithInput(instance, 'deny');\n } else {\n deny(instance, false);\n }\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {Function} dismissWith\n */\n const handleCancelButtonClick = (instance, dismissWith) => {\n instance.disableButtons();\n dismissWith(DismissReason.cancel);\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {'confirm' | 'deny'} type\n */\n const handleConfirmOrDenyWithInput = (instance, type) => {\n const innerParams = privateProps.innerParams.get(instance);\n if (!innerParams.input) {\n error(`The \"input\" parameter is needed to be set when using returnInputValueOn${capitalizeFirstLetter(type)}`);\n return;\n }\n const input = instance.getInput();\n const inputValue = getInputValue(instance, innerParams);\n if (innerParams.inputValidator) {\n handleInputValidator(instance, inputValue, type);\n } else if (input && !input.checkValidity()) {\n instance.enableButtons();\n instance.showValidationMessage(innerParams.validationMessage || input.validationMessage);\n } else if (type === 'deny') {\n deny(instance, inputValue);\n } else {\n confirm(instance, inputValue);\n }\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertInputValue} inputValue\n * @param {'confirm' | 'deny'} type\n */\n const handleInputValidator = (instance, inputValue, type) => {\n const innerParams = privateProps.innerParams.get(instance);\n instance.disableInput();\n const validationPromise = Promise.resolve().then(() => asPromise(innerParams.inputValidator(inputValue, innerParams.validationMessage)));\n validationPromise.then(validationMessage => {\n instance.enableButtons();\n instance.enableInput();\n if (validationMessage) {\n instance.showValidationMessage(validationMessage);\n } else if (type === 'deny') {\n deny(instance, inputValue);\n } else {\n confirm(instance, inputValue);\n }\n });\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {any} value\n */\n const deny = (instance, value) => {\n const innerParams = privateProps.innerParams.get(instance || undefined);\n if (innerParams.showLoaderOnDeny) {\n showLoading(getDenyButton());\n }\n if (innerParams.preDeny) {\n instance.isAwaitingPromise = true; // Flagging the instance as awaiting a promise so it's own promise's reject/resolve methods doesn't get destroyed until the result from this preDeny's promise is received\n const preDenyPromise = Promise.resolve().then(() => asPromise(innerParams.preDeny(value, innerParams.validationMessage)));\n preDenyPromise.then(preDenyValue => {\n if (preDenyValue === false) {\n instance.hideLoading();\n handleAwaitingPromise(instance);\n } else {\n instance.close({\n isDenied: true,\n value: typeof preDenyValue === 'undefined' ? value : preDenyValue\n });\n }\n }).catch(error => rejectWith(instance || undefined, error));\n } else {\n instance.close({\n isDenied: true,\n value\n });\n }\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {any} value\n */\n const succeedWith = (instance, value) => {\n instance.close({\n isConfirmed: true,\n value\n });\n };\n\n /**\n *\n * @param {SweetAlert} instance\n * @param {string} error\n */\n const rejectWith = (instance, error) => {\n instance.rejectPromise(error);\n };\n\n /**\n *\n * @param {SweetAlert} instance\n * @param {any} value\n */\n const confirm = (instance, value) => {\n const innerParams = privateProps.innerParams.get(instance || undefined);\n if (innerParams.showLoaderOnConfirm) {\n showLoading();\n }\n if (innerParams.preConfirm) {\n instance.resetValidationMessage();\n instance.isAwaitingPromise = true; // Flagging the instance as awaiting a promise so it's own promise's reject/resolve methods doesn't get destroyed until the result from this preConfirm's promise is received\n const preConfirmPromise = Promise.resolve().then(() => asPromise(innerParams.preConfirm(value, innerParams.validationMessage)));\n preConfirmPromise.then(preConfirmValue => {\n if (isVisible$1(getValidationMessage()) || preConfirmValue === false) {\n instance.hideLoading();\n handleAwaitingPromise(instance);\n } else {\n succeedWith(instance, typeof preConfirmValue === 'undefined' ? value : preConfirmValue);\n }\n }).catch(error => rejectWith(instance || undefined, error));\n } else {\n succeedWith(instance, value);\n }\n };\n\n /**\n * Hides loader and shows back the button which was hidden by .showLoading()\n */\n function hideLoading() {\n // do nothing if popup is closed\n const innerParams = privateProps.innerParams.get(this);\n if (!innerParams) {\n return;\n }\n const domCache = privateProps.domCache.get(this);\n hide(domCache.loader);\n if (isToast()) {\n if (innerParams.icon) {\n show(getIcon());\n }\n } else {\n showRelatedButton(domCache);\n }\n removeClass([domCache.popup, domCache.actions], swalClasses.loading);\n domCache.popup.removeAttribute('aria-busy');\n domCache.popup.removeAttribute('data-loading');\n domCache.confirmButton.disabled = false;\n domCache.denyButton.disabled = false;\n domCache.cancelButton.disabled = false;\n }\n const showRelatedButton = domCache => {\n const buttonToReplace = domCache.popup.getElementsByClassName(domCache.loader.getAttribute('data-button-to-replace'));\n if (buttonToReplace.length) {\n show(buttonToReplace[0], 'inline-block');\n } else if (allButtonsAreHidden()) {\n hide(domCache.actions);\n }\n };\n\n /**\n * Gets the input DOM node, this method works with input parameter.\n *\n * @returns {HTMLInputElement | null}\n */\n function getInput() {\n const innerParams = privateProps.innerParams.get(this);\n const domCache = privateProps.domCache.get(this);\n if (!domCache) {\n return null;\n }\n return getInput$1(domCache.popup, innerParams.input);\n }\n\n /**\n * @param {SweetAlert} instance\n * @param {string[]} buttons\n * @param {boolean} disabled\n */\n function setButtonsDisabled(instance, buttons, disabled) {\n const domCache = privateProps.domCache.get(instance);\n buttons.forEach(button => {\n domCache[button].disabled = disabled;\n });\n }\n\n /**\n * @param {HTMLInputElement | null} input\n * @param {boolean} disabled\n */\n function setInputDisabled(input, disabled) {\n const popup = getPopup();\n if (!popup || !input) {\n return;\n }\n if (input.type === 'radio') {\n /** @type {NodeListOf<HTMLInputElement>} */\n const radios = popup.querySelectorAll(`[name=\"${swalClasses.radio}\"]`);\n for (let i = 0; i < radios.length; i++) {\n radios[i].disabled = disabled;\n }\n } else {\n input.disabled = disabled;\n }\n }\n\n /**\n * Enable all the buttons\n * @this {SweetAlert}\n */\n function enableButtons() {\n setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], false);\n }\n\n /**\n * Disable all the buttons\n * @this {SweetAlert}\n */\n function disableButtons() {\n setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], true);\n }\n\n /**\n * Enable the input field\n * @this {SweetAlert}\n */\n function enableInput() {\n setInputDisabled(this.getInput(), false);\n }\n\n /**\n * Disable the input field\n * @this {SweetAlert}\n */\n function disableInput() {\n setInputDisabled(this.getInput(), true);\n }\n\n /**\n * Show block with validation message\n *\n * @param {string} error\n * @this {SweetAlert}\n */\n function showValidationMessage(error) {\n const domCache = privateProps.domCache.get(this);\n const params = privateProps.innerParams.get(this);\n setInnerHtml(domCache.validationMessage, error);\n domCache.validationMessage.className = swalClasses['validation-message'];\n if (params.customClass && params.customClass.validationMessage) {\n addClass(domCache.validationMessage, params.customClass.validationMessage);\n }\n show(domCache.validationMessage);\n const input = this.getInput();\n if (input) {\n input.setAttribute('aria-invalid', 'true');\n input.setAttribute('aria-describedby', swalClasses['validation-message']);\n focusInput(input);\n addClass(input, swalClasses.inputerror);\n }\n }\n\n /**\n * Hide block with validation message\n *\n * @this {SweetAlert}\n */\n function resetValidationMessage() {\n const domCache = privateProps.domCache.get(this);\n if (domCache.validationMessage) {\n hide(domCache.validationMessage);\n }\n const input = this.getInput();\n if (input) {\n input.removeAttribute('aria-invalid');\n input.removeAttribute('aria-describedby');\n removeClass(input, swalClasses.inputerror);\n }\n }\n\n const defaultParams = {\n title: '',\n titleText: '',\n text: '',\n html: '',\n footer: '',\n icon: undefined,\n iconColor: undefined,\n iconHtml: undefined,\n template: undefined,\n toast: false,\n draggable: false,\n animation: true,\n theme: 'light',\n showClass: {\n popup: 'swal2-show',\n backdrop: 'swal2-backdrop-show',\n icon: 'swal2-icon-show'\n },\n hideClass: {\n popup: 'swal2-hide',\n backdrop: 'swal2-backdrop-hide',\n icon: 'swal2-icon-hide'\n },\n customClass: {},\n target: 'body',\n color: undefined,\n backdrop: true,\n heightAuto: true,\n allowOutsideClick: true,\n allowEscapeKey: true,\n allowEnterKey: true,\n stopKeydownPropagation: true,\n keydownListenerCapture: false,\n showConfirmButton: true,\n showDenyButton: false,\n showCancelButton: false,\n preConfirm: undefined,\n preDeny: undefined,\n confirmButtonText: 'OK',\n confirmButtonAriaLabel: '',\n confirmButtonColor: undefined,\n denyButtonText: 'No',\n denyButtonAriaLabel: '',\n denyButtonColor: undefined,\n cancelButtonText: 'Cancel',\n cancelButtonAriaLabel: '',\n cancelButtonColor: undefined,\n buttonsStyling: true,\n reverseButtons: false,\n focusConfirm: true,\n focusDeny: false,\n focusCancel: false,\n returnFocus: true,\n showCloseButton: false,\n closeButtonHtml: '&times;',\n closeButtonAriaLabel: 'Close this dialog',\n loaderHtml: '',\n showLoaderOnConfirm: false,\n showLoaderOnDeny: false,\n imageUrl: undefined,\n imageWidth: undefined,\n imageHeight: undefined,\n imageAlt: '',\n timer: undefined,\n timerProgressBar: false,\n width: undefined,\n padding: undefined,\n background: undefined,\n input: undefined,\n inputPlaceholder: '',\n inputLabel: '',\n inputValue: '',\n inputOptions: {},\n inputAutoFocus: true,\n inputAutoTrim: true,\n inputAttributes: {},\n inputValidator: undefined,\n returnInputValueOnDeny: false,\n validationMessage: undefined,\n grow: false,\n position: 'center',\n progressSteps: [],\n currentProgressStep: undefined,\n progressStepsDistance: undefined,\n willOpen: undefined,\n didOpen: undefined,\n didRender: undefined,\n willClose: undefined,\n didClose: undefined,\n didDestroy: undefined,\n scrollbarPadding: true,\n topLayer: false\n };\n const updatableParams = ['allowEscapeKey', 'allowOutsideClick', 'background', 'buttonsStyling', 'cancelButtonAriaLabel', 'cancelButtonColor', 'cancelButtonText', 'closeButtonAriaLabel', 'closeButtonHtml', 'color', 'confirmButtonAriaLabel', 'confirmButtonColor', 'confirmButtonText', 'currentProgressStep', 'customClass', 'denyButtonAriaLabel', 'denyButtonColor', 'denyButtonText', 'didClose', 'didDestroy', 'draggable', 'footer', 'hideClass', 'html', 'icon', 'iconColor', 'iconHtml', 'imageAlt', 'imageHeight', 'imageUrl', 'imageWidth', 'preConfirm', 'preDeny', 'progressSteps', 'returnFocus', 'reverseButtons', 'showCancelButton', 'showCloseButton', 'showConfirmButton', 'showDenyButton', 'text', 'title', 'titleText', 'theme', 'willClose'];\n\n /** @type {Record<string, string | undefined>} */\n const deprecatedParams = {\n allowEnterKey: undefined\n };\n const toastIncompatibleParams = ['allowOutsideClick', 'allowEnterKey', 'backdrop', 'draggable', 'focusConfirm', 'focusDeny', 'focusCancel', 'returnFocus', 'heightAuto', 'keydownListenerCapture'];\n\n /**\n * Is valid parameter\n *\n * @param {string} paramName\n * @returns {boolean}\n */\n const isValidParameter = paramName => {\n return Object.prototype.hasOwnProperty.call(defaultParams, paramName);\n };\n\n /**\n * Is valid parameter for Swal.update() method\n *\n * @param {string} paramName\n * @returns {boolean}\n */\n const isUpdatableParameter = paramName => {\n return updatableParams.indexOf(paramName) !== -1;\n };\n\n /**\n * Is deprecated parameter\n *\n * @param {string} paramName\n * @returns {string | undefined}\n */\n const isDeprecatedParameter = paramName => {\n return deprecatedParams[paramName];\n };\n\n /**\n * @param {string} param\n */\n const checkIfParamIsValid = param => {\n if (!isValidParameter(param)) {\n warn(`Unknown parameter \"${param}\"`);\n }\n };\n\n /**\n * @param {string} param\n */\n const checkIfToastParamIsValid = param => {\n if (toastIncompatibleParams.includes(param)) {\n warn(`The parameter \"${param}\" is incompatible with toasts`);\n }\n };\n\n /**\n * @param {string} param\n */\n const checkIfParamIsDeprecated = param => {\n const isDeprecated = isDeprecatedParameter(param);\n if (isDeprecated) {\n warnAboutDeprecation(param, isDeprecated);\n }\n };\n\n /**\n * Show relevant warnings for given params\n *\n * @param {SweetAlertOptions} params\n */\n const showWarningsForParams = params => {\n if (params.backdrop === false && params.allowOutsideClick) {\n warn('\"allowOutsideClick\" parameter requires `backdrop` parameter to be set to `true`');\n }\n if (params.theme && !['light', 'dark', 'auto', 'minimal', 'borderless', 'embed-iframe', 'bulma', 'bulma-light', 'bulma-dark'].includes(params.theme)) {\n warn(`Invalid theme \"${params.theme}\"`);\n }\n for (const param in params) {\n checkIfParamIsValid(param);\n if (params.toast) {\n checkIfToastParamIsValid(param);\n }\n checkIfParamIsDeprecated(param);\n }\n };\n\n /**\n * Updates popup parameters.\n *\n * @param {SweetAlertOptions} params\n */\n function update(params) {\n const container = getContainer();\n const popup = getPopup();\n const innerParams = privateProps.innerParams.get(this);\n if (!popup || hasClass(popup, innerParams.hideClass.popup)) {\n warn(`You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup.`);\n return;\n }\n const validUpdatableParams = filterValidParams(params);\n const updatedParams = Object.assign({}, innerParams, validUpdatableParams);\n showWarningsForParams(updatedParams);\n container.dataset['swal2Theme'] = updatedParams.theme;\n render(this, updatedParams);\n privateProps.innerParams.set(this, updatedParams);\n Object.defineProperties(this, {\n params: {\n value: Object.assign({}, this.params, params),\n writable: false,\n enumerable: true\n }\n });\n }\n\n /**\n * @param {SweetAlertOptions} params\n * @returns {SweetAlertOptions}\n */\n const filterValidParams = params => {\n const validUpdatableParams = {};\n Object.keys(params).forEach(param => {\n if (isUpdatableParameter(param)) {\n validUpdatableParams[param] = params[param];\n } else {\n warn(`Invalid parameter to update: ${param}`);\n }\n });\n return validUpdatableParams;\n };\n\n /**\n * Dispose the current SweetAlert2 instance\n */\n function _destroy() {\n const domCache = privateProps.domCache.get(this);\n const innerParams = privateProps.innerParams.get(this);\n if (!innerParams) {\n disposeWeakMaps(this); // The WeakMaps might have been partly destroyed, we must recall it to dispose any remaining WeakMaps #2335\n return; // This instance has already been destroyed\n }\n\n // Check if there is another Swal closing\n if (domCache.popup && globalState.swalCloseEventFinishedCallback) {\n globalState.swalCloseEventFinishedCallback();\n delete globalState.swalCloseEventFinishedCallback;\n }\n if (typeof innerParams.didDestroy === 'function') {\n innerParams.didDestroy();\n }\n globalState.eventEmitter.emit('didDestroy');\n disposeSwal(this);\n }\n\n /**\n * @param {SweetAlert} instance\n */\n const disposeSwal = instance => {\n disposeWeakMaps(instance);\n // Unset this.params so GC will dispose it (#1569)\n delete instance.params;\n // Unset globalState props so GC will dispose globalState (#1569)\n delete globalState.keydownHandler;\n delete globalState.keydownTarget;\n // Unset currentInstance\n delete globalState.currentInstance;\n };\n\n /**\n * @param {SweetAlert} instance\n */\n const disposeWeakMaps = instance => {\n // If the current instance is awaiting a promise result, we keep the privateMethods to call them once the promise result is retrieved #2335\n if (instance.isAwaitingPromise) {\n unsetWeakMaps(privateProps, instance);\n instance.isAwaitingPromise = true;\n } else {\n unsetWeakMaps(privateMethods, instance);\n unsetWeakMaps(privateProps, instance);\n delete instance.isAwaitingPromise;\n // Unset instance methods\n delete instance.disableButtons;\n delete instance.enableButtons;\n delete instance.getInput;\n delete instance.disableInput;\n delete instance.enableInput;\n delete instance.hideLoading;\n delete instance.disableLoading;\n delete instance.showValidationMessage;\n delete instance.resetValidationMessage;\n delete instance.close;\n delete instance.closePopup;\n delete instance.closeModal;\n delete instance.closeToast;\n delete instance.rejectPromise;\n delete instance.update;\n delete instance._destroy;\n }\n };\n\n /**\n * @param {object} obj\n * @param {SweetAlert} instance\n */\n const unsetWeakMaps = (obj, instance) => {\n for (const i in obj) {\n obj[i].delete(instance);\n }\n };\n\n var instanceMethods = /*#__PURE__*/Object.freeze({\n __proto__: null,\n _destroy: _destroy,\n close: close,\n closeModal: close,\n closePopup: close,\n closeToast: close,\n disableButtons: disableButtons,\n disableInput: disableInput,\n disableLoading: hideLoading,\n enableButtons: enableButtons,\n enableInput: enableInput,\n getInput: getInput,\n handleAwaitingPromise: handleAwaitingPromise,\n hideLoading: hideLoading,\n rejectPromise: rejectPromise,\n resetValidationMessage: resetValidationMessage,\n showValidationMessage: showValidationMessage,\n update: update\n });\n\n /**\n * @param {SweetAlertOptions} innerParams\n * @param {DomCache} domCache\n * @param {Function} dismissWith\n */\n const handlePopupClick = (innerParams, domCache, dismissWith) => {\n if (innerParams.toast) {\n handleToastClick(innerParams, domCache, dismissWith);\n } else {\n // Ignore click events that had mousedown on the popup but mouseup on the container\n // This can happen when the user drags a slider\n handleModalMousedown(domCache);\n\n // Ignore click events that had mousedown on the container but mouseup on the popup\n handleContainerMousedown(domCache);\n handleModalClick(innerParams, domCache, dismissWith);\n }\n };\n\n /**\n * @param {SweetAlertOptions} innerParams\n * @param {DomCache} domCache\n * @param {Function} dismissWith\n */\n const handleToastClick = (innerParams, domCache, dismissWith) => {\n // Closing toast by internal click\n domCache.popup.onclick = () => {\n if (innerParams && (isAnyButtonShown(innerParams) || innerParams.timer || innerParams.input)) {\n return;\n }\n dismissWith(DismissReason.close);\n };\n };\n\n /**\n * @param {SweetAlertOptions} innerParams\n * @returns {boolean}\n */\n const isAnyButtonShown = innerParams => {\n return !!(innerParams.showConfirmButton || innerParams.showDenyButton || innerParams.showCancelButton || innerParams.showCloseButton);\n };\n let ignoreOutsideClick = false;\n\n /**\n * @param {DomCache} domCache\n */\n const handleModalMousedown = domCache => {\n domCache.popup.onmousedown = () => {\n domCache.container.onmouseup = function (e) {\n domCache.container.onmouseup = () => {};\n // We only check if the mouseup target is the container because usually it doesn't\n // have any other direct children aside of the popup\n if (e.target === domCache.container) {\n ignoreOutsideClick = true;\n }\n };\n };\n };\n\n /**\n * @param {DomCache} domCache\n */\n const handleContainerMousedown = domCache => {\n domCache.container.onmousedown = e => {\n // prevent the modal text from being selected on double click on the container (allowOutsideClick: false)\n if (e.target === domCache.container) {\n e.preventDefault();\n }\n domCache.popup.onmouseup = function (e) {\n domCache.popup.onmouseup = () => {};\n // We also need to check if the mouseup target is a child of the popup\n if (e.target === domCache.popup || e.target instanceof HTMLElement && domCache.popup.contains(e.target)) {\n ignoreOutsideClick = true;\n }\n };\n };\n };\n\n /**\n * @param {SweetAlertOptions} innerParams\n * @param {DomCache} domCache\n * @param {Function} dismissWith\n */\n const handleModalClick = (innerParams, domCache, dismissWith) => {\n domCache.container.onclick = e => {\n if (ignoreOutsideClick) {\n ignoreOutsideClick = false;\n return;\n }\n if (e.target === domCache.container && callIfFunction(innerParams.allowOutsideClick)) {\n dismissWith(DismissReason.backdrop);\n }\n };\n };\n\n const isJqueryElement = elem => typeof elem === 'object' && elem.jquery;\n const isElement = elem => elem instanceof Element || isJqueryElement(elem);\n const argsToParams = args => {\n const params = {};\n if (typeof args[0] === 'object' && !isElement(args[0])) {\n Object.assign(params, args[0]);\n } else {\n ['title', 'html', 'icon'].forEach((name, index) => {\n const arg = args[index];\n if (typeof arg === 'string' || isElement(arg)) {\n params[name] = arg;\n } else if (arg !== undefined) {\n error(`Unexpected type of ${name}! Expected \"string\" or \"Element\", got ${typeof arg}`);\n }\n });\n }\n return params;\n };\n\n /**\n * Main method to create a new SweetAlert2 popup\n *\n * @param {...SweetAlertOptions} args\n * @returns {Promise<SweetAlertResult>}\n */\n function fire(...args) {\n return new this(...args);\n }\n\n /**\n * Returns an extended version of `Swal` containing `params` as defaults.\n * Useful for reusing Swal configuration.\n *\n * For example:\n *\n * Before:\n * const textPromptOptions = { input: 'text', showCancelButton: true }\n * const {value: firstName} = await Swal.fire({ ...textPromptOptions, title: 'What is your first name?' })\n * const {value: lastName} = await Swal.fire({ ...textPromptOptions, title: 'What is your last name?' })\n *\n * After:\n * const TextPrompt = Swal.mixin({ input: 'text', showCancelButton: true })\n * const {value: firstName} = await TextPrompt('What is your first name?')\n * const {value: lastName} = await TextPrompt('What is your last name?')\n *\n * @param {SweetAlertOptions} mixinParams\n * @returns {SweetAlert}\n */\n function mixin(mixinParams) {\n class MixinSwal extends this {\n _main(params, priorityMixinParams) {\n return super._main(params, Object.assign({}, mixinParams, priorityMixinParams));\n }\n }\n // @ts-ignore\n return MixinSwal;\n }\n\n /**\n * If `timer` parameter is set, returns number of milliseconds of timer remained.\n * Otherwise, returns undefined.\n *\n * @returns {number | undefined}\n */\n const getTimerLeft = () => {\n return globalState.timeout && globalState.timeout.getTimerLeft();\n };\n\n /**\n * Stop timer. Returns number of milliseconds of timer remained.\n * If `timer` parameter isn't set, returns undefined.\n *\n * @returns {number | undefined}\n */\n const stopTimer = () => {\n if (globalState.timeout) {\n stopTimerProgressBar();\n return globalState.timeout.stop();\n }\n };\n\n /**\n * Resume timer. Returns number of milliseconds of timer remained.\n * If `timer` parameter isn't set, returns undefined.\n *\n * @returns {number | undefined}\n */\n const resumeTimer = () => {\n if (globalState.timeout) {\n const remaining = globalState.timeout.start();\n animateTimerProgressBar(remaining);\n return remaining;\n }\n };\n\n /**\n * Resume timer. Returns number of milliseconds of timer remained.\n * If `timer` parameter isn't set, returns undefined.\n *\n * @returns {number | undefined}\n */\n const toggleTimer = () => {\n const timer = globalState.timeout;\n return timer && (timer.running ? stopTimer() : resumeTimer());\n };\n\n /**\n * Increase timer. Returns number of milliseconds of an updated timer.\n * If `timer` parameter isn't set, returns undefined.\n *\n * @param {number} ms\n * @returns {number | undefined}\n */\n const increaseTimer = ms => {\n if (globalState.timeout) {\n const remaining = globalState.timeout.increase(ms);\n animateTimerProgressBar(remaining, true);\n return remaining;\n }\n };\n\n /**\n * Check if timer is running. Returns true if timer is running\n * or false if timer is paused or stopped.\n * If `timer` parameter isn't set, returns undefined\n *\n * @returns {boolean}\n */\n const isTimerRunning = () => {\n return !!(globalState.timeout && globalState.timeout.isRunning());\n };\n\n let bodyClickListenerAdded = false;\n const clickHandlers = {};\n\n /**\n * @param {string} attr\n */\n function bindClickHandler(attr = 'data-swal-template') {\n clickHandlers[attr] = this;\n if (!bodyClickListenerAdded) {\n document.body.addEventListener('click', bodyClickListener);\n bodyClickListenerAdded = true;\n }\n }\n const bodyClickListener = event => {\n for (let el = event.target; el && el !== document; el = el.parentNode) {\n for (const attr in clickHandlers) {\n const template = el.getAttribute(attr);\n if (template) {\n clickHandlers[attr].fire({\n template\n });\n return;\n }\n }\n }\n };\n\n // Source: https://gist.github.com/mudge/5830382?permalink_comment_id=2691957#gistcomment-2691957\n\n class EventEmitter {\n constructor() {\n /** @type {Events} */\n this.events = {};\n }\n\n /**\n * @param {string} eventName\n * @returns {EventHandlers}\n */\n _getHandlersByEventName(eventName) {\n if (typeof this.events[eventName] === 'undefined') {\n // not Set because we need to keep the FIFO order\n // https://github.com/sweetalert2/sweetalert2/pull/2763#discussion_r1748990334\n this.events[eventName] = [];\n }\n return this.events[eventName];\n }\n\n /**\n * @param {string} eventName\n * @param {EventHandler} eventHandler\n */\n on(eventName, eventHandler) {\n const currentHandlers = this._getHandlersByEventName(eventName);\n if (!currentHandlers.includes(eventHandler)) {\n currentHandlers.push(eventHandler);\n }\n }\n\n /**\n * @param {string} eventName\n * @param {EventHandler} eventHandler\n */\n once(eventName, eventHandler) {\n /**\n * @param {Array} args\n */\n const onceFn = (...args) => {\n this.removeListener(eventName, onceFn);\n eventHandler.apply(this, args);\n };\n this.on(eventName, onceFn);\n }\n\n /**\n * @param {string} eventName\n * @param {Array} args\n */\n emit(eventName, ...args) {\n this._getHandlersByEventName(eventName).forEach(\n /**\n * @param {EventHandler} eventHandler\n */\n eventHandler => {\n try {\n eventHandler.apply(this, args);\n } catch (error) {\n console.error(error);\n }\n });\n }\n\n /**\n * @param {string} eventName\n * @param {EventHandler} eventHandler\n */\n removeListener(eventName, eventHandler) {\n const currentHandlers = this._getHandlersByEventName(eventName);\n const index = currentHandlers.indexOf(eventHandler);\n if (index > -1) {\n currentHandlers.splice(index, 1);\n }\n }\n\n /**\n * @param {string} eventName\n */\n removeAllListeners(eventName) {\n if (this.events[eventName] !== undefined) {\n // https://github.com/sweetalert2/sweetalert2/pull/2763#discussion_r1749239222\n this.events[eventName].length = 0;\n }\n }\n reset() {\n this.events = {};\n }\n }\n\n globalState.eventEmitter = new EventEmitter();\n\n /**\n * @param {string} eventName\n * @param {EventHandler} eventHandler\n */\n const on = (eventName, eventHandler) => {\n globalState.eventEmitter.on(eventName, eventHandler);\n };\n\n /**\n * @param {string} eventName\n * @param {EventHandler} eventHandler\n */\n const once = (eventName, eventHandler) => {\n globalState.eventEmitter.once(eventName, eventHandler);\n };\n\n /**\n * @param {string} [eventName]\n * @param {EventHandler} [eventHandler]\n */\n const off = (eventName, eventHandler) => {\n // Remove all handlers for all events\n if (!eventName) {\n globalState.eventEmitter.reset();\n return;\n }\n if (eventHandler) {\n // Remove a specific handler\n globalState.eventEmitter.removeListener(eventName, eventHandler);\n } else {\n // Remove all handlers for a specific event\n globalState.eventEmitter.removeAllListeners(eventName);\n }\n };\n\n var staticMethods = /*#__PURE__*/Object.freeze({\n __proto__: null,\n argsToParams: argsToParams,\n bindClickHandler: bindClickHandler,\n clickCancel: clickCancel,\n clickConfirm: clickConfirm,\n clickDeny: clickDeny,\n enableLoading: showLoading,\n fire: fire,\n getActions: getActions,\n getCancelButton: getCancelButton,\n getCloseButton: getCloseButton,\n getConfirmButton: getConfirmButton,\n getContainer: getContainer,\n getDenyButton: getDenyButton,\n getFocusableElements: getFocusableElements,\n getFooter: getFooter,\n getHtmlContainer: getHtmlContainer,\n getIcon: getIcon,\n getIconContent: getIconContent,\n getImage: getImage,\n getInputLabel: getInputLabel,\n getLoader: getLoader,\n getPopup: getPopup,\n getProgressSteps: getProgressSteps,\n getTimerLeft: getTimerLeft,\n getTimerProgressBar: getTimerProgressBar,\n getTitle: getTitle,\n getValidationMessage: getValidationMessage,\n increaseTimer: increaseTimer,\n isDeprecatedParameter: isDeprecatedParameter,\n isLoading: isLoading,\n isTimerRunning: isTimerRunning,\n isUpdatableParameter: isUpdatableParameter,\n isValidParameter: isValidParameter,\n isVisible: isVisible,\n mixin: mixin,\n off: off,\n on: on,\n once: once,\n resumeTimer: resumeTimer,\n showLoading: showLoading,\n stopTimer: stopTimer,\n toggleTimer: toggleTimer\n });\n\n class Timer {\n /**\n * @param {Function} callback\n * @param {number} delay\n */\n constructor(callback, delay) {\n this.callback = callback;\n this.remaining = delay;\n this.running = false;\n this.start();\n }\n\n /**\n * @returns {number}\n */\n start() {\n if (!this.running) {\n this.running = true;\n this.started = new Date();\n this.id = setTimeout(this.callback, this.remaining);\n }\n return this.remaining;\n }\n\n /**\n * @returns {number}\n */\n stop() {\n if (this.started && this.running) {\n this.running = false;\n clearTimeout(this.id);\n this.remaining -= new Date().getTime() - this.started.getTime();\n }\n return this.remaining;\n }\n\n /**\n * @param {number} n\n * @returns {number}\n */\n increase(n) {\n const running = this.running;\n if (running) {\n this.stop();\n }\n this.remaining += n;\n if (running) {\n this.start();\n }\n return this.remaining;\n }\n\n /**\n * @returns {number}\n */\n getTimerLeft() {\n if (this.running) {\n this.stop();\n this.start();\n }\n return this.remaining;\n }\n\n /**\n * @returns {boolean}\n */\n isRunning() {\n return this.running;\n }\n }\n\n const swalStringParams = ['swal-title', 'swal-html', 'swal-footer'];\n\n /**\n * @param {SweetAlertOptions} params\n * @returns {SweetAlertOptions}\n */\n const getTemplateParams = params => {\n const template = typeof params.template === 'string' ? (/** @type {HTMLTemplateElement} */document.querySelector(params.template)) : params.template;\n if (!template) {\n return {};\n }\n /** @type {DocumentFragment} */\n const templateContent = template.content;\n showWarningsForElements(templateContent);\n const result = Object.assign(getSwalParams(templateContent), getSwalFunctionParams(templateContent), getSwalButtons(templateContent), getSwalImage(templateContent), getSwalIcon(templateContent), getSwalInput(templateContent), getSwalStringParams(templateContent, swalStringParams));\n return result;\n };\n\n /**\n * @param {DocumentFragment} templateContent\n * @returns {Record<string, any>}\n */\n const getSwalParams = templateContent => {\n /** @type {Record<string, any>} */\n const result = {};\n /** @type {HTMLElement[]} */\n const swalParams = Array.from(templateContent.querySelectorAll('swal-param'));\n swalParams.forEach(param => {\n showWarningsForAttributes(param, ['name', 'value']);\n const paramName = /** @type {keyof SweetAlertOptions} */param.getAttribute('name');\n const value = param.getAttribute('value');\n if (!paramName || !value) {\n return;\n }\n if (typeof defaultParams[paramName] === 'boolean') {\n result[paramName] = value !== 'false';\n } else if (typeof defaultParams[paramName] === 'object') {\n result[paramName] = JSON.parse(value);\n } else {\n result[paramName] = value;\n }\n });\n return result;\n };\n\n /**\n * @param {DocumentFragment} templateContent\n * @returns {Record<string, any>}\n */\n const getSwalFunctionParams = templateContent => {\n /** @type {Record<string, any>} */\n const result = {};\n /** @type {HTMLElement[]} */\n const swalFunctions = Array.from(templateContent.querySelectorAll('swal-function-param'));\n swalFunctions.forEach(param => {\n const paramName = /** @type {keyof SweetAlertOptions} */param.getAttribute('name');\n const value = param.getAttribute('value');\n if (!paramName || !value) {\n return;\n }\n result[paramName] = new Function(`return ${value}`)();\n });\n return result;\n };\n\n /**\n * @param {DocumentFragment} templateContent\n * @returns {Record<string, any>}\n */\n const getSwalButtons = templateContent => {\n /** @type {Record<string, any>} */\n const result = {};\n /** @type {HTMLElement[]} */\n const swalButtons = Array.from(templateContent.querySelectorAll('swal-button'));\n swalButtons.forEach(button => {\n showWarningsForAttributes(button, ['type', 'color', 'aria-label']);\n const type = button.getAttribute('type');\n if (!type || !['confirm', 'cancel', 'deny'].includes(type)) {\n return;\n }\n result[`${type}ButtonText`] = button.innerHTML;\n result[`show${capitalizeFirstLetter(type)}Button`] = true;\n if (button.hasAttribute('color')) {\n result[`${type}ButtonColor`] = button.getAttribute('color');\n }\n if (button.hasAttribute('aria-label')) {\n result[`${type}ButtonAriaLabel`] = button.getAttribute('aria-label');\n }\n });\n return result;\n };\n\n /**\n * @param {DocumentFragment} templateContent\n * @returns {Pick<SweetAlertOptions, 'imageUrl' | 'imageWidth' | 'imageHeight' | 'imageAlt'>}\n */\n const getSwalImage = templateContent => {\n const result = {};\n /** @type {HTMLElement | null} */\n const image = templateContent.querySelector('swal-image');\n if (image) {\n showWarningsForAttributes(image, ['src', 'width', 'height', 'alt']);\n if (image.hasAttribute('src')) {\n result.imageUrl = image.getAttribute('src') || undefined;\n }\n if (image.hasAttribute('width')) {\n result.imageWidth = image.getAttribute('width') || undefined;\n }\n if (image.hasAttribute('height')) {\n result.imageHeight = image.getAttribute('height') || undefined;\n }\n if (image.hasAttribute('alt')) {\n result.imageAlt = image.getAttribute('alt') || undefined;\n }\n }\n return result;\n };\n\n /**\n * @param {DocumentFragment} templateContent\n * @returns {Record<string, any>}\n */\n const getSwalIcon = templateContent => {\n const result = {};\n /** @type {HTMLElement | null} */\n const icon = templateContent.querySelector('swal-icon');\n if (icon) {\n showWarningsForAttributes(icon, ['type', 'color']);\n if (icon.hasAttribute('type')) {\n result.icon = icon.getAttribute('type');\n }\n if (icon.hasAttribute('color')) {\n result.iconColor = icon.getAttribute('color');\n }\n result.iconHtml = icon.innerHTML;\n }\n return result;\n };\n\n /**\n * @param {DocumentFragment} templateContent\n * @returns {Record<string, any>}\n */\n const getSwalInput = templateContent => {\n /** @type {Record<string, any>} */\n const result = {};\n /** @type {HTMLElement | null} */\n const input = templateContent.querySelector('swal-input');\n if (input) {\n showWarningsForAttributes(input, ['type', 'label', 'placeholder', 'value']);\n result.input = input.getAttribute('type') || 'text';\n if (input.hasAttribute('label')) {\n result.inputLabel = input.getAttribute('label');\n }\n if (input.hasAttribute('placeholder')) {\n result.inputPlaceholder = input.getAttribute('placeholder');\n }\n if (input.hasAttribute('value')) {\n result.inputValue = input.getAttribute('value');\n }\n }\n /** @type {HTMLElement[]} */\n const inputOptions = Array.from(templateContent.querySelectorAll('swal-input-option'));\n if (inputOptions.length) {\n result.inputOptions = {};\n inputOptions.forEach(option => {\n showWarningsForAttributes(option, ['value']);\n const optionValue = option.getAttribute('value');\n if (!optionValue) {\n return;\n }\n const optionName = option.innerHTML;\n result.inputOptions[optionValue] = optionName;\n });\n }\n return result;\n };\n\n /**\n * @param {DocumentFragment} templateContent\n * @param {string[]} paramNames\n * @returns {Record<string, any>}\n */\n const getSwalStringParams = (templateContent, paramNames) => {\n /** @type {Record<string, any>} */\n const result = {};\n for (const i in paramNames) {\n const paramName = paramNames[i];\n /** @type {HTMLElement | null} */\n const tag = templateContent.querySelector(paramName);\n if (tag) {\n showWarningsForAttributes(tag, []);\n result[paramName.replace(/^swal-/, '')] = tag.innerHTML.trim();\n }\n }\n return result;\n };\n\n /**\n * @param {DocumentFragment} templateContent\n */\n const showWarningsForElements = templateContent => {\n const allowedElements = swalStringParams.concat(['swal-param', 'swal-function-param', 'swal-button', 'swal-image', 'swal-icon', 'swal-input', 'swal-input-option']);\n Array.from(templateContent.children).forEach(el => {\n const tagName = el.tagName.toLowerCase();\n if (!allowedElements.includes(tagName)) {\n warn(`Unrecognized element <${tagName}>`);\n }\n });\n };\n\n /**\n * @param {HTMLElement} el\n * @param {string[]} allowedAttributes\n */\n const showWarningsForAttributes = (el, allowedAttributes) => {\n Array.from(el.attributes).forEach(attribute => {\n if (allowedAttributes.indexOf(attribute.name) === -1) {\n warn([`Unrecognized attribute \"${attribute.name}\" on <${el.tagName.toLowerCase()}>.`, `${allowedAttributes.length ? `Allowed attributes are: ${allowedAttributes.join(', ')}` : 'To set the value, use HTML within the element.'}`]);\n }\n });\n };\n\n const SHOW_CLASS_TIMEOUT = 10;\n\n /**\n * Open popup, add necessary classes and styles, fix scrollbar\n *\n * @param {SweetAlertOptions} params\n */\n const openPopup = params => {\n const container = getContainer();\n const popup = getPopup();\n if (typeof params.willOpen === 'function') {\n params.willOpen(popup);\n }\n globalState.eventEmitter.emit('willOpen', popup);\n const bodyStyles = window.getComputedStyle(document.body);\n const initialBodyOverflow = bodyStyles.overflowY;\n addClasses(container, popup, params);\n\n // scrolling is 'hidden' until animation is done, after that 'auto'\n setTimeout(() => {\n setScrollingVisibility(container, popup);\n }, SHOW_CLASS_TIMEOUT);\n if (isModal()) {\n fixScrollContainer(container, params.scrollbarPadding, initialBodyOverflow);\n setAriaHidden();\n }\n if (!isToast() && !globalState.previousActiveElement) {\n globalState.previousActiveElement = document.activeElement;\n }\n if (typeof params.didOpen === 'function') {\n setTimeout(() => params.didOpen(popup));\n }\n globalState.eventEmitter.emit('didOpen', popup);\n removeClass(container, swalClasses['no-transition']);\n };\n\n /**\n * @param {AnimationEvent} event\n */\n const swalOpenAnimationFinished = event => {\n const popup = getPopup();\n if (event.target !== popup) {\n return;\n }\n const container = getContainer();\n popup.removeEventListener('animationend', swalOpenAnimationFinished);\n popup.removeEventListener('transitionend', swalOpenAnimationFinished);\n container.style.overflowY = 'auto';\n };\n\n /**\n * @param {HTMLElement} container\n * @param {HTMLElement} popup\n */\n const setScrollingVisibility = (container, popup) => {\n if (hasCssAnimation(popup)) {\n container.style.overflowY = 'hidden';\n popup.addEventListener('animationend', swalOpenAnimationFinished);\n popup.addEventListener('transitionend', swalOpenAnimationFinished);\n } else {\n container.style.overflowY = 'auto';\n }\n };\n\n /**\n * @param {HTMLElement} container\n * @param {boolean} scrollbarPadding\n * @param {string} initialBodyOverflow\n */\n const fixScrollContainer = (container, scrollbarPadding, initialBodyOverflow) => {\n iOSfix();\n if (scrollbarPadding && initialBodyOverflow !== 'hidden') {\n replaceScrollbarWithPadding(initialBodyOverflow);\n }\n\n // sweetalert2/issues/1247\n setTimeout(() => {\n container.scrollTop = 0;\n });\n };\n\n /**\n * @param {HTMLElement} container\n * @param {HTMLElement} popup\n * @param {SweetAlertOptions} params\n */\n const addClasses = (container, popup, params) => {\n addClass(container, params.showClass.backdrop);\n if (params.animation) {\n // this workaround with opacity is needed for https://github.com/sweetalert2/sweetalert2/issues/2059\n popup.style.setProperty('opacity', '0', 'important');\n show(popup, 'grid');\n setTimeout(() => {\n // Animate popup right after showing it\n addClass(popup, params.showClass.popup);\n // and remove the opacity workaround\n popup.style.removeProperty('opacity');\n }, SHOW_CLASS_TIMEOUT); // 10ms in order to fix #2062\n } else {\n show(popup, 'grid');\n }\n addClass([document.documentElement, document.body], swalClasses.shown);\n if (params.heightAuto && params.backdrop && !params.toast) {\n addClass([document.documentElement, document.body], swalClasses['height-auto']);\n }\n };\n\n var defaultInputValidators = {\n /**\n * @param {string} string\n * @param {string} [validationMessage]\n * @returns {Promise<string | void>}\n */\n email: (string, validationMessage) => {\n return /^[a-zA-Z0-9.+_'-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z0-9-]+$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid email address');\n },\n /**\n * @param {string} string\n * @param {string} [validationMessage]\n * @returns {Promise<string | void>}\n */\n url: (string, validationMessage) => {\n // taken from https://stackoverflow.com/a/3809435 with a small change from #1306 and #2013\n return /^https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-z]{2,63}\\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid URL');\n }\n };\n\n /**\n * @param {SweetAlertOptions} params\n */\n function setDefaultInputValidators(params) {\n // Use default `inputValidator` for supported input types if not provided\n if (params.inputValidator) {\n return;\n }\n if (params.input === 'email') {\n params.inputValidator = defaultInputValidators['email'];\n }\n if (params.input === 'url') {\n params.inputValidator = defaultInputValidators['url'];\n }\n }\n\n /**\n * @param {SweetAlertOptions} params\n */\n function validateCustomTargetElement(params) {\n // Determine if the custom target element is valid\n if (!params.target || typeof params.target === 'string' && !document.querySelector(params.target) || typeof params.target !== 'string' && !params.target.appendChild) {\n warn('Target parameter is not valid, defaulting to \"body\"');\n params.target = 'body';\n }\n }\n\n /**\n * Set type, text and actions on popup\n *\n * @param {SweetAlertOptions} params\n */\n function setParameters(params) {\n setDefaultInputValidators(params);\n\n // showLoaderOnConfirm && preConfirm\n if (params.showLoaderOnConfirm && !params.preConfirm) {\n warn('showLoaderOnConfirm is set to true, but preConfirm is not defined.\\n' + 'showLoaderOnConfirm should be used together with preConfirm, see usage example:\\n' + 'https://sweetalert2.github.io/#ajax-request');\n }\n validateCustomTargetElement(params);\n\n // Replace newlines with <br> in title\n if (typeof params.title === 'string') {\n params.title = params.title.split('\\n').join('<br />');\n }\n init(params);\n }\n\n /** @type {SweetAlert} */\n let currentInstance;\n var _promise = /*#__PURE__*/new WeakMap();\n class SweetAlert {\n /**\n * @param {...any} args\n * @this {SweetAlert}\n */\n constructor(...args) {\n /**\n * @type {Promise<SweetAlertResult>}\n */\n _classPrivateFieldInitSpec(this, _promise, void 0);\n // Prevent run in Node env\n if (typeof window === 'undefined') {\n return;\n }\n currentInstance = this;\n\n // @ts-ignore\n const outerParams = Object.freeze(this.constructor.argsToParams(args));\n\n /** @type {Readonly<SweetAlertOptions>} */\n this.params = outerParams;\n\n /** @type {boolean} */\n this.isAwaitingPromise = false;\n _classPrivateFieldSet2(_promise, this, this._main(currentInstance.params));\n }\n _main(userParams, mixinParams = {}) {\n showWarningsForParams(Object.assign({}, mixinParams, userParams));\n if (globalState.currentInstance) {\n const swalPromiseResolve = privateMethods.swalPromiseResolve.get(globalState.currentInstance);\n const {\n isAwaitingPromise\n } = globalState.currentInstance;\n globalState.currentInstance._destroy();\n if (!isAwaitingPromise) {\n swalPromiseResolve({\n isDismissed: true\n });\n }\n if (isModal()) {\n unsetAriaHidden();\n }\n }\n globalState.currentInstance = currentInstance;\n const innerParams = prepareParams(userParams, mixinParams);\n setParameters(innerParams);\n Object.freeze(innerParams);\n\n // clear the previous timer\n if (globalState.timeout) {\n globalState.timeout.stop();\n delete globalState.timeout;\n }\n\n // clear the restore focus timeout\n clearTimeout(globalState.restoreFocusTimeout);\n const domCache = populateDomCache(currentInstance);\n render(currentInstance, innerParams);\n privateProps.innerParams.set(currentInstance, innerParams);\n return swalPromise(currentInstance, domCache, innerParams);\n }\n\n // `catch` cannot be the name of a module export, so we define our thenable methods here instead\n then(onFulfilled) {\n return _classPrivateFieldGet2(_promise, this).then(onFulfilled);\n }\n finally(onFinally) {\n return _classPrivateFieldGet2(_promise, this).finally(onFinally);\n }\n }\n\n /**\n * @param {SweetAlert} instance\n * @param {DomCache} domCache\n * @param {SweetAlertOptions} innerParams\n * @returns {Promise}\n */\n const swalPromise = (instance, domCache, innerParams) => {\n return new Promise((resolve, reject) => {\n // functions to handle all closings/dismissals\n /**\n * @param {DismissReason} dismiss\n */\n const dismissWith = dismiss => {\n instance.close({\n isDismissed: true,\n dismiss\n });\n };\n privateMethods.swalPromiseResolve.set(instance, resolve);\n privateMethods.swalPromiseReject.set(instance, reject);\n domCache.confirmButton.onclick = () => {\n handleConfirmButtonClick(instance);\n };\n domCache.denyButton.onclick = () => {\n handleDenyButtonClick(instance);\n };\n domCache.cancelButton.onclick = () => {\n handleCancelButtonClick(instance, dismissWith);\n };\n domCache.closeButton.onclick = () => {\n dismissWith(DismissReason.close);\n };\n handlePopupClick(innerParams, domCache, dismissWith);\n addKeydownHandler(globalState, innerParams, dismissWith);\n handleInputOptionsAndValue(instance, innerParams);\n openPopup(innerParams);\n setupTimer(globalState, innerParams, dismissWith);\n initFocus(domCache, innerParams);\n\n // Scroll container to top on open (#1247, #1946)\n setTimeout(() => {\n domCache.container.scrollTop = 0;\n });\n });\n };\n\n /**\n * @param {SweetAlertOptions} userParams\n * @param {SweetAlertOptions} mixinParams\n * @returns {SweetAlertOptions}\n */\n const prepareParams = (userParams, mixinParams) => {\n const templateParams = getTemplateParams(userParams);\n const params = Object.assign({}, defaultParams, mixinParams, templateParams, userParams); // precedence is described in #2131\n params.showClass = Object.assign({}, defaultParams.showClass, params.showClass);\n params.hideClass = Object.assign({}, defaultParams.hideClass, params.hideClass);\n if (params.animation === false) {\n params.showClass = {\n backdrop: 'swal2-noanimation'\n };\n params.hideClass = {};\n }\n return params;\n };\n\n /**\n * @param {SweetAlert} instance\n * @returns {DomCache}\n */\n const populateDomCache = instance => {\n const domCache = {\n popup: getPopup(),\n container: getContainer(),\n actions: getActions(),\n confirmButton: getConfirmButton(),\n denyButton: getDenyButton(),\n cancelButton: getCancelButton(),\n loader: getLoader(),\n closeButton: getCloseButton(),\n validationMessage: getValidationMessage(),\n progressSteps: getProgressSteps()\n };\n privateProps.domCache.set(instance, domCache);\n return domCache;\n };\n\n /**\n * @param {GlobalState} globalState\n * @param {SweetAlertOptions} innerParams\n * @param {Function} dismissWith\n */\n const setupTimer = (globalState, innerParams, dismissWith) => {\n const timerProgressBar = getTimerProgressBar();\n hide(timerProgressBar);\n if (innerParams.timer) {\n globalState.timeout = new Timer(() => {\n dismissWith('timer');\n delete globalState.timeout;\n }, innerParams.timer);\n if (innerParams.timerProgressBar) {\n show(timerProgressBar);\n applyCustomClass(timerProgressBar, innerParams, 'timerProgressBar');\n setTimeout(() => {\n if (globalState.timeout && globalState.timeout.running) {\n // timer can be already stopped or unset at this point\n animateTimerProgressBar(innerParams.timer);\n }\n });\n }\n }\n };\n\n /**\n * Initialize focus in the popup:\n *\n * 1. If `toast` is `true`, don't steal focus from the document.\n * 2. Else if there is an [autofocus] element, focus it.\n * 3. Else if `focusConfirm` is `true` and confirm button is visible, focus it.\n * 4. Else if `focusDeny` is `true` and deny button is visible, focus it.\n * 5. Else if `focusCancel` is `true` and cancel button is visible, focus it.\n * 6. Else focus the first focusable element in a popup (if any).\n *\n * @param {DomCache} domCache\n * @param {SweetAlertOptions} innerParams\n */\n const initFocus = (domCache, innerParams) => {\n if (innerParams.toast) {\n return;\n }\n // TODO: this is dumb, remove `allowEnterKey` param in the next major version\n if (!callIfFunction(innerParams.allowEnterKey)) {\n warnAboutDeprecation('allowEnterKey');\n blurActiveElement();\n return;\n }\n if (focusAutofocus(domCache)) {\n return;\n }\n if (focusButton(domCache, innerParams)) {\n return;\n }\n setFocus(-1, 1);\n };\n\n /**\n * @param {DomCache} domCache\n * @returns {boolean}\n */\n const focusAutofocus = domCache => {\n const autofocusElements = Array.from(domCache.popup.querySelectorAll('[autofocus]'));\n for (const autofocusElement of autofocusElements) {\n if (autofocusElement instanceof HTMLElement && isVisible$1(autofocusElement)) {\n autofocusElement.focus();\n return true;\n }\n }\n return false;\n };\n\n /**\n * @param {DomCache} domCache\n * @param {SweetAlertOptions} innerParams\n * @returns {boolean}\n */\n const focusButton = (domCache, innerParams) => {\n if (innerParams.focusDeny && isVisible$1(domCache.denyButton)) {\n domCache.denyButton.focus();\n return true;\n }\n if (innerParams.focusCancel && isVisible$1(domCache.cancelButton)) {\n domCache.cancelButton.focus();\n return true;\n }\n if (innerParams.focusConfirm && isVisible$1(domCache.confirmButton)) {\n domCache.confirmButton.focus();\n return true;\n }\n return false;\n };\n const blurActiveElement = () => {\n if (document.activeElement instanceof HTMLElement && typeof document.activeElement.blur === 'function') {\n document.activeElement.blur();\n }\n };\n\n // Dear russian users visiting russian sites. Let's have fun.\n if (typeof window !== 'undefined' && /^ru\\b/.test(navigator.language) && location.host.match(/\\.(ru|su|by|xn--p1ai)$/)) {\n const now = new Date();\n const initiationDate = localStorage.getItem('swal-initiation');\n if (!initiationDate) {\n localStorage.setItem('swal-initiation', `${now}`);\n } else if ((now.getTime() - Date.parse(initiationDate)) / (1000 * 60 * 60 * 24) > 3) {\n setTimeout(() => {\n document.body.style.pointerEvents = 'none';\n const ukrainianAnthem = document.createElement('audio');\n ukrainianAnthem.src = 'https://flag-gimn.ru/wp-content/uploads/2021/09/Ukraina.mp3';\n ukrainianAnthem.loop = true;\n document.body.appendChild(ukrainianAnthem);\n setTimeout(() => {\n ukrainianAnthem.play().catch(() => {\n // ignore\n });\n }, 2500);\n }, 500);\n }\n }\n\n // Assign instance methods from src/instanceMethods/*.js to prototype\n SweetAlert.prototype.disableButtons = disableButtons;\n SweetAlert.prototype.enableButtons = enableButtons;\n SweetAlert.prototype.getInput = getInput;\n SweetAlert.prototype.disableInput = disableInput;\n SweetAlert.prototype.enableInput = enableInput;\n SweetAlert.prototype.hideLoading = hideLoading;\n SweetAlert.prototype.disableLoading = hideLoading;\n SweetAlert.prototype.showValidationMessage = showValidationMessage;\n SweetAlert.prototype.resetValidationMessage = resetValidationMessage;\n SweetAlert.prototype.close = close;\n SweetAlert.prototype.closePopup = close;\n SweetAlert.prototype.closeModal = close;\n SweetAlert.prototype.closeToast = close;\n SweetAlert.prototype.rejectPromise = rejectPromise;\n SweetAlert.prototype.update = update;\n SweetAlert.prototype._destroy = _destroy;\n\n // Assign static methods from src/staticMethods/*.js to constructor\n Object.assign(SweetAlert, staticMethods);\n\n // Proxy to instance methods to constructor, for now, for backwards compatibility\n Object.keys(instanceMethods).forEach(key => {\n /**\n * @param {...any} args\n * @returns {any | undefined}\n */\n SweetAlert[key] = function (...args) {\n if (currentInstance && currentInstance[key]) {\n return currentInstance[key](...args);\n }\n return null;\n };\n });\n SweetAlert.DismissReason = DismissReason;\n SweetAlert.version = '11.22.0';\n\n const Swal = SweetAlert;\n // @ts-ignore\n Swal.default = Swal;\n\n return Swal;\n\n}));\nif (typeof this !== 'undefined' && this.Sweetalert2){this.swal = this.sweetAlert = this.Swal = this.SweetAlert = this.Sweetalert2}\n","import Swal from 'sweetalert2/dist/sweetalert2.js';\r\nimport type { SweetAlertCustomClass, SweetAlertIcon, SweetAlertInput, SweetAlertPosition } from 'sweetalert2';\r\nimport { CannotOpenModalException, CannotOpenModalWarning, FetchResponse, g, SyncOrAsync } from '@/app';\r\n\r\ntype ValueOrThunk<T> = T | (() => T)\r\n\r\ninterface BasicModalOptions {\r\n icon?: SweetAlertIcon;\r\n title?: string;\r\n text?: string;\r\n html?: string;\r\n width?: number | string;\r\n showConfirmButton?: boolean;\r\n confirmButtonText?: string;\r\n confirmButtonColor?: string;\r\n showCancelButton?: boolean;\r\n cancelButtonText?: string;\r\n cancelButtonColor?: string;\r\n showCloseButton?: boolean;\r\n allowOutsideClick?: ValueOrThunk<boolean> | false;\r\n showLoaderOnConfirm?: boolean;\r\n timer?: number;\r\n position?: SweetAlertPosition;\r\n willOpen?(popup: HTMLElement): void;\r\n didClose?(): void;\r\n didOpen?(popup: HTMLElement): void;\r\n didRender?(popup: HTMLElement): void;\r\n preConfirm?(inputValue: any): SyncOrAsync<any>;\r\n footer?: string;\r\n customClass?: SweetAlertCustomClass;\r\n}\r\n\r\ninterface UpdateModalOptions extends BasicModalOptions {\r\n hideLoading?: boolean;\r\n}\r\n\r\ninterface AjaxModalOptions extends BasicModalOptions {\r\n ajaxUrl: string;\r\n ajaxType?: string;\r\n ajaxParams?: {};\r\n footerOnFail?: string;\r\n}\r\n\r\ninterface InputModalOptions extends BasicModalOptions {\r\n input?: Exclude<SweetAlertInput, 'file'>;\r\n inputValue?: string;\r\n inputPlaceholder?: string;\r\n inputOptions?: SyncOrAsync<ReadonlyMap<string, string> | Record<string, any>>;\r\n inputId?: string;\r\n getValidationMessage?(value: string): string | null;\r\n preConfirm_url: string;\r\n preConfirm_type?: string;\r\n preConfirm_params?: Record<string, any>;\r\n preConfirm_inputParamName?: string;\r\n preConfirm_permitConfirm?: boolean;\r\n preConfirm_ajaxOkCode?(): void;\r\n}\r\n\r\ninterface BladeModalOptions extends BasicModalOptions {\r\n ajaxUrl: string;\r\n showConfirmButton?: boolean;\r\n confirmButtonText?: string;\r\n jsActionsInModal?(p: {}): void;\r\n funcParam?: {};\r\n}\r\n\r\ninterface ToastOptions {\r\n icon?: SweetAlertIcon;\r\n title?: string;\r\n position?: SweetAlertPosition;\r\n timer?: number;\r\n}\r\n\r\ninterface ToastBothOptions {\r\n success: boolean;\r\n icon?: SweetAlertIcon;\r\n iconOk?: SweetAlertIcon;\r\n iconNok?: SweetAlertIcon;\r\n title?: string;\r\n titleOk?: string;\r\n titleNok?: string;\r\n timer?: number;\r\n timerOk?: number;\r\n timerNok?: number;\r\n position?: SweetAlertPosition;\r\n}\r\n\r\nconst InputsNeedsChangeListener = ['range', 'select', 'radio', 'checkbox', 'date', 'datetime-local', 'time', 'week', 'month'];\r\n\r\nexport class SModal {\r\n static colorBlue = '#3085d6';\r\n static colorRed = '#d33';\r\n static colorGray = '#aaa';\r\n\r\n static isPendigLoading = false;\r\n\r\n static mustAbortIfIsAlreadyOpen({isUpdate = false, ignorePendingLoading = false}): void {\r\n if (g.errorModalIsShowed) {\r\n throw new CannotOpenModalException('Se ha intentado abrir un modal cuando hay un modal de error abierto');\r\n }\r\n if (!ignorePendingLoading && !isUpdate && SModal.isPendigLoading) {\r\n throw new CannotOpenModalWarning('Se ha intentado abrir un modal cuando hay un modal de loading pendiente de actualizarse');\r\n }\r\n }\r\n\r\n static #checkAndExecuteShow(callback: Function): Promise<any> {\r\n try {\r\n return callback();\r\n } catch (e) {\r\n if (e instanceof CannotOpenModalException || e instanceof CannotOpenModalWarning) {\r\n g.consoleInfo(e.message);\r\n } else {\r\n throw e;\r\n }\r\n return Promise.reject();\r\n }\r\n }\r\n\r\n static #checkAndExecuteUpdate(callback: Function) {\r\n try {\r\n callback();\r\n } catch (e) {\r\n if (e instanceof CannotOpenModalException || e instanceof CannotOpenModalWarning) {\r\n g.consoleInfo(e.message);\r\n } else {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n static Toast = Swal.mixin({\r\n title: 'Your work has been saved',\r\n toast: true,\r\n position: 'top-end',\r\n showConfirmButton: false,\r\n timer: 3000,\r\n timerProgressBar: true,\r\n didOpen: (toast) => {\r\n toast.addEventListener('mouseenter', Swal.stopTimer);\r\n toast.addEventListener('mouseleave', Swal.resumeTimer);\r\n },\r\n });\r\n\r\n static toastInfo({\r\n icon = 'info',\r\n title = 'Your work has been saved',\r\n position = 'top-end',\r\n timer = 3000,\r\n }: ToastOptions) {\r\n return SModal.#checkAndExecuteShow(() => {\r\n SModal.mustAbortIfIsAlreadyOpen({});\r\n return SModal.Toast.fire({icon, title, position, timer});\r\n });\r\n }\r\n\r\n static toastSuccess({\r\n icon = 'success',\r\n title = 'Your work has been saved',\r\n position = 'top-end',\r\n timer = 3000,\r\n }: ToastOptions) {\r\n return SModal.#checkAndExecuteShow(() => {\r\n SModal.mustAbortIfIsAlreadyOpen({});\r\n return SModal.Toast.fire({icon, title, position, timer});\r\n });\r\n }\r\n\r\n static toastError({\r\n icon = 'error',\r\n title = 'Something error ocurred',\r\n position = 'top-end',\r\n timer = 3000,\r\n }: ToastOptions) {\r\n return SModal.#checkAndExecuteShow(() => {\r\n SModal.mustAbortIfIsAlreadyOpen({});\r\n return SModal.Toast.fire({icon, title, position, timer});\r\n });\r\n }\r\n\r\n static toastBottom({\r\n icon = 'success',\r\n title = 'Your work has been saved',\r\n position = 'bottom-end',\r\n timer = 3000,\r\n }: ToastOptions) {\r\n return SModal.#checkAndExecuteShow(() => {\r\n SModal.mustAbortIfIsAlreadyOpen({});\r\n return SModal.Toast.fire({icon, title, position, timer});\r\n });\r\n }\r\n\r\n static toastBoth({\r\n success,\r\n icon = undefined,\r\n iconOk = 'success',\r\n iconNok = 'error',\r\n title = undefined,\r\n titleOk = 'Your work has been saved',\r\n titleNok = 'Something error ocurred',\r\n timer = undefined,\r\n timerOk = 3000,\r\n timerNok = 4000,\r\n position = 'top-end',\r\n }: ToastBothOptions) {\r\n return SModal.#checkAndExecuteShow(() => {\r\n SModal.mustAbortIfIsAlreadyOpen({});\r\n icon = (icon !== undefined) ? icon : (success ? iconOk : iconNok);\r\n title = (title !== undefined) ? title : (success ? titleOk : titleNok);\r\n timer = (timer !== undefined) ? timer : (success ? timerOk : timerNok);\r\n return SModal.Toast.fire({icon, title, position, timer});\r\n });\r\n }\r\n\r\n static basic(params: BasicModalOptions) {\r\n return SModal.#checkAndExecuteShow(() => {\r\n SModal.mustAbortIfIsAlreadyOpen({});\r\n return Swal.fire(params);\r\n });\r\n }\r\n\r\n static successModal({\r\n icon = 'success',\r\n title = 'Correcto',\r\n html = 'Todo ha ido bien',\r\n width = 850,\r\n confirmButtonText = 'Ok',\r\n allowOutsideClick = () => !Swal.isLoading(),\r\n }: BasicModalOptions) {\r\n return SModal.#checkAndExecuteShow(() => {\r\n SModal.mustAbortIfIsAlreadyOpen({});\r\n return Swal.fire({\r\n icon: icon,\r\n title: title,\r\n html: html,\r\n width: width,\r\n confirmButtonText: confirmButtonText,\r\n allowOutsideClick: allowOutsideClick,\r\n });\r\n });\r\n }\r\n\r\n static errorModal({\r\n icon = 'error',\r\n title = 'Ups...): Algo ha ido mal',\r\n html = undefined,\r\n width = 850,\r\n confirmButtonText = 'Ok',\r\n allowOutsideClick = false,\r\n footer = undefined,\r\n }: BasicModalOptions, ignorePendingLoading = false) {\r\n return SModal.#checkAndExecuteShow(() => {\r\n SModal.mustAbortIfIsAlreadyOpen({ignorePendingLoading});\r\n return Swal.fire({\r\n icon: icon,\r\n title: title,\r\n html: html,\r\n width: width,\r\n showCloseButton: true,\r\n confirmButtonText: confirmButtonText,\r\n allowOutsideClick: allowOutsideClick,\r\n footer: footer,\r\n });\r\n });\r\n }\r\n\r\n static confirmModal({\r\n title = 'Confirmar',\r\n html = '¿Seguro que quieres realizar la acción?',\r\n width = 850,\r\n confirmButtonText = 'Ok',\r\n cancelButtonText = 'Cancelar',\r\n }: BasicModalOptions) {\r\n return SModal.#checkAndExecuteShow(() => {\r\n SModal.mustAbortIfIsAlreadyOpen({});\r\n return Swal.fire({\r\n title: title,\r\n html: html,\r\n width: width,\r\n showCancelButton: true,\r\n confirmButtonText: confirmButtonText,\r\n cancelButtonText: cancelButtonText,\r\n confirmButtonColor: SModal.colorRed,\r\n cancelButtonColor: SModal.colorGray,\r\n showLoaderOnConfirm: false,\r\n allowOutsideClick: false, // \"() => !Swal.isLoading()\" -> para que no se pueda cerras si esta cargando. | \"false\" -> para que no se pueda cerrar\r\n });\r\n });\r\n }\r\n\r\n static loadingModal({\r\n title = 'Calculando...',\r\n width = 850,\r\n willOpen = () => Swal.showLoading(),\r\n }: BasicModalOptions) {\r\n return SModal.#checkAndExecuteShow(() => {\r\n SModal.mustAbortIfIsAlreadyOpen({});\r\n SModal.isPendigLoading = true;\r\n return Swal.fire({\r\n title: title,\r\n width: width,\r\n showConfirmButton: false,\r\n willOpen: async (popup) => {\r\n await willOpen(popup);\r\n SModal.isPendigLoading = false;\r\n },\r\n allowOutsideClick: () => !Swal.isLoading(),\r\n });\r\n });\r\n }\r\n\r\n static loadingModalAndDoAction({\r\n title = 'Calculando...',\r\n ajaxUrl,\r\n ajaxType,\r\n ajaxParams,\r\n allowOutsideClick = () => !Swal.isLoading(),\r\n footerOnFail = undefined,\r\n }: AjaxModalOptions) {\r\n return SModal.#checkAndExecuteShow(() => {\r\n SModal.mustAbortIfIsAlreadyOpen({});\r\n SModal.isPendigLoading = true;\r\n return Swal.fire({\r\n title: title,\r\n width: 850,\r\n showConfirmButton: false,\r\n willOpen: async (popup) => {\r\n Swal.showLoading();\r\n try {\r\n // Ajax to launch Status/Mitigation\r\n const result = await g.fetch({url: ajaxUrl, type: ajaxType, params: ajaxParams});\r\n\r\n // Check if result is wrong and update modal content\r\n if (!result.success || !result.ok) {\r\n SModal.updateErrorModal({icon: 'warning', html: result.message});\r\n return;\r\n }\r\n\r\n // Update modal with success message\r\n SModal.updateSuccessModal({title: 'Correcto', html: result.message});\r\n } catch (e) {\r\n g.catchCode({error: e, footer: footerOnFail});\r\n }\r\n SModal.isPendigLoading = false;\r\n },\r\n allowOutsideClick: allowOutsideClick,\r\n });\r\n });\r\n }\r\n\r\n static updateModal(params: UpdateModalOptions) {\r\n SModal.#checkAndExecuteUpdate(() => {\r\n SModal.mustAbortIfIsAlreadyOpen({isUpdate: true});\r\n if (params.hideLoading === true) {\r\n Swal.hideLoading();\r\n delete params.hideLoading;\r\n }\r\n Swal.update(params);\r\n });\r\n }\r\n\r\n static updateSuccessModal({\r\n icon = 'success',\r\n title = 'Exito',\r\n html = 'Todo ha ido bien',\r\n hideLoading = true,\r\n footer = undefined,\r\n allowOutsideClick = undefined,\r\n }: UpdateModalOptions) {\r\n SModal.updateModal({\r\n icon: icon,\r\n title: title,\r\n html: html,\r\n hideLoading: hideLoading,\r\n footer: footer,\r\n allowOutsideClick: allowOutsideClick,\r\n showConfirmButton: true,\r\n });\r\n }\r\n\r\n static updateErrorModal({\r\n icon = 'error',\r\n title = 'Error',\r\n html = 'Ha habido algun error',\r\n hideLoading = true,\r\n footer = undefined,\r\n allowOutsideClick = undefined,\r\n }: UpdateModalOptions) {\r\n SModal.updateModal({\r\n icon: icon,\r\n title: title,\r\n html: html,\r\n hideLoading: hideLoading,\r\n footer: footer,\r\n allowOutsideClick: allowOutsideClick,\r\n showConfirmButton: true,\r\n });\r\n }\r\n\r\n static confirmModalAfterAjaxCheck({\r\n title = 'Confirmar',\r\n html = '¿Seguro que quieres realizar la acción?',\r\n confirmButtonText = 'Ok',\r\n confirmButtonColor = SModal.colorBlue,\r\n cancelButtonText = 'Cancelar',\r\n ajaxUrl,\r\n ajaxType = 'GET',\r\n ajaxParams,\r\n footerOnFail = undefined,\r\n }: AjaxModalOptions) {\r\n return SModal.#checkAndExecuteShow(() => {\r\n SModal.mustAbortIfIsAlreadyOpen({});\r\n return Swal.fire({\r\n title: title,\r\n width: 850,\r\n showCancelButton: true,\r\n confirmButtonText: confirmButtonText,\r\n cancelButtonText: cancelButtonText,\r\n confirmButtonColor: confirmButtonColor,\r\n cancelButtonColor: SModal.colorGray,\r\n showLoaderOnConfirm: false,\r\n willOpen: async () => {\r\n Swal.showLoading();\r\n try {\r\n const res = await g.fetch({url: ajaxUrl, type: ajaxType, params: ajaxParams});\r\n // await Hlp.sleep(1000);\r\n if (res.success && res.ok) {\r\n SModal.updateModal({html: html, confirmButtonColor: SModal.colorRed});\r\n } else {\r\n SModal.updateModal({\r\n html: `<span class=\"restriction-message\">${res.message}</span>`,\r\n showConfirmButton: false,\r\n showCancelButton: true,\r\n cancelButtonText: 'Ok',\r\n cancelButtonColor: SModal.colorBlue,\r\n });\r\n }\r\n } catch (e) {\r\n g.catchCode({\r\n error: e,\r\n footer: footerOnFail\r\n });\r\n }\r\n },\r\n allowOutsideClick: () => !Swal.isLoading(), // \"() => !Swal.isLoading()\" -> para que no se pueda cerras si esta cargando. | \"false\" -> para que no se pueda cerrar\r\n });\r\n });\r\n }\r\n\r\n static #inputModalBasic({\r\n title = 'Introduce los datos',\r\n width = 850,\r\n html = 'Introduce los datos',\r\n input = 'textarea',\r\n inputValue = '',\r\n inputId = 'inpName',\r\n inputPlaceholder = 'Placeholder...',\r\n inputOptions = undefined,\r\n getValidationMessage = () => null,\r\n preConfirm_url,\r\n preConfirm_type = 'GET',\r\n preConfirm_params = {},\r\n preConfirm_inputParamName = undefined,\r\n preConfirm_permitConfirm = true,\r\n preConfirm_ajaxOkCode = undefined,\r\n confirmButtonText = 'Guardar',\r\n showCancelButton = true,\r\n cancelButtonText = 'Cancelar',\r\n showLoaderOnConfirm = true,\r\n didClose = () => {},\r\n didOpen = () => {},\r\n }: InputModalOptions, fixedAndAlertChanges = false) {\r\n return SModal.#checkAndExecuteShow(() => {\r\n SModal.mustAbortIfIsAlreadyOpen({});\r\n const inputPassValidation = (value: string) => getValidationMessage(value) === null;\r\n const didOpenToAlertInputChanges = (el: HTMLElement) => {\r\n // execute received function\r\n didOpen(el);\r\n\r\n // Get variables\r\n let inputHtml = el.querySelector(`${input}[data-id=\"${inputId}\"]`);\r\n let swalContent = el.querySelector('.swal2-html-container') as Element;\r\n let confirmBtn = el.querySelector('.swal2-confirm') as HTMLButtonElement;\r\n\r\n // Add hidden error div\r\n const hiddenClass = g.getHiddenClass();\r\n // TODO Canals - (tailwind) pasar a componente\r\n swalContent.insertAdjacentHTML('afterbegin', `<div class=\"mySwalError alert alert-danger text-start ${hiddenClass}\"></div>`);\r\n let newDivError = swalContent.querySelector('.mySwalError') as HTMLElement;\r\n\r\n // Add hidden success div\r\n // TODO Canals - (tailwind) pasar a componente\r\n swalContent.insertAdjacentHTML('afterbegin', `<div class=\"mySwalSuccess alert alert-success text-start ${hiddenClass}\"></div>`);\r\n\r\n // Define validator function\r\n let keyUpValidationFunction = (e: any) => {\r\n let val = e?.target?.value ?? '';\r\n if (!inputPassValidation(val)) {\r\n newDivError.classList.remove(hiddenClass);\r\n newDivError.innerText = getValidationMessage(val) as string;\r\n confirmBtn.disabled = true;\r\n } else {\r\n newDivError.classList.add(hiddenClass);\r\n confirmBtn.disabled = false;\r\n }\r\n };\r\n\r\n // Start keyup listener\r\n if (fixedAndAlertChanges) {\r\n inputHtml?.addEventListener('keyup', keyUpValidationFunction);\r\n inputHtml?.addEventListener('blur', keyUpValidationFunction);\r\n } else {\r\n const listener = (InputsNeedsChangeListener.includes(input)) ? 'keyup' : 'change';\r\n inputHtml?.addEventListener(listener, keyUpValidationFunction);\r\n }\r\n\r\n // Launch default validation\r\n keyUpValidationFunction(null);\r\n };\r\n const final_permitConfirm = fixedAndAlertChanges ? false : preConfirm_permitConfirm;\r\n const final_didOpen = fixedAndAlertChanges ? didOpenToAlertInputChanges : didOpen;\r\n return Swal.fire({\r\n title: title,\r\n width: width,\r\n html: html,\r\n input: input,\r\n inputPlaceholder: inputPlaceholder,\r\n inputValue: inputValue,\r\n inputOptions: inputOptions,\r\n inputAttributes: {\r\n 'data-id': inputId,\r\n },\r\n confirmButtonText: confirmButtonText,\r\n showCancelButton: showCancelButton,\r\n cancelButtonText: cancelButtonText,\r\n showCloseButton: true,\r\n showLoaderOnConfirm: showLoaderOnConfirm,\r\n preConfirm: async (inputValue): Promise<FetchResponse | false> => {\r\n try {\r\n if (preConfirm_inputParamName !== undefined) {\r\n preConfirm_params[preConfirm_inputParamName] = inputValue;\r\n }\r\n let result = await g.fetch({url: preConfirm_url, type: preConfirm_type, params: preConfirm_params,});\r\n if (!result.success || !result.ok) {\r\n Swal.showValidationMessage(result.message);\r\n return false;\r\n }\r\n\r\n if (preConfirm_ajaxOkCode !== undefined) preConfirm_ajaxOkCode();\r\n\r\n if (fixedAndAlertChanges) {\r\n let successDiv = document.querySelector('.mySwalSuccess');\r\n if (successDiv !== null) {\r\n const hiddenClass = g.getHiddenClass();\r\n successDiv.classList.remove(hiddenClass);\r\n successDiv.innerHTML = `Guardado correctamente.`;\r\n setTimeout(() => {\r\n successDiv?.classList.add(hiddenClass);\r\n }, 2000);\r\n }\r\n }\r\n\r\n return final_permitConfirm ? result : false;\r\n } catch (e) {\r\n Swal.showValidationMessage(`Request failed: ${(e as FetchResponse).message}`);\r\n return false;\r\n }\r\n },\r\n allowOutsideClick: () => !Swal.isLoading(),\r\n inputValidator: (value) => {\r\n return new Promise((resolve) => {\r\n if (inputPassValidation(value)) {\r\n resolve();\r\n } else {\r\n resolve(getValidationMessage(value));\r\n }\r\n });\r\n },\r\n didOpen: final_didOpen,\r\n customClass: {\r\n container: 'swalForceWidth',\r\n },\r\n didClose: didClose,\r\n });\r\n });\r\n }\r\n\r\n static inputModal(params: InputModalOptions) {\r\n return SModal.#checkAndExecuteShow(() => {\r\n SModal.mustAbortIfIsAlreadyOpen({});\r\n return SModal.#inputModalBasic(params, false);\r\n });\r\n }\r\n\r\n static inputModalFixed(params: InputModalOptions) {\r\n return SModal.#checkAndExecuteShow(() => {\r\n SModal.mustAbortIfIsAlreadyOpen({});\r\n return SModal.#inputModalBasic(params, true);\r\n });\r\n }\r\n\r\n static bladeModal({\r\n ajaxUrl,\r\n showConfirmButton = false,\r\n confirmButtonText = '',\r\n jsActionsInModal = (p: {}) => {},\r\n funcParam = {},\r\n width = 850,\r\n didClose,\r\n }: BladeModalOptions) {\r\n return SModal.#checkAndExecuteShow(() => {\r\n SModal.mustAbortIfIsAlreadyOpen({});\r\n return Swal.fire({\r\n width: width,\r\n showConfirmButton: showConfirmButton,\r\n confirmButtonText: confirmButtonText,\r\n showCloseButton: true,\r\n willOpen: async () => {\r\n Swal.showLoading();\r\n try {\r\n const result: FetchResponse = await g.fetch({url: ajaxUrl});\r\n if (!result.success || !result.ok) {\r\n SModal.updateErrorModal({title: 'Ups...): Algo ha ido mal', html: result.message});\r\n return;\r\n }\r\n const html = (typeof result.data === 'string') ? result.data : 'Formato blade incorrecto.';\r\n SModal.updateModal({hideLoading: true, html: html});\r\n if (jsActionsInModal) jsActionsInModal(funcParam);\r\n } catch (e) {\r\n g.catchCode({error: e});\r\n }\r\n },\r\n allowOutsideClick: () => !Swal.isLoading(),\r\n didClose: didClose,\r\n });\r\n });\r\n }\r\n}\r\n","import { route } from 'ziggy-js';\r\nimport { g } from '@/app';\r\n\r\ntype ROUTES = {\r\n PAGES: {\r\n [name: string]: {\r\n uri: string,\r\n controller: any,\r\n method: string,\r\n makeDataRequest: boolean,\r\n }\r\n },\r\n COMPONENTS: {\r\n [name: string]: {\r\n controller: any,\r\n method: string,\r\n uris: string[],\r\n }\r\n },\r\n ALL: {\r\n [name: string]: {\r\n controller: any,\r\n method: string,\r\n except: string[],\r\n }\r\n },\r\n}\r\n\r\nexport class Route {\r\n static #ROUTES: ROUTES = {\r\n PAGES: {},\r\n COMPONENTS: {},\r\n ALL: {},\r\n };\r\n\r\n static page(uri: string, callback: [any, string], makeDataRequest = false): void {\r\n if (Array.isArray(callback) && (typeof makeDataRequest === 'boolean')) {\r\n const controller = callback[0];\r\n const method = callback[1];\r\n Route.#ROUTES['PAGES'][uri] = {\r\n uri: uri,\r\n controller: controller,\r\n method: method,\r\n makeDataRequest: makeDataRequest,\r\n };\r\n }\r\n }\r\n\r\n static component(callback: [any, string], uris: string[]): void {\r\n if (Array.isArray(callback) && Array.isArray(uris)) {\r\n const controller = callback[0];\r\n const method = callback[1];\r\n Route.#ROUTES['COMPONENTS'][`${controller.name}_${method}`] = {\r\n controller: controller,\r\n method: method,\r\n uris: uris,\r\n };\r\n }\r\n }\r\n\r\n static all(callback: [any, string], except: string[]): void {\r\n if (Array.isArray(callback) && Array.isArray(except)) {\r\n const controller = callback[0];\r\n const method = callback[1];\r\n Route.#ROUTES['ALL'][`${controller.name}_${method}`] = {\r\n controller: controller,\r\n method: method,\r\n except: except,\r\n };\r\n }\r\n }\r\n\r\n static dispatch(): void {\r\n if (!Route.existsRoutesDefinition()) return;\r\n\r\n Object.values(Route.#ROUTES['PAGES']).forEach(page => {\r\n if (route().current() === page.uri) {\r\n // Prueba de imports dinamicos para reducir tamaño del archivo js\r\n // const { default: ControllerClass } = await page.controller()\r\n // const controller = new ControllerClass()\r\n const controller = new page.controller();\r\n\r\n if (!page.makeDataRequest) {\r\n controller[page.method]();\r\n return;\r\n }\r\n\r\n g.fetchStrict({url: route(page.uri, route().params)})\r\n .then(viewData => {\r\n controller[page.method](viewData);\r\n })\r\n .catch(e => {\r\n g.catchCode({error: e});\r\n });\r\n return; // cortamos ejecucion porque ya no se va a cumplir la condicion para las demas rutas\r\n }\r\n });\r\n\r\n Object.values(Route.#ROUTES['COMPONENTS']).forEach(component => {\r\n const onRoutes = component.uris;\r\n const currentRoute = route().current();\r\n if (currentRoute !== undefined && onRoutes.includes(currentRoute)) {\r\n const controller = new component.controller();\r\n controller[component.method]();\r\n }\r\n });\r\n\r\n Object.values(Route.#ROUTES['ALL']).forEach(component => {\r\n const exceptRoutes = component.except;\r\n const currentRoute = route().current();\r\n if (currentRoute !== undefined && !exceptRoutes.includes(currentRoute)) {\r\n const controller = new component.controller();\r\n controller[component.method]();\r\n }\r\n });\r\n }\r\n\r\n static existsRoutesDefinition(): boolean {\r\n const routeVariable = route();\r\n // @ts-ignore\r\n return routeVariable.t.hasOwnProperty('url');\r\n }\r\n}\r\n","import { route } from 'ziggy-js';\r\nimport { g } from '@/app';\r\nimport { Filter } from 'tabulator-tables';\r\n\r\n// type QueryParams = { [p: string]: string | number }\r\ntype QueryParams = Record<string, unknown>\r\n\r\nexport class Url {\r\n static getCurrentUrl(): string {\r\n const current = (route().current() as string);\r\n const params = route().params;\r\n return route(current, params);\r\n }\r\n\r\n static #updateUrl(params: QueryParams) {\r\n // TODO Canals(revisar) - quiza hay que limitar por si se hace muy grande la query -> console.log(objectQueryParams.filters.length);\r\n const newUrl = route((route().current() as string), params);\r\n window.history.pushState({}, '', newUrl);\r\n }\r\n\r\n static addParamsToUrl(objectQueryParams: QueryParams, onStart = false) {\r\n let currentParams = route().params;\r\n let params = (onStart) ? {...objectQueryParams, ...currentParams} : {...currentParams, ...objectQueryParams};\r\n this.#updateUrl(params);\r\n }\r\n\r\n static removeParamsUrl(paramsToDelete: string[]) {\r\n let currentParams = route().params;\r\n paramsToDelete.forEach(item => {\r\n delete currentParams[item];\r\n });\r\n\r\n this.#updateUrl(currentParams);\r\n }\r\n\r\n static getEncodedFilters(): string | null {\r\n return route()?.params?.filters as string ?? null;\r\n }\r\n\r\n static getDecodedFilters(): Filter[] | null {\r\n const filters = Url.getEncodedFilters();\r\n let decodedFilters = null;\r\n if (filters) {\r\n try {\r\n decodedFilters = decodeURIComponent(filters);\r\n decodedFilters = JSON.parse(decodedFilters);\r\n } catch (e) {\r\n g.catchCode({error: e});\r\n return null;\r\n }\r\n }\r\n return decodedFilters;\r\n }\r\n}\r\n","import { __const } from '@/app/core/infrastructure/utilities/_internal/helpers';\r\n\r\nexport class TestConstants {\r\n private property_value: string = __const('VITE_APP_NAME');\r\n private constructor_value: string;\r\n\r\n constructor() {\r\n this.constructor_value = __const('VITE_APP_NAME');\r\n }\r\n\r\n printPropertyValue()\r\n {\r\n console.log(this.property_value);\r\n }\r\n\r\n printConstructorValue()\r\n {\r\n console.log(this.constructor_value);\r\n }\r\n\r\n printMethodValue()\r\n {\r\n console.log(__const('VITE_APP_NAME'));\r\n }\r\n\r\n}","import es from './lang/es.json';\r\nimport en from './lang/en.json';\r\nimport { DefaultTranslations, Translation, TranslationReplacements } from '@/app';\r\nimport { __const } from '@/app/core/infrastructure/utilities/_internal/helpers';\r\n\r\ninterface Translations<T extends Translation> {\r\n [key: string]: T;\r\n}\r\n\r\nexport class Translator<T extends DefaultTranslations> {\r\n private static instance: Translator<any>;\r\n private locale: string = __const('lang');\r\n private translations: Translations<DefaultTranslations> = {en, es};\r\n private externalTranslations: Translations<T> = {};\r\n\r\n public static getInstance<U extends DefaultTranslations>(): Translator<U> {\r\n if (!Translator.instance) {\r\n Translator.instance = new Translator<U>();\r\n }\r\n return Translator.instance;\r\n }\r\n\r\n public registerTranslations(locale: string, translations: Partial<T>): void {\r\n if (!this.externalTranslations[locale]) {\r\n this.externalTranslations[locale] = {} as T;\r\n }\r\n this.externalTranslations[locale] = {\r\n ...this.externalTranslations[locale],\r\n ...translations,\r\n };\r\n }\r\n\r\n public get<K extends keyof T>(key: K, replacements?: TranslationReplacements): string {\r\n const internalTranslation = this.translations[this.locale]?.[key as keyof DefaultTranslations];\r\n const externalTranslation = this.externalTranslations[this.locale]?.[key];\r\n let translation = externalTranslation || internalTranslation || (key as string);\r\n\r\n if (replacements) {\r\n for (const [placeholder, value] of Object.entries(replacements)) {\r\n if (value) {\r\n // Escapar correctamente el símbolo \":\" en el placeholder\r\n const regex = new RegExp(`(^|[^\\\\^]):${placeholder}`, 'g');\r\n translation = translation.replace(regex, `$1${value}`);\r\n }\r\n }\r\n }\r\n\r\n // Reemplazar el símbolo de escape (^:) con el símbolo \":\"\r\n translation = translation.replace(/\\^:/g, ':');\r\n\r\n return translation;\r\n }\r\n\r\n}\r\n","export class CannotOpenModalException extends Error {\r\n constructor(msg: string) {\r\n super(msg);\r\n this.name = 'CannotOpenModalException';\r\n }\r\n}\r\n","export class CannotOpenModalWarning extends Error {\r\n constructor(msg: string) {\r\n super(msg);\r\n this.name = 'CannotOpenModalWarning';\r\n }\r\n}\r\n","export class InvalidValueException extends Error {\r\n constructor(message: string) {\r\n super(message);\r\n this.name = 'InvalidValueException';\r\n }\r\n}\r\n","import { g, InvalidValueException, StrOrNullish } from '@/app';\r\n\r\nexport type StringVoParams = {\r\n allowNull?: boolean\r\n errorMessage?: string | null\r\n}\r\n\r\nexport class StringVo {\r\n protected _value: StrOrNullish;\r\n protected _allowNull: boolean;\r\n protected _errorMessage: string | null;\r\n\r\n constructor(value: StrOrNullish, params?: StringVoParams) {\r\n this._allowNull = params?.allowNull ?? false;\r\n this._errorMessage = params?.errorMessage ?? null;\r\n this._value = value;\r\n\r\n this.#ensureIsValidValue();\r\n }\r\n\r\n value() {\r\n return this._value;\r\n }\r\n\r\n #ensureIsValidValue() {\r\n if (!this._allowNull) {\r\n if (g.isEmpty(this._value)) {\r\n const message = (this._errorMessage === null) ? '<StringVo> no permite un valor vacio' : this._errorMessage;\r\n throw new InvalidValueException(message);\r\n }\r\n\r\n if (typeof this._value !== 'string') {\r\n const message = '<StringVo> ha de ser de tipo String';\r\n throw new InvalidValueException(message);\r\n }\r\n }\r\n }\r\n\r\n static from(value: StrOrNullish, params?: StringVoParams): StringVo {\r\n return new this(value, params);\r\n }\r\n}\r\n","import { g, InvalidValueException, StrIntOrNullish } from '@/app';\r\n\r\nexport type IntVoParams = {\r\n allowNull?: boolean\r\n}\r\n\r\nexport class IntVo {\r\n protected _value: StrIntOrNullish;\r\n protected _allowNull: boolean;\r\n\r\n constructor(value: StrIntOrNullish, params?: IntVoParams) {\r\n this._allowNull = params?.allowNull ?? false;\r\n this._value = value;\r\n\r\n this.#ensureIsValidValue();\r\n }\r\n\r\n value() {\r\n return this._value;\r\n }\r\n\r\n #ensureIsValidValue() {\r\n if (this._allowNull && g.isNullish(this._value)) return;\r\n\r\n if (typeof this._value === 'string') this._value = parseInt(this._value);\r\n\r\n if (typeof this._value !== 'number') {\r\n throw new InvalidValueException(`<IntVo> debe ser un entero y se ha recibido ${typeof this._value}`);\r\n }\r\n }\r\n\r\n static from(value: StrIntOrNullish, params?: IntVoParams): IntVo {\r\n return new this(value, params);\r\n }\r\n}\r\n","import { g, InvalidValueException, StrOrNullish } from '@/app';\r\n\r\nexport type EnumVoParams = {\r\n allowNull?: boolean\r\n}\r\n\r\nexport abstract class EnumVo {\r\n protected _value: StrOrNullish;\r\n protected _allowNull: boolean;\r\n protected _permittedValues: string[] = [];\r\n\r\n constructor(value: StrOrNullish, params?: EnumVoParams) {\r\n this.setPermittedValues();\r\n this._allowNull = params?.allowNull ?? false;\r\n this._value = value;\r\n this.#ensureIsValidValue();\r\n }\r\n\r\n abstract setPermittedValues(): void\r\n\r\n value() {\r\n return this._value;\r\n }\r\n\r\n #ensureIsValidValue() {\r\n if (g.isNullish(this._value)) {\r\n if (!this._allowNull) {\r\n const message = '<EnumVo> no permite un valor vacio';\r\n throw new InvalidValueException(message);\r\n } else {\r\n return;\r\n }\r\n }\r\n\r\n if (typeof this._value !== 'string') {\r\n const message = '<EnumVo> ha de ser de tipo String';\r\n throw new InvalidValueException(message);\r\n }\r\n\r\n if (!this._permittedValues.includes(this._value)) {\r\n const message = `<EnumVo> ha recibido un valor no permitido. Valores permitidos [${this._permittedValues.join(',')}]`;\r\n throw new InvalidValueException(message);\r\n }\r\n }\r\n\r\n static from<T extends EnumVo>(this: new (value: StrOrNullish, params?: EnumVoParams) => T, value: StrOrNullish, params?: EnumVoParams): T {\r\n return new this(value, params);\r\n }\r\n}\r\n","import { ___, __const } from '@/app/core/infrastructure/utilities/_internal/helpers';\r\n\r\nexport class Test {\r\n public static printConstant() {\r\n console.log(__const('lang'));\r\n console.log(__const('VITE_BROADCASTING_ENABLED'));\r\n }\r\n\r\n public static printTranslation() {\r\n console.log(___('no_results'));\r\n }\r\n}","import { Cookie, Instantiable, Theme, ThemeSwitcher } from '@/app';\r\n\r\nexport class DomService extends Instantiable {\r\n private $document = document.documentElement;\r\n\r\n startDarkMode() {\r\n\r\n const themeSwitcher = ThemeSwitcher.new();\r\n\r\n // Aplicar estado inicial del tema oscuro\r\n themeSwitcher.init();\r\n\r\n // Eventos de click para alternar el tema\r\n for (const [key, button] of Object.entries(themeSwitcher.buttons) as [Theme, HTMLElement | null][]) {\r\n button?.addEventListener('click', () => {\r\n switch (key) {\r\n case Theme.dark:\r\n themeSwitcher.toLightMode();\r\n break;\r\n case Theme.light:\r\n themeSwitcher.toSystemMode();\r\n break;\r\n case Theme.system:\r\n themeSwitcher.toDarkMode();\r\n break;\r\n }\r\n });\r\n }\r\n }\r\n\r\n startSidebarState() {\r\n /*// Clave personalizada para almacenar el estado del sidebar según la ruta actual\r\n const getSidebarKey = (routeName: string | undefined) => `sidebar-collapsed-${routeName}`;*/\r\n\r\n // Inicialización del estado del sidebar\r\n const sidebarToggleBtn = document.getElementById('sidebar-toggle');\r\n\r\n /*// Obtener el nombre de la ruta actual usando Ziggy\r\n const currentRoute = route().current();\r\n\r\n // Aplicar estado inicial del sidebar para la ruta actual\r\n const sidebarKey = getSidebarKey(currentRoute);\r\n this.initializeState(sidebarKey, 'sc', false);*/\r\n\r\n // Evento de click para alternar el estado del sidebar\r\n sidebarToggleBtn?.addEventListener('click', () => {\r\n const isCollapsed = !this.$document.classList.contains('sc');\r\n this.$document.classList.toggle('sc', isCollapsed);\r\n Cookie.new().setPreference('sidebar_collapsed', isCollapsed);\r\n });\r\n\r\n }\r\n\r\n startSidebarArrowsObserve()\r\n {\r\n const targetNode = document.getElementById(\"drawer-navigation\")?.firstElementChild as HTMLElement | null | undefined;\r\n\r\n if (!targetNode) return;\r\n\r\n // Create an observer instance linked to the callback function\r\n const observer = new MutationObserver((mutationList, observer) => {\r\n for (const mutation of mutationList) {\r\n if (mutation.type === 'attributes' && mutation.attributeName === 'aria-expanded') {\r\n const $button = mutation.target as HTMLElement;\r\n const $arrow = $button.querySelector('svg.chevron-down');\r\n if ($arrow !== null) {\r\n const isExpanded = $button.getAttribute('aria-expanded') === 'true';\r\n if (isExpanded) {\r\n $arrow.classList.add('-rotate-90');\r\n } else {\r\n $arrow.classList.remove('-rotate-90');\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n // Start observing the target node for configured mutations\r\n observer.observe(targetNode, { attributes: true, subtree: true });\r\n }\r\n}","import { Cookie, Instantiable, Theme, ThemeButtons } from '@/app';\r\n\r\nexport class ThemeSwitcher extends Instantiable\r\n{\r\n private $document = document.documentElement;\r\n private mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\r\n public buttons: ThemeButtons = {\r\n [Theme.dark]: document.getElementById('theme-dark'),\r\n [Theme.light]: document.getElementById('theme-light'),\r\n [Theme.system]: document.getElementById('theme-system'),\r\n };\r\n\r\n constructor()\r\n {\r\n super();\r\n\r\n // Validar que los Botones existen\r\n /*Object.values(this.buttons).forEach(button => {\r\n if (button === null) {\r\n throw new Error('No se ha encontrado alguno de los botones para alternar el tema oscuro.');\r\n }\r\n });*/\r\n }\r\n\r\n getTheme(): Theme\r\n {\r\n const preferences = Cookie.new().preferences();\r\n if (preferences === null) {\r\n throw new Error('No se han encontrado las preferencias en las cookies');\r\n }\r\n return preferences.theme;\r\n }\r\n\r\n init() {\r\n const theme = this.getTheme();\r\n localStorage.setItem('theme', theme);\r\n this.updateTheme(theme);\r\n this.mediaQuery.addEventListener('change', e => {\r\n this.getTheme() === 'system' && (e.matches ? this.setToDark(Theme.system) : this.setToLight(Theme.system));\r\n });\r\n }\r\n\r\n setToDark(e: Theme = Theme.dark) {\r\n this.$document.classList.add('dark');\r\n this.$document.setAttribute('data-theme', 'dark');\r\n this.$document.setAttribute('color-theme', e);\r\n }\r\n\r\n setToLight(e: Theme = Theme.light) {\r\n this.$document.classList.remove('dark');\r\n this.$document.setAttribute('data-theme', 'light');\r\n this.$document.setAttribute('color-theme', e);\r\n }\r\n\r\n updateTheme(theme: Theme) {\r\n\r\n // Mostrar el botón del tema recibido (y ocultar los demás)\r\n Object.values(this.buttons).forEach(button => button?.classList.remove('block!'));\r\n const themBtn = this.buttons[theme];\r\n themBtn?.classList.add('block!');\r\n\r\n switch (theme) {\r\n case Theme.system:\r\n this.mediaQuery.matches ? this.setToDark(Theme.system) : this.setToLight(Theme.system);\r\n break;\r\n case Theme.dark:\r\n this.setToDark();\r\n break;\r\n case Theme.light:\r\n this.setToLight();\r\n break;\r\n }\r\n }\r\n\r\n saveAndUpdate(theme: Theme) {\r\n localStorage.setItem('theme', theme);\r\n Cookie.new().setPreference('theme', theme);\r\n this.updateTheme(theme);\r\n }\r\n\r\n toDarkMode() {\r\n this.saveAndUpdate(Theme.dark);\r\n }\r\n\r\n toLightMode() {\r\n this.saveAndUpdate(Theme.light);\r\n }\r\n\r\n toSystemMode() {\r\n this.saveAndUpdate(Theme.system);\r\n }\r\n\r\n}","import { DomService, Instantiable, LStorage } from '@/app';\r\n\r\nexport class LayoutListenersUseCase extends Instantiable {\r\n __invoke() {\r\n LStorage.checkAndUpdateVersion();\r\n DomService.new().startDarkMode();\r\n DomService.new().startSidebarState();\r\n DomService.new().startSidebarArrowsObserve();\r\n }\r\n}","import { g, LayoutListenersUseCase, LStorage, Notify, StorageProcessKeys } from '@/app';\r\n\r\ntype Features = keyof typeof UtilitiesServiceProvider.actions;\r\n\r\nexport class UtilitiesServiceProvider {\r\n\r\n static actions = {\r\n startStorageDay: () => {\r\n if (LStorage.isFirstConnectionInDay()) {\r\n LStorage.setNowAsLastConnection();\r\n LStorage.removeItem(StorageProcessKeys.reverb);\r\n LStorage.removeItem(StorageProcessKeys.queue);\r\n }\r\n\r\n /*// let test = MyLuxon.stringToLxDate(MyStorage.getItem(\"lastConnection\"));\r\n // console.log(\"lastConnection\");\r\n // console.log(test.toFormat(MyLuxon.formats.datetime_startYear));\r\n\r\n // let now = MyLuxon.now();\r\n // console.log(\"hoy menos dos dias:\");\r\n // console.log(now.minus({day:2}).toFormat(MyLuxon.formats.date_startDay));\r\n // console.log(now.minus({day:2}).toFormat(MyLuxon.formats.timestamp_seconds));*/\r\n },\r\n enableTooltips: () => {\r\n g.startTooltips();\r\n },\r\n\r\n registerGlobalError: () => {\r\n window.onerror = (message, source, lineno, colno, error) => {\r\n return g.handleGlobalError(message, source, lineno, colno, error);\r\n };\r\n },\r\n enableNotifications: () => {\r\n Notify.checkAndRequestPermission();\r\n },\r\n startLayoutListeners: () => {\r\n LayoutListenersUseCase.new().__invoke();\r\n },\r\n };\r\n\r\n static features(actions: Features[]) {\r\n actions.forEach(item => {\r\n const action = this.actions[item];\r\n action();\r\n });\r\n }\r\n}"],"names":["CheckableProcess","StorageProcessKeys","Theme","_a","date","Tabulator","copy","row","this","globalState","close","error","rejectPromise","Swal","update","e","inputValue","ensureIsValidValue_fn","observer"],"mappings":"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","x_google_ignoreList":[18]}