@apia/util 0.2.2 → 0.2.4

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/LICENSE.md CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) [year] [fullname]
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
1
+ MIT License
2
+
3
+ Copyright (c) [year] [fullname]
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
21
  SOFTWARE.
package/README.md CHANGED
@@ -1,18 +1,18 @@
1
- # Initiator
2
-
3
- Este package se creó con la única utilidad de copiarlo entero y pegarlo a la hora de crear un nuevo package.
4
-
5
- Este iniciador permite crear un paquete que compila typescript y puede ser importado desde otros packages.
6
-
7
- ## Procedimiento
8
-
9
- - Copiar la carpeta initiator y pegarla con otro nombre dentro de packages.
10
- - Modificar el package.json:
11
- - Eliminar la línea ```private: true```.
12
- - Cambiar el nombre del package en la propiedad "name".
13
- - Cambiar el repositorio en "repository".
14
- - Ejecutar el comando lerna bootstrap desde la carpeta raíz.
15
-
16
- Luego de ejecutar estos pasos, el package estaría listo para comenzar a usarse.
17
-
18
- Este package trae como dependencias por defecto theme-ui y react. Si se desea agregar más dependencias se debe ejecutar el comando ```lerna add --scope="@apia/packageName" dependencyName```. Ejemplo, si creamos un paquete con el nombre @apia/myPackage y queremos agregar lodash como dependencia, ejecutamos el comando ```lerna add --scope="@apia/myPackage" lodash```. **Importante**: lerna no permite instalar de a varias dependencias a la vez como lo hace npm, por lo tanto, si se desea agregar varias dependencias se debe ejecutar el comando anterior tantas veces como dependencias se quiera agregar.
1
+ # Initiator
2
+
3
+ Este package se creó con la única utilidad de copiarlo entero y pegarlo a la hora de crear un nuevo package.
4
+
5
+ Este iniciador permite crear un paquete que compila typescript y puede ser importado desde otros packages.
6
+
7
+ ## Procedimiento
8
+
9
+ - Copiar la carpeta initiator y pegarla con otro nombre dentro de packages.
10
+ - Modificar el package.json:
11
+ - Eliminar la línea ```private: true```.
12
+ - Cambiar el nombre del package en la propiedad "name".
13
+ - Cambiar el repositorio en "repository".
14
+ - Ejecutar el comando lerna bootstrap desde la carpeta raíz.
15
+
16
+ Luego de ejecutar estos pasos, el package estaría listo para comenzar a usarse.
17
+
18
+ Este package trae como dependencias por defecto theme-ui y react. Si se desea agregar más dependencias se debe ejecutar el comando ```lerna add --scope="@apia/packageName" dependencyName```. Ejemplo, si creamos un paquete con el nombre @apia/myPackage y queremos agregar lodash como dependencia, ejecutamos el comando ```lerna add --scope="@apia/myPackage" lodash```. **Importante**: lerna no permite instalar de a varias dependencias a la vez como lo hace npm, por lo tanto, si se desea agregar varias dependencias se debe ejecutar el comando anterior tantas veces como dependencias se quiera agregar.
package/cleanDist.json ADDED
@@ -0,0 +1,3 @@
1
+ {
2
+ "cleanDist": 0.7197744380857216
3
+ }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/number/index.ts","../src/animate/index.ts","../src/array/arrayOrArray.ts","../src/array/getIndex.ts","../src/crypto/generateKey.ts","../src/crypto/decrypt.ts","../src/crypto/encrypt.ts","../src/date/getDateFormat.ts","../src/date/apiaDateToStandarFormat.ts","../src/date/dateToApiaFormat.ts","../src/debug/debugDispatcher.ts","../src/debug/shortcutController.ts","../src/dom/autoDisconnectMutationObserver.ts","../src/dom/downloadUrl.ts","../src/dom/findScrollContainer.ts","../src/dom/findOffsetRelativeToScrollParent.ts","../src/dom/scrollParentIntoElement.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/events/eventEmitter.ts","../src/events/withEventsValue.ts","../src/focus/globalFocus.ts","../src/screenLock/screenLocker.ts","../src/storage/persistentStorage.ts","../src/storage/useLocalStorage.ts","../src/focus/focusController.ts","../src/hooks/useCombinedRefs.ts","../src/hooks/useDebouncedCallback.ts","../src/hooks/useLatest.ts","../src/hooks/useMount.ts","../src/hooks/useUnmount.ts","../src/hooks/usePrevious.ts","../src/hooks/useStateRef.ts","../src/hooks/useUpdateEffect.ts","../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/propsStore/usePropsSelector.ts","../src/propsStore/propsStore.ts","../src/states/useDomState.tsx","../src/states/useDebouncedState.ts","../src/string/ucfirst.ts","../src/typeGuards/toBoolean.ts","../src/xml/parseXmlAsync.ts"],"sourcesContent":["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 { 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) suscription = window.requestAnimationFrame(innerAnimate);\r\n else onFinish?.();\r\n }\r\n\r\n suscription = window.requestAnimationFrame(innerAnimate);\r\n\r\n return () => {\r\n window.cancelAnimationFrame(suscription);\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';\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","import CryptoJS from 'crypto-js';\r\n\r\nexport const generateKey = (\r\n salt: string,\r\n passPhrase: string,\r\n keySize: number,\r\n iterationCount: number,\r\n) => {\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 CryptoJS from 'crypto-js';\r\nimport { generateKey } from './generateKey';\r\n\r\nexport const decrypt = (\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 key = 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 CryptoJS from 'crypto-js';\r\nimport { generateKey } from './generateKey';\r\n\r\nexport const encrypt = (\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 key = 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","import dayjs from 'dayjs';\r\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\r\nimport { TDateFormat } from '../types/apia/date';\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 = (): TDateFormat => {\r\n switch (window.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","/* eslint-disable comment-length/limit-multi-line-comments */\r\nimport React from 'react';\r\n\r\nlet isEnabled = true;\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 isEnabled;\r\n}\r\n\r\n/**\r\n * El debug dispatcher solamente debería activarse en modo desarrollo. Este\r\n * control solamente puede hacerse desde la aplicación principal, por ello, para\r\n * activar el debugDispatcher se exporta este método que debe llamarse cuando\r\n * sea correcto.\r\n */\r\nexport function enableDebugDispatcher() {\r\n isEnabled = true;\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 (!isEnabled && 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 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 };\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\nwindow.dd = debugDispatcher as typeof debugDispatcher &\r\n Record<string, () => unknown>;\r\nwindow.adt = debugDispatcher;\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 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.includes('alt');\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n const ctrlKey = elements.includes('ctrl');\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n const shiftKey = elements.includes('shift');\r\n const key = elements.find(\r\n (current) =>\r\n current !== 'shift' && current !== 'alt' && current !== '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 if (\r\n this.shortcutsStrings.includes(\r\n actualKeys.map((current) => this.parseKeyToString(current)).join(''),\r\n )\r\n ) {\r\n console.warn(\r\n `The shortcut ${actualKeys\r\n .map((current) => this.parseKeyToString(current))\r\n .join(\r\n '',\r\n )} is being setted twice. The controller wont register more than one instance but this could be a hint if some unexpected behavior.`,\r\n );\r\n return;\r\n }\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.push(callback);\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 axios, { AxiosResponse } from 'axios';\r\nimport FileSaver from 'file-saver';\r\n\r\nexport function defaultGetNameFromResponse(blob: AxiosResponse) {\r\n return (\r\n (blob.headers['content-disposition'] as string)?.match?.(\r\n /filename=(?:\\\\?\")?([\\w,\\s-() ]+(?:\\.[A-Za-z]+)?)(?:\\\\?\")?;?/,\r\n )?.[1] ?? 'noFileName'\r\n );\r\n}\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(url: string, fileName: string): Promise<void>;\r\nexport async function downloadUrl(\r\n url: string,\r\n secondParameter:\r\n | string\r\n | ((blob: AxiosResponse) => string) = defaultGetNameFromResponse,\r\n): Promise<void> {\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","const 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 return !(el instanceof HTMLElement) ||\r\n typeof window.getComputedStyle !== 'function'\r\n ? null\r\n : el.scrollHeight >= el.clientHeight &&\r\n !REGEXP_SCROLL_PARENT.test(\r\n window.getComputedStyle(el).overflowY || 'visible',\r\n )\r\n ? el\r\n : findScrollContainer(el.parentElement as HTMLElement) || document.body;\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);\r\n let currentElement = element;\r\n let offset = 0;\r\n let offsetParent = currentElement;\r\n while (\r\n currentElement &&\r\n currentElement !== scrollParent &&\r\n currentElement !== document.body &&\r\n offsetParent !== scrollParent\r\n ) {\r\n if (offsetParent !== currentElement.offsetParent) {\r\n offset += currentElement[`offset${which}`];\r\n offsetParent = currentElement.offsetParent as HTMLElement;\r\n }\r\n currentElement = currentElement.parentElement as HTMLElement;\r\n }\r\n return offset;\r\n}","import { findOffsetRelativeToScrollParent } from \"./findOffsetRelativeToScrollParent\";\r\nimport { findScrollContainer } from \"./findScrollContainer\";\r\n\r\nconst scrollIntervals: Record<string, number> = {};\r\n/**\r\n * Busca el padre con scroll visible y establece su scrollTop de acuerdo al offset del elemento pasado como argumento, de modo que éste aparezca visible dentro del padre mencionado.\r\n *\r\n * @param fixedOffsetTop Establece un mínimo de distancia que debe mantener con el borde superior del contenedor con scroll. Se usa para compensar en las situaciones donde existen cabezales fijos.\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 | undefined = undefined,\r\n) {\r\n if (scrollId) {\r\n clearTimeout(scrollIntervals[scrollId]);\r\n }\r\n\r\n const scrollParent = findScrollContainer(element);\r\n const offsetTop = findOffsetRelativeToScrollParent(element);\r\n\r\n if (\r\n scrollParent &&\r\n (scrollParent.scrollTop + fixedOffsetTop > offsetTop ||\r\n (scrollParent?.clientHeight ?? Infinity) - fixedOffsetTop <\r\n element.getBoundingClientRect().height)\r\n ) {\r\n scrollParent.scrollTop = offsetTop - fixedOffsetTop;\r\n } else if (\r\n scrollParent &&\r\n scrollParent.scrollTop + scrollParent.clientHeight <\r\n offsetTop + element.getBoundingClientRect().height\r\n ) {\r\n scrollParent.scrollTop = offsetTop;\r\n }\r\n\r\n if (tries > 0)\r\n scrollIntervals[scrollId ?? 'noId'] = setTimeout(\r\n () =>\r\n scrollParentIntoElement(element, fixedOffsetTop, tries - 1, timeout),\r\n timeout,\r\n ) as unknown as number;\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","/**\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 '[readonly]',\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(baseUrl: string, public defaultAllowMultiple = true) {\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 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","// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport type TEventMap = Record<string, any>;\r\nexport type TEventKey<T extends TEventMap> = string & keyof T;\r\nexport type TEventReceiver<T> = (params: T) => unknown;\r\nexport type TFun = () => unknown;\r\n\r\nexport interface IEmitter<T extends TEventMap> {\r\n on<K extends TEventKey<T>>(eventName: K, fn: TEventReceiver<T[K]>): TFun;\r\n off<K extends TEventKey<T>>(eventName: K, fn: TEventReceiver<T[K]>): unknown;\r\n emit<K extends TEventKey<T>>(eventName: K, params?: T[K]): unknown;\r\n}\r\n\r\nfunction eventEmitter<T extends TEventMap>(): IEmitter<T> {\r\n const listeners: {\r\n [K in keyof TEventMap]?: ((p: TEventMap[K]) => unknown)[];\r\n } = {};\r\n\r\n return {\r\n on(key, fn) {\r\n if (!Array.isArray(listeners[key])) listeners[key] = [];\r\n listeners[key]?.push(fn);\r\n return () => {\r\n this.off(key, fn);\r\n };\r\n },\r\n off(key, fn) {\r\n listeners[key] = (listeners[key] ?? []).filter((cb) => {\r\n return cb !== fn;\r\n });\r\n },\r\n emit(key, data) {\r\n (listeners[key] ?? []).forEach((fn) => {\r\n return fn(data);\r\n });\r\n },\r\n };\r\n}\r\n\r\n/**\r\n * EventEmitter muy sencillo. \r\n * \r\n * El siguiente ejemplo es un fragmento de una clase\r\n * perteneciente al grupo de wai-aria helpers. Ver que el método #shout nada\r\n * tiene que ver con la clase EventEmitter, sino que es un método interno de la\r\n * clase WaiTypeAhead.\r\n * \r\n * Lo que realmente importa en el ejemplo es el tipado (Lo que va luego de\r\n * extends EventEmitter) y el this.emit en la creación del emitter; por otra\r\n * parte es importante el (instance).on(...) que se muestra al final del\r\n * ejemplo, que permite realizar suscripciones al EventEmitter creado.\r\n * \r\n * Además, es notable que cuando se realiza una suscripción mediante\r\n * (instance).on, este método devuelve un método que al ser llamado rompe la\r\n * suscripción; esto nos da la firma del método on como:\r\n * \r\n * on(eventName: string, callback: (ev: eventType) => unknown): Unsuscriptor;\r\n * \r\n * @example\r\n * \r\n * // Event emitter creation \r\n * \r\n * class WaiTypeAhead extends EventEmitter<{\r\n multipleKeys: string;\r\n singleKey: string;\r\n }> {\r\n // ...\r\n #shout({ clear } = { clear: true }) {\r\n if (this.typing.length === 1) {\r\n this.emit('singleKey', this.typing);\r\n } else if (this.typing.length > 1) {\r\n this.emit('multipleKeys', this.typing);\r\n }\r\n // ...\r\n }\r\n // ...\r\n }\r\n\r\n // Usage\r\n\r\n const wtype = new WaiTypeAhead();\r\n wtype.on('multipleKeys', (typing) => {\r\n write(`Multiple: ${typing}`);\r\n });\r\n */\r\nexport class EventEmitter<T extends TEventMap> implements IEmitter<T> {\r\n #emitter = eventEmitter<T>();\r\n\r\n on<K extends TEventKey<T>>(eventName: K, fn: TEventReceiver<T[K]>) {\r\n this.#emitter.on(eventName, fn);\r\n return () => {\r\n this.#emitter.off(eventName, fn);\r\n };\r\n }\r\n\r\n off<K extends TEventKey<T>>(eventName: K, fn: TEventReceiver<T[K]>) {\r\n this.#emitter.off(eventName, fn);\r\n }\r\n\r\n emit<K extends TEventKey<T>>(eventName: K, params?: T[K]) {\r\n this.#emitter.emit(eventName, params);\r\n }\r\n}\r\n","import { EventEmitter } from './eventEmitter';\r\n\r\n/**\r\n * Esta clase ofrece la posibilidad de crear una variable que al ser\r\n * actualizada avisa sobre la actualización.\r\n *\r\n * @example\r\n * const name = new WithEventsValue<string>('Alexis Leite');\r\n *\r\n * name.on('update', (newName) => console.log(`El nuevo nombre es ${newName}`));\r\n *\r\n * name.value = 'Joel'; // logs \"El nuevo nombre es Joel\"\r\n */\r\nexport class WithEventsValue<T> extends EventEmitter<{\r\n update: T | undefined;\r\n}> {\r\n #value: T | undefined;\r\n\r\n constructor(value?: T) {\r\n super();\r\n\r\n this.#value = value;\r\n }\r\n\r\n get value() {\r\n return this.#value;\r\n }\r\n\r\n set value(value: T | undefined) {\r\n this.#value = value;\r\n this.emit('update', value);\r\n }\r\n}\r\n","import { isFunction } from 'lodash-es';\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","import { EventEmitter } from '../events';\r\n\r\n/**\r\n * Esta clase no implementa ninguna funcionalidad de bloqueo, sino solamente se\r\n * encarga de la lógica y de los eventos.\r\n *\r\n * El concepto es que hay n niveles de bloqueo y además existe el bloqueo\r\n * forzado. Cada uno de los niveles recibe un nombre, por defecto se realizan\r\n * operaciones contra el bloque 'common' si no se pasa ninguno, pero\r\n * podría utilizarse cualquier otro. Esto es así con el fin de implementar\r\n * varios bloqueos en la misma clase, ejemplos: el bloqueo común, el bloqueo\r\n * lineal de las tablas, bloque con pantalla blanca en el inicio de formularios,\r\n * o cualquier otro que se desee. Para los bloqueos estándar se utilizan los\r\n * métodos lock y unlock.\r\n *\r\n * El bloqueo forzado por otra parte es un estado general que se puede alterar\r\n * mediante los métodos force y releaseForced. Cada vez que se bloquee o\r\n * desbloquee la pantalla, se lanzará un evento lockStateChange sin lockName y\r\n * con forced = true.\r\n *\r\n * Además, provee un evento para saber cuándo se desbloquea la pantalla\r\n * efectivamente por primera vez para cada tipo de bloqueo. Es posible a su vez\r\n * resetear la clase para que este evento sea lanzado nuevamente en el próximo\r\n * desbloqueo mediante resetRefreshFirstTime.\r\n *\r\n * El evento releasForFirstTime se dispara únicamente para el bloqueo 'common'.\r\n * Esto es así ya que sino podría dar lugar a confusión en situaciones donde no\r\n * se controle el nombre del bloqueo.\r\n */\r\nexport const screenLocker = new (class ScreenLocker extends EventEmitter<{\r\n forcedStateChange: {\r\n hasReleasedFirstTime: boolean;\r\n isForced: boolean;\r\n };\r\n lockStateChange: {\r\n hasReleasedFirstTime: boolean;\r\n isLocked: boolean;\r\n lockName: string;\r\n };\r\n releaseForFirstTime: void;\r\n ready: void;\r\n}> {\r\n #hasReleasedFirstTime = false;\r\n\r\n #wasReleasedFirstTime = false;\r\n\r\n #isForced = false;\r\n\r\n #locks: Record<string, boolean> = {\r\n common: false,\r\n };\r\n\r\n get hasReleasedFirstTime() {\r\n return this.#hasReleasedFirstTime;\r\n }\r\n\r\n get isForced() {\r\n return this.#isForced;\r\n }\r\n\r\n /**\r\n * Permite saber si un bloqueo determinado está activo o si la clase tiene\r\n * forceLock activo.\r\n */\r\n isLocked(lockName = 'common') {\r\n return this.#locks[lockName] || this.#isForced;\r\n }\r\n\r\n constructor() {\r\n super();\r\n\r\n this.emit('ready');\r\n }\r\n\r\n #shoutLockState(lockName?: string) {\r\n if (this.#isForced || lockName === undefined) {\r\n this.emit('forcedStateChange', {\r\n isForced: this.#isForced,\r\n hasReleasedFirstTime: this.#hasReleasedFirstTime,\r\n });\r\n } else {\r\n if (\r\n lockName === 'common' &&\r\n !this.#wasReleasedFirstTime &&\r\n this.#hasReleasedFirstTime\r\n ) {\r\n this.emit('releaseForFirstTime');\r\n }\r\n\r\n this.emit('lockStateChange', {\r\n lockName,\r\n hasReleasedFirstTime: this.#hasReleasedFirstTime,\r\n isLocked: this.#locks[lockName],\r\n });\r\n }\r\n }\r\n\r\n lock(lockName = 'common') {\r\n this.#locks[lockName] = true;\r\n this.#shoutLockState(lockName);\r\n }\r\n\r\n unlock(lockName = 'common') {\r\n if (lockName === 'common') this.#hasReleasedFirstTime = true;\r\n this.#locks[lockName] = false;\r\n this.#shoutLockState(lockName);\r\n }\r\n\r\n force() {\r\n this.#isForced = true;\r\n this.#shoutLockState();\r\n }\r\n\r\n releaseForced() {\r\n this.#isForced = false;\r\n this.#shoutLockState();\r\n }\r\n})();\r\n","const 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\nwindow.persistentStorage = persistentStorage;\r\n\r\nexport default persistentStorage;\r\n","import { useCallback, useEffect, useMemo, useState } from 'react';\r\nimport { EventEmitter } from '../events';\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","import { isFunction } from 'lodash-es';\r\nimport { TRequireOnlyOne } from '../types';\r\nimport { globalFocus } from './globalFocus';\r\nimport { screenLocker } from '../screenLock';\r\nimport { customEvents, focusSelector } from '../dom';\r\nimport { persistentStorage } from '../storage';\r\nimport { noNaN } from '../number';\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 = 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 window.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('common') &&\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 (!internalCall && (this.#focusTimeout !== -1 || this.#isIntervalRunning))\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(undefined, true);\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) 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 (window as unknown as Record<string, string>).CURRENT_TAB?.split(\r\n '~',\r\n )[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","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\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 // eslint-disable-next-line react-hooks/exhaustive-deps\r\n useEffect(effect, []);\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 { 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 {\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","/* 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","/* 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]) method(setStates[id], ...args);\r\n else {\r\n console.warn(`The requested id does not exist: ${id}`);\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 else console.warn(`The requested id does not exist: ${id}`);\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';\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 { useEffect, useMemo, useRef } from 'react';\r\nimport { TEventsMap, TMap } from './types';\r\nimport useImperativeComponentContext from './useImperativeIdentifierContext';\r\nimport { uniqueId } from 'lodash';\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 function registerEvents() {\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 }\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 // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\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\ninterface ILabelsContainer {\r\n labels: {\r\n [key: string]: {\r\n text: string;\r\n tooltip: 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 * @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) {\r\n const label = {\r\n ...((window as unknown as ILabelsContainer).labels[name] ?? {\r\n text: `Not preloaded: ${name}`,\r\n tooltip: `Not preloaded: ${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.tooltip = formatMessage(label.tooltip, 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(\r\n obj: Record<string, unknown>,\r\n path: string | string[],\r\n separator = '.',\r\n): unknown {\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;\r\n return undefined;\r\n }\r\n const currentStep = actualPath.shift() as string;\r\n if (actualPath.length === 0) return obj[currentStep];\r\n return getValueByPath(\r\n obj[currentStep] as Record<string, unknown>,\r\n actualPath,\r\n separator,\r\n );\r\n}\r\n","import { clone } from 'lodash';\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(\r\n obj: Record<string, unknown>,\r\n path: string,\r\n value: unknown,\r\n) {\r\n if (path === '') return value as Record<string, unknown>;\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[steps[i]]) currentObj[steps[i]] = {};\r\n if (typeof currentObj[steps[i]] === 'object') {\r\n currentObj = currentObj[steps[i]] as Record<string, unknown>;\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[steps.pop() as string] = value;\r\n return originalClonedObject;\r\n}\r\n","import React, { useRef } from 'react';\r\nimport { propsStore, PropsStore } 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\nexport const PropsSelectorUndefinedObject = {};\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","/* eslint-disable @typescript-eslint/no-dynamic-delete */\r\nimport { cloneDeep } from 'lodash';\r\nimport {\r\n TProperties,\r\n TPropsSuscriptor,\r\n TUpdateFieldConfiguration,\r\n} from './types';\r\nimport { PropsSelectorUndefinedObject } from './usePropsSelector';\r\nimport { debugDispatcher } from '../debug';\r\nimport { TId } from '../types';\r\nimport { persistentStorage } from '../storage';\r\n\r\nconst propsLog = 'propsLog';\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, { 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 console.log('RENDER');\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 ucfirst(word: string) {\r\n return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();\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\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('&', '&amp;'));\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) 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"],"names":["_a","__async","React","__privateAdd","__privateGet","__privateSet","isFunction","__privateMethod","__objRest","__spreadValues","__spreadProps","uniqueId"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/number/index.ts","../src/animate/index.ts","../src/array/arrayOrArray.ts","../src/array/getIndex.ts","../src/crypto/generateKey.ts","../src/crypto/decrypt.ts","../src/crypto/encrypt.ts","../src/date/getDateFormat.ts","../src/date/apiaDateToStandarFormat.ts","../src/date/dateToApiaFormat.ts","../src/debug/debugDispatcher.ts","../src/debug/shortcutController.ts","../src/dom/autoDisconnectMutationObserver.ts","../src/dom/downloadUrl.ts","../src/dom/findScrollContainer.ts","../src/dom/findOffsetRelativeToScrollParent.ts","../src/dom/scrollParentIntoElement.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/events/eventEmitter.ts","../src/events/withEventsValue.ts","../src/focus/globalFocus.ts","../src/screenLock/screenLocker.ts","../src/storage/persistentStorage.ts","../src/storage/useLocalStorage.ts","../src/focus/focusController.ts","../src/hooks/useCombinedRefs.ts","../src/hooks/useDebouncedCallback.ts","../src/hooks/useLatest.ts","../src/hooks/useMount.ts","../src/hooks/useUnmount.ts","../src/hooks/usePrevious.ts","../src/hooks/useStateRef.ts","../src/hooks/useUpdateEffect.ts","../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/propsStore/usePropsSelector.ts","../src/propsStore/propsStore.ts","../src/states/useDomState.tsx","../src/states/useDebouncedState.ts","../src/string/ucfirst.ts","../src/typeGuards/toBoolean.ts","../src/xml/parseXmlAsync.ts"],"sourcesContent":["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 { addBoundary } from '../number';\n\nexport function animate(\n duration: number,\n callback: (progress: number) => unknown,\n onFinish?: () => unknown,\n) {\n let initialTime: number | undefined = undefined;\n let suscription: number;\n\n function innerAnimate(current: number) {\n if (initialTime === undefined) initialTime = current;\n\n const ellapsed = current - initialTime;\n const progress = ellapsed / duration;\n\n callback(addBoundary(progress, 0, 1));\n if (progress < 1) suscription = window.requestAnimationFrame(innerAnimate);\n else onFinish?.();\n }\n\n suscription = window.requestAnimationFrame(innerAnimate);\n\n return () => {\n window.cancelAnimationFrame(suscription);\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';\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","import CryptoJS from 'crypto-js';\n\nexport const generateKey = (\n salt: string,\n passPhrase: string,\n keySize: number,\n iterationCount: number,\n) => {\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 CryptoJS from 'crypto-js';\nimport { generateKey } from './generateKey';\n\nexport const decrypt = (\n salt: string,\n iv: string,\n passPhrase: string,\n cipherText: string,\n keySize: number,\n iterationCount: number,\n) => {\n const key = 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 CryptoJS from 'crypto-js';\nimport { generateKey } from './generateKey';\n\nexport const encrypt = (\n salt: string,\n iv: string,\n passPhrase: string,\n plainText: string,\n keySize: number,\n iterationCount: number,\n) => {\n const key = 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","import dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\nimport { TDateFormat } from '../types/apia/date';\n\ndayjs.extend(customParseFormat);\n\ndeclare global {\n interface Window {\n DATE_FORMAT: string;\n }\n}\n\nexport const DEFAULT_DATE_FORMAT: TDateFormat = 'DD/MM/YYYY';\n\nexport const getDateFormat = (): TDateFormat => {\n switch (window.DATE_FORMAT) {\n case 'm/d/Y':\n return 'MM/DD/YYYY';\n case 'd/m/Y':\n return DEFAULT_DATE_FORMAT;\n case 'Y/m/d':\n return 'YYYY/MM/DD';\n default:\n return 'DD/MM/YYYY';\n }\n};\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","/* eslint-disable comment-length/limit-multi-line-comments */\nimport React from 'react';\n\nlet isEnabled = true;\n\n/**\n * Indica si el debugDispatcher fue activado, lo que en muchos casos indica que\n * estamos en ambiente de desarrollo\n */\nexport function isDebugDispatcherEnabled() {\n return isEnabled;\n}\n\n/**\n * El debug dispatcher solamente debería activarse en modo desarrollo. Este\n * control solamente puede hacerse desde la aplicación principal, por ello, para\n * activar el debugDispatcher se exporta este método que debe llamarse cuando\n * sea correcto.\n */\nexport function enableDebugDispatcher() {\n isEnabled = true;\n}\n\ntype TWindowDDispatch = (action: string, ...parameters: unknown[]) => void;\nexport type TDispatchCallback = (parameters: unknown[]) => unknown;\ninterface IStoredCallback {\n (parameters: unknown[]): unknown;\n help: () => void;\n}\n\nexport const debugDispatcher = new (class DDispatcher {\n callbacks: Record<string, IStoredCallback[]> = {};\n\n actions: Record<string, () => void> = {\n shout: () => {\n console.log(Object.keys(this.callbacks));\n },\n };\n\n on(\n action: string,\n cb: TDispatchCallback,\n help: string | React.ReactNode,\n onlyDevelop = false,\n ) {\n if (!isEnabled && onlyDevelop) return () => {};\n\n if (Object.keys(this.actions).includes(action))\n throw new Error(\n `The action ${action} is a reserved word for the dispatcher.`,\n );\n if (!this.callbacks[action]) this.callbacks[action] = [];\n const actionMethod = Object.assign(cb, {\n help: () => {\n if (typeof help === 'string') console.info(help);\n },\n });\n this.callbacks[action].push(actionMethod);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n this[action] = Object.assign(\n (...props: unknown[]) => {\n this.emit(action, ...props);\n },\n {\n help: () => {\n if (typeof help === 'string') console.info(help);\n },\n },\n );\n return () => {\n this.off(action, cb);\n };\n\n // return () => {};\n }\n\n off(action: string, cb: TDispatchCallback) {\n this.callbacks[action] = this.callbacks[action].filter((current) => {\n return current !== cb;\n });\n }\n\n emit: TWindowDDispatch = (action, ...parameters) => {\n if (this.actions[action]) this.actions[action]();\n else {\n if ((this.callbacks[action] ?? []).length === 1)\n return this.callbacks[action]?.[0]?.(parameters);\n\n (this.callbacks[action] ?? []).forEach((cb) => {\n return cb(parameters);\n });\n }\n return null;\n };\n})();\n\ndeclare global {\n interface Window {\n adt: typeof debugDispatcher;\n dd: typeof debugDispatcher & Record<string, () => unknown>;\n }\n}\n\nwindow.dd = debugDispatcher as typeof debugDispatcher &\n Record<string, () => unknown>;\nwindow.adt = debugDispatcher;\n","import { debugDispatcher, isDebugDispatcherEnabled } from './debugDispatcher';\n\nexport type TCallback = (ev: KeyboardEvent) => unknown;\n\nexport type TKey = {\n key: string;\n altKey?: boolean;\n ctrlKey?: boolean;\n shiftKey?: boolean;\n};\n\nexport type TShortcutBranch = {\n key: TKey;\n children: TShortcutBranch[];\n callbacks: TCallback[];\n fireEvenFromInputs?: boolean;\n};\n\nexport const shortcutController = new (class ShortcutController {\n history: TKey[] = [];\n\n candidates: TShortcutBranch[] = [];\n\n shortcuts: TShortcutBranch = {\n callbacks: [],\n children: [],\n key: { key: '' },\n };\n\n shortcutsStrings: string[] = [];\n\n categories = {\n dev: ['shift&D'],\n };\n\n constructor() {\n document.addEventListener('keydown', (ev) => {\n if (ev.key?.length !== 1 && ev.key !== 'Escape') return;\n this.candidates = [\n ...this.candidates.reduce<TShortcutBranch[]>(\n (accumulated, current) => [\n ...accumulated,\n ...current.children.filter(\n (child) =>\n child.key.key === ev.key &&\n child.key.altKey === ev.altKey &&\n child.key.ctrlKey === ev.ctrlKey &&\n child.key.shiftKey === ev.shiftKey,\n ),\n ],\n [],\n ),\n ...this.shortcuts.children.filter(\n (current) =>\n current.key.key === ev.key &&\n current.key.altKey === ev.altKey &&\n current.key.ctrlKey === ev.ctrlKey &&\n current.key.shiftKey === ev.shiftKey,\n ),\n ];\n this.candidates.forEach((current) => {\n if (\n current.fireEvenFromInputs ||\n !(\n !ev.key ||\n ev.key.length > 1 ||\n ['input', 'textarea', 'select'].includes(\n (ev.target as HTMLElement).tagName?.toLowerCase(),\n )\n )\n ) {\n if (current.callbacks) current.callbacks.forEach((cb) => cb(ev));\n }\n });\n });\n\n debugDispatcher.on(\n 'shortcuts',\n () => {\n console.info(this.shortcutsStrings);\n console.info(this.shortcuts, this.history);\n },\n 'Muestra los shortcuts registrados',\n );\n this.on(\n 'short'.split(''),\n () => {\n this.shortcutsStrings.forEach((shortcut) => console.info(shortcut));\n },\n 'dev',\n );\n }\n\n parseKeyToString(key: string | TKey) {\n if (typeof key === 'string') return key;\n\n return `${key.altKey ? 'alt&' : ''}${key.ctrlKey ? 'ctrl&' : ''}${\n key.shiftKey ? 'shift&' : ''\n }${key.key}`;\n }\n\n parseKey(keyString: string): TKey {\n const elements = keyString.split('&');\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const altKey = elements.includes('alt');\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const ctrlKey = elements.includes('ctrl');\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const shiftKey = elements.includes('shift');\n const key = elements.find(\n (current) =>\n current !== 'shift' && current !== 'alt' && current !== 'ctrl',\n );\n if (!key) throw new Error(`parseKey \"${keyString}\" does not have key.`);\n\n return {\n key,\n altKey,\n ctrlKey,\n shiftKey,\n };\n }\n\n /**\n * Para setear un shorcut se puede pasar un string representativo con la\n * forma:\n *\n * **alt**?&**ctrl**?&**shift**?&**(\\w)**\n *\n * Donde: alt? ctrl? shift? implica que cualquiera de esas palabras pueden o\n * no aparecer y (\\w) es una letra, símbolo o número.\n *\n * Puede aparecer cualquier tecla de control o no, pero el símbolo o letra\n * debe aparecer.\n *\n * @param category\n * Agrega un prefijo de teclas que se deben presionar antes del shortcut para\n * que funcione, de forma que por ejemplo, todos los shortcuts de la categoría\n * dev serán ejecutados solamente si antes se presionó shift&D\n *\n * @example\n *\n shortcutController.on(['shift&A', 'b', 'ctrl&c', 'alt&d'], (ev) => {\n ev.preventDefault();\n console.log('Abctrl+cd'),\n }); // Este shortcut se ejecuta en desarrollo y producción\n\n shortcutController.on('unshortcut'.split(''), (ev) => {\n ev.preventDefault();\n console.log('Abctrl+cd'),\n }, 'dev'); // Este shortcut solo se ejecuta en desarrollo\n */\n on(\n keys: (string | TKey)[],\n callback: TCallback,\n category?: keyof typeof this.categories,\n fireEvenFromInputs?: boolean,\n ) {\n if (category === 'dev' && isDebugDispatcherEnabled()) return;\n\n let container = this.shortcuts;\n const actualKeys = category\n ? [...this.categories[category], ...keys]\n : keys;\n\n if (\n this.shortcutsStrings.includes(\n actualKeys.map((current) => this.parseKeyToString(current)).join(''),\n )\n ) {\n console.warn(\n `The shortcut ${actualKeys\n .map((current) => this.parseKeyToString(current))\n .join(\n '',\n )} is being setted twice. The controller wont register more than one instance but this could be a hint if some unexpected behavior.`,\n );\n return;\n }\n\n // eslint-disable-next-line no-restricted-syntax\n for (const key of actualKeys) {\n const actualKey = typeof key === 'string' ? this.parseKey(key) : key;\n if (actualKey.key === '')\n throw new Error(`Empty key ('') is not allowed`);\n const keyContainer = container.children.find(\n (current) =>\n current.key.key === actualKey.key ||\n (current.key.key === '' &&\n current.key.altKey === actualKey.altKey &&\n current.key.ctrlKey === actualKey.ctrlKey &&\n current.key.shiftKey === actualKey.shiftKey &&\n current.fireEvenFromInputs === fireEvenFromInputs),\n );\n if (keyContainer) container = keyContainer;\n else {\n const newContainer = {\n callbacks: [],\n children: [],\n key: actualKey,\n fireEvenFromInputs,\n };\n container.children.push(newContainer);\n container = newContainer;\n }\n }\n this.shortcutsStrings.push(\n actualKeys.map((current) => this.parseKeyToString(current)).join(''),\n );\n container.callbacks.push(callback);\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 axios, { AxiosResponse } from 'axios';\nimport FileSaver from 'file-saver';\n\nexport function defaultGetNameFromResponse(blob: AxiosResponse) {\n return (\n (blob.headers['content-disposition'] as string)?.match?.(\n /filename=(?:\\\\?\")?([\\w,\\s-() ]+(?:\\.[A-Za-z]+)?)(?:\\\\?\")?;?/,\n )?.[1] ?? 'noFileName'\n );\n}\n\n/**\n * This function gets an URL and a file name and performs a file download.\n *\n * @param url The url to fetch\n * @param getNameFromResponse The name will be given by the 'content-disposition' prop in the headers\n */\nexport async function downloadUrl(\n url: string,\n getNameFromResponse?: (blob: AxiosResponse) => string,\n): Promise<void>;\n/**\n * This function gets an URL and a file name and performs a file download.\n *\n * @param url The url to fetch\n * @param fileName The name the file will have as default in the save dialog\n */\nexport async function downloadUrl(url: string, fileName: string): Promise<void>;\nexport async function downloadUrl(\n url: string,\n secondParameter:\n | string\n | ((blob: AxiosResponse) => string) = defaultGetNameFromResponse,\n): Promise<void> {\n const blob = await axios.get(url, {\n responseType: 'blob',\n });\n\n const actualFileName =\n typeof secondParameter === 'string'\n ? secondParameter\n : secondParameter(blob);\n\n FileSaver.saveAs(new Blob([blob.data]), actualFileName);\n}\n","const REGEXP_SCROLL_PARENT = /^(visible|hidden)/;\n/**\n * Encuentra el primer elemento padre del elemento provisto que tenga scroll\n * activo.\n */\nexport function findScrollContainer(el: HTMLElement): HTMLElement | null {\n // eslint-disable-next-line no-nested-ternary\n return !(el instanceof HTMLElement) ||\n typeof window.getComputedStyle !== 'function'\n ? null\n : el.scrollHeight >= el.clientHeight &&\n !REGEXP_SCROLL_PARENT.test(\n window.getComputedStyle(el).overflowY || 'visible',\n )\n ? el\n : findScrollContainer(el.parentElement as HTMLElement) || document.body;\n}\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);\n let currentElement = element;\n let offset = 0;\n let offsetParent = currentElement;\n while (\n currentElement &&\n currentElement !== scrollParent &&\n currentElement !== document.body &&\n offsetParent !== scrollParent\n ) {\n if (offsetParent !== currentElement.offsetParent) {\n offset += currentElement[`offset${which}`];\n offsetParent = currentElement.offsetParent as HTMLElement;\n }\n currentElement = currentElement.parentElement as HTMLElement;\n }\n return offset;\n}","import { findOffsetRelativeToScrollParent } from \"./findOffsetRelativeToScrollParent\";\nimport { findScrollContainer } from \"./findScrollContainer\";\n\nconst scrollIntervals: Record<string, number> = {};\n/**\n * Busca el padre con scroll visible y establece su scrollTop de acuerdo al offset del elemento pasado como argumento, de modo que éste aparezca visible dentro del padre mencionado.\n *\n * @param fixedOffsetTop Establece un mínimo de distancia que debe mantener con el borde superior del contenedor con scroll. Se usa para compensar en las situaciones donde existen cabezales fijos.\n */\nexport function scrollParentIntoElement(\n element: HTMLElement,\n fixedOffsetTop = 0,\n tries = 2,\n timeout = 100,\n scrollId: string | undefined = undefined,\n) {\n if (scrollId) {\n clearTimeout(scrollIntervals[scrollId]);\n }\n\n const scrollParent = findScrollContainer(element);\n const offsetTop = findOffsetRelativeToScrollParent(element);\n\n if (\n scrollParent &&\n (scrollParent.scrollTop + fixedOffsetTop > offsetTop ||\n (scrollParent?.clientHeight ?? Infinity) - fixedOffsetTop <\n element.getBoundingClientRect().height)\n ) {\n scrollParent.scrollTop = offsetTop - fixedOffsetTop;\n } else if (\n scrollParent &&\n scrollParent.scrollTop + scrollParent.clientHeight <\n offsetTop + element.getBoundingClientRect().height\n ) {\n scrollParent.scrollTop = offsetTop;\n }\n\n if (tries > 0)\n scrollIntervals[scrollId ?? 'noId'] = setTimeout(\n () =>\n scrollParentIntoElement(element, fixedOffsetTop, tries - 1, timeout),\n timeout,\n ) as unknown as number;\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","/**\n * Existen algunos eventos que se disparan en la\n * aplicación con la finalidad de desencadenar\n * un comportamiento específico. Por ello se declaran\n * las siguientes constantes.\n */\nexport const customEvents = {\n /**\n * Indica que un elemento necesita recibir el foco,\n * de esta forma, elementos que no se están mostrando\n * en pantalla (por display:none por ejemplo), pueden\n * indicar a sus ancestros que deben expandirse.\n */\n focus: 'customFocus',\n /**\n * Indica que debe cambiarse el título del modal\n */\n iframeModalChangeTitle: 'iframeModalChangeTitle',\n /**\n * Indica que un iframe modal debe cerrarse\n */\n iframeModalClose: 'iframeModalClose',\n /**\n * Indica que un iframe modal debe cerrarse\n */\n iframeModalNotify: 'iframeModalNotify',\n /**\n * Indica que un modal debe cerrarse\n */\n modalClose: 'modalClose',\n /**\n * Indica que el panel contenedor debe cerrarse porque\n * está vacío\n */\n hidePanel: 'hidePanel',\n showPanel: 'showPanel',\n};\n","/**\n * Este selector pretende abarcar todos modificadores que en caso de estar\n * presentes hacen que un elemento no sea focusable\n */\nexport const cantFocusSelector = [\n '[disabled]',\n '[tabIndex=\"-1\"]',\n '[aria-hidden=\"true\"]',\n '[readonly]',\n '[data-focus-guard]',\n '.modal__closeButton',\n]\n .map((current) => `:not(${current})`)\n .join('');\n\n/**\n * Este selector pretende abarcar todos los elementos que sean focusables\n */\nexport const focusSelector = [\n 'input',\n 'textarea',\n 'select',\n 'a',\n 'button:not(.toggleAccordionElement)',\n '[contenteditable]',\n '[tabIndex]',\n '[role=\"button\"]',\n]\n .map((current) => `${current}${cantFocusSelector}`)\n .join(',');\n\n/**\n * Genera un selector que permitirá seleccionar\n * todos los elementos candidatos a recibir foco,\n * que no cumplan con la condición not pasada\n * como parámetro.\n *\n * @param not Un selector not css, indicando cuáles\n * condiciones deben evitar el foco en un elemento.\n *\n * @returns Una cadena que representa un selector\n * css.\n */\nexport function getFocusSelector(not?: string) {\n return `input${not ?? ''}, \n textarea${not ?? ''}, \n select${not ?? ''}, \n a${not ?? ''}, \n button:not(.toggleAccordionElement)${not ?? ''}, \n [contenteditable]${not ?? ''}, \n [tabIndex]${not ?? ''}`;\n}\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';\n\nexport interface IParameter {\n name: string;\n value: unknown;\n allowMultiple?: boolean;\n}\n\nexport class Url {\n base: string;\n\n #parameters: Record<string, string | string[]> = {};\n\n constructor(baseUrl: string, public defaultAllowMultiple = true) {\n const [base, query] = baseUrl.split('?');\n this.base = base;\n query?.split('&').forEach((current) => {\n const [name, ...value] = current.split('=');\n this.addParameter(name, value.join('='));\n });\n }\n\n addParameter(name: string, value: unknown, allowMultiple?: boolean) {\n if (\n (allowMultiple === undefined && !this.defaultAllowMultiple) ||\n allowMultiple === false\n )\n this.#parameters[name] = String(value);\n else\n this.#parameters[name] = this.#parameters[name]\n ? [...arrayOrArray(this.#parameters[name]), String(value)]\n : [String(value)];\n }\n\n addParameters(parameters: IParameter[]) {\n parameters.forEach((current) =>\n this.addParameter(current.name, current.value, current.allowMultiple),\n );\n }\n\n getParameter(name: string) {\n return this.#parameters[name];\n }\n\n toString() {\n const parametersArray = Object.entries(this.#parameters);\n\n return `${this.base}${\n parametersArray.length > 0\n ? `?${parametersArray\n .map(([name, value]) =>\n Array.isArray(value)\n ? value.map((current) => `${name}=${current}`).join('&')\n : `${name}=${String(value)}`,\n )\n .join('&')}`\n : ''\n }`;\n }\n}\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","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type TEventMap = Record<string, any>;\nexport type TEventKey<T extends TEventMap> = string & keyof T;\nexport type TEventReceiver<T> = (params: T) => unknown;\nexport type TFun = () => unknown;\n\nexport interface IEmitter<T extends TEventMap> {\n on<K extends TEventKey<T>>(eventName: K, fn: TEventReceiver<T[K]>): TFun;\n off<K extends TEventKey<T>>(eventName: K, fn: TEventReceiver<T[K]>): unknown;\n emit<K extends TEventKey<T>>(eventName: K, params?: T[K]): unknown;\n}\n\nfunction eventEmitter<T extends TEventMap>(): IEmitter<T> {\n const listeners: {\n [K in keyof TEventMap]?: ((p: TEventMap[K]) => unknown)[];\n } = {};\n\n return {\n on(key, fn) {\n if (!Array.isArray(listeners[key])) listeners[key] = [];\n listeners[key]?.push(fn);\n return () => {\n this.off(key, fn);\n };\n },\n off(key, fn) {\n listeners[key] = (listeners[key] ?? []).filter((cb) => {\n return cb !== fn;\n });\n },\n emit(key, data) {\n (listeners[key] ?? []).forEach((fn) => {\n return fn(data);\n });\n },\n };\n}\n\n/**\n * EventEmitter muy sencillo. \n * \n * El siguiente ejemplo es un fragmento de una clase\n * perteneciente al grupo de wai-aria helpers. Ver que el método #shout nada\n * tiene que ver con la clase EventEmitter, sino que es un método interno de la\n * clase WaiTypeAhead.\n * \n * Lo que realmente importa en el ejemplo es el tipado (Lo que va luego de\n * extends EventEmitter) y el this.emit en la creación del emitter; por otra\n * parte es importante el (instance).on(...) que se muestra al final del\n * ejemplo, que permite realizar suscripciones al EventEmitter creado.\n * \n * Además, es notable que cuando se realiza una suscripción mediante\n * (instance).on, este método devuelve un método que al ser llamado rompe la\n * suscripción; esto nos da la firma del método on como:\n * \n * on(eventName: string, callback: (ev: eventType) => unknown): Unsuscriptor;\n * \n * @example\n * \n * // Event emitter creation \n * \n * class WaiTypeAhead extends EventEmitter<{\n multipleKeys: string;\n singleKey: string;\n }> {\n // ...\n #shout({ clear } = { clear: true }) {\n if (this.typing.length === 1) {\n this.emit('singleKey', this.typing);\n } else if (this.typing.length > 1) {\n this.emit('multipleKeys', this.typing);\n }\n // ...\n }\n // ...\n }\n\n // Usage\n\n const wtype = new WaiTypeAhead();\n wtype.on('multipleKeys', (typing) => {\n write(`Multiple: ${typing}`);\n });\n */\nexport class EventEmitter<T extends TEventMap> implements IEmitter<T> {\n #emitter = eventEmitter<T>();\n\n on<K extends TEventKey<T>>(eventName: K, fn: TEventReceiver<T[K]>) {\n this.#emitter.on(eventName, fn);\n return () => {\n this.#emitter.off(eventName, fn);\n };\n }\n\n off<K extends TEventKey<T>>(eventName: K, fn: TEventReceiver<T[K]>) {\n this.#emitter.off(eventName, fn);\n }\n\n emit<K extends TEventKey<T>>(eventName: K, params?: T[K]) {\n this.#emitter.emit(eventName, params);\n }\n}\n","import { EventEmitter } from './eventEmitter';\n\n/**\n * Esta clase ofrece la posibilidad de crear una variable que al ser\n * actualizada avisa sobre la actualización.\n *\n * @example\n * const name = new WithEventsValue<string>('Alexis Leite');\n *\n * name.on('update', (newName) => console.log(`El nuevo nombre es ${newName}`));\n *\n * name.value = 'Joel'; // logs \"El nuevo nombre es Joel\"\n */\nexport class WithEventsValue<T> extends EventEmitter<{\n update: T | undefined;\n}> {\n #value: T | undefined;\n\n constructor(value?: T) {\n super();\n\n this.#value = value;\n }\n\n get value() {\n return this.#value;\n }\n\n set value(value: T | undefined) {\n this.#value = value;\n this.emit('update', value);\n }\n}\n","import { isFunction } from 'lodash-es';\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","import { EventEmitter } from '../events';\n\n/**\n * Esta clase no implementa ninguna funcionalidad de bloqueo, sino solamente se\n * encarga de la lógica y de los eventos.\n *\n * El concepto es que hay n niveles de bloqueo y además existe el bloqueo\n * forzado. Cada uno de los niveles recibe un nombre, por defecto se realizan\n * operaciones contra el bloque 'common' si no se pasa ninguno, pero\n * podría utilizarse cualquier otro. Esto es así con el fin de implementar\n * varios bloqueos en la misma clase, ejemplos: el bloqueo común, el bloqueo\n * lineal de las tablas, bloque con pantalla blanca en el inicio de formularios,\n * o cualquier otro que se desee. Para los bloqueos estándar se utilizan los\n * métodos lock y unlock.\n *\n * El bloqueo forzado por otra parte es un estado general que se puede alterar\n * mediante los métodos force y releaseForced. Cada vez que se bloquee o\n * desbloquee la pantalla, se lanzará un evento lockStateChange sin lockName y\n * con forced = true.\n *\n * Además, provee un evento para saber cuándo se desbloquea la pantalla\n * efectivamente por primera vez para cada tipo de bloqueo. Es posible a su vez\n * resetear la clase para que este evento sea lanzado nuevamente en el próximo\n * desbloqueo mediante resetRefreshFirstTime.\n *\n * El evento releasForFirstTime se dispara únicamente para el bloqueo 'common'.\n * Esto es así ya que sino podría dar lugar a confusión en situaciones donde no\n * se controle el nombre del bloqueo.\n */\nexport const screenLocker = new (class ScreenLocker extends EventEmitter<{\n forcedStateChange: {\n hasReleasedFirstTime: boolean;\n isForced: boolean;\n };\n lockStateChange: {\n hasReleasedFirstTime: boolean;\n isLocked: boolean;\n lockName: string;\n };\n releaseForFirstTime: void;\n ready: void;\n}> {\n #hasReleasedFirstTime = false;\n\n #wasReleasedFirstTime = false;\n\n #isForced = false;\n\n #locks: Record<string, boolean> = {\n common: false,\n };\n\n get hasReleasedFirstTime() {\n return this.#hasReleasedFirstTime;\n }\n\n get isForced() {\n return this.#isForced;\n }\n\n /**\n * Permite saber si un bloqueo determinado está activo o si la clase tiene\n * forceLock activo.\n */\n isLocked(lockName = 'common') {\n return this.#locks[lockName] || this.#isForced;\n }\n\n constructor() {\n super();\n\n this.emit('ready');\n }\n\n #shoutLockState(lockName?: string) {\n if (this.#isForced || lockName === undefined) {\n this.emit('forcedStateChange', {\n isForced: this.#isForced,\n hasReleasedFirstTime: this.#hasReleasedFirstTime,\n });\n } else {\n if (\n lockName === 'common' &&\n !this.#wasReleasedFirstTime &&\n this.#hasReleasedFirstTime\n ) {\n this.emit('releaseForFirstTime');\n }\n\n this.emit('lockStateChange', {\n lockName,\n hasReleasedFirstTime: this.#hasReleasedFirstTime,\n isLocked: this.#locks[lockName],\n });\n }\n }\n\n lock(lockName = 'common') {\n this.#locks[lockName] = true;\n this.#shoutLockState(lockName);\n }\n\n unlock(lockName = 'common') {\n if (lockName === 'common') this.#hasReleasedFirstTime = true;\n this.#locks[lockName] = false;\n this.#shoutLockState(lockName);\n }\n\n force() {\n this.#isForced = true;\n this.#shoutLockState();\n }\n\n releaseForced() {\n this.#isForced = false;\n this.#shoutLockState();\n }\n})();\n","const persistentStorage = new Proxy<{\n remove(prop: string): unknown;\n [key: string]: unknown;\n}>(\n {\n remove(prop) {\n localStorage.removeItem(prop);\n },\n },\n {\n get(_, prop) {\n try {\n const value = localStorage.getItem(String(prop));\n if (!value) return undefined;\n return JSON.parse(value) as unknown;\n } catch {\n return undefined;\n }\n },\n set(_, prop, value) {\n localStorage.setItem(String(prop), JSON.stringify(value));\n return true;\n },\n },\n);\n\ndeclare global {\n interface Window {\n persistentStorage: typeof persistentStorage;\n }\n}\n\nwindow.persistentStorage = persistentStorage;\n\nexport default persistentStorage;\n","import { useCallback, useEffect, useMemo, useState } from 'react';\nimport { EventEmitter } from '../events';\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","import { isFunction } from 'lodash-es';\nimport { TRequireOnlyOne } from '../types';\nimport { globalFocus } from './globalFocus';\nimport { screenLocker } from '../screenLock';\nimport { customEvents, focusSelector } from '../dom';\nimport { persistentStorage } from '../storage';\nimport { noNaN } from '../number';\n\ninterface IFocusProps {\n modalsContainerRetriever?: () => HTMLElement;\n notificationsContainerRetriever?: () => HTMLElement;\n}\n\nexport interface IOnFocusConfiguration {\n /**\n * El controlador emite un evento custom cuando se realiza foco, con la\n * intención de que los elementos colapsables se abran automáticamente. Si\n * este parámetro es pasado con false, se evita ese comportamiento.\n */\n dispatchCustomEvent?: boolean;\n /**\n * Cuando la pantalla está bloqueada con el spinner, el controlador no\n * intentará hacer foco, a menos que este parámetro se pase en true.\n */\n focusEvenWhenScreenLocked?: boolean;\n scrollIntoViewOptions?: ScrollIntoViewOptions;\n}\n\nexport const notificationsSelector = '.notification';\n\n/**\n * Al método focus.on se le puede pasar o bien un HTMLElement o bien una\n * función que implemente esta interfaz. Cuando se pasa una función, la misma\n * será invocada cada vez que se vaya a intentar una acción de foco.\n *\n * Si la función devuelve un elemento HTML, se intentará hacer foco sobre éste.\n *\n * Si la función devuelve null, ese intento será tomado como nulo y se volverá\n * a intentar luego del tiempo determinado.\n *\n * Si la función devuelve false, será eliminada de la cola de foco, lo que\n * significa que ya no se intentará hacer foco sobre este elemento. En cambio,\n * se continuará con los demás elementos de la cola o en caso de no haber\n * ninguno, con el último elemento que tuvo foco y aún esté presente en el\n * documento.\n */\nexport type TFocusRetriever = (\n isLastTry: boolean,\n) => HTMLElement | null | false;\n\ninterface IFocusQueryElement {\n element: HTMLElement | TFocusRetriever;\n configuration?: IOnFocusConfiguration;\n}\n\ndeclare global {\n interface Window {\n focusStatus: Record<string, unknown>;\n }\n}\n\ninterface IFocusCheck {\n currentInstruction: number;\n}\n\nexport const focus = new (class FocusController {\n #root: HTMLElement;\n\n #props: IFocusProps | undefined;\n\n constructor(root: HTMLElement, props?: IFocusProps) {\n this.#root = root;\n this.#props = props;\n\n window.focusStatus = {};\n globalFocus.onFocus(() => {\n this.#resetInterval();\n });\n }\n\n afterNotificationFocus: IFocusQueryElement | undefined = undefined;\n\n #actualFocusQuery: IFocusQueryElement[] = [];\n\n #currentInstruction = 0;\n\n #focusDelay = 300;\n\n #focusRetries = 3;\n\n #focusTimeout = -1;\n\n #isIntervalRunning = false;\n\n set #focusQuery(value: IFocusQueryElement[]) {\n this.#actualFocusQuery = value;\n }\n\n get #focusQuery() {\n return new Proxy(this.#actualFocusQuery, {\n get: (target, key) => {\n if (key in target) {\n const prop = target[key as keyof typeof target];\n if (isFunction(prop))\n return (...props: unknown[]) => {\n const result = (\n target[key as keyof typeof target] as unknown as (\n ...methodProps: unknown[]\n ) => void\n ).bind(target, ...props)();\n return result;\n };\n return prop;\n }\n return undefined;\n },\n });\n }\n\n #checkInstruction(focusCheck: IFocusCheck) {\n return focusCheck.currentInstruction === this.#currentInstruction;\n }\n\n async #doFocus(\n HTMLElement: HTMLElement | TFocusRetriever,\n focusCheck: IFocusCheck,\n isLastTry: boolean,\n configuration?: IOnFocusConfiguration,\n ) {\n if (\n screenLocker.isLocked('common') &&\n !configuration?.focusEvenWhenScreenLocked\n ) {\n return null;\n }\n const actualHTMLElement = isFunction(HTMLElement)\n ? HTMLElement(isLastTry)\n : HTMLElement;\n\n if (actualHTMLElement) {\n if ((actualHTMLElement as HTMLInputElement).disabled) return false;\n actualHTMLElement.focus();\n return new Promise<false | null | HTMLElement>((resolve) => {\n if (configuration?.dispatchCustomEvent !== false) {\n const customFocusEvent = new CustomEvent(customEvents.focus, {\n bubbles: true,\n });\n actualHTMLElement.dispatchEvent(customFocusEvent);\n }\n\n /**\n * Este setTimeout está colocado aquí para asegurarme de que se\n * propague correctamente el customEvent y los procesos de renderizado\n * asociados puedan ser ejecutados antes de proseguir con el proces de\n * foco.\n */\n setTimeout(() => {\n if (!this.#checkInstruction(focusCheck)) {\n resolve(false);\n return;\n }\n try {\n if (configuration?.scrollIntoViewOptions)\n actualHTMLElement?.scrollIntoView(\n configuration.scrollIntoViewOptions,\n );\n } catch (e) {\n console.error(e);\n }\n setTimeout(() => {\n if (!this.#checkInstruction(focusCheck)) {\n resolve(false);\n } else if (document.activeElement?.tagName === 'IFRAME') {\n resolve(\n (\n document.activeElement as HTMLIFrameElement\n ).contentDocument?.contains(actualHTMLElement)\n ? actualHTMLElement\n : null,\n );\n } else\n resolve(\n document.activeElement === actualHTMLElement\n ? actualHTMLElement\n : null,\n );\n }, 0);\n }, 0);\n });\n }\n return actualHTMLElement;\n }\n\n #resetInterval() {\n clearTimeout(this.#focusTimeout);\n this.#focusTimeout = -1;\n this.#isIntervalRunning = false;\n this.#currentInstruction++;\n }\n\n async #runFocusInterval(\n focusElement?: IFocusQueryElement,\n internalCall?: boolean,\n ): Promise<false | HTMLElement> {\n if (!internalCall && (this.#focusTimeout !== -1 || this.#isIntervalRunning))\n return false;\n const currentInstruction: IFocusCheck = {\n currentInstruction: this.#currentInstruction,\n };\n this.#isIntervalRunning = true;\n return new Promise<false | HTMLElement>((resolve) => {\n const resolvePromise = async () => {\n const element = focusElement ?? this.#focusQuery.shift();\n\n if (element) {\n const hasFocused = await this.#doFocus(\n element.element,\n currentInstruction,\n element !== this.#focusQuery[0],\n element.configuration,\n );\n if (!this.#checkInstruction(currentInstruction)) {\n resolve(false);\n return;\n }\n if (hasFocused !== null && hasFocused !== false) {\n this.#actualFocusQuery = [];\n resolve(hasFocused);\n this.#isIntervalRunning = false;\n return;\n }\n if (hasFocused === false) {\n this.#actualFocusQuery = this.#actualFocusQuery.filter(\n (current) => current !== element,\n );\n }\n }\n\n if (!this.#checkInstruction(currentInstruction)) {\n resolve(false);\n return;\n }\n\n if (this.#actualFocusQuery.length > 0) {\n this.#focusTimeout = setTimeout(() => {\n const runInterval = async () => {\n const result = await this.#runFocusInterval(undefined, true);\n resolve(result);\n this.#isIntervalRunning = true;\n };\n void runInterval();\n }, this.#focusDelay) as unknown as number;\n } else {\n const lastFocused = globalFocus.last(':not(body)');\n if (lastFocused) {\n const result = await this.#doFocus(\n lastFocused,\n currentInstruction,\n element !== this.#focusQuery[0],\n element?.configuration,\n );\n if (!this.#checkInstruction(currentInstruction)) {\n resolve(false);\n return;\n }\n if (result) resolve(result);\n else resolve(false);\n this.#isIntervalRunning = true;\n }\n resolve(false);\n this.#isIntervalRunning = true;\n }\n };\n void resolvePromise();\n });\n }\n\n /**\n * Da la instrucción de colocar el foco en el elemento provisto como\n * parámetro una vez que todas las notificaciones se hayan cerrado. En caso\n * de no existir notificaciones abiertas, hace foco en el elemento\n * directamente.\n */\n afterNotifications(\n element: HTMLElement | TFocusRetriever,\n configuration?: IOnFocusConfiguration,\n ) {\n if (!element) return;\n void this.on(element, configuration);\n }\n\n /**\n * Da la instrucción de colocar el foco en el elemento provisto como\n * parámetro luego de recargar la página.\n *\n * Los parámetros pasados serán ordenados en orden de importancia priorizando\n * en el siguiente orden:\n * - id\n * - name\n * - className\n * - selector\n */\n afterReload({\n className,\n id,\n name,\n selector,\n }: TRequireOnlyOne<{\n className: string;\n id: string;\n name: string;\n selector: string;\n }>) {\n persistentStorage.focusOnReload = [\n id ? `#${id}` : undefined,\n name ? `[name=\"${name}\"]` : undefined,\n className ? `.${className}` : undefined,\n selector,\n ]\n .filter((el) => el !== undefined)\n .join(',');\n }\n\n /**\n * Da la instrucción de colocar el foco el elemento pasado como parámetro.\n * Se puede pasar también una función que devuelva HTMLElement | false |\n * null.\n *\n * El segundo parámetro del método on es un objeto de tipo\n * ScrollIntoViewOptions, que permite modificar el comportamiento del scroll\n * a en el elemento.\n *\n * @see TFocusRetriever para más detalles sobre la función como parámetro.\n */\n async on(\n element: HTMLElement | TFocusRetriever,\n configuration?: IOnFocusConfiguration,\n ) {\n if (element) {\n const focusElement = {\n element,\n configuration,\n };\n for (let i = 0; i < this.#focusRetries; i++)\n this.#focusQuery.unshift(focusElement);\n\n this.#resetInterval();\n return this.#runFocusInterval(focusElement);\n }\n return false;\n }\n\n focusOnReload: string | null = null;\n\n restore() {\n void this.on(\n (globalFocus.last(':not(body), body#tinymce') as HTMLElement) ||\n (document.querySelector(focusSelector) as HTMLElement),\n );\n }\n\n init() {\n const modalsObserver = new MutationObserver((mutation) => {\n if (mutation[0].removedNodes.length === 0) return;\n this.afterNotifications(\n globalFocus.last(\n ':not(body):not(.notificationsView *), body#tinymce',\n ) as HTMLElement,\n );\n });\n const appModalsBox = (\n this.#props?.modalsContainerRetriever ??\n (() => this.#root.querySelector('#AppModals'))\n )();\n if (appModalsBox) modalsObserver.observe(appModalsBox, { childList: true });\n\n screenLocker.on('releaseForFirstTime', () => {\n if (persistentStorage.focusOnReload)\n this.focusOnReload = persistentStorage.focusOnReload as string;\n persistentStorage.focusOnReload = null;\n this.afterNotifications(() => {\n if (this.focusOnReload) {\n const initialFocusElement = document.querySelector(\n this.focusOnReload,\n );\n const scrollTop = noNaN(\n (window as unknown as Record<string, string>).CURRENT_TAB?.split(\n '~',\n )[1],\n );\n if (document.scrollingElement)\n document.scrollingElement.scrollTop = scrollTop;\n return initialFocusElement as HTMLElement | null;\n }\n return false;\n });\n });\n }\n})(document.getElementById('root') as HTMLElement);\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\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 // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(effect, []);\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 { 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 {\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","/* 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","/* 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]) method(setStates[id], ...args);\n else {\n console.warn(`The requested id does not exist: ${id}`);\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 else console.warn(`The requested id does not exist: ${id}`);\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';\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 { useEffect, useMemo, useRef } from 'react';\nimport { TEventsMap, TMap } from './types';\nimport useImperativeComponentContext from './useImperativeIdentifierContext';\nimport { uniqueId } from 'lodash';\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 function registerEvents() {\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 }\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 // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\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';\n\ninterface ILabelsContainer {\n labels: {\n [key: string]: {\n text: string;\n tooltip: string;\n };\n };\n}\n\n/**\n * Dado un nombre de etiqueta, devuelve el texto que esa etiqueta contiene en\n * el idioma actual. En este momento, lo único que hace realmente esta función\n * es devolver la variable del window con el mismo nombre que se está\n * pidiendo.\n *\n * La idea de implementar esta función, es que en un futuro la fuente de la\n * que provienen las labels pueda ser más diversa.\n *\n * Permite el pasaje de tokens para el reemplazo automático de los mismos.\n *\n * @example\n *\n * // Suponemos la etiqueta msgUsu = { text: 'Usuario <TOK1>', title: 'Usuario <TOK1>' }\n *\n * getLabel('msgUsu' , {\n * text: {\n * TOK1: 'admin',\n * },\n * title: {\n * TOK1: 'no disponible',\n * }\n * })\n */\nexport function getLabel(\n name: string,\n replaceTokens?: {\n text?: Record<string, string>;\n title?: Record<string, string>;\n },\n) {\n const label = {\n ...((window as unknown as ILabelsContainer).labels[name] ?? {\n text: `Not preloaded: ${name}`,\n tooltip: `Not preloaded: ${name}`,\n }),\n };\n\n if (replaceTokens?.text !== undefined)\n label.text = formatMessage(label.text, replaceTokens.text);\n if (replaceTokens?.title !== undefined)\n label.tooltip = formatMessage(label.tooltip, replaceTokens.title);\n\n return label;\n}\n","/**\n * Este método itera sobre un objeto hasta encontrar la ruta especificada\n *\n * @example\n *\n const obj = {\n a: {\n b: {\n c: {\n d: \"d\"\n }\n }\n }\n };\n\n console.log(getValueByPath(obj,'a.b.c')) // { d: 'd' }\n console.log(getValueByPath(obj,'a.b.c.d')) // 'd'\n *\n */\nexport function getValueByPath(\n obj: Record<string, unknown>,\n path: string | string[],\n separator = '.',\n): unknown {\n const actualPath = typeof path === 'string' ? path.split(separator) : path;\n if (typeof obj !== 'object' || !obj) {\n if (actualPath.length === 0) return obj;\n return undefined;\n }\n const currentStep = actualPath.shift() as string;\n if (actualPath.length === 0) return obj[currentStep];\n return getValueByPath(\n obj[currentStep] as Record<string, unknown>,\n actualPath,\n separator,\n );\n}\n","import { clone } from 'lodash';\n\n/**\n * Permite escribir una propiedad en un objeto, en una ruta especificada. Si\n * dicha ruta no existe dentro del objeto la crea, siempre que sea posible. No\n * será posible en caso de que alguno de los elementos de la ruta contenga una\n * propiedad que no sea de tipo objeto.\n *\n * @param obj El objeto donde se desea escribir la propiedad\n * @param path La ruta en la que se va a escribir\n * @param value El valor que se va a escribir en la ruta especificada\n * @returns Un objeto idéntico del recibido pero co nlos cambios aplicados\n *\n * @throws { Error } En caso de que la ruta especificada contenga algún elemento que no puede ser escrito.\n *\n * @example\n *\n * const a = {\n * a: {}\n * };\n *\n * setValueByPath(a, 'a.b.c', 'Hello world');\n * /* Outputs:\n * {\n * a: {\n * b: {\n * c: 'Hello world'\n * }\n * }\n * }\n */\nexport function setValueByPath(\n obj: Record<string, unknown>,\n path: string,\n value: unknown,\n) {\n if (path === '') return value as Record<string, unknown>;\n\n const steps = path.split('.');\n if (steps.length === 0) {\n console.warn(`An empty path was provoided ${path}`);\n return null;\n }\n const originalClonedObject = clone(obj ?? {});\n let currentObj = originalClonedObject;\n for (let i = 0; i < steps.length - 1; i++) {\n if (!currentObj[steps[i]]) currentObj[steps[i]] = {};\n if (typeof currentObj[steps[i]] === 'object') {\n currentObj = currentObj[steps[i]] as Record<string, unknown>;\n } else {\n console.info({\n originalObject: obj,\n originalPath: path,\n currentObj,\n currentStep: steps[i],\n });\n throw new Error(\n `The provided path ${path} cannot be applied due to it is not an object's path.`,\n );\n }\n }\n currentObj[steps.pop() as string] = value;\n return originalClonedObject;\n}\n","import React, { useRef } from 'react';\nimport { propsStore, PropsStore } from './propsStore';\nimport {\n TProperties,\n TPropsComparator,\n TPropsConfiguration,\n TPropsSelector,\n} from './types';\nimport { TId } from '../types';\n\nexport const PropsSelectorUndefinedObject = {};\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","/* eslint-disable @typescript-eslint/no-dynamic-delete */\nimport { cloneDeep } from 'lodash';\nimport {\n TProperties,\n TPropsSuscriptor,\n TUpdateFieldConfiguration,\n} from './types';\nimport { PropsSelectorUndefinedObject } from './usePropsSelector';\nimport { debugDispatcher } from '../debug';\nimport { TId } from '../types';\nimport { persistentStorage } from '../storage';\n\nconst propsLog = 'propsLog';\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, { 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 console.log('RENDER');\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 ucfirst(word: string) {\n return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();\n}\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';\nimport { parseBooleans, parseNumbers } from 'xml2js/lib/processors';\nimport {\n TApiaFieldPropsObj,\n TFieldScriptEvents,\n TFieldServerEvents,\n TNotificationMessage,\n} from '../types';\n\nexport const processAjaxEventTagNames = (name: string): string => {\n return name;\n};\n\nexport const processAjaxEventAttrNames = (name: string): string => {\n return name;\n};\n\nexport interface TSessionExceptions {\n exception: {\n content: string;\n text: string;\n };\n}\n\nexport const processAjaxEventResponse = (\n value: unknown,\n name: string,\n): string | unknown => {\n if (name === 'v' && value === 'T') return true;\n if (name === 'v' && value === 'F') return false;\n return value;\n};\n\nexport const getJSObjfromXML = (\n xml: XMLDocument | string,\n): Record<string, unknown> => {\n let objJS: TNotificationMessage | null = null;\n\n const parser = new xml2js.Parser({\n trim: true,\n normalize: true,\n explicitRoot: false,\n mergeAttrs: true,\n explicitArray: false,\n charkey: 'content',\n attrValueProcessors: [\n parseBooleans,\n processStringObj,\n processAjaxEventResponse,\n ],\n tagNameProcessors: [processAjaxEventTagNames],\n attrNameProcessors: [processAjaxEventAttrNames],\n } as ParserOptions);\n\n parser.parseString(\n xml,\n (err: Error | null, result: Record<string, unknown>) => {\n if (err) {\n console.warn('Error Parsing XML data', err);\n } else {\n objJS = result;\n }\n },\n );\n if (objJS) {\n return objJS;\n }\n return {};\n};\n\nexport const processStringObj = (\n value: string,\n key: string,\n):\n | TApiaFieldPropsObj\n | string\n | number\n | TFieldScriptEvents\n | TFieldServerEvents => {\n /*\n\n * ESTAS ENTRADAS VAN A SER NECESARIAS CUANDO SE INCORPORE MODULO DE\n * EJECUCION AL MONOREPO\n\n if (key === 'properties') {\n return parseFieldPropertiesObj(jsonDecode(value)) as TApiaFieldPropsObj;\n }\n if (key === 'scriptEvents') {\n return JSON.parse(value) as TFieldScriptEvents;\n }\n if (key === 'serverEvents') {\n return JSON.parse(value) as TFieldServerEvents;\n }\n if (key === 'gridXml') {\n return getJSObjfromXML(he.decode(value).replaceAll('&', '&amp;'));\n } */\n if (key === 'value' && typeof value === 'number' && Number.isNaN(value)) {\n return '';\n }\n if (key === 'valueType' && typeof value === 'string' && value === 'null') {\n return '';\n }\n if (\n (key === 'cols' ||\n key === 'rows' ||\n key === 'x' ||\n key === 'y' ||\n key === 'length') &&\n typeof value === 'string'\n ) {\n return parseNumbers(value);\n }\n return value;\n};\n\nexport const parseXmlAsync = async <T>(xml: string): Promise<T> => {\n const parser = new xml2js.Parser({\n trim: true,\n normalize: true,\n explicitRoot: false,\n mergeAttrs: true,\n explicitArray: false,\n charkey: 'content',\n attrValueProcessors: [\n parseBooleans,\n processStringObj,\n processAjaxEventResponse,\n ],\n tagNameProcessors: [processAjaxEventTagNames],\n attrNameProcessors: [processAjaxEventAttrNames],\n } as ParserOptions);\n\n const result = await new Promise<T>((resolve, reject) => {\n parser.parseString(xml, (err: Error | null, innerResult: T) => {\n if (err) reject(err);\n else {\n resolve(innerResult);\n }\n });\n });\n\n return result;\n};\n"],"names":["_a","__async","React","__privateAdd","__privateGet","__privateSet","isFunction","__privateMethod","__objRest","__spreadValues","__spreadProps","uniqueId"],"mappings":"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"}
package/entries.json CHANGED
@@ -1 +1 @@
1
- ["./src/index.ts"]
1
+ ["./src/index.ts"]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apia/util",
3
- "version": "0.2.2",
3
+ "version": "0.2.4",
4
4
  "author": "alexisleite <alexisleite@live.com>",
5
5
  "homepage": "",
6
6
  "license": "MIT",
@@ -29,7 +29,6 @@
29
29
  "typescript": "^4.9.5"
30
30
  },
31
31
  "dependencies": {
32
- "@apia/icons": "^0.2.2",
33
32
  "@theme-ui/match-media": "^0.15.7",
34
33
  "@types/crypto-js": "^4.1.1",
35
34
  "@types/file-saver": "^2.0.5",
@@ -52,7 +51,7 @@
52
51
  "react": "^18.2.0",
53
52
  "react-dom": "^18.2.0"
54
53
  },
55
- "gitHead": "eed8d2895151a4b3e0d4b7ca00c7f22371075487",
54
+ "gitHead": "f14ade3161fb978c89e9f0949e46aca54d2e1db3",
56
55
  "repository": {
57
56
  "type": "git",
58
57
  "url": "http://corp-gitlab-01.domst.st.net/products/apia/ApiaNPMPackages.git",
@@ -1,10 +0,0 @@
1
- const fs = require('fs');
2
-
3
- const origin = 'C:/code/ApiaNPMPackages/packages/util/dist';
4
- const destination = 'C:/development/react/apiaformrenderer/node_modules/@apia/util';
5
-
6
- fs.watch('.', (eventType, filename) => {
7
- fs.copyFile(`${origin}/${filename}`, `${destination}/${filename}`, (err) => {
8
- console.log({filename, err});
9
- });
10
- })