@apia/util 4.0.47 → 4.0.50
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.
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/dom/getWindow.ts","../src/number/index.ts","../src/animate/index.ts","../src/audio/AudioRecorder.ts","../src/array/arrayOrArray.ts","../src/array/getIndex.ts","../src/compare/deepEqual.ts","../src/crypto/generateKey.ts","../src/crypto/decrypt.ts","../src/crypto/encrypt.ts","../src/crypto/uniqueId.ts","../src/date/getDateFormat.ts","../src/date/apiaDateToStandarFormat.ts","../src/date/dateToApiaFormat.ts","../src/debug/debugDispatcher.ts","../src/debug/shortcutController.ts","../src/documents/downloadStringAsDoc.ts","../src/documents/downloadUrl.ts","../src/documents/openAndReadFile.ts","../src/dom/autoDisconnectMutationObserver.ts","../src/dom/findScrollContainer.ts","../src/dom/findOffsetRelativeToScrollParent.ts","../src/dom/isFocusable.ts","../src/dom/scrollParentIntoElement.ts","../src/dom/useMatchScrollDirection.ts","../src/dom/usePanAndZoom.ts","../src/dom/customEvents.ts","../src/dom/getFocusSelector.ts","../src/dom/getSpecificParent.ts","../src/dom/isChild.ts","../src/dom/url.ts","../src/dom/enableChildrenFocus.ts","../src/encoding/index.ts","../src/events/EventEmitter.ts","../src/hooks/useCombinedRefs.ts","../src/hooks/useDebouncedCallback.ts","../src/hooks/usePrevious.ts","../src/hooks/useShallowMemo.ts","../src/hooks/useIntermediateValue.ts","../src/hooks/useLatest.ts","../src/hooks/useMount.ts","../src/hooks/useUnmount.ts","../src/hooks/useStateRef.ts","../src/hooks/useSubscription.ts","../src/hooks/useUpdateEffect.ts","../src/hooks/useWhyUpdated.ts","../src/hooks/useMountTransition.ts","../src/events/StatefulEmitter.ts","../src/events/BouncingEmitter.ts","../src/focus/globalFocus.ts","../src/storage/StatefulStore.ts","../src/storage/persistentStorage.ts","../src/storage/useLocalStorage.ts","../src/synchronization/awaitTime.ts","../src/synchronization/semaphore.ts","../src/synchronization/mutex.ts","../src/synchronization/TasksQueue.ts","../src/lockers/screenLocker.ts","../src/lockers/scrollLocker.ts","../src/focus/focusController.ts","../src/history/History.tsx","../src/imperative/types.ts","../src/imperative/makeImperativeComponent.tsx","../src/imperative/makeSingleImperativeComponent.tsx","../src/imperative/useImperativeIdentifierContext.ts","../src/imperative/useImperativeComponentEvents.ts","../src/labels/formatMessage.ts","../src/labels/getLabel.ts","../src/objects/getValueByPath.ts","../src/objects/setValueByPath.ts","../src/objects/cloneDeep.ts","../src/objects/freezeDeep.ts","../src/propsStore/propsStore.ts","../src/propsStore/usePropsSelector.ts","../src/states/useDomState.tsx","../src/states/useDebouncedState.ts","../src/primitives/index.ts","../src/string/alignment.ts","../src/string/ucfirst.ts","../src/string/classNameBuilder.ts","../src/string/decodeBase64ToUtf8.ts","../src/string/encodeStrToBase64Utf8.ts","../src/typeGuards/toBoolean.ts","../src/xml/parseXmlAsync.ts","../src/navigationHelpers/postNavigation.ts"],"sourcesContent":["export function getWindow() {\r\n return globalThis as any as Window;\r\n}\r\n","export interface ISetBoundary {\r\n number?: number | string;\r\n min?: number;\r\n max?: number;\r\n loop?: boolean;\r\n}\r\n\r\n/**\r\n * Añade límites a un número, impidiendo que sea\r\n * inferior o superior a los límites establecidos.\r\n *\r\n * Si se pasa loop en true, al llegar al valor maximo o minimo regresara al\r\n * minimo o maximo respectivamente.\r\n */\r\nexport function addBoundary(\r\n num: number,\r\n min: number,\r\n max?: number,\r\n loop?: boolean,\r\n): number;\r\nexport function addBoundary(definition: ISetBoundary): number;\r\nexport function addBoundary(\r\n definition: ISetBoundary | number,\r\n min?: number,\r\n max?: number,\r\n loop?: boolean,\r\n) {\r\n const actualNumber =\r\n typeof definition === 'number' ? definition : definition.number;\r\n const actualMin = typeof definition === 'number' ? min : definition.min;\r\n const actualMax = typeof definition === 'number' ? max : definition.max;\r\n const isActualLoop = typeof definition === 'number' ? loop : definition.loop;\r\n\r\n let newNumber = Number(actualNumber ?? 0);\r\n if (actualMin !== undefined && newNumber < actualMin) {\r\n if (actualMax !== undefined && isActualLoop) {\r\n newNumber = actualMax;\r\n } else {\r\n newNumber = actualMin;\r\n }\r\n }\r\n if (actualMax !== undefined && newNumber > actualMax) {\r\n if (actualMin !== undefined && isActualLoop) {\r\n newNumber = actualMin;\r\n } else {\r\n newNumber = actualMax;\r\n }\r\n }\r\n return newNumber;\r\n}\r\n\r\nconst sizeUnits = ['b', 'kb', 'mb', 'gb', 'tb'];\r\n/**\r\n * Esta función acepta un número y devuelve la representaciíon\r\n * en string de su tamaño en disco. Ej: 1024 => 1kb\r\n */\r\nexport function parseAsSize(num: number): string {\r\n let index = 0;\r\n let finalSize = num;\r\n\r\n if (finalSize === Infinity) return '1000GB';\r\n\r\n while (finalSize > 1024) {\r\n finalSize /= 1024;\r\n index++;\r\n }\r\n return `${Math.round(finalSize * 10) / 10}${sizeUnits[index]}`;\r\n}\r\n\r\n/**\r\n * Toma cualquier valor y devuelve siempre un número. En caso de que el valor\r\n * casteado con la función Number(value) de NaN, devuelve defaultReturn, que por\r\n * defecto es 0\r\n */\r\nexport function noNaN(number: unknown, defaultReturn = 0) {\r\n const returnNumber = Number(number);\r\n if (number === null || Number.isNaN(returnNumber)) return defaultReturn;\r\n return returnNumber;\r\n}\r\n","import { getWindow } from '../dom/getWindow';\r\nimport { addBoundary } from '../number';\r\n\r\nexport function animate(\r\n duration: number,\r\n callback: (progress: number) => unknown,\r\n onFinish?: () => unknown,\r\n) {\r\n let initialTime: number | undefined = undefined;\r\n let suscription: number;\r\n\r\n function innerAnimate(current: number) {\r\n if (initialTime === undefined) initialTime = current;\r\n\r\n const ellapsed = current - initialTime;\r\n const progress = ellapsed / duration;\r\n\r\n callback(addBoundary(progress, 0, 1));\r\n if (progress < 1)\r\n suscription = getWindow().requestAnimationFrame(innerAnimate);\r\n else onFinish?.();\r\n }\r\n\r\n suscription = getWindow().requestAnimationFrame(innerAnimate);\r\n\r\n return () => {\r\n getWindow().cancelAnimationFrame(suscription);\r\n };\r\n}\r\n","import { makeAutoObservable } from 'mobx';\r\n\r\nexport type AudioRecorderState = {\r\n recording: boolean;\r\n};\r\n\r\nexport class AudioRecorder {\r\n private mediaRecorder: MediaRecorder | null = null;\r\n\r\n state: AudioRecorderState = {\r\n recording: false,\r\n };\r\n\r\n constructor() {\r\n makeAutoObservable(this);\r\n }\r\n\r\n async start() {\r\n if (this.state.recording) {\r\n throw new Error('Cannot start a recording while other in progress');\r\n }\r\n\r\n return new Promise<Blob>((resolve) => {\r\n (async () => {\r\n try {\r\n this.state.recording = true;\r\n\r\n const audioChunks: BlobPart[] = [];\r\n const stream = await navigator.mediaDevices.getUserMedia({\r\n audio: true,\r\n });\r\n\r\n this.mediaRecorder = new MediaRecorder(stream);\r\n\r\n this.mediaRecorder.ondataavailable = (event: BlobEvent) => {\r\n audioChunks.push(event.data);\r\n };\r\n\r\n this.mediaRecorder.onstop = async () => {\r\n const audioBlob = new Blob(audioChunks, { type: 'audio/wav' });\r\n resolve(audioBlob);\r\n this.state.recording = false;\r\n };\r\n\r\n this.mediaRecorder.start();\r\n } catch (e) {\r\n this.state.recording = false;\r\n throw e;\r\n }\r\n })();\r\n });\r\n }\r\n\r\n stop() {\r\n this.mediaRecorder?.stop();\r\n }\r\n}\r\n","export default function arrayOrArray<T>(o: T | T[] | undefined): T[] {\r\n if (o === undefined) return [];\r\n\r\n return (Array.isArray(o) ? o : [o]) as T[];\r\n}\r\n","import isFunction from 'lodash-es/isFunction';\r\n\r\n/**\r\n * This function gets an array of elements of any kind and an array of\r\n * functions which will be called to test conditions and will return element\r\n * whose index equals the matching condition's index\r\n *\r\n * @param arr An array of elements of any kind\r\n * @param conditions An array of conditions, which will be tested in order to determine which index of the array will be returned\r\n * @param defaultIndex The return value in case that no condition matches\r\n * @returns An element of the array if any of the conditions matches or the defaultIndex otherwise.\r\n */\r\nexport function getIndex<T = unknown>(\r\n arr: T[],\r\n conditions: (boolean | (() => boolean))[],\r\n defaultIndex?: number,\r\n): T {\r\n for (let i = 0; i < conditions.length; i++) {\r\n if (\r\n (typeof conditions[i] === 'boolean' && conditions[i]) ||\r\n (isFunction(conditions[i]) && (conditions[i] as () => boolean)())\r\n )\r\n return arr[i];\r\n }\r\n return arr[defaultIndex ?? -1];\r\n}\r\n","export function deepEqual(a: any, b: any, visited = new WeakMap()): boolean {\r\n if (a === b) return true;\r\n\r\n if (typeof a !== typeof b) return false;\r\n\r\n if (a === null || b === null) return a === b;\r\n\r\n // Handle Dates\r\n if (a instanceof Date && b instanceof Date) {\r\n return a.getTime() === b.getTime();\r\n }\r\n\r\n // Handle arrays\r\n if (Array.isArray(a) && Array.isArray(b)) {\r\n if (a.length !== b.length) return false;\r\n for (let i = 0; i < a.length; i++) {\r\n if (!deepEqual(a[i], b[i], visited)) return false;\r\n }\r\n return true;\r\n }\r\n\r\n // Handle plain objects (excluding arrays, dates, etc.)\r\n if (typeof a === 'object' && typeof b === 'object') {\r\n if (visited.get(a) === b) return true; // Handle cyclic references\r\n visited.set(a, b);\r\n\r\n const aKeys = Object.keys(a);\r\n const bKeys = Object.keys(b);\r\n\r\n if (aKeys.length !== bKeys.length) return false;\r\n for (const key of aKeys) {\r\n if (!bKeys.includes(key) || !deepEqual(a[key], b[key], visited)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n // Fallback for everything else (functions, etc.)\r\n return false;\r\n}\r\n","export const generateKey = async (\r\n salt: string,\r\n passPhrase: string,\r\n keySize: number,\r\n iterationCount: number,\r\n) => {\r\n const CryptoJS = (await import('crypto-js')).default;\r\n const key = CryptoJS.PBKDF2(passPhrase, CryptoJS.enc.Hex.parse(salt), {\r\n keySize: keySize / 32,\r\n iterations: iterationCount,\r\n });\r\n return key;\r\n};\r\n","import { generateKey } from './generateKey';\r\n\r\nexport const decrypt = async (\r\n salt: string,\r\n iv: string,\r\n passPhrase: string,\r\n cipherText: string,\r\n keySize: number,\r\n iterationCount: number,\r\n) => {\r\n const CryptoJS = (await import('crypto-js')).default;\r\n const key = await generateKey(salt, passPhrase, keySize, iterationCount);\r\n const cipherParams = CryptoJS.lib.CipherParams.create({\r\n ciphertext: CryptoJS.enc.Base64.parse(cipherText),\r\n });\r\n const decrypted = CryptoJS.AES.decrypt(cipherParams, key, {\r\n iv: CryptoJS.enc.Hex.parse(iv),\r\n });\r\n return decrypted.toString(CryptoJS.enc.Utf8);\r\n};\r\n","import { generateKey } from './generateKey';\r\n\r\nexport const encrypt = async (\r\n salt: string,\r\n iv: string,\r\n passPhrase: string,\r\n plainText: string,\r\n keySize: number,\r\n iterationCount: number,\r\n) => {\r\n const CryptoJS = (await import('crypto-js')).default;\r\n const key = await generateKey(salt, passPhrase, keySize, iterationCount);\r\n const encrypted = CryptoJS.AES.encrypt(plainText, key, {\r\n iv: CryptoJS.enc.Hex.parse(iv),\r\n });\r\n return encrypted.ciphertext.toString(CryptoJS.enc.Base64);\r\n};\r\n","const ids: Record<string, number> = {};\r\nexport function uniqueId(prefix = '') {\r\n if (!ids[prefix]) {\r\n ids[prefix] = 0;\r\n }\r\n\r\n return `${prefix ? `${prefix}_` : ''}${ids[prefix]++}`;\r\n}\r\n","import dayjs from 'dayjs';\r\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\r\nimport { TDateFormat } from '../types/apia/date';\r\nimport { getWindow } from '../dom/getWindow';\r\n\r\ndayjs.extend(customParseFormat);\r\n\r\ndeclare global {\r\n interface Window {\r\n DATE_FORMAT: string;\r\n }\r\n}\r\n\r\nexport const DEFAULT_DATE_FORMAT: TDateFormat = 'DD/MM/YYYY';\r\n\r\nexport const getDateFormat = (format?: string): TDateFormat => {\r\n switch (format ?? getWindow().DATE_FORMAT) {\r\n case 'm/d/Y':\r\n return 'MM/DD/YYYY';\r\n case 'd/m/Y':\r\n return DEFAULT_DATE_FORMAT;\r\n case 'Y/m/d':\r\n return 'YYYY/MM/DD';\r\n default:\r\n return 'DD/MM/YYYY';\r\n }\r\n};\r\n","import dayjs from 'dayjs';\r\nimport { getDateFormat } from './getDateFormat';\r\n\r\nexport function apiaDateToStandarFormat(date: string) {\r\n const newDate = dayjs(date, getDateFormat());\r\n if (!newDate.isValid()) return '';\r\n return newDate.format('YYYY-MM-DD');\r\n}\r\n","import dayjs from 'dayjs';\r\nimport { getDateFormat } from './getDateFormat';\r\n\r\nexport function dateToApiaFormat(date: string | Date) {\r\n return dayjs(date).format(getDateFormat());\r\n}\r\n","import React from 'react';\r\nimport { getWindow } from '../dom/getWindow';\r\n\r\ndeclare global {\r\n const VERSION: string;\r\n const COMMITHASH: string;\r\n const BRANCH: string;\r\n const ENVIRONMENT: string;\r\n const TIMESTAMP: string;\r\n const PACKAGE_VERSION: string;\r\n\r\n interface Window {\r\n Globals: typeof globals;\r\n }\r\n}\r\n\r\nexport const globals = {\r\n getVersion() {\r\n return {\r\n version: typeof window !== 'undefined' ? VERSION : undefined,\r\n commit: typeof window !== 'undefined' ? COMMITHASH : undefined,\r\n branch: typeof window !== 'undefined' ? BRANCH : undefined,\r\n env: typeof window !== 'undefined' ? ENVIRONMENT : undefined,\r\n timestamp: typeof window !== 'undefined' ? TIMESTAMP : undefined,\r\n package: typeof window !== 'undefined' ? PACKAGE_VERSION : undefined,\r\n };\r\n },\r\n};\r\n\r\nif (typeof window !== 'undefined') {\r\n getWindow().Globals = globals;\r\n}\r\n\r\n/**\r\n * Indica si el debugDispatcher fue activado, lo que en muchos casos indica que\r\n * estamos en ambiente de desarrollo\r\n */\r\nexport function isDebugDispatcherEnabled() {\r\n return globals.getVersion().env === 'development';\r\n}\r\n\r\ntype TWindowDDispatch = (action: string, ...parameters: unknown[]) => void;\r\nexport type TDispatchCallback = (parameters: unknown[]) => unknown;\r\ninterface IStoredCallback {\r\n (parameters: unknown[]): unknown;\r\n help: () => void;\r\n}\r\n\r\nexport const debugDispatcher = new (class DDispatcher {\r\n callbacks: Record<string, IStoredCallback[]> = {};\r\n\r\n actions: Record<string, () => void> = {\r\n shout: () => {\r\n console.log(Object.keys(this.callbacks));\r\n },\r\n };\r\n\r\n on(\r\n action: string,\r\n cb: TDispatchCallback,\r\n help: string | React.ReactNode,\r\n onlyDevelop = false,\r\n ) {\r\n if (!isDebugDispatcherEnabled() && onlyDevelop) return () => {};\r\n\r\n if (Object.keys(this.actions).includes(action))\r\n throw new Error(\r\n `The action ${action} is a reserved word for the dispatcher.`,\r\n );\r\n if (!this.callbacks[action]) this.callbacks[action] = [];\r\n const actionMethod = Object.assign(cb, {\r\n help: () => {\r\n if (typeof help === 'string') console.info(help);\r\n },\r\n });\r\n this.callbacks[action].push(actionMethod);\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-expect-error\r\n this[action] = Object.assign(\r\n (...props: unknown[]) => {\r\n this.emit(action, ...props);\r\n },\r\n {\r\n help: () => {\r\n if (typeof help === 'string') console.info(help);\r\n },\r\n },\r\n );\r\n return () => {\r\n this.off(action, cb);\r\n };\r\n\r\n // return () => {};\r\n }\r\n\r\n off(action: string, cb: TDispatchCallback) {\r\n this.callbacks[action] = this.callbacks[action].filter((current) => {\r\n return current !== cb;\r\n });\r\n }\r\n\r\n emit: TWindowDDispatch = (action, ...parameters) => {\r\n try {\r\n if (this.actions[action]) this.actions[action]();\r\n else {\r\n if ((this.callbacks[action] ?? []).length === 1)\r\n return this.callbacks[action]?.[0]?.(parameters);\r\n\r\n (this.callbacks[action] ?? []).forEach((cb) => {\r\n return cb(parameters);\r\n });\r\n }\r\n return null;\r\n } catch (e) {\r\n console.error('DD', e);\r\n }\r\n };\r\n})();\r\n\r\ndeclare global {\r\n interface Window {\r\n adt: typeof debugDispatcher;\r\n dd: typeof debugDispatcher & Record<string, () => unknown>;\r\n }\r\n}\r\n\r\nif (typeof window !== 'undefined') {\r\n getWindow().dd = debugDispatcher as typeof debugDispatcher &\r\n Record<string, () => unknown>;\r\n getWindow().adt = debugDispatcher;\r\n}\r\n","import { debugDispatcher, isDebugDispatcherEnabled } from './debugDispatcher';\r\n\r\nexport type TCallback = (ev: KeyboardEvent) => unknown;\r\n\r\nexport type TKey = {\r\n key: string;\r\n altKey?: boolean;\r\n ctrlKey?: boolean;\r\n shiftKey?: boolean;\r\n};\r\n\r\nexport type TShortcutBranch = {\r\n key: TKey;\r\n children: TShortcutBranch[];\r\n callbacks: TCallback[];\r\n fireEvenFromInputs?: boolean;\r\n};\r\n\r\nexport const shortcutController = new (class ShortcutController {\r\n history: TKey[] = [];\r\n\r\n candidates: TShortcutBranch[] = [];\r\n\r\n shortcuts: TShortcutBranch = {\r\n callbacks: [],\r\n children: [],\r\n key: { key: '' },\r\n };\r\n\r\n shortcutsStrings: string[] = [];\r\n\r\n categories = {\r\n dev: ['shift&D'],\r\n };\r\n\r\n constructor() {\r\n if (typeof document !== 'undefined') {\r\n document.addEventListener('keydown', (ev) => {\r\n if (ev.key?.length !== 1 && ev.key !== 'Escape') return;\r\n this.candidates = [\r\n ...this.candidates.reduce<TShortcutBranch[]>(\r\n (accumulated, current) => [\r\n ...accumulated,\r\n ...current.children.filter(\r\n (child) =>\r\n child.key.key === ev.key &&\r\n child.key.altKey === ev.altKey &&\r\n child.key.ctrlKey === ev.ctrlKey &&\r\n child.key.shiftKey === ev.shiftKey,\r\n ),\r\n ],\r\n [],\r\n ),\r\n ...this.shortcuts.children.filter(\r\n (current) =>\r\n current.key.key === ev.key &&\r\n current.key.altKey === ev.altKey &&\r\n current.key.ctrlKey === ev.ctrlKey &&\r\n current.key.shiftKey === ev.shiftKey,\r\n ),\r\n ];\r\n this.candidates.forEach((current) => {\r\n if (\r\n current.fireEvenFromInputs ||\r\n !(\r\n !ev.key ||\r\n ev.key.length > 1 ||\r\n ['input', 'textarea', 'select'].includes(\r\n (ev.target as HTMLElement).tagName?.toLowerCase(),\r\n )\r\n )\r\n ) {\r\n if (current.callbacks) current.callbacks.forEach((cb) => cb(ev));\r\n }\r\n });\r\n });\r\n }\r\n debugDispatcher.on(\r\n 'shortcuts',\r\n () => {\r\n console.info(this.shortcutsStrings);\r\n console.info(this.shortcuts, this.history);\r\n },\r\n 'Muestra los shortcuts registrados',\r\n );\r\n this.on(\r\n 'short'.split(''),\r\n () => {\r\n this.shortcutsStrings.forEach((shortcut) => console.info(shortcut));\r\n },\r\n 'dev',\r\n );\r\n }\r\n\r\n parseKeyToString(key: string | TKey) {\r\n if (typeof key === 'string') return key;\r\n\r\n return `${key.altKey ? 'alt&' : ''}${key.ctrlKey ? 'ctrl&' : ''}${\r\n key.shiftKey ? 'shift&' : ''\r\n }${key.key}`;\r\n }\r\n\r\n parseKey(keyString: string): TKey {\r\n const elements = keyString.split('&');\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n const altKey = !!elements.find((c) => c.toLowerCase() === 'alt');\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n const ctrlKey = !!elements.find((c) => c.toLowerCase() === 'ctrl');\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n const shiftKey = !!elements.find((c) => c.toLowerCase() === 'shift');\r\n const key = elements.find(\r\n (current) =>\r\n current.toLocaleLowerCase() !== 'shift' &&\r\n current.toLocaleLowerCase() !== 'alt' &&\r\n current.toLocaleLowerCase() !== 'ctrl',\r\n );\r\n if (!key) throw new Error(`parseKey \"${keyString}\" does not have key.`);\r\n\r\n return {\r\n key,\r\n altKey,\r\n ctrlKey,\r\n shiftKey,\r\n };\r\n }\r\n\r\n /**\r\n * Para setear un shorcut se puede pasar un string representativo con la\r\n * forma:\r\n *\r\n * **alt**?&**ctrl**?&**shift**?&**(\\w)**\r\n *\r\n * Donde: alt? ctrl? shift? implica que cualquiera de esas palabras pueden o\r\n * no aparecer y (\\w) es una letra, símbolo o número.\r\n *\r\n * Puede aparecer cualquier tecla de control o no, pero el símbolo o letra\r\n * debe aparecer.\r\n *\r\n * @param category\r\n * Agrega un prefijo de teclas que se deben presionar antes del shortcut para\r\n * que funcione, de forma que por ejemplo, todos los shortcuts de la categoría\r\n * dev serán ejecutados solamente si antes se presionó shift&D\r\n *\r\n * @example\r\n *\r\n shortcutController.on(['shift&A', 'b', 'ctrl&c', 'alt&d'], (ev) => {\r\n ev.preventDefault();\r\n console.log('Abctrl+cd'),\r\n }); // Este shortcut se ejecuta en desarrollo y producción\r\n\r\n shortcutController.on('unshortcut'.split(''), (ev) => {\r\n ev.preventDefault();\r\n console.log('Abctrl+cd'),\r\n }, 'dev'); // Este shortcut solo se ejecuta en desarrollo\r\n */\r\n on(\r\n keys: (string | TKey)[],\r\n callback: TCallback,\r\n category?: keyof typeof this.categories,\r\n fireEvenFromInputs?: boolean,\r\n ) {\r\n if (category === 'dev' && !isDebugDispatcherEnabled()) return;\r\n\r\n let container = this.shortcuts;\r\n const actualKeys = category\r\n ? [...this.categories[category], ...keys]\r\n : keys;\r\n\r\n // eslint-disable-next-line no-restricted-syntax\r\n for (const key of actualKeys) {\r\n const actualKey = typeof key === 'string' ? this.parseKey(key) : key;\r\n if (actualKey.key === '')\r\n throw new Error(`Empty key ('') is not allowed`);\r\n const keyContainer = container.children.find(\r\n (current) =>\r\n current.key.key === actualKey.key ||\r\n (current.key.key === '' &&\r\n current.key.altKey === actualKey.altKey &&\r\n current.key.ctrlKey === actualKey.ctrlKey &&\r\n current.key.shiftKey === actualKey.shiftKey &&\r\n current.fireEvenFromInputs === fireEvenFromInputs),\r\n );\r\n if (keyContainer) container = keyContainer;\r\n else {\r\n const newContainer = {\r\n callbacks: [],\r\n children: [],\r\n key: actualKey,\r\n fireEvenFromInputs,\r\n };\r\n container.children.push(newContainer);\r\n container = newContainer;\r\n }\r\n }\r\n this.shortcutsStrings.push(\r\n actualKeys.map((current) => this.parseKeyToString(current)).join(''),\r\n );\r\n container.callbacks = [callback];\r\n }\r\n})();\r\n","export type DownloadStringAsDocProps = {\r\n fileName?: string;\r\n blobProps?: BlobPropertyBag;\r\n};\r\n\r\nexport async function downloadStringAsDoc(\r\n content: string,\r\n options?: DownloadStringAsDocProps,\r\n) {\r\n (await import('file-saver')).default.saveAs(\r\n new Blob([content], {\r\n type: 'text/plain; charset=utf-8',\r\n ...options?.blobProps,\r\n }),\r\n options?.fileName,\r\n );\r\n}\r\n","import type { AxiosResponse } from 'axios';\r\nimport axios from 'axios';\r\nimport FileSaver from 'file-saver';\r\n\r\nexport function defaultGetNameFromResponse(blob: AxiosResponse) {\r\n const contentDisposition = blob.headers['content-disposition'] as string;\r\n\r\n return (\r\n contentDisposition?.match(/filename=(?:\\\\?\")?([^\"]+)/i)?.[1] ?? 'noFileName'\r\n );\r\n}\r\n\r\nconst secondParameterIsTDownloadUrlOptions = (\r\n param:\r\n | string\r\n | ((blob: AxiosResponse) => string)\r\n | TDownloadUrlOptions = defaultGetNameFromResponse,\r\n): param is TDownloadUrlOptions => {\r\n return !!(param as TDownloadUrlOptions).postData;\r\n};\r\n\r\nexport type TDownloadUrlOptions = {\r\n fileName?: string;\r\n getNameFromResponse?: boolean | ((blob: AxiosResponse) => string);\r\n postData: string;\r\n};\r\n/**\r\n * This function gets an URL and a file name and performs a file download.\r\n *\r\n * @param url The url to fetch\r\n * @param getNameFromResponse The name will be given by the 'content-disposition' prop in the headers\r\n */\r\nexport async function downloadUrl(\r\n url: string,\r\n getNameFromResponse?: (blob: AxiosResponse) => string,\r\n): Promise<void>;\r\n/**\r\n * This function gets an URL and a file name and performs a file download.\r\n *\r\n * @param url The url to fetch\r\n * @param fileName The name the file will have as default in the save dialog\r\n */\r\nexport async function downloadUrl(\r\n url: string,\r\n fileName: string | TDownloadUrlOptions,\r\n): Promise<void>;\r\n\r\nexport async function downloadUrl(\r\n url: string,\r\n secondParameter:\r\n | string\r\n | ((blob: AxiosResponse) => string)\r\n | TDownloadUrlOptions = defaultGetNameFromResponse,\r\n): Promise<void> {\r\n if (secondParameterIsTDownloadUrlOptions(secondParameter)) {\r\n const blob = await axios.post(\r\n url,\r\n {\r\n postData: secondParameter.postData,\r\n },\r\n { responseType: 'blob' },\r\n );\r\n\r\n const getNameFromResponse =\r\n secondParameter.getNameFromResponse instanceof Function\r\n ? secondParameter.getNameFromResponse\r\n : secondParameter.getNameFromResponse === true\r\n ? defaultGetNameFromResponse\r\n : () => 'noname';\r\n\r\n const actualFileName =\r\n secondParameter.fileName ?? getNameFromResponse(blob);\r\n\r\n FileSaver.saveAs(new Blob([blob.data]), actualFileName);\r\n } else {\r\n const blob = await axios.get(url, {\r\n responseType: 'blob',\r\n });\r\n\r\n const actualFileName =\r\n typeof secondParameter === 'string'\r\n ? secondParameter\r\n : secondParameter(blob);\r\n\r\n FileSaver.saveAs(new Blob([blob.data]), actualFileName);\r\n }\r\n}\r\n","export function openAndReadFile(accept?: string) {\r\n return new Promise<string | ArrayBuffer | null>((resolve) => {\r\n const input = document.createElement('input');\r\n input.type = 'file';\r\n input.style.display = 'none';\r\n input.accept = accept || '*';\r\n\r\n document.body.append(input);\r\n\r\n input.click();\r\n input.addEventListener('change', (ev) => {\r\n const fileInput = ev.target as HTMLInputElement;\r\n\r\n const file = fileInput?.files?.[0];\r\n if (file) {\r\n const reader = new FileReader();\r\n reader.onload = (event) => {\r\n fileInput.value = '';\r\n const content = event.target?.result;\r\n if (content) {\r\n resolve(content);\r\n }\r\n };\r\n reader.readAsText(file);\r\n } else {\r\n resolve(null);\r\n }\r\n });\r\n });\r\n}\r\n\r\ntype TReadFile = {\r\n content: string | ArrayBuffer;\r\n name: string;\r\n};\r\n\r\nexport function openAndReadFiles(\r\n inputProps?: Partial<{\r\n accept: string;\r\n multiple: string;\r\n }>,\r\n) {\r\n return new Promise<TReadFile[]>((resolve) => {\r\n const input = document.createElement('input');\r\n input.type = 'file';\r\n input.style.display = 'none';\r\n document.body.append(input);\r\n Object.assign(input, inputProps);\r\n\r\n input.addEventListener('change', (ev) => {\r\n const fileInput = ev.target as HTMLInputElement;\r\n\r\n if ((fileInput?.files?.length ?? 0) === 0) {\r\n resolve([]);\r\n } else {\r\n const files: (TReadFile | null)[] = [];\r\n\r\n const sources = fileInput!.files!;\r\n [...sources].forEach((c) => {\r\n const reader = new FileReader();\r\n reader.onload = (event) => {\r\n fileInput.value = '';\r\n const content = event.target?.result;\r\n if (content) {\r\n files.push({\r\n content,\r\n name: c.name,\r\n });\r\n } else {\r\n files.push(null);\r\n }\r\n\r\n if (files.length === sources.length) {\r\n resolve(files.filter((c): c is TReadFile => !!c));\r\n }\r\n };\r\n reader.readAsText(c);\r\n });\r\n }\r\n });\r\n\r\n input.click();\r\n });\r\n}\r\n","export interface IAutoDisconnectMutationObserverConf {\r\n /** Por defecto es true */\r\n runCallbackOnInit?: boolean;\r\n /** Por defecto es 100 (ms) */\r\n timeout?: number;\r\n}\r\n\r\n/**\r\n * Crea un observer que va a desconectarse automáticamente luego de que pase\r\n * una determinada cantidad de tiempo sin actividad en el elemento.\r\n *\r\n * Se usa especialmente para esperar que un componente termine de renderizar y\r\n * aplicar cálculos a nivel de layout sobre él.\r\n */\r\nexport function autoDisconnectMutationObserver(\r\n element: HTMLElement,\r\n callback: () => unknown,\r\n conf?: IAutoDisconnectMutationObserverConf,\r\n) {\r\n let timeoutRegister = -1;\r\n let isConnected = false;\r\n function disconnect() {\r\n if (isConnected) {\r\n isConnected = false;\r\n observer.disconnect();\r\n clearTimeout(timeoutRegister);\r\n }\r\n }\r\n let shoutCallback: number;\r\n\r\n const observer = new MutationObserver((...props) => {\r\n if (props[0]?.[0] && (props[0][0].removedNodes || props[0][0].addedNodes)) {\r\n clearTimeout(shoutCallback);\r\n shoutCallback = setTimeout(callback, 100) as unknown as number;\r\n clearTimeout(timeoutRegister);\r\n timeoutRegister = setTimeout(\r\n disconnect,\r\n conf?.timeout ?? 100,\r\n ) as unknown as number;\r\n }\r\n });\r\n isConnected = true;\r\n observer.observe(element, { subtree: true, childList: true });\r\n timeoutRegister = setTimeout(\r\n disconnect,\r\n conf?.timeout ?? 100,\r\n ) as unknown as number;\r\n\r\n if (conf?.runCallbackOnInit !== false)\r\n shoutCallback = setTimeout(callback, 100) as unknown as number;\r\n\r\n return disconnect;\r\n}\r\n","import { getWindow } from './getWindow';\r\n\r\nconst REGEXP_SCROLL_PARENT = /^(visible|hidden)/;\r\n/**\r\n * Encuentra el primer elemento padre del elemento provisto que tenga scroll\r\n * activo.\r\n */\r\nexport function findScrollContainer(el: HTMLElement): HTMLElement | null {\r\n // eslint-disable-next-line no-nested-ternary\r\n const found =\r\n !(el instanceof HTMLElement) ||\r\n typeof getWindow().getComputedStyle !== 'function'\r\n ? null\r\n : el.scrollHeight >= el.clientHeight &&\r\n !REGEXP_SCROLL_PARENT.test(\r\n getWindow().getComputedStyle(el).overflowY || 'visible',\r\n )\r\n ? el\r\n : findScrollContainer(el.parentElement as HTMLElement) ||\r\n (document as unknown as HTMLElement);\r\n\r\n if (found === document.body) {\r\n return document.body.parentElement!;\r\n }\r\n\r\n return found;\r\n}\r\n","import { findScrollContainer } from './findScrollContainer';\r\n\r\n/**\r\n * Esta función calcula el offset que existe entre un elemento y su padre más inmediato que tenga scroll visible\r\n */\r\nexport function findOffsetRelativeToScrollParent(\r\n element: HTMLElement,\r\n which: 'Left' | 'Top' = 'Top',\r\n) {\r\n const scrollParent = findScrollContainer(element) as HTMLElement;\r\n let offset = 0;\r\n let current: HTMLElement | null = element;\r\n\r\n // Sumar todos los offsetTop/offsetLeft hasta llegar al scrollParent\r\n while (current && current !== document.body && current !== scrollParent) {\r\n offset += current[`offset${which}`] as number;\r\n current = current.offsetParent as HTMLElement | null;\r\n }\r\n\r\n // Restar la cantidad scrolleada, para que sea relativo al borde visible\r\n const scrollAmount = (scrollParent[`scroll${which}`] as number) || 0;\r\n return offset - scrollAmount;\r\n}\r\n","export function isFocusable(element: HTMLElement) {\r\n // Cannot focus if disabled\r\n if ((element as HTMLInputElement).disabled) return false;\r\n\r\n // Cannot focus if not connected or not visible\r\n if (!element.isConnected) return false;\r\n if (\r\n element.offsetParent === null &&\r\n getComputedStyle(element).position !== 'fixed'\r\n )\r\n return false;\r\n\r\n // Tabindex >= 0 means focusable\r\n const tabIndex = element.getAttribute('tabindex');\r\n if (tabIndex !== null && parseInt(tabIndex, 10) >= 0) return true;\r\n\r\n // Elements that are naturally focusable\r\n const focusableTags = ['INPUT', 'SELECT', 'TEXTAREA', 'BUTTON'];\r\n if (focusableTags.includes(element.tagName)) return true;\r\n if (element.tagName === 'A' && element.hasAttribute('href')) return true;\r\n if (\r\n element.hasAttribute('contenteditable') &&\r\n element.getAttribute('contenteditable') !== 'false'\r\n )\r\n return true;\r\n\r\n return false;\r\n}\r\n","import { findScrollContainer } from './findScrollContainer';\r\nimport { getWindow } from './getWindow';\r\n\r\nconst scrollIntervals: Record<string, number> = {};\r\n\r\n/**\r\n * Mantiene visible `element` dentro de su contenedor con scroll,\r\n * compensando un posible header fijo (`fixedOffsetTop`).\r\n *\r\n * @param element Elemento a mostrar.\r\n * @param fixedOffsetTop Espacio mínimo desde el top visible (ej: header fijo). Default 0.\r\n * @param tries Cuántas reintentos en caso de layout changes. Default 2.\r\n * @param timeout Retraso entre reintentos (ms). Default 100.\r\n * @param scrollId Identificador opcional para agrupar timeouts.\r\n */\r\nexport function scrollParentIntoElement(\r\n element: HTMLElement,\r\n fixedOffsetTop = 0,\r\n tries = 2,\r\n timeout = 100,\r\n scrollId?: string,\r\n): void {\r\n // Genera un ID único si no se pasa uno\r\n const id = scrollId ?? `${Date.now()}_${Math.random()}`;\r\n // Limpia cualquier timeout pendiente con ese ID\r\n if (scrollIntervals[id]) {\r\n clearTimeout(scrollIntervals[id]);\r\n }\r\n\r\n const scrollParent = findScrollContainer(element) as HTMLElement | null;\r\n if (!scrollParent) {\r\n return;\r\n }\r\n\r\n // Rectángulos para cálculo de overflow\r\n const parentRect = scrollParent.getBoundingClientRect();\r\n const elemRect = element.getBoundingClientRect();\r\n\r\n // ¿Está por encima del top visible?\r\n const topOverflow = elemRect.top - (parentRect.top + fixedOffsetTop);\r\n // ¿Está por debajo del bottom visible?\r\n const bottomOverflow = elemRect.bottom - parentRect.bottom + fixedOffsetTop;\r\n\r\n if (topOverflow < 0) {\r\n // Subir scroll justo lo necesario\r\n scrollParent.scrollTop += topOverflow;\r\n } else if (bottomOverflow > 0) {\r\n // Bajar scroll justo lo necesario\r\n scrollParent.scrollTop += bottomOverflow;\r\n }\r\n\r\n // Reintenta en caso de cambios de layout (e.g. imágenes cargando)\r\n if (tries > 0) {\r\n scrollIntervals[id] = getWindow().setTimeout(() => {\r\n scrollParentIntoElement(element, fixedOffsetTop, tries - 1, timeout, id);\r\n }, timeout);\r\n }\r\n}\r\n","import { makeObservable, observable } from 'mobx';\r\nimport { getWindow } from './getWindow';\r\n\r\nexport type TDirection = 'up' | 'both' | 'down';\r\nconst controller: {\r\n direction: TDirection | '';\r\n} = {\r\n direction: '',\r\n};\r\nmakeObservable(controller, { direction: observable });\r\n\r\nfunction initScrollController() {\r\n if (typeof window === 'undefined' || controller.direction !== '') return;\r\n controller.direction = 'both';\r\n\r\n function setShouldShow(direction: TDirection) {\r\n controller.direction = direction;\r\n }\r\n\r\n const resizeObserver = new ResizeObserver(() => {\r\n if (document.documentElement.scrollHeight === getWindow().innerHeight)\r\n controller.direction = 'both';\r\n });\r\n\r\n resizeObserver.observe(document.documentElement);\r\n let currentScroll = document.documentElement.scrollTop;\r\n\r\n function handleScroll() {\r\n const direction = controller.direction;\r\n if (\r\n document.documentElement.scrollTop > currentScroll &&\r\n direction !== 'down'\r\n ) {\r\n setShouldShow('down');\r\n } else if (\r\n document.documentElement.scrollTop < currentScroll &&\r\n direction !== 'up'\r\n ) {\r\n setShouldShow('up');\r\n }\r\n currentScroll = document.documentElement.scrollTop;\r\n }\r\n\r\n document.addEventListener('scroll', handleScroll);\r\n\r\n return () => {\r\n resizeObserver.disconnect();\r\n document.removeEventListener('scroll', handleScroll);\r\n };\r\n}\r\ninitScrollController();\r\n\r\nexport default function useMatchScrollDirection(direction: 'up' | 'down') {\r\n return controller.direction === 'both' || controller.direction === direction;\r\n}\r\n","import React, { useRef } from 'react';\r\n\r\nexport function usePanAndZoom<\r\n ContainerType extends HTMLElement = HTMLElement,\r\n ChildType extends HTMLElement | SVGElement = HTMLElement,\r\n>(\r\n effectiveMargin: {\r\n left: number;\r\n top: number;\r\n right: number;\r\n bottom: number;\r\n } = { left: 0, bottom: 0, right: 0, top: 0 },\r\n blockZoom = true,\r\n) {\r\n const boxRef = useRef<ContainerType>(null);\r\n const elementRef = useRef<ChildType>(null);\r\n const [isPanning, setIsPanning] = React.useState(false);\r\n const [panningPosition, setPanningPosition] = React.useState({ x: 0, y: 0 });\r\n\r\n React.useEffect(() => {\r\n if (blockZoom) return;\r\n const container = boxRef.current;\r\n const innerElement = elementRef.current;\r\n const handlePanStart = (ev: MouseEvent) => {\r\n ev.preventDefault();\r\n setIsPanning(true);\r\n setPanningPosition({ x: ev.clientX, y: ev.clientY });\r\n };\r\n const handlePanEnd = (ev: MouseEvent) => {\r\n ev.preventDefault();\r\n\r\n setIsPanning(false);\r\n };\r\n\r\n const handlePan = (ev: MouseEvent) => {\r\n if (!innerElement || !container) {\r\n return;\r\n }\r\n\r\n if (isPanning) {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n\r\n const dx = ev.clientX - panningPosition.x;\r\n const dy = ev.clientY - panningPosition.y;\r\n\r\n container.scrollLeft -= dx;\r\n container.scrollTop -= dy;\r\n\r\n setPanningPosition({ x: ev.clientX, y: ev.clientY });\r\n }\r\n };\r\n\r\n if (container) {\r\n container.addEventListener('mousedown', handlePanStart);\r\n container.addEventListener('mouseup', handlePanEnd);\r\n container.addEventListener('mouseleave', handlePanEnd);\r\n container.addEventListener('mousemove', handlePan);\r\n return () => {\r\n container.removeEventListener('mousedown', handlePanStart);\r\n container.removeEventListener('mousemove', handlePan);\r\n container.removeEventListener('mouseup', handlePanEnd);\r\n container.removeEventListener('mouseleave', handlePanEnd);\r\n };\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [isPanning, panningPosition]);\r\n\r\n React.useEffect(() => {\r\n if (blockZoom) return;\r\n\r\n const container = boxRef.current;\r\n const innerElement = elementRef.current;\r\n let newScale = 1;\r\n const handleZoom = (ev: WheelEvent) => {\r\n ev.preventDefault();\r\n\r\n const newDelta = ev.deltaY;\r\n const scaleIncrement = 0.1;\r\n\r\n if (newDelta < 0) {\r\n if (newScale + scaleIncrement >= 2) {\r\n return;\r\n }\r\n newScale += scaleIncrement;\r\n } else {\r\n if (newScale - scaleIncrement <= 0.9) {\r\n return;\r\n }\r\n newScale -= scaleIncrement;\r\n }\r\n if (!innerElement || !container) {\r\n return;\r\n }\r\n const containerRect = container.getBoundingClientRect();\r\n const cursorX = ev.clientX - containerRect.left - effectiveMargin.left;\r\n const cursorY = ev.clientY - containerRect.top - effectiveMargin.top;\r\n\r\n const cursorXFromCenter = cursorX - containerRect.width / 2;\r\n const cursorYFromCenter = cursorY - containerRect.height / 2;\r\n\r\n if (newScale <= 1) {\r\n if (boxRef.current) {\r\n boxRef.current.style.overflow = 'hidden';\r\n }\r\n } else {\r\n if (boxRef.current) {\r\n boxRef.current.style.overflow = 'hidden';\r\n }\r\n }\r\n innerElement.style.transform = `scale(${newScale})`;\r\n innerElement.style.transformOrigin = '0px 0px';\r\n\r\n if (newDelta < 0) {\r\n container.scrollLeft += cursorXFromCenter / (newScale * 2);\r\n container.scrollTop += cursorYFromCenter / (newScale * 2);\r\n } else {\r\n container.scrollLeft -= cursorXFromCenter / (newScale * 2);\r\n container.scrollTop -= cursorYFromCenter / (newScale * 2);\r\n }\r\n };\r\n if (container) {\r\n container.addEventListener('wheel', handleZoom);\r\n return () => {\r\n container.removeEventListener('wheel', handleZoom);\r\n };\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n return {\r\n boxRef,\r\n elementRef,\r\n };\r\n}\r\n","/**\r\n * Existen algunos eventos que se disparan en la\r\n * aplicación con la finalidad de desencadenar\r\n * un comportamiento específico. Por ello se declaran\r\n * las siguientes constantes.\r\n */\r\nexport const customEvents = {\r\n /**\r\n * Indica que un elemento necesita recibir el foco,\r\n * de esta forma, elementos que no se están mostrando\r\n * en pantalla (por display:none por ejemplo), pueden\r\n * indicar a sus ancestros que deben expandirse.\r\n */\r\n focus: 'customFocus',\r\n /**\r\n * Indica que debe cambiarse el título del modal\r\n */\r\n iframeModalChangeTitle: 'iframeModalChangeTitle',\r\n /**\r\n * Indica que un iframe modal debe cerrarse\r\n */\r\n iframeModalClose: 'iframeModalClose',\r\n /**\r\n * Indica que un iframe modal debe cerrarse\r\n */\r\n iframeModalNotify: 'iframeModalNotify',\r\n /**\r\n * Indica que un modal debe cerrarse\r\n */\r\n modalClose: 'modalClose',\r\n /**\r\n * Indica que el panel contenedor debe cerrarse porque\r\n * está vacío\r\n */\r\n hidePanel: 'hidePanel',\r\n showPanel: 'showPanel',\r\n /**\r\n * Evento lanzado por formsEventsController sobre window\r\n * cuando se termina de procesar los formularios de la tarea\r\n */\r\n formsReady: 'formsReady',\r\n};\r\n","/**\r\n * Este selector pretende abarcar todos modificadores que en caso de estar\r\n * presentes hacen que un elemento no sea focusable\r\n */\r\nexport const cantFocusSelector = [\r\n '[disabled]',\r\n '[tabIndex=\"-1\"]',\r\n '[aria-hidden=\"true\"]',\r\n '[data-focus-guard]',\r\n '.modal__closeButton',\r\n]\r\n .map((current) => `:not(${current})`)\r\n .join('');\r\n\r\n/**\r\n * Este selector pretende abarcar todos los elementos que sean focusables\r\n */\r\nexport const focusSelector = [\r\n 'input',\r\n 'textarea',\r\n 'select',\r\n 'a',\r\n 'button:not(.toggleAccordionElement)',\r\n '[contenteditable]',\r\n '[tabIndex]',\r\n '[role=\"button\"]',\r\n]\r\n .map((current) => `${current}${cantFocusSelector}`)\r\n .join(',');\r\n\r\n/**\r\n * Genera un selector que permitirá seleccionar\r\n * todos los elementos candidatos a recibir foco,\r\n * que no cumplan con la condición not pasada\r\n * como parámetro.\r\n *\r\n * @param not Un selector not css, indicando cuáles\r\n * condiciones deben evitar el foco en un elemento.\r\n *\r\n * @returns Una cadena que representa un selector\r\n * css.\r\n */\r\nexport function getFocusSelector(not?: string) {\r\n return `input${not ?? ''}, \r\n textarea${not ?? ''}, \r\n select${not ?? ''}, \r\n a${not ?? ''}, \r\n button:not(.toggleAccordionElement)${not ?? ''}, \r\n [contenteditable]${not ?? ''}, \r\n [tabIndex]${not ?? ''}`;\r\n}\r\n","/**\r\n * Searches for a specific parent of a element,\r\n * using a callback function as the source of\r\n * truth in order to determine which is the correct\r\n * parent.\r\n *\r\n * @param element The element where the process\r\n * starts.\r\n *\r\n * @param checkParent A callback that will be\r\n * called for each of the ancestors of the element\r\n * until the desired parent is found.\r\n * This function should return **true when found**\r\n * the desired parend was found, **null to cancel**\r\n * the search or **false to continue searching**.\r\n *\r\n * @returns The specific parent or null in case\r\n * the root parent element is raised.\r\n */\r\nexport function getSpecificParent(\r\n element: HTMLElement | null,\r\n checkParent: (parent: HTMLElement) => boolean | null,\r\n): HTMLElement | null {\r\n let currentElement = element;\r\n\r\n while (element !== document.documentElement && currentElement) {\r\n const hasFoundTheParent = checkParent(currentElement);\r\n if (hasFoundTheParent === null) return null;\r\n if (hasFoundTheParent) return currentElement;\r\n\r\n const parent = currentElement.parentElement;\r\n if (parent) currentElement = parent;\r\n else return null;\r\n }\r\n\r\n return null;\r\n}\r\n","import { getSpecificParent } from './getSpecificParent';\r\n\r\n/**\r\n * Permite iterar desde un elemento hacia arriba en el\r\n * DOM, utilizando una función de comparación para\r\n * determinar si el elemento actual es el que estamos\r\n * buscando.\r\n *\r\n * Si la función checkParent devuelve true, isChild\r\n * devuelve true.\r\n */\r\nexport function isChild(\r\n element: HTMLElement | null,\r\n checkParent: (parent: HTMLElement) => boolean | null,\r\n) {\r\n return !!getSpecificParent(element, checkParent);\r\n}\r\n","import { arrayOrArray } from '../array';\r\n\r\nexport interface IParameter {\r\n name: string;\r\n value: unknown;\r\n allowMultiple?: boolean;\r\n}\r\n\r\nexport class Url {\r\n base: string;\r\n\r\n #parameters: Record<string, string | string[]> = {};\r\n\r\n constructor(\r\n baseUrl: string,\r\n public defaultAllowMultiple = true,\r\n ) {\r\n const [base, query] = baseUrl.split('?');\r\n this.base = base;\r\n query?.split('&').forEach((current) => {\r\n const [name, ...value] = current.split('=');\r\n this.addParameter(name, value.join('='));\r\n });\r\n }\r\n\r\n addParameter(name: string, value: unknown, allowMultiple?: boolean) {\r\n if (\r\n (allowMultiple === undefined && !this.defaultAllowMultiple) ||\r\n allowMultiple === false\r\n )\r\n this.#parameters[name] = String(value);\r\n else\r\n this.#parameters[name] = this.#parameters[name]\r\n ? [...arrayOrArray(this.#parameters[name]), String(value)]\r\n : [String(value)];\r\n }\r\n\r\n addParameters(parameters: IParameter[]) {\r\n parameters.forEach((current) =>\r\n this.addParameter(current.name, current.value, current.allowMultiple),\r\n );\r\n }\r\n\r\n getParameter(name: string) {\r\n return this.#parameters[name];\r\n }\r\n\r\n getParameters() {\r\n return Object.entries(this.#parameters);\r\n }\r\n\r\n toString() {\r\n const parametersArray = Object.entries(this.#parameters);\r\n\r\n return `${this.base}${\r\n parametersArray.length > 0\r\n ? `?${parametersArray\r\n .map(([name, value]) =>\r\n Array.isArray(value)\r\n ? value.map((current) => `${name}=${current}`).join('&')\r\n : `${name}=${String(value)}`,\r\n )\r\n .join('&')}`\r\n : ''\r\n }`;\r\n }\r\n}\r\n","import { focusSelector } from './getFocusSelector';\r\n\r\nconst previousTabIndexLabel = 'data-previous-tabindex';\r\n\r\n/**\r\n * Deshabilita la posibilidad de hacer foco en\r\n * todos los descendientes de parent. Es\r\n * especialmente útli cuando se ocultan elementos\r\n * del DOM sin quitarlos, cuando por accesibilidad\r\n * es importante que el foco no alcance a dichos\r\n * métodos.\r\n */\r\nexport function disableChildrenFocus(parent: HTMLElement) {\r\n const focusElement = parent.querySelectorAll(focusSelector);\r\n focusElement.forEach((element) => {\r\n element.setAttribute(\r\n previousTabIndexLabel,\r\n element.getAttribute('tabindex') ?? '',\r\n );\r\n element.setAttribute('tabindex', '-1');\r\n });\r\n}\r\n\r\n/**\r\n * Restaura el foco de los hijos de parent a los\r\n * que previamente se les había quitado el foco\r\n * con disableChildrenFocus.\r\n */\r\nexport function enableChildrenFocus(parent: HTMLElement) {\r\n const focusElement = parent.querySelectorAll(`[${previousTabIndexLabel}]`);\r\n focusElement.forEach((element) => {\r\n element.setAttribute(\r\n 'tabindex',\r\n element.getAttribute(previousTabIndexLabel) ?? '0',\r\n );\r\n element.removeAttribute(previousTabIndexLabel);\r\n });\r\n}\r\n","/**\r\n * Toma una cadena de texto que puede tener caracteres de escape de HTML (por\r\n * ejemplo á) y devuelve su correspondiente en texto plano.\r\n */\r\nexport const decodeHTMLEntities = (str: string) => {\r\n const parser = new DOMParser();\r\n const dom = parser.parseFromString(\r\n '<!doctype html><body>' + str,\r\n 'text/html',\r\n );\r\n const decodedString = dom.body.textContent;\r\n return decodedString;\r\n};\r\n","import { Callback, Callbacks, Map, UnSubscriber } from './types';\r\n\r\nexport type { Callback, Map, UnSubscriber } from './types';\r\n\r\n/**\r\n * @public\r\n *\r\n * The `EventEmitter` class is a generic utility for handling events. It allows subscribing to and emitting events.\r\n * This class is generic and works with a `Map` where keys are event names and values are the types associated with those events.\r\n *\r\n * @typeParam Events - An extension of `Map` where the key is the event name and the value is the type of data associated with that event.\r\n */\r\nexport class EventEmitter<Events extends Map> {\r\n protected callbacks: Record<'on' | 'once', Callbacks<Events>> = {\r\n on: {} as Callbacks<Events>,\r\n once: {} as Callbacks<Events>,\r\n };\r\n protected enabled = true;\r\n\r\n protected debugMode = false;\r\n debug(enable = true) {\r\n this.debugMode = enable;\r\n }\r\n\r\n /**\r\n * Emits an event with the given data. Any listeners subscribed to this event will be invoked with the passed data.\r\n *\r\n * @param event - The event name to emit.\r\n * @param data - The data associated with the event. Its type is dependent on the event name.\r\n */\r\n emit<K extends keyof Events>(event: K, data: Events[K]) {\r\n this.callbacks.on[event]?.forEach((current) => current(data));\r\n\r\n this.callbacks.once[event]?.forEach((current) => current(data));\r\n this.callbacks.once[event] = [];\r\n }\r\n\r\n /**\r\n * Reflects the current emitter state. A disabled state indicates that the emitter wont call listeners until its functionality gets enabled again.\r\n */\r\n get isEnabled() {\r\n return this.enabled;\r\n }\r\n\r\n off<K extends keyof Events>(event: K, cb: Callback<Events, K>): void {\r\n this.callbacks.on[event] = this.callbacks.on[event]?.filter(\r\n (c) => c !== cb,\r\n );\r\n this.callbacks.once[event] = this.callbacks.once[event]?.filter(\r\n (c) => c !== cb,\r\n );\r\n }\r\n\r\n /**\r\n * Subscribes a callback function to an event. The callback is invoked each time the event is emitted.\r\n *\r\n * @param event - The event name to listen to.\r\n * @param cb - The callback function to be invoked when the event is emitted.\r\n * @returns A function to unsubscribe the event listener.\r\n */\r\n on<K extends keyof Events>(event: K, cb: Callback<Events, K>): UnSubscriber {\r\n if (!this.callbacks.on[event]) this.callbacks.on[event] = [];\r\n\r\n if (!this.callbacks.on[event].find((c) => c === cb)) {\r\n this.callbacks.on[event].push(cb);\r\n }\r\n\r\n return () => {\r\n this.callbacks.on[event] = this.callbacks.on[event].filter(\r\n (c) => c !== cb,\r\n );\r\n };\r\n }\r\n\r\n /**\r\n * Subscribes a callback function to an event for a single occurrence. After the event is emitted once, the listener is automatically removed.\r\n *\r\n * @param event - The event name to listen to for a single occurrence.\r\n * @param cb - The callback function to be invoked when the event is emitted.\r\n * @returns A function to unsubscribe the event listener.\r\n */\r\n once<K extends keyof Events>(\r\n event: K,\r\n cb: Callback<Events, K>,\r\n ): UnSubscriber {\r\n if (!this.callbacks.once[event]) this.callbacks.once[event] = [];\r\n this.callbacks.once[event].push(cb);\r\n\r\n return () => {\r\n this.callbacks.once[event] = this.callbacks.once[event].filter(\r\n (c) => c !== cb,\r\n );\r\n };\r\n }\r\n}\r\n","import * as React from 'react';\r\n\r\n/**\r\n * Permite reasignar múltiples referencias desde un mismo componente.\r\n *\r\n * @example\r\n *\r\n * const ref1 = useRef(null)\r\n * const ref2 = useRef(null)\r\n *\r\n * const assignRefs = useMultipleRefs(ref1, ref2);\r\n *\r\n * return <Box ref={assignRefs} ...\r\n */\r\nexport function useCombinedRefs<RefType = HTMLInputElement>(\r\n ...refs: (React.ForwardedRef<unknown> | undefined)[]\r\n) {\r\n const [targetRef, setTargetRef] = React.useState<RefType>();\r\n\r\n React.useEffect(() => {\r\n refs.forEach((ref) => {\r\n if (!ref) return;\r\n\r\n if (typeof ref === 'function') {\r\n ref(targetRef);\r\n } else {\r\n // eslint-disable-next-line no-param-reassign\r\n ref.current = targetRef;\r\n }\r\n });\r\n }, [refs, targetRef]);\r\n\r\n return setTargetRef;\r\n}\r\n","import { useCallback, useRef } from 'react';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport const useDebouncedCallback = <Params extends any[]>(\r\n callback: (...params: Params) => unknown,\r\n { runWhenTriggered, timeout } = { runWhenTriggered: false, timeout: 200 },\r\n) => {\r\n const timeoutRef = useRef<number>(-1);\r\n\r\n return useCallback(\r\n (...params: Params) => {\r\n if (runWhenTriggered) callback(...params);\r\n\r\n clearTimeout(timeoutRef.current);\r\n timeoutRef.current = setTimeout(\r\n () => callback(...params),\r\n timeout,\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n ) as any;\r\n },\r\n [callback, runWhenTriggered, timeout],\r\n );\r\n};\r\n","import { useRef } from 'react';\r\n\r\nexport function usePrevious<T>(value: T) {\r\n const previousValue = useRef<T | undefined>(undefined);\r\n const currentValue = useRef<T>(undefined as unknown as T);\r\n\r\n previousValue.current = currentValue.current;\r\n currentValue.current = value;\r\n\r\n return previousValue;\r\n}\r\n","import { useRef } from 'react';\r\nimport { usePrevious } from './usePrevious';\r\n\r\nexport function shallowEqual(a: unknown, b: unknown) {\r\n if (typeof a !== typeof b) return false;\r\n\r\n if (typeof a === 'object' && a && typeof b === 'object' && b) {\r\n const aKeys = Object.keys(a);\r\n const bKeys = Object.keys(b);\r\n\r\n if (aKeys.length !== bKeys.length) return false;\r\n\r\n for (let i = 0; i < aKeys.length; i++) {\r\n if (a[aKeys[i] as keyof typeof a] !== b[bKeys[i] as keyof typeof b])\r\n return false;\r\n }\r\n } else {\r\n if (a !== b) return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\n/**\r\n * Compara con shallowEqual todos los ítems de dos arrays\r\n */\r\nexport function shallowCompareArrays(a: unknown[], b: unknown[]): boolean {\r\n if (a.length !== b.length) return false;\r\n\r\n for (let i = 0; i < a.length; i++) {\r\n const differ = shallowEqual(a, b);\r\n\r\n if (!differ) return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function useShallowMemo<T>(creator: () => T, deps: unknown[]): T {\r\n const value = useRef(creator());\r\n\r\n const previousDeps = usePrevious(deps);\r\n if (!shallowEqual(previousDeps.current ?? [], deps)) {\r\n value.current = creator();\r\n }\r\n\r\n return value.current;\r\n}\r\n","import { Dispatch, SetStateAction, useState } from 'react';\r\nimport { usePrevious } from './usePrevious';\r\nimport { shallowEqual } from './useShallowMemo';\r\n\r\n/**\r\n * Este hook permite mantener un estado interno en un componente, al mismo tiempo que se escucha el estado externo a través de las props, permitiendo la edición del valor en forma interna, a la vez que se permite su definición desde los padres del componente.\r\n *\r\n * Es útil especialmente en campos de tipo input en los cuales es deseable permitir al usuario escribir libremente, y luego de validada la entrada, establecer un valor diferente para mostrar.\r\n */\r\nexport function useIntermediateValue<T>(\r\n currentValue: T,\r\n): [T, Dispatch<SetStateAction<T>>] {\r\n const [innerState, setInnerState] = useState<T>(currentValue);\r\n\r\n const previousValue = usePrevious(currentValue);\r\n if (!shallowEqual(currentValue, previousValue.current)) {\r\n setInnerState(currentValue);\r\n }\r\n\r\n return [innerState, setInnerState];\r\n}\r\n","import { useRef } from 'react';\r\n\r\n/**\r\n * Devuelve una referencia que mantiene siempre el último valor del elemento\r\n * pasado, es especialmente útil para acceder a valores del componente desde\r\n * dentro de efectos.\r\n *\r\n * *Investigar qué es 'react stale state'*\r\n */\r\nexport function useLatest<T>(value: T) {\r\n const ref = useRef(value);\r\n ref.current = value;\r\n return ref;\r\n}\r\n","import { EffectCallback, useEffect } from 'react';\r\n\r\nexport function useMount(effect: EffectCallback) {\r\n useEffect(() => {\r\n return effect();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n}\r\n","import { useEffect } from 'react';\r\n\r\nexport function useUnmount(unmountCallback: () => void) {\r\n useEffect(() => {\r\n return unmountCallback;\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n}\r\n","import {\r\n Dispatch,\r\n MutableRefObject,\r\n SetStateAction,\r\n useRef,\r\n useState,\r\n} from 'react';\r\n\r\nexport function useStateRef<T>(\r\n initialState?: T,\r\n): [\r\n typeof initialState extends undefined ? T | undefined : T,\r\n Dispatch<\r\n SetStateAction<typeof initialState extends undefined ? T | undefined : T>\r\n >,\r\n MutableRefObject<typeof initialState extends undefined ? T | undefined : T>,\r\n] {\r\n const [state, setState] = useState<\r\n typeof initialState extends undefined ? T | undefined : T\r\n >(initialState as typeof initialState extends undefined ? T | undefined : T);\r\n\r\n const stateRef = useRef(state);\r\n stateRef.current = state;\r\n\r\n return [state, setState, stateRef];\r\n}\r\n","import { Dispatch, SetStateAction, useState } from 'react';\r\nimport { useMount } from './useMount';\r\n\r\n/**\r\n * Este hook es una simplificación de la dinámica de suscripción con cambio de\r\n * estado ante eventos.\r\n * \r\n * @example\r\n * \r\n * useIsAfter = (id: string) => {\r\n return useSubscription({\r\n getInitialState: () => {\r\n return { isAfter: this.#isAfter(id), isBefore: this.#isBefore(id) };\r\n },\r\n makeSubscription: (setState) => {\r\n return this.#emitter.on('hover', () => {\r\n setState({\r\n isAfter: this.#isAfter(id),\r\n isBefore: this.#isBefore(id),\r\n });\r\n });\r\n },\r\n });\r\n };\r\n */\r\nexport function useSubscription<T>({\r\n getInitialState,\r\n makeSubscription,\r\n}: {\r\n getInitialState?: (() => T) | (() => () => T);\r\n makeSubscription: (setState: Dispatch<SetStateAction<T>>) => () => void;\r\n}) {\r\n const [state, setState] = useState<T>(getInitialState?.() as T);\r\n\r\n useMount(() => {\r\n let newState = getInitialState?.();\r\n if (typeof newState === 'function') newState = (newState as () => T)();\r\n\r\n if (newState !== undefined) setState(newState);\r\n\r\n return makeSubscription(setState);\r\n });\r\n\r\n return state;\r\n}\r\n\r\nclass Base {\r\n state: { value: string } = { value: '' };\r\n}\r\n\r\nclass Child extends Base {\r\n state = { value: '', isLoading: false };\r\n}\r\n\r\nconst ch = new Child();\r\nch.state.isLoading;\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport { DependencyList, EffectCallback, useEffect, useRef } from 'react';\r\n\r\n/**\r\n * Este hook se comporta igual que useEffect, con la diferencia de que en el\r\n * primer renderizado no se va a ejecutar.\r\n */\r\nexport function useUpdateEffect(effect: EffectCallback, deps?: DependencyList) {\r\n const hasRunnedForFirstTime = useRef(false);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n useEffect(() => {\r\n if (hasRunnedForFirstTime.current) {\r\n return effect();\r\n }\r\n hasRunnedForFirstTime.current = true;\r\n return () => {};\r\n }, deps);\r\n}\r\n","import { usePrevious } from './usePrevious';\r\n\r\nexport function useWhyUpdated(label: any, e: Record<string, any>) {\r\n const previousData = usePrevious(e);\r\n\r\n const diffs: any[] = [];\r\n Object.entries(e).forEach(([key, value]) => {\r\n if (!Object.is(value, previousData.current?.[key])) {\r\n diffs.push({ key, value, previous: previousData.current?.[key] });\r\n }\r\n });\r\n\r\n if (diffs.length) {\r\n console.log(label, diffs);\r\n }\r\n}\r\n","import { useEffect, useState } from 'react';\r\n\r\nexport const useMountTransition = (\r\n isMounted: boolean,\r\n unmountDelay: number,\r\n) => {\r\n const [hasTransitionedIn, setHasTransitionedIn] = useState(false);\r\n\r\n useEffect(() => {\r\n let timeoutId: ReturnType<typeof setTimeout>;\r\n\r\n if (isMounted && !hasTransitionedIn) {\r\n setHasTransitionedIn(true);\r\n } else if (!isMounted && hasTransitionedIn) {\r\n timeoutId = setTimeout(() => setHasTransitionedIn(false), unmountDelay);\r\n }\r\n return () => {\r\n clearTimeout(timeoutId);\r\n };\r\n }, [unmountDelay, isMounted, hasTransitionedIn]);\r\n\r\n return hasTransitionedIn;\r\n};\r\n","import { SetStateAction, useRef } from 'react';\r\nimport { Callback, EventEmitter, Map, UnSubscriber } from './EventEmitter';\r\nimport { useSubscription } from '../hooks';\r\n\r\ntype Setter<T> = (prevState: T) => T;\r\ntype Selector<State, Selected> = (state: State) => Selected;\r\ntype Comparator<Selected> = (\r\n newSelection: Selected,\r\n previousSelection: Selected,\r\n) => boolean;\r\n\r\nexport function isSetter<T>(data: SetStateAction<T>): data is Setter<T> {\r\n return typeof data === 'function';\r\n}\r\n\r\n/**\r\n * @private\r\n */\r\ntype EmitterState<Events extends Map> = {\r\n [K in keyof Events]: Events[K];\r\n};\r\n\r\n/**\r\n * Extends EventEmitter to manage and emit events with state persistence.\r\n * This class allows emitting and listening to typed events while also keeping\r\n * a state that can be accessed synchronously for each event.\r\n *\r\n * @param initialState - If given will be passed to subscriptions\r\n *\r\n * @template Events - A mapping of event names to their associated data types.\r\n * @extends EventEmitter<Events>\r\n */\r\nexport class StatefulEmitter<Events extends Map> extends EventEmitter<Events> {\r\n protected state = {} as EmitterState<Events>;\r\n\r\n constructor(initialState?: Partial<Events>) {\r\n super();\r\n\r\n this.state = Object.assign({}, initialState) as Events;\r\n }\r\n\r\n emit<K extends keyof Events>(event: K, data: Events[K]): void {\r\n this.state[event] = data;\r\n super.emit(event, data);\r\n }\r\n\r\n on<K extends keyof Events>(event: K, cb: Callback<Events, K>): UnSubscriber {\r\n if (this.state[event]) cb(this.state[event]);\r\n\r\n return super.on(event, cb);\r\n }\r\n\r\n once<K extends keyof Events>(\r\n event: K,\r\n cb: Callback<Events, K>,\r\n ): UnSubscriber {\r\n if (this.state[event]) {\r\n cb(this.state[event]);\r\n\r\n /**\r\n * Given that the information has already been sent, the subscription is not necessary\r\n */\r\n return () => {};\r\n }\r\n\r\n return super.once(event, cb);\r\n }\r\n\r\n /**\r\n * Retrieves the stored state for a given event\r\n */\r\n getState<K extends keyof Events>(event: K) {\r\n return this.state[event];\r\n }\r\n\r\n /**\r\n * Just an alias for emit, with the advantage that can be called with a callback as second parameter in which case behaves exactly as react's setState.\r\n */\r\n setState<K extends keyof Events>(\r\n event: K,\r\n data: SetStateAction<Events[K]>,\r\n ): void {\r\n const actualData = isSetter(data) ? data(this.getState(event)) : data;\r\n\r\n this.emit(event, actualData);\r\n }\r\n\r\n /**\r\n * Allows to consume an event stream as a real time updated state\r\n */\r\n useState = <K extends keyof Events>(event: K) => {\r\n return useSubscription({\r\n getInitialState: () => this.state[event],\r\n makeSubscription: (setState) => {\r\n return this.on(event, setState);\r\n },\r\n });\r\n };\r\n\r\n useStateSelector = <K extends keyof Events, Selected>(\r\n event: K,\r\n selector: Selector<Events[K], Selected>,\r\n comparator: Comparator<Selected> = Object.is,\r\n ) => {\r\n const previousSelection = useRef<Selected | null>(null);\r\n return useSubscription({\r\n getInitialState: () => selector(this.state[event]),\r\n makeSubscription: (setState) => {\r\n return this.on(event, () => {\r\n const selection = selector(this.state[event]);\r\n\r\n if (!comparator(selection, previousSelection.current as Selected)) {\r\n setState(selection);\r\n }\r\n });\r\n },\r\n });\r\n };\r\n}\r\n","import { SetStateAction } from 'react';\r\nimport { Map } from './EventEmitter';\r\nimport { StatefulEmitter, isSetter } from './StatefulEmitter';\r\n\r\ntype BouncingMap<Events extends Map> = {\r\n [K in keyof Events]: number;\r\n};\r\n\r\nconst NullObject = Symbol('NullObject');\r\n\r\ntype ThrottlingMap<Events extends Map> = {\r\n [K in keyof Events]: Events[K] | typeof NullObject;\r\n};\r\n\r\ntype ThrottlingMarkers<Events extends Map> = {\r\n [K in keyof Events]: boolean;\r\n};\r\n\r\nexport type DebounceOptions = Partial<{ timing: number }>;\r\n\r\nexport type ThrottleOptions = Partial<{\r\n emitOnStart?: boolean;\r\n timing: number;\r\n}>;\r\n\r\n/**\r\n * @public\r\n *\r\n * The BouncingEmitter class is an extension of EventEmitter which adds debouncing and throttling functionality.\r\n *\r\n * @typeParam — Events - An extension of Map where the key is the event name and the value is the type of data associated with that event.\r\n */\r\nexport class BouncingEmitter<\r\n Events extends Map,\r\n> extends StatefulEmitter<Events> {\r\n protected bouncingTimeouts = {} as BouncingMap<Events>;\r\n\r\n protected defaultTiming = 100;\r\n\r\n /**\r\n * Debounces a event emit with until there is no call to the emit methods by (timing)ms. Take the following event throttling, where each E is a call to this method and each character represents 20ms:\r\n *\r\n * E_E_E_E_E_E_E_E_E\r\n *\r\n * If timing is configured to 100ms, which is the default, the emission will occur as follows:\r\n *\r\n * _____________________E\r\n */\r\n debounce<K extends keyof Events>(\r\n event: K,\r\n data: Events[K],\r\n configuration?: DebounceOptions,\r\n ) {\r\n clearTimeout(this.bouncingTimeouts[event]);\r\n this.bouncingTimeouts[event] = setTimeout(() => {\r\n this.emit(event, data);\r\n }, configuration?.timing ?? this.defaultTiming) as unknown as number;\r\n }\r\n\r\n /**\r\n * Throttles a event emit with the warranty that the data will be emitted at most every (timing)ms. Take the following event throttling, where each E is a call to this method and each character represents 20ms:\r\n *\r\n * E_E_E_E_E_E_E_E_E\r\n *\r\n * If timing is configured to 100ms, which is the default, the emission will occur as follows:\r\n *\r\n * ____E____E____E______E\r\n *\r\n * @param configuration.emitOnStart - Emits an event on the first call to throttle when no pending throttle is stored. **If emitOnStart is true and an only call to throttle is made, it will emit an only event.**\r\n */\r\n\r\n protected throttleData = {} as ThrottlingMap<Events>;\r\n protected throttleEmittedOnInit = {} as ThrottlingMarkers<Events>;\r\n throttle<K extends keyof Events>(\r\n event: K,\r\n data: Events[K],\r\n configuration?: ThrottleOptions,\r\n ) {\r\n if (!this.throttleEmittedOnInit[event] && configuration?.emitOnStart) {\r\n this.throttleEmittedOnInit[event] = true;\r\n setTimeout(() => {\r\n this.throttleEmittedOnInit[event] = false;\r\n }, configuration?.timing ?? this.defaultTiming);\r\n this.emit(event, data);\r\n } else if (!configuration?.emitOnStart) {\r\n if (\r\n this.throttleData[event] === NullObject ||\r\n !(event in this.throttleData)\r\n ) {\r\n setTimeout(() => {\r\n this.emit(event, this.throttleData[event] as Events[K]);\r\n this.throttleData[event] = NullObject;\r\n }, configuration?.timing ?? this.defaultTiming);\r\n }\r\n this.throttleData[event] = data;\r\n }\r\n }\r\n\r\n /**\r\n * This method is a mix between setState and debounce\r\n */\r\n setStateDebounced<K extends keyof Events>(\r\n event: K,\r\n data: SetStateAction<Events[K]>,\r\n configuration?: DebounceOptions,\r\n ): void {\r\n const actualData = isSetter(data) ? data(this.getState(event)) : data;\r\n\r\n this.debounce(event, actualData, configuration);\r\n }\r\n\r\n /**\r\n * This method is a mix between setState and throttle\r\n */\r\n setStateThrottled<K extends keyof Events>(\r\n event: K,\r\n data: SetStateAction<Events[K]>,\r\n configuration?: ThrottleOptions,\r\n ): void {\r\n const actualData = isSetter(data) ? data(this.getState(event)) : data;\r\n\r\n this.throttle(event, actualData, configuration);\r\n }\r\n}\r\n","import isFunction from 'lodash-es/isFunction';\r\nimport { TFocusRetriever } from './focusController';\r\nimport { debugDispatcher } from '../debug';\r\n\r\nconst historySize = 50;\r\n\r\n/**\r\n * The GlobalFocus helper keeps a list of the last focused elements and allows\r\n * to retrieve the last focused element which matches against a query selector.\r\n */\r\nexport const globalFocus = new (class {\r\n focused: (HTMLElement | TFocusRetriever)[] = [];\r\n\r\n #onFocusCallbacks: (() => unknown)[] = [];\r\n\r\n offFocus(cb: () => unknown) {\r\n this.#onFocusCallbacks = this.#onFocusCallbacks.filter(\r\n (current) => current !== cb,\r\n );\r\n }\r\n\r\n onFocus(cb: () => unknown) {\r\n this.#onFocusCallbacks.push(cb);\r\n\r\n return () => {\r\n this.offFocus(cb);\r\n };\r\n }\r\n\r\n constructor() {\r\n debugDispatcher.on(\r\n 'focusHistory',\r\n () => {\r\n console.info(this.focused);\r\n },\r\n 'Muestra el historial de elementos que recibieron foco.',\r\n );\r\n }\r\n\r\n inDocument(el: HTMLElement | TFocusRetriever) {\r\n return (\r\n el instanceof Function ||\r\n (el instanceof HTMLElement && el.offsetParent !== null)\r\n );\r\n }\r\n\r\n set focus(element: HTMLElement | TFocusRetriever) {\r\n this.focused = this.focused.filter((el) => {\r\n const existsInDocument = this.inDocument(el) && element !== el;\r\n\r\n return existsInDocument;\r\n });\r\n this.focused.unshift(element);\r\n if (this.focused.length > historySize) {\r\n this.focused = this.focused.splice(0, historySize);\r\n }\r\n\r\n this.#onFocusCallbacks.forEach((cb) => cb());\r\n }\r\n\r\n get list() {\r\n return [...this.focused];\r\n }\r\n\r\n /**\r\n * @param querySelector A query selector against which the element should match\r\n * @returns The last HTMLElement if no querySelector argument provided or else, the last which matches\r\n * against that query selector.\r\n * */\r\n last(querySelector?: string, omit = 0) {\r\n if (querySelector)\r\n for (let i = omit; i <= this.focused.length; i++) {\r\n const storedElement = this.focused[i];\r\n const element =\r\n // eslint-disable-next-line no-nested-ternary\r\n (storedElement as HTMLElement)?.id !== undefined\r\n ? (storedElement as HTMLElement)\r\n : isFunction(storedElement)\r\n ? storedElement(false)\r\n : null;\r\n\r\n if (\r\n element &&\r\n this.inDocument(element) &&\r\n element.matches &&\r\n element.matches(querySelector)\r\n )\r\n return element;\r\n }\r\n else return this.focused[this.focused.length - 1];\r\n return null;\r\n }\r\n})();\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { useState } from 'react';\r\nimport { useMount } from '../hooks';\r\nimport { TId } from '../types';\r\n\r\nfunction upper(s: string) {\r\n return `${s.charAt(0).toUpperCase()}${s.slice(1)}`;\r\n}\r\n\r\ntype StatefulStoreUnsuscriber = () => void;\r\n\r\nexport type StatefulStoreUpdater<Props> = (currentProps: Props) => Props;\r\n\r\nexport type StatefulStoreUpdateProps<Props> =\r\n | StatefulStoreUpdater<Props>\r\n | Partial<Props>;\r\n\r\nfunction isUpdater<Props>(\r\n props: StatefulStoreUpdater<Props> | Partial<Props>,\r\n): props is StatefulStoreUpdater<Props> {\r\n return typeof props === 'function';\r\n}\r\n\r\n/**\r\n * Clase facilitadora del uso de StatefulStore. Es un pequeño almacen que\r\n * permite actualizar sus propiedades y sabe cómo sincronizarse con el store de\r\n * modo que los cambios se propaguen según corresponda.\r\n */\r\nexport abstract class BasicStoredElement<\r\n Props extends Record<string, unknown>,\r\n> {\r\n abstract getId(): TId;\r\n\r\n #onUpdateCbs: (() => void)[] = [];\r\n onUpdate(cb: () => void): StatefulStoreUnsuscriber {\r\n this.#onUpdateCbs.push(cb);\r\n\r\n return () => {\r\n this.#onUpdateCbs = this.#onUpdateCbs.filter((current) => current !== cb);\r\n };\r\n }\r\n\r\n props: Props = {} as Props;\r\n constructor(props: Props) {\r\n this.props = props;\r\n }\r\n\r\n protected shoutUpdates = () => {\r\n this.#onUpdateCbs.forEach((current) => current());\r\n };\r\n\r\n update(newProps: StatefulStoreUpdateProps<Props>) {\r\n const actualNewProps = isUpdater(newProps)\r\n ? newProps(this.props)\r\n : newProps;\r\n\r\n this.props = { ...this.props, ...actualNewProps };\r\n this.shoutUpdates();\r\n }\r\n\r\n useProps = () => {\r\n const [props, setState] = useState(this.props);\r\n\r\n useMount(() => {\r\n setState({ ...this.props });\r\n\r\n return this.onUpdate(() => {\r\n setState({ ...this.props });\r\n });\r\n });\r\n\r\n return props;\r\n };\r\n}\r\n\r\n/**\r\n * Son las acciones de adición del store.\r\n */\r\ntype AddActions<T extends Record<string, BasicStoredElement<any>>> = {\r\n [P in keyof T as `add${Capitalize<string & P>}`]: (el: T[P]) => void;\r\n};\r\n\r\n/**\r\n * Acciones de vaciado del store.\r\n */\r\ntype EmptyActions<T extends Record<string, BasicStoredElement<any>>> = {\r\n [P in keyof T as `empty${Capitalize<string & P>}`]: () => void;\r\n};\r\n\r\n/**\r\n * Acciones de removido del store.\r\n */\r\ntype RemoveActions<T extends Record<string, BasicStoredElement<any>>> = {\r\n [P in keyof T as `remove${Capitalize<string & P>}`]: (id: TId) => void;\r\n};\r\n\r\ntype UpdateListActions<T extends Record<string, BasicStoredElement<any>>> = {\r\n [P in keyof T as `update${Capitalize<string & P>}List`]: (\r\n newList: T[P],\r\n ) => void;\r\n};\r\n\r\n/**\r\n * Conjunto de acciones disponibles del store\r\n */\r\ntype ActionMethods<T extends Record<string, BasicStoredElement<any>>> = {\r\n actions: AddActions<T> &\r\n EmptyActions<T> &\r\n RemoveActions<T> &\r\n UpdateListActions<T>;\r\n};\r\n\r\n/**\r\n * Método que permite obtener el listado de elementos de un tipo.\r\n */\r\ntype GetStateActions<T extends Record<string, BasicStoredElement<any>>> = {\r\n [P in keyof T as `get${Capitalize<string & P>}State`]: () => T[P][];\r\n};\r\n\r\n/**\r\n * Método que permite conocer las propiedades de un elemento.\r\n */\r\ntype GetItemActions<T extends Record<string, BasicStoredElement<any>>> = {\r\n [P in keyof T as `get${Capitalize<string & P>}`]: (id: TId) => T[P];\r\n};\r\n\r\ntype UpdateItemActions<T extends Record<string, BasicStoredElement<any>>> = {\r\n [P in keyof T as `update${Capitalize<string & P>}`]: (\r\n id: TId,\r\n newProps: StatefulStoreUpdateProps<T[P]['props']>,\r\n ) => void;\r\n};\r\n\r\n/**\r\n * Conjunto de métodos que permiten acceder al estado en un momento\r\n * determinado.\r\n */\r\ntype StateMethods<T extends Record<string, BasicStoredElement<any>>> = {\r\n state: GetStateActions<T> & GetItemActions<T> & UpdateItemActions<T>;\r\n};\r\n\r\n/**\r\n * Es el hook encargado de permitir la escucha de listado de elementos y sus\r\n * propiedades.\r\n */\r\ntype HookUseState<T extends Record<string, BasicStoredElement<any>>> = {\r\n [P in keyof T as `use${Capitalize<string & P>}`]: () => T[P][];\r\n};\r\n\r\n/**\r\n * Es el hook encargado de permitir la escucha de listado de elementos\r\n */\r\ntype HookUseList<T extends Record<string, BasicStoredElement<any>>> = {\r\n [P in keyof T as `use${Capitalize<string & P>}List`]: () => T[P][];\r\n};\r\n\r\n/**\r\n * Es el hook encargado de permitir la escucha de propiedades de un elemento\r\n */\r\ntype HookUseStateById<T extends Record<string, BasicStoredElement<any>>> = {\r\n [P in keyof T as `use${Capitalize<string & P>}ById`]: /**\r\n * Cada hook permite conocer el listado de elementos, reflejando la\r\n * actualización sobre éstos en tiempo real.\r\n */ (id: TId) => T[P] | undefined;\r\n};\r\n\r\n/**\r\n * Conjunto de hooks del store.\r\n */\r\ntype HooksMethods<T extends Record<string, BasicStoredElement<any>>> = {\r\n hooks: HookUseState<T> & HookUseStateById<T> & HookUseList<T>;\r\n};\r\n\r\n/**\r\n * Es la suscripción encargada de permitir la escucha de propiedades de un\r\n * elemento\r\n */\r\ntype SuscribeById<T extends Record<string, BasicStoredElement<any>>> = {\r\n [P in keyof T as `change${Capitalize<string & P>}Element`]: (\r\n id: TId,\r\n cb: (props: T[P]) => unknown,\r\n ) => StatefulStoreUnsuscriber;\r\n};\r\n\r\n/**\r\n * Es la suscripción encaragada de permitir la escucha de cambios en la lista y\r\n * las propiedades de sus elementos.\r\n */\r\ntype SuscribeToListChange<T extends Record<string, BasicStoredElement<any>>> = {\r\n [P in keyof T as `change${Capitalize<string & P>}`]: (\r\n cb: (props: T[P][]) => unknown,\r\n ) => StatefulStoreUnsuscriber;\r\n};\r\n\r\n/**\r\n * Es la suscripción encaragada de permitir la escucha de cambios en la\r\n * cantidad de elementos de la lista, pero no en las propiedades de los\r\n * elementos.\r\n */\r\ntype SuscribeToListCountChange<\r\n T extends Record<string, BasicStoredElement<any>>,\r\n> = {\r\n [P in keyof T as `change${Capitalize<string & P>}Ammount`]: (\r\n cb: (props: T[P][]) => unknown,\r\n ) => StatefulStoreUnsuscriber;\r\n};\r\n\r\ntype SuscribeMethods<T extends Record<string, BasicStoredElement<any>>> = {\r\n on: SuscribeById<T> & SuscribeToListChange<T> & SuscribeToListCountChange<T>;\r\n};\r\n\r\ntype InitialStates<T extends Record<string, BasicStoredElement<any>>> = {\r\n [P in keyof T as `${string & P}State`]: T[P][];\r\n};\r\ntype TPeople = { name: string };\r\nclass People extends BasicStoredElement<TPeople> {\r\n getId(): TId {\r\n return this.props.name;\r\n }\r\n}\r\n\r\nconst r = makeStatefulStore({\r\n people: People.prototype,\r\n});\r\n\r\nr.actions.addPeople;\r\nr.actions.emptyPeople;\r\nr.actions.removePeople;\r\nr.actions.updatePeopleList;\r\nr.hooks.usePeople;\r\nr.hooks.usePeopleById;\r\nr.hooks.usePeopleList;\r\nr.on.changePeople;\r\nr.on.changePeopleAmmount;\r\nr.on.changePeopleElement;\r\nr.state.getPeople;\r\nr.state.getPeopleState;\r\nr.state.updatePeople;\r\n\r\n/**\r\n * Este store permite mantener `N` listados de objetos y por cada tipo de\r\n * objeto ofrece métodos para agregar, eliminar, obtener uno, obtener todos y\r\n * un hook para conocer el listado en tiempo real.\r\n * \r\n * **Métodos disponibles**\r\n * \r\n * - **action.addXXX**: Agrega un elemento de tipo XXX a la lista.\r\n * - **action.emptyXXX**: Vacía el listado de tipo XXX.\r\n * - **action.removeXXX**: Elimina un elemento de tipo XXX de la lista.\r\n * - **action.updateXXXList**: Permite actualizar toda la lista en una sola\r\n * acción. - **hooks.useXXX**: Permite conocer el listado de elementos y el\r\n * cambio\r\n * en sus propiedades en tiempo real. \r\n * - **hooks.useXXXById**: Permite conocer los cambios a un elemento de la\r\n * lista en tiempo real. \r\n * - **hooks.useXXXList**: Permite conocer el listado de\r\n * elementos pero no reacciona a los cambios en las propiedades de los\r\n * elementos. \r\n * - **on.changeXXX**: Permite suscribirse al listado de elementos y\r\n * cambios en sus propiedades.\r\n * - **on.changeXXXAmmount**: Permite suscribirse\r\n * al listado de elementos, sin tomar en cuenta el cambio en las propiedades\r\n * de sus items.\r\n * - **on.changeXXXElement**: Permite suscribirse al cambio de\r\n * propiedades de un ítem particular\r\n * - **state.getXXX**: Permite obtener el\r\n * esatdo de un elemento particular de la lista.\r\n * - **state.getXXXState**:\r\n * Permite obtener el estado del listado completo de un tipo de elementos.\r\n * - **state.updateXXX**: Es un atajo para state.getXXX(id).update\r\n * \r\n * La funcionalidad de actualización se implementa en el objeto almacenado y es\r\n * comunicada en forma automática al store, de forma que el store no conoce\r\n * solamente cuántos y cuáles elementos hay almacenados, sino que además refleja\r\n * en tiempo real el estado de sus propiedades.\r\n * \r\n * @example\r\n * \r\n type TPeople = { name: string };\r\n class People extends BasicStoredElement<TPeople> {\r\n getId(): TId {\r\n return this.props.name;\r\n }\r\n }\r\n\r\n class Schedule extends BasicStoredElement<{ day: string; task: string }>\r\n {\r\n getId() {\r\n return this.props.day;\r\n }\r\n }\r\n\r\n const r = makeStatefulStore(\r\n {\r\n people: People.prototype,\r\n schedules: Schedule.prototype,\r\n },\r\n {\r\n peopleState: [new People({ name: 'A' }), new People({ name: 'B' })],\r\n },\r\n );\r\n\r\n const p = r.hooks.usePeople();\r\n p[0].props.name;\r\n\r\n r.hooks.usePeople();\r\n\r\n r.actions.removePeople('asdf');\r\n\r\n r.actions.addPeople(new People({ name: 'asdf' }));\r\n r.actions.removePeople('asdf');\r\n\r\n r.state.getPeopleState();\r\n const pep = r.state.getPeople('asdf')\r\n\r\n const ph = r.hooks.usePeople();\r\n const sch = r.hooks.useSchedules();\r\n */\r\nexport function makeStatefulStore<\r\n T extends Record<string, BasicStoredElement<any>>,\r\n>(entries: T, initialStates?: Partial<InitialStates<T>>) {\r\n const hookUseState = {} as HookUseState<T>;\r\n const hookUseList = {} as HookUseList<T>;\r\n const hookUseStateById = {} as HookUseStateById<T>;\r\n\r\n const suscribeById = {} as SuscribeById<T>;\r\n const suscribeToList = {} as SuscribeToListChange<T>;\r\n const suscribeToListCount = {} as SuscribeToListCountChange<T>;\r\n\r\n const addActions = {} as AddActions<T>;\r\n const emptyActions = {} as EmptyActions<T>;\r\n const removeActions = {} as RemoveActions<T>;\r\n const updateListActions = {} as UpdateListActions<T>;\r\n\r\n const getItemActions = {} as GetItemActions<T>;\r\n const getStateActions = {} as GetStateActions<T>;\r\n const updateItemActions = {} as UpdateItemActions<T>;\r\n\r\n Object.keys(entries).forEach((name) => {\r\n /**\r\n * Make store\r\n */\r\n const initialStateKey = `${upper(name)}State` as keyof InitialStates<T>;\r\n let store = {} as Record<string, T[typeof name]>;\r\n const initialState = initialStates?.[initialStateKey] as T[typeof name][];\r\n initialState?.forEach((current) => {\r\n store[current.getId()] = current;\r\n });\r\n\r\n /** Make event handlers */\r\n let listStateChangeHandlers: (() => void)[] = [];\r\n /**\r\n * Este método avisa acerca de un cambio en la cantidad de elementos o de\r\n * un cambio en las propiedades de algún elemento.\r\n */\r\n function shoutListStateChange() {\r\n listStateChangeHandlers.forEach((current) => current());\r\n }\r\n\r\n const elementChangeHandlers: Record<TId, (() => void)[]> = {};\r\n /**\r\n * Este método avisa acerca de un cambio en las propiedades de un elemento.\r\n */\r\n function shoutListElementChange(id: TId) {\r\n elementChangeHandlers[id]?.forEach((current) => current());\r\n }\r\n\r\n let listCountChangeHandlers: (() => void)[] = [];\r\n /**\r\n * Este método avisa acerca de un cambio en la cantidad de elementos\r\n */\r\n function shoutListCountChange() {\r\n listCountChangeHandlers.forEach((current) => current());\r\n }\r\n\r\n const onUpdateElementSuscriptions: Record<string, () => void> = {};\r\n\r\n /**\r\n *\r\n * Make actions\r\n *\r\n **/\r\n\r\n const addKey = `add${upper(name)}` as keyof AddActions<T>;\r\n /**\r\n * La acción de agregado del store. Agrega elementos y notifica tanto a los\r\n * listeners específicos del elemento como a los que escuchan el listado de\r\n * elementos.\r\n */\r\n addActions[addKey] = ((newElement: T[typeof name]) => {\r\n let elId = newElement.getId();\r\n let lastProps = { ...newElement.props };\r\n store[elId] = newElement as T[typeof name];\r\n const suscription = newElement.onUpdate(() => {\r\n const id = newElement.getId();\r\n\r\n if (id !== elId) {\r\n if (store[id]) {\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\r\n newElement.update(lastProps);\r\n throw new Error(\r\n `Cannot set new id ${id} because it already exists`,\r\n );\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\r\n delete store[elId];\r\n store[id] = newElement;\r\n\r\n elId = id;\r\n lastProps = newElement.props;\r\n }\r\n\r\n shoutListElementChange(id);\r\n shoutListStateChange();\r\n });\r\n onUpdateElementSuscriptions[newElement.getId()] = suscription;\r\n shoutListStateChange();\r\n shoutListCountChange();\r\n shoutListElementChange(elId);\r\n }) as AddActions<T>[typeof addKey];\r\n\r\n /**\r\n * Acción de borrado completo. Vacía el store y avisa a todos los\r\n * listeners, incluyendo los que escuchan las propiedades de un elemento\r\n * particular.\r\n */\r\n const emptyKey = `empty${upper(name)}` as keyof EmptyActions<T>;\r\n emptyActions[emptyKey] = (() => {\r\n Object.values(onUpdateElementSuscriptions).forEach((current) =>\r\n current(),\r\n );\r\n store = {};\r\n shoutListCountChange();\r\n shoutListStateChange();\r\n Object.keys(elementChangeHandlers).forEach((current) =>\r\n shoutListElementChange(current),\r\n );\r\n }) as EmptyActions<T>[typeof emptyKey];\r\n\r\n /**\r\n * Elimina un elemento y avisa al store general y particular.\r\n */\r\n const removeKey = `remove${upper(name)}` as keyof RemoveActions<T>;\r\n removeActions[removeKey] = ((id: TId) => {\r\n onUpdateElementSuscriptions[id]?.();\r\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\r\n delete store[id];\r\n shoutListCountChange();\r\n shoutListStateChange();\r\n shoutListElementChange(id);\r\n }) as RemoveActions<T>[typeof removeKey];\r\n\r\n const updateListKey = `update${upper(\r\n name,\r\n )}List` as keyof UpdateListActions<T>;\r\n updateListActions[updateListKey] = ((list: T[typeof name]) => {\r\n store[name] = list;\r\n shoutListCountChange();\r\n shoutListStateChange();\r\n }) as UpdateListActions<T>[typeof updateListKey];\r\n\r\n /**\r\n * Permite obtener el estado del listado completo de un tipo de elementos.\r\n */\r\n const getStateKey = `get${upper(name)}State` as keyof GetStateActions<T>;\r\n getStateActions[getStateKey] = (() => {\r\n return Object.values(store) as T[typeof name][];\r\n }) as GetStateActions<T>[typeof getStateKey];\r\n const getState = getStateActions[getStateKey] as () => T[typeof name][];\r\n\r\n /**\r\n * Permite obtener el estado de un elemento en particular.\r\n */\r\n const getItemKey = `get${upper(name)}` as keyof GetItemActions<T>;\r\n getItemActions[getItemKey] = ((id: TId) => {\r\n return store[id] as T[typeof name];\r\n }) as GetItemActions<T>[typeof getItemKey];\r\n\r\n /**\r\n * Permite actualizar un elemento\r\n */\r\n const updateItemKey = `update${upper(name)}` as keyof UpdateItemActions<T>;\r\n updateItemActions[updateItemKey] = ((\r\n id: TId,\r\n newProps: StatefulStoreUpdateProps<T[typeof name]>,\r\n ) => {\r\n store[id].update(newProps);\r\n }) as UpdateItemActions<T>[typeof updateItemKey];\r\n\r\n const hookUseStateKey = `use${upper(name)}` as keyof HookUseState<T>;\r\n /**\r\n * Este hook permite conocer el estado de todos los elementos del listado\r\n * en tiempo real.\r\n */\r\n hookUseState[hookUseStateKey] = (() => {\r\n const [state, setState] = useState(getState() as T[typeof name][]);\r\n\r\n useMount(() => {\r\n setState(getState() as T[typeof name][]);\r\n\r\n const eventHandler = () => {\r\n setState(getState() as T[typeof name][]);\r\n };\r\n\r\n listStateChangeHandlers.push(eventHandler);\r\n\r\n return () => {\r\n listStateChangeHandlers = listStateChangeHandlers.filter(\r\n (current) => current !== eventHandler,\r\n );\r\n };\r\n });\r\n\r\n return state;\r\n }) as unknown as HookUseState<T>[typeof hookUseStateKey];\r\n\r\n const hookUseListKey = `use${upper(name)}List` as keyof HookUseList<T>;\r\n /**\r\n * Este hook permite conocer el listado de elementos en tiempo real, sin\r\n * preocuparse por el cambio de propiedades.\r\n */\r\n hookUseList[hookUseListKey] = (() => {\r\n const [state, setState] = useState(getState() as T[typeof name][]);\r\n\r\n useMount(() => {\r\n setState(getState() as T[typeof name][]);\r\n\r\n const eventHandler = () => {\r\n setState(getState() as T[typeof name][]);\r\n };\r\n\r\n listCountChangeHandlers.push(eventHandler);\r\n\r\n return () => {\r\n listCountChangeHandlers = listCountChangeHandlers.filter(\r\n (current) => current !== eventHandler,\r\n );\r\n };\r\n });\r\n\r\n return state;\r\n }) as unknown as HookUseList<T>[typeof hookUseListKey];\r\n\r\n const hookUseStateByIdKey = `use${upper(\r\n name,\r\n )}ById` as keyof HookUseStateById<T>;\r\n\r\n hookUseStateById[hookUseStateByIdKey] = ((id: TId) => {\r\n const [state, setState] = useState({ obj: store[id] });\r\n\r\n useMount(() => {\r\n setState({ obj: store[id] });\r\n\r\n const eventHandler = () => {\r\n setState({ obj: store[id] });\r\n };\r\n\r\n if (!elementChangeHandlers[id]) elementChangeHandlers[id] = [];\r\n elementChangeHandlers[id].push(eventHandler);\r\n\r\n return () => {\r\n elementChangeHandlers[id] = elementChangeHandlers[id].filter(\r\n (current) => current !== eventHandler,\r\n );\r\n };\r\n });\r\n\r\n return state.obj;\r\n }) as unknown as HookUseStateById<T>[typeof hookUseStateByIdKey];\r\n /**\r\n * Esta suscripción permite conocer el estado de un único elemento en\r\n * tiempo real.\r\n */\r\n const onChangeElementKey = `change${upper(\r\n name,\r\n )}Element` as keyof SuscribeById<T>;\r\n suscribeById[onChangeElementKey] = ((\r\n id: string,\r\n cb: (props: T[typeof name]) => unknown,\r\n ) => {\r\n if (!elementChangeHandlers[id]) elementChangeHandlers[id] = [];\r\n\r\n const innerCb = () => {\r\n cb(store[id]);\r\n };\r\n elementChangeHandlers[id].push(innerCb);\r\n\r\n return () => {\r\n elementChangeHandlers[id] = elementChangeHandlers[id].filter(\r\n (current) => current !== innerCb,\r\n );\r\n };\r\n }) as SuscribeById<T>[typeof onChangeElementKey];\r\n\r\n const onChangeListKey = `change${upper(\r\n name,\r\n )}` as keyof SuscribeToListChange<T>;\r\n /**\r\n * Esta suscripción permite conocer el estado de la lista en tiempo real,\r\n * incluyendo cambios en los elementos.\r\n */\r\n suscribeToList[onChangeListKey] = ((\r\n cb: (props: T[typeof name][]) => unknown,\r\n ) => {\r\n const innerCb = () => {\r\n cb(getState());\r\n };\r\n listStateChangeHandlers.push(innerCb);\r\n\r\n return () => {\r\n listStateChangeHandlers = listStateChangeHandlers.filter(\r\n (current) => current !== innerCb,\r\n );\r\n };\r\n }) as SuscribeToListChange<T>[typeof onChangeListKey];\r\n\r\n const onChangeListCountKey = `change${upper(\r\n name,\r\n )}Ammount` as keyof SuscribeToListCountChange<T>;\r\n /**\r\n * Esta suscripción permite conocer el estado de la lista en tiempo real,\r\n * sin incluir los cambios en los elementos.\r\n */\r\n suscribeToListCount[onChangeListCountKey] = ((\r\n cb: (props: T[typeof name][]) => unknown,\r\n ) => {\r\n const innerCb = () => {\r\n cb(getState());\r\n };\r\n listCountChangeHandlers.push(innerCb);\r\n\r\n return () => {\r\n listCountChangeHandlers = listCountChangeHandlers.filter(\r\n (current) => current !== innerCb,\r\n );\r\n };\r\n }) as SuscribeToListCountChange<T>[typeof onChangeListCountKey];\r\n });\r\n\r\n const actions = Object.assign(\r\n {},\r\n addActions,\r\n removeActions,\r\n emptyActions,\r\n updateListActions,\r\n ) as ActionMethods<T>['actions'];\r\n\r\n const hooks = Object.assign({}, hookUseState, hookUseStateById, hookUseList);\r\n\r\n const on = Object.assign(\r\n {},\r\n suscribeById,\r\n suscribeToList,\r\n suscribeToListCount,\r\n );\r\n\r\n const state = Object.assign(\r\n {},\r\n getStateActions,\r\n getItemActions,\r\n updateItemActions,\r\n );\r\n\r\n return Object.assign(\r\n {},\r\n { hooks },\r\n { actions },\r\n { state },\r\n { on },\r\n ) as ActionMethods<T> &\r\n HooksMethods<T> &\r\n StateMethods<T> &\r\n SuscribeMethods<T>;\r\n}\r\n","import { getWindow } from '../dom/getWindow';\r\n\r\nconst persistentStorage = new Proxy<{\r\n remove(prop: string): unknown;\r\n [key: string]: unknown;\r\n}>(\r\n {\r\n remove(prop) {\r\n localStorage.removeItem(prop);\r\n },\r\n },\r\n {\r\n get(_, prop) {\r\n try {\r\n const value = localStorage.getItem(String(prop));\r\n if (!value) return undefined;\r\n return JSON.parse(value) as unknown;\r\n } catch {\r\n return undefined;\r\n }\r\n },\r\n set(_, prop, value) {\r\n localStorage.setItem(String(prop), JSON.stringify(value));\r\n return true;\r\n },\r\n },\r\n);\r\n\r\ndeclare global {\r\n interface Window {\r\n persistentStorage: typeof persistentStorage;\r\n }\r\n}\r\n\r\nif (typeof window !== 'undefined') {\r\n getWindow().persistentStorage = persistentStorage;\r\n}\r\n\r\nexport default persistentStorage;\r\n","import { useCallback, useEffect, useMemo, useState } from 'react';\r\nimport { EventEmitter } from '../events/EventEmitter';\r\n\r\nconst localStorageController =\r\n new (class LocalSctorageController extends EventEmitter<{\r\n update: {\r\n prop: string;\r\n value: unknown;\r\n };\r\n }> {})();\r\n\r\n/**\r\n * @param prop este nombre define el nombre del localStorage, las modificaciones a este parametro no van a tener efecto.\r\n */\r\nexport function useLocalStorage<T>(\r\n prop: string,\r\n defaultValue?: T,\r\n): [T, (newValue: T) => void] {\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n const actualProp = useMemo(() => prop, []);\r\n const storageValue = useMemo(\r\n () => localStorage.getItem(actualProp) as string,\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [],\r\n );\r\n\r\n const [value, setValue] = useState<T>(\r\n storageValue ? (JSON.parse(storageValue) as T) : (defaultValue as T),\r\n );\r\n useEffect(() => {\r\n setValue(JSON.parse(storageValue) as T);\r\n return localStorageController.on('update', (ev) => {\r\n if (ev.prop === actualProp) {\r\n setValue(ev.value as T);\r\n localStorage.setItem(actualProp, JSON.stringify(ev.value));\r\n }\r\n });\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n return [\r\n value,\r\n useCallback(\r\n (newValue: T) => {\r\n localStorageController.emit('update', {\r\n prop: actualProp,\r\n value: newValue,\r\n });\r\n },\r\n [actualProp],\r\n ),\r\n ];\r\n}\r\n","export function awaitTime(ms: number) {\r\n return new Promise<void>((resolve) => {\r\n setTimeout(resolve, ms);\r\n });\r\n}\r\n","import { computed, makeObservable, observable } from 'mobx';\r\n\r\ntype CB = () => void;\r\n\r\nexport class CancellablePromise<T> extends Promise<T> {\r\n constructor(\r\n executor: (\r\n resolve: (value: T) => void,\r\n reject: (reason?: any) => void,\r\n ) => void,\r\n public cancel: () => unknown,\r\n ) {\r\n super(executor);\r\n }\r\n}\r\n\r\nexport const cancellingToken = Symbol();\r\n\r\n/**\r\n * A simple semaphore implementation to control concurrency.\r\n * Limits the number of concurrent tasks that can run simultaneously.\r\n */\r\nexport class Semaphore {\r\n private current = 0;\r\n private queue: { resolve: CB; reject: CB }[] = [];\r\n\r\n /**\r\n * Creates a new instance of the Semaphore.\r\n *\r\n * @param concurrency - The maximum number of concurrent tasks allowed.\r\n */\r\n constructor(private concurrency: number) {\r\n makeObservable<Semaphore, 'current'>(this, {\r\n current: observable,\r\n isBusy: computed,\r\n });\r\n }\r\n\r\n public get isBusy() {\r\n return this.current > 0;\r\n }\r\n\r\n /**\r\n * Acquires a permit to run a task.\r\n *\r\n * If the number of currently acquired permits is less than the concurrency limit,\r\n * the promise resolves immediately. Otherwise, it is queued until a permit is released.\r\n *\r\n * @returns A promise that resolves when the permit has been acquired.\r\n */\r\n public async acquire(): Promise<void> {\r\n if (this.current < this.concurrency) {\r\n this.current++;\r\n return Promise.resolve();\r\n }\r\n\r\n let resolver: any = null;\r\n let rejecter: any = null;\r\n return new CancellablePromise<void>(\r\n (resolve, reject) => {\r\n resolver = resolve;\r\n rejecter = reject;\r\n this.queue.push({ resolve, reject });\r\n },\r\n () => {\r\n this.queue = this.queue.filter((c) => c.resolve !== resolver);\r\n rejecter(cancellingToken);\r\n },\r\n );\r\n }\r\n\r\n clear() {\r\n this.queue.forEach((c) => c.reject());\r\n this.queue.splice(0);\r\n }\r\n\r\n /**\r\n * Releases a previously acquired permit.\r\n *\r\n * If there are queued tasks waiting for a permit, the next one is dequeued and allowed to proceed.\r\n */\r\n public release() {\r\n this.current = Math.max(0, this.current - 1);\r\n this.queue.shift()?.resolve();\r\n }\r\n}\r\n","import { cancellingToken, Semaphore } from './semaphore';\r\n\r\nexport class Mutex extends Semaphore {\r\n constructor() {\r\n super(1);\r\n }\r\n\r\n async runExclusive<T>(cb: () => Promise<T>) {\r\n try {\r\n await this.acquire();\r\n const result = await cb();\r\n this.release();\r\n return result;\r\n } catch (t) {\r\n if (t !== cancellingToken) {\r\n throw t;\r\n }\r\n }\r\n }\r\n}\r\n","import { Mutex } from './mutex';\r\n\r\nexport type Task<T> = () => Promise<T>;\r\n\r\nexport class TasksQueue {\r\n private mutex = new Mutex();\r\n\r\n public get isBusy() {\r\n return this.mutex.isBusy;\r\n }\r\n\r\n clear() {\r\n this.mutex.clear();\r\n }\r\n\r\n async run<T>(task: Task<T>): Promise<T | undefined> {\r\n return await this.mutex.runExclusive<T>(async () => {\r\n return await task();\r\n });\r\n }\r\n}\r\n","import { makeObservable, observable } from 'mobx';\r\nimport { EventEmitter } from '../events';\r\nimport { Mutex } from '../synchronization';\r\n\r\nexport class Locker extends EventEmitter<{ releaseForFirstTime: null }> {\r\n private locks = 0;\r\n private hasReleased = false;\r\n private mutex = new Mutex();\r\n\r\n constructor() {\r\n super();\r\n\r\n makeObservable<Locker, 'locks'>(this, {\r\n locks: observable,\r\n });\r\n }\r\n\r\n get isLocked() {\r\n return this.locks > 0;\r\n }\r\n\r\n lock() {\r\n this.mutex.acquire().then(() => {\r\n this.locks++;\r\n });\r\n }\r\n\r\n unlock() {\r\n this.mutex.acquire().then(() => {\r\n this.locks--;\r\n if (!this.hasReleased && this.locks === 0) {\r\n this.emit('releaseForFirstTime', null);\r\n this.hasReleased = true;\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport const screenLocker = new Locker();\r\n","export class ScrollLocker {\r\n private static locks = 0;\r\n\r\n private static evaluate() {\r\n Object.assign(document.body.style, {\r\n maxHeight: this.locks > 0 ? '100vh' : 'unset',\r\n overflow: this.locks > 0 ? 'hidden' : 'auto',\r\n paddingRight:\r\n this.locks > 0 &&\r\n document.body.scrollHeight > document.body.clientHeight\r\n ? '10px'\r\n : '0px',\r\n });\r\n }\r\n\r\n static lock() {\r\n this.locks++;\r\n this.evaluate();\r\n }\r\n static unlock() {\r\n this.locks--;\r\n this.evaluate();\r\n }\r\n}\r\n","import isFunction from 'lodash-es/isFunction';\r\nimport { TRequireOnlyOne } from '../types';\r\nimport { globalFocus } from './globalFocus';\r\nimport { customEvents, focusSelector } from '../dom';\r\nimport { persistentStorage } from '../storage';\r\nimport { noNaN } from '../number';\r\nimport { screenLocker } from '../lockers';\r\nimport { getWindow } from '../dom/getWindow';\r\n\r\ninterface IFocusProps {\r\n modalsContainerRetriever?: () => HTMLElement;\r\n notificationsContainerRetriever?: () => HTMLElement;\r\n}\r\n\r\nexport interface IOnFocusConfiguration {\r\n /**\r\n * El controlador emite un evento custom cuando se realiza foco, con la\r\n * intención de que los elementos colapsables se abran automáticamente. Si\r\n * este parámetro es pasado con false, se evita ese comportamiento.\r\n */\r\n dispatchCustomEvent?: boolean;\r\n /**\r\n * Cuando la pantalla está bloqueada con el spinner, el controlador no\r\n * intentará hacer foco, a menos que este parámetro se pase en true.\r\n */\r\n focusEvenWhenScreenLocked?: boolean;\r\n scrollIntoViewOptions?: ScrollIntoViewOptions;\r\n}\r\n\r\nexport const notificationsSelector = '.notification';\r\n\r\n/**\r\n * Al método focus.on se le puede pasar o bien un HTMLElement o bien una\r\n * función que implemente esta interfaz. Cuando se pasa una función, la misma\r\n * será invocada cada vez que se vaya a intentar una acción de foco.\r\n *\r\n * Si la función devuelve un elemento HTML, se intentará hacer foco sobre éste.\r\n *\r\n * Si la función devuelve null, ese intento será tomado como nulo y se volverá\r\n * a intentar luego del tiempo determinado.\r\n *\r\n * Si la función devuelve false, será eliminada de la cola de foco, lo que\r\n * significa que ya no se intentará hacer foco sobre este elemento. En cambio,\r\n * se continuará con los demás elementos de la cola o en caso de no haber\r\n * ninguno, con el último elemento que tuvo foco y aún esté presente en el\r\n * documento.\r\n */\r\nexport type TFocusRetriever = (\r\n isLastTry: boolean,\r\n) => HTMLElement | null | false;\r\n\r\ninterface IFocusQueryElement {\r\n element: HTMLElement | TFocusRetriever;\r\n configuration?: IOnFocusConfiguration;\r\n}\r\n\r\ndeclare global {\r\n interface Window {\r\n focusStatus: Record<string, unknown>;\r\n }\r\n}\r\n\r\ninterface IFocusCheck {\r\n currentInstruction: number;\r\n}\r\n\r\nexport const focus =\r\n typeof document !== 'undefined'\r\n ? new (class FocusController {\r\n #root: HTMLElement;\r\n\r\n #props: IFocusProps | undefined;\r\n\r\n constructor(root: HTMLElement, props?: IFocusProps) {\r\n this.#root = root;\r\n this.#props = props;\r\n\r\n getWindow().focusStatus = {};\r\n globalFocus.onFocus(() => {\r\n this.#resetInterval();\r\n });\r\n }\r\n\r\n afterNotificationFocus: IFocusQueryElement | undefined = undefined;\r\n\r\n #actualFocusQuery: IFocusQueryElement[] = [];\r\n\r\n #currentInstruction = 0;\r\n\r\n #focusDelay = 300;\r\n\r\n #focusRetries = 3;\r\n\r\n #focusTimeout = -1;\r\n\r\n #isIntervalRunning = false;\r\n\r\n set #focusQuery(value: IFocusQueryElement[]) {\r\n this.#actualFocusQuery = value;\r\n }\r\n\r\n get #focusQuery() {\r\n return new Proxy(this.#actualFocusQuery, {\r\n get: (target, key) => {\r\n if (key in target) {\r\n const prop = target[key as keyof typeof target];\r\n if (isFunction(prop))\r\n return (...props: unknown[]) => {\r\n const result = (\r\n target[key as keyof typeof target] as unknown as (\r\n ...methodProps: unknown[]\r\n ) => void\r\n ).bind(target, ...props)();\r\n return result;\r\n };\r\n return prop;\r\n }\r\n return undefined;\r\n },\r\n });\r\n }\r\n\r\n #checkInstruction(focusCheck: IFocusCheck) {\r\n return focusCheck.currentInstruction === this.#currentInstruction;\r\n }\r\n\r\n async #doFocus(\r\n HTMLElement: HTMLElement | TFocusRetriever,\r\n focusCheck: IFocusCheck,\r\n isLastTry: boolean,\r\n configuration?: IOnFocusConfiguration,\r\n ) {\r\n if (\r\n screenLocker.isLocked &&\r\n !configuration?.focusEvenWhenScreenLocked\r\n ) {\r\n return null;\r\n }\r\n const actualHTMLElement = isFunction(HTMLElement)\r\n ? HTMLElement(isLastTry)\r\n : HTMLElement;\r\n\r\n if (actualHTMLElement) {\r\n if ((actualHTMLElement as HTMLInputElement).disabled) return false;\r\n actualHTMLElement.focus();\r\n return new Promise<false | null | HTMLElement>((resolve) => {\r\n if (configuration?.dispatchCustomEvent !== false) {\r\n const customFocusEvent = new CustomEvent(customEvents.focus, {\r\n bubbles: true,\r\n });\r\n actualHTMLElement.dispatchEvent(customFocusEvent);\r\n }\r\n\r\n /**\r\n * Este setTimeout está colocado aquí para asegurarme de que se\r\n * propague correctamente el customEvent y los procesos de renderizado\r\n * asociados puedan ser ejecutados antes de proseguir con el proces de\r\n * foco.\r\n */\r\n setTimeout(() => {\r\n if (!this.#checkInstruction(focusCheck)) {\r\n resolve(false);\r\n return;\r\n }\r\n try {\r\n if (configuration?.scrollIntoViewOptions)\r\n actualHTMLElement?.scrollIntoView(\r\n configuration.scrollIntoViewOptions,\r\n );\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n setTimeout(() => {\r\n if (!this.#checkInstruction(focusCheck)) {\r\n resolve(false);\r\n } else if (document.activeElement?.tagName === 'IFRAME') {\r\n resolve(\r\n (\r\n document.activeElement as HTMLIFrameElement\r\n ).contentDocument?.contains(actualHTMLElement)\r\n ? actualHTMLElement\r\n : null,\r\n );\r\n } else\r\n resolve(\r\n document.activeElement === actualHTMLElement\r\n ? actualHTMLElement\r\n : null,\r\n );\r\n }, 0);\r\n }, 0);\r\n });\r\n }\r\n return actualHTMLElement;\r\n }\r\n\r\n #resetInterval() {\r\n clearTimeout(this.#focusTimeout);\r\n this.#focusTimeout = -1;\r\n this.#isIntervalRunning = false;\r\n this.#currentInstruction++;\r\n }\r\n\r\n async #runFocusInterval(\r\n focusElement?: IFocusQueryElement,\r\n internalCall?: boolean,\r\n ): Promise<false | HTMLElement> {\r\n if (\r\n !internalCall &&\r\n (this.#focusTimeout !== -1 || this.#isIntervalRunning)\r\n )\r\n return false;\r\n const currentInstruction: IFocusCheck = {\r\n currentInstruction: this.#currentInstruction,\r\n };\r\n this.#isIntervalRunning = true;\r\n return new Promise<false | HTMLElement>((resolve) => {\r\n const resolvePromise = async () => {\r\n const element = focusElement ?? this.#focusQuery.shift();\r\n\r\n if (element) {\r\n const hasFocused = await this.#doFocus(\r\n element.element,\r\n currentInstruction,\r\n element !== this.#focusQuery[0],\r\n element.configuration,\r\n );\r\n if (!this.#checkInstruction(currentInstruction)) {\r\n resolve(false);\r\n return;\r\n }\r\n if (hasFocused !== null && hasFocused !== false) {\r\n this.#actualFocusQuery = [];\r\n resolve(hasFocused);\r\n this.#isIntervalRunning = false;\r\n return;\r\n }\r\n if (hasFocused === false) {\r\n this.#actualFocusQuery = this.#actualFocusQuery.filter(\r\n (current) => current !== element,\r\n );\r\n }\r\n }\r\n\r\n if (!this.#checkInstruction(currentInstruction)) {\r\n resolve(false);\r\n return;\r\n }\r\n\r\n if (this.#actualFocusQuery.length > 0) {\r\n this.#focusTimeout = setTimeout(() => {\r\n const runInterval = async () => {\r\n const result = await this.#runFocusInterval(\r\n undefined,\r\n true,\r\n );\r\n resolve(result);\r\n this.#isIntervalRunning = true;\r\n };\r\n void runInterval();\r\n }, this.#focusDelay) as unknown as number;\r\n } else {\r\n const lastFocused = globalFocus.last(':not(body)');\r\n if (lastFocused) {\r\n const result = await this.#doFocus(\r\n lastFocused,\r\n currentInstruction,\r\n element !== this.#focusQuery[0],\r\n element?.configuration,\r\n );\r\n if (!this.#checkInstruction(currentInstruction)) {\r\n resolve(false);\r\n return;\r\n }\r\n if (result) resolve(result);\r\n else resolve(false);\r\n this.#isIntervalRunning = true;\r\n }\r\n resolve(false);\r\n this.#isIntervalRunning = true;\r\n }\r\n };\r\n void resolvePromise();\r\n });\r\n }\r\n\r\n /**\r\n * Da la instrucción de colocar el foco en el elemento provisto como\r\n * parámetro una vez que todas las notificaciones se hayan cerrado. En caso\r\n * de no existir notificaciones abiertas, hace foco en el elemento\r\n * directamente.\r\n */\r\n afterNotifications(\r\n element: HTMLElement | TFocusRetriever,\r\n configuration?: IOnFocusConfiguration,\r\n ) {\r\n if (!element) return;\r\n void this.on(element, configuration);\r\n }\r\n\r\n /**\r\n * Da la instrucción de colocar el foco en el elemento provisto como\r\n * parámetro luego de recargar la página.\r\n *\r\n * Los parámetros pasados serán ordenados en orden de importancia priorizando\r\n * en el siguiente orden:\r\n * - id\r\n * - name\r\n * - className\r\n * - selector\r\n */\r\n afterReload({\r\n className,\r\n id,\r\n name,\r\n selector,\r\n }: TRequireOnlyOne<{\r\n className: string;\r\n id: string;\r\n name: string;\r\n selector: string;\r\n }>) {\r\n persistentStorage.focusOnReload = [\r\n id ? `#${id}` : undefined,\r\n name ? `[name=\"${name}\"]` : undefined,\r\n className ? `.${className}` : undefined,\r\n selector,\r\n ]\r\n .filter((el) => el !== undefined)\r\n .join(',');\r\n }\r\n\r\n /**\r\n * Da la instrucción de colocar el foco el elemento pasado como parámetro.\r\n * Se puede pasar también una función que devuelva HTMLElement | false |\r\n * null.\r\n *\r\n * El segundo parámetro del método on es un objeto de tipo\r\n * ScrollIntoViewOptions, que permite modificar el comportamiento del scroll\r\n * a en el elemento.\r\n *\r\n * @see TFocusRetriever para más detalles sobre la función como parámetro.\r\n */\r\n async on(\r\n element: HTMLElement | TFocusRetriever,\r\n configuration?: IOnFocusConfiguration,\r\n ) {\r\n if (element) {\r\n const focusElement = {\r\n element,\r\n configuration,\r\n };\r\n for (let i = 0; i < this.#focusRetries; i++)\r\n this.#focusQuery.unshift(focusElement);\r\n\r\n this.#resetInterval();\r\n return this.#runFocusInterval(focusElement);\r\n }\r\n return false;\r\n }\r\n\r\n focusOnReload: string | null = null;\r\n\r\n restore() {\r\n void this.on(\r\n (globalFocus.last(':not(body), body#tinymce') as HTMLElement) ||\r\n (document.querySelector(focusSelector) as HTMLElement),\r\n );\r\n }\r\n\r\n init() {\r\n const modalsObserver = new MutationObserver((mutation) => {\r\n if (mutation[0].removedNodes.length === 0) return;\r\n this.afterNotifications(\r\n globalFocus.last(\r\n ':not(body):not(.notificationsView *), body#tinymce',\r\n ) as HTMLElement,\r\n );\r\n });\r\n const appModalsBox = (\r\n this.#props?.modalsContainerRetriever ??\r\n (() => this.#root.querySelector('#AppModals'))\r\n )();\r\n if (appModalsBox)\r\n modalsObserver.observe(appModalsBox, { childList: true });\r\n\r\n screenLocker.on('releaseForFirstTime', () => {\r\n if (persistentStorage.focusOnReload)\r\n this.focusOnReload = persistentStorage.focusOnReload as string;\r\n persistentStorage.focusOnReload = null;\r\n this.afterNotifications(() => {\r\n if (this.focusOnReload) {\r\n const initialFocusElement = document.querySelector(\r\n this.focusOnReload,\r\n );\r\n const scrollTop = noNaN(\r\n (\r\n window as unknown as Record<string, string>\r\n ).CURRENT_TAB?.split('~')[1],\r\n );\r\n if (document.scrollingElement)\r\n document.scrollingElement.scrollTop = scrollTop;\r\n return initialFocusElement as HTMLElement | null;\r\n }\r\n return false;\r\n });\r\n });\r\n }\r\n })(document.getElementById('root') as HTMLElement)\r\n : null;\r\n","import { useState } from 'react';\r\nimport { EventEmitter } from '../events/EventEmitter';\r\nimport { useMount } from '../hooks';\r\n\r\nexport type THistoryCount = {\r\n currentStep: number;\r\n stepCount: number;\r\n};\r\n\r\nexport type THistoryStep<T> = {\r\n content: T;\r\n} & THistoryCount;\r\n\r\nexport type THistoryStepChange<T> = THistoryCount &\r\n THistoryStep<T> & {\r\n fromPush?: boolean;\r\n hasPrevious: boolean;\r\n hasNext: boolean;\r\n };\r\n\r\nexport type THistoryConfiguration<T> = {\r\n initialContent?: T;\r\n maxLength: number;\r\n};\r\n\r\n/**\r\n * # Cómo usar el historial\r\n *\r\n * Es muy sencillo: se instancia con un callback que recibirá un método push\r\n * cada vez que una ventana se cierre. En esos momentos, el usuario del History\r\n * puede hacer push al estado.\r\n *\r\n * ## La mecánica\r\n *\r\n * - Instancio la clase y recibo el método push\r\n * - Cuando se realizan cambios significativos, llamo al método openWindow\r\n * - El método openWindow da una ventana de 350ms antes de llamar al callback\r\n * - Si durante esa ventana se vuelve a llamar a openWindow, la ventana se\r\n * resetea\r\n * - Si al llamar al callback, se hace push al estado, ese estado es propagado\r\n * mediante el hook y mediante el evento on('stepChange')\r\n * \r\n * ## Cómo escuchar cambios\r\n * \r\n * ```ts\r\n * this.history.on('stepChange', (data) => {\r\n if (!data.fromPush) this.update(data.content);\r\n });\r\n ```\r\n *\r\n * ## Back y forward\r\n *\r\n * El back y forward son dos métodos del history que hacen un stepChange y\r\n * emiten a través de on('stepChange') y el hook\r\n */\r\nexport class History<T> extends EventEmitter<{\r\n stepChange: THistoryStepChange<T>;\r\n}> {\r\n private autocloseTimeout = -1;\r\n private currentStep = 0;\r\n private content: T[] = [];\r\n private emitting = 0;\r\n protected enabled = true;\r\n private _isOpen = false;\r\n private timeoutMs = 350;\r\n private configuration: THistoryConfiguration<T>;\r\n\r\n constructor(\r\n onCloseWindow: (push: (newState: T) => void) => unknown,\r\n configuration?: Partial<THistoryConfiguration<T>>,\r\n ) {\r\n super();\r\n\r\n this.configuration = Object.assign({ maxLength: 15 }, configuration);\r\n if (configuration?.initialContent !== undefined) {\r\n this.content.push(configuration?.initialContent ?? (null as any));\r\n } else {\r\n this.currentStep = -1;\r\n }\r\n\r\n this.onCloseWindow = onCloseWindow;\r\n }\r\n\r\n private closeWindow = () => {\r\n if (this._isOpen) {\r\n this.onCloseWindow(this.push.bind(this));\r\n this._isOpen = false;\r\n }\r\n };\r\n\r\n private getEvent = () => {\r\n const stepCount = this.content.length - 1;\r\n const event = {\r\n content: this.content[this.currentStep],\r\n currentStep: this.currentStep,\r\n stepCount,\r\n hasNext: this.currentStep < stepCount,\r\n hasPrevious: this.currentStep > 0,\r\n };\r\n\r\n return event;\r\n };\r\n\r\n private onCloseWindow: (push: (newState: T) => void) => unknown;\r\n\r\n private push = (el: T) => {\r\n this.content = [...this.content.slice(0, this.currentStep + 1), el];\r\n this.content = this.content.slice(\r\n Math.max(\r\n 0,\r\n this.content.length - (this.configuration?.maxLength ?? Infinity),\r\n ),\r\n );\r\n this.currentStep = this.content.length - 1;\r\n this.shoutStepChange(true);\r\n };\r\n\r\n private shoutStepChange = (fromPush?: boolean) => {\r\n try {\r\n this.emit('stepChange', { ...this.getEvent(), fromPush });\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n };\r\n\r\n hooks = {\r\n useCountChange: (onChange: (ev: THistoryStepChange<T>) => unknown) => {\r\n useMount(() => {\r\n onChange(this.getEvent());\r\n\r\n this.on('stepChange', () => {\r\n onChange(this.getEvent());\r\n });\r\n });\r\n },\r\n };\r\n\r\n back = () => {\r\n clearTimeout(this.autocloseTimeout);\r\n if (this.currentStep > 0) {\r\n this.currentStep -= 1;\r\n this.shoutStepChange();\r\n }\r\n };\r\n\r\n disable = () => {\r\n this.enabled = false;\r\n };\r\n\r\n emit<K extends 'stepChange'>(\r\n eventName: K,\r\n params?: THistoryStepChange<T>,\r\n ): void {\r\n this.emitting++;\r\n\r\n try {\r\n super.emit(eventName, params as THistoryStepChange<T>);\r\n } finally {\r\n this.emitting--;\r\n }\r\n }\r\n\r\n enable = () => {\r\n this.enabled = true;\r\n };\r\n\r\n forward = () => {\r\n clearTimeout(this.autocloseTimeout);\r\n if (this.currentStep < this.content.length - 1) {\r\n this.currentStep += 1;\r\n this.shoutStepChange();\r\n }\r\n };\r\n\r\n getContent() {\r\n return this.content;\r\n }\r\n\r\n get isOpen() {\r\n return this._isOpen;\r\n }\r\n\r\n openWindow = () => {\r\n if (!this.enabled || this.emitting !== 0) return;\r\n\r\n this._isOpen = true;\r\n\r\n clearTimeout(this.autocloseTimeout);\r\n this.autocloseTimeout = setTimeout(() => {\r\n this.closeWindow();\r\n }, this.timeoutMs) as unknown as number;\r\n };\r\n\r\n reset = () => {\r\n clearTimeout(this.autocloseTimeout);\r\n this.content = [];\r\n this.currentStep = 0;\r\n this.openWindow();\r\n };\r\n\r\n async runInWindow(cb: () => Promise<void>) {\r\n await cb();\r\n this.onCloseWindow(this.push.bind(this));\r\n }\r\n\r\n updateConfig = (newConfiguration: Partial<THistoryConfiguration<T>>) => {\r\n this.configuration = { ...this.configuration, ...newConfiguration };\r\n };\r\n\r\n useStep = () => {\r\n const [hasPrevious, setHasPrevious] = useState<\r\n Pick<THistoryStepChange<T>, 'hasNext' | 'hasPrevious' | 'currentStep'>\r\n >({ hasNext: false, hasPrevious: false, currentStep: this.currentStep });\r\n\r\n useMount(() => {\r\n return this.on('stepChange', (ev) => {\r\n setHasPrevious({\r\n currentStep: ev.currentStep,\r\n hasNext: ev.hasNext,\r\n hasPrevious: ev.hasPrevious,\r\n });\r\n });\r\n });\r\n\r\n return hasPrevious;\r\n };\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { createContext } from 'react';\r\nimport { TId } from '../types';\r\n\r\nexport type TMethod<CR> = CR extends (state: any, ...args: infer Action) => any\r\n ? (id: TId, ...args: Action) => unknown\r\n : () => unknown;\r\n\r\nexport type TMethods<State extends TMap, K extends any[] = any[]> = Record<\r\n string,\r\n (setState: TStateManager<State>, ...args: K) => void\r\n>;\r\n\r\nexport type TMethodsMap<OriginalMethods extends TMethods<any>> = {\r\n [Name in keyof OriginalMethods]: TMethod<OriginalMethods[Name]>;\r\n};\r\n\r\nexport type TEventsMap<OriginalEvents extends TMap> = {\r\n [Name in keyof OriginalEvents]: (args: OriginalEvents[Name]) => unknown;\r\n};\r\n\r\nexport type TEventsHandlers<OriginalEvents extends TMap> = Record<\r\n TId,\r\n {\r\n [Name in keyof OriginalEvents]?: {\r\n cb: (args?: OriginalEvents[Name]) => unknown;\r\n uniqueHookId: string;\r\n }[];\r\n }\r\n>;\r\n\r\nexport type TMap = Record<string, any>;\r\n\r\nexport type TStateManager<State> = (newState: Partial<State>) => void;\r\n\r\nexport type TUseEvents<Events extends TMap> = (\r\n handlers: Partial<TEventsMap<Events>>,\r\n) => void;\r\n\r\nexport const ImperativeComponentContext = createContext<{\r\n id: TId;\r\n eventsStore: TEventsHandlers<any>;\r\n}>(\r\n {} as {\r\n id: TId;\r\n eventsStore: TEventsHandlers<any>;\r\n },\r\n);\r\n\r\nexport type TFireEvent<Events extends TMap> = <K extends keyof Events>(\r\n id: TId,\r\n ev: K,\r\n args: Events[K] extends void ? undefined : Events[K],\r\n) => void;\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable @typescript-eslint/no-unsafe-argument */\r\nimport { FC, useMemo, useState } from 'react';\r\nimport {\r\n TMap,\r\n TMethods,\r\n TMethodsMap,\r\n TFireEvent,\r\n TStateManager,\r\n TMethod,\r\n TEventsHandlers,\r\n ImperativeComponentContext,\r\n} from './types';\r\nimport { TId } from '../types';\r\n\r\n/**\r\n * Permite la creación de componentes multi-instancia que ofrecen métodos para\r\n * trabajar sobre su estado o su comportamiento interno.\r\n * \r\n * @example\r\n * const [methods, events, Imperative] = makeImperativeComponent<\r\n {\r\n age: number;\r\n },\r\n { blink: number }\r\n >()(\r\n {} as {\r\n name: string;\r\n },\r\n {\r\n setName(setState, name: string) {\r\n setState({ name });\r\n },\r\n },\r\n ({ age, name, useEvents }) => {\r\n const [isBlinking, setIsBlinking] = useState(false);\r\n\r\n useEvents({\r\n blink() {\r\n setInterval(() => setIsBlinking((current) => !current), 300);\r\n },\r\n });\r\n\r\n return (\r\n <Box sx={{ background: isBlinking ? 'red' : undefined }}>\r\n {age} {name}\r\n </Box>\r\n );\r\n },\r\n );\r\n\r\n methods\r\n */\r\nexport default function makeImperativeComponent<\r\n ComponentProps extends TMap,\r\n Events extends TMap = TMap,\r\n>() {\r\n return function ImperativeComponent<\r\n State extends TMap,\r\n Methods extends TMethods<State>,\r\n >({\r\n Component,\r\n initialState,\r\n methods,\r\n }: {\r\n initialState?: State;\r\n methods?: Methods;\r\n Component: FC<Omit<ComponentProps, 'id'> & State>;\r\n }): [\r\n TMethodsMap<Methods>,\r\n TFireEvent<Events>,\r\n FC<ComponentProps & { id: TId }>,\r\n ] {\r\n /**\r\n * State methods\r\n */\r\n\r\n const setStates: Record<string, TStateManager<State>> = {};\r\n const actualMethods: TMethodsMap<Methods> = {} as TMethodsMap<Methods>;\r\n Object.entries(methods ?? {}).forEach(([key, method]) => {\r\n actualMethods[key as keyof Methods] = ((id, ...args: any) => {\r\n if (setStates[id]) {\r\n method(setStates[id], ...args);\r\n return true;\r\n } else {\r\n /* console.warn(\r\n `No setState found with id ${id}. Maybe the component was not mounted yet`,\r\n ); */\r\n return false;\r\n }\r\n }) as TMethod<Methods[keyof Methods]>;\r\n });\r\n\r\n /**\r\n * Events\r\n */\r\n const eventsHandlers: TEventsHandlers<Events> = {};\r\n\r\n const fireEvent: TFireEvent<Events> = <K extends keyof Events>(\r\n id: TId,\r\n ev: K,\r\n args?: Events[K],\r\n ) => {\r\n if (eventsHandlers[id]) {\r\n eventsHandlers[id]?.[ev]?.forEach((current) => current.cb(args));\r\n return true;\r\n } else {\r\n /* console.warn(`The requested id does not exist: ${id}`); */ return false;\r\n }\r\n };\r\n\r\n /**\r\n * Component\r\n */\r\n\r\n const ActualComponent: FC<ComponentProps & { id: TId }> = ({\r\n id,\r\n ...props\r\n }) => {\r\n const [state, innerSetState] = useState(initialState as State);\r\n\r\n setStates[id] = (newState) =>\r\n innerSetState((current) => ({ ...current, ...newState }));\r\n\r\n return (\r\n <ImperativeComponentContext.Provider\r\n value={useMemo(() => ({ id, eventsStore: eventsHandlers }), [id])}\r\n >\r\n <Component {...props} {...state} />\r\n </ImperativeComponentContext.Provider>\r\n );\r\n };\r\n\r\n return [actualMethods, fireEvent, ActualComponent];\r\n };\r\n}\r\n","/* eslint-disable @typescript-eslint/no-unsafe-argument */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { FC } from 'react';\r\nimport uniqueId from 'lodash-es/uniqueId';\r\nimport { TMap, TMethods, TMethodsMap } from './types';\r\nimport makeImperativeComponent from './makeImperativeComponent';\r\nimport { TId } from '../types';\r\n\r\ntype TSingleMethodsMap<\r\n Methods extends TMethods<any>,\r\n MethodsMap extends TMethodsMap<Methods>,\r\n> = {\r\n [Name in keyof MethodsMap]: MethodsMap[Name] extends (\r\n id: TId,\r\n ...args: infer Action\r\n ) => unknown\r\n ? (...args: Action) => unknown\r\n : never;\r\n};\r\n\r\nexport default function makeSingleImperativeComponent<\r\n ComponentProps extends TMap,\r\n Events extends TMap = TMap,\r\n>() {\r\n return function SingleImperativeComponent<\r\n State extends TMap,\r\n Methods extends TMethods<State>,\r\n >({\r\n initialState,\r\n methods,\r\n Component,\r\n }: {\r\n initialState?: State;\r\n methods?: Methods;\r\n Component: FC<Omit<ComponentProps, 'id'> & State>;\r\n }): [\r\n TSingleMethodsMap<Methods, TMethodsMap<Methods>>,\r\n <K extends keyof Events>(ev: K, args: Events[K]) => void,\r\n FC<ComponentProps>,\r\n ] {\r\n const id = uniqueId();\r\n\r\n const [actualMethods, originalFireEvent, ImperativeComponent] =\r\n makeImperativeComponent<ComponentProps, Events>()({\r\n initialState,\r\n methods,\r\n Component,\r\n });\r\n\r\n const fireEvent: <K extends keyof Events>(\r\n ev: K,\r\n args: Events[K],\r\n ) => void = (ev, args) => originalFireEvent(id, ev, args);\r\n\r\n const newMethods: TSingleMethodsMap<\r\n Methods,\r\n TMethodsMap<Methods>\r\n > = {} as TSingleMethodsMap<Methods, TMethodsMap<Methods>>;\r\n\r\n Object.entries(actualMethods).forEach(([name, method]) => {\r\n (newMethods[name as keyof typeof newMethods] as any) = (...args: any) =>\r\n (method as (id: TId, ...args: any) => unknown)(id, ...args);\r\n });\r\n\r\n return [\r\n newMethods,\r\n fireEvent,\r\n (props: ComponentProps) => <ImperativeComponent {...props} id={id} />,\r\n ];\r\n };\r\n}\r\n","import { useContext } from 'react';\r\nimport { ImperativeComponentContext, TEventsHandlers, TMap } from './types';\r\nimport { TId } from '../types';\r\n\r\n/**\r\n * Permite el uso de eventos en herederos directos o no del imperativeComponent\r\n * más cercano.\r\n */\r\nexport default function useImperativeComponentContext<\r\n Events extends TMap = TMap,\r\n>() {\r\n const context = useContext(ImperativeComponentContext) as {\r\n id: TId;\r\n eventsStore: TEventsHandlers<Events>;\r\n };\r\n\r\n return context;\r\n}\r\n","/* eslint-disable @typescript-eslint/no-unsafe-argument */\r\nimport { useCallback, useEffect, useMemo, useRef } from 'react';\r\nimport { TEventsMap, TMap } from './types';\r\nimport useImperativeComponentContext from './useImperativeIdentifierContext';\r\nimport uniqueId from 'lodash-es/uniqueId';\r\n\r\nconst useImperativeComponentEvents = <Events extends TMap = TMap>(\r\n handlers: Partial<TEventsMap<Events>>,\r\n) => {\r\n const uniqueHookId = useMemo(() => uniqueId('hook'), []);\r\n\r\n const { id, eventsStore } = useImperativeComponentContext<Events>();\r\n const hasRegistered = useRef(false);\r\n\r\n const registerEvents = useCallback(() => {\r\n Object.entries(handlers).forEach(([name, callback]) => {\r\n if (!eventsStore[id]) eventsStore[id] = {};\r\n if (!eventsStore[id][name])\r\n eventsStore[id][name as keyof (typeof eventsStore)[typeof id]] = [];\r\n\r\n eventsStore[id][name as keyof (typeof eventsStore)[typeof id]]?.push({\r\n cb: callback as (args?: Events[keyof Events] | undefined) => unknown,\r\n uniqueHookId: uniqueHookId,\r\n });\r\n });\r\n }, [eventsStore, handlers, id, uniqueHookId]);\r\n\r\n useEffect(() => {\r\n registerEvents();\r\n return () => {\r\n hasRegistered.current = false;\r\n Object.entries(handlers).forEach(([name]) => {\r\n eventsStore[id][name as keyof (typeof eventsStore)[typeof id]] = (\r\n eventsStore[id][name as keyof (typeof eventsStore)[typeof id]] ?? []\r\n ).filter((current) => current.uniqueHookId !== uniqueHookId);\r\n });\r\n };\r\n }, [eventsStore, handlers, id, registerEvents, uniqueHookId]);\r\n\r\n return uniqueHookId;\r\n};\r\n\r\nexport default useImperativeComponentEvents;\r\n","/**\r\n * Da formato a un mensaje con tokens incrustados.\r\n *\r\n * @example\r\n *\r\n * // Dado el siguiente mensaje:\r\n * var msg = 'El campo <TOK1> es inválido.';\r\n *\r\n * console.log(formatMessage(msg, {\r\n * TOK1: 'nombre',\r\n * }));\r\n * // Imprime: El campo nombre es inválido.\r\n */\r\nexport const formatMessage = (\r\n str: string,\r\n obj: { [key: string]: string },\r\n): string => {\r\n let newStr = str;\r\n Object.entries(obj).forEach(([key, value]) => {\r\n const placeHolder = `<${key}>`;\r\n\r\n if (newStr?.includes(placeHolder)) {\r\n newStr = newStr.replace(placeHolder, value ?? '');\r\n }\r\n });\r\n return newStr;\r\n};\r\n","import { formatMessage } from './formatMessage';\r\n\r\nexport interface ILabelsContainer {\r\n labels: {\r\n [key: string]: {\r\n text: string;\r\n title: string;\r\n };\r\n };\r\n}\r\n\r\n/**\r\n * Dado un nombre de etiqueta, devuelve el texto que esa etiqueta contiene en\r\n * el idioma actual. En este momento, lo único que hace realmente esta función\r\n * es devolver la variable del window con el mismo nombre que se está\r\n * pidiendo.\r\n *\r\n * La idea de implementar esta función, es que en un futuro la fuente de la\r\n * que provienen las labels pueda ser más diversa.\r\n *\r\n * Permite el pasaje de tokens para el reemplazo automático de los mismos.\r\n *\r\n * @param outerWindow - En librerías que puedan trabajar tanto en Browser como en Node es requerido pasar el window como parámetro para evitar que la función vaya directamente al window.\r\n *\r\n *\r\n * @example\r\n *\r\n * // Suponemos la etiqueta msgUsu = { text: 'Usuario <TOK1>', title: 'Usuario <TOK1>' }\r\n *\r\n * getLabel('msgUsu' , {\r\n * text: {\r\n * TOK1: 'admin',\r\n * },\r\n * title: {\r\n * TOK1: 'no disponible',\r\n * }\r\n * })\r\n */\r\nexport function getLabel(\r\n name: string,\r\n replaceTokens?: {\r\n text?: Record<string, string>;\r\n title?: Record<string, string>;\r\n },\r\n outerWindow?: any,\r\n) {\r\n const actualWindow = outerWindow ?? window;\r\n const label = {\r\n ...((actualWindow as unknown as ILabelsContainer).labels[name] ?? {\r\n text: `${name}`,\r\n title: `${name}`,\r\n }),\r\n };\r\n\r\n if (replaceTokens?.text !== undefined)\r\n label.text = formatMessage(label.text, replaceTokens.text);\r\n if (replaceTokens?.title !== undefined)\r\n label.title = formatMessage(label.title, replaceTokens.title);\r\n\r\n return label;\r\n}\r\n","/**\r\n * Este método itera sobre un objeto hasta encontrar la ruta especificada\r\n *\r\n * @example\r\n *\r\n const obj = {\r\n a: {\r\n b: {\r\n c: {\r\n d: \"d\"\r\n }\r\n }\r\n }\r\n };\r\n\r\n console.log(getValueByPath(obj,'a.b.c')) // { d: 'd' }\r\n console.log(getValueByPath(obj,'a.b.c.d')) // 'd'\r\n *\r\n */\r\nexport function getValueByPath<T>(\r\n obj: object,\r\n path: string | string[],\r\n separator = '.',\r\n): T | undefined {\r\n const actualPath = typeof path === 'string' ? path.split(separator) : path;\r\n if (typeof obj !== 'object' || !obj) {\r\n if (actualPath.length === 0) return obj as T;\r\n return undefined;\r\n }\r\n const currentStep = actualPath.shift() as string;\r\n if (actualPath.length === 0) return (obj as any)[currentStep] as T;\r\n return getValueByPath(\r\n (obj as any)[currentStep] as object,\r\n actualPath,\r\n separator,\r\n );\r\n}\r\n","import clone from 'lodash-es/clone';\r\n\r\n/**\r\n * Permite escribir una propiedad en un objeto, en una ruta especificada. Si\r\n * dicha ruta no existe dentro del objeto la crea, siempre que sea posible. No\r\n * será posible en caso de que alguno de los elementos de la ruta contenga una\r\n * propiedad que no sea de tipo objeto.\r\n *\r\n * @param obj El objeto donde se desea escribir la propiedad\r\n * @param path La ruta en la que se va a escribir\r\n * @param value El valor que se va a escribir en la ruta especificada\r\n * @returns Un objeto idéntico del recibido pero co nlos cambios aplicados\r\n *\r\n * @throws { Error } En caso de que la ruta especificada contenga algún elemento que no puede ser escrito.\r\n *\r\n * @example\r\n *\r\n * const a = {\r\n * a: {}\r\n * };\r\n *\r\n * setValueByPath(a, 'a.b.c', 'Hello world');\r\n * /* Outputs:\r\n * {\r\n * a: {\r\n * b: {\r\n * c: 'Hello world'\r\n * }\r\n * }\r\n * }\r\n */\r\nexport function setValueByPath<T extends object>(\r\n obj: T,\r\n path: string,\r\n value: unknown,\r\n): T | null {\r\n if (path === '') return value as T;\r\n\r\n const steps = path.split('.');\r\n if (steps.length === 0) {\r\n console.warn(`An empty path was provoided ${path}`);\r\n return null;\r\n }\r\n const originalClonedObject = clone(obj ?? {});\r\n let currentObj = originalClonedObject;\r\n for (let i = 0; i < steps.length - 1; i++) {\r\n if (!(currentObj as any)[steps[i]]) (currentObj as any)[steps[i]] = {};\r\n if (typeof (currentObj as any)[steps[i]] === 'object') {\r\n currentObj = (currentObj as any)[steps[i]];\r\n } else {\r\n console.info({\r\n originalObject: obj,\r\n originalPath: path,\r\n currentObj,\r\n currentStep: steps[i],\r\n });\r\n throw new Error(\r\n `The provided path ${path} cannot be applied due to it is not an object's path.`,\r\n );\r\n }\r\n }\r\n (currentObj as any)[steps.pop() as string] = value;\r\n return originalClonedObject as T;\r\n}\r\n","export function cloneDeep<T>(o: T): T {\r\n if (typeof o === 'object' && o) {\r\n if (Array.isArray(o)) {\r\n return o.map((c) => cloneDeep(c)) as T;\r\n }\r\n return Object.fromEntries(\r\n Object.entries(o as Record<string, any>).map(([key, value]) => [\r\n key,\r\n cloneDeep(value),\r\n ]),\r\n ) as T;\r\n }\r\n\r\n return o;\r\n}\r\n","export type DeepReadonly<T> = Readonly<\r\n T extends object\r\n ? {\r\n [K in keyof T]: Readonly<DeepReadonly<T[K]>>;\r\n }\r\n : T\r\n>;\r\n\r\nexport function freezeDeep<T>(o: T): DeepReadonly<T> {\r\n if (typeof o === 'object' && o) {\r\n if (Array.isArray(o)) {\r\n return Object.freeze(\r\n o.map((c) => freezeDeep(c)),\r\n ) as unknown as DeepReadonly<T>;\r\n }\r\n return Object.freeze(\r\n Object.fromEntries(\r\n Object.entries(o as Record<string, any>).map(([key, value]) => [\r\n key,\r\n freezeDeep(value),\r\n ]),\r\n ),\r\n ) as DeepReadonly<T>;\r\n }\r\n\r\n return (typeof o === 'object' && o ? Object.freeze(o) : o) as DeepReadonly<T>;\r\n}\r\n","/* eslint-disable @typescript-eslint/no-dynamic-delete */\r\nimport cloneDeep from 'lodash-es/cloneDeep';\r\nimport {\r\n TProperties,\r\n TPropsSuscriptor,\r\n TUpdateFieldConfiguration,\r\n} from './types';\r\nimport { debugDispatcher } from '../debug';\r\nimport { TId } from '../types';\r\nimport { persistentStorage } from '../storage';\r\n\r\nconst propsLog = 'propsLog';\r\nexport const PropsSelectorUndefinedObject = {};\r\n\r\ninterface IPropsStoreConf {\r\n logCommands: {\r\n propsStore?: string;\r\n updateProp?: string;\r\n propsSuscriptors?: string;\r\n propsLog?: string;\r\n };\r\n}\r\n\r\nexport class PropsStore<\r\n PropsType extends Record<TId, unknown> = Record<TId, unknown>,\r\n> {\r\n log = persistentStorage[propsLog];\r\n\r\n fields: Record<TId, PropsType> = {};\r\n\r\n suscriptors: Record<TId, TPropsSuscriptor<PropsType>[]> = {};\r\n\r\n loggers: Record<string, (props: unknown[]) => void> = {\r\n propsLog: ([log]) => {\r\n this.log = log;\r\n persistentStorage[propsLog] = log;\r\n },\r\n propsStore: ([fieldId]) => {\r\n if (fieldId) console.info(this.fields[fieldId as TId]);\r\n else console.info(this.fields);\r\n },\r\n propsSuscriptors: ([fieldId]) => {\r\n if (fieldId) console.info(this.suscriptors[fieldId as TId]);\r\n else console.info(this.suscriptors);\r\n },\r\n updateProp: ([fieldId, newProps]) => {\r\n this.updateField(fieldId as TId, newProps as PropsType);\r\n },\r\n };\r\n\r\n constructor(private configuration?: IPropsStoreConf) {\r\n if (this.configuration) {\r\n if (this.configuration.logCommands.propsStore)\r\n debugDispatcher.on(\r\n this.configuration.logCommands.propsStore,\r\n this.loggers.propsStore,\r\n 'Muestra el contenido actual del propsStore',\r\n );\r\n if (this.configuration.logCommands.updateProp)\r\n debugDispatcher.on(\r\n this.configuration.logCommands.updateProp,\r\n this.loggers.updateProp,\r\n 'dd.updateProp(fieldId, newProps). El objeto newProps será mergeado sobre las props actuales',\r\n );\r\n if (this.configuration.logCommands.propsSuscriptors)\r\n debugDispatcher.on(\r\n this.configuration.logCommands.propsSuscriptors,\r\n this.loggers.propsSuscriptors,\r\n 'Muestra los suscriptores actuales del propsStore',\r\n );\r\n if (this.configuration.logCommands.propsLog)\r\n debugDispatcher.on(\r\n this.configuration.logCommands.propsLog,\r\n this.loggers.propsLog,\r\n 'Si se pasa como true, hace log de las acciones. Si se pasa como trace(fieldId), se hace log de todas las acciones y trace del campo especificado. Si se pasa trace(), hace log y trace de todas las acciones.',\r\n );\r\n }\r\n }\r\n\r\n destructor() {\r\n if (this.configuration) {\r\n if (this.configuration.logCommands.propsStore)\r\n debugDispatcher.off(\r\n this.configuration.logCommands.propsStore,\r\n this.loggers.propsStore,\r\n );\r\n if (this.configuration.logCommands.updateProp)\r\n debugDispatcher.off(\r\n this.configuration.logCommands.updateProp,\r\n this.loggers.updateProp,\r\n );\r\n if (this.configuration.logCommands.propsSuscriptors)\r\n debugDispatcher.off(\r\n this.configuration.logCommands.propsSuscriptors,\r\n this.loggers.propsSuscriptors,\r\n );\r\n if (this.configuration.logCommands.propsLog)\r\n debugDispatcher.off(\r\n this.configuration.logCommands.propsLog,\r\n this.loggers.propsLog,\r\n );\r\n }\r\n }\r\n\r\n getAllFields() {\r\n return cloneDeep(this.fields);\r\n }\r\n\r\n /**\r\n * Devuelve los props actuales de un campo.\r\n */\r\n getFieldProps<ParsedPropsType = PropsType>(fieldId: TId) {\r\n return this.fields[fieldId] as unknown as ParsedPropsType;\r\n }\r\n\r\n removeField(fieldId: TId) {\r\n this.suscriptors[fieldId] = [];\r\n delete this.fields[fieldId];\r\n if (this.log) console.info(`propsStore: removeNode ${fieldId}`);\r\n }\r\n\r\n /**\r\n * Permite establecer un suscriptor que será llamado\r\n * cada vez que las props del campo especificado cambien.\r\n */\r\n suscribe(fieldId: TId, callback: TPropsSuscriptor<PropsType>) {\r\n if (!this.suscriptors[fieldId]) this.suscriptors[fieldId] = [];\r\n\r\n this.suscriptors[fieldId].push(callback);\r\n\r\n callback(this.fields[fieldId] ?? PropsSelectorUndefinedObject);\r\n\r\n return () => {\r\n this.suscriptors[fieldId] = this.suscriptors[fieldId].filter(\r\n (current) => {\r\n return current !== callback;\r\n },\r\n );\r\n };\r\n }\r\n\r\n /**\r\n * Actualiza o crea las props de un campo.\r\n *\r\n * La tercera prop está relacionada\r\n */\r\n updateField<NewPropsType extends Record<TId, unknown> = Partial<PropsType>>(\r\n fieldId: TId,\r\n props: Partial<NewPropsType>,\r\n conf?: TUpdateFieldConfiguration,\r\n ) {\r\n if (fieldId === undefined) return;\r\n\r\n const { noEmit, isUrgent } = conf ?? {};\r\n const newProps = { ...this.fields[fieldId], ...props };\r\n this.fields[fieldId] = newProps;\r\n\r\n if (this.log === true || this.log === fieldId)\r\n console.info({ fieldId, props });\r\n if (this.log === 'trace') console.trace();\r\n else {\r\n const logId =\r\n typeof this.log === 'string' &&\r\n (this.log.match(/trace\\(([^)]+)\\)/) ?? [])[1];\r\n if (fieldId === logId) console.trace();\r\n }\r\n\r\n if (!noEmit) {\r\n this.suscriptors[fieldId]?.forEach((current) => {\r\n return current(newProps, isUrgent);\r\n });\r\n this.suscriptors.any?.forEach((current) => {\r\n return current({ ...newProps, fieldId }, isUrgent);\r\n });\r\n }\r\n }\r\n}\r\n\r\nexport const propsStore = new PropsStore<TProperties>({\r\n logCommands: {\r\n propsLog: 'propsLog',\r\n propsStore: 'propsStore',\r\n propsSuscriptors: 'propsSuscriptors',\r\n updateProp: 'updateProp',\r\n },\r\n});\r\n","import React, { useRef } from 'react';\r\nimport {\r\n PropsSelectorUndefinedObject,\r\n propsStore,\r\n PropsStore,\r\n} from './propsStore';\r\nimport {\r\n TProperties,\r\n TPropsComparator,\r\n TPropsConfiguration,\r\n TPropsSelector,\r\n} from './types';\r\nimport { TId } from '../types';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nconst defaultComparator: TPropsComparator<any> = (a, b) => {\r\n return a === b;\r\n};\r\nfunction getDefaultSelector<Selected, PropsType = TProperties>() {\r\n return (current: PropsType) => {\r\n return current as unknown as Selected;\r\n };\r\n}\r\n\r\nexport function isPropsConfigurationObject<\r\n Selected,\r\n PropsType extends Record<string, unknown> = TProperties,\r\n>(\r\n value?:\r\n | TPropsSelector<Selected, PropsType>\r\n | TPropsConfiguration<Selected, PropsType>,\r\n): value is TPropsConfiguration<Selected, PropsType> {\r\n return (\r\n typeof value === 'object' &&\r\n value &&\r\n ('selector' in value || 'comparator' in value || 'initialValue' in value)\r\n );\r\n}\r\n\r\n/**\r\n *\r\n * Este hook permite escuchar los cambios en las propiedades\r\n * de un campo en particular.\r\n *\r\n * @param configuration\r\n * Este objeto permite pasar las siguientes propiedades para ser\r\n * determinar el comportamiento del hook:\r\n *\r\n * **selector:** La función selectora es una función equivalente\r\n * a la que se utiliza en el useAppSelector de redux. Con ella\r\n * se puede seleccionar una porción de las props, evitando\r\n * re-renderizados innecesarios. Esto se debe a que el renderizado\r\n * solamente ocurrirá cuando la función selectora devuelva un valor\r\n * que sea distinto del anterior.\r\n *\r\n * El concepto de distinto es: si existe una función comparadora,\r\n * se determinará mediante la ejecución de dicha función, a la que\r\n * se le pasan como parámetros el objeto anterior y el nuevo.\r\n *\r\n * En caso de que no haya función comparadora, se comparará que\r\n * las props seleccionadas y las nuevas sean exactamente las mismas\r\n * (la referencia al mismo objeto).\r\n *\r\n * **comparator:** La función comparadora de la que estamos\r\n * hablando.\r\n *\r\n * **initialValue:** Un valor para setearlo al inicio, el mismo\r\n * solamente será seteado en caso de que ya no exista un valor\r\n * en el store.\r\n * @returns\r\n */\r\nexport function usePropsSelector<\r\n Selected = TProperties,\r\n PropsType extends Record<string, unknown> = TProperties,\r\n>(\r\n fieldId: TId,\r\n configuration?: TPropsConfiguration<Selected, PropsType>,\r\n): Selected;\r\n/**\r\n *\r\n * Este hook permite escuchar los cambios en las propiedades\r\n * de un campo en particular.\r\n *\r\n * @param selector La función selectora es una función equivalente\r\n * a la que se utiliza en el useAppSelector de redux. Con ella\r\n * se puede seleccionar una porción de las props, evitando\r\n * re-renderizados innecesarios. Esto se debe a que el renderizado\r\n * solamente ocurrirá cuando la función selectora devuelva un valor\r\n * que sea distinto del anterior.\r\n *\r\n * El concepto de distinto es: si existe una función comparadora,\r\n * se determinará mediante la ejecución de dicha función, a la que\r\n * se le pasan como parámetros el objeto anterior y el nuevo.\r\n *\r\n * En caso de que no haya función comparadora, se comparará que\r\n * las props seleccionadas y las nuevas sean exactamente las mismas\r\n * (la referencia al mismo objeto).\r\n *\r\n * @param comparator La función comparadora de la que estamos\r\n * hablando.\r\n *\r\n * @returns\r\n */\r\nexport function usePropsSelector<\r\n Selected = TProperties,\r\n PropsType extends Record<string, unknown> = TProperties,\r\n>(\r\n fieldId: TId,\r\n selector?:\r\n | TPropsSelector<Selected, PropsType>\r\n | TPropsConfiguration<Selected, PropsType>,\r\n comparator?: TPropsComparator<Selected>,\r\n anotherPropsStore?: PropsStore<PropsType>,\r\n): Selected;\r\nexport function usePropsSelector<\r\n Selected = TProperties,\r\n PropsType extends Record<string, unknown> = TProperties,\r\n>(\r\n fieldId: TId,\r\n par1?:\r\n | TPropsSelector<Selected, PropsType>\r\n | TPropsConfiguration<Selected, PropsType>,\r\n par2?: TPropsComparator<Selected>,\r\n par3?: PropsStore<PropsType>,\r\n): Selected {\r\n const selector = React.useMemo(\r\n () => {\r\n return isPropsConfigurationObject(par1) ? par1.selector : par1;\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [],\r\n );\r\n const comparator = React.useMemo(\r\n () => {\r\n return isPropsConfigurationObject(par1) ? par1.comparator : par2;\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [],\r\n );\r\n const initialValue = React.useMemo(\r\n () => {\r\n return isPropsConfigurationObject(par1) ? par1.initialValue : undefined;\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [],\r\n );\r\n const actualPropsStore = React.useMemo(\r\n () => {\r\n return (\r\n par3 ??\r\n (isPropsConfigurationObject(par1) ? par1.propsStore : propsStore) ??\r\n propsStore\r\n );\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n par3 ??\r\n (isPropsConfigurationObject(par1) ? par1.propsStore : propsStore) ??\r\n propsStore,\r\n ],\r\n );\r\n\r\n const getCurrentProps = React.useCallback(() => {\r\n const currentProps = actualPropsStore.getFieldProps<PropsType>(fieldId);\r\n const willSetInitialValue =\r\n currentProps !== undefined && initialValue !== undefined;\r\n if (willSetInitialValue) {\r\n actualPropsStore.updateField(\r\n fieldId,\r\n initialValue as unknown as TProperties,\r\n );\r\n }\r\n return (selector ?? getDefaultSelector())(\r\n currentProps ?? (PropsSelectorUndefinedObject as PropsType),\r\n );\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n const [props, setProps] = React.useState<Selected>(getCurrentProps);\r\n\r\n const prevProps = useRef(props);\r\n const prevFieldId = useRef(fieldId);\r\n\r\n React.useEffect(() => {\r\n const unsuscribe = actualPropsStore.suscribe(\r\n fieldId,\r\n (newProps, isUrgent) => {\r\n const newSelectedProps = (selector ?? getDefaultSelector())(\r\n newProps as unknown as PropsType,\r\n );\r\n\r\n if (\r\n !(comparator ?? defaultComparator)(\r\n prevProps.current,\r\n newSelectedProps,\r\n ) ||\r\n prevFieldId.current !== fieldId\r\n ) {\r\n if (isUrgent) setProps(newSelectedProps);\r\n else\r\n React.startTransition(() => {\r\n setProps(newSelectedProps);\r\n });\r\n }\r\n prevProps.current = newSelectedProps;\r\n },\r\n );\r\n\r\n return () => {\r\n unsuscribe();\r\n };\r\n }, [fieldId, actualPropsStore, selector, comparator]);\r\n\r\n return props;\r\n}\r\n","import React, { HTMLAttributes, HTMLProps } from 'react';\r\n\r\nfunction assignProps<T extends HTMLProps<HTMLElement>>(\r\n el: HTMLElement,\r\n { style, ...props }: T,\r\n) {\r\n if (style) {\r\n Object.entries(style).forEach(([name, value]) => {\r\n // eslint-disable-next-line no-param-reassign, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment\r\n (el as any).style[name] = value;\r\n });\r\n }\r\n Object.assign(el, props);\r\n}\r\n\r\n/**\r\n * El hook useDomState permite aplicar propiedades a un\r\n * elemento del DOM de la forma más eficiente posible.\r\n *\r\n * Este hook no permite el uso de sx ya que por las características\r\n * del sx, el re-renderizado es necesario.\r\n *\r\n * @example\r\n *\r\n *\r\n * const TestComponent = () => {\r\n const { domProps, setDomProps } = useDomState<BoxProps>({\r\n style: {\r\n position: 'fixed',\r\n left: 0,\r\n top: 0,\r\n width: '150px',\r\n height: '150px',\r\n backgroundColor: '#ccc',\r\n },\r\n });\r\n const initialPosition = React.useRef({ boxX: 0, boxY: 0, x: 0, y: 0 });\r\n const isDragging = React.useRef(false);\r\n const [state, setState] = React.useState(1);\r\n\r\n React.useEffect(() => {\r\n const move = (ev: MouseEvent) => {\r\n if (isDragging.current) {\r\n const moveX = ev.clientX - initialPosition.current.x;\r\n const moveY = ev.clientY - initialPosition.current.y;\r\n const newLeft = initialPosition.current.boxX + moveX;\r\n const newTop = initialPosition.current.boxY + moveY;\r\n setDomProps({\r\n style: {\r\n left: `${newLeft}px`,\r\n top: `${newTop}px`,\r\n },\r\n });\r\n }\r\n };\r\n\r\n const removeSuscription = () => {\r\n isDragging.current = false;\r\n };\r\n\r\n document.addEventListener('mousemove', move);\r\n document.addEventListener('mouseup', removeSuscription);\r\n\r\n return () => {\r\n document.removeEventListener('mousemove', move);\r\n document.removeEventListener('mouseup', removeSuscription);\r\n };\r\n }, [setDomProps]);\r\n\r\n return (\r\n <Box\r\n {...domProps}\r\n onMouseDown={(ev) => {\r\n initialPosition.current = {\r\n boxX: Number.parseInt(domProps.style?.left as string, 10),\r\n boxY: Number.parseInt(domProps.style?.top as string, 10),\r\n x: ev.clientX,\r\n y: ev.clientY,\r\n };\r\n isDragging.current = true;\r\n }}\r\n >\r\n Esta caja es arrastrable. Renderizados: {state}\r\n <Button onClick={() => setState((current) => current + 1)}>\r\n Renderizar\r\n </Button>\r\n </Box>\r\n );\r\n};\r\n */\r\nexport function useDomState<T extends HTMLAttributes<HTMLElement>>(\r\n initialDomProps?: T,\r\n) {\r\n const domProps = React.useRef<T & { ref: (el: HTMLElement) => void }>({\r\n ...(initialDomProps ?? ({} as T)),\r\n ref: React.useCallback((el: HTMLElement) => {\r\n ref.current = el;\r\n assignProps(ref.current, domProps.current);\r\n }, []),\r\n });\r\n const ref = React.useRef<HTMLElement | null>(null);\r\n return {\r\n domProps: domProps.current,\r\n setDomProps: React.useCallback(({ style, ...newDomProps }: Partial<T>) => {\r\n if (style) {\r\n const newStyles = { ...domProps.current.style, ...style };\r\n domProps.current.style = newStyles;\r\n }\r\n Object.assign(domProps.current, newDomProps);\r\n if (ref.current) assignProps(ref.current, domProps.current);\r\n }, []),\r\n };\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { SetStateAction, useCallback, useRef } from 'react';\r\nimport { useState } from 'react';\r\n\r\n/**\r\n * Permite manejar un estado que se actualizará únicamente siguiendo el\r\n * comportamiento esperado de un debounce\r\n */\r\nexport function useDebouncedState<T>(\r\n timeout: number,\r\n initialState?: T,\r\n): [T | undefined, (state: SetStateAction<T>, immediate?: boolean) => unknown] {\r\n const [state, innerSetState] = useState<T>(initialState as T);\r\n\r\n const t = useRef<number>(-1);\r\n\r\n const setState = useCallback<\r\n (state: SetStateAction<T>, immediate?: boolean) => unknown\r\n >(\r\n (newState, immediate?: boolean) => {\r\n clearTimeout(t.current);\r\n\r\n if (immediate) innerSetState(newState);\r\n else\r\n t.current = setTimeout(() => {\r\n innerSetState(newState);\r\n }, timeout) as any;\r\n },\r\n [timeout],\r\n );\r\n\r\n return [state, setState];\r\n}\r\n","export function isTrue(el: any) {\r\n if (el === true) {\r\n return true;\r\n }\r\n if (['t', 'true'].includes(String(el).toLowerCase())) {\r\n return true;\r\n }\r\n if (el === 1) {\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n","/**\r\n * Calculates the alignment distance between two strings using the Levenshtein\r\n * distance algorithm. This distance is defined as the minimum number of\r\n * single-character edits (insertions, deletions, or substitutions) required to\r\n * change one string into the other. The function implements a dynamic\r\n * programming approach to efficiently compute this metric.\r\n *\r\n * @param {string} a - The first string to compare.\r\n * @param {string} b - The second string to compare.\r\n * @returns {number} The alignment distance between the two strings. This is a non-negative integer where\r\n * a value of 0 indicates that the strings are identical, and a larger value\r\n * indicates a greater degree of difference.\r\n *\r\n * @example\r\n * // returns 3\r\n * alignment(\"kitten\", \"sitting\");\r\n *\r\n * @example\r\n * // returns 2\r\n * alignment(\"flaw\", \"lawn\");\r\n */\r\nexport function alignment(a: string, b: string) {\r\n const m = a.length;\r\n const n = b.length;\r\n const dp = Array.from({ length: m + 1 }, () => Array<number>(n + 1).fill(0));\r\n\r\n // Initialize the first column and the first row of the matrix\r\n for (let i = 0; i <= m; i++) dp[i][0] = i;\r\n for (let j = 0; j <= n; j++) dp[0][j] = j;\r\n\r\n // Fill dp matrix\r\n for (let i = 1; i <= m; i++) {\r\n for (let j = 1; j <= n; j++) {\r\n const cost = a[i - 1] === b[j - 1] ? 0 : 1;\r\n dp[i][j] = Math.min(\r\n dp[i - 1][j] + 1, // deletion\r\n dp[i][j - 1] + 1, // insertion\r\n dp[i - 1][j - 1] + cost, // substitution\r\n );\r\n }\r\n }\r\n\r\n // Return the value in the bottom right corner\r\n return dp[m][n];\r\n}\r\n","export function ucfirst(word: string) {\r\n return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();\r\n}\r\n","export class ClassNameBuilder {\r\n private classes: string[] = [];\r\n\r\n push(...classes: string[]) {\r\n this.classes.push(...classes);\r\n return this;\r\n }\r\n\r\n pushConditional(cond: boolean, clazz: string) {\r\n if (cond) {\r\n this.classes.push(clazz);\r\n }\r\n return this;\r\n }\r\n\r\n get() {\r\n return this.classes.join(' ');\r\n }\r\n}\r\n","export function decodeBase64ToUtf8(base64String: string) {\r\n const binaryString = atob(base64String);\r\n const bytes = Uint8Array.from(binaryString, (char) => char.charCodeAt(0));\r\n return new TextDecoder('utf-8').decode(bytes);\r\n}\r\n","export function encodeStrToBase64Utf8(str: string) {\r\n const bytes = new TextEncoder().encode(str); // UTF-8 → bytes\r\n let binary = '';\r\n const chunk = 0x8000; // procesar en trozos grandes para evitar desbordes de stack\r\n for (let i = 0; i < bytes.length; i += chunk) {\r\n binary += String.fromCharCode(...bytes.subarray(i, i + chunk));\r\n }\r\n return btoa(binary);\r\n}\r\n","/**\r\n * Toma un valor y devuelve true o false según las\r\n * siguientes condiciones:\r\n *\r\n * Si es string, ['',\r\n * 'false'].includes(value.toLowerCase()) => false, todo lo\r\n * demás => true.\r\n *\r\n * Si es array, [] => false, [...] => true.\r\n *\r\n * Todo lo demás !!value\r\n *\r\n * @example\r\n *\r\n * toBoolean('true') // true\r\n * toBoolean('TrUE') // true\r\n * toBoolean('FAlSe') // false\r\n * toBoolean(0) // false\r\n * toBoolean(1) // true\r\n * toBoolean([0]) // true\r\n * toBoolean([]) // false\r\n */\r\nexport function toBoolean(value: unknown): boolean {\r\n if (typeof value === 'string') {\r\n return !['false', ''].includes(value.toLowerCase());\r\n }\r\n\r\n if (Array.isArray(value)) return value.length > 0;\r\n\r\n return !!value;\r\n}\r\n","import xml2js, { ParserOptions } from 'xml2js';\r\nimport { parseBooleans, parseNumbers } from 'xml2js/lib/processors';\r\nimport {\r\n TApiaFieldPropsObj,\r\n TFieldScriptEvents,\r\n TFieldServerEvents,\r\n TNotificationMessage,\r\n} from '../types';\r\nimport { AxiosResponse } from 'axios';\r\n\r\nexport const processAjaxEventTagNames = (name: string): string => {\r\n return name;\r\n};\r\n\r\nexport const processAjaxEventAttrNames = (name: string): string => {\r\n return name;\r\n};\r\n\r\nexport interface TSessionExceptions {\r\n exception: {\r\n content: string;\r\n text: string;\r\n };\r\n}\r\n\r\nexport const processAjaxEventResponse = (\r\n value: unknown,\r\n name: string,\r\n): string | unknown => {\r\n if (name === 'v' && value === 'T') return true;\r\n if (name === 'v' && value === 'F') return false;\r\n return value;\r\n};\r\n\r\nexport const getJSObjFromXML = (\r\n xml: XMLDocument | string,\r\n): Record<string, unknown> => {\r\n let objJS: TNotificationMessage | null = null;\r\n\r\n const parser = new xml2js.Parser({\r\n trim: true,\r\n normalize: true,\r\n explicitRoot: false,\r\n mergeAttrs: true,\r\n explicitArray: false,\r\n charkey: 'content',\r\n attrValueProcessors: [\r\n parseBooleans,\r\n processStringObj,\r\n processAjaxEventResponse,\r\n ],\r\n tagNameProcessors: [processAjaxEventTagNames],\r\n attrNameProcessors: [processAjaxEventAttrNames],\r\n } as ParserOptions);\r\n\r\n parser.parseString(\r\n xml,\r\n (err: Error | null, result: Record<string, unknown>) => {\r\n if (err) {\r\n console.warn('Error Parsing XML data', err);\r\n } else {\r\n objJS = result;\r\n }\r\n },\r\n );\r\n if (objJS) {\r\n return objJS;\r\n }\r\n return {};\r\n};\r\n\r\nexport const processStringObj = (\r\n value: string,\r\n key: string,\r\n):\r\n | TApiaFieldPropsObj\r\n | string\r\n | number\r\n | TFieldScriptEvents\r\n | TFieldServerEvents => {\r\n /*\r\n\r\n * ESTAS ENTRADAS VAN A SER NECESARIAS CUANDO SE INCORPORE MODULO DE\r\n * EJECUCION AL MONOREPO\r\n\r\n if (key === 'properties') {\r\n return parseFieldPropertiesObj(jsonDecode(value)) as TApiaFieldPropsObj;\r\n }\r\n if (key === 'scriptEvents') {\r\n return JSON.parse(value) as TFieldScriptEvents;\r\n }\r\n if (key === 'serverEvents') {\r\n return JSON.parse(value) as TFieldServerEvents;\r\n }\r\n if (key === 'gridXml') {\r\n return getJSObjfromXML(he.decode(value).replaceAll('&', '&'));\r\n } */\r\n if (key === 'value' && typeof value === 'number' && Number.isNaN(value)) {\r\n return '';\r\n }\r\n if (key === 'valueType' && typeof value === 'string' && value === 'null') {\r\n return '';\r\n }\r\n if (\r\n (key === 'cols' ||\r\n key === 'rows' ||\r\n key === 'x' ||\r\n key === 'y' ||\r\n key === 'length') &&\r\n typeof value === 'string'\r\n ) {\r\n return parseNumbers(value);\r\n }\r\n return value;\r\n};\r\n\r\nexport const parseXmlAsync = async <T>(xml: string): Promise<T> => {\r\n const parser = new xml2js.Parser({\r\n trim: true,\r\n normalize: true,\r\n explicitRoot: false,\r\n mergeAttrs: true,\r\n explicitArray: false,\r\n charkey: 'content',\r\n attrValueProcessors: [\r\n parseBooleans,\r\n processStringObj,\r\n processAjaxEventResponse,\r\n ],\r\n tagNameProcessors: [processAjaxEventTagNames],\r\n attrNameProcessors: [processAjaxEventAttrNames],\r\n } as ParserOptions);\r\n\r\n const result = await new Promise<T>((resolve, reject) => {\r\n parser.parseString(xml, (err: Error | null, innerResult: T) => {\r\n if (err) {\r\n console.log(xml);\r\n reject(err);\r\n } else {\r\n resolve(innerResult);\r\n }\r\n });\r\n });\r\n\r\n return result;\r\n};\r\n\r\nexport const parseXMLRequestResponse = (\r\n response: AxiosResponse<unknown, unknown>,\r\n): Record<string, unknown> => {\r\n // if (response.config.data) {\r\n // parse(response.config.data as string);\r\n // }\r\n const requestResponse = response.data;\r\n const xmlToJSOBj = getJSObjFromXML(requestResponse as XMLDocument);\r\n\r\n if (xmlToJSOBj) {\r\n return xmlToJSOBj;\r\n }\r\n return {};\r\n};\r\n","export const postNavigation = (url: string, data: Record<string, any>) => {\r\n // Create a new form element\r\n const form = document.createElement('form');\r\n form.method = 'POST';\r\n form.action = url;\r\n\r\n // Iterate over the data object and create hidden input fields\r\n Object.entries(data).forEach(([key, value]) => {\r\n if (value !== undefined && value !== null) {\r\n // Only include defined and non-null values\r\n const input = document.createElement('input');\r\n input.type = 'hidden';\r\n input.name = key;\r\n input.value = String(value);\r\n form.appendChild(input);\r\n }\r\n });\r\n\r\n // Append the form to the body and submit it\r\n document.body.appendChild(form);\r\n form.submit();\r\n};\r\n"],"names":["c","React","__privateAdd","__privateGet","_a","__privateSet","state","uniqueId","cloneDeep"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/dom/getWindow.ts","../src/number/index.ts","../src/animate/index.ts","../src/audio/AudioRecorder.ts","../src/array/arrayOrArray.ts","../src/array/getIndex.ts","../src/compare/deepEqual.ts","../src/crypto/generateKey.ts","../src/crypto/decrypt.ts","../src/crypto/encrypt.ts","../src/crypto/uniqueId.ts","../src/date/getDateFormat.ts","../src/date/apiaDateToStandarFormat.ts","../src/date/dateToApiaFormat.ts","../src/debug/debugDispatcher.ts","../src/debug/shortcutController.ts","../src/documents/downloadStringAsDoc.ts","../src/documents/downloadUrl.ts","../src/documents/openAndReadFile.ts","../src/dom/autoDisconnectMutationObserver.ts","../src/dom/findScrollContainer.ts","../src/dom/findOffsetRelativeToScrollParent.ts","../src/dom/isFocusable.ts","../src/dom/scrollParentIntoElement.ts","../src/dom/useMatchScrollDirection.ts","../src/dom/usePanAndZoom.ts","../src/dom/customEvents.ts","../src/dom/getFocusSelector.ts","../src/dom/getSpecificParent.ts","../src/dom/isChild.ts","../src/dom/url.ts","../src/dom/enableChildrenFocus.ts","../src/encoding/index.ts","../src/events/EventEmitter.ts","../src/hooks/useCombinedRefs.ts","../src/hooks/useDebouncedCallback.ts","../src/hooks/usePrevious.ts","../src/hooks/useShallowMemo.ts","../src/hooks/useIntermediateValue.ts","../src/hooks/useLatest.ts","../src/hooks/useMount.ts","../src/hooks/useUnmount.ts","../src/hooks/useStateRef.ts","../src/hooks/useSubscription.ts","../src/hooks/useUpdateEffect.ts","../src/hooks/useWhyUpdated.ts","../src/hooks/useMountTransition.ts","../src/events/StatefulEmitter.ts","../src/events/BouncingEmitter.ts","../src/focus/globalFocus.ts","../src/storage/StatefulStore.ts","../src/storage/persistentStorage.ts","../src/storage/useLocalStorage.ts","../src/synchronization/awaitTime.ts","../src/synchronization/semaphore.ts","../src/synchronization/mutex.ts","../src/synchronization/TasksQueue.ts","../src/lockers/screenLocker.ts","../src/lockers/scrollLocker.ts","../src/focus/focusController.ts","../src/history/History.tsx","../src/imperative/types.ts","../src/imperative/makeImperativeComponent.tsx","../src/imperative/makeSingleImperativeComponent.tsx","../src/imperative/useImperativeIdentifierContext.ts","../src/imperative/useImperativeComponentEvents.ts","../src/labels/formatMessage.ts","../src/labels/getLabel.ts","../src/objects/getValueByPath.ts","../src/objects/setValueByPath.ts","../src/objects/cloneDeep.ts","../src/objects/freezeDeep.ts","../src/propsStore/propsStore.ts","../src/propsStore/usePropsSelector.ts","../src/states/useDomState.tsx","../src/states/useDebouncedState.ts","../src/primitives/index.ts","../src/string/alignment.ts","../src/string/ucfirst.ts","../src/string/classNameBuilder.ts","../src/string/decodeBase64ToUtf8.ts","../src/string/encodeStrToBase64Utf8.ts","../src/typeGuards/toBoolean.ts","../src/xml/parseXmlAsync.ts","../src/navigationHelpers/postNavigation.ts"],"sourcesContent":["export function getWindow() {\r\n return globalThis as any as Window;\r\n}\r\n","export interface ISetBoundary {\n number?: number | string;\n min?: number;\n max?: number;\n loop?: boolean;\n}\n\n/**\n * Añade límites a un número, impidiendo que sea\n * inferior o superior a los límites establecidos.\n *\n * Si se pasa loop en true, al llegar al valor maximo o minimo regresara al\n * minimo o maximo respectivamente.\n */\nexport function addBoundary(\n num: number,\n min: number,\n max?: number,\n loop?: boolean,\n): number;\nexport function addBoundary(definition: ISetBoundary): number;\nexport function addBoundary(\n definition: ISetBoundary | number,\n min?: number,\n max?: number,\n loop?: boolean,\n) {\n const actualNumber =\n typeof definition === 'number' ? definition : definition.number;\n const actualMin = typeof definition === 'number' ? min : definition.min;\n const actualMax = typeof definition === 'number' ? max : definition.max;\n const isActualLoop = typeof definition === 'number' ? loop : definition.loop;\n\n let newNumber = Number(actualNumber ?? 0);\n if (actualMin !== undefined && newNumber < actualMin) {\n if (actualMax !== undefined && isActualLoop) {\n newNumber = actualMax;\n } else {\n newNumber = actualMin;\n }\n }\n if (actualMax !== undefined && newNumber > actualMax) {\n if (actualMin !== undefined && isActualLoop) {\n newNumber = actualMin;\n } else {\n newNumber = actualMax;\n }\n }\n return newNumber;\n}\n\nconst sizeUnits = ['b', 'kb', 'mb', 'gb', 'tb'];\n/**\n * Esta función acepta un número y devuelve la representaciíon\n * en string de su tamaño en disco. Ej: 1024 => 1kb\n */\nexport function parseAsSize(num: number): string {\n let index = 0;\n let finalSize = num;\n\n if (finalSize === Infinity) return '1000GB';\n\n while (finalSize > 1024) {\n finalSize /= 1024;\n index++;\n }\n return `${Math.round(finalSize * 10) / 10}${sizeUnits[index]}`;\n}\n\n/**\n * Toma cualquier valor y devuelve siempre un número. En caso de que el valor\n * casteado con la función Number(value) de NaN, devuelve defaultReturn, que por\n * defecto es 0\n */\nexport function noNaN(number: unknown, defaultReturn = 0) {\n const returnNumber = Number(number);\n if (number === null || Number.isNaN(returnNumber)) return defaultReturn;\n return returnNumber;\n}\n","import { getWindow } from '../dom/getWindow';\r\nimport { addBoundary } from '../number';\r\n\r\nexport function animate(\r\n duration: number,\r\n callback: (progress: number) => unknown,\r\n onFinish?: () => unknown,\r\n) {\r\n let initialTime: number | undefined = undefined;\r\n let suscription: number;\r\n\r\n function innerAnimate(current: number) {\r\n if (initialTime === undefined) initialTime = current;\r\n\r\n const ellapsed = current - initialTime;\r\n const progress = ellapsed / duration;\r\n\r\n callback(addBoundary(progress, 0, 1));\r\n if (progress < 1)\r\n suscription = getWindow().requestAnimationFrame(innerAnimate);\r\n else onFinish?.();\r\n }\r\n\r\n suscription = getWindow().requestAnimationFrame(innerAnimate);\r\n\r\n return () => {\r\n getWindow().cancelAnimationFrame(suscription);\r\n };\r\n}\r\n","import { makeAutoObservable } from 'mobx';\n\nexport type AudioRecorderState = {\n recording: boolean;\n};\n\nexport class AudioRecorder {\n private mediaRecorder: MediaRecorder | null = null;\n\n state: AudioRecorderState = {\n recording: false,\n };\n\n constructor() {\n makeAutoObservable(this);\n }\n\n async start() {\n if (this.state.recording) {\n throw new Error('Cannot start a recording while other in progress');\n }\n\n return new Promise<Blob>((resolve) => {\n (async () => {\n try {\n this.state.recording = true;\n\n const audioChunks: BlobPart[] = [];\n const stream = await navigator.mediaDevices.getUserMedia({\n audio: true,\n });\n\n this.mediaRecorder = new MediaRecorder(stream);\n\n this.mediaRecorder.ondataavailable = (event: BlobEvent) => {\n audioChunks.push(event.data);\n };\n\n this.mediaRecorder.onstop = async () => {\n const audioBlob = new Blob(audioChunks, { type: 'audio/wav' });\n resolve(audioBlob);\n this.state.recording = false;\n };\n\n this.mediaRecorder.start();\n } catch (e) {\n this.state.recording = false;\n throw e;\n }\n })();\n });\n }\n\n stop() {\n this.mediaRecorder?.stop();\n }\n}\n","export default function arrayOrArray<T>(o: T | T[] | undefined): T[] {\n if (o === undefined) return [];\n\n return (Array.isArray(o) ? o : [o]) as T[];\n}\n","import isFunction from 'lodash-es/isFunction';\n\n/**\n * This function gets an array of elements of any kind and an array of\n * functions which will be called to test conditions and will return element\n * whose index equals the matching condition's index\n *\n * @param arr An array of elements of any kind\n * @param conditions An array of conditions, which will be tested in order to determine which index of the array will be returned\n * @param defaultIndex The return value in case that no condition matches\n * @returns An element of the array if any of the conditions matches or the defaultIndex otherwise.\n */\nexport function getIndex<T = unknown>(\n arr: T[],\n conditions: (boolean | (() => boolean))[],\n defaultIndex?: number,\n): T {\n for (let i = 0; i < conditions.length; i++) {\n if (\n (typeof conditions[i] === 'boolean' && conditions[i]) ||\n (isFunction(conditions[i]) && (conditions[i] as () => boolean)())\n )\n return arr[i];\n }\n return arr[defaultIndex ?? -1];\n}\n","export function deepEqual(a: any, b: any, visited = new WeakMap()): boolean {\r\n if (a === b) return true;\r\n\r\n if (typeof a !== typeof b) return false;\r\n\r\n if (a === null || b === null) return a === b;\r\n\r\n // Handle Dates\r\n if (a instanceof Date && b instanceof Date) {\r\n return a.getTime() === b.getTime();\r\n }\r\n\r\n // Handle arrays\r\n if (Array.isArray(a) && Array.isArray(b)) {\r\n if (a.length !== b.length) return false;\r\n for (let i = 0; i < a.length; i++) {\r\n if (!deepEqual(a[i], b[i], visited)) return false;\r\n }\r\n return true;\r\n }\r\n\r\n // Handle plain objects (excluding arrays, dates, etc.)\r\n if (typeof a === 'object' && typeof b === 'object') {\r\n if (visited.get(a) === b) return true; // Handle cyclic references\r\n visited.set(a, b);\r\n\r\n const aKeys = Object.keys(a);\r\n const bKeys = Object.keys(b);\r\n\r\n if (aKeys.length !== bKeys.length) return false;\r\n for (const key of aKeys) {\r\n if (!bKeys.includes(key) || !deepEqual(a[key], b[key], visited)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n // Fallback for everything else (functions, etc.)\r\n return false;\r\n}\r\n","export const generateKey = async (\n salt: string,\n passPhrase: string,\n keySize: number,\n iterationCount: number,\n) => {\n const CryptoJS = (await import('crypto-js')).default;\n const key = CryptoJS.PBKDF2(passPhrase, CryptoJS.enc.Hex.parse(salt), {\n keySize: keySize / 32,\n iterations: iterationCount,\n });\n return key;\n};\n","import { generateKey } from './generateKey';\n\nexport const decrypt = async (\n salt: string,\n iv: string,\n passPhrase: string,\n cipherText: string,\n keySize: number,\n iterationCount: number,\n) => {\n const CryptoJS = (await import('crypto-js')).default;\n const key = await generateKey(salt, passPhrase, keySize, iterationCount);\n const cipherParams = CryptoJS.lib.CipherParams.create({\n ciphertext: CryptoJS.enc.Base64.parse(cipherText),\n });\n const decrypted = CryptoJS.AES.decrypt(cipherParams, key, {\n iv: CryptoJS.enc.Hex.parse(iv),\n });\n return decrypted.toString(CryptoJS.enc.Utf8);\n};\n","import { generateKey } from './generateKey';\n\nexport const encrypt = async (\n salt: string,\n iv: string,\n passPhrase: string,\n plainText: string,\n keySize: number,\n iterationCount: number,\n) => {\n const CryptoJS = (await import('crypto-js')).default;\n const key = await generateKey(salt, passPhrase, keySize, iterationCount);\n const encrypted = CryptoJS.AES.encrypt(plainText, key, {\n iv: CryptoJS.enc.Hex.parse(iv),\n });\n return encrypted.ciphertext.toString(CryptoJS.enc.Base64);\n};\n","const ids: Record<string, number> = {};\nexport function uniqueId(prefix = '') {\n if (!ids[prefix]) {\n ids[prefix] = 0;\n }\n\n return `${prefix ? `${prefix}_` : ''}${ids[prefix]++}`;\n}\n","import dayjs from 'dayjs';\r\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\r\nimport { TDateFormat } from '../types/apia/date';\r\nimport { getWindow } from '../dom/getWindow';\r\n\r\ndayjs.extend(customParseFormat);\r\n\r\ndeclare global {\r\n interface Window {\r\n DATE_FORMAT: string;\r\n }\r\n}\r\n\r\nexport const DEFAULT_DATE_FORMAT: TDateFormat = 'DD/MM/YYYY';\r\n\r\nexport const getDateFormat = (format?: string): TDateFormat => {\r\n switch (format ?? getWindow().DATE_FORMAT) {\r\n case 'm/d/Y':\r\n return 'MM/DD/YYYY';\r\n case 'd/m/Y':\r\n return DEFAULT_DATE_FORMAT;\r\n case 'Y/m/d':\r\n return 'YYYY/MM/DD';\r\n default:\r\n return 'DD/MM/YYYY';\r\n }\r\n};\r\n","import dayjs from 'dayjs';\nimport { getDateFormat } from './getDateFormat';\n\nexport function apiaDateToStandarFormat(date: string) {\n const newDate = dayjs(date, getDateFormat());\n if (!newDate.isValid()) return '';\n return newDate.format('YYYY-MM-DD');\n}\n","import dayjs from 'dayjs';\nimport { getDateFormat } from './getDateFormat';\n\nexport function dateToApiaFormat(date: string | Date) {\n return dayjs(date).format(getDateFormat());\n}\n","import React from 'react';\r\nimport { getWindow } from '../dom/getWindow';\r\n\r\ndeclare global {\r\n const VERSION: string;\r\n const COMMITHASH: string;\r\n const BRANCH: string;\r\n const ENVIRONMENT: string;\r\n const TIMESTAMP: string;\r\n const PACKAGE_VERSION: string;\r\n\r\n interface Window {\r\n Globals: typeof globals;\r\n }\r\n}\r\n\r\nexport const globals = {\r\n getVersion() {\r\n return {\r\n version: typeof window !== 'undefined' ? VERSION : undefined,\r\n commit: typeof window !== 'undefined' ? COMMITHASH : undefined,\r\n branch: typeof window !== 'undefined' ? BRANCH : undefined,\r\n env: typeof window !== 'undefined' ? ENVIRONMENT : undefined,\r\n timestamp: typeof window !== 'undefined' ? TIMESTAMP : undefined,\r\n package: typeof window !== 'undefined' ? PACKAGE_VERSION : undefined,\r\n };\r\n },\r\n};\r\n\r\nif (typeof window !== 'undefined') {\r\n getWindow().Globals = globals;\r\n}\r\n\r\n/**\r\n * Indica si el debugDispatcher fue activado, lo que en muchos casos indica que\r\n * estamos en ambiente de desarrollo\r\n */\r\nexport function isDebugDispatcherEnabled() {\r\n return globals.getVersion().env === 'development';\r\n}\r\n\r\ntype TWindowDDispatch = (action: string, ...parameters: unknown[]) => void;\r\nexport type TDispatchCallback = (parameters: unknown[]) => unknown;\r\ninterface IStoredCallback {\r\n (parameters: unknown[]): unknown;\r\n help: () => void;\r\n}\r\n\r\nexport const debugDispatcher = new (class DDispatcher {\r\n callbacks: Record<string, IStoredCallback[]> = {};\r\n\r\n actions: Record<string, () => void> = {\r\n shout: () => {\r\n console.log(Object.keys(this.callbacks));\r\n },\r\n };\r\n\r\n on(\r\n action: string,\r\n cb: TDispatchCallback,\r\n help: string | React.ReactNode,\r\n onlyDevelop = false,\r\n ) {\r\n if (!isDebugDispatcherEnabled() && onlyDevelop) return () => {};\r\n\r\n if (Object.keys(this.actions).includes(action))\r\n throw new Error(\r\n `The action ${action} is a reserved word for the dispatcher.`,\r\n );\r\n if (!this.callbacks[action]) this.callbacks[action] = [];\r\n const actionMethod = Object.assign(cb, {\r\n help: () => {\r\n if (typeof help === 'string') console.info(help);\r\n },\r\n });\r\n this.callbacks[action].push(actionMethod);\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-expect-error\r\n this[action] = Object.assign(\r\n (...props: unknown[]) => {\r\n this.emit(action, ...props);\r\n },\r\n {\r\n help: () => {\r\n if (typeof help === 'string') console.info(help);\r\n },\r\n },\r\n );\r\n return () => {\r\n this.off(action, cb);\r\n };\r\n\r\n // return () => {};\r\n }\r\n\r\n off(action: string, cb: TDispatchCallback) {\r\n this.callbacks[action] = this.callbacks[action].filter((current) => {\r\n return current !== cb;\r\n });\r\n }\r\n\r\n emit: TWindowDDispatch = (action, ...parameters) => {\r\n try {\r\n if (this.actions[action]) this.actions[action]();\r\n else {\r\n if ((this.callbacks[action] ?? []).length === 1)\r\n return this.callbacks[action]?.[0]?.(parameters);\r\n\r\n (this.callbacks[action] ?? []).forEach((cb) => {\r\n return cb(parameters);\r\n });\r\n }\r\n return null;\r\n } catch (e) {\r\n console.error('DD', e);\r\n }\r\n };\r\n})();\r\n\r\ndeclare global {\r\n interface Window {\r\n adt: typeof debugDispatcher;\r\n dd: typeof debugDispatcher & Record<string, () => unknown>;\r\n }\r\n}\r\n\r\nif (typeof window !== 'undefined') {\r\n getWindow().dd = debugDispatcher as typeof debugDispatcher &\r\n Record<string, () => unknown>;\r\n getWindow().adt = debugDispatcher;\r\n}\r\n","import { debugDispatcher, isDebugDispatcherEnabled } from './debugDispatcher';\r\n\r\nexport type TCallback = (ev: KeyboardEvent) => unknown;\r\n\r\nexport type TKey = {\r\n key: string;\r\n altKey?: boolean;\r\n ctrlKey?: boolean;\r\n shiftKey?: boolean;\r\n};\r\n\r\nexport type TShortcutBranch = {\r\n key: TKey;\r\n children: TShortcutBranch[];\r\n callbacks: TCallback[];\r\n fireEvenFromInputs?: boolean;\r\n};\r\n\r\nexport const shortcutController = new (class ShortcutController {\r\n history: TKey[] = [];\r\n\r\n candidates: TShortcutBranch[] = [];\r\n\r\n shortcuts: TShortcutBranch = {\r\n callbacks: [],\r\n children: [],\r\n key: { key: '' },\r\n };\r\n\r\n shortcutsStrings: string[] = [];\r\n\r\n categories = {\r\n dev: ['shift&D'],\r\n };\r\n\r\n constructor() {\r\n if (typeof document !== 'undefined') {\r\n document.addEventListener('keydown', (ev) => {\r\n if (ev.key?.length !== 1 && ev.key !== 'Escape') return;\r\n this.candidates = [\r\n ...this.candidates.reduce<TShortcutBranch[]>(\r\n (accumulated, current) => [\r\n ...accumulated,\r\n ...current.children.filter(\r\n (child) =>\r\n child.key.key === ev.key &&\r\n child.key.altKey === ev.altKey &&\r\n child.key.ctrlKey === ev.ctrlKey &&\r\n child.key.shiftKey === ev.shiftKey,\r\n ),\r\n ],\r\n [],\r\n ),\r\n ...this.shortcuts.children.filter(\r\n (current) =>\r\n current.key.key === ev.key &&\r\n current.key.altKey === ev.altKey &&\r\n current.key.ctrlKey === ev.ctrlKey &&\r\n current.key.shiftKey === ev.shiftKey,\r\n ),\r\n ];\r\n this.candidates.forEach((current) => {\r\n if (\r\n current.fireEvenFromInputs ||\r\n !(\r\n !ev.key ||\r\n ev.key.length > 1 ||\r\n ['input', 'textarea', 'select'].includes(\r\n (ev.target as HTMLElement).tagName?.toLowerCase(),\r\n )\r\n )\r\n ) {\r\n if (current.callbacks) current.callbacks.forEach((cb) => cb(ev));\r\n }\r\n });\r\n });\r\n }\r\n debugDispatcher.on(\r\n 'shortcuts',\r\n () => {\r\n console.info(this.shortcutsStrings);\r\n console.info(this.shortcuts, this.history);\r\n },\r\n 'Muestra los shortcuts registrados',\r\n );\r\n this.on(\r\n 'short'.split(''),\r\n () => {\r\n this.shortcutsStrings.forEach((shortcut) => console.info(shortcut));\r\n },\r\n 'dev',\r\n );\r\n }\r\n\r\n parseKeyToString(key: string | TKey) {\r\n if (typeof key === 'string') return key;\r\n\r\n return `${key.altKey ? 'alt&' : ''}${key.ctrlKey ? 'ctrl&' : ''}${\r\n key.shiftKey ? 'shift&' : ''\r\n }${key.key}`;\r\n }\r\n\r\n parseKey(keyString: string): TKey {\r\n const elements = keyString.split('&');\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n const altKey = !!elements.find((c) => c.toLowerCase() === 'alt');\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n const ctrlKey = !!elements.find((c) => c.toLowerCase() === 'ctrl');\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n const shiftKey = !!elements.find((c) => c.toLowerCase() === 'shift');\r\n const key = elements.find(\r\n (current) =>\r\n current.toLocaleLowerCase() !== 'shift' &&\r\n current.toLocaleLowerCase() !== 'alt' &&\r\n current.toLocaleLowerCase() !== 'ctrl',\r\n );\r\n if (!key) throw new Error(`parseKey \"${keyString}\" does not have key.`);\r\n\r\n return {\r\n key,\r\n altKey,\r\n ctrlKey,\r\n shiftKey,\r\n };\r\n }\r\n\r\n /**\r\n * Para setear un shorcut se puede pasar un string representativo con la\r\n * forma:\r\n *\r\n * **alt**?&**ctrl**?&**shift**?&**(\\w)**\r\n *\r\n * Donde: alt? ctrl? shift? implica que cualquiera de esas palabras pueden o\r\n * no aparecer y (\\w) es una letra, símbolo o número.\r\n *\r\n * Puede aparecer cualquier tecla de control o no, pero el símbolo o letra\r\n * debe aparecer.\r\n *\r\n * @param category\r\n * Agrega un prefijo de teclas que se deben presionar antes del shortcut para\r\n * que funcione, de forma que por ejemplo, todos los shortcuts de la categoría\r\n * dev serán ejecutados solamente si antes se presionó shift&D\r\n *\r\n * @example\r\n *\r\n shortcutController.on(['shift&A', 'b', 'ctrl&c', 'alt&d'], (ev) => {\r\n ev.preventDefault();\r\n console.log('Abctrl+cd'),\r\n }); // Este shortcut se ejecuta en desarrollo y producción\r\n\r\n shortcutController.on('unshortcut'.split(''), (ev) => {\r\n ev.preventDefault();\r\n console.log('Abctrl+cd'),\r\n }, 'dev'); // Este shortcut solo se ejecuta en desarrollo\r\n */\r\n on(\r\n keys: (string | TKey)[],\r\n callback: TCallback,\r\n category?: keyof typeof this.categories,\r\n fireEvenFromInputs?: boolean,\r\n ) {\r\n if (category === 'dev' && !isDebugDispatcherEnabled()) return;\r\n\r\n let container = this.shortcuts;\r\n const actualKeys = category\r\n ? [...this.categories[category], ...keys]\r\n : keys;\r\n\r\n // eslint-disable-next-line no-restricted-syntax\r\n for (const key of actualKeys) {\r\n const actualKey = typeof key === 'string' ? this.parseKey(key) : key;\r\n if (actualKey.key === '')\r\n throw new Error(`Empty key ('') is not allowed`);\r\n const keyContainer = container.children.find(\r\n (current) =>\r\n current.key.key === actualKey.key ||\r\n (current.key.key === '' &&\r\n current.key.altKey === actualKey.altKey &&\r\n current.key.ctrlKey === actualKey.ctrlKey &&\r\n current.key.shiftKey === actualKey.shiftKey &&\r\n current.fireEvenFromInputs === fireEvenFromInputs),\r\n );\r\n if (keyContainer) container = keyContainer;\r\n else {\r\n const newContainer = {\r\n callbacks: [],\r\n children: [],\r\n key: actualKey,\r\n fireEvenFromInputs,\r\n };\r\n container.children.push(newContainer);\r\n container = newContainer;\r\n }\r\n }\r\n this.shortcutsStrings.push(\r\n actualKeys.map((current) => this.parseKeyToString(current)).join(''),\r\n );\r\n container.callbacks = [callback];\r\n }\r\n})();\r\n","export type DownloadStringAsDocProps = {\n fileName?: string;\n blobProps?: BlobPropertyBag;\n};\n\nexport async function downloadStringAsDoc(\n content: string,\n options?: DownloadStringAsDocProps,\n) {\n (await import('file-saver')).default.saveAs(\n new Blob([content], {\n type: 'text/plain; charset=utf-8',\n ...options?.blobProps,\n }),\n options?.fileName,\n );\n}\n","import type { AxiosResponse } from 'axios';\r\nimport axios from 'axios';\r\nimport FileSaver from 'file-saver';\r\n\r\nexport function defaultGetNameFromResponse(blob: AxiosResponse) {\r\n const contentDisposition = blob.headers['content-disposition'] as string;\r\n\r\n return (\r\n contentDisposition?.match(/filename=(?:\\\\?\")?([^\"]+)/i)?.[1] ?? 'noFileName'\r\n );\r\n}\r\n\r\nconst secondParameterIsTDownloadUrlOptions = (\r\n param:\r\n | string\r\n | ((blob: AxiosResponse) => string)\r\n | TDownloadUrlOptions = defaultGetNameFromResponse,\r\n): param is TDownloadUrlOptions => {\r\n return !!(param as TDownloadUrlOptions).postData;\r\n};\r\n\r\nexport type TDownloadUrlOptions = {\r\n fileName?: string;\r\n getNameFromResponse?: boolean | ((blob: AxiosResponse) => string);\r\n postData: string;\r\n};\r\n/**\r\n * This function gets an URL and a file name and performs a file download.\r\n *\r\n * @param url The url to fetch\r\n * @param getNameFromResponse The name will be given by the 'content-disposition' prop in the headers\r\n */\r\nexport async function downloadUrl(\r\n url: string,\r\n getNameFromResponse?: (blob: AxiosResponse) => string,\r\n): Promise<void>;\r\n/**\r\n * This function gets an URL and a file name and performs a file download.\r\n *\r\n * @param url The url to fetch\r\n * @param fileName The name the file will have as default in the save dialog\r\n */\r\nexport async function downloadUrl(\r\n url: string,\r\n fileName: string | TDownloadUrlOptions,\r\n): Promise<void>;\r\n\r\nexport async function downloadUrl(\r\n url: string,\r\n secondParameter:\r\n | string\r\n | ((blob: AxiosResponse) => string)\r\n | TDownloadUrlOptions = defaultGetNameFromResponse,\r\n): Promise<void> {\r\n if (secondParameterIsTDownloadUrlOptions(secondParameter)) {\r\n const blob = await axios.post(\r\n url,\r\n {\r\n postData: secondParameter.postData,\r\n },\r\n { responseType: 'blob' },\r\n );\r\n\r\n const getNameFromResponse =\r\n secondParameter.getNameFromResponse instanceof Function\r\n ? secondParameter.getNameFromResponse\r\n : secondParameter.getNameFromResponse === true\r\n ? defaultGetNameFromResponse\r\n : () => 'noname';\r\n\r\n const actualFileName =\r\n secondParameter.fileName ?? getNameFromResponse(blob);\r\n\r\n FileSaver.saveAs(new Blob([blob.data]), actualFileName);\r\n } else {\r\n const blob = await axios.get(url, {\r\n responseType: 'blob',\r\n });\r\n\r\n const actualFileName =\r\n typeof secondParameter === 'string'\r\n ? secondParameter\r\n : secondParameter(blob);\r\n\r\n FileSaver.saveAs(new Blob([blob.data]), actualFileName);\r\n }\r\n}\r\n","export function openAndReadFile(accept?: string) {\n return new Promise<string | ArrayBuffer | null>((resolve) => {\n const input = document.createElement('input');\n input.type = 'file';\n input.style.display = 'none';\n input.accept = accept || '*';\n\n document.body.append(input);\n\n input.click();\n input.addEventListener('change', (ev) => {\n const fileInput = ev.target as HTMLInputElement;\n\n const file = fileInput?.files?.[0];\n if (file) {\n const reader = new FileReader();\n reader.onload = (event) => {\n fileInput.value = '';\n const content = event.target?.result;\n if (content) {\n resolve(content);\n }\n };\n reader.readAsText(file);\n } else {\n resolve(null);\n }\n });\n });\n}\n\ntype TReadFile = {\n content: string | ArrayBuffer;\n name: string;\n};\n\nexport function openAndReadFiles(\n inputProps?: Partial<{\n accept: string;\n multiple: string;\n }>,\n) {\n return new Promise<TReadFile[]>((resolve) => {\n const input = document.createElement('input');\n input.type = 'file';\n input.style.display = 'none';\n document.body.append(input);\n Object.assign(input, inputProps);\n\n input.addEventListener('change', (ev) => {\n const fileInput = ev.target as HTMLInputElement;\n\n if ((fileInput?.files?.length ?? 0) === 0) {\n resolve([]);\n } else {\n const files: (TReadFile | null)[] = [];\n\n const sources = fileInput!.files!;\n [...sources].forEach((c) => {\n const reader = new FileReader();\n reader.onload = (event) => {\n fileInput.value = '';\n const content = event.target?.result;\n if (content) {\n files.push({\n content,\n name: c.name,\n });\n } else {\n files.push(null);\n }\n\n if (files.length === sources.length) {\n resolve(files.filter((c): c is TReadFile => !!c));\n }\n };\n reader.readAsText(c);\n });\n }\n });\n\n input.click();\n });\n}\n","export interface IAutoDisconnectMutationObserverConf {\n /** Por defecto es true */\n runCallbackOnInit?: boolean;\n /** Por defecto es 100 (ms) */\n timeout?: number;\n}\n\n/**\n * Crea un observer que va a desconectarse automáticamente luego de que pase\n * una determinada cantidad de tiempo sin actividad en el elemento.\n *\n * Se usa especialmente para esperar que un componente termine de renderizar y\n * aplicar cálculos a nivel de layout sobre él.\n */\nexport function autoDisconnectMutationObserver(\n element: HTMLElement,\n callback: () => unknown,\n conf?: IAutoDisconnectMutationObserverConf,\n) {\n let timeoutRegister = -1;\n let isConnected = false;\n function disconnect() {\n if (isConnected) {\n isConnected = false;\n observer.disconnect();\n clearTimeout(timeoutRegister);\n }\n }\n let shoutCallback: number;\n\n const observer = new MutationObserver((...props) => {\n if (props[0]?.[0] && (props[0][0].removedNodes || props[0][0].addedNodes)) {\n clearTimeout(shoutCallback);\n shoutCallback = setTimeout(callback, 100) as unknown as number;\n clearTimeout(timeoutRegister);\n timeoutRegister = setTimeout(\n disconnect,\n conf?.timeout ?? 100,\n ) as unknown as number;\n }\n });\n isConnected = true;\n observer.observe(element, { subtree: true, childList: true });\n timeoutRegister = setTimeout(\n disconnect,\n conf?.timeout ?? 100,\n ) as unknown as number;\n\n if (conf?.runCallbackOnInit !== false)\n shoutCallback = setTimeout(callback, 100) as unknown as number;\n\n return disconnect;\n}\n","import { getWindow } from './getWindow';\r\n\r\nconst REGEXP_SCROLL_PARENT = /^(visible|hidden)/;\r\n/**\r\n * Encuentra el primer elemento padre del elemento provisto que tenga scroll\r\n * activo.\r\n */\r\nexport function findScrollContainer(el: HTMLElement): HTMLElement | null {\r\n // eslint-disable-next-line no-nested-ternary\r\n const found =\r\n !(el instanceof HTMLElement) ||\r\n typeof getWindow().getComputedStyle !== 'function'\r\n ? null\r\n : el.scrollHeight >= el.clientHeight &&\r\n !REGEXP_SCROLL_PARENT.test(\r\n getWindow().getComputedStyle(el).overflowY || 'visible',\r\n )\r\n ? el\r\n : findScrollContainer(el.parentElement as HTMLElement) ||\r\n (document as unknown as HTMLElement);\r\n\r\n if (found === document.body) {\r\n return document.body.parentElement!;\r\n }\r\n\r\n return found;\r\n}\r\n","import { findScrollContainer } from './findScrollContainer';\n\n/**\n * Esta función calcula el offset que existe entre un elemento y su padre más inmediato que tenga scroll visible\n */\nexport function findOffsetRelativeToScrollParent(\n element: HTMLElement,\n which: 'Left' | 'Top' = 'Top',\n) {\n const scrollParent = findScrollContainer(element) as HTMLElement;\n let offset = 0;\n let current: HTMLElement | null = element;\n\n // Sumar todos los offsetTop/offsetLeft hasta llegar al scrollParent\n while (current && current !== document.body && current !== scrollParent) {\n offset += current[`offset${which}`] as number;\n current = current.offsetParent as HTMLElement | null;\n }\n\n // Restar la cantidad scrolleada, para que sea relativo al borde visible\n const scrollAmount = (scrollParent[`scroll${which}`] as number) || 0;\n return offset - scrollAmount;\n}\n","export function isFocusable(element: HTMLElement) {\r\n // Cannot focus if disabled\r\n if ((element as HTMLInputElement).disabled) return false;\r\n\r\n // Cannot focus if not connected or not visible\r\n if (!element.isConnected) return false;\r\n if (\r\n element.offsetParent === null &&\r\n getComputedStyle(element).position !== 'fixed'\r\n )\r\n return false;\r\n\r\n // Tabindex >= 0 means focusable\r\n const tabIndex = element.getAttribute('tabindex');\r\n if (tabIndex !== null && parseInt(tabIndex, 10) >= 0) return true;\r\n\r\n // Elements that are naturally focusable\r\n const focusableTags = ['INPUT', 'SELECT', 'TEXTAREA', 'BUTTON'];\r\n if (focusableTags.includes(element.tagName)) return true;\r\n if (element.tagName === 'A' && element.hasAttribute('href')) return true;\r\n if (\r\n element.hasAttribute('contenteditable') &&\r\n element.getAttribute('contenteditable') !== 'false'\r\n )\r\n return true;\r\n\r\n return false;\r\n}\r\n","import { findScrollContainer } from './findScrollContainer';\r\nimport { getWindow } from './getWindow';\r\n\r\nconst scrollIntervals: Record<string, number> = {};\r\n\r\n/**\r\n * Mantiene visible `element` dentro de su contenedor con scroll,\r\n * compensando un posible header fijo (`fixedOffsetTop`).\r\n *\r\n * @param element Elemento a mostrar.\r\n * @param fixedOffsetTop Espacio mínimo desde el top visible (ej: header fijo). Default 0.\r\n * @param tries Cuántas reintentos en caso de layout changes. Default 2.\r\n * @param timeout Retraso entre reintentos (ms). Default 100.\r\n * @param scrollId Identificador opcional para agrupar timeouts.\r\n */\r\nexport function scrollParentIntoElement(\r\n element: HTMLElement,\r\n fixedOffsetTop = 0,\r\n tries = 2,\r\n timeout = 100,\r\n scrollId?: string,\r\n): void {\r\n // Genera un ID único si no se pasa uno\r\n const id = scrollId ?? `${Date.now()}_${Math.random()}`;\r\n // Limpia cualquier timeout pendiente con ese ID\r\n if (scrollIntervals[id]) {\r\n clearTimeout(scrollIntervals[id]);\r\n }\r\n\r\n const scrollParent = findScrollContainer(element) as HTMLElement | null;\r\n if (!scrollParent) {\r\n return;\r\n }\r\n\r\n // Rectángulos para cálculo de overflow\r\n const parentRect = scrollParent.getBoundingClientRect();\r\n const elemRect = element.getBoundingClientRect();\r\n\r\n // ¿Está por encima del top visible?\r\n const topOverflow = elemRect.top - (parentRect.top + fixedOffsetTop);\r\n // ¿Está por debajo del bottom visible?\r\n const bottomOverflow = elemRect.bottom - parentRect.bottom + fixedOffsetTop;\r\n\r\n if (topOverflow < 0) {\r\n // Subir scroll justo lo necesario\r\n scrollParent.scrollTop += topOverflow;\r\n } else if (bottomOverflow > 0) {\r\n // Bajar scroll justo lo necesario\r\n scrollParent.scrollTop += bottomOverflow;\r\n }\r\n\r\n // Reintenta en caso de cambios de layout (e.g. imágenes cargando)\r\n if (tries > 0) {\r\n scrollIntervals[id] = getWindow().setTimeout(() => {\r\n scrollParentIntoElement(element, fixedOffsetTop, tries - 1, timeout, id);\r\n }, timeout);\r\n }\r\n}\r\n","import { makeObservable, observable } from 'mobx';\r\nimport { getWindow } from './getWindow';\r\n\r\nexport type TDirection = 'up' | 'both' | 'down';\r\nconst controller: {\r\n direction: TDirection | '';\r\n} = {\r\n direction: '',\r\n};\r\nmakeObservable(controller, { direction: observable });\r\n\r\nfunction initScrollController() {\r\n if (typeof window === 'undefined' || controller.direction !== '') return;\r\n controller.direction = 'both';\r\n\r\n function setShouldShow(direction: TDirection) {\r\n controller.direction = direction;\r\n }\r\n\r\n const resizeObserver = new ResizeObserver(() => {\r\n if (document.documentElement.scrollHeight === getWindow().innerHeight)\r\n controller.direction = 'both';\r\n });\r\n\r\n resizeObserver.observe(document.documentElement);\r\n let currentScroll = document.documentElement.scrollTop;\r\n\r\n function handleScroll() {\r\n const direction = controller.direction;\r\n if (\r\n document.documentElement.scrollTop > currentScroll &&\r\n direction !== 'down'\r\n ) {\r\n setShouldShow('down');\r\n } else if (\r\n document.documentElement.scrollTop < currentScroll &&\r\n direction !== 'up'\r\n ) {\r\n setShouldShow('up');\r\n }\r\n currentScroll = document.documentElement.scrollTop;\r\n }\r\n\r\n document.addEventListener('scroll', handleScroll);\r\n\r\n return () => {\r\n resizeObserver.disconnect();\r\n document.removeEventListener('scroll', handleScroll);\r\n };\r\n}\r\ninitScrollController();\r\n\r\nexport default function useMatchScrollDirection(direction: 'up' | 'down') {\r\n return controller.direction === 'both' || controller.direction === direction;\r\n}\r\n","import React, { useRef } from 'react';\n\nexport function usePanAndZoom<\n ContainerType extends HTMLElement = HTMLElement,\n ChildType extends HTMLElement | SVGElement = HTMLElement,\n>(\n effectiveMargin: {\n left: number;\n top: number;\n right: number;\n bottom: number;\n } = { left: 0, bottom: 0, right: 0, top: 0 },\n blockZoom = true,\n) {\n const boxRef = useRef<ContainerType>(null);\n const elementRef = useRef<ChildType>(null);\n const [isPanning, setIsPanning] = React.useState(false);\n const [panningPosition, setPanningPosition] = React.useState({ x: 0, y: 0 });\n\n React.useEffect(() => {\n if (blockZoom) return;\n const container = boxRef.current;\n const innerElement = elementRef.current;\n const handlePanStart = (ev: MouseEvent) => {\n ev.preventDefault();\n setIsPanning(true);\n setPanningPosition({ x: ev.clientX, y: ev.clientY });\n };\n const handlePanEnd = (ev: MouseEvent) => {\n ev.preventDefault();\n\n setIsPanning(false);\n };\n\n const handlePan = (ev: MouseEvent) => {\n if (!innerElement || !container) {\n return;\n }\n\n if (isPanning) {\n ev.preventDefault();\n ev.stopPropagation();\n\n const dx = ev.clientX - panningPosition.x;\n const dy = ev.clientY - panningPosition.y;\n\n container.scrollLeft -= dx;\n container.scrollTop -= dy;\n\n setPanningPosition({ x: ev.clientX, y: ev.clientY });\n }\n };\n\n if (container) {\n container.addEventListener('mousedown', handlePanStart);\n container.addEventListener('mouseup', handlePanEnd);\n container.addEventListener('mouseleave', handlePanEnd);\n container.addEventListener('mousemove', handlePan);\n return () => {\n container.removeEventListener('mousedown', handlePanStart);\n container.removeEventListener('mousemove', handlePan);\n container.removeEventListener('mouseup', handlePanEnd);\n container.removeEventListener('mouseleave', handlePanEnd);\n };\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isPanning, panningPosition]);\n\n React.useEffect(() => {\n if (blockZoom) return;\n\n const container = boxRef.current;\n const innerElement = elementRef.current;\n let newScale = 1;\n const handleZoom = (ev: WheelEvent) => {\n ev.preventDefault();\n\n const newDelta = ev.deltaY;\n const scaleIncrement = 0.1;\n\n if (newDelta < 0) {\n if (newScale + scaleIncrement >= 2) {\n return;\n }\n newScale += scaleIncrement;\n } else {\n if (newScale - scaleIncrement <= 0.9) {\n return;\n }\n newScale -= scaleIncrement;\n }\n if (!innerElement || !container) {\n return;\n }\n const containerRect = container.getBoundingClientRect();\n const cursorX = ev.clientX - containerRect.left - effectiveMargin.left;\n const cursorY = ev.clientY - containerRect.top - effectiveMargin.top;\n\n const cursorXFromCenter = cursorX - containerRect.width / 2;\n const cursorYFromCenter = cursorY - containerRect.height / 2;\n\n if (newScale <= 1) {\n if (boxRef.current) {\n boxRef.current.style.overflow = 'hidden';\n }\n } else {\n if (boxRef.current) {\n boxRef.current.style.overflow = 'hidden';\n }\n }\n innerElement.style.transform = `scale(${newScale})`;\n innerElement.style.transformOrigin = '0px 0px';\n\n if (newDelta < 0) {\n container.scrollLeft += cursorXFromCenter / (newScale * 2);\n container.scrollTop += cursorYFromCenter / (newScale * 2);\n } else {\n container.scrollLeft -= cursorXFromCenter / (newScale * 2);\n container.scrollTop -= cursorYFromCenter / (newScale * 2);\n }\n };\n if (container) {\n container.addEventListener('wheel', handleZoom);\n return () => {\n container.removeEventListener('wheel', handleZoom);\n };\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n return {\n boxRef,\n elementRef,\n };\n}\n","/**\r\n * Existen algunos eventos que se disparan en la\r\n * aplicación con la finalidad de desencadenar\r\n * un comportamiento específico. Por ello se declaran\r\n * las siguientes constantes.\r\n */\r\nexport const customEvents = {\r\n /**\r\n * Indica que un elemento necesita recibir el foco,\r\n * de esta forma, elementos que no se están mostrando\r\n * en pantalla (por display:none por ejemplo), pueden\r\n * indicar a sus ancestros que deben expandirse.\r\n */\r\n focus: 'customFocus',\r\n /**\r\n * Indica que debe cambiarse el título del modal\r\n */\r\n iframeModalChangeTitle: 'iframeModalChangeTitle',\r\n /**\r\n * Indica que un iframe modal debe cerrarse\r\n */\r\n iframeModalClose: 'iframeModalClose',\r\n /**\r\n * Indica que un iframe modal debe cerrarse\r\n */\r\n iframeModalNotify: 'iframeModalNotify',\r\n /**\r\n * Indica que un modal debe cerrarse\r\n */\r\n modalClose: 'modalClose',\r\n /**\r\n * Indica que el panel contenedor debe cerrarse porque\r\n * está vacío\r\n */\r\n hidePanel: 'hidePanel',\r\n showPanel: 'showPanel',\r\n /**\r\n * Evento lanzado por formsEventsController sobre window\r\n * cuando se termina de procesar los formularios de la tarea\r\n */\r\n formsReady: 'formsReady',\r\n};\r\n","/**\r\n * Este selector pretende abarcar todos modificadores que en caso de estar\r\n * presentes hacen que un elemento no sea focusable\r\n */\r\nexport const cantFocusSelector = [\r\n '[disabled]',\r\n '[tabIndex=\"-1\"]',\r\n '[aria-hidden=\"true\"]',\r\n '[data-focus-guard]',\r\n '.modal__closeButton',\r\n]\r\n .map((current) => `:not(${current})`)\r\n .join('');\r\n\r\n/**\r\n * Este selector pretende abarcar todos los elementos que sean focusables\r\n */\r\nexport const focusSelector = [\r\n 'input',\r\n 'textarea',\r\n 'select',\r\n 'a',\r\n 'button:not(.toggleAccordionElement)',\r\n '[contenteditable]',\r\n '[tabIndex]',\r\n '[role=\"button\"]',\r\n]\r\n .map((current) => `${current}${cantFocusSelector}`)\r\n .join(',');\r\n\r\n/**\r\n * Genera un selector que permitirá seleccionar\r\n * todos los elementos candidatos a recibir foco,\r\n * que no cumplan con la condición not pasada\r\n * como parámetro.\r\n *\r\n * @param not Un selector not css, indicando cuáles\r\n * condiciones deben evitar el foco en un elemento.\r\n *\r\n * @returns Una cadena que representa un selector\r\n * css.\r\n */\r\nexport function getFocusSelector(not?: string) {\r\n return `input${not ?? ''}, \r\n textarea${not ?? ''}, \r\n select${not ?? ''}, \r\n a${not ?? ''}, \r\n button:not(.toggleAccordionElement)${not ?? ''}, \r\n [contenteditable]${not ?? ''}, \r\n [tabIndex]${not ?? ''}`;\r\n}\r\n","/**\n * Searches for a specific parent of a element,\n * using a callback function as the source of\n * truth in order to determine which is the correct\n * parent.\n *\n * @param element The element where the process\n * starts.\n *\n * @param checkParent A callback that will be\n * called for each of the ancestors of the element\n * until the desired parent is found.\n * This function should return **true when found**\n * the desired parend was found, **null to cancel**\n * the search or **false to continue searching**.\n *\n * @returns The specific parent or null in case\n * the root parent element is raised.\n */\nexport function getSpecificParent(\n element: HTMLElement | null,\n checkParent: (parent: HTMLElement) => boolean | null,\n): HTMLElement | null {\n let currentElement = element;\n\n while (element !== document.documentElement && currentElement) {\n const hasFoundTheParent = checkParent(currentElement);\n if (hasFoundTheParent === null) return null;\n if (hasFoundTheParent) return currentElement;\n\n const parent = currentElement.parentElement;\n if (parent) currentElement = parent;\n else return null;\n }\n\n return null;\n}\n","import { getSpecificParent } from './getSpecificParent';\n\n/**\n * Permite iterar desde un elemento hacia arriba en el\n * DOM, utilizando una función de comparación para\n * determinar si el elemento actual es el que estamos\n * buscando.\n *\n * Si la función checkParent devuelve true, isChild\n * devuelve true.\n */\nexport function isChild(\n element: HTMLElement | null,\n checkParent: (parent: HTMLElement) => boolean | null,\n) {\n return !!getSpecificParent(element, checkParent);\n}\n","import { arrayOrArray } from '../array';\r\n\r\nexport interface IParameter {\r\n name: string;\r\n value: unknown;\r\n allowMultiple?: boolean;\r\n}\r\n\r\nexport class Url {\r\n base: string;\r\n\r\n #parameters: Record<string, string | string[]> = {};\r\n\r\n constructor(\r\n baseUrl: string,\r\n public defaultAllowMultiple = true,\r\n ) {\r\n const [base, query] = baseUrl.split('?');\r\n this.base = base;\r\n query?.split('&').forEach((current) => {\r\n const [name, ...value] = current.split('=');\r\n this.addParameter(name, value.join('='));\r\n });\r\n }\r\n\r\n addParameter(name: string, value: unknown, allowMultiple?: boolean) {\r\n if (\r\n (allowMultiple === undefined && !this.defaultAllowMultiple) ||\r\n allowMultiple === false\r\n )\r\n this.#parameters[name] = String(value);\r\n else\r\n this.#parameters[name] = this.#parameters[name]\r\n ? [...arrayOrArray(this.#parameters[name]), String(value)]\r\n : [String(value)];\r\n }\r\n\r\n addParameters(parameters: IParameter[]) {\r\n parameters.forEach((current) =>\r\n this.addParameter(current.name, current.value, current.allowMultiple),\r\n );\r\n }\r\n\r\n getParameter(name: string) {\r\n return this.#parameters[name];\r\n }\r\n\r\n getParameters() {\r\n return Object.entries(this.#parameters);\r\n }\r\n\r\n toString() {\r\n const parametersArray = Object.entries(this.#parameters);\r\n\r\n return `${this.base}${\r\n parametersArray.length > 0\r\n ? `?${parametersArray\r\n .map(([name, value]) =>\r\n Array.isArray(value)\r\n ? value.map((current) => `${name}=${current}`).join('&')\r\n : `${name}=${String(value)}`,\r\n )\r\n .join('&')}`\r\n : ''\r\n }`;\r\n }\r\n}\r\n","import { focusSelector } from './getFocusSelector';\n\nconst previousTabIndexLabel = 'data-previous-tabindex';\n\n/**\n * Deshabilita la posibilidad de hacer foco en\n * todos los descendientes de parent. Es\n * especialmente útli cuando se ocultan elementos\n * del DOM sin quitarlos, cuando por accesibilidad\n * es importante que el foco no alcance a dichos\n * métodos.\n */\nexport function disableChildrenFocus(parent: HTMLElement) {\n const focusElement = parent.querySelectorAll(focusSelector);\n focusElement.forEach((element) => {\n element.setAttribute(\n previousTabIndexLabel,\n element.getAttribute('tabindex') ?? '',\n );\n element.setAttribute('tabindex', '-1');\n });\n}\n\n/**\n * Restaura el foco de los hijos de parent a los\n * que previamente se les había quitado el foco\n * con disableChildrenFocus.\n */\nexport function enableChildrenFocus(parent: HTMLElement) {\n const focusElement = parent.querySelectorAll(`[${previousTabIndexLabel}]`);\n focusElement.forEach((element) => {\n element.setAttribute(\n 'tabindex',\n element.getAttribute(previousTabIndexLabel) ?? '0',\n );\n element.removeAttribute(previousTabIndexLabel);\n });\n}\n","/**\n * Toma una cadena de texto que puede tener caracteres de escape de HTML (por\n * ejemplo á) y devuelve su correspondiente en texto plano.\n */\nexport const decodeHTMLEntities = (str: string) => {\n const parser = new DOMParser();\n const dom = parser.parseFromString(\n '<!doctype html><body>' + str,\n 'text/html',\n );\n const decodedString = dom.body.textContent;\n return decodedString;\n};\n","import { Callback, Callbacks, Map, UnSubscriber } from './types';\r\n\r\nexport type { Callback, Map, UnSubscriber } from './types';\r\n\r\n/**\r\n * @public\r\n *\r\n * The `EventEmitter` class is a generic utility for handling events. It allows subscribing to and emitting events.\r\n * This class is generic and works with a `Map` where keys are event names and values are the types associated with those events.\r\n *\r\n * @typeParam Events - An extension of `Map` where the key is the event name and the value is the type of data associated with that event.\r\n */\r\nexport class EventEmitter<Events extends Map> {\r\n protected callbacks: Record<'on' | 'once', Callbacks<Events>> = {\r\n on: {} as Callbacks<Events>,\r\n once: {} as Callbacks<Events>,\r\n };\r\n protected enabled = true;\r\n\r\n protected debugMode = false;\r\n debug(enable = true) {\r\n this.debugMode = enable;\r\n }\r\n\r\n /**\r\n * Emits an event with the given data. Any listeners subscribed to this event will be invoked with the passed data.\r\n *\r\n * @param event - The event name to emit.\r\n * @param data - The data associated with the event. Its type is dependent on the event name.\r\n */\r\n emit<K extends keyof Events>(event: K, data: Events[K]) {\r\n this.callbacks.on[event]?.forEach((current) => current(data));\r\n\r\n this.callbacks.once[event]?.forEach((current) => current(data));\r\n this.callbacks.once[event] = [];\r\n }\r\n\r\n /**\r\n * Reflects the current emitter state. A disabled state indicates that the emitter wont call listeners until its functionality gets enabled again.\r\n */\r\n get isEnabled() {\r\n return this.enabled;\r\n }\r\n\r\n off<K extends keyof Events>(event: K, cb: Callback<Events, K>): void {\r\n this.callbacks.on[event] = this.callbacks.on[event]?.filter(\r\n (c) => c !== cb,\r\n );\r\n this.callbacks.once[event] = this.callbacks.once[event]?.filter(\r\n (c) => c !== cb,\r\n );\r\n }\r\n\r\n /**\r\n * Subscribes a callback function to an event. The callback is invoked each time the event is emitted.\r\n *\r\n * @param event - The event name to listen to.\r\n * @param cb - The callback function to be invoked when the event is emitted.\r\n * @returns A function to unsubscribe the event listener.\r\n */\r\n on<K extends keyof Events>(event: K, cb: Callback<Events, K>): UnSubscriber {\r\n if (!this.callbacks.on[event]) this.callbacks.on[event] = [];\r\n\r\n if (!this.callbacks.on[event].find((c) => c === cb)) {\r\n this.callbacks.on[event].push(cb);\r\n }\r\n\r\n return () => {\r\n this.callbacks.on[event] = this.callbacks.on[event].filter(\r\n (c) => c !== cb,\r\n );\r\n };\r\n }\r\n\r\n /**\r\n * Subscribes a callback function to an event for a single occurrence. After the event is emitted once, the listener is automatically removed.\r\n *\r\n * @param event - The event name to listen to for a single occurrence.\r\n * @param cb - The callback function to be invoked when the event is emitted.\r\n * @returns A function to unsubscribe the event listener.\r\n */\r\n once<K extends keyof Events>(\r\n event: K,\r\n cb: Callback<Events, K>,\r\n ): UnSubscriber {\r\n if (!this.callbacks.once[event]) this.callbacks.once[event] = [];\r\n this.callbacks.once[event].push(cb);\r\n\r\n return () => {\r\n this.callbacks.once[event] = this.callbacks.once[event].filter(\r\n (c) => c !== cb,\r\n );\r\n };\r\n }\r\n}\r\n","import * as React from 'react';\n\n/**\n * Permite reasignar múltiples referencias desde un mismo componente.\n *\n * @example\n *\n * const ref1 = useRef(null)\n * const ref2 = useRef(null)\n *\n * const assignRefs = useMultipleRefs(ref1, ref2);\n *\n * return <Box ref={assignRefs} ...\n */\nexport function useCombinedRefs<RefType = HTMLInputElement>(\n ...refs: (React.ForwardedRef<unknown> | undefined)[]\n) {\n const [targetRef, setTargetRef] = React.useState<RefType>();\n\n React.useEffect(() => {\n refs.forEach((ref) => {\n if (!ref) return;\n\n if (typeof ref === 'function') {\n ref(targetRef);\n } else {\n // eslint-disable-next-line no-param-reassign\n ref.current = targetRef;\n }\n });\n }, [refs, targetRef]);\n\n return setTargetRef;\n}\n","import { useCallback, useRef } from 'react';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const useDebouncedCallback = <Params extends any[]>(\n callback: (...params: Params) => unknown,\n { runWhenTriggered, timeout } = { runWhenTriggered: false, timeout: 200 },\n) => {\n const timeoutRef = useRef<number>(-1);\n\n return useCallback(\n (...params: Params) => {\n if (runWhenTriggered) callback(...params);\n\n clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(\n () => callback(...params),\n timeout,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ) as any;\n },\n [callback, runWhenTriggered, timeout],\n );\n};\n","import { useRef } from 'react';\n\nexport function usePrevious<T>(value: T) {\n const previousValue = useRef<T | undefined>(undefined);\n const currentValue = useRef<T>(undefined as unknown as T);\n\n previousValue.current = currentValue.current;\n currentValue.current = value;\n\n return previousValue;\n}\n","import { useRef } from 'react';\nimport { usePrevious } from './usePrevious';\n\nexport function shallowEqual(a: unknown, b: unknown) {\n if (typeof a !== typeof b) return false;\n\n if (typeof a === 'object' && a && typeof b === 'object' && b) {\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n\n if (aKeys.length !== bKeys.length) return false;\n\n for (let i = 0; i < aKeys.length; i++) {\n if (a[aKeys[i] as keyof typeof a] !== b[bKeys[i] as keyof typeof b])\n return false;\n }\n } else {\n if (a !== b) return false;\n }\n\n return true;\n}\n\n/**\n * Compara con shallowEqual todos los ítems de dos arrays\n */\nexport function shallowCompareArrays(a: unknown[], b: unknown[]): boolean {\n if (a.length !== b.length) return false;\n\n for (let i = 0; i < a.length; i++) {\n const differ = shallowEqual(a, b);\n\n if (!differ) return false;\n }\n\n return true;\n}\n\nexport function useShallowMemo<T>(creator: () => T, deps: unknown[]): T {\n const value = useRef(creator());\n\n const previousDeps = usePrevious(deps);\n if (!shallowEqual(previousDeps.current ?? [], deps)) {\n value.current = creator();\n }\n\n return value.current;\n}\n","import { Dispatch, SetStateAction, useState } from 'react';\r\nimport { usePrevious } from './usePrevious';\r\nimport { shallowEqual } from './useShallowMemo';\r\n\r\n/**\r\n * Este hook permite mantener un estado interno en un componente, al mismo tiempo que se escucha el estado externo a través de las props, permitiendo la edición del valor en forma interna, a la vez que se permite su definición desde los padres del componente.\r\n *\r\n * Es útil especialmente en campos de tipo input en los cuales es deseable permitir al usuario escribir libremente, y luego de validada la entrada, establecer un valor diferente para mostrar.\r\n */\r\nexport function useIntermediateValue<T>(\r\n currentValue: T,\r\n): [T, Dispatch<SetStateAction<T>>] {\r\n const [innerState, setInnerState] = useState<T>(currentValue);\r\n\r\n const previousValue = usePrevious(currentValue);\r\n if (!shallowEqual(currentValue, previousValue.current)) {\r\n setInnerState(currentValue);\r\n }\r\n\r\n return [innerState, setInnerState];\r\n}\r\n","import { useRef } from 'react';\n\n/**\n * Devuelve una referencia que mantiene siempre el último valor del elemento\n * pasado, es especialmente útil para acceder a valores del componente desde\n * dentro de efectos.\n *\n * *Investigar qué es 'react stale state'*\n */\nexport function useLatest<T>(value: T) {\n const ref = useRef(value);\n ref.current = value;\n return ref;\n}\n","import { EffectCallback, useEffect } from 'react';\n\nexport function useMount(effect: EffectCallback) {\n useEffect(() => {\n return effect();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n}\n","import { useEffect } from 'react';\n\nexport function useUnmount(unmountCallback: () => void) {\n useEffect(() => {\n return unmountCallback;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n}\n","import {\n Dispatch,\n MutableRefObject,\n SetStateAction,\n useRef,\n useState,\n} from 'react';\n\nexport function useStateRef<T>(\n initialState?: T,\n): [\n typeof initialState extends undefined ? T | undefined : T,\n Dispatch<\n SetStateAction<typeof initialState extends undefined ? T | undefined : T>\n >,\n MutableRefObject<typeof initialState extends undefined ? T | undefined : T>,\n] {\n const [state, setState] = useState<\n typeof initialState extends undefined ? T | undefined : T\n >(initialState as typeof initialState extends undefined ? T | undefined : T);\n\n const stateRef = useRef(state);\n stateRef.current = state;\n\n return [state, setState, stateRef];\n}\n","import { Dispatch, SetStateAction, useState } from 'react';\r\nimport { useMount } from './useMount';\r\n\r\n/**\r\n * Este hook es una simplificación de la dinámica de suscripción con cambio de\r\n * estado ante eventos.\r\n * \r\n * @example\r\n * \r\n * useIsAfter = (id: string) => {\r\n return useSubscription({\r\n getInitialState: () => {\r\n return { isAfter: this.#isAfter(id), isBefore: this.#isBefore(id) };\r\n },\r\n makeSubscription: (setState) => {\r\n return this.#emitter.on('hover', () => {\r\n setState({\r\n isAfter: this.#isAfter(id),\r\n isBefore: this.#isBefore(id),\r\n });\r\n });\r\n },\r\n });\r\n };\r\n */\r\nexport function useSubscription<T>({\r\n getInitialState,\r\n makeSubscription,\r\n}: {\r\n getInitialState?: (() => T) | (() => () => T);\r\n makeSubscription: (setState: Dispatch<SetStateAction<T>>) => () => void;\r\n}) {\r\n const [state, setState] = useState<T>(getInitialState?.() as T);\r\n\r\n useMount(() => {\r\n let newState = getInitialState?.();\r\n if (typeof newState === 'function') newState = (newState as () => T)();\r\n\r\n if (newState !== undefined) setState(newState);\r\n\r\n return makeSubscription(setState);\r\n });\r\n\r\n return state;\r\n}\r\n\r\nclass Base {\r\n state: { value: string } = { value: '' };\r\n}\r\n\r\nclass Child extends Base {\r\n state = { value: '', isLoading: false };\r\n}\r\n\r\nconst ch = new Child();\r\nch.state.isLoading;\r\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { DependencyList, EffectCallback, useEffect, useRef } from 'react';\n\n/**\n * Este hook se comporta igual que useEffect, con la diferencia de que en el\n * primer renderizado no se va a ejecutar.\n */\nexport function useUpdateEffect(effect: EffectCallback, deps?: DependencyList) {\n const hasRunnedForFirstTime = useRef(false);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => {\n if (hasRunnedForFirstTime.current) {\n return effect();\n }\n hasRunnedForFirstTime.current = true;\n return () => {};\n }, deps);\n}\n","import { usePrevious } from './usePrevious';\r\n\r\nexport function useWhyUpdated(label: any, e: Record<string, any>) {\r\n const previousData = usePrevious(e);\r\n\r\n const diffs: any[] = [];\r\n Object.entries(e).forEach(([key, value]) => {\r\n if (!Object.is(value, previousData.current?.[key])) {\r\n diffs.push({ key, value, previous: previousData.current?.[key] });\r\n }\r\n });\r\n\r\n if (diffs.length) {\r\n console.log(label, diffs);\r\n }\r\n}\r\n","import { useEffect, useState } from 'react';\r\n\r\nexport const useMountTransition = (\r\n isMounted: boolean,\r\n unmountDelay: number,\r\n) => {\r\n const [hasTransitionedIn, setHasTransitionedIn] = useState(false);\r\n\r\n useEffect(() => {\r\n let timeoutId: ReturnType<typeof setTimeout>;\r\n\r\n if (isMounted && !hasTransitionedIn) {\r\n setHasTransitionedIn(true);\r\n } else if (!isMounted && hasTransitionedIn) {\r\n timeoutId = setTimeout(() => setHasTransitionedIn(false), unmountDelay);\r\n }\r\n return () => {\r\n clearTimeout(timeoutId);\r\n };\r\n }, [unmountDelay, isMounted, hasTransitionedIn]);\r\n\r\n return hasTransitionedIn;\r\n};\r\n","import { SetStateAction, useRef } from 'react';\r\nimport { Callback, EventEmitter, Map, UnSubscriber } from './EventEmitter';\r\nimport { useSubscription } from '../hooks';\r\n\r\ntype Setter<T> = (prevState: T) => T;\r\ntype Selector<State, Selected> = (state: State) => Selected;\r\ntype Comparator<Selected> = (\r\n newSelection: Selected,\r\n previousSelection: Selected,\r\n) => boolean;\r\n\r\nexport function isSetter<T>(data: SetStateAction<T>): data is Setter<T> {\r\n return typeof data === 'function';\r\n}\r\n\r\n/**\r\n * @private\r\n */\r\ntype EmitterState<Events extends Map> = {\r\n [K in keyof Events]: Events[K];\r\n};\r\n\r\n/**\r\n * Extends EventEmitter to manage and emit events with state persistence.\r\n * This class allows emitting and listening to typed events while also keeping\r\n * a state that can be accessed synchronously for each event.\r\n *\r\n * @param initialState - If given will be passed to subscriptions\r\n *\r\n * @template Events - A mapping of event names to their associated data types.\r\n * @extends EventEmitter<Events>\r\n */\r\nexport class StatefulEmitter<Events extends Map> extends EventEmitter<Events> {\r\n protected state = {} as EmitterState<Events>;\r\n\r\n constructor(initialState?: Partial<Events>) {\r\n super();\r\n\r\n this.state = Object.assign({}, initialState) as Events;\r\n }\r\n\r\n emit<K extends keyof Events>(event: K, data: Events[K]): void {\r\n this.state[event] = data;\r\n super.emit(event, data);\r\n }\r\n\r\n on<K extends keyof Events>(event: K, cb: Callback<Events, K>): UnSubscriber {\r\n if (this.state[event]) cb(this.state[event]);\r\n\r\n return super.on(event, cb);\r\n }\r\n\r\n once<K extends keyof Events>(\r\n event: K,\r\n cb: Callback<Events, K>,\r\n ): UnSubscriber {\r\n if (this.state[event]) {\r\n cb(this.state[event]);\r\n\r\n /**\r\n * Given that the information has already been sent, the subscription is not necessary\r\n */\r\n return () => {};\r\n }\r\n\r\n return super.once(event, cb);\r\n }\r\n\r\n /**\r\n * Retrieves the stored state for a given event\r\n */\r\n getState<K extends keyof Events>(event: K) {\r\n return this.state[event];\r\n }\r\n\r\n /**\r\n * Just an alias for emit, with the advantage that can be called with a callback as second parameter in which case behaves exactly as react's setState.\r\n */\r\n setState<K extends keyof Events>(\r\n event: K,\r\n data: SetStateAction<Events[K]>,\r\n ): void {\r\n const actualData = isSetter(data) ? data(this.getState(event)) : data;\r\n\r\n this.emit(event, actualData);\r\n }\r\n\r\n /**\r\n * Allows to consume an event stream as a real time updated state\r\n */\r\n useState = <K extends keyof Events>(event: K) => {\r\n return useSubscription({\r\n getInitialState: () => this.state[event],\r\n makeSubscription: (setState) => {\r\n return this.on(event, setState);\r\n },\r\n });\r\n };\r\n\r\n useStateSelector = <K extends keyof Events, Selected>(\r\n event: K,\r\n selector: Selector<Events[K], Selected>,\r\n comparator: Comparator<Selected> = Object.is,\r\n ) => {\r\n const previousSelection = useRef<Selected | null>(null);\r\n return useSubscription({\r\n getInitialState: () => selector(this.state[event]),\r\n makeSubscription: (setState) => {\r\n return this.on(event, () => {\r\n const selection = selector(this.state[event]);\r\n\r\n if (!comparator(selection, previousSelection.current as Selected)) {\r\n setState(selection);\r\n }\r\n });\r\n },\r\n });\r\n };\r\n}\r\n","import { SetStateAction } from 'react';\r\nimport { Map } from './EventEmitter';\r\nimport { StatefulEmitter, isSetter } from './StatefulEmitter';\r\n\r\ntype BouncingMap<Events extends Map> = {\r\n [K in keyof Events]: number;\r\n};\r\n\r\nconst NullObject = Symbol('NullObject');\r\n\r\ntype ThrottlingMap<Events extends Map> = {\r\n [K in keyof Events]: Events[K] | typeof NullObject;\r\n};\r\n\r\ntype ThrottlingMarkers<Events extends Map> = {\r\n [K in keyof Events]: boolean;\r\n};\r\n\r\nexport type DebounceOptions = Partial<{ timing: number }>;\r\n\r\nexport type ThrottleOptions = Partial<{\r\n emitOnStart?: boolean;\r\n timing: number;\r\n}>;\r\n\r\n/**\r\n * @public\r\n *\r\n * The BouncingEmitter class is an extension of EventEmitter which adds debouncing and throttling functionality.\r\n *\r\n * @typeParam — Events - An extension of Map where the key is the event name and the value is the type of data associated with that event.\r\n */\r\nexport class BouncingEmitter<\r\n Events extends Map,\r\n> extends StatefulEmitter<Events> {\r\n protected bouncingTimeouts = {} as BouncingMap<Events>;\r\n\r\n protected defaultTiming = 100;\r\n\r\n /**\r\n * Debounces a event emit with until there is no call to the emit methods by (timing)ms. Take the following event throttling, where each E is a call to this method and each character represents 20ms:\r\n *\r\n * E_E_E_E_E_E_E_E_E\r\n *\r\n * If timing is configured to 100ms, which is the default, the emission will occur as follows:\r\n *\r\n * _____________________E\r\n */\r\n debounce<K extends keyof Events>(\r\n event: K,\r\n data: Events[K],\r\n configuration?: DebounceOptions,\r\n ) {\r\n clearTimeout(this.bouncingTimeouts[event]);\r\n this.bouncingTimeouts[event] = setTimeout(() => {\r\n this.emit(event, data);\r\n }, configuration?.timing ?? this.defaultTiming) as unknown as number;\r\n }\r\n\r\n /**\r\n * Throttles a event emit with the warranty that the data will be emitted at most every (timing)ms. Take the following event throttling, where each E is a call to this method and each character represents 20ms:\r\n *\r\n * E_E_E_E_E_E_E_E_E\r\n *\r\n * If timing is configured to 100ms, which is the default, the emission will occur as follows:\r\n *\r\n * ____E____E____E______E\r\n *\r\n * @param configuration.emitOnStart - Emits an event on the first call to throttle when no pending throttle is stored. **If emitOnStart is true and an only call to throttle is made, it will emit an only event.**\r\n */\r\n\r\n protected throttleData = {} as ThrottlingMap<Events>;\r\n protected throttleEmittedOnInit = {} as ThrottlingMarkers<Events>;\r\n throttle<K extends keyof Events>(\r\n event: K,\r\n data: Events[K],\r\n configuration?: ThrottleOptions,\r\n ) {\r\n if (!this.throttleEmittedOnInit[event] && configuration?.emitOnStart) {\r\n this.throttleEmittedOnInit[event] = true;\r\n setTimeout(() => {\r\n this.throttleEmittedOnInit[event] = false;\r\n }, configuration?.timing ?? this.defaultTiming);\r\n this.emit(event, data);\r\n } else if (!configuration?.emitOnStart) {\r\n if (\r\n this.throttleData[event] === NullObject ||\r\n !(event in this.throttleData)\r\n ) {\r\n setTimeout(() => {\r\n this.emit(event, this.throttleData[event] as Events[K]);\r\n this.throttleData[event] = NullObject;\r\n }, configuration?.timing ?? this.defaultTiming);\r\n }\r\n this.throttleData[event] = data;\r\n }\r\n }\r\n\r\n /**\r\n * This method is a mix between setState and debounce\r\n */\r\n setStateDebounced<K extends keyof Events>(\r\n event: K,\r\n data: SetStateAction<Events[K]>,\r\n configuration?: DebounceOptions,\r\n ): void {\r\n const actualData = isSetter(data) ? data(this.getState(event)) : data;\r\n\r\n this.debounce(event, actualData, configuration);\r\n }\r\n\r\n /**\r\n * This method is a mix between setState and throttle\r\n */\r\n setStateThrottled<K extends keyof Events>(\r\n event: K,\r\n data: SetStateAction<Events[K]>,\r\n configuration?: ThrottleOptions,\r\n ): void {\r\n const actualData = isSetter(data) ? data(this.getState(event)) : data;\r\n\r\n this.throttle(event, actualData, configuration);\r\n }\r\n}\r\n","import isFunction from 'lodash-es/isFunction';\nimport { TFocusRetriever } from './focusController';\nimport { debugDispatcher } from '../debug';\n\nconst historySize = 50;\n\n/**\n * The GlobalFocus helper keeps a list of the last focused elements and allows\n * to retrieve the last focused element which matches against a query selector.\n */\nexport const globalFocus = new (class {\n focused: (HTMLElement | TFocusRetriever)[] = [];\n\n #onFocusCallbacks: (() => unknown)[] = [];\n\n offFocus(cb: () => unknown) {\n this.#onFocusCallbacks = this.#onFocusCallbacks.filter(\n (current) => current !== cb,\n );\n }\n\n onFocus(cb: () => unknown) {\n this.#onFocusCallbacks.push(cb);\n\n return () => {\n this.offFocus(cb);\n };\n }\n\n constructor() {\n debugDispatcher.on(\n 'focusHistory',\n () => {\n console.info(this.focused);\n },\n 'Muestra el historial de elementos que recibieron foco.',\n );\n }\n\n inDocument(el: HTMLElement | TFocusRetriever) {\n return (\n el instanceof Function ||\n (el instanceof HTMLElement && el.offsetParent !== null)\n );\n }\n\n set focus(element: HTMLElement | TFocusRetriever) {\n this.focused = this.focused.filter((el) => {\n const existsInDocument = this.inDocument(el) && element !== el;\n\n return existsInDocument;\n });\n this.focused.unshift(element);\n if (this.focused.length > historySize) {\n this.focused = this.focused.splice(0, historySize);\n }\n\n this.#onFocusCallbacks.forEach((cb) => cb());\n }\n\n get list() {\n return [...this.focused];\n }\n\n /**\n * @param querySelector A query selector against which the element should match\n * @returns The last HTMLElement if no querySelector argument provided or else, the last which matches\n * against that query selector.\n * */\n last(querySelector?: string, omit = 0) {\n if (querySelector)\n for (let i = omit; i <= this.focused.length; i++) {\n const storedElement = this.focused[i];\n const element =\n // eslint-disable-next-line no-nested-ternary\n (storedElement as HTMLElement)?.id !== undefined\n ? (storedElement as HTMLElement)\n : isFunction(storedElement)\n ? storedElement(false)\n : null;\n\n if (\n element &&\n this.inDocument(element) &&\n element.matches &&\n element.matches(querySelector)\n )\n return element;\n }\n else return this.focused[this.focused.length - 1];\n return null;\n }\n})();\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useState } from 'react';\nimport { useMount } from '../hooks';\nimport { TId } from '../types';\n\nfunction upper(s: string) {\n return `${s.charAt(0).toUpperCase()}${s.slice(1)}`;\n}\n\ntype StatefulStoreUnsuscriber = () => void;\n\nexport type StatefulStoreUpdater<Props> = (currentProps: Props) => Props;\n\nexport type StatefulStoreUpdateProps<Props> =\n | StatefulStoreUpdater<Props>\n | Partial<Props>;\n\nfunction isUpdater<Props>(\n props: StatefulStoreUpdater<Props> | Partial<Props>,\n): props is StatefulStoreUpdater<Props> {\n return typeof props === 'function';\n}\n\n/**\n * Clase facilitadora del uso de StatefulStore. Es un pequeño almacen que\n * permite actualizar sus propiedades y sabe cómo sincronizarse con el store de\n * modo que los cambios se propaguen según corresponda.\n */\nexport abstract class BasicStoredElement<\n Props extends Record<string, unknown>,\n> {\n abstract getId(): TId;\n\n #onUpdateCbs: (() => void)[] = [];\n onUpdate(cb: () => void): StatefulStoreUnsuscriber {\n this.#onUpdateCbs.push(cb);\n\n return () => {\n this.#onUpdateCbs = this.#onUpdateCbs.filter((current) => current !== cb);\n };\n }\n\n props: Props = {} as Props;\n constructor(props: Props) {\n this.props = props;\n }\n\n protected shoutUpdates = () => {\n this.#onUpdateCbs.forEach((current) => current());\n };\n\n update(newProps: StatefulStoreUpdateProps<Props>) {\n const actualNewProps = isUpdater(newProps)\n ? newProps(this.props)\n : newProps;\n\n this.props = { ...this.props, ...actualNewProps };\n this.shoutUpdates();\n }\n\n useProps = () => {\n const [props, setState] = useState(this.props);\n\n useMount(() => {\n setState({ ...this.props });\n\n return this.onUpdate(() => {\n setState({ ...this.props });\n });\n });\n\n return props;\n };\n}\n\n/**\n * Son las acciones de adición del store.\n */\ntype AddActions<T extends Record<string, BasicStoredElement<any>>> = {\n [P in keyof T as `add${Capitalize<string & P>}`]: (el: T[P]) => void;\n};\n\n/**\n * Acciones de vaciado del store.\n */\ntype EmptyActions<T extends Record<string, BasicStoredElement<any>>> = {\n [P in keyof T as `empty${Capitalize<string & P>}`]: () => void;\n};\n\n/**\n * Acciones de removido del store.\n */\ntype RemoveActions<T extends Record<string, BasicStoredElement<any>>> = {\n [P in keyof T as `remove${Capitalize<string & P>}`]: (id: TId) => void;\n};\n\ntype UpdateListActions<T extends Record<string, BasicStoredElement<any>>> = {\n [P in keyof T as `update${Capitalize<string & P>}List`]: (\n newList: T[P],\n ) => void;\n};\n\n/**\n * Conjunto de acciones disponibles del store\n */\ntype ActionMethods<T extends Record<string, BasicStoredElement<any>>> = {\n actions: AddActions<T> &\n EmptyActions<T> &\n RemoveActions<T> &\n UpdateListActions<T>;\n};\n\n/**\n * Método que permite obtener el listado de elementos de un tipo.\n */\ntype GetStateActions<T extends Record<string, BasicStoredElement<any>>> = {\n [P in keyof T as `get${Capitalize<string & P>}State`]: () => T[P][];\n};\n\n/**\n * Método que permite conocer las propiedades de un elemento.\n */\ntype GetItemActions<T extends Record<string, BasicStoredElement<any>>> = {\n [P in keyof T as `get${Capitalize<string & P>}`]: (id: TId) => T[P];\n};\n\ntype UpdateItemActions<T extends Record<string, BasicStoredElement<any>>> = {\n [P in keyof T as `update${Capitalize<string & P>}`]: (\n id: TId,\n newProps: StatefulStoreUpdateProps<T[P]['props']>,\n ) => void;\n};\n\n/**\n * Conjunto de métodos que permiten acceder al estado en un momento\n * determinado.\n */\ntype StateMethods<T extends Record<string, BasicStoredElement<any>>> = {\n state: GetStateActions<T> & GetItemActions<T> & UpdateItemActions<T>;\n};\n\n/**\n * Es el hook encargado de permitir la escucha de listado de elementos y sus\n * propiedades.\n */\ntype HookUseState<T extends Record<string, BasicStoredElement<any>>> = {\n [P in keyof T as `use${Capitalize<string & P>}`]: () => T[P][];\n};\n\n/**\n * Es el hook encargado de permitir la escucha de listado de elementos\n */\ntype HookUseList<T extends Record<string, BasicStoredElement<any>>> = {\n [P in keyof T as `use${Capitalize<string & P>}List`]: () => T[P][];\n};\n\n/**\n * Es el hook encargado de permitir la escucha de propiedades de un elemento\n */\ntype HookUseStateById<T extends Record<string, BasicStoredElement<any>>> = {\n [P in keyof T as `use${Capitalize<string & P>}ById`]: /**\n * Cada hook permite conocer el listado de elementos, reflejando la\n * actualización sobre éstos en tiempo real.\n */ (id: TId) => T[P] | undefined;\n};\n\n/**\n * Conjunto de hooks del store.\n */\ntype HooksMethods<T extends Record<string, BasicStoredElement<any>>> = {\n hooks: HookUseState<T> & HookUseStateById<T> & HookUseList<T>;\n};\n\n/**\n * Es la suscripción encargada de permitir la escucha de propiedades de un\n * elemento\n */\ntype SuscribeById<T extends Record<string, BasicStoredElement<any>>> = {\n [P in keyof T as `change${Capitalize<string & P>}Element`]: (\n id: TId,\n cb: (props: T[P]) => unknown,\n ) => StatefulStoreUnsuscriber;\n};\n\n/**\n * Es la suscripción encaragada de permitir la escucha de cambios en la lista y\n * las propiedades de sus elementos.\n */\ntype SuscribeToListChange<T extends Record<string, BasicStoredElement<any>>> = {\n [P in keyof T as `change${Capitalize<string & P>}`]: (\n cb: (props: T[P][]) => unknown,\n ) => StatefulStoreUnsuscriber;\n};\n\n/**\n * Es la suscripción encaragada de permitir la escucha de cambios en la\n * cantidad de elementos de la lista, pero no en las propiedades de los\n * elementos.\n */\ntype SuscribeToListCountChange<\n T extends Record<string, BasicStoredElement<any>>,\n> = {\n [P in keyof T as `change${Capitalize<string & P>}Ammount`]: (\n cb: (props: T[P][]) => unknown,\n ) => StatefulStoreUnsuscriber;\n};\n\ntype SuscribeMethods<T extends Record<string, BasicStoredElement<any>>> = {\n on: SuscribeById<T> & SuscribeToListChange<T> & SuscribeToListCountChange<T>;\n};\n\ntype InitialStates<T extends Record<string, BasicStoredElement<any>>> = {\n [P in keyof T as `${string & P}State`]: T[P][];\n};\ntype TPeople = { name: string };\nclass People extends BasicStoredElement<TPeople> {\n getId(): TId {\n return this.props.name;\n }\n}\n\nconst r = makeStatefulStore({\n people: People.prototype,\n});\n\nr.actions.addPeople;\nr.actions.emptyPeople;\nr.actions.removePeople;\nr.actions.updatePeopleList;\nr.hooks.usePeople;\nr.hooks.usePeopleById;\nr.hooks.usePeopleList;\nr.on.changePeople;\nr.on.changePeopleAmmount;\nr.on.changePeopleElement;\nr.state.getPeople;\nr.state.getPeopleState;\nr.state.updatePeople;\n\n/**\n * Este store permite mantener `N` listados de objetos y por cada tipo de\n * objeto ofrece métodos para agregar, eliminar, obtener uno, obtener todos y\n * un hook para conocer el listado en tiempo real.\n * \n * **Métodos disponibles**\n * \n * - **action.addXXX**: Agrega un elemento de tipo XXX a la lista.\n * - **action.emptyXXX**: Vacía el listado de tipo XXX.\n * - **action.removeXXX**: Elimina un elemento de tipo XXX de la lista.\n * - **action.updateXXXList**: Permite actualizar toda la lista en una sola\n * acción. - **hooks.useXXX**: Permite conocer el listado de elementos y el\n * cambio\n * en sus propiedades en tiempo real. \n * - **hooks.useXXXById**: Permite conocer los cambios a un elemento de la\n * lista en tiempo real. \n * - **hooks.useXXXList**: Permite conocer el listado de\n * elementos pero no reacciona a los cambios en las propiedades de los\n * elementos. \n * - **on.changeXXX**: Permite suscribirse al listado de elementos y\n * cambios en sus propiedades.\n * - **on.changeXXXAmmount**: Permite suscribirse\n * al listado de elementos, sin tomar en cuenta el cambio en las propiedades\n * de sus items.\n * - **on.changeXXXElement**: Permite suscribirse al cambio de\n * propiedades de un ítem particular\n * - **state.getXXX**: Permite obtener el\n * esatdo de un elemento particular de la lista.\n * - **state.getXXXState**:\n * Permite obtener el estado del listado completo de un tipo de elementos.\n * - **state.updateXXX**: Es un atajo para state.getXXX(id).update\n * \n * La funcionalidad de actualización se implementa en el objeto almacenado y es\n * comunicada en forma automática al store, de forma que el store no conoce\n * solamente cuántos y cuáles elementos hay almacenados, sino que además refleja\n * en tiempo real el estado de sus propiedades.\n * \n * @example\n * \n type TPeople = { name: string };\n class People extends BasicStoredElement<TPeople> {\n getId(): TId {\n return this.props.name;\n }\n }\n\n class Schedule extends BasicStoredElement<{ day: string; task: string }>\n {\n getId() {\n return this.props.day;\n }\n }\n\n const r = makeStatefulStore(\n {\n people: People.prototype,\n schedules: Schedule.prototype,\n },\n {\n peopleState: [new People({ name: 'A' }), new People({ name: 'B' })],\n },\n );\n\n const p = r.hooks.usePeople();\n p[0].props.name;\n\n r.hooks.usePeople();\n\n r.actions.removePeople('asdf');\n\n r.actions.addPeople(new People({ name: 'asdf' }));\n r.actions.removePeople('asdf');\n\n r.state.getPeopleState();\n const pep = r.state.getPeople('asdf')\n\n const ph = r.hooks.usePeople();\n const sch = r.hooks.useSchedules();\n */\nexport function makeStatefulStore<\n T extends Record<string, BasicStoredElement<any>>,\n>(entries: T, initialStates?: Partial<InitialStates<T>>) {\n const hookUseState = {} as HookUseState<T>;\n const hookUseList = {} as HookUseList<T>;\n const hookUseStateById = {} as HookUseStateById<T>;\n\n const suscribeById = {} as SuscribeById<T>;\n const suscribeToList = {} as SuscribeToListChange<T>;\n const suscribeToListCount = {} as SuscribeToListCountChange<T>;\n\n const addActions = {} as AddActions<T>;\n const emptyActions = {} as EmptyActions<T>;\n const removeActions = {} as RemoveActions<T>;\n const updateListActions = {} as UpdateListActions<T>;\n\n const getItemActions = {} as GetItemActions<T>;\n const getStateActions = {} as GetStateActions<T>;\n const updateItemActions = {} as UpdateItemActions<T>;\n\n Object.keys(entries).forEach((name) => {\n /**\n * Make store\n */\n const initialStateKey = `${upper(name)}State` as keyof InitialStates<T>;\n let store = {} as Record<string, T[typeof name]>;\n const initialState = initialStates?.[initialStateKey] as T[typeof name][];\n initialState?.forEach((current) => {\n store[current.getId()] = current;\n });\n\n /** Make event handlers */\n let listStateChangeHandlers: (() => void)[] = [];\n /**\n * Este método avisa acerca de un cambio en la cantidad de elementos o de\n * un cambio en las propiedades de algún elemento.\n */\n function shoutListStateChange() {\n listStateChangeHandlers.forEach((current) => current());\n }\n\n const elementChangeHandlers: Record<TId, (() => void)[]> = {};\n /**\n * Este método avisa acerca de un cambio en las propiedades de un elemento.\n */\n function shoutListElementChange(id: TId) {\n elementChangeHandlers[id]?.forEach((current) => current());\n }\n\n let listCountChangeHandlers: (() => void)[] = [];\n /**\n * Este método avisa acerca de un cambio en la cantidad de elementos\n */\n function shoutListCountChange() {\n listCountChangeHandlers.forEach((current) => current());\n }\n\n const onUpdateElementSuscriptions: Record<string, () => void> = {};\n\n /**\n *\n * Make actions\n *\n **/\n\n const addKey = `add${upper(name)}` as keyof AddActions<T>;\n /**\n * La acción de agregado del store. Agrega elementos y notifica tanto a los\n * listeners específicos del elemento como a los que escuchan el listado de\n * elementos.\n */\n addActions[addKey] = ((newElement: T[typeof name]) => {\n let elId = newElement.getId();\n let lastProps = { ...newElement.props };\n store[elId] = newElement as T[typeof name];\n const suscription = newElement.onUpdate(() => {\n const id = newElement.getId();\n\n if (id !== elId) {\n if (store[id]) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n newElement.update(lastProps);\n throw new Error(\n `Cannot set new id ${id} because it already exists`,\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete store[elId];\n store[id] = newElement;\n\n elId = id;\n lastProps = newElement.props;\n }\n\n shoutListElementChange(id);\n shoutListStateChange();\n });\n onUpdateElementSuscriptions[newElement.getId()] = suscription;\n shoutListStateChange();\n shoutListCountChange();\n shoutListElementChange(elId);\n }) as AddActions<T>[typeof addKey];\n\n /**\n * Acción de borrado completo. Vacía el store y avisa a todos los\n * listeners, incluyendo los que escuchan las propiedades de un elemento\n * particular.\n */\n const emptyKey = `empty${upper(name)}` as keyof EmptyActions<T>;\n emptyActions[emptyKey] = (() => {\n Object.values(onUpdateElementSuscriptions).forEach((current) =>\n current(),\n );\n store = {};\n shoutListCountChange();\n shoutListStateChange();\n Object.keys(elementChangeHandlers).forEach((current) =>\n shoutListElementChange(current),\n );\n }) as EmptyActions<T>[typeof emptyKey];\n\n /**\n * Elimina un elemento y avisa al store general y particular.\n */\n const removeKey = `remove${upper(name)}` as keyof RemoveActions<T>;\n removeActions[removeKey] = ((id: TId) => {\n onUpdateElementSuscriptions[id]?.();\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete store[id];\n shoutListCountChange();\n shoutListStateChange();\n shoutListElementChange(id);\n }) as RemoveActions<T>[typeof removeKey];\n\n const updateListKey = `update${upper(\n name,\n )}List` as keyof UpdateListActions<T>;\n updateListActions[updateListKey] = ((list: T[typeof name]) => {\n store[name] = list;\n shoutListCountChange();\n shoutListStateChange();\n }) as UpdateListActions<T>[typeof updateListKey];\n\n /**\n * Permite obtener el estado del listado completo de un tipo de elementos.\n */\n const getStateKey = `get${upper(name)}State` as keyof GetStateActions<T>;\n getStateActions[getStateKey] = (() => {\n return Object.values(store) as T[typeof name][];\n }) as GetStateActions<T>[typeof getStateKey];\n const getState = getStateActions[getStateKey] as () => T[typeof name][];\n\n /**\n * Permite obtener el estado de un elemento en particular.\n */\n const getItemKey = `get${upper(name)}` as keyof GetItemActions<T>;\n getItemActions[getItemKey] = ((id: TId) => {\n return store[id] as T[typeof name];\n }) as GetItemActions<T>[typeof getItemKey];\n\n /**\n * Permite actualizar un elemento\n */\n const updateItemKey = `update${upper(name)}` as keyof UpdateItemActions<T>;\n updateItemActions[updateItemKey] = ((\n id: TId,\n newProps: StatefulStoreUpdateProps<T[typeof name]>,\n ) => {\n store[id].update(newProps);\n }) as UpdateItemActions<T>[typeof updateItemKey];\n\n const hookUseStateKey = `use${upper(name)}` as keyof HookUseState<T>;\n /**\n * Este hook permite conocer el estado de todos los elementos del listado\n * en tiempo real.\n */\n hookUseState[hookUseStateKey] = (() => {\n const [state, setState] = useState(getState() as T[typeof name][]);\n\n useMount(() => {\n setState(getState() as T[typeof name][]);\n\n const eventHandler = () => {\n setState(getState() as T[typeof name][]);\n };\n\n listStateChangeHandlers.push(eventHandler);\n\n return () => {\n listStateChangeHandlers = listStateChangeHandlers.filter(\n (current) => current !== eventHandler,\n );\n };\n });\n\n return state;\n }) as unknown as HookUseState<T>[typeof hookUseStateKey];\n\n const hookUseListKey = `use${upper(name)}List` as keyof HookUseList<T>;\n /**\n * Este hook permite conocer el listado de elementos en tiempo real, sin\n * preocuparse por el cambio de propiedades.\n */\n hookUseList[hookUseListKey] = (() => {\n const [state, setState] = useState(getState() as T[typeof name][]);\n\n useMount(() => {\n setState(getState() as T[typeof name][]);\n\n const eventHandler = () => {\n setState(getState() as T[typeof name][]);\n };\n\n listCountChangeHandlers.push(eventHandler);\n\n return () => {\n listCountChangeHandlers = listCountChangeHandlers.filter(\n (current) => current !== eventHandler,\n );\n };\n });\n\n return state;\n }) as unknown as HookUseList<T>[typeof hookUseListKey];\n\n const hookUseStateByIdKey = `use${upper(\n name,\n )}ById` as keyof HookUseStateById<T>;\n\n hookUseStateById[hookUseStateByIdKey] = ((id: TId) => {\n const [state, setState] = useState({ obj: store[id] });\n\n useMount(() => {\n setState({ obj: store[id] });\n\n const eventHandler = () => {\n setState({ obj: store[id] });\n };\n\n if (!elementChangeHandlers[id]) elementChangeHandlers[id] = [];\n elementChangeHandlers[id].push(eventHandler);\n\n return () => {\n elementChangeHandlers[id] = elementChangeHandlers[id].filter(\n (current) => current !== eventHandler,\n );\n };\n });\n\n return state.obj;\n }) as unknown as HookUseStateById<T>[typeof hookUseStateByIdKey];\n /**\n * Esta suscripción permite conocer el estado de un único elemento en\n * tiempo real.\n */\n const onChangeElementKey = `change${upper(\n name,\n )}Element` as keyof SuscribeById<T>;\n suscribeById[onChangeElementKey] = ((\n id: string,\n cb: (props: T[typeof name]) => unknown,\n ) => {\n if (!elementChangeHandlers[id]) elementChangeHandlers[id] = [];\n\n const innerCb = () => {\n cb(store[id]);\n };\n elementChangeHandlers[id].push(innerCb);\n\n return () => {\n elementChangeHandlers[id] = elementChangeHandlers[id].filter(\n (current) => current !== innerCb,\n );\n };\n }) as SuscribeById<T>[typeof onChangeElementKey];\n\n const onChangeListKey = `change${upper(\n name,\n )}` as keyof SuscribeToListChange<T>;\n /**\n * Esta suscripción permite conocer el estado de la lista en tiempo real,\n * incluyendo cambios en los elementos.\n */\n suscribeToList[onChangeListKey] = ((\n cb: (props: T[typeof name][]) => unknown,\n ) => {\n const innerCb = () => {\n cb(getState());\n };\n listStateChangeHandlers.push(innerCb);\n\n return () => {\n listStateChangeHandlers = listStateChangeHandlers.filter(\n (current) => current !== innerCb,\n );\n };\n }) as SuscribeToListChange<T>[typeof onChangeListKey];\n\n const onChangeListCountKey = `change${upper(\n name,\n )}Ammount` as keyof SuscribeToListCountChange<T>;\n /**\n * Esta suscripción permite conocer el estado de la lista en tiempo real,\n * sin incluir los cambios en los elementos.\n */\n suscribeToListCount[onChangeListCountKey] = ((\n cb: (props: T[typeof name][]) => unknown,\n ) => {\n const innerCb = () => {\n cb(getState());\n };\n listCountChangeHandlers.push(innerCb);\n\n return () => {\n listCountChangeHandlers = listCountChangeHandlers.filter(\n (current) => current !== innerCb,\n );\n };\n }) as SuscribeToListCountChange<T>[typeof onChangeListCountKey];\n });\n\n const actions = Object.assign(\n {},\n addActions,\n removeActions,\n emptyActions,\n updateListActions,\n ) as ActionMethods<T>['actions'];\n\n const hooks = Object.assign({}, hookUseState, hookUseStateById, hookUseList);\n\n const on = Object.assign(\n {},\n suscribeById,\n suscribeToList,\n suscribeToListCount,\n );\n\n const state = Object.assign(\n {},\n getStateActions,\n getItemActions,\n updateItemActions,\n );\n\n return Object.assign(\n {},\n { hooks },\n { actions },\n { state },\n { on },\n ) as ActionMethods<T> &\n HooksMethods<T> &\n StateMethods<T> &\n SuscribeMethods<T>;\n}\n","import { getWindow } from '../dom/getWindow';\r\n\r\nconst persistentStorage = new Proxy<{\r\n remove(prop: string): unknown;\r\n [key: string]: unknown;\r\n}>(\r\n {\r\n remove(prop) {\r\n localStorage.removeItem(prop);\r\n },\r\n },\r\n {\r\n get(_, prop) {\r\n try {\r\n const value = localStorage.getItem(String(prop));\r\n if (!value) return undefined;\r\n return JSON.parse(value) as unknown;\r\n } catch {\r\n return undefined;\r\n }\r\n },\r\n set(_, prop, value) {\r\n localStorage.setItem(String(prop), JSON.stringify(value));\r\n return true;\r\n },\r\n },\r\n);\r\n\r\ndeclare global {\r\n interface Window {\r\n persistentStorage: typeof persistentStorage;\r\n }\r\n}\r\n\r\nif (typeof window !== 'undefined') {\r\n getWindow().persistentStorage = persistentStorage;\r\n}\r\n\r\nexport default persistentStorage;\r\n","import { useCallback, useEffect, useMemo, useState } from 'react';\nimport { EventEmitter } from '../events/EventEmitter';\n\nconst localStorageController =\n new (class LocalSctorageController extends EventEmitter<{\n update: {\n prop: string;\n value: unknown;\n };\n }> {})();\n\n/**\n * @param prop este nombre define el nombre del localStorage, las modificaciones a este parametro no van a tener efecto.\n */\nexport function useLocalStorage<T>(\n prop: string,\n defaultValue?: T,\n): [T, (newValue: T) => void] {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const actualProp = useMemo(() => prop, []);\n const storageValue = useMemo(\n () => localStorage.getItem(actualProp) as string,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n const [value, setValue] = useState<T>(\n storageValue ? (JSON.parse(storageValue) as T) : (defaultValue as T),\n );\n useEffect(() => {\n setValue(JSON.parse(storageValue) as T);\n return localStorageController.on('update', (ev) => {\n if (ev.prop === actualProp) {\n setValue(ev.value as T);\n localStorage.setItem(actualProp, JSON.stringify(ev.value));\n }\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return [\n value,\n useCallback(\n (newValue: T) => {\n localStorageController.emit('update', {\n prop: actualProp,\n value: newValue,\n });\n },\n [actualProp],\n ),\n ];\n}\n","export function awaitTime(ms: number) {\n return new Promise<void>((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n","import { computed, makeObservable, observable } from 'mobx';\r\n\r\ntype CB = () => void;\r\n\r\nexport class CancellablePromise<T> extends Promise<T> {\r\n constructor(\r\n executor: (\r\n resolve: (value: T) => void,\r\n reject: (reason?: any) => void,\r\n ) => void,\r\n public cancel: () => unknown,\r\n ) {\r\n super(executor);\r\n }\r\n}\r\n\r\nexport const cancellingToken = Symbol();\r\n\r\n/**\r\n * A simple semaphore implementation to control concurrency.\r\n * Limits the number of concurrent tasks that can run simultaneously.\r\n */\r\nexport class Semaphore {\r\n private current = 0;\r\n private queue: { resolve: CB; reject: CB }[] = [];\r\n\r\n /**\r\n * Creates a new instance of the Semaphore.\r\n *\r\n * @param concurrency - The maximum number of concurrent tasks allowed.\r\n */\r\n constructor(private concurrency: number) {\r\n makeObservable<Semaphore, 'current'>(this, {\r\n current: observable,\r\n isBusy: computed,\r\n });\r\n }\r\n\r\n public get isBusy() {\r\n return this.current > 0;\r\n }\r\n\r\n /**\r\n * Acquires a permit to run a task.\r\n *\r\n * If the number of currently acquired permits is less than the concurrency limit,\r\n * the promise resolves immediately. Otherwise, it is queued until a permit is released.\r\n *\r\n * @returns A promise that resolves when the permit has been acquired.\r\n */\r\n public async acquire(): Promise<void> {\r\n if (this.current < this.concurrency) {\r\n this.current++;\r\n return Promise.resolve();\r\n }\r\n\r\n let resolver: any = null;\r\n let rejecter: any = null;\r\n return new CancellablePromise<void>(\r\n (resolve, reject) => {\r\n resolver = resolve;\r\n rejecter = reject;\r\n this.queue.push({ resolve, reject });\r\n },\r\n () => {\r\n this.queue = this.queue.filter((c) => c.resolve !== resolver);\r\n rejecter(cancellingToken);\r\n },\r\n );\r\n }\r\n\r\n clear() {\r\n this.queue.forEach((c) => c.reject());\r\n this.queue.splice(0);\r\n }\r\n\r\n /**\r\n * Releases a previously acquired permit.\r\n *\r\n * If there are queued tasks waiting for a permit, the next one is dequeued and allowed to proceed.\r\n */\r\n public release() {\r\n this.current = Math.max(0, this.current - 1);\r\n this.queue.shift()?.resolve();\r\n }\r\n}\r\n","import { cancellingToken, Semaphore } from './semaphore';\r\n\r\nexport class Mutex extends Semaphore {\r\n constructor() {\r\n super(1);\r\n }\r\n\r\n async runExclusive<T>(cb: () => Promise<T>) {\r\n try {\r\n await this.acquire();\r\n const result = await cb();\r\n this.release();\r\n return result;\r\n } catch (t) {\r\n if (t !== cancellingToken) {\r\n throw t;\r\n }\r\n }\r\n }\r\n}\r\n","import { Mutex } from './mutex';\r\n\r\nexport type Task<T> = () => Promise<T>;\r\n\r\nexport class TasksQueue {\r\n private mutex = new Mutex();\r\n\r\n public get isBusy() {\r\n return this.mutex.isBusy;\r\n }\r\n\r\n clear() {\r\n this.mutex.clear();\r\n }\r\n\r\n async run<T>(task: Task<T>): Promise<T | undefined> {\r\n return await this.mutex.runExclusive<T>(async () => {\r\n return await task();\r\n });\r\n }\r\n}\r\n","import { makeObservable, observable } from 'mobx';\nimport { EventEmitter } from '../events';\nimport { Mutex } from '../synchronization';\n\nexport class Locker extends EventEmitter<{ releaseForFirstTime: null }> {\n private locks = 0;\n private hasReleased = false;\n private mutex = new Mutex();\n\n constructor() {\n super();\n\n makeObservable<Locker, 'locks'>(this, {\n locks: observable,\n });\n }\n\n get isLocked() {\n return this.locks > 0;\n }\n\n lock() {\n this.mutex.acquire().then(() => {\n this.locks++;\n });\n }\n\n unlock() {\n this.mutex.acquire().then(() => {\n this.locks--;\n if (!this.hasReleased && this.locks === 0) {\n this.emit('releaseForFirstTime', null);\n this.hasReleased = true;\n }\n });\n }\n}\n\nexport const screenLocker = new Locker();\n","export class ScrollLocker {\n private static locks = 0;\n\n private static evaluate() {\n Object.assign(document.body.style, {\n maxHeight: this.locks > 0 ? '100vh' : 'unset',\n overflow: this.locks > 0 ? 'hidden' : 'auto',\n paddingRight:\n this.locks > 0 &&\n document.body.scrollHeight > document.body.clientHeight\n ? '10px'\n : '0px',\n });\n }\n\n static lock() {\n this.locks++;\n this.evaluate();\n }\n static unlock() {\n this.locks--;\n this.evaluate();\n }\n}\n","import isFunction from 'lodash-es/isFunction';\r\nimport { TRequireOnlyOne } from '../types';\r\nimport { globalFocus } from './globalFocus';\r\nimport { customEvents, focusSelector } from '../dom';\r\nimport { persistentStorage } from '../storage';\r\nimport { noNaN } from '../number';\r\nimport { screenLocker } from '../lockers';\r\nimport { getWindow } from '../dom/getWindow';\r\n\r\ninterface IFocusProps {\r\n modalsContainerRetriever?: () => HTMLElement;\r\n notificationsContainerRetriever?: () => HTMLElement;\r\n}\r\n\r\nexport interface IOnFocusConfiguration {\r\n /**\r\n * El controlador emite un evento custom cuando se realiza foco, con la\r\n * intención de que los elementos colapsables se abran automáticamente. Si\r\n * este parámetro es pasado con false, se evita ese comportamiento.\r\n */\r\n dispatchCustomEvent?: boolean;\r\n /**\r\n * Cuando la pantalla está bloqueada con el spinner, el controlador no\r\n * intentará hacer foco, a menos que este parámetro se pase en true.\r\n */\r\n focusEvenWhenScreenLocked?: boolean;\r\n scrollIntoViewOptions?: ScrollIntoViewOptions;\r\n}\r\n\r\nexport const notificationsSelector = '.notification';\r\n\r\n/**\r\n * Al método focus.on se le puede pasar o bien un HTMLElement o bien una\r\n * función que implemente esta interfaz. Cuando se pasa una función, la misma\r\n * será invocada cada vez que se vaya a intentar una acción de foco.\r\n *\r\n * Si la función devuelve un elemento HTML, se intentará hacer foco sobre éste.\r\n *\r\n * Si la función devuelve null, ese intento será tomado como nulo y se volverá\r\n * a intentar luego del tiempo determinado.\r\n *\r\n * Si la función devuelve false, será eliminada de la cola de foco, lo que\r\n * significa que ya no se intentará hacer foco sobre este elemento. En cambio,\r\n * se continuará con los demás elementos de la cola o en caso de no haber\r\n * ninguno, con el último elemento que tuvo foco y aún esté presente en el\r\n * documento.\r\n */\r\nexport type TFocusRetriever = (\r\n isLastTry: boolean,\r\n) => HTMLElement | null | false;\r\n\r\ninterface IFocusQueryElement {\r\n element: HTMLElement | TFocusRetriever;\r\n configuration?: IOnFocusConfiguration;\r\n}\r\n\r\ndeclare global {\r\n interface Window {\r\n focusStatus: Record<string, unknown>;\r\n }\r\n}\r\n\r\ninterface IFocusCheck {\r\n currentInstruction: number;\r\n}\r\n\r\nexport const focus =\r\n typeof document !== 'undefined'\r\n ? new (class FocusController {\r\n #root: HTMLElement;\r\n\r\n #props: IFocusProps | undefined;\r\n\r\n constructor(root: HTMLElement, props?: IFocusProps) {\r\n this.#root = root;\r\n this.#props = props;\r\n\r\n getWindow().focusStatus = {};\r\n globalFocus.onFocus(() => {\r\n this.#resetInterval();\r\n });\r\n }\r\n\r\n afterNotificationFocus: IFocusQueryElement | undefined = undefined;\r\n\r\n #actualFocusQuery: IFocusQueryElement[] = [];\r\n\r\n #currentInstruction = 0;\r\n\r\n #focusDelay = 300;\r\n\r\n #focusRetries = 3;\r\n\r\n #focusTimeout = -1;\r\n\r\n #isIntervalRunning = false;\r\n\r\n set #focusQuery(value: IFocusQueryElement[]) {\r\n this.#actualFocusQuery = value;\r\n }\r\n\r\n get #focusQuery() {\r\n return new Proxy(this.#actualFocusQuery, {\r\n get: (target, key) => {\r\n if (key in target) {\r\n const prop = target[key as keyof typeof target];\r\n if (isFunction(prop))\r\n return (...props: unknown[]) => {\r\n const result = (\r\n target[key as keyof typeof target] as unknown as (\r\n ...methodProps: unknown[]\r\n ) => void\r\n ).bind(target, ...props)();\r\n return result;\r\n };\r\n return prop;\r\n }\r\n return undefined;\r\n },\r\n });\r\n }\r\n\r\n #checkInstruction(focusCheck: IFocusCheck) {\r\n return focusCheck.currentInstruction === this.#currentInstruction;\r\n }\r\n\r\n async #doFocus(\r\n HTMLElement: HTMLElement | TFocusRetriever,\r\n focusCheck: IFocusCheck,\r\n isLastTry: boolean,\r\n configuration?: IOnFocusConfiguration,\r\n ) {\r\n if (\r\n screenLocker.isLocked &&\r\n !configuration?.focusEvenWhenScreenLocked\r\n ) {\r\n return null;\r\n }\r\n const actualHTMLElement = isFunction(HTMLElement)\r\n ? HTMLElement(isLastTry)\r\n : HTMLElement;\r\n\r\n if (actualHTMLElement) {\r\n if ((actualHTMLElement as HTMLInputElement).disabled) return false;\r\n actualHTMLElement.focus();\r\n return new Promise<false | null | HTMLElement>((resolve) => {\r\n if (configuration?.dispatchCustomEvent !== false) {\r\n const customFocusEvent = new CustomEvent(customEvents.focus, {\r\n bubbles: true,\r\n });\r\n actualHTMLElement.dispatchEvent(customFocusEvent);\r\n }\r\n\r\n /**\r\n * Este setTimeout está colocado aquí para asegurarme de que se\r\n * propague correctamente el customEvent y los procesos de renderizado\r\n * asociados puedan ser ejecutados antes de proseguir con el proces de\r\n * foco.\r\n */\r\n setTimeout(() => {\r\n if (!this.#checkInstruction(focusCheck)) {\r\n resolve(false);\r\n return;\r\n }\r\n try {\r\n if (configuration?.scrollIntoViewOptions)\r\n actualHTMLElement?.scrollIntoView(\r\n configuration.scrollIntoViewOptions,\r\n );\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n setTimeout(() => {\r\n if (!this.#checkInstruction(focusCheck)) {\r\n resolve(false);\r\n } else if (document.activeElement?.tagName === 'IFRAME') {\r\n resolve(\r\n (\r\n document.activeElement as HTMLIFrameElement\r\n ).contentDocument?.contains(actualHTMLElement)\r\n ? actualHTMLElement\r\n : null,\r\n );\r\n } else\r\n resolve(\r\n document.activeElement === actualHTMLElement\r\n ? actualHTMLElement\r\n : null,\r\n );\r\n }, 0);\r\n }, 0);\r\n });\r\n }\r\n return actualHTMLElement;\r\n }\r\n\r\n #resetInterval() {\r\n clearTimeout(this.#focusTimeout);\r\n this.#focusTimeout = -1;\r\n this.#isIntervalRunning = false;\r\n this.#currentInstruction++;\r\n }\r\n\r\n async #runFocusInterval(\r\n focusElement?: IFocusQueryElement,\r\n internalCall?: boolean,\r\n ): Promise<false | HTMLElement> {\r\n if (\r\n !internalCall &&\r\n (this.#focusTimeout !== -1 || this.#isIntervalRunning)\r\n )\r\n return false;\r\n const currentInstruction: IFocusCheck = {\r\n currentInstruction: this.#currentInstruction,\r\n };\r\n this.#isIntervalRunning = true;\r\n return new Promise<false | HTMLElement>((resolve) => {\r\n const resolvePromise = async () => {\r\n const element = focusElement ?? this.#focusQuery.shift();\r\n\r\n if (element) {\r\n const hasFocused = await this.#doFocus(\r\n element.element,\r\n currentInstruction,\r\n element !== this.#focusQuery[0],\r\n element.configuration,\r\n );\r\n if (!this.#checkInstruction(currentInstruction)) {\r\n resolve(false);\r\n return;\r\n }\r\n if (hasFocused !== null && hasFocused !== false) {\r\n this.#actualFocusQuery = [];\r\n resolve(hasFocused);\r\n this.#isIntervalRunning = false;\r\n return;\r\n }\r\n if (hasFocused === false) {\r\n this.#actualFocusQuery = this.#actualFocusQuery.filter(\r\n (current) => current !== element,\r\n );\r\n }\r\n }\r\n\r\n if (!this.#checkInstruction(currentInstruction)) {\r\n resolve(false);\r\n return;\r\n }\r\n\r\n if (this.#actualFocusQuery.length > 0) {\r\n this.#focusTimeout = setTimeout(() => {\r\n const runInterval = async () => {\r\n const result = await this.#runFocusInterval(\r\n undefined,\r\n true,\r\n );\r\n resolve(result);\r\n this.#isIntervalRunning = true;\r\n };\r\n void runInterval();\r\n }, this.#focusDelay) as unknown as number;\r\n } else {\r\n const lastFocused = globalFocus.last(':not(body)');\r\n if (lastFocused) {\r\n const result = await this.#doFocus(\r\n lastFocused,\r\n currentInstruction,\r\n element !== this.#focusQuery[0],\r\n element?.configuration,\r\n );\r\n if (!this.#checkInstruction(currentInstruction)) {\r\n resolve(false);\r\n return;\r\n }\r\n if (result) resolve(result);\r\n else resolve(false);\r\n this.#isIntervalRunning = true;\r\n }\r\n resolve(false);\r\n this.#isIntervalRunning = true;\r\n }\r\n };\r\n void resolvePromise();\r\n });\r\n }\r\n\r\n /**\r\n * Da la instrucción de colocar el foco en el elemento provisto como\r\n * parámetro una vez que todas las notificaciones se hayan cerrado. En caso\r\n * de no existir notificaciones abiertas, hace foco en el elemento\r\n * directamente.\r\n */\r\n afterNotifications(\r\n element: HTMLElement | TFocusRetriever,\r\n configuration?: IOnFocusConfiguration,\r\n ) {\r\n if (!element) return;\r\n void this.on(element, configuration);\r\n }\r\n\r\n /**\r\n * Da la instrucción de colocar el foco en el elemento provisto como\r\n * parámetro luego de recargar la página.\r\n *\r\n * Los parámetros pasados serán ordenados en orden de importancia priorizando\r\n * en el siguiente orden:\r\n * - id\r\n * - name\r\n * - className\r\n * - selector\r\n */\r\n afterReload({\r\n className,\r\n id,\r\n name,\r\n selector,\r\n }: TRequireOnlyOne<{\r\n className: string;\r\n id: string;\r\n name: string;\r\n selector: string;\r\n }>) {\r\n persistentStorage.focusOnReload = [\r\n id ? `#${id}` : undefined,\r\n name ? `[name=\"${name}\"]` : undefined,\r\n className ? `.${className}` : undefined,\r\n selector,\r\n ]\r\n .filter((el) => el !== undefined)\r\n .join(',');\r\n }\r\n\r\n /**\r\n * Da la instrucción de colocar el foco el elemento pasado como parámetro.\r\n * Se puede pasar también una función que devuelva HTMLElement | false |\r\n * null.\r\n *\r\n * El segundo parámetro del método on es un objeto de tipo\r\n * ScrollIntoViewOptions, que permite modificar el comportamiento del scroll\r\n * a en el elemento.\r\n *\r\n * @see TFocusRetriever para más detalles sobre la función como parámetro.\r\n */\r\n async on(\r\n element: HTMLElement | TFocusRetriever,\r\n configuration?: IOnFocusConfiguration,\r\n ) {\r\n if (element) {\r\n const focusElement = {\r\n element,\r\n configuration,\r\n };\r\n for (let i = 0; i < this.#focusRetries; i++)\r\n this.#focusQuery.unshift(focusElement);\r\n\r\n this.#resetInterval();\r\n return this.#runFocusInterval(focusElement);\r\n }\r\n return false;\r\n }\r\n\r\n focusOnReload: string | null = null;\r\n\r\n restore() {\r\n void this.on(\r\n (globalFocus.last(':not(body), body#tinymce') as HTMLElement) ||\r\n (document.querySelector(focusSelector) as HTMLElement),\r\n );\r\n }\r\n\r\n init() {\r\n const modalsObserver = new MutationObserver((mutation) => {\r\n if (mutation[0].removedNodes.length === 0) return;\r\n this.afterNotifications(\r\n globalFocus.last(\r\n ':not(body):not(.notificationsView *), body#tinymce',\r\n ) as HTMLElement,\r\n );\r\n });\r\n const appModalsBox = (\r\n this.#props?.modalsContainerRetriever ??\r\n (() => this.#root.querySelector('#AppModals'))\r\n )();\r\n if (appModalsBox)\r\n modalsObserver.observe(appModalsBox, { childList: true });\r\n\r\n screenLocker.on('releaseForFirstTime', () => {\r\n if (persistentStorage.focusOnReload)\r\n this.focusOnReload = persistentStorage.focusOnReload as string;\r\n persistentStorage.focusOnReload = null;\r\n this.afterNotifications(() => {\r\n if (this.focusOnReload) {\r\n const initialFocusElement = document.querySelector(\r\n this.focusOnReload,\r\n );\r\n const scrollTop = noNaN(\r\n (\r\n window as unknown as Record<string, string>\r\n ).CURRENT_TAB?.split('~')[1],\r\n );\r\n if (document.scrollingElement)\r\n document.scrollingElement.scrollTop = scrollTop;\r\n return initialFocusElement as HTMLElement | null;\r\n }\r\n return false;\r\n });\r\n });\r\n }\r\n })(document.getElementById('root') as HTMLElement)\r\n : null;\r\n","import { useState } from 'react';\nimport { EventEmitter } from '../events/EventEmitter';\nimport { useMount } from '../hooks';\n\nexport type THistoryCount = {\n currentStep: number;\n stepCount: number;\n};\n\nexport type THistoryStep<T> = {\n content: T;\n} & THistoryCount;\n\nexport type THistoryStepChange<T> = THistoryCount &\n THistoryStep<T> & {\n fromPush?: boolean;\n hasPrevious: boolean;\n hasNext: boolean;\n };\n\nexport type THistoryConfiguration<T> = {\n initialContent?: T;\n maxLength: number;\n};\n\n/**\n * # Cómo usar el historial\n *\n * Es muy sencillo: se instancia con un callback que recibirá un método push\n * cada vez que una ventana se cierre. En esos momentos, el usuario del History\n * puede hacer push al estado.\n *\n * ## La mecánica\n *\n * - Instancio la clase y recibo el método push\n * - Cuando se realizan cambios significativos, llamo al método openWindow\n * - El método openWindow da una ventana de 350ms antes de llamar al callback\n * - Si durante esa ventana se vuelve a llamar a openWindow, la ventana se\n * resetea\n * - Si al llamar al callback, se hace push al estado, ese estado es propagado\n * mediante el hook y mediante el evento on('stepChange')\n * \n * ## Cómo escuchar cambios\n * \n * ```ts\n * this.history.on('stepChange', (data) => {\n if (!data.fromPush) this.update(data.content);\n });\n ```\n *\n * ## Back y forward\n *\n * El back y forward son dos métodos del history que hacen un stepChange y\n * emiten a través de on('stepChange') y el hook\n */\nexport class History<T> extends EventEmitter<{\n stepChange: THistoryStepChange<T>;\n}> {\n private autocloseTimeout = -1;\n private currentStep = 0;\n private content: T[] = [];\n private emitting = 0;\n protected enabled = true;\n private _isOpen = false;\n private timeoutMs = 350;\n private configuration: THistoryConfiguration<T>;\n\n constructor(\n onCloseWindow: (push: (newState: T) => void) => unknown,\n configuration?: Partial<THistoryConfiguration<T>>,\n ) {\n super();\n\n this.configuration = Object.assign({ maxLength: 15 }, configuration);\n if (configuration?.initialContent !== undefined) {\n this.content.push(configuration?.initialContent ?? (null as any));\n } else {\n this.currentStep = -1;\n }\n\n this.onCloseWindow = onCloseWindow;\n }\n\n private closeWindow = () => {\n if (this._isOpen) {\n this.onCloseWindow(this.push.bind(this));\n this._isOpen = false;\n }\n };\n\n private getEvent = () => {\n const stepCount = this.content.length - 1;\n const event = {\n content: this.content[this.currentStep],\n currentStep: this.currentStep,\n stepCount,\n hasNext: this.currentStep < stepCount,\n hasPrevious: this.currentStep > 0,\n };\n\n return event;\n };\n\n private onCloseWindow: (push: (newState: T) => void) => unknown;\n\n private push = (el: T) => {\n this.content = [...this.content.slice(0, this.currentStep + 1), el];\n this.content = this.content.slice(\n Math.max(\n 0,\n this.content.length - (this.configuration?.maxLength ?? Infinity),\n ),\n );\n this.currentStep = this.content.length - 1;\n this.shoutStepChange(true);\n };\n\n private shoutStepChange = (fromPush?: boolean) => {\n try {\n this.emit('stepChange', { ...this.getEvent(), fromPush });\n } catch (e) {\n console.error(e);\n }\n };\n\n hooks = {\n useCountChange: (onChange: (ev: THistoryStepChange<T>) => unknown) => {\n useMount(() => {\n onChange(this.getEvent());\n\n this.on('stepChange', () => {\n onChange(this.getEvent());\n });\n });\n },\n };\n\n back = () => {\n clearTimeout(this.autocloseTimeout);\n if (this.currentStep > 0) {\n this.currentStep -= 1;\n this.shoutStepChange();\n }\n };\n\n disable = () => {\n this.enabled = false;\n };\n\n emit<K extends 'stepChange'>(\n eventName: K,\n params?: THistoryStepChange<T>,\n ): void {\n this.emitting++;\n\n try {\n super.emit(eventName, params as THistoryStepChange<T>);\n } finally {\n this.emitting--;\n }\n }\n\n enable = () => {\n this.enabled = true;\n };\n\n forward = () => {\n clearTimeout(this.autocloseTimeout);\n if (this.currentStep < this.content.length - 1) {\n this.currentStep += 1;\n this.shoutStepChange();\n }\n };\n\n getContent() {\n return this.content;\n }\n\n get isOpen() {\n return this._isOpen;\n }\n\n openWindow = () => {\n if (!this.enabled || this.emitting !== 0) return;\n\n this._isOpen = true;\n\n clearTimeout(this.autocloseTimeout);\n this.autocloseTimeout = setTimeout(() => {\n this.closeWindow();\n }, this.timeoutMs) as unknown as number;\n };\n\n reset = () => {\n clearTimeout(this.autocloseTimeout);\n this.content = [];\n this.currentStep = 0;\n this.openWindow();\n };\n\n async runInWindow(cb: () => Promise<void>) {\n await cb();\n this.onCloseWindow(this.push.bind(this));\n }\n\n updateConfig = (newConfiguration: Partial<THistoryConfiguration<T>>) => {\n this.configuration = { ...this.configuration, ...newConfiguration };\n };\n\n useStep = () => {\n const [hasPrevious, setHasPrevious] = useState<\n Pick<THistoryStepChange<T>, 'hasNext' | 'hasPrevious' | 'currentStep'>\n >({ hasNext: false, hasPrevious: false, currentStep: this.currentStep });\n\n useMount(() => {\n return this.on('stepChange', (ev) => {\n setHasPrevious({\n currentStep: ev.currentStep,\n hasNext: ev.hasNext,\n hasPrevious: ev.hasPrevious,\n });\n });\n });\n\n return hasPrevious;\n };\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { createContext } from 'react';\nimport { TId } from '../types';\n\nexport type TMethod<CR> = CR extends (state: any, ...args: infer Action) => any\n ? (id: TId, ...args: Action) => unknown\n : () => unknown;\n\nexport type TMethods<State extends TMap, K extends any[] = any[]> = Record<\n string,\n (setState: TStateManager<State>, ...args: K) => void\n>;\n\nexport type TMethodsMap<OriginalMethods extends TMethods<any>> = {\n [Name in keyof OriginalMethods]: TMethod<OriginalMethods[Name]>;\n};\n\nexport type TEventsMap<OriginalEvents extends TMap> = {\n [Name in keyof OriginalEvents]: (args: OriginalEvents[Name]) => unknown;\n};\n\nexport type TEventsHandlers<OriginalEvents extends TMap> = Record<\n TId,\n {\n [Name in keyof OriginalEvents]?: {\n cb: (args?: OriginalEvents[Name]) => unknown;\n uniqueHookId: string;\n }[];\n }\n>;\n\nexport type TMap = Record<string, any>;\n\nexport type TStateManager<State> = (newState: Partial<State>) => void;\n\nexport type TUseEvents<Events extends TMap> = (\n handlers: Partial<TEventsMap<Events>>,\n) => void;\n\nexport const ImperativeComponentContext = createContext<{\n id: TId;\n eventsStore: TEventsHandlers<any>;\n}>(\n {} as {\n id: TId;\n eventsStore: TEventsHandlers<any>;\n },\n);\n\nexport type TFireEvent<Events extends TMap> = <K extends keyof Events>(\n id: TId,\n ev: K,\n args: Events[K] extends void ? undefined : Events[K],\n) => void;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-argument */\nimport { FC, useMemo, useState } from 'react';\nimport {\n TMap,\n TMethods,\n TMethodsMap,\n TFireEvent,\n TStateManager,\n TMethod,\n TEventsHandlers,\n ImperativeComponentContext,\n} from './types';\nimport { TId } from '../types';\n\n/**\n * Permite la creación de componentes multi-instancia que ofrecen métodos para\n * trabajar sobre su estado o su comportamiento interno.\n * \n * @example\n * const [methods, events, Imperative] = makeImperativeComponent<\n {\n age: number;\n },\n { blink: number }\n >()(\n {} as {\n name: string;\n },\n {\n setName(setState, name: string) {\n setState({ name });\n },\n },\n ({ age, name, useEvents }) => {\n const [isBlinking, setIsBlinking] = useState(false);\n\n useEvents({\n blink() {\n setInterval(() => setIsBlinking((current) => !current), 300);\n },\n });\n\n return (\n <Box sx={{ background: isBlinking ? 'red' : undefined }}>\n {age} {name}\n </Box>\n );\n },\n );\n\n methods\n */\nexport default function makeImperativeComponent<\n ComponentProps extends TMap,\n Events extends TMap = TMap,\n>() {\n return function ImperativeComponent<\n State extends TMap,\n Methods extends TMethods<State>,\n >({\n Component,\n initialState,\n methods,\n }: {\n initialState?: State;\n methods?: Methods;\n Component: FC<Omit<ComponentProps, 'id'> & State>;\n }): [\n TMethodsMap<Methods>,\n TFireEvent<Events>,\n FC<ComponentProps & { id: TId }>,\n ] {\n /**\n * State methods\n */\n\n const setStates: Record<string, TStateManager<State>> = {};\n const actualMethods: TMethodsMap<Methods> = {} as TMethodsMap<Methods>;\n Object.entries(methods ?? {}).forEach(([key, method]) => {\n actualMethods[key as keyof Methods] = ((id, ...args: any) => {\n if (setStates[id]) {\n method(setStates[id], ...args);\n return true;\n } else {\n /* console.warn(\n `No setState found with id ${id}. Maybe the component was not mounted yet`,\n ); */\n return false;\n }\n }) as TMethod<Methods[keyof Methods]>;\n });\n\n /**\n * Events\n */\n const eventsHandlers: TEventsHandlers<Events> = {};\n\n const fireEvent: TFireEvent<Events> = <K extends keyof Events>(\n id: TId,\n ev: K,\n args?: Events[K],\n ) => {\n if (eventsHandlers[id]) {\n eventsHandlers[id]?.[ev]?.forEach((current) => current.cb(args));\n return true;\n } else {\n /* console.warn(`The requested id does not exist: ${id}`); */ return false;\n }\n };\n\n /**\n * Component\n */\n\n const ActualComponent: FC<ComponentProps & { id: TId }> = ({\n id,\n ...props\n }) => {\n const [state, innerSetState] = useState(initialState as State);\n\n setStates[id] = (newState) =>\n innerSetState((current) => ({ ...current, ...newState }));\n\n return (\n <ImperativeComponentContext.Provider\n value={useMemo(() => ({ id, eventsStore: eventsHandlers }), [id])}\n >\n <Component {...props} {...state} />\n </ImperativeComponentContext.Provider>\n );\n };\n\n return [actualMethods, fireEvent, ActualComponent];\n };\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-argument */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { FC } from 'react';\nimport uniqueId from 'lodash-es/uniqueId';\nimport { TMap, TMethods, TMethodsMap } from './types';\nimport makeImperativeComponent from './makeImperativeComponent';\nimport { TId } from '../types';\n\ntype TSingleMethodsMap<\n Methods extends TMethods<any>,\n MethodsMap extends TMethodsMap<Methods>,\n> = {\n [Name in keyof MethodsMap]: MethodsMap[Name] extends (\n id: TId,\n ...args: infer Action\n ) => unknown\n ? (...args: Action) => unknown\n : never;\n};\n\nexport default function makeSingleImperativeComponent<\n ComponentProps extends TMap,\n Events extends TMap = TMap,\n>() {\n return function SingleImperativeComponent<\n State extends TMap,\n Methods extends TMethods<State>,\n >({\n initialState,\n methods,\n Component,\n }: {\n initialState?: State;\n methods?: Methods;\n Component: FC<Omit<ComponentProps, 'id'> & State>;\n }): [\n TSingleMethodsMap<Methods, TMethodsMap<Methods>>,\n <K extends keyof Events>(ev: K, args: Events[K]) => void,\n FC<ComponentProps>,\n ] {\n const id = uniqueId();\n\n const [actualMethods, originalFireEvent, ImperativeComponent] =\n makeImperativeComponent<ComponentProps, Events>()({\n initialState,\n methods,\n Component,\n });\n\n const fireEvent: <K extends keyof Events>(\n ev: K,\n args: Events[K],\n ) => void = (ev, args) => originalFireEvent(id, ev, args);\n\n const newMethods: TSingleMethodsMap<\n Methods,\n TMethodsMap<Methods>\n > = {} as TSingleMethodsMap<Methods, TMethodsMap<Methods>>;\n\n Object.entries(actualMethods).forEach(([name, method]) => {\n (newMethods[name as keyof typeof newMethods] as any) = (...args: any) =>\n (method as (id: TId, ...args: any) => unknown)(id, ...args);\n });\n\n return [\n newMethods,\n fireEvent,\n (props: ComponentProps) => <ImperativeComponent {...props} id={id} />,\n ];\n };\n}\n","import { useContext } from 'react';\nimport { ImperativeComponentContext, TEventsHandlers, TMap } from './types';\nimport { TId } from '../types';\n\n/**\n * Permite el uso de eventos en herederos directos o no del imperativeComponent\n * más cercano.\n */\nexport default function useImperativeComponentContext<\n Events extends TMap = TMap,\n>() {\n const context = useContext(ImperativeComponentContext) as {\n id: TId;\n eventsStore: TEventsHandlers<Events>;\n };\n\n return context;\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-argument */\nimport { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { TEventsMap, TMap } from './types';\nimport useImperativeComponentContext from './useImperativeIdentifierContext';\nimport uniqueId from 'lodash-es/uniqueId';\n\nconst useImperativeComponentEvents = <Events extends TMap = TMap>(\n handlers: Partial<TEventsMap<Events>>,\n) => {\n const uniqueHookId = useMemo(() => uniqueId('hook'), []);\n\n const { id, eventsStore } = useImperativeComponentContext<Events>();\n const hasRegistered = useRef(false);\n\n const registerEvents = useCallback(() => {\n Object.entries(handlers).forEach(([name, callback]) => {\n if (!eventsStore[id]) eventsStore[id] = {};\n if (!eventsStore[id][name])\n eventsStore[id][name as keyof (typeof eventsStore)[typeof id]] = [];\n\n eventsStore[id][name as keyof (typeof eventsStore)[typeof id]]?.push({\n cb: callback as (args?: Events[keyof Events] | undefined) => unknown,\n uniqueHookId: uniqueHookId,\n });\n });\n }, [eventsStore, handlers, id, uniqueHookId]);\n\n useEffect(() => {\n registerEvents();\n return () => {\n hasRegistered.current = false;\n Object.entries(handlers).forEach(([name]) => {\n eventsStore[id][name as keyof (typeof eventsStore)[typeof id]] = (\n eventsStore[id][name as keyof (typeof eventsStore)[typeof id]] ?? []\n ).filter((current) => current.uniqueHookId !== uniqueHookId);\n });\n };\n }, [eventsStore, handlers, id, registerEvents, uniqueHookId]);\n\n return uniqueHookId;\n};\n\nexport default useImperativeComponentEvents;\n","/**\n * Da formato a un mensaje con tokens incrustados.\n *\n * @example\n *\n * // Dado el siguiente mensaje:\n * var msg = 'El campo <TOK1> es inválido.';\n *\n * console.log(formatMessage(msg, {\n * TOK1: 'nombre',\n * }));\n * // Imprime: El campo nombre es inválido.\n */\nexport const formatMessage = (\n str: string,\n obj: { [key: string]: string },\n): string => {\n let newStr = str;\n Object.entries(obj).forEach(([key, value]) => {\n const placeHolder = `<${key}>`;\n\n if (newStr?.includes(placeHolder)) {\n newStr = newStr.replace(placeHolder, value ?? '');\n }\n });\n return newStr;\n};\n","import { formatMessage } from './formatMessage';\r\n\r\nexport interface ILabelsContainer {\r\n labels: {\r\n [key: string]: {\r\n text: string;\r\n title: string;\r\n };\r\n };\r\n}\r\n\r\n/**\r\n * Dado un nombre de etiqueta, devuelve el texto que esa etiqueta contiene en\r\n * el idioma actual. En este momento, lo único que hace realmente esta función\r\n * es devolver la variable del window con el mismo nombre que se está\r\n * pidiendo.\r\n *\r\n * La idea de implementar esta función, es que en un futuro la fuente de la\r\n * que provienen las labels pueda ser más diversa.\r\n *\r\n * Permite el pasaje de tokens para el reemplazo automático de los mismos.\r\n *\r\n * @param outerWindow - En librerías que puedan trabajar tanto en Browser como en Node es requerido pasar el window como parámetro para evitar que la función vaya directamente al window.\r\n *\r\n *\r\n * @example\r\n *\r\n * // Suponemos la etiqueta msgUsu = { text: 'Usuario <TOK1>', title: 'Usuario <TOK1>' }\r\n *\r\n * getLabel('msgUsu' , {\r\n * text: {\r\n * TOK1: 'admin',\r\n * },\r\n * title: {\r\n * TOK1: 'no disponible',\r\n * }\r\n * })\r\n */\r\nexport function getLabel(\r\n name: string,\r\n replaceTokens?: {\r\n text?: Record<string, string>;\r\n title?: Record<string, string>;\r\n },\r\n outerWindow?: any,\r\n) {\r\n const actualWindow = outerWindow ?? window;\r\n const label = {\r\n ...((actualWindow as unknown as ILabelsContainer).labels[name] ?? {\r\n text: `${name}`,\r\n title: `${name}`,\r\n }),\r\n };\r\n\r\n if (replaceTokens?.text !== undefined)\r\n label.text = formatMessage(label.text, replaceTokens.text);\r\n if (replaceTokens?.title !== undefined)\r\n label.title = formatMessage(label.title, replaceTokens.title);\r\n\r\n return label;\r\n}\r\n","/**\r\n * Este método itera sobre un objeto hasta encontrar la ruta especificada\r\n *\r\n * @example\r\n *\r\n const obj = {\r\n a: {\r\n b: {\r\n c: {\r\n d: \"d\"\r\n }\r\n }\r\n }\r\n };\r\n\r\n console.log(getValueByPath(obj,'a.b.c')) // { d: 'd' }\r\n console.log(getValueByPath(obj,'a.b.c.d')) // 'd'\r\n *\r\n */\r\nexport function getValueByPath<T>(\r\n obj: object,\r\n path: string | string[],\r\n separator = '.',\r\n): T | undefined {\r\n const actualPath = typeof path === 'string' ? path.split(separator) : path;\r\n if (typeof obj !== 'object' || !obj) {\r\n if (actualPath.length === 0) return obj as T;\r\n return undefined;\r\n }\r\n const currentStep = actualPath.shift() as string;\r\n if (actualPath.length === 0) return (obj as any)[currentStep] as T;\r\n return getValueByPath(\r\n (obj as any)[currentStep] as object,\r\n actualPath,\r\n separator,\r\n );\r\n}\r\n","import clone from 'lodash-es/clone';\r\n\r\n/**\r\n * Permite escribir una propiedad en un objeto, en una ruta especificada. Si\r\n * dicha ruta no existe dentro del objeto la crea, siempre que sea posible. No\r\n * será posible en caso de que alguno de los elementos de la ruta contenga una\r\n * propiedad que no sea de tipo objeto.\r\n *\r\n * @param obj El objeto donde se desea escribir la propiedad\r\n * @param path La ruta en la que se va a escribir\r\n * @param value El valor que se va a escribir en la ruta especificada\r\n * @returns Un objeto idéntico del recibido pero co nlos cambios aplicados\r\n *\r\n * @throws { Error } En caso de que la ruta especificada contenga algún elemento que no puede ser escrito.\r\n *\r\n * @example\r\n *\r\n * const a = {\r\n * a: {}\r\n * };\r\n *\r\n * setValueByPath(a, 'a.b.c', 'Hello world');\r\n * /* Outputs:\r\n * {\r\n * a: {\r\n * b: {\r\n * c: 'Hello world'\r\n * }\r\n * }\r\n * }\r\n */\r\nexport function setValueByPath<T extends object>(\r\n obj: T,\r\n path: string,\r\n value: unknown,\r\n): T | null {\r\n if (path === '') return value as T;\r\n\r\n const steps = path.split('.');\r\n if (steps.length === 0) {\r\n console.warn(`An empty path was provoided ${path}`);\r\n return null;\r\n }\r\n const originalClonedObject = clone(obj ?? {});\r\n let currentObj = originalClonedObject;\r\n for (let i = 0; i < steps.length - 1; i++) {\r\n if (!(currentObj as any)[steps[i]]) (currentObj as any)[steps[i]] = {};\r\n if (typeof (currentObj as any)[steps[i]] === 'object') {\r\n currentObj = (currentObj as any)[steps[i]];\r\n } else {\r\n console.info({\r\n originalObject: obj,\r\n originalPath: path,\r\n currentObj,\r\n currentStep: steps[i],\r\n });\r\n throw new Error(\r\n `The provided path ${path} cannot be applied due to it is not an object's path.`,\r\n );\r\n }\r\n }\r\n (currentObj as any)[steps.pop() as string] = value;\r\n return originalClonedObject as T;\r\n}\r\n","export function cloneDeep<T>(o: T): T {\r\n if (typeof o === 'object' && o) {\r\n if (Array.isArray(o)) {\r\n return o.map((c) => cloneDeep(c)) as T;\r\n }\r\n return Object.fromEntries(\r\n Object.entries(o as Record<string, any>).map(([key, value]) => [\r\n key,\r\n cloneDeep(value),\r\n ]),\r\n ) as T;\r\n }\r\n\r\n return o;\r\n}\r\n","export type DeepReadonly<T> = Readonly<\r\n T extends object\r\n ? {\r\n [K in keyof T]: Readonly<DeepReadonly<T[K]>>;\r\n }\r\n : T\r\n>;\r\n\r\nexport function freezeDeep<T>(o: T): DeepReadonly<T> {\r\n if (typeof o === 'object' && o) {\r\n if (Array.isArray(o)) {\r\n return Object.freeze(\r\n o.map((c) => freezeDeep(c)),\r\n ) as unknown as DeepReadonly<T>;\r\n }\r\n return Object.freeze(\r\n Object.fromEntries(\r\n Object.entries(o as Record<string, any>).map(([key, value]) => [\r\n key,\r\n freezeDeep(value),\r\n ]),\r\n ),\r\n ) as DeepReadonly<T>;\r\n }\r\n\r\n return (typeof o === 'object' && o ? Object.freeze(o) : o) as DeepReadonly<T>;\r\n}\r\n","/* eslint-disable @typescript-eslint/no-dynamic-delete */\nimport cloneDeep from 'lodash-es/cloneDeep';\nimport {\n TProperties,\n TPropsSuscriptor,\n TUpdateFieldConfiguration,\n} from './types';\nimport { debugDispatcher } from '../debug';\nimport { TId } from '../types';\nimport { persistentStorage } from '../storage';\n\nconst propsLog = 'propsLog';\nexport const PropsSelectorUndefinedObject = {};\n\ninterface IPropsStoreConf {\n logCommands: {\n propsStore?: string;\n updateProp?: string;\n propsSuscriptors?: string;\n propsLog?: string;\n };\n}\n\nexport class PropsStore<\n PropsType extends Record<TId, unknown> = Record<TId, unknown>,\n> {\n log = persistentStorage[propsLog];\n\n fields: Record<TId, PropsType> = {};\n\n suscriptors: Record<TId, TPropsSuscriptor<PropsType>[]> = {};\n\n loggers: Record<string, (props: unknown[]) => void> = {\n propsLog: ([log]) => {\n this.log = log;\n persistentStorage[propsLog] = log;\n },\n propsStore: ([fieldId]) => {\n if (fieldId) console.info(this.fields[fieldId as TId]);\n else console.info(this.fields);\n },\n propsSuscriptors: ([fieldId]) => {\n if (fieldId) console.info(this.suscriptors[fieldId as TId]);\n else console.info(this.suscriptors);\n },\n updateProp: ([fieldId, newProps]) => {\n this.updateField(fieldId as TId, newProps as PropsType);\n },\n };\n\n constructor(private configuration?: IPropsStoreConf) {\n if (this.configuration) {\n if (this.configuration.logCommands.propsStore)\n debugDispatcher.on(\n this.configuration.logCommands.propsStore,\n this.loggers.propsStore,\n 'Muestra el contenido actual del propsStore',\n );\n if (this.configuration.logCommands.updateProp)\n debugDispatcher.on(\n this.configuration.logCommands.updateProp,\n this.loggers.updateProp,\n 'dd.updateProp(fieldId, newProps). El objeto newProps será mergeado sobre las props actuales',\n );\n if (this.configuration.logCommands.propsSuscriptors)\n debugDispatcher.on(\n this.configuration.logCommands.propsSuscriptors,\n this.loggers.propsSuscriptors,\n 'Muestra los suscriptores actuales del propsStore',\n );\n if (this.configuration.logCommands.propsLog)\n debugDispatcher.on(\n this.configuration.logCommands.propsLog,\n this.loggers.propsLog,\n 'Si se pasa como true, hace log de las acciones. Si se pasa como trace(fieldId), se hace log de todas las acciones y trace del campo especificado. Si se pasa trace(), hace log y trace de todas las acciones.',\n );\n }\n }\n\n destructor() {\n if (this.configuration) {\n if (this.configuration.logCommands.propsStore)\n debugDispatcher.off(\n this.configuration.logCommands.propsStore,\n this.loggers.propsStore,\n );\n if (this.configuration.logCommands.updateProp)\n debugDispatcher.off(\n this.configuration.logCommands.updateProp,\n this.loggers.updateProp,\n );\n if (this.configuration.logCommands.propsSuscriptors)\n debugDispatcher.off(\n this.configuration.logCommands.propsSuscriptors,\n this.loggers.propsSuscriptors,\n );\n if (this.configuration.logCommands.propsLog)\n debugDispatcher.off(\n this.configuration.logCommands.propsLog,\n this.loggers.propsLog,\n );\n }\n }\n\n getAllFields() {\n return cloneDeep(this.fields);\n }\n\n /**\n * Devuelve los props actuales de un campo.\n */\n getFieldProps<ParsedPropsType = PropsType>(fieldId: TId) {\n return this.fields[fieldId] as unknown as ParsedPropsType;\n }\n\n removeField(fieldId: TId) {\n this.suscriptors[fieldId] = [];\n delete this.fields[fieldId];\n if (this.log) console.info(`propsStore: removeNode ${fieldId}`);\n }\n\n /**\n * Permite establecer un suscriptor que será llamado\n * cada vez que las props del campo especificado cambien.\n */\n suscribe(fieldId: TId, callback: TPropsSuscriptor<PropsType>) {\n if (!this.suscriptors[fieldId]) this.suscriptors[fieldId] = [];\n\n this.suscriptors[fieldId].push(callback);\n\n callback(this.fields[fieldId] ?? PropsSelectorUndefinedObject);\n\n return () => {\n this.suscriptors[fieldId] = this.suscriptors[fieldId].filter(\n (current) => {\n return current !== callback;\n },\n );\n };\n }\n\n /**\n * Actualiza o crea las props de un campo.\n *\n * La tercera prop está relacionada\n */\n updateField<NewPropsType extends Record<TId, unknown> = Partial<PropsType>>(\n fieldId: TId,\n props: Partial<NewPropsType>,\n conf?: TUpdateFieldConfiguration,\n ) {\n if (fieldId === undefined) return;\n\n const { noEmit, isUrgent } = conf ?? {};\n const newProps = { ...this.fields[fieldId], ...props };\n this.fields[fieldId] = newProps;\n\n if (this.log === true || this.log === fieldId)\n console.info({ fieldId, props });\n if (this.log === 'trace') console.trace();\n else {\n const logId =\n typeof this.log === 'string' &&\n (this.log.match(/trace\\(([^)]+)\\)/) ?? [])[1];\n if (fieldId === logId) console.trace();\n }\n\n if (!noEmit) {\n this.suscriptors[fieldId]?.forEach((current) => {\n return current(newProps, isUrgent);\n });\n this.suscriptors.any?.forEach((current) => {\n return current({ ...newProps, fieldId }, isUrgent);\n });\n }\n }\n}\n\nexport const propsStore = new PropsStore<TProperties>({\n logCommands: {\n propsLog: 'propsLog',\n propsStore: 'propsStore',\n propsSuscriptors: 'propsSuscriptors',\n updateProp: 'updateProp',\n },\n});\n","import React, { useRef } from 'react';\nimport {\n PropsSelectorUndefinedObject,\n propsStore,\n PropsStore,\n} from './propsStore';\nimport {\n TProperties,\n TPropsComparator,\n TPropsConfiguration,\n TPropsSelector,\n} from './types';\nimport { TId } from '../types';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst defaultComparator: TPropsComparator<any> = (a, b) => {\n return a === b;\n};\nfunction getDefaultSelector<Selected, PropsType = TProperties>() {\n return (current: PropsType) => {\n return current as unknown as Selected;\n };\n}\n\nexport function isPropsConfigurationObject<\n Selected,\n PropsType extends Record<string, unknown> = TProperties,\n>(\n value?:\n | TPropsSelector<Selected, PropsType>\n | TPropsConfiguration<Selected, PropsType>,\n): value is TPropsConfiguration<Selected, PropsType> {\n return (\n typeof value === 'object' &&\n value &&\n ('selector' in value || 'comparator' in value || 'initialValue' in value)\n );\n}\n\n/**\n *\n * Este hook permite escuchar los cambios en las propiedades\n * de un campo en particular.\n *\n * @param configuration\n * Este objeto permite pasar las siguientes propiedades para ser\n * determinar el comportamiento del hook:\n *\n * **selector:** La función selectora es una función equivalente\n * a la que se utiliza en el useAppSelector de redux. Con ella\n * se puede seleccionar una porción de las props, evitando\n * re-renderizados innecesarios. Esto se debe a que el renderizado\n * solamente ocurrirá cuando la función selectora devuelva un valor\n * que sea distinto del anterior.\n *\n * El concepto de distinto es: si existe una función comparadora,\n * se determinará mediante la ejecución de dicha función, a la que\n * se le pasan como parámetros el objeto anterior y el nuevo.\n *\n * En caso de que no haya función comparadora, se comparará que\n * las props seleccionadas y las nuevas sean exactamente las mismas\n * (la referencia al mismo objeto).\n *\n * **comparator:** La función comparadora de la que estamos\n * hablando.\n *\n * **initialValue:** Un valor para setearlo al inicio, el mismo\n * solamente será seteado en caso de que ya no exista un valor\n * en el store.\n * @returns\n */\nexport function usePropsSelector<\n Selected = TProperties,\n PropsType extends Record<string, unknown> = TProperties,\n>(\n fieldId: TId,\n configuration?: TPropsConfiguration<Selected, PropsType>,\n): Selected;\n/**\n *\n * Este hook permite escuchar los cambios en las propiedades\n * de un campo en particular.\n *\n * @param selector La función selectora es una función equivalente\n * a la que se utiliza en el useAppSelector de redux. Con ella\n * se puede seleccionar una porción de las props, evitando\n * re-renderizados innecesarios. Esto se debe a que el renderizado\n * solamente ocurrirá cuando la función selectora devuelva un valor\n * que sea distinto del anterior.\n *\n * El concepto de distinto es: si existe una función comparadora,\n * se determinará mediante la ejecución de dicha función, a la que\n * se le pasan como parámetros el objeto anterior y el nuevo.\n *\n * En caso de que no haya función comparadora, se comparará que\n * las props seleccionadas y las nuevas sean exactamente las mismas\n * (la referencia al mismo objeto).\n *\n * @param comparator La función comparadora de la que estamos\n * hablando.\n *\n * @returns\n */\nexport function usePropsSelector<\n Selected = TProperties,\n PropsType extends Record<string, unknown> = TProperties,\n>(\n fieldId: TId,\n selector?:\n | TPropsSelector<Selected, PropsType>\n | TPropsConfiguration<Selected, PropsType>,\n comparator?: TPropsComparator<Selected>,\n anotherPropsStore?: PropsStore<PropsType>,\n): Selected;\nexport function usePropsSelector<\n Selected = TProperties,\n PropsType extends Record<string, unknown> = TProperties,\n>(\n fieldId: TId,\n par1?:\n | TPropsSelector<Selected, PropsType>\n | TPropsConfiguration<Selected, PropsType>,\n par2?: TPropsComparator<Selected>,\n par3?: PropsStore<PropsType>,\n): Selected {\n const selector = React.useMemo(\n () => {\n return isPropsConfigurationObject(par1) ? par1.selector : par1;\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n const comparator = React.useMemo(\n () => {\n return isPropsConfigurationObject(par1) ? par1.comparator : par2;\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n const initialValue = React.useMemo(\n () => {\n return isPropsConfigurationObject(par1) ? par1.initialValue : undefined;\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n const actualPropsStore = React.useMemo(\n () => {\n return (\n par3 ??\n (isPropsConfigurationObject(par1) ? par1.propsStore : propsStore) ??\n propsStore\n );\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n // eslint-disable-next-line react-hooks/exhaustive-deps\n par3 ??\n (isPropsConfigurationObject(par1) ? par1.propsStore : propsStore) ??\n propsStore,\n ],\n );\n\n const getCurrentProps = React.useCallback(() => {\n const currentProps = actualPropsStore.getFieldProps<PropsType>(fieldId);\n const willSetInitialValue =\n currentProps !== undefined && initialValue !== undefined;\n if (willSetInitialValue) {\n actualPropsStore.updateField(\n fieldId,\n initialValue as unknown as TProperties,\n );\n }\n return (selector ?? getDefaultSelector())(\n currentProps ?? (PropsSelectorUndefinedObject as PropsType),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const [props, setProps] = React.useState<Selected>(getCurrentProps);\n\n const prevProps = useRef(props);\n const prevFieldId = useRef(fieldId);\n\n React.useEffect(() => {\n const unsuscribe = actualPropsStore.suscribe(\n fieldId,\n (newProps, isUrgent) => {\n const newSelectedProps = (selector ?? getDefaultSelector())(\n newProps as unknown as PropsType,\n );\n\n if (\n !(comparator ?? defaultComparator)(\n prevProps.current,\n newSelectedProps,\n ) ||\n prevFieldId.current !== fieldId\n ) {\n if (isUrgent) setProps(newSelectedProps);\n else\n React.startTransition(() => {\n setProps(newSelectedProps);\n });\n }\n prevProps.current = newSelectedProps;\n },\n );\n\n return () => {\n unsuscribe();\n };\n }, [fieldId, actualPropsStore, selector, comparator]);\n\n return props;\n}\n","import React, { HTMLAttributes, HTMLProps } from 'react';\n\nfunction assignProps<T extends HTMLProps<HTMLElement>>(\n el: HTMLElement,\n { style, ...props }: T,\n) {\n if (style) {\n Object.entries(style).forEach(([name, value]) => {\n // eslint-disable-next-line no-param-reassign, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment\n (el as any).style[name] = value;\n });\n }\n Object.assign(el, props);\n}\n\n/**\n * El hook useDomState permite aplicar propiedades a un\n * elemento del DOM de la forma más eficiente posible.\n *\n * Este hook no permite el uso de sx ya que por las características\n * del sx, el re-renderizado es necesario.\n *\n * @example\n *\n *\n * const TestComponent = () => {\n const { domProps, setDomProps } = useDomState<BoxProps>({\n style: {\n position: 'fixed',\n left: 0,\n top: 0,\n width: '150px',\n height: '150px',\n backgroundColor: '#ccc',\n },\n });\n const initialPosition = React.useRef({ boxX: 0, boxY: 0, x: 0, y: 0 });\n const isDragging = React.useRef(false);\n const [state, setState] = React.useState(1);\n\n React.useEffect(() => {\n const move = (ev: MouseEvent) => {\n if (isDragging.current) {\n const moveX = ev.clientX - initialPosition.current.x;\n const moveY = ev.clientY - initialPosition.current.y;\n const newLeft = initialPosition.current.boxX + moveX;\n const newTop = initialPosition.current.boxY + moveY;\n setDomProps({\n style: {\n left: `${newLeft}px`,\n top: `${newTop}px`,\n },\n });\n }\n };\n\n const removeSuscription = () => {\n isDragging.current = false;\n };\n\n document.addEventListener('mousemove', move);\n document.addEventListener('mouseup', removeSuscription);\n\n return () => {\n document.removeEventListener('mousemove', move);\n document.removeEventListener('mouseup', removeSuscription);\n };\n }, [setDomProps]);\n\n return (\n <Box\n {...domProps}\n onMouseDown={(ev) => {\n initialPosition.current = {\n boxX: Number.parseInt(domProps.style?.left as string, 10),\n boxY: Number.parseInt(domProps.style?.top as string, 10),\n x: ev.clientX,\n y: ev.clientY,\n };\n isDragging.current = true;\n }}\n >\n Esta caja es arrastrable. Renderizados: {state}\n <Button onClick={() => setState((current) => current + 1)}>\n Renderizar\n </Button>\n </Box>\n );\n};\n */\nexport function useDomState<T extends HTMLAttributes<HTMLElement>>(\n initialDomProps?: T,\n) {\n const domProps = React.useRef<T & { ref: (el: HTMLElement) => void }>({\n ...(initialDomProps ?? ({} as T)),\n ref: React.useCallback((el: HTMLElement) => {\n ref.current = el;\n assignProps(ref.current, domProps.current);\n }, []),\n });\n const ref = React.useRef<HTMLElement | null>(null);\n return {\n domProps: domProps.current,\n setDomProps: React.useCallback(({ style, ...newDomProps }: Partial<T>) => {\n if (style) {\n const newStyles = { ...domProps.current.style, ...style };\n domProps.current.style = newStyles;\n }\n Object.assign(domProps.current, newDomProps);\n if (ref.current) assignProps(ref.current, domProps.current);\n }, []),\n };\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { SetStateAction, useCallback, useRef } from 'react';\nimport { useState } from 'react';\n\n/**\n * Permite manejar un estado que se actualizará únicamente siguiendo el\n * comportamiento esperado de un debounce\n */\nexport function useDebouncedState<T>(\n timeout: number,\n initialState?: T,\n): [T | undefined, (state: SetStateAction<T>, immediate?: boolean) => unknown] {\n const [state, innerSetState] = useState<T>(initialState as T);\n\n const t = useRef<number>(-1);\n\n const setState = useCallback<\n (state: SetStateAction<T>, immediate?: boolean) => unknown\n >(\n (newState, immediate?: boolean) => {\n clearTimeout(t.current);\n\n if (immediate) innerSetState(newState);\n else\n t.current = setTimeout(() => {\n innerSetState(newState);\n }, timeout) as any;\n },\n [timeout],\n );\n\n return [state, setState];\n}\n","export function isTrue(el: any) {\n if (el === true) {\n return true;\n }\n if (['t', 'true'].includes(String(el).toLowerCase())) {\n return true;\n }\n if (el === 1) {\n return true;\n }\n\n return false;\n}\n","/**\n * Calculates the alignment distance between two strings using the Levenshtein\n * distance algorithm. This distance is defined as the minimum number of\n * single-character edits (insertions, deletions, or substitutions) required to\n * change one string into the other. The function implements a dynamic\n * programming approach to efficiently compute this metric.\n *\n * @param {string} a - The first string to compare.\n * @param {string} b - The second string to compare.\n * @returns {number} The alignment distance between the two strings. This is a non-negative integer where\n * a value of 0 indicates that the strings are identical, and a larger value\n * indicates a greater degree of difference.\n *\n * @example\n * // returns 3\n * alignment(\"kitten\", \"sitting\");\n *\n * @example\n * // returns 2\n * alignment(\"flaw\", \"lawn\");\n */\nexport function alignment(a: string, b: string) {\n const m = a.length;\n const n = b.length;\n const dp = Array.from({ length: m + 1 }, () => Array<number>(n + 1).fill(0));\n\n // Initialize the first column and the first row of the matrix\n for (let i = 0; i <= m; i++) dp[i][0] = i;\n for (let j = 0; j <= n; j++) dp[0][j] = j;\n\n // Fill dp matrix\n for (let i = 1; i <= m; i++) {\n for (let j = 1; j <= n; j++) {\n const cost = a[i - 1] === b[j - 1] ? 0 : 1;\n dp[i][j] = Math.min(\n dp[i - 1][j] + 1, // deletion\n dp[i][j - 1] + 1, // insertion\n dp[i - 1][j - 1] + cost, // substitution\n );\n }\n }\n\n // Return the value in the bottom right corner\n return dp[m][n];\n}\n","export function ucfirst(word: string) {\n return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();\n}\n","export class ClassNameBuilder {\r\n private classes: string[] = [];\r\n\r\n push(...classes: string[]) {\r\n this.classes.push(...classes);\r\n return this;\r\n }\r\n\r\n pushConditional(cond: boolean, clazz: string) {\r\n if (cond) {\r\n this.classes.push(clazz);\r\n }\r\n return this;\r\n }\r\n\r\n get() {\r\n return this.classes.join(' ');\r\n }\r\n}\r\n","export function decodeBase64ToUtf8(base64String: string) {\r\n const binaryString = atob(base64String);\r\n const bytes = Uint8Array.from(binaryString, (char) => char.charCodeAt(0));\r\n return new TextDecoder('utf-8').decode(bytes);\r\n}\r\n","export function encodeStrToBase64Utf8(str: string) {\r\n const bytes = new TextEncoder().encode(str); // UTF-8 → bytes\r\n let binary = '';\r\n const chunk = 0x8000; // procesar en trozos grandes para evitar desbordes de stack\r\n for (let i = 0; i < bytes.length; i += chunk) {\r\n binary += String.fromCharCode(...bytes.subarray(i, i + chunk));\r\n }\r\n return btoa(binary);\r\n}\r\n","/**\n * Toma un valor y devuelve true o false según las\n * siguientes condiciones:\n *\n * Si es string, ['',\n * 'false'].includes(value.toLowerCase()) => false, todo lo\n * demás => true.\n *\n * Si es array, [] => false, [...] => true.\n *\n * Todo lo demás !!value\n *\n * @example\n *\n * toBoolean('true') // true\n * toBoolean('TrUE') // true\n * toBoolean('FAlSe') // false\n * toBoolean(0) // false\n * toBoolean(1) // true\n * toBoolean([0]) // true\n * toBoolean([]) // false\n */\nexport function toBoolean(value: unknown): boolean {\n if (typeof value === 'string') {\n return !['false', ''].includes(value.toLowerCase());\n }\n\n if (Array.isArray(value)) return value.length > 0;\n\n return !!value;\n}\n","import xml2js, { ParserOptions } from 'xml2js';\r\nimport { parseBooleans, parseNumbers } from 'xml2js/lib/processors';\r\nimport {\r\n TApiaFieldPropsObj,\r\n TFieldScriptEvents,\r\n TFieldServerEvents,\r\n TNotificationMessage,\r\n} from '../types';\r\nimport { AxiosResponse } from 'axios';\r\n\r\nexport const processAjaxEventTagNames = (name: string): string => {\r\n return name;\r\n};\r\n\r\nexport const processAjaxEventAttrNames = (name: string): string => {\r\n return name;\r\n};\r\n\r\nexport interface TSessionExceptions {\r\n exception: {\r\n content: string;\r\n text: string;\r\n };\r\n}\r\n\r\nexport const processAjaxEventResponse = (\r\n value: unknown,\r\n name: string,\r\n): string | unknown => {\r\n if (name === 'v' && value === 'T') return true;\r\n if (name === 'v' && value === 'F') return false;\r\n return value;\r\n};\r\n\r\nexport const getJSObjFromXML = (\r\n xml: XMLDocument | string,\r\n): Record<string, unknown> => {\r\n let objJS: TNotificationMessage | null = null;\r\n\r\n const parser = new xml2js.Parser({\r\n trim: true,\r\n normalize: true,\r\n explicitRoot: false,\r\n mergeAttrs: true,\r\n explicitArray: false,\r\n charkey: 'content',\r\n attrValueProcessors: [\r\n parseBooleans,\r\n processStringObj,\r\n processAjaxEventResponse,\r\n ],\r\n tagNameProcessors: [processAjaxEventTagNames],\r\n attrNameProcessors: [processAjaxEventAttrNames],\r\n } as ParserOptions);\r\n\r\n parser.parseString(\r\n xml,\r\n (err: Error | null, result: Record<string, unknown>) => {\r\n if (err) {\r\n console.warn('Error Parsing XML data', err);\r\n } else {\r\n objJS = result;\r\n }\r\n },\r\n );\r\n if (objJS) {\r\n return objJS;\r\n }\r\n return {};\r\n};\r\n\r\nexport const processStringObj = (\r\n value: string,\r\n key: string,\r\n):\r\n | TApiaFieldPropsObj\r\n | string\r\n | number\r\n | TFieldScriptEvents\r\n | TFieldServerEvents => {\r\n /*\r\n\r\n * ESTAS ENTRADAS VAN A SER NECESARIAS CUANDO SE INCORPORE MODULO DE\r\n * EJECUCION AL MONOREPO\r\n\r\n if (key === 'properties') {\r\n return parseFieldPropertiesObj(jsonDecode(value)) as TApiaFieldPropsObj;\r\n }\r\n if (key === 'scriptEvents') {\r\n return JSON.parse(value) as TFieldScriptEvents;\r\n }\r\n if (key === 'serverEvents') {\r\n return JSON.parse(value) as TFieldServerEvents;\r\n }\r\n if (key === 'gridXml') {\r\n return getJSObjfromXML(he.decode(value).replaceAll('&', '&'));\r\n } */\r\n if (key === 'value' && typeof value === 'number' && Number.isNaN(value)) {\r\n return '';\r\n }\r\n if (key === 'valueType' && typeof value === 'string' && value === 'null') {\r\n return '';\r\n }\r\n if (\r\n (key === 'cols' ||\r\n key === 'rows' ||\r\n key === 'x' ||\r\n key === 'y' ||\r\n key === 'length') &&\r\n typeof value === 'string'\r\n ) {\r\n return parseNumbers(value);\r\n }\r\n return value;\r\n};\r\n\r\nexport const parseXmlAsync = async <T>(xml: string): Promise<T> => {\r\n const parser = new xml2js.Parser({\r\n trim: true,\r\n normalize: true,\r\n explicitRoot: false,\r\n mergeAttrs: true,\r\n explicitArray: false,\r\n charkey: 'content',\r\n attrValueProcessors: [\r\n parseBooleans,\r\n processStringObj,\r\n processAjaxEventResponse,\r\n ],\r\n tagNameProcessors: [processAjaxEventTagNames],\r\n attrNameProcessors: [processAjaxEventAttrNames],\r\n } as ParserOptions);\r\n\r\n const result = await new Promise<T>((resolve, reject) => {\r\n parser.parseString(xml, (err: Error | null, innerResult: T) => {\r\n if (err) {\r\n console.log(xml);\r\n reject(err);\r\n } else {\r\n resolve(innerResult);\r\n }\r\n });\r\n });\r\n\r\n return result;\r\n};\r\n\r\nexport const parseXMLRequestResponse = (\r\n response: AxiosResponse<unknown, unknown>,\r\n): Record<string, unknown> => {\r\n // if (response.config.data) {\r\n // parse(response.config.data as string);\r\n // }\r\n const requestResponse = response.data;\r\n const xmlToJSOBj = getJSObjFromXML(requestResponse as XMLDocument);\r\n\r\n if (xmlToJSOBj) {\r\n return xmlToJSOBj;\r\n }\r\n return {};\r\n};\r\n","export const postNavigation = (url: string, data: Record<string, any>) => {\r\n // Create a new form element\r\n const form = document.createElement('form');\r\n form.method = 'POST';\r\n form.action = url;\r\n\r\n // Iterate over the data object and create hidden input fields\r\n Object.entries(data).forEach(([key, value]) => {\r\n if (value !== undefined && value !== null) {\r\n // Only include defined and non-null values\r\n const input = document.createElement('input');\r\n input.type = 'hidden';\r\n input.name = key;\r\n input.value = String(value);\r\n form.appendChild(input);\r\n }\r\n });\r\n\r\n // Append the form to the body and submit it\r\n document.body.appendChild(form);\r\n form.submit();\r\n};\r\n"],"names":["c","React","__privateAdd","__privateGet","_a","__privateSet","state","uniqueId","cloneDeep"],"mappings":"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"}
|