@apia/util 2.0.7 → 2.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/animate/index.js.map +1 -1
- package/dist/array/arrayOrArray.js.map +1 -1
- package/dist/array/getIndex.js.map +1 -1
- package/dist/crypto/decrypt.js.map +1 -1
- package/dist/crypto/encrypt.js.map +1 -1
- package/dist/crypto/generateKey.js.map +1 -1
- package/dist/date/apiaDateToStandarFormat.js.map +1 -1
- package/dist/date/dateToApiaFormat.js.map +1 -1
- package/dist/date/getDateFormat.js.map +1 -1
- package/dist/debug/debugDispatcher.js.map +1 -1
- package/dist/debug/shortcutController.js.map +1 -1
- package/dist/documents/downloadStringAsDoc.js.map +1 -1
- package/dist/documents/downloadUrl.js.map +1 -1
- package/dist/documents/openAndReadFile.js.map +1 -1
- package/dist/dom/autoDisconnectMutationObserver.js.map +1 -1
- package/dist/dom/customEvents.js.map +1 -1
- package/dist/dom/enableChildrenFocus.js.map +1 -1
- package/dist/dom/findOffsetRelativeToScrollParent.js.map +1 -1
- package/dist/dom/findScrollContainer.js.map +1 -1
- package/dist/dom/getFocusSelector.js.map +1 -1
- package/dist/dom/getSpecificParent.js.map +1 -1
- package/dist/dom/isChild.js.map +1 -1
- package/dist/dom/scrollParentIntoElement.js.map +1 -1
- package/dist/dom/url.js.map +1 -1
- package/dist/dom/usePanAndZoom.js.map +1 -1
- package/dist/encoding/index.js.map +1 -1
- package/dist/events/EventEmitter.js.map +1 -1
- package/dist/events/StatefulEmitter.js.map +1 -1
- package/dist/focus/focusController.js +2 -2
- package/dist/focus/focusController.js.map +1 -1
- package/dist/focus/globalFocus.js +1 -1
- package/dist/focus/globalFocus.js.map +1 -1
- package/dist/history/History.js.map +1 -1
- package/dist/hooks/useCombinedRefs.js.map +1 -1
- package/dist/hooks/useDebouncedCallback.js.map +1 -1
- package/dist/hooks/useLatest.js.map +1 -1
- package/dist/hooks/useMount.js.map +1 -1
- package/dist/hooks/usePrevious.js.map +1 -1
- package/dist/hooks/useShallowMemo.js.map +1 -1
- package/dist/hooks/useStateRef.js.map +1 -1
- package/dist/hooks/useSubscription.js.map +1 -1
- package/dist/hooks/useUnmount.js.map +1 -1
- package/dist/hooks/useUpdateEffect.js.map +1 -1
- package/dist/imperative/makeImperativeComponent.js.map +1 -1
- package/dist/imperative/makeSingleImperativeComponent.js.map +1 -1
- package/dist/imperative/types.js.map +1 -1
- package/dist/imperative/useImperativeComponentEvents.js.map +1 -1
- package/dist/imperative/useImperativeIdentifierContext.js.map +1 -1
- package/dist/labels/formatMessage.js.map +1 -1
- package/dist/labels/getLabel.js.map +1 -1
- package/dist/number/index.js.map +1 -1
- package/dist/objects/getValueByPath.js.map +1 -1
- package/dist/objects/setValueByPath.js.map +1 -1
- package/dist/propsStore/propsStore.js.map +1 -1
- package/dist/propsStore/usePropsSelector.js.map +1 -1
- package/dist/screenLock/screenLocker.js +1 -1
- package/dist/screenLock/screenLocker.js.map +1 -1
- package/dist/states/useDebouncedState.js.map +1 -1
- package/dist/states/useDomState.js.map +1 -1
- package/dist/storage/StatefulStore.js +1 -1
- package/dist/storage/StatefulStore.js.map +1 -1
- package/dist/storage/persistentStorage.js.map +1 -1
- package/dist/storage/useLocalStorage.js.map +1 -1
- package/dist/string/alignment.js.map +1 -1
- package/dist/string/ucfirst.js.map +1 -1
- package/dist/typeGuards/toBoolean.js.map +1 -1
- package/dist/xml/parseXmlAsync.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/animate/index.ts"],"sourcesContent":["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"],"names":[],"mappings":";;AAEgB,SAAA,OAAA,CACd,QACA,EAAA,QAAA,EACA,QACA,EAAA;AACA,EAAA,IAAI,WAAkC,GAAA,KAAA,CAAA,CAAA;AACtC,EAAI,IAAA,WAAA,CAAA;AAEJ,EAAA,SAAS,aAAa,OAAiB,EAAA;AACrC,IAAA,IAAI,WAAgB,KAAA,KAAA,CAAA;AAAW,MAAc,WAAA,GAAA,OAAA,CAAA;AAE7C,IAAA,MAAM,WAAW,OAAU,GAAA,WAAA,CAAA;AAC3B,IAAA,MAAM,WAAW,QAAW,GAAA,QAAA,CAAA;AAE5B,IAAA,QAAA,CAAS,WAAY,CAAA,QAAA,EAAU,CAAG,EAAA,CAAC,CAAC,CAAA,CAAA;AACpC,IAAA,IAAI,QAAW,GAAA,CAAA;AAAG,MAAc,WAAA,GAAA,MAAA,CAAO,sBAAsB,YAAY,CAAA,CAAA;AAAA;AACpE,MAAW,QAAA,IAAA,CAAA;AAAA,GAClB;AAEA,EAAc,WAAA,GAAA,MAAA,CAAO,sBAAsB,YAAY,CAAA,CAAA;AAEvD,EAAA,OAAO,MAAM;AACX,IAAA,MAAA,CAAO,qBAAqB,WAAW,CAAA,CAAA;AAAA,GACzC,CAAA;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/animate/index.ts"],"sourcesContent":["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"],"names":[],"mappings":";;AAEgB,SAAA,OAAA,CACd,QACA,EAAA,QAAA,EACA,QACA,EAAA;AACA,EAAA,IAAI,WAAkC,GAAA,KAAA,CAAA,CAAA;AACtC,EAAI,IAAA,WAAA,CAAA;AAEJ,EAAA,SAAS,aAAa,OAAiB,EAAA;AACrC,IAAA,IAAI,WAAgB,KAAA,KAAA,CAAA;AAAW,MAAc,WAAA,GAAA,OAAA,CAAA;AAE7C,IAAA,MAAM,WAAW,OAAU,GAAA,WAAA,CAAA;AAC3B,IAAA,MAAM,WAAW,QAAW,GAAA,QAAA,CAAA;AAE5B,IAAA,QAAA,CAAS,WAAY,CAAA,QAAA,EAAU,CAAG,EAAA,CAAC,CAAC,CAAA,CAAA;AACpC,IAAA,IAAI,QAAW,GAAA,CAAA;AAAG,MAAc,WAAA,GAAA,MAAA,CAAO,sBAAsB,YAAY,CAAA,CAAA;AAAA;AACpE,MAAW,QAAA,IAAA,CAAA;AAAA,GAClB;AAEA,EAAc,WAAA,GAAA,MAAA,CAAO,sBAAsB,YAAY,CAAA,CAAA;AAEvD,EAAA,OAAO,MAAM;AACX,IAAA,MAAA,CAAO,qBAAqB,WAAW,CAAA,CAAA;AAAA,GACzC,CAAA;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arrayOrArray.js","sources":["../../src/array/arrayOrArray.ts"],"sourcesContent":["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"],"names":[],"mappings":"AAAA,SAAwB,aAAgB,CAA6B,EAAA;AACnE,EAAA,IAAI,CAAM,KAAA,KAAA,CAAA;AAAW,IAAA,OAAO,EAAC,CAAA;AAE7B,EAAA,OAAQ,MAAM,OAAQ,CAAA,CAAC,CAAI,GAAA,CAAA,GAAI,CAAC,CAAC,CAAA,CAAA;AACnC;;;;"}
|
|
1
|
+
{"version":3,"file":"arrayOrArray.js","sources":["../../src/array/arrayOrArray.ts"],"sourcesContent":["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"],"names":[],"mappings":"AAAA,SAAwB,aAAgB,CAA6B,EAAA;AACnE,EAAA,IAAI,CAAM,KAAA,KAAA,CAAA;AAAW,IAAA,OAAO,EAAC,CAAA;AAE7B,EAAA,OAAQ,MAAM,OAAQ,CAAA,CAAC,CAAI,GAAA,CAAA,GAAI,CAAC,CAAC,CAAA,CAAA;AACnC;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getIndex.js","sources":["../../src/array/getIndex.ts"],"sourcesContent":["import isFunction from 'lodash-es/isFunction';\n\n/**\n * This function gets an array of elements of any kind and an array of\n * functions which will be called to test conditions and will return element\n * whose index equals the matching condition's index\n *\n * @param arr An array of elements of any kind\n * @param conditions An array of conditions, which will be tested in order to determine which index of the array will be returned\n * @param defaultIndex The return value in case that no condition matches\n * @returns An element of the array if any of the conditions matches or the defaultIndex otherwise\n */\nexport function getIndex<T = unknown>(\n arr: T[],\n conditions: (boolean | (() => boolean))[],\n defaultIndex?: number,\n): T {\n for (let i = 0; i < conditions.length; i++) {\n if (\n (typeof conditions[i] === 'boolean' && conditions[i]) ||\n (isFunction(conditions[i]) && (conditions[i] as () => boolean)())\n )\n return arr[i];\n }\n return arr[defaultIndex ?? -1];\n}\n"],"names":[],"mappings":";;AAYgB,SAAA,QAAA,CACd,GACA,EAAA,UAAA,EACA,YACG,EAAA;AACH,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,UAAA,CAAW,QAAQ,CAAK,EAAA,EAAA;AAC1C,IAAA,IACG,OAAO,UAAA,CAAW,CAAC,CAAA,KAAM,aAAa,UAAW,CAAA,CAAC,CAClD,IAAA,UAAA,CAAW,WAAW,CAAC,CAAC,CAAM,IAAA,UAAA,CAAW,CAAC,CAAoB,EAAA;AAE/D,MAAA,OAAO,IAAI,CAAC,CAAA,CAAA;AAAA,GAChB;AACA,EAAO,OAAA,GAAA,CAAI,gBAAgB,CAAE,CAAA,CAAA,CAAA;AAC/B;;;;"}
|
|
1
|
+
{"version":3,"file":"getIndex.js","sources":["../../src/array/getIndex.ts"],"sourcesContent":["import isFunction from 'lodash-es/isFunction';\r\n\r\n/**\r\n * This function gets an array of elements of any kind and an array of\r\n * functions which will be called to test conditions and will return element\r\n * whose index equals the matching condition's index\r\n *\r\n * @param arr An array of elements of any kind\r\n * @param conditions An array of conditions, which will be tested in order to determine which index of the array will be returned\r\n * @param defaultIndex The return value in case that no condition matches\r\n * @returns An element of the array if any of the conditions matches or the defaultIndex otherwise\r\n */\r\nexport function getIndex<T = unknown>(\r\n arr: T[],\r\n conditions: (boolean | (() => boolean))[],\r\n defaultIndex?: number,\r\n): T {\r\n for (let i = 0; i < conditions.length; i++) {\r\n if (\r\n (typeof conditions[i] === 'boolean' && conditions[i]) ||\r\n (isFunction(conditions[i]) && (conditions[i] as () => boolean)())\r\n )\r\n return arr[i];\r\n }\r\n return arr[defaultIndex ?? -1];\r\n}\r\n"],"names":[],"mappings":";;AAYgB,SAAA,QAAA,CACd,GACA,EAAA,UAAA,EACA,YACG,EAAA;AACH,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,UAAA,CAAW,QAAQ,CAAK,EAAA,EAAA;AAC1C,IAAA,IACG,OAAO,UAAA,CAAW,CAAC,CAAA,KAAM,aAAa,UAAW,CAAA,CAAC,CAClD,IAAA,UAAA,CAAW,WAAW,CAAC,CAAC,CAAM,IAAA,UAAA,CAAW,CAAC,CAAoB,EAAA;AAE/D,MAAA,OAAO,IAAI,CAAC,CAAA,CAAA;AAAA,GAChB;AACA,EAAO,OAAA,GAAA,CAAI,gBAAgB,CAAE,CAAA,CAAA,CAAA;AAC/B;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decrypt.js","sources":["../../src/crypto/decrypt.ts"],"sourcesContent":["import { generateKey } from './generateKey';\n\nexport const decrypt = async (\n salt: string,\n iv: string,\n passPhrase: string,\n cipherText: string,\n keySize: number,\n iterationCount: number,\n) => {\n const CryptoJS = (await import('crypto-js')).default;\n const key = await generateKey(salt, passPhrase, keySize, iterationCount);\n const cipherParams = CryptoJS.lib.CipherParams.create({\n ciphertext: CryptoJS.enc.Base64.parse(cipherText),\n });\n const decrypted = CryptoJS.AES.decrypt(cipherParams, key, {\n iv: CryptoJS.enc.Hex.parse(iv),\n });\n return decrypted.toString(CryptoJS.enc.Utf8);\n};\n"],"names":[],"mappings":";;AAEO,MAAM,UAAU,OACrB,IAAA,EACA,IACA,UACA,EAAA,UAAA,EACA,SACA,cACG,KAAA;AACH,EAAA,MAAM,QAAY,GAAA,CAAA,MAAM,OAAO,WAAW,CAAG,EAAA,OAAA,CAAA;AAC7C,EAAA,MAAM,MAAM,MAAM,WAAA,CAAY,IAAM,EAAA,UAAA,EAAY,SAAS,cAAc,CAAA,CAAA;AACvE,EAAA,MAAM,YAAe,GAAA,QAAA,CAAS,GAAI,CAAA,YAAA,CAAa,MAAO,CAAA;AAAA,IACpD,UAAY,EAAA,QAAA,CAAS,GAAI,CAAA,MAAA,CAAO,MAAM,UAAU,CAAA;AAAA,GACjD,CAAA,CAAA;AACD,EAAA,MAAM,SAAY,GAAA,QAAA,CAAS,GAAI,CAAA,OAAA,CAAQ,cAAc,GAAK,EAAA;AAAA,IACxD,EAAI,EAAA,QAAA,CAAS,GAAI,CAAA,GAAA,CAAI,MAAM,EAAE,CAAA;AAAA,GAC9B,CAAA,CAAA;AACD,EAAA,OAAO,SAAU,CAAA,QAAA,CAAS,QAAS,CAAA,GAAA,CAAI,IAAI,CAAA,CAAA;AAC7C;;;;"}
|
|
1
|
+
{"version":3,"file":"decrypt.js","sources":["../../src/crypto/decrypt.ts"],"sourcesContent":["import { generateKey } from './generateKey';\r\n\r\nexport const decrypt = async (\r\n salt: string,\r\n iv: string,\r\n passPhrase: string,\r\n cipherText: string,\r\n keySize: number,\r\n iterationCount: number,\r\n) => {\r\n const CryptoJS = (await import('crypto-js')).default;\r\n const key = await generateKey(salt, passPhrase, keySize, iterationCount);\r\n const cipherParams = CryptoJS.lib.CipherParams.create({\r\n ciphertext: CryptoJS.enc.Base64.parse(cipherText),\r\n });\r\n const decrypted = CryptoJS.AES.decrypt(cipherParams, key, {\r\n iv: CryptoJS.enc.Hex.parse(iv),\r\n });\r\n return decrypted.toString(CryptoJS.enc.Utf8);\r\n};\r\n"],"names":[],"mappings":";;AAEO,MAAM,UAAU,OACrB,IAAA,EACA,IACA,UACA,EAAA,UAAA,EACA,SACA,cACG,KAAA;AACH,EAAA,MAAM,QAAY,GAAA,CAAA,MAAM,OAAO,WAAW,CAAG,EAAA,OAAA,CAAA;AAC7C,EAAA,MAAM,MAAM,MAAM,WAAA,CAAY,IAAM,EAAA,UAAA,EAAY,SAAS,cAAc,CAAA,CAAA;AACvE,EAAA,MAAM,YAAe,GAAA,QAAA,CAAS,GAAI,CAAA,YAAA,CAAa,MAAO,CAAA;AAAA,IACpD,UAAY,EAAA,QAAA,CAAS,GAAI,CAAA,MAAA,CAAO,MAAM,UAAU,CAAA;AAAA,GACjD,CAAA,CAAA;AACD,EAAA,MAAM,SAAY,GAAA,QAAA,CAAS,GAAI,CAAA,OAAA,CAAQ,cAAc,GAAK,EAAA;AAAA,IACxD,EAAI,EAAA,QAAA,CAAS,GAAI,CAAA,GAAA,CAAI,MAAM,EAAE,CAAA;AAAA,GAC9B,CAAA,CAAA;AACD,EAAA,OAAO,SAAU,CAAA,QAAA,CAAS,QAAS,CAAA,GAAA,CAAI,IAAI,CAAA,CAAA;AAC7C;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encrypt.js","sources":["../../src/crypto/encrypt.ts"],"sourcesContent":["import { generateKey } from './generateKey';\n\nexport const encrypt = async (\n salt: string,\n iv: string,\n passPhrase: string,\n plainText: string,\n keySize: number,\n iterationCount: number,\n) => {\n const CryptoJS = (await import('crypto-js')).default;\n const key = await generateKey(salt, passPhrase, keySize, iterationCount);\n const encrypted = CryptoJS.AES.encrypt(plainText, key, {\n iv: CryptoJS.enc.Hex.parse(iv),\n });\n return encrypted.ciphertext.toString(CryptoJS.enc.Base64);\n};\n"],"names":[],"mappings":";;AAEO,MAAM,UAAU,OACrB,IAAA,EACA,IACA,UACA,EAAA,SAAA,EACA,SACA,cACG,KAAA;AACH,EAAA,MAAM,QAAY,GAAA,CAAA,MAAM,OAAO,WAAW,CAAG,EAAA,OAAA,CAAA;AAC7C,EAAA,MAAM,MAAM,MAAM,WAAA,CAAY,IAAM,EAAA,UAAA,EAAY,SAAS,cAAc,CAAA,CAAA;AACvE,EAAA,MAAM,SAAY,GAAA,QAAA,CAAS,GAAI,CAAA,OAAA,CAAQ,WAAW,GAAK,EAAA;AAAA,IACrD,EAAI,EAAA,QAAA,CAAS,GAAI,CAAA,GAAA,CAAI,MAAM,EAAE,CAAA;AAAA,GAC9B,CAAA,CAAA;AACD,EAAA,OAAO,SAAU,CAAA,UAAA,CAAW,QAAS,CAAA,QAAA,CAAS,IAAI,MAAM,CAAA,CAAA;AAC1D;;;;"}
|
|
1
|
+
{"version":3,"file":"encrypt.js","sources":["../../src/crypto/encrypt.ts"],"sourcesContent":["import { generateKey } from './generateKey';\r\n\r\nexport const encrypt = async (\r\n salt: string,\r\n iv: string,\r\n passPhrase: string,\r\n plainText: string,\r\n keySize: number,\r\n iterationCount: number,\r\n) => {\r\n const CryptoJS = (await import('crypto-js')).default;\r\n const key = await generateKey(salt, passPhrase, keySize, iterationCount);\r\n const encrypted = CryptoJS.AES.encrypt(plainText, key, {\r\n iv: CryptoJS.enc.Hex.parse(iv),\r\n });\r\n return encrypted.ciphertext.toString(CryptoJS.enc.Base64);\r\n};\r\n"],"names":[],"mappings":";;AAEO,MAAM,UAAU,OACrB,IAAA,EACA,IACA,UACA,EAAA,SAAA,EACA,SACA,cACG,KAAA;AACH,EAAA,MAAM,QAAY,GAAA,CAAA,MAAM,OAAO,WAAW,CAAG,EAAA,OAAA,CAAA;AAC7C,EAAA,MAAM,MAAM,MAAM,WAAA,CAAY,IAAM,EAAA,UAAA,EAAY,SAAS,cAAc,CAAA,CAAA;AACvE,EAAA,MAAM,SAAY,GAAA,QAAA,CAAS,GAAI,CAAA,OAAA,CAAQ,WAAW,GAAK,EAAA;AAAA,IACrD,EAAI,EAAA,QAAA,CAAS,GAAI,CAAA,GAAA,CAAI,MAAM,EAAE,CAAA;AAAA,GAC9B,CAAA,CAAA;AACD,EAAA,OAAO,SAAU,CAAA,UAAA,CAAW,QAAS,CAAA,QAAA,CAAS,IAAI,MAAM,CAAA,CAAA;AAC1D;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateKey.js","sources":["../../src/crypto/generateKey.ts"],"sourcesContent":["export const generateKey = async (\n salt: string,\n passPhrase: string,\n keySize: number,\n iterationCount: number,\n) => {\n const CryptoJS = (await import('crypto-js')).default;\n const key = CryptoJS.PBKDF2(passPhrase, CryptoJS.enc.Hex.parse(salt), {\n keySize: keySize / 32,\n iterations: iterationCount,\n });\n return key;\n};\n"],"names":[],"mappings":"AAAO,MAAM,WAAc,GAAA,OACzB,IACA,EAAA,UAAA,EACA,SACA,cACG,KAAA;AACH,EAAA,MAAM,QAAY,GAAA,CAAA,MAAM,OAAO,WAAW,CAAG,EAAA,OAAA,CAAA;AAC7C,EAAM,MAAA,GAAA,GAAM,SAAS,MAAO,CAAA,UAAA,EAAY,SAAS,GAAI,CAAA,GAAA,CAAI,KAAM,CAAA,IAAI,CAAG,EAAA;AAAA,IACpE,SAAS,OAAU,GAAA,EAAA;AAAA,IACnB,UAAY,EAAA,cAAA;AAAA,GACb,CAAA,CAAA;AACD,EAAO,OAAA,GAAA,CAAA;AACT;;;;"}
|
|
1
|
+
{"version":3,"file":"generateKey.js","sources":["../../src/crypto/generateKey.ts"],"sourcesContent":["export const generateKey = async (\r\n salt: string,\r\n passPhrase: string,\r\n keySize: number,\r\n iterationCount: number,\r\n) => {\r\n const CryptoJS = (await import('crypto-js')).default;\r\n const key = CryptoJS.PBKDF2(passPhrase, CryptoJS.enc.Hex.parse(salt), {\r\n keySize: keySize / 32,\r\n iterations: iterationCount,\r\n });\r\n return key;\r\n};\r\n"],"names":[],"mappings":"AAAO,MAAM,WAAc,GAAA,OACzB,IACA,EAAA,UAAA,EACA,SACA,cACG,KAAA;AACH,EAAA,MAAM,QAAY,GAAA,CAAA,MAAM,OAAO,WAAW,CAAG,EAAA,OAAA,CAAA;AAC7C,EAAM,MAAA,GAAA,GAAM,SAAS,MAAO,CAAA,UAAA,EAAY,SAAS,GAAI,CAAA,GAAA,CAAI,KAAM,CAAA,IAAI,CAAG,EAAA;AAAA,IACpE,SAAS,OAAU,GAAA,EAAA;AAAA,IACnB,UAAY,EAAA,cAAA;AAAA,GACb,CAAA,CAAA;AACD,EAAO,OAAA,GAAA,CAAA;AACT;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiaDateToStandarFormat.js","sources":["../../src/date/apiaDateToStandarFormat.ts"],"sourcesContent":["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"],"names":[],"mappings":";;;AAGO,SAAS,wBAAwB,IAAc,EAAA;AACpD,EAAA,MAAM,OAAU,GAAA,KAAA,CAAM,IAAM,EAAA,aAAA,EAAe,CAAA,CAAA;AAC3C,EAAI,IAAA,CAAC,QAAQ,OAAQ,EAAA;AAAG,IAAO,OAAA,EAAA,CAAA;AAC/B,EAAO,OAAA,OAAA,CAAQ,OAAO,YAAY,CAAA,CAAA;AACpC;;;;"}
|
|
1
|
+
{"version":3,"file":"apiaDateToStandarFormat.js","sources":["../../src/date/apiaDateToStandarFormat.ts"],"sourcesContent":["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"],"names":[],"mappings":";;;AAGO,SAAS,wBAAwB,IAAc,EAAA;AACpD,EAAA,MAAM,OAAU,GAAA,KAAA,CAAM,IAAM,EAAA,aAAA,EAAe,CAAA,CAAA;AAC3C,EAAI,IAAA,CAAC,QAAQ,OAAQ,EAAA;AAAG,IAAO,OAAA,EAAA,CAAA;AAC/B,EAAO,OAAA,OAAA,CAAQ,OAAO,YAAY,CAAA,CAAA;AACpC;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dateToApiaFormat.js","sources":["../../src/date/dateToApiaFormat.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { getDateFormat } from './getDateFormat';\n\nexport function dateToApiaFormat(date: string | Date) {\n return dayjs(date).format(getDateFormat());\n}\n"],"names":[],"mappings":";;;AAGO,SAAS,iBAAiB,IAAqB,EAAA;AACpD,EAAA,OAAO,KAAM,CAAA,IAAI,CAAE,CAAA,MAAA,CAAO,eAAe,CAAA,CAAA;AAC3C;;;;"}
|
|
1
|
+
{"version":3,"file":"dateToApiaFormat.js","sources":["../../src/date/dateToApiaFormat.ts"],"sourcesContent":["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"],"names":[],"mappings":";;;AAGO,SAAS,iBAAiB,IAAqB,EAAA;AACpD,EAAA,OAAO,KAAM,CAAA,IAAI,CAAE,CAAA,MAAA,CAAO,eAAe,CAAA,CAAA;AAC3C;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getDateFormat.js","sources":["../../src/date/getDateFormat.ts"],"sourcesContent":["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"],"names":[],"mappings":";;;AAIA,KAAA,CAAM,OAAO,iBAAiB,CAAA,CAAA;AAQvB,MAAM,mBAAmC,GAAA,aAAA;AAEzC,MAAM,gBAAgB,MAAmB;AAC9C,EAAA,QAAQ,OAAO,WAAa;AAAA,IAC1B,KAAK,OAAA;AACH,MAAO,OAAA,YAAA,CAAA;AAAA,IACT,KAAK,OAAA;AACH,MAAO,OAAA,mBAAA,CAAA;AAAA,IACT,KAAK,OAAA;AACH,MAAO,OAAA,YAAA,CAAA;AAAA,IACT;AACE,MAAO,OAAA,YAAA,CAAA;AAAA,GACX;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"getDateFormat.js","sources":["../../src/date/getDateFormat.ts"],"sourcesContent":["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"],"names":[],"mappings":";;;AAIA,KAAA,CAAM,OAAO,iBAAiB,CAAA,CAAA;AAQvB,MAAM,mBAAmC,GAAA,aAAA;AAEzC,MAAM,gBAAgB,MAAmB;AAC9C,EAAA,QAAQ,OAAO,WAAa;AAAA,IAC1B,KAAK,OAAA;AACH,MAAO,OAAA,YAAA,CAAA;AAAA,IACT,KAAK,OAAA;AACH,MAAO,OAAA,mBAAA,CAAA;AAAA,IACT,KAAK,OAAA;AACH,MAAO,OAAA,YAAA,CAAA;AAAA,IACT;AACE,MAAO,OAAA,YAAA,CAAA;AAAA,GACX;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debugDispatcher.js","sources":["../../src/debug/debugDispatcher.ts"],"sourcesContent":["/* eslint-disable comment-length/limit-multi-line-comments */\nimport React from 'react';\n\nlet isEnabled = false;\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 try {\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 } catch (e) {\n console.error('DD', e);\n }\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"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"debugDispatcher.js","sources":["../../src/debug/debugDispatcher.ts"],"sourcesContent":["/* eslint-disable comment-length/limit-multi-line-comments */\r\nimport React from 'react';\r\n\r\nlet isEnabled = false;\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 try {\r\n if (this.actions[action]) this.actions[action]();\r\n else {\r\n if ((this.callbacks[action] ?? []).length === 1)\r\n return this.callbacks[action]?.[0]?.(parameters);\r\n\r\n (this.callbacks[action] ?? []).forEach((cb) => {\r\n return cb(parameters);\r\n });\r\n }\r\n return null;\r\n } catch (e) {\r\n console.error('DD', e);\r\n }\r\n };\r\n})();\r\n\r\ndeclare global {\r\n interface Window {\r\n adt: typeof debugDispatcher;\r\n dd: typeof debugDispatcher & Record<string, () => unknown>;\r\n }\r\n}\r\n\r\nwindow.dd = debugDispatcher as typeof debugDispatcher &\r\n Record<string, () => unknown>;\r\nwindow.adt = debugDispatcher;\r\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shortcutController.js","sources":["../../src/debug/shortcutController.ts"],"sourcesContent":["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"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shortcutController.js","sources":["../../src/debug/shortcutController.ts"],"sourcesContent":["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"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"downloadStringAsDoc.js","sources":["../../src/documents/downloadStringAsDoc.ts"],"sourcesContent":["export type DownloadStringAsDocProps = {\n fileName?: string;\n blobProps?: BlobPropertyBag;\n};\n\nexport async function downloadStringAsDoc(\n content: string,\n options?: DownloadStringAsDocProps,\n) {\n (await import('file-saver')).default.saveAs(\n new Blob([content], {\n type: 'text/plain; charset=utf-8',\n ...options?.blobProps,\n }),\n options?.fileName,\n );\n}\n"],"names":[],"mappings":"AAKsB,eAAA,mBAAA,CACpB,SACA,OACA,EAAA;AACA,EAAA,CAAC,MAAM,OAAO,YAAY,CAAA,EAAG,OAAQ,CAAA,MAAA;AAAA,IACnC,IAAI,IAAA,CAAK,CAAC,OAAO,CAAG,EAAA;AAAA,MAClB,IAAM,EAAA,2BAAA;AAAA,MACN,GAAG,OAAS,EAAA,SAAA;AAAA,KACb,CAAA;AAAA,IACD,OAAS,EAAA,QAAA;AAAA,GACX,CAAA;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"downloadStringAsDoc.js","sources":["../../src/documents/downloadStringAsDoc.ts"],"sourcesContent":["export type DownloadStringAsDocProps = {\r\n fileName?: string;\r\n blobProps?: BlobPropertyBag;\r\n};\r\n\r\nexport async function downloadStringAsDoc(\r\n content: string,\r\n options?: DownloadStringAsDocProps,\r\n) {\r\n (await import('file-saver')).default.saveAs(\r\n new Blob([content], {\r\n type: 'text/plain; charset=utf-8',\r\n ...options?.blobProps,\r\n }),\r\n options?.fileName,\r\n );\r\n}\r\n"],"names":[],"mappings":"AAKsB,eAAA,mBAAA,CACpB,SACA,OACA,EAAA;AACA,EAAA,CAAC,MAAM,OAAO,YAAY,CAAA,EAAG,OAAQ,CAAA,MAAA;AAAA,IACnC,IAAI,IAAA,CAAK,CAAC,OAAO,CAAG,EAAA;AAAA,MAClB,IAAM,EAAA,2BAAA;AAAA,MACN,GAAG,OAAS,EAAA,SAAA;AAAA,KACb,CAAA;AAAA,IACD,OAAS,EAAA,QAAA;AAAA,GACX,CAAA;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"downloadUrl.js","sources":["../../src/documents/downloadUrl.ts"],"sourcesContent":["import type { AxiosResponse } from 'axios';\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 (\n await import('axios')\n ).default.get(url, {\n responseType: 'blob',\n });\n\n const actualFileName =\n typeof secondParameter === 'string'\n ? secondParameter\n : secondParameter(blob);\n\n (await import('file-saver')).default.saveAs(\n new Blob([blob.data]),\n actualFileName,\n );\n}\n"],"names":[],"mappings":"AAEO,SAAS,2BAA2B,IAAqB,EAAA;AAC9D,EACG,OAAA,IAAA,CAAK,OAAQ,CAAA,qBAAqB,CAAc,EAAA,KAAA;AAAA,IAC/C,6DAAA;AAAA,GACF,GAAI,CAAC,CAAK,IAAA,YAAA,CAAA;AAEd,CAAA;AAmBsB,eAAA,WAAA,CACpB,GACA,EAAA,eAAA,GAEwC,0BACzB,EAAA;AACf,EAAM,MAAA,IAAA,GAAO,OACX,MAAM,OAAO,OAAO,CACpB,EAAA,OAAA,CAAQ,IAAI,GAAK,EAAA;AAAA,IACjB,YAAc,EAAA,MAAA;AAAA,GACf,CAAA,CAAA;AAED,EAAA,MAAM,iBACJ,OAAO,eAAA,KAAoB,QACvB,GAAA,eAAA,GACA,gBAAgB,IAAI,CAAA,CAAA;AAE1B,EAAA,CAAC,MAAM,OAAO,YAAY,CAAA,EAAG,OAAQ,CAAA,MAAA;AAAA,IACnC,IAAI,IAAA,CAAK,CAAC,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,IACpB,cAAA;AAAA,GACF,CAAA;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"downloadUrl.js","sources":["../../src/documents/downloadUrl.ts"],"sourcesContent":["import type { AxiosResponse } from 'axios';\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 (\r\n await import('axios')\r\n ).default.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 (await import('file-saver')).default.saveAs(\r\n new Blob([blob.data]),\r\n actualFileName,\r\n );\r\n}\r\n"],"names":[],"mappings":"AAEO,SAAS,2BAA2B,IAAqB,EAAA;AAC9D,EACG,OAAA,IAAA,CAAK,OAAQ,CAAA,qBAAqB,CAAc,EAAA,KAAA;AAAA,IAC/C,6DAAA;AAAA,GACF,GAAI,CAAC,CAAK,IAAA,YAAA,CAAA;AAEd,CAAA;AAmBsB,eAAA,WAAA,CACpB,GACA,EAAA,eAAA,GAEwC,0BACzB,EAAA;AACf,EAAM,MAAA,IAAA,GAAO,OACX,MAAM,OAAO,OAAO,CACpB,EAAA,OAAA,CAAQ,IAAI,GAAK,EAAA;AAAA,IACjB,YAAc,EAAA,MAAA;AAAA,GACf,CAAA,CAAA;AAED,EAAA,MAAM,iBACJ,OAAO,eAAA,KAAoB,QACvB,GAAA,eAAA,GACA,gBAAgB,IAAI,CAAA,CAAA;AAE1B,EAAA,CAAC,MAAM,OAAO,YAAY,CAAA,EAAG,OAAQ,CAAA,MAAA;AAAA,IACnC,IAAI,IAAA,CAAK,CAAC,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,IACpB,cAAA;AAAA,GACF,CAAA;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openAndReadFile.js","sources":["../../src/documents/openAndReadFile.ts"],"sourcesContent":["export function openAndReadFile() {\n return new Promise<string | ArrayBuffer | null>((resolve) => {\n const input = document.createElement('input');\n input.type = 'file';\n input.style.display = 'none';\n document.body.append(input);\n input.click();\n input.addEventListener('change', (ev) => {\n const fileInput = ev.target as HTMLInputElement;\n const file = fileInput?.files?.[0];\n if (file) {\n const reader = new FileReader();\n reader.onload = (event) => {\n fileInput.value = '';\n const content = event.target?.result;\n if (content) {\n resolve(content);\n }\n };\n reader.readAsText(file);\n } else {\n resolve(null);\n }\n });\n });\n}\n"],"names":[],"mappings":"AAAO,SAAS,eAAkB,GAAA;AAChC,EAAO,OAAA,IAAI,OAAqC,CAAA,CAAC,OAAY,KAAA;AAC3D,IAAM,MAAA,KAAA,GAAQ,QAAS,CAAA,aAAA,CAAc,OAAO,CAAA,CAAA;AAC5C,IAAA,KAAA,CAAM,IAAO,GAAA,MAAA,CAAA;AACb,IAAA,KAAA,CAAM,MAAM,OAAU,GAAA,MAAA,CAAA;AACtB,IAAS,QAAA,CAAA,IAAA,CAAK,OAAO,KAAK,CAAA,CAAA;AAC1B,IAAA,KAAA,CAAM,KAAM,EAAA,CAAA;AACZ,IAAM,KAAA,CAAA,gBAAA,CAAiB,QAAU,EAAA,CAAC,EAAO,KAAA;AACvC,MAAA,MAAM,YAAY,EAAG,CAAA,MAAA,CAAA;AACrB,MAAM,MAAA,IAAA,GAAO,SAAW,EAAA,KAAA,GAAQ,CAAC,CAAA,CAAA;AACjC,MAAA,IAAI,IAAM,EAAA;AACR,QAAM,MAAA,MAAA,GAAS,IAAI,UAAW,EAAA,CAAA;AAC9B,QAAO,MAAA,CAAA,MAAA,GAAS,CAAC,KAAU,KAAA;AACzB,UAAA,SAAA,CAAU,KAAQ,GAAA,EAAA,CAAA;AAClB,UAAM,MAAA,OAAA,GAAU,MAAM,MAAQ,EAAA,MAAA,CAAA;AAC9B,UAAA,IAAI,OAAS,EAAA;AACX,YAAA,OAAA,CAAQ,OAAO,CAAA,CAAA;AAAA,WACjB;AAAA,SACF,CAAA;AACA,QAAA,MAAA,CAAO,WAAW,IAAI,CAAA,CAAA;AAAA,OACjB,MAAA;AACL,QAAA,OAAA,CAAQ,IAAI,CAAA,CAAA;AAAA,OACd;AAAA,KACD,CAAA,CAAA;AAAA,GACF,CAAA,CAAA;AACH;;;;"}
|
|
1
|
+
{"version":3,"file":"openAndReadFile.js","sources":["../../src/documents/openAndReadFile.ts"],"sourcesContent":["export function openAndReadFile() {\r\n return new Promise<string | ArrayBuffer | null>((resolve) => {\r\n const input = document.createElement('input');\r\n input.type = 'file';\r\n input.style.display = 'none';\r\n document.body.append(input);\r\n input.click();\r\n input.addEventListener('change', (ev) => {\r\n const fileInput = ev.target as HTMLInputElement;\r\n const file = fileInput?.files?.[0];\r\n if (file) {\r\n const reader = new FileReader();\r\n reader.onload = (event) => {\r\n fileInput.value = '';\r\n const content = event.target?.result;\r\n if (content) {\r\n resolve(content);\r\n }\r\n };\r\n reader.readAsText(file);\r\n } else {\r\n resolve(null);\r\n }\r\n });\r\n });\r\n}\r\n"],"names":[],"mappings":"AAAO,SAAS,eAAkB,GAAA;AAChC,EAAO,OAAA,IAAI,OAAqC,CAAA,CAAC,OAAY,KAAA;AAC3D,IAAM,MAAA,KAAA,GAAQ,QAAS,CAAA,aAAA,CAAc,OAAO,CAAA,CAAA;AAC5C,IAAA,KAAA,CAAM,IAAO,GAAA,MAAA,CAAA;AACb,IAAA,KAAA,CAAM,MAAM,OAAU,GAAA,MAAA,CAAA;AACtB,IAAS,QAAA,CAAA,IAAA,CAAK,OAAO,KAAK,CAAA,CAAA;AAC1B,IAAA,KAAA,CAAM,KAAM,EAAA,CAAA;AACZ,IAAM,KAAA,CAAA,gBAAA,CAAiB,QAAU,EAAA,CAAC,EAAO,KAAA;AACvC,MAAA,MAAM,YAAY,EAAG,CAAA,MAAA,CAAA;AACrB,MAAM,MAAA,IAAA,GAAO,SAAW,EAAA,KAAA,GAAQ,CAAC,CAAA,CAAA;AACjC,MAAA,IAAI,IAAM,EAAA;AACR,QAAM,MAAA,MAAA,GAAS,IAAI,UAAW,EAAA,CAAA;AAC9B,QAAO,MAAA,CAAA,MAAA,GAAS,CAAC,KAAU,KAAA;AACzB,UAAA,SAAA,CAAU,KAAQ,GAAA,EAAA,CAAA;AAClB,UAAM,MAAA,OAAA,GAAU,MAAM,MAAQ,EAAA,MAAA,CAAA;AAC9B,UAAA,IAAI,OAAS,EAAA;AACX,YAAA,OAAA,CAAQ,OAAO,CAAA,CAAA;AAAA,WACjB;AAAA,SACF,CAAA;AACA,QAAA,MAAA,CAAO,WAAW,IAAI,CAAA,CAAA;AAAA,OACjB,MAAA;AACL,QAAA,OAAA,CAAQ,IAAI,CAAA,CAAA;AAAA,OACd;AAAA,KACD,CAAA,CAAA;AAAA,GACF,CAAA,CAAA;AACH;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autoDisconnectMutationObserver.js","sources":["../../src/dom/autoDisconnectMutationObserver.ts"],"sourcesContent":["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"],"names":[],"mappings":"AAcgB,SAAA,8BAAA,CACd,OACA,EAAA,QAAA,EACA,IACA,EAAA;AACA,EAAA,IAAI,eAAkB,GAAA,CAAA,CAAA,CAAA;AACtB,EAAA,IAAI,WAAc,GAAA,KAAA,CAAA;AAClB,EAAA,SAAS,UAAa,GAAA;AACpB,IAAA,IAAI,WAAa,EAAA;AACf,MAAc,WAAA,GAAA,KAAA,CAAA;AACd,MAAA,QAAA,CAAS,UAAW,EAAA,CAAA;AACpB,MAAA,YAAA,CAAa,eAAe,CAAA,CAAA;AAAA,KAC9B;AAAA,GACF;AACA,EAAI,IAAA,aAAA,CAAA;AAEJ,EAAA,MAAM,QAAW,GAAA,IAAI,gBAAiB,CAAA,CAAA,GAAI,KAAU,KAAA;AAClD,IAAA,IAAI,MAAM,CAAC,CAAA,GAAI,CAAC,CAAA,KAAM,MAAM,CAAC,CAAA,CAAE,CAAC,CAAA,CAAE,gBAAgB,KAAM,CAAA,CAAC,CAAE,CAAA,CAAC,EAAE,UAAa,CAAA,EAAA;AACzE,MAAA,YAAA,CAAa,aAAa,CAAA,CAAA;AAC1B,MAAgB,aAAA,GAAA,UAAA,CAAW,UAAU,GAAG,CAAA,CAAA;AACxC,MAAA,YAAA,CAAa,eAAe,CAAA,CAAA;AAC5B,MAAkB,eAAA,GAAA,UAAA;AAAA,QAChB,UAAA;AAAA,QACA,MAAM,OAAW,IAAA,GAAA;AAAA,OACnB,CAAA;AAAA,KACF;AAAA,GACD,CAAA,CAAA;AACD,EAAc,WAAA,GAAA,IAAA,CAAA;AACd,EAAA,QAAA,CAAS,QAAQ,OAAS,EAAA,EAAE,SAAS,IAAM,EAAA,SAAA,EAAW,MAAM,CAAA,CAAA;AAC5D,EAAkB,eAAA,GAAA,UAAA;AAAA,IAChB,UAAA;AAAA,IACA,MAAM,OAAW,IAAA,GAAA;AAAA,GACnB,CAAA;AAEA,EAAA,IAAI,MAAM,iBAAsB,KAAA,KAAA;AAC9B,IAAgB,aAAA,GAAA,UAAA,CAAW,UAAU,GAAG,CAAA,CAAA;AAE1C,EAAO,OAAA,UAAA,CAAA;AACT;;;;"}
|
|
1
|
+
{"version":3,"file":"autoDisconnectMutationObserver.js","sources":["../../src/dom/autoDisconnectMutationObserver.ts"],"sourcesContent":["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"],"names":[],"mappings":"AAcgB,SAAA,8BAAA,CACd,OACA,EAAA,QAAA,EACA,IACA,EAAA;AACA,EAAA,IAAI,eAAkB,GAAA,CAAA,CAAA,CAAA;AACtB,EAAA,IAAI,WAAc,GAAA,KAAA,CAAA;AAClB,EAAA,SAAS,UAAa,GAAA;AACpB,IAAA,IAAI,WAAa,EAAA;AACf,MAAc,WAAA,GAAA,KAAA,CAAA;AACd,MAAA,QAAA,CAAS,UAAW,EAAA,CAAA;AACpB,MAAA,YAAA,CAAa,eAAe,CAAA,CAAA;AAAA,KAC9B;AAAA,GACF;AACA,EAAI,IAAA,aAAA,CAAA;AAEJ,EAAA,MAAM,QAAW,GAAA,IAAI,gBAAiB,CAAA,CAAA,GAAI,KAAU,KAAA;AAClD,IAAA,IAAI,MAAM,CAAC,CAAA,GAAI,CAAC,CAAA,KAAM,MAAM,CAAC,CAAA,CAAE,CAAC,CAAA,CAAE,gBAAgB,KAAM,CAAA,CAAC,CAAE,CAAA,CAAC,EAAE,UAAa,CAAA,EAAA;AACzE,MAAA,YAAA,CAAa,aAAa,CAAA,CAAA;AAC1B,MAAgB,aAAA,GAAA,UAAA,CAAW,UAAU,GAAG,CAAA,CAAA;AACxC,MAAA,YAAA,CAAa,eAAe,CAAA,CAAA;AAC5B,MAAkB,eAAA,GAAA,UAAA;AAAA,QAChB,UAAA;AAAA,QACA,MAAM,OAAW,IAAA,GAAA;AAAA,OACnB,CAAA;AAAA,KACF;AAAA,GACD,CAAA,CAAA;AACD,EAAc,WAAA,GAAA,IAAA,CAAA;AACd,EAAA,QAAA,CAAS,QAAQ,OAAS,EAAA,EAAE,SAAS,IAAM,EAAA,SAAA,EAAW,MAAM,CAAA,CAAA;AAC5D,EAAkB,eAAA,GAAA,UAAA;AAAA,IAChB,UAAA;AAAA,IACA,MAAM,OAAW,IAAA,GAAA;AAAA,GACnB,CAAA;AAEA,EAAA,IAAI,MAAM,iBAAsB,KAAA,KAAA;AAC9B,IAAgB,aAAA,GAAA,UAAA,CAAW,UAAU,GAAG,CAAA,CAAA;AAE1C,EAAO,OAAA,UAAA,CAAA;AACT;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"customEvents.js","sources":["../../src/dom/customEvents.ts"],"sourcesContent":["/**\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"],"names":[],"mappings":"AAMO,MAAM,YAAe,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO1B,KAAO,EAAA,aAAA;AAAA;AAAA;AAAA;AAAA,EAIP,sBAAwB,EAAA,wBAAA;AAAA;AAAA;AAAA;AAAA,EAIxB,gBAAkB,EAAA,kBAAA;AAAA;AAAA;AAAA;AAAA,EAIlB,iBAAmB,EAAA,mBAAA;AAAA;AAAA;AAAA;AAAA,EAInB,UAAY,EAAA,YAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKZ,SAAW,EAAA,WAAA;AAAA,EACX,SAAW,EAAA,WAAA;AACb;;;;"}
|
|
1
|
+
{"version":3,"file":"customEvents.js","sources":["../../src/dom/customEvents.ts"],"sourcesContent":["/**\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"],"names":[],"mappings":"AAMO,MAAM,YAAe,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO1B,KAAO,EAAA,aAAA;AAAA;AAAA;AAAA;AAAA,EAIP,sBAAwB,EAAA,wBAAA;AAAA;AAAA;AAAA;AAAA,EAIxB,gBAAkB,EAAA,kBAAA;AAAA;AAAA;AAAA;AAAA,EAIlB,iBAAmB,EAAA,mBAAA;AAAA;AAAA;AAAA;AAAA,EAInB,UAAY,EAAA,YAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKZ,SAAW,EAAA,WAAA;AAAA,EACX,SAAW,EAAA,WAAA;AACb;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enableChildrenFocus.js","sources":["../../src/dom/enableChildrenFocus.ts"],"sourcesContent":["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"],"names":[],"mappings":";;AAEA,MAAM,qBAAwB,GAAA,wBAAA,CAAA;AAUvB,SAAS,qBAAqB,MAAqB,EAAA;AACxD,EAAM,MAAA,YAAA,GAAe,MAAO,CAAA,gBAAA,CAAiB,aAAa,CAAA,CAAA;AAC1D,EAAa,YAAA,CAAA,OAAA,CAAQ,CAAC,OAAY,KAAA;AAChC,IAAQ,OAAA,CAAA,YAAA;AAAA,MACN,qBAAA;AAAA,MACA,OAAA,CAAQ,YAAa,CAAA,UAAU,CAAK,IAAA,EAAA;AAAA,KACtC,CAAA;AACA,IAAQ,OAAA,CAAA,YAAA,CAAa,YAAY,IAAI,CAAA,CAAA;AAAA,GACtC,CAAA,CAAA;AACH,CAAA;AAOO,SAAS,oBAAoB,MAAqB,EAAA;AACvD,EAAA,MAAM,YAAe,GAAA,MAAA,CAAO,gBAAiB,CAAA,CAAA,CAAA,EAAI,qBAAqB,CAAG,CAAA,CAAA,CAAA,CAAA;AACzE,EAAa,YAAA,CAAA,OAAA,CAAQ,CAAC,OAAY,KAAA;AAChC,IAAQ,OAAA,CAAA,YAAA;AAAA,MACN,UAAA;AAAA,MACA,OAAA,CAAQ,YAAa,CAAA,qBAAqB,CAAK,IAAA,GAAA;AAAA,KACjD,CAAA;AACA,IAAA,OAAA,CAAQ,gBAAgB,qBAAqB,CAAA,CAAA;AAAA,GAC9C,CAAA,CAAA;AACH;;;;"}
|
|
1
|
+
{"version":3,"file":"enableChildrenFocus.js","sources":["../../src/dom/enableChildrenFocus.ts"],"sourcesContent":["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"],"names":[],"mappings":";;AAEA,MAAM,qBAAwB,GAAA,wBAAA,CAAA;AAUvB,SAAS,qBAAqB,MAAqB,EAAA;AACxD,EAAM,MAAA,YAAA,GAAe,MAAO,CAAA,gBAAA,CAAiB,aAAa,CAAA,CAAA;AAC1D,EAAa,YAAA,CAAA,OAAA,CAAQ,CAAC,OAAY,KAAA;AAChC,IAAQ,OAAA,CAAA,YAAA;AAAA,MACN,qBAAA;AAAA,MACA,OAAA,CAAQ,YAAa,CAAA,UAAU,CAAK,IAAA,EAAA;AAAA,KACtC,CAAA;AACA,IAAQ,OAAA,CAAA,YAAA,CAAa,YAAY,IAAI,CAAA,CAAA;AAAA,GACtC,CAAA,CAAA;AACH,CAAA;AAOO,SAAS,oBAAoB,MAAqB,EAAA;AACvD,EAAA,MAAM,YAAe,GAAA,MAAA,CAAO,gBAAiB,CAAA,CAAA,CAAA,EAAI,qBAAqB,CAAG,CAAA,CAAA,CAAA,CAAA;AACzE,EAAa,YAAA,CAAA,OAAA,CAAQ,CAAC,OAAY,KAAA;AAChC,IAAQ,OAAA,CAAA,YAAA;AAAA,MACN,UAAA;AAAA,MACA,OAAA,CAAQ,YAAa,CAAA,qBAAqB,CAAK,IAAA,GAAA;AAAA,KACjD,CAAA;AACA,IAAA,OAAA,CAAQ,gBAAgB,qBAAqB,CAAA,CAAA;AAAA,GAC9C,CAAA,CAAA;AACH;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findOffsetRelativeToScrollParent.js","sources":["../../src/dom/findOffsetRelativeToScrollParent.ts"],"sourcesContent":["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}"],"names":[],"mappings":";;AAKgB,SAAA,gCAAA,CACd,OACA,EAAA,KAAA,GAAwB,KACxB,EAAA;AACA,EAAM,MAAA,YAAA,GAAe,oBAAoB,OAAO,CAAA,CAAA;AAChD,EAAA,IAAI,cAAiB,GAAA,OAAA,CAAA;AACrB,EAAA,IAAI,MAAS,GAAA,CAAA,CAAA;AACb,EAAA,IAAI,YAAe,GAAA,cAAA,CAAA;AACnB,EAAA,OACE,kBACA,cAAmB,KAAA,YAAA,IACnB,mBAAmB,QAAS,CAAA,IAAA,IAC5B,iBAAiB,YACjB,EAAA;AACA,IAAI,IAAA,YAAA,KAAiB,eAAe,YAAc,EAAA;AAChD,MAAU,MAAA,IAAA,cAAA,CAAe,CAAS,MAAA,EAAA,KAAK,CAAE,CAAA,CAAA,CAAA;AACzC,MAAA,YAAA,GAAe,cAAe,CAAA,YAAA,CAAA;AAAA,KAChC;AACA,IAAA,cAAA,GAAiB,cAAe,CAAA,aAAA,CAAA;AAAA,GAClC;AACA,EAAO,OAAA,MAAA,CAAA;AACT;;;;"}
|
|
1
|
+
{"version":3,"file":"findOffsetRelativeToScrollParent.js","sources":["../../src/dom/findOffsetRelativeToScrollParent.ts"],"sourcesContent":["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}"],"names":[],"mappings":";;AAKgB,SAAA,gCAAA,CACd,OACA,EAAA,KAAA,GAAwB,KACxB,EAAA;AACA,EAAM,MAAA,YAAA,GAAe,oBAAoB,OAAO,CAAA,CAAA;AAChD,EAAA,IAAI,cAAiB,GAAA,OAAA,CAAA;AACrB,EAAA,IAAI,MAAS,GAAA,CAAA,CAAA;AACb,EAAA,IAAI,YAAe,GAAA,cAAA,CAAA;AACnB,EAAA,OACE,kBACA,cAAmB,KAAA,YAAA,IACnB,mBAAmB,QAAS,CAAA,IAAA,IAC5B,iBAAiB,YACjB,EAAA;AACA,IAAI,IAAA,YAAA,KAAiB,eAAe,YAAc,EAAA;AAChD,MAAU,MAAA,IAAA,cAAA,CAAe,CAAS,MAAA,EAAA,KAAK,CAAE,CAAA,CAAA,CAAA;AACzC,MAAA,YAAA,GAAe,cAAe,CAAA,YAAA,CAAA;AAAA,KAChC;AACA,IAAA,cAAA,GAAiB,cAAe,CAAA,aAAA,CAAA;AAAA,GAClC;AACA,EAAO,OAAA,MAAA,CAAA;AACT;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findScrollContainer.js","sources":["../../src/dom/findScrollContainer.ts"],"sourcesContent":["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"],"names":[],"mappings":"AAAA,MAAM,oBAAuB,GAAA,mBAAA,CAAA;AAKtB,SAAS,oBAAoB,EAAqC,EAAA;AAEvE,EAAA,OAAO,EAAE,EAAA,YAAc,WACrB,CAAA,IAAA,OAAO,MAAO,CAAA,gBAAA,KAAqB,UACjC,GAAA,IAAA,GACA,EAAG,CAAA,YAAA,IAAgB,EAAG,CAAA,YAAA,IACtB,CAAC,oBAAqB,CAAA,IAAA;AAAA,IACpB,MAAO,CAAA,gBAAA,CAAiB,EAAE,CAAA,CAAE,SAAa,IAAA,SAAA;AAAA,MAE3C,EACA,GAAA,mBAAA,CAAoB,EAAG,CAAA,aAA4B,KAAK,QAAS,CAAA,IAAA,CAAA;AACvE;;;;"}
|
|
1
|
+
{"version":3,"file":"findScrollContainer.js","sources":["../../src/dom/findScrollContainer.ts"],"sourcesContent":["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"],"names":[],"mappings":"AAAA,MAAM,oBAAuB,GAAA,mBAAA,CAAA;AAKtB,SAAS,oBAAoB,EAAqC,EAAA;AAEvE,EAAA,OAAO,EAAE,EAAA,YAAc,WACrB,CAAA,IAAA,OAAO,MAAO,CAAA,gBAAA,KAAqB,UACjC,GAAA,IAAA,GACA,EAAG,CAAA,YAAA,IAAgB,EAAG,CAAA,YAAA,IACtB,CAAC,oBAAqB,CAAA,IAAA;AAAA,IACpB,MAAO,CAAA,gBAAA,CAAiB,EAAE,CAAA,CAAE,SAAa,IAAA,SAAA;AAAA,MAE3C,EACA,GAAA,mBAAA,CAAoB,EAAG,CAAA,aAA4B,KAAK,QAAS,CAAA,IAAA,CAAA;AACvE;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getFocusSelector.js","sources":["../../src/dom/getFocusSelector.ts"],"sourcesContent":["/**\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"],"names":[],"mappings":"AAIO,MAAM,iBAAoB,GAAA;AAAA,EAC/B,YAAA;AAAA,EACA,iBAAA;AAAA,EACA,sBAAA;AAAA,EACA,YAAA;AAAA,EACA,oBAAA;AAAA,EACA,qBAAA;AACF,CACG,CAAA,GAAA,CAAI,CAAC,OAAY,KAAA,CAAA,KAAA,EAAQ,OAAO,CAAG,CAAA,CAAA,CAAA,CACnC,KAAK,EAAE,EAAA;AAKH,MAAM,aAAgB,GAAA;AAAA,EAC3B,OAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAA;AAAA,EACA,qCAAA;AAAA,EACA,mBAAA;AAAA,EACA,YAAA;AAAA,EACA,iBAAA;AACF,CACG,CAAA,GAAA,CAAI,CAAC,OAAA,KAAY,CAAG,EAAA,OAAO,GAAG,iBAAiB,CAAA,CAAE,CACjD,CAAA,IAAA,CAAK,GAAG,EAAA;AAcJ,SAAS,iBAAiB,GAAc,EAAA;AAC7C,EAAO,OAAA,CAAA,KAAA,EAAQ,OAAO,EAAE,CAAA;AAAA,YAAA,EACZ,OAAO,EAAE,CAAA;AAAA,UAAA,EACX,OAAO,EAAE,CAAA;AAAA,KAAA,EACd,OAAO,EAAE,CAAA;AAAA,uCAAA,EACyB,OAAO,EAAE,CAAA;AAAA,qBAAA,EAC3B,OAAO,EAAE,CAAA;AAAA,cAAA,EAChB,OAAO,EAAE,CAAA,CAAA,CAAA;AACzB;;;;"}
|
|
1
|
+
{"version":3,"file":"getFocusSelector.js","sources":["../../src/dom/getFocusSelector.ts"],"sourcesContent":["/**\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"],"names":[],"mappings":"AAIO,MAAM,iBAAoB,GAAA;AAAA,EAC/B,YAAA;AAAA,EACA,iBAAA;AAAA,EACA,sBAAA;AAAA,EACA,YAAA;AAAA,EACA,oBAAA;AAAA,EACA,qBAAA;AACF,CACG,CAAA,GAAA,CAAI,CAAC,OAAY,KAAA,CAAA,KAAA,EAAQ,OAAO,CAAG,CAAA,CAAA,CAAA,CACnC,KAAK,EAAE,EAAA;AAKH,MAAM,aAAgB,GAAA;AAAA,EAC3B,OAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAA;AAAA,EACA,qCAAA;AAAA,EACA,mBAAA;AAAA,EACA,YAAA;AAAA,EACA,iBAAA;AACF,CACG,CAAA,GAAA,CAAI,CAAC,OAAA,KAAY,CAAG,EAAA,OAAO,GAAG,iBAAiB,CAAA,CAAE,CACjD,CAAA,IAAA,CAAK,GAAG,EAAA;AAcJ,SAAS,iBAAiB,GAAc,EAAA;AAC7C,EAAO,OAAA,CAAA,KAAA,EAAQ,OAAO,EAAE,CAAA;AAAA,YAAA,EACZ,OAAO,EAAE,CAAA;AAAA,UAAA,EACX,OAAO,EAAE,CAAA;AAAA,KAAA,EACd,OAAO,EAAE,CAAA;AAAA,uCAAA,EACyB,OAAO,EAAE,CAAA;AAAA,qBAAA,EAC3B,OAAO,EAAE,CAAA;AAAA,cAAA,EAChB,OAAO,EAAE,CAAA,CAAA,CAAA;AACzB;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getSpecificParent.js","sources":["../../src/dom/getSpecificParent.ts"],"sourcesContent":["/**\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"],"names":[],"mappings":"AAmBgB,SAAA,iBAAA,CACd,SACA,WACoB,EAAA;AACpB,EAAA,IAAI,cAAiB,GAAA,OAAA,CAAA;AAErB,EAAO,OAAA,OAAA,KAAY,QAAS,CAAA,eAAA,IAAmB,cAAgB,EAAA;AAC7D,IAAM,MAAA,iBAAA,GAAoB,YAAY,cAAc,CAAA,CAAA;AACpD,IAAA,IAAI,iBAAsB,KAAA,IAAA;AAAM,MAAO,OAAA,IAAA,CAAA;AACvC,IAAI,IAAA,iBAAA;AAAmB,MAAO,OAAA,cAAA,CAAA;AAE9B,IAAA,MAAM,SAAS,cAAe,CAAA,aAAA,CAAA;AAC9B,IAAI,IAAA,MAAA;AAAQ,MAAiB,cAAA,GAAA,MAAA,CAAA;AAAA;AACxB,MAAO,OAAA,IAAA,CAAA;AAAA,GACd;AAEA,EAAO,OAAA,IAAA,CAAA;AACT;;;;"}
|
|
1
|
+
{"version":3,"file":"getSpecificParent.js","sources":["../../src/dom/getSpecificParent.ts"],"sourcesContent":["/**\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"],"names":[],"mappings":"AAmBgB,SAAA,iBAAA,CACd,SACA,WACoB,EAAA;AACpB,EAAA,IAAI,cAAiB,GAAA,OAAA,CAAA;AAErB,EAAO,OAAA,OAAA,KAAY,QAAS,CAAA,eAAA,IAAmB,cAAgB,EAAA;AAC7D,IAAM,MAAA,iBAAA,GAAoB,YAAY,cAAc,CAAA,CAAA;AACpD,IAAA,IAAI,iBAAsB,KAAA,IAAA;AAAM,MAAO,OAAA,IAAA,CAAA;AACvC,IAAI,IAAA,iBAAA;AAAmB,MAAO,OAAA,cAAA,CAAA;AAE9B,IAAA,MAAM,SAAS,cAAe,CAAA,aAAA,CAAA;AAC9B,IAAI,IAAA,MAAA;AAAQ,MAAiB,cAAA,GAAA,MAAA,CAAA;AAAA;AACxB,MAAO,OAAA,IAAA,CAAA;AAAA,GACd;AAEA,EAAO,OAAA,IAAA,CAAA;AACT;;;;"}
|
package/dist/dom/isChild.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isChild.js","sources":["../../src/dom/isChild.ts"],"sourcesContent":["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"],"names":[],"mappings":";;AAWgB,SAAA,OAAA,CACd,SACA,WACA,EAAA;AACA,EAAA,OAAO,CAAC,CAAC,iBAAkB,CAAA,OAAA,EAAS,WAAW,CAAA,CAAA;AACjD;;;;"}
|
|
1
|
+
{"version":3,"file":"isChild.js","sources":["../../src/dom/isChild.ts"],"sourcesContent":["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"],"names":[],"mappings":";;AAWgB,SAAA,OAAA,CACd,SACA,WACA,EAAA;AACA,EAAA,OAAO,CAAC,CAAC,iBAAkB,CAAA,OAAA,EAAS,WAAW,CAAA,CAAA;AACjD;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scrollParentIntoElement.js","sources":["../../src/dom/scrollParentIntoElement.ts"],"sourcesContent":["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}"],"names":[],"mappings":";;;AAGA,MAAM,kBAA0C,EAAC,CAAA;AAMjC,SAAA,uBAAA,CACd,SACA,cAAiB,GAAA,CAAA,EACjB,QAAQ,CACR,EAAA,OAAA,GAAU,GACV,EAAA,QAAA,GAA+B,KAC/B,CAAA,EAAA;AACA,EAAA,IAAI,QAAU,EAAA;AACZ,IAAa,YAAA,CAAA,eAAA,CAAgB,QAAQ,CAAC,CAAA,CAAA;AAAA,GACxC;AAEA,EAAM,MAAA,YAAA,GAAe,oBAAoB,OAAO,CAAA,CAAA;AAChD,EAAM,MAAA,SAAA,GAAY,iCAAiC,OAAO,CAAA,CAAA;AAE1D,EAAA,IACE,YACC,KAAA,YAAA,CAAa,SAAY,GAAA,cAAA,GAAiB,SACxC,IAAA,CAAA,YAAA,EAAc,YAAgB,IAAA,QAAA,IAAY,cACzC,GAAA,OAAA,CAAQ,qBAAsB,EAAA,CAAE,MACpC,CAAA,EAAA;AACA,IAAA,YAAA,CAAa,YAAY,SAAY,GAAA,cAAA,CAAA;AAAA,GACvC,MAAA,IACE,YACA,IAAA,YAAA,CAAa,SAAY,GAAA,YAAA,CAAa,eACpC,SAAY,GAAA,OAAA,CAAQ,qBAAsB,EAAA,CAAE,MAC9C,EAAA;AACA,IAAA,YAAA,CAAa,SAAY,GAAA,SAAA,CAAA;AAAA,GAC3B;AAEA,EAAA,IAAI,KAAQ,GAAA,CAAA;AACV,IAAgB,eAAA,CAAA,QAAA,IAAY,MAAM,CAAI,GAAA,UAAA;AAAA,MACpC,MACE,uBAAwB,CAAA,OAAA,EAAS,cAAgB,EAAA,KAAA,GAAQ,GAAG,OAAO,CAAA;AAAA,MACrE,OAAA;AAAA,KACF,CAAA;AACJ;;;;"}
|
|
1
|
+
{"version":3,"file":"scrollParentIntoElement.js","sources":["../../src/dom/scrollParentIntoElement.ts"],"sourcesContent":["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}"],"names":[],"mappings":";;;AAGA,MAAM,kBAA0C,EAAC,CAAA;AAMjC,SAAA,uBAAA,CACd,SACA,cAAiB,GAAA,CAAA,EACjB,QAAQ,CACR,EAAA,OAAA,GAAU,GACV,EAAA,QAAA,GAA+B,KAC/B,CAAA,EAAA;AACA,EAAA,IAAI,QAAU,EAAA;AACZ,IAAa,YAAA,CAAA,eAAA,CAAgB,QAAQ,CAAC,CAAA,CAAA;AAAA,GACxC;AAEA,EAAM,MAAA,YAAA,GAAe,oBAAoB,OAAO,CAAA,CAAA;AAChD,EAAM,MAAA,SAAA,GAAY,iCAAiC,OAAO,CAAA,CAAA;AAE1D,EAAA,IACE,YACC,KAAA,YAAA,CAAa,SAAY,GAAA,cAAA,GAAiB,SACxC,IAAA,CAAA,YAAA,EAAc,YAAgB,IAAA,QAAA,IAAY,cACzC,GAAA,OAAA,CAAQ,qBAAsB,EAAA,CAAE,MACpC,CAAA,EAAA;AACA,IAAA,YAAA,CAAa,YAAY,SAAY,GAAA,cAAA,CAAA;AAAA,GACvC,MAAA,IACE,YACA,IAAA,YAAA,CAAa,SAAY,GAAA,YAAA,CAAa,eACpC,SAAY,GAAA,OAAA,CAAQ,qBAAsB,EAAA,CAAE,MAC9C,EAAA;AACA,IAAA,YAAA,CAAa,SAAY,GAAA,SAAA,CAAA;AAAA,GAC3B;AAEA,EAAA,IAAI,KAAQ,GAAA,CAAA;AACV,IAAgB,eAAA,CAAA,QAAA,IAAY,MAAM,CAAI,GAAA,UAAA;AAAA,MACpC,MACE,uBAAwB,CAAA,OAAA,EAAS,cAAgB,EAAA,KAAA,GAAQ,GAAG,OAAO,CAAA;AAAA,MACrE,OAAA;AAAA,KACF,CAAA;AACJ;;;;"}
|
package/dist/dom/url.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"url.js","sources":["../../src/dom/url.ts"],"sourcesContent":["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"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,IAAA,WAAA,CAAA;AAQO,MAAM,GAAI,CAAA;AAAA,EAKf,WAAA,CAAY,OAAwB,EAAA,oBAAA,GAAuB,IAAM,EAAA;AAA7B,IAAA,IAAA,CAAA,oBAAA,GAAA,oBAAA,CAAA;AAFpC,IAAA,YAAA,CAAA,IAAA,EAAA,WAAA,EAAiD,EAAC,CAAA,CAAA;AAGhD,IAAA,MAAM,CAAC,IAAM,EAAA,KAAK,CAAI,GAAA,OAAA,CAAQ,MAAM,GAAG,CAAA,CAAA;AACvC,IAAA,IAAA,CAAK,IAAO,GAAA,IAAA,CAAA;AACZ,IAAA,KAAA,EAAO,KAAM,CAAA,GAAG,CAAE,CAAA,OAAA,CAAQ,CAAC,OAAY,KAAA;AACrC,MAAA,MAAM,CAAC,IAAM,EAAA,GAAG,KAAK,CAAI,GAAA,OAAA,CAAQ,MAAM,GAAG,CAAA,CAAA;AAC1C,MAAA,IAAA,CAAK,YAAa,CAAA,IAAA,EAAM,KAAM,CAAA,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AAAA,KACxC,CAAA,CAAA;AAAA,GACH;AAAA,EAEA,YAAA,CAAa,IAAc,EAAA,KAAA,EAAgB,aAAyB,EAAA;AAClE,IAAA,IACG,aAAkB,KAAA,KAAA,CAAA,IAAa,CAAC,IAAA,CAAK,wBACtC,aAAkB,KAAA,KAAA;AAElB,MAAA,YAAA,CAAA,IAAA,EAAK,WAAY,CAAA,CAAA,IAAI,CAAI,GAAA,MAAA,CAAO,KAAK,CAAA,CAAA;AAAA;AAErC,MAAK,YAAA,CAAA,IAAA,EAAA,WAAA,CAAA,CAAY,IAAI,CAAI,GAAA,YAAA,CAAA,IAAA,EAAK,aAAY,IAAI,CAAA,GAC1C,CAAC,GAAG,YAAa,CAAA,YAAA,CAAA,IAAA,EAAK,aAAY,IAAI,CAAC,GAAG,MAAO,CAAA,KAAK,CAAC,CACvD,GAAA,CAAC,MAAO,CAAA,KAAK,CAAC,CAAA,CAAA;AAAA,GACtB;AAAA,EAEA,cAAc,UAA0B,EAAA;AACtC,IAAW,UAAA,CAAA,OAAA;AAAA,MAAQ,CAAC,YAClB,IAAK,CAAA,YAAA,CAAa,QAAQ,IAAM,EAAA,OAAA,CAAQ,KAAO,EAAA,OAAA,CAAQ,aAAa,CAAA;AAAA,KACtE,CAAA;AAAA,GACF;AAAA,EAEA,aAAa,IAAc,EAAA;AACzB,IAAO,OAAA,YAAA,CAAA,IAAA,EAAK,aAAY,IAAI,CAAA,CAAA;AAAA,GAC9B;AAAA,EAEA,QAAW,GAAA;AACT,IAAA,MAAM,eAAkB,GAAA,MAAA,CAAO,OAAQ,CAAA,YAAA,CAAA,IAAA,EAAK,WAAW,CAAA,CAAA,CAAA;AAEvD,IAAO,OAAA,CAAA,EAAG,KAAK,IAAI,CAAA,EACjB,gBAAgB,MAAS,GAAA,CAAA,GACrB,IAAI,eACD,CAAA,GAAA;AAAA,MAAI,CAAC,CAAC,IAAA,EAAM,KAAK,CAAA,KAChB,KAAM,CAAA,OAAA,CAAQ,KAAK,CAAA,GACf,KAAM,CAAA,GAAA,CAAI,CAAC,OAAA,KAAY,CAAG,EAAA,IAAI,CAAI,CAAA,EAAA,OAAO,CAAE,CAAA,CAAA,CAAE,IAAK,CAAA,GAAG,CACrD,GAAA,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,MAAO,CAAA,KAAK,CAAC,CAAA,CAAA;AAAA,KAE7B,CAAA,IAAA,CAAK,GAAG,CAAC,KACZ,EACN,CAAA,CAAA,CAAA;AAAA,GACF;AACF,CAAA;AAhDE,WAAA,GAAA,IAAA,OAAA,EAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"url.js","sources":["../../src/dom/url.ts"],"sourcesContent":["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"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,IAAA,WAAA,CAAA;AAQO,MAAM,GAAI,CAAA;AAAA,EAKf,WAAA,CAAY,OAAwB,EAAA,oBAAA,GAAuB,IAAM,EAAA;AAA7B,IAAA,IAAA,CAAA,oBAAA,GAAA,oBAAA,CAAA;AAFpC,IAAA,YAAA,CAAA,IAAA,EAAA,WAAA,EAAiD,EAAC,CAAA,CAAA;AAGhD,IAAA,MAAM,CAAC,IAAM,EAAA,KAAK,CAAI,GAAA,OAAA,CAAQ,MAAM,GAAG,CAAA,CAAA;AACvC,IAAA,IAAA,CAAK,IAAO,GAAA,IAAA,CAAA;AACZ,IAAA,KAAA,EAAO,KAAM,CAAA,GAAG,CAAE,CAAA,OAAA,CAAQ,CAAC,OAAY,KAAA;AACrC,MAAA,MAAM,CAAC,IAAM,EAAA,GAAG,KAAK,CAAI,GAAA,OAAA,CAAQ,MAAM,GAAG,CAAA,CAAA;AAC1C,MAAA,IAAA,CAAK,YAAa,CAAA,IAAA,EAAM,KAAM,CAAA,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AAAA,KACxC,CAAA,CAAA;AAAA,GACH;AAAA,EAEA,YAAA,CAAa,IAAc,EAAA,KAAA,EAAgB,aAAyB,EAAA;AAClE,IAAA,IACG,aAAkB,KAAA,KAAA,CAAA,IAAa,CAAC,IAAA,CAAK,wBACtC,aAAkB,KAAA,KAAA;AAElB,MAAA,YAAA,CAAA,IAAA,EAAK,WAAY,CAAA,CAAA,IAAI,CAAI,GAAA,MAAA,CAAO,KAAK,CAAA,CAAA;AAAA;AAErC,MAAK,YAAA,CAAA,IAAA,EAAA,WAAA,CAAA,CAAY,IAAI,CAAI,GAAA,YAAA,CAAA,IAAA,EAAK,aAAY,IAAI,CAAA,GAC1C,CAAC,GAAG,YAAa,CAAA,YAAA,CAAA,IAAA,EAAK,aAAY,IAAI,CAAC,GAAG,MAAO,CAAA,KAAK,CAAC,CACvD,GAAA,CAAC,MAAO,CAAA,KAAK,CAAC,CAAA,CAAA;AAAA,GACtB;AAAA,EAEA,cAAc,UAA0B,EAAA;AACtC,IAAW,UAAA,CAAA,OAAA;AAAA,MAAQ,CAAC,YAClB,IAAK,CAAA,YAAA,CAAa,QAAQ,IAAM,EAAA,OAAA,CAAQ,KAAO,EAAA,OAAA,CAAQ,aAAa,CAAA;AAAA,KACtE,CAAA;AAAA,GACF;AAAA,EAEA,aAAa,IAAc,EAAA;AACzB,IAAO,OAAA,YAAA,CAAA,IAAA,EAAK,aAAY,IAAI,CAAA,CAAA;AAAA,GAC9B;AAAA,EAEA,QAAW,GAAA;AACT,IAAA,MAAM,eAAkB,GAAA,MAAA,CAAO,OAAQ,CAAA,YAAA,CAAA,IAAA,EAAK,WAAW,CAAA,CAAA,CAAA;AAEvD,IAAO,OAAA,CAAA,EAAG,KAAK,IAAI,CAAA,EACjB,gBAAgB,MAAS,GAAA,CAAA,GACrB,IAAI,eACD,CAAA,GAAA;AAAA,MAAI,CAAC,CAAC,IAAA,EAAM,KAAK,CAAA,KAChB,KAAM,CAAA,OAAA,CAAQ,KAAK,CAAA,GACf,KAAM,CAAA,GAAA,CAAI,CAAC,OAAA,KAAY,CAAG,EAAA,IAAI,CAAI,CAAA,EAAA,OAAO,CAAE,CAAA,CAAA,CAAE,IAAK,CAAA,GAAG,CACrD,GAAA,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,MAAO,CAAA,KAAK,CAAC,CAAA,CAAA;AAAA,KAE7B,CAAA,IAAA,CAAK,GAAG,CAAC,KACZ,EACN,CAAA,CAAA,CAAA;AAAA,GACF;AACF,CAAA;AAhDE,WAAA,GAAA,IAAA,OAAA,EAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePanAndZoom.js","sources":["../../src/dom/usePanAndZoom.ts"],"sourcesContent":["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"],"names":["React"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"usePanAndZoom.js","sources":["../../src/dom/usePanAndZoom.ts"],"sourcesContent":["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"],"names":["React"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/encoding/index.ts"],"sourcesContent":["/**\n * Toma una cadena de texto que puede tener caracteres de escape de HTML (por\n * ejemplo á) y devuelve su correspondiente en texto plano.\n */\nexport const decodeHTMLEntities = (str: string) => {\n const parser = new DOMParser();\n const dom = parser.parseFromString(\n '<!doctype html><body>' + str,\n 'text/html',\n );\n const decodedString = dom.body.textContent;\n return decodedString;\n};\n"],"names":[],"mappings":"AAIa,MAAA,kBAAA,GAAqB,CAAC,GAAgB,KAAA;AACjD,EAAM,MAAA,MAAA,GAAS,IAAI,SAAU,EAAA,CAAA;AAC7B,EAAA,MAAM,MAAM,MAAO,CAAA,eAAA;AAAA,IACjB,uBAA0B,GAAA,GAAA;AAAA,IAC1B,WAAA;AAAA,GACF,CAAA;AACA,EAAM,MAAA,aAAA,GAAgB,IAAI,IAAK,CAAA,WAAA,CAAA;AAC/B,EAAO,OAAA,aAAA,CAAA;AACT;;;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/encoding/index.ts"],"sourcesContent":["/**\r\n * Toma una cadena de texto que puede tener caracteres de escape de HTML (por\r\n * ejemplo á) y devuelve su correspondiente en texto plano.\r\n */\r\nexport const decodeHTMLEntities = (str: string) => {\r\n const parser = new DOMParser();\r\n const dom = parser.parseFromString(\r\n '<!doctype html><body>' + str,\r\n 'text/html',\r\n );\r\n const decodedString = dom.body.textContent;\r\n return decodedString;\r\n};\r\n"],"names":[],"mappings":"AAIa,MAAA,kBAAA,GAAqB,CAAC,GAAgB,KAAA;AACjD,EAAM,MAAA,MAAA,GAAS,IAAI,SAAU,EAAA,CAAA;AAC7B,EAAA,MAAM,MAAM,MAAO,CAAA,eAAA;AAAA,IACjB,uBAA0B,GAAA,GAAA;AAAA,IAC1B,WAAA;AAAA,GACF,CAAA;AACA,EAAM,MAAA,aAAA,GAAgB,IAAI,IAAK,CAAA,WAAA,CAAA;AAC/B,EAAO,OAAA,aAAA,CAAA;AACT;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventEmitter.js","sources":["../../src/events/EventEmitter.ts"],"sourcesContent":["import { Callback, Callbacks, Map, UnSubscriber } from './types';\n\nexport type { Callback, Map, UnSubscriber } from './types';\n\n/**\n * @public\n *\n * The `EventEmitter` class is a generic utility for handling events. It allows subscribing to and emitting events.\n * This class is generic and works with a `Map` where keys are event names and values are the types associated with those events.\n *\n * @typeParam Events - An extension of `Map` where the key is the event name and the value is the type of data associated with that event.\n */\nexport class EventEmitter<Events extends Map> {\n protected callbacks: Record<'on' | 'once', Callbacks<Events>> = {\n on: {} as Callbacks<Events>,\n once: {} as Callbacks<Events>,\n };\n protected enabled = true;\n\n protected debugMode = false;\n debug(enable = true) {\n this.debugMode = enable;\n }\n\n /**\n * Emits an event with the given data. Any listeners subscribed to this event will be invoked with the passed data.\n *\n * @param event - The event name to emit.\n * @param data - The data associated with the event. Its type is dependent on the event name.\n */\n emit<K extends keyof Events>(event: K, data: Events[K]) {\n this.callbacks.on[event]?.forEach((current) => current(data));\n\n this.callbacks.once[event]?.forEach((current) => current(data));\n this.callbacks.once[event] = [];\n }\n\n /**\n * Reflects the current emitter state. A disabled state indicates that the emitter wont call listeners until its functionality gets enabled again.\n */\n get isEnabled() {\n return this.enabled;\n }\n\n off<K extends keyof Events>(event: K, cb: Callback<Events, K>): void {\n this.callbacks.on[event] = this.callbacks.on[event]?.filter(\n (c) => c !== cb,\n );\n this.callbacks.once[event] = this.callbacks.once[event]?.filter(\n (c) => c !== cb,\n );\n }\n\n /**\n * Subscribes a callback function to an event. The callback is invoked each time the event is emitted.\n *\n * @param event - The event name to listen to.\n * @param cb - The callback function to be invoked when the event is emitted.\n * @returns A function to unsubscribe the event listener.\n */\n on<K extends keyof Events>(event: K, cb: Callback<Events, K>): UnSubscriber {\n if (!this.callbacks.on[event]) this.callbacks.on[event] = [];\n this.callbacks.on[event].push(cb);\n\n return () => {\n this.callbacks.on[event] = this.callbacks.on[event].filter(\n (c) => c !== cb,\n );\n };\n }\n\n /**\n * Subscribes a callback function to an event for a single occurrence. After the event is emitted once, the listener is automatically removed.\n *\n * @param event - The event name to listen to for a single occurrence.\n * @param cb - The callback function to be invoked when the event is emitted.\n * @returns A function to unsubscribe the event listener.\n */\n once<K extends keyof Events>(\n event: K,\n cb: Callback<Events, K>,\n ): UnSubscriber {\n if (!this.callbacks.once[event]) this.callbacks.once[event] = [];\n this.callbacks.once[event].push(cb);\n\n return () => {\n this.callbacks.once[event] = this.callbacks.once[event].filter(\n (c) => c !== cb,\n );\n };\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EventEmitter.js","sources":["../../src/events/EventEmitter.ts"],"sourcesContent":["import { Callback, Callbacks, Map, UnSubscriber } from './types';\r\n\r\nexport type { Callback, Map, UnSubscriber } from './types';\r\n\r\n/**\r\n * @public\r\n *\r\n * The `EventEmitter` class is a generic utility for handling events. It allows subscribing to and emitting events.\r\n * This class is generic and works with a `Map` where keys are event names and values are the types associated with those events.\r\n *\r\n * @typeParam Events - An extension of `Map` where the key is the event name and the value is the type of data associated with that event.\r\n */\r\nexport class EventEmitter<Events extends Map> {\r\n protected callbacks: Record<'on' | 'once', Callbacks<Events>> = {\r\n on: {} as Callbacks<Events>,\r\n once: {} as Callbacks<Events>,\r\n };\r\n protected enabled = true;\r\n\r\n protected debugMode = false;\r\n debug(enable = true) {\r\n this.debugMode = enable;\r\n }\r\n\r\n /**\r\n * Emits an event with the given data. Any listeners subscribed to this event will be invoked with the passed data.\r\n *\r\n * @param event - The event name to emit.\r\n * @param data - The data associated with the event. Its type is dependent on the event name.\r\n */\r\n emit<K extends keyof Events>(event: K, data: Events[K]) {\r\n this.callbacks.on[event]?.forEach((current) => current(data));\r\n\r\n this.callbacks.once[event]?.forEach((current) => current(data));\r\n this.callbacks.once[event] = [];\r\n }\r\n\r\n /**\r\n * Reflects the current emitter state. A disabled state indicates that the emitter wont call listeners until its functionality gets enabled again.\r\n */\r\n get isEnabled() {\r\n return this.enabled;\r\n }\r\n\r\n off<K extends keyof Events>(event: K, cb: Callback<Events, K>): void {\r\n this.callbacks.on[event] = this.callbacks.on[event]?.filter(\r\n (c) => c !== cb,\r\n );\r\n this.callbacks.once[event] = this.callbacks.once[event]?.filter(\r\n (c) => c !== cb,\r\n );\r\n }\r\n\r\n /**\r\n * Subscribes a callback function to an event. The callback is invoked each time the event is emitted.\r\n *\r\n * @param event - The event name to listen to.\r\n * @param cb - The callback function to be invoked when the event is emitted.\r\n * @returns A function to unsubscribe the event listener.\r\n */\r\n on<K extends keyof Events>(event: K, cb: Callback<Events, K>): UnSubscriber {\r\n if (!this.callbacks.on[event]) this.callbacks.on[event] = [];\r\n this.callbacks.on[event].push(cb);\r\n\r\n return () => {\r\n this.callbacks.on[event] = this.callbacks.on[event].filter(\r\n (c) => c !== cb,\r\n );\r\n };\r\n }\r\n\r\n /**\r\n * Subscribes a callback function to an event for a single occurrence. After the event is emitted once, the listener is automatically removed.\r\n *\r\n * @param event - The event name to listen to for a single occurrence.\r\n * @param cb - The callback function to be invoked when the event is emitted.\r\n * @returns A function to unsubscribe the event listener.\r\n */\r\n once<K extends keyof Events>(\r\n event: K,\r\n cb: Callback<Events, K>,\r\n ): UnSubscriber {\r\n if (!this.callbacks.once[event]) this.callbacks.once[event] = [];\r\n this.callbacks.once[event].push(cb);\r\n\r\n return () => {\r\n this.callbacks.once[event] = this.callbacks.once[event].filter(\r\n (c) => c !== cb,\r\n );\r\n };\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatefulEmitter.js","sources":["../../src/events/StatefulEmitter.ts"],"sourcesContent":["import { SetStateAction } from 'react';\nimport { Callback, EventEmitter, Map, UnSubscriber } from './EventEmitter';\nimport { useSubscription } from '../hooks';\n\ntype Setter<T> = (prevState: T) => T;\n\nexport function isSetter<T>(data: SetStateAction<T>): data is Setter<T> {\n return typeof data === 'function';\n}\n\n/**\n * @private\n */\ntype EmitterState<Events extends Map> = {\n [K in keyof Events]: Events[K];\n};\n\n/**\n * Extends EventEmitter to manage and emit events with state persistence.\n * This class allows emitting and listening to typed events while also keeping\n * a state that can be accessed synchronously for each event.\n *\n * @param initialState - If given will be passed to subscriptions\n *\n * @template Events - A mapping of event names to their associated data types.\n * @extends EventEmitter<Events>\n */\nexport class StatefulEmitter<Events extends Map> extends EventEmitter<Events> {\n protected state = {} as EmitterState<Events>;\n\n constructor(initialState?: Partial<Events>) {\n super();\n\n this.state = Object.assign({}, initialState) as Events;\n }\n\n emit<K extends keyof Events>(event: K, data: Events[K]): void {\n this.state[event] = data;\n super.emit(event, data);\n }\n\n on<K extends keyof Events>(event: K, cb: Callback<Events, K>): UnSubscriber {\n if (this.state[event]) this.emit(event, this.state[event]);\n\n return super.on(event, cb);\n }\n\n once<K extends keyof Events>(\n event: K,\n cb: Callback<Events, K>,\n ): UnSubscriber {\n if (this.state[event]) {\n this.emit(event, this.state[event]);\n\n /**\n * Given that the information has already been sent, the subscription is not necessary\n */\n return () => {};\n }\n\n return super.once(event, cb);\n }\n\n /**\n * Retrieves the stored state for a given event\n */\n getState<K extends keyof Events>(event: K) {\n return this.state[event];\n }\n\n /**\n * Just an alias for emit, with the advantage that can be called with a callback as second parameter in which case behaves exactly as react's setState.\n */\n setState<K extends keyof Events>(\n event: K,\n data: SetStateAction<Events[K]>,\n ): void {\n const actualData = isSetter(data) ? data(this.getState(event)) : data;\n\n this.emit(event, actualData);\n }\n\n /**\n * Allows to consume an event stream as a real time updated state\n */\n useState = <K extends keyof Events>(event: K) => {\n return useSubscription({\n getInitialState: () => this.state[event],\n makeSubscription: (setState) => {\n return this.on(event, setState);\n },\n });\n };\n}\n"],"names":[],"mappings":";;;AAMO,SAAS,SAAY,IAA4C,EAAA;AACtE,EAAA,OAAO,OAAO,IAAS,KAAA,UAAA,CAAA;AACzB,CAAA;AAmBO,MAAM,wBAA4C,YAAqB,CAAA;AAAA,EAG5E,YAAY,YAAgC,EAAA;AAC1C,IAAM,KAAA,EAAA,CAAA;AAHR,IAAA,IAAA,CAAU,QAAQ,EAAC,CAAA;AAyDnB;AAAA;AAAA;AAAA,IAAA,IAAA,CAAA,QAAA,GAAW,CAAyB,KAAa,KAAA;AAC/C,MAAA,OAAO,eAAgB,CAAA;AAAA,QACrB,eAAiB,EAAA,MAAM,IAAK,CAAA,KAAA,CAAM,KAAK,CAAA;AAAA,QACvC,gBAAA,EAAkB,CAAC,QAAa,KAAA;AAC9B,UAAO,OAAA,IAAA,CAAK,EAAG,CAAA,KAAA,EAAO,QAAQ,CAAA,CAAA;AAAA,SAChC;AAAA,OACD,CAAA,CAAA;AAAA,KACH,CAAA;AA3DE,IAAA,IAAA,CAAK,KAAQ,GAAA,MAAA,CAAO,MAAO,CAAA,IAAI,YAAY,CAAA,CAAA;AAAA,GAC7C;AAAA,EAEA,IAAA,CAA6B,OAAU,IAAuB,EAAA;AAC5D,IAAK,IAAA,CAAA,KAAA,CAAM,KAAK,CAAI,GAAA,IAAA,CAAA;AACpB,IAAM,KAAA,CAAA,IAAA,CAAK,OAAO,IAAI,CAAA,CAAA;AAAA,GACxB;AAAA,EAEA,EAAA,CAA2B,OAAU,EAAuC,EAAA;AAC1E,IAAI,IAAA,IAAA,CAAK,MAAM,KAAK,CAAA;AAAG,MAAA,IAAA,CAAK,IAAK,CAAA,KAAA,EAAO,IAAK,CAAA,KAAA,CAAM,KAAK,CAAC,CAAA,CAAA;AAEzD,IAAO,OAAA,KAAA,CAAM,EAAG,CAAA,KAAA,EAAO,EAAE,CAAA,CAAA;AAAA,GAC3B;AAAA,EAEA,IAAA,CACE,OACA,EACc,EAAA;AACd,IAAI,IAAA,IAAA,CAAK,KAAM,CAAA,KAAK,CAAG,EAAA;AACrB,MAAA,IAAA,CAAK,IAAK,CAAA,KAAA,EAAO,IAAK,CAAA,KAAA,CAAM,KAAK,CAAC,CAAA,CAAA;AAKlC,MAAA,OAAO,MAAM;AAAA,OAAC,CAAA;AAAA,KAChB;AAEA,IAAO,OAAA,KAAA,CAAM,IAAK,CAAA,KAAA,EAAO,EAAE,CAAA,CAAA;AAAA,GAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,SAAiC,KAAU,EAAA;AACzC,IAAO,OAAA,IAAA,CAAK,MAAM,KAAK,CAAA,CAAA;AAAA,GACzB;AAAA;AAAA;AAAA;AAAA,EAKA,QAAA,CACE,OACA,IACM,EAAA;AACN,IAAM,MAAA,UAAA,GAAa,SAAS,IAAI,CAAA,GAAI,KAAK,IAAK,CAAA,QAAA,CAAS,KAAK,CAAC,CAAI,GAAA,IAAA,CAAA;AAEjE,IAAK,IAAA,CAAA,IAAA,CAAK,OAAO,UAAU,CAAA,CAAA;AAAA,GAC7B;AAaF;;;;"}
|
|
1
|
+
{"version":3,"file":"StatefulEmitter.js","sources":["../../src/events/StatefulEmitter.ts"],"sourcesContent":["import { SetStateAction } from 'react';\r\nimport { Callback, EventEmitter, Map, UnSubscriber } from './EventEmitter';\r\nimport { useSubscription } from '../hooks';\r\n\r\ntype Setter<T> = (prevState: T) => T;\r\n\r\nexport function isSetter<T>(data: SetStateAction<T>): data is Setter<T> {\r\n return typeof data === 'function';\r\n}\r\n\r\n/**\r\n * @private\r\n */\r\ntype EmitterState<Events extends Map> = {\r\n [K in keyof Events]: Events[K];\r\n};\r\n\r\n/**\r\n * Extends EventEmitter to manage and emit events with state persistence.\r\n * This class allows emitting and listening to typed events while also keeping\r\n * a state that can be accessed synchronously for each event.\r\n *\r\n * @param initialState - If given will be passed to subscriptions\r\n *\r\n * @template Events - A mapping of event names to their associated data types.\r\n * @extends EventEmitter<Events>\r\n */\r\nexport class StatefulEmitter<Events extends Map> extends EventEmitter<Events> {\r\n protected state = {} as EmitterState<Events>;\r\n\r\n constructor(initialState?: Partial<Events>) {\r\n super();\r\n\r\n this.state = Object.assign({}, initialState) as Events;\r\n }\r\n\r\n emit<K extends keyof Events>(event: K, data: Events[K]): void {\r\n this.state[event] = data;\r\n super.emit(event, data);\r\n }\r\n\r\n on<K extends keyof Events>(event: K, cb: Callback<Events, K>): UnSubscriber {\r\n if (this.state[event]) this.emit(event, this.state[event]);\r\n\r\n return super.on(event, cb);\r\n }\r\n\r\n once<K extends keyof Events>(\r\n event: K,\r\n cb: Callback<Events, K>,\r\n ): UnSubscriber {\r\n if (this.state[event]) {\r\n this.emit(event, this.state[event]);\r\n\r\n /**\r\n * Given that the information has already been sent, the subscription is not necessary\r\n */\r\n return () => {};\r\n }\r\n\r\n return super.once(event, cb);\r\n }\r\n\r\n /**\r\n * Retrieves the stored state for a given event\r\n */\r\n getState<K extends keyof Events>(event: K) {\r\n return this.state[event];\r\n }\r\n\r\n /**\r\n * Just an alias for emit, with the advantage that can be called with a callback as second parameter in which case behaves exactly as react's setState.\r\n */\r\n setState<K extends keyof Events>(\r\n event: K,\r\n data: SetStateAction<Events[K]>,\r\n ): void {\r\n const actualData = isSetter(data) ? data(this.getState(event)) : data;\r\n\r\n this.emit(event, actualData);\r\n }\r\n\r\n /**\r\n * Allows to consume an event stream as a real time updated state\r\n */\r\n useState = <K extends keyof Events>(event: K) => {\r\n return useSubscription({\r\n getInitialState: () => this.state[event],\r\n makeSubscription: (setState) => {\r\n return this.on(event, setState);\r\n },\r\n });\r\n };\r\n}\r\n"],"names":[],"mappings":";;;AAMO,SAAS,SAAY,IAA4C,EAAA;AACtE,EAAA,OAAO,OAAO,IAAS,KAAA,UAAA,CAAA;AACzB,CAAA;AAmBO,MAAM,wBAA4C,YAAqB,CAAA;AAAA,EAG5E,YAAY,YAAgC,EAAA;AAC1C,IAAM,KAAA,EAAA,CAAA;AAHR,IAAA,IAAA,CAAU,QAAQ,EAAC,CAAA;AAyDnB;AAAA;AAAA;AAAA,IAAA,IAAA,CAAA,QAAA,GAAW,CAAyB,KAAa,KAAA;AAC/C,MAAA,OAAO,eAAgB,CAAA;AAAA,QACrB,eAAiB,EAAA,MAAM,IAAK,CAAA,KAAA,CAAM,KAAK,CAAA;AAAA,QACvC,gBAAA,EAAkB,CAAC,QAAa,KAAA;AAC9B,UAAO,OAAA,IAAA,CAAK,EAAG,CAAA,KAAA,EAAO,QAAQ,CAAA,CAAA;AAAA,SAChC;AAAA,OACD,CAAA,CAAA;AAAA,KACH,CAAA;AA3DE,IAAA,IAAA,CAAK,KAAQ,GAAA,MAAA,CAAO,MAAO,CAAA,IAAI,YAAY,CAAA,CAAA;AAAA,GAC7C;AAAA,EAEA,IAAA,CAA6B,OAAU,IAAuB,EAAA;AAC5D,IAAK,IAAA,CAAA,KAAA,CAAM,KAAK,CAAI,GAAA,IAAA,CAAA;AACpB,IAAM,KAAA,CAAA,IAAA,CAAK,OAAO,IAAI,CAAA,CAAA;AAAA,GACxB;AAAA,EAEA,EAAA,CAA2B,OAAU,EAAuC,EAAA;AAC1E,IAAI,IAAA,IAAA,CAAK,MAAM,KAAK,CAAA;AAAG,MAAA,IAAA,CAAK,IAAK,CAAA,KAAA,EAAO,IAAK,CAAA,KAAA,CAAM,KAAK,CAAC,CAAA,CAAA;AAEzD,IAAO,OAAA,KAAA,CAAM,EAAG,CAAA,KAAA,EAAO,EAAE,CAAA,CAAA;AAAA,GAC3B;AAAA,EAEA,IAAA,CACE,OACA,EACc,EAAA;AACd,IAAI,IAAA,IAAA,CAAK,KAAM,CAAA,KAAK,CAAG,EAAA;AACrB,MAAA,IAAA,CAAK,IAAK,CAAA,KAAA,EAAO,IAAK,CAAA,KAAA,CAAM,KAAK,CAAC,CAAA,CAAA;AAKlC,MAAA,OAAO,MAAM;AAAA,OAAC,CAAA;AAAA,KAChB;AAEA,IAAO,OAAA,KAAA,CAAM,IAAK,CAAA,KAAA,EAAO,EAAE,CAAA,CAAA;AAAA,GAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,SAAiC,KAAU,EAAA;AACzC,IAAO,OAAA,IAAA,CAAK,MAAM,KAAK,CAAA,CAAA;AAAA,GACzB;AAAA;AAAA;AAAA;AAAA,EAKA,QAAA,CACE,OACA,IACM,EAAA;AACN,IAAM,MAAA,UAAA,GAAa,SAAS,IAAI,CAAA,GAAI,KAAK,IAAK,CAAA,QAAA,CAAS,KAAK,CAAC,CAAI,GAAA,IAAA,CAAA;AAEjE,IAAK,IAAA,CAAA,IAAA,CAAK,OAAO,UAAU,CAAA,CAAA;AAAA,GAC7B;AAaF;;;;"}
|
|
@@ -21,12 +21,12 @@ var __privateAdd = (obj, member, value) => {
|
|
|
21
21
|
};
|
|
22
22
|
var __privateSet = (obj, member, value, setter) => {
|
|
23
23
|
__accessCheck(obj, member, "write to private field");
|
|
24
|
-
|
|
24
|
+
member.set(obj, value);
|
|
25
25
|
return value;
|
|
26
26
|
};
|
|
27
27
|
var __privateWrapper = (obj, member, setter, getter) => ({
|
|
28
28
|
set _(value) {
|
|
29
|
-
__privateSet(obj, member, value
|
|
29
|
+
__privateSet(obj, member, value);
|
|
30
30
|
},
|
|
31
31
|
get _() {
|
|
32
32
|
return __privateGet(obj, member, getter);
|