@apia/util 3.0.1 → 3.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1865 -68
- package/dist/index.js +2650 -62
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/dist/animate/index.d.ts +0 -4
- package/dist/animate/index.d.ts.map +0 -1
- package/dist/animate/index.js +0 -24
- package/dist/animate/index.js.map +0 -1
- package/dist/array/arrayOrArray.d.ts +0 -4
- package/dist/array/arrayOrArray.d.ts.map +0 -1
- package/dist/array/arrayOrArray.js +0 -8
- package/dist/array/arrayOrArray.js.map +0 -1
- package/dist/array/getIndex.d.ts +0 -14
- package/dist/array/getIndex.d.ts.map +0 -1
- package/dist/array/getIndex.js +0 -12
- package/dist/array/getIndex.js.map +0 -1
- package/dist/crypto/decrypt.d.ts +0 -4
- package/dist/crypto/decrypt.d.ts.map +0 -1
- package/dist/crypto/decrypt.js +0 -16
- package/dist/crypto/decrypt.js.map +0 -1
- package/dist/crypto/encrypt.d.ts +0 -4
- package/dist/crypto/encrypt.d.ts.map +0 -1
- package/dist/crypto/encrypt.js +0 -13
- package/dist/crypto/encrypt.js.map +0 -1
- package/dist/crypto/generateKey.js +0 -11
- package/dist/crypto/generateKey.js.map +0 -1
- package/dist/date/apiaDateToStandarFormat.d.ts +0 -4
- package/dist/date/apiaDateToStandarFormat.d.ts.map +0 -1
- package/dist/date/apiaDateToStandarFormat.js +0 -12
- package/dist/date/apiaDateToStandarFormat.js.map +0 -1
- package/dist/date/dateToApiaFormat.d.ts +0 -4
- package/dist/date/dateToApiaFormat.d.ts.map +0 -1
- package/dist/date/dateToApiaFormat.js +0 -9
- package/dist/date/dateToApiaFormat.js.map +0 -1
- package/dist/date/getDateFormat.d.ts +0 -11
- package/dist/date/getDateFormat.d.ts.map +0 -1
- package/dist/date/getDateFormat.js +0 -20
- package/dist/date/getDateFormat.js.map +0 -1
- package/dist/debug/debugDispatcher.d.ts +0 -32
- package/dist/debug/debugDispatcher.d.ts.map +0 -1
- package/dist/debug/debugDispatcher.js +0 -72
- package/dist/debug/debugDispatcher.js.map +0 -1
- package/dist/debug/shortcutController.d.ts +0 -57
- package/dist/debug/shortcutController.d.ts.map +0 -1
- package/dist/debug/shortcutController.js +0 -152
- package/dist/debug/shortcutController.js.map +0 -1
- package/dist/documents/downloadStringAsDoc.d.ts +0 -8
- package/dist/documents/downloadStringAsDoc.d.ts.map +0 -1
- package/dist/documents/downloadStringAsDoc.js +0 -12
- package/dist/documents/downloadStringAsDoc.js.map +0 -1
- package/dist/documents/downloadUrl.d.ts +0 -20
- package/dist/documents/downloadUrl.d.ts.map +0 -1
- package/dist/documents/downloadUrl.js +0 -18
- package/dist/documents/downloadUrl.js.map +0 -1
- package/dist/documents/openAndReadFile.d.ts +0 -4
- package/dist/documents/openAndReadFile.d.ts.map +0 -1
- package/dist/documents/openAndReadFile.js +0 -29
- package/dist/documents/openAndReadFile.js.map +0 -1
- package/dist/dom/autoDisconnectMutationObserver.d.ts +0 -17
- package/dist/dom/autoDisconnectMutationObserver.d.ts.map +0 -1
- package/dist/dom/autoDisconnectMutationObserver.js +0 -35
- package/dist/dom/autoDisconnectMutationObserver.js.map +0 -1
- package/dist/dom/customEvents.d.ts +0 -40
- package/dist/dom/customEvents.d.ts.map +0 -1
- package/dist/dom/customEvents.js +0 -34
- package/dist/dom/customEvents.js.map +0 -1
- package/dist/dom/enableChildrenFocus.d.ts +0 -18
- package/dist/dom/enableChildrenFocus.d.ts.map +0 -1
- package/dist/dom/enableChildrenFocus.js +0 -26
- package/dist/dom/enableChildrenFocus.js.map +0 -1
- package/dist/dom/findOffsetRelativeToScrollParent.d.ts +0 -7
- package/dist/dom/findOffsetRelativeToScrollParent.d.ts.map +0 -1
- package/dist/dom/findOffsetRelativeToScrollParent.js +0 -19
- package/dist/dom/findOffsetRelativeToScrollParent.js.map +0 -1
- package/dist/dom/findScrollContainer.d.ts +0 -8
- package/dist/dom/findScrollContainer.d.ts.map +0 -1
- package/dist/dom/findScrollContainer.js +0 -9
- package/dist/dom/findScrollContainer.js.map +0 -1
- package/dist/dom/getFocusSelector.d.ts +0 -25
- package/dist/dom/getFocusSelector.d.ts.map +0 -1
- package/dist/dom/getFocusSelector.js +0 -30
- package/dist/dom/getFocusSelector.js.map +0 -1
- package/dist/dom/getSpecificParent.d.ts +0 -23
- package/dist/dom/getSpecificParent.d.ts.map +0 -1
- package/dist/dom/getSpecificParent.js +0 -19
- package/dist/dom/getSpecificParent.js.map +0 -1
- package/dist/dom/isChild.d.ts +0 -13
- package/dist/dom/isChild.d.ts.map +0 -1
- package/dist/dom/isChild.js +0 -8
- package/dist/dom/isChild.js.map +0 -1
- package/dist/dom/scrollParentIntoElement.d.ts +0 -9
- package/dist/dom/scrollParentIntoElement.d.ts.map +0 -1
- package/dist/dom/scrollParentIntoElement.js +0 -24
- package/dist/dom/scrollParentIntoElement.js.map +0 -1
- package/dist/dom/url.d.ts +0 -18
- package/dist/dom/url.d.ts.map +0 -1
- package/dist/dom/url.js +0 -52
- package/dist/dom/url.js.map +0 -1
- package/dist/dom/usePanAndZoom.d.ts +0 -14
- package/dist/dom/usePanAndZoom.d.ts.map +0 -1
- package/dist/dom/usePanAndZoom.js +0 -111
- package/dist/dom/usePanAndZoom.js.map +0 -1
- package/dist/encoding/index.d.ts +0 -8
- package/dist/encoding/index.d.ts.map +0 -1
- package/dist/encoding/index.js +0 -12
- package/dist/encoding/index.js.map +0 -1
- package/dist/events/BouncingEmitter.d.ts +0 -67
- package/dist/events/BouncingEmitter.d.ts.map +0 -1
- package/dist/events/BouncingEmitter.js +0 -72
- package/dist/events/BouncingEmitter.js.map +0 -1
- package/dist/events/EventEmitter.d.ts +0 -47
- package/dist/events/EventEmitter.d.ts.map +0 -1
- package/dist/events/EventEmitter.js +0 -75
- package/dist/events/EventEmitter.js.map +0 -1
- package/dist/events/StatefulEmitter.d.ts +0 -44
- package/dist/events/StatefulEmitter.d.ts.map +0 -1
- package/dist/events/StatefulEmitter.js +0 -57
- package/dist/events/StatefulEmitter.js.map +0 -1
- package/dist/events/types.d.ts +0 -29
- package/dist/events/types.d.ts.map +0 -1
- package/dist/focus/focusController.d.ts +0 -108
- package/dist/focus/focusController.d.ts.map +0 -1
- package/dist/focus/focusController.js +0 -295
- package/dist/focus/focusController.js.map +0 -1
- package/dist/focus/globalFocus.d.ts +0 -24
- package/dist/focus/globalFocus.d.ts.map +0 -1
- package/dist/focus/globalFocus.js +0 -87
- package/dist/focus/globalFocus.js.map +0 -1
- package/dist/history/History.d.ts +0 -81
- package/dist/history/History.d.ts.map +0 -1
- package/dist/history/History.js +0 -122
- package/dist/history/History.js.map +0 -1
- package/dist/hooks/useCombinedRefs.d.ts +0 -18
- package/dist/hooks/useCombinedRefs.d.ts.map +0 -1
- package/dist/hooks/useCombinedRefs.js +0 -20
- package/dist/hooks/useCombinedRefs.js.map +0 -1
- package/dist/hooks/useDebouncedCallback.d.ts +0 -7
- package/dist/hooks/useDebouncedCallback.d.ts.map +0 -1
- package/dist/hooks/useDebouncedCallback.js +0 -21
- package/dist/hooks/useDebouncedCallback.js.map +0 -1
- package/dist/hooks/useLatest.d.ts +0 -13
- package/dist/hooks/useLatest.d.ts.map +0 -1
- package/dist/hooks/useLatest.js +0 -10
- package/dist/hooks/useLatest.js.map +0 -1
- package/dist/hooks/useMount.d.ts +0 -6
- package/dist/hooks/useMount.d.ts.map +0 -1
- package/dist/hooks/useMount.js +0 -14
- package/dist/hooks/useMount.js.map +0 -1
- package/dist/hooks/usePrevious.d.ts +0 -6
- package/dist/hooks/usePrevious.d.ts.map +0 -1
- package/dist/hooks/usePrevious.js +0 -12
- package/dist/hooks/usePrevious.js.map +0 -1
- package/dist/hooks/useShallowMemo.d.ts +0 -9
- package/dist/hooks/useShallowMemo.d.ts.map +0 -1
- package/dist/hooks/useShallowMemo.js +0 -42
- package/dist/hooks/useShallowMemo.js.map +0 -1
- package/dist/hooks/useStateRef.d.ts +0 -10
- package/dist/hooks/useStateRef.d.ts.map +0 -1
- package/dist/hooks/useStateRef.js +0 -11
- package/dist/hooks/useStateRef.js.map +0 -1
- package/dist/hooks/useSubscription.d.ts +0 -31
- package/dist/hooks/useSubscription.d.ts.map +0 -1
- package/dist/hooks/useSubscription.js +0 -21
- package/dist/hooks/useSubscription.js.map +0 -1
- package/dist/hooks/useUnmount.d.ts +0 -4
- package/dist/hooks/useUnmount.d.ts.map +0 -1
- package/dist/hooks/useUnmount.js +0 -10
- package/dist/hooks/useUnmount.js.map +0 -1
- package/dist/hooks/useUpdateEffect.d.ts +0 -10
- package/dist/hooks/useUpdateEffect.d.ts.map +0 -1
- package/dist/hooks/useUpdateEffect.js +0 -16
- package/dist/hooks/useUpdateEffect.js.map +0 -1
- package/dist/imperative/makeImperativeComponent.d.ts +0 -56
- package/dist/imperative/makeImperativeComponent.d.ts.map +0 -1
- package/dist/imperative/makeImperativeComponent.js +0 -48
- package/dist/imperative/makeImperativeComponent.js.map +0 -1
- package/dist/imperative/makeSingleImperativeComponent.d.ts +0 -15
- package/dist/imperative/makeSingleImperativeComponent.d.ts.map +0 -1
- package/dist/imperative/makeSingleImperativeComponent.js +0 -31
- package/dist/imperative/makeSingleImperativeComponent.js.map +0 -1
- package/dist/imperative/types.d.ts +0 -22
- package/dist/imperative/types.d.ts.map +0 -1
- package/dist/imperative/types.js +0 -8
- package/dist/imperative/types.js.map +0 -1
- package/dist/imperative/useImperativeComponentEvents.d.ts +0 -6
- package/dist/imperative/useImperativeComponentEvents.d.ts.map +0 -1
- package/dist/imperative/useImperativeComponentEvents.js +0 -35
- package/dist/imperative/useImperativeComponentEvents.js.map +0 -1
- package/dist/imperative/useImperativeIdentifierContext.d.ts +0 -14
- package/dist/imperative/useImperativeIdentifierContext.d.ts.map +0 -1
- package/dist/imperative/useImperativeIdentifierContext.js +0 -10
- package/dist/imperative/useImperativeIdentifierContext.js.map +0 -1
- package/dist/labels/formatMessage.d.ts +0 -19
- package/dist/labels/formatMessage.d.ts.map +0 -1
- package/dist/labels/formatMessage.js +0 -13
- package/dist/labels/formatMessage.js.map +0 -1
- package/dist/labels/getLabel.d.ts +0 -34
- package/dist/labels/getLabel.d.ts.map +0 -1
- package/dist/labels/getLabel.js +0 -18
- package/dist/labels/getLabel.js.map +0 -1
- package/dist/number/index.d.ts +0 -29
- package/dist/number/index.d.ts.map +0 -1
- package/dist/number/index.js +0 -43
- package/dist/number/index.js.map +0 -1
- package/dist/objects/getValueByPath.d.ts +0 -23
- package/dist/objects/getValueByPath.d.ts.map +0 -1
- package/dist/objects/getValueByPath.js +0 -19
- package/dist/objects/getValueByPath.js.map +0 -1
- package/dist/objects/setValueByPath.d.ts +0 -33
- package/dist/objects/setValueByPath.d.ts.map +0 -1
- package/dist/objects/setValueByPath.js +0 -35
- package/dist/objects/setValueByPath.js.map +0 -1
- package/dist/propsStore/propsStore.d.ts +0 -42
- package/dist/propsStore/propsStore.d.ts.map +0 -1
- package/dist/propsStore/propsStore.js +0 -157
- package/dist/propsStore/propsStore.js.map +0 -1
- package/dist/propsStore/types.d.ts +0 -24
- package/dist/propsStore/types.d.ts.map +0 -1
- package/dist/propsStore/usePropsSelector.d.ts +0 -67
- package/dist/propsStore/usePropsSelector.d.ts.map +0 -1
- package/dist/propsStore/usePropsSelector.js +0 -92
- package/dist/propsStore/usePropsSelector.js.map +0 -1
- package/dist/screenLock/screenLocker.d.ts +0 -60
- package/dist/screenLock/screenLocker.d.ts.map +0 -1
- package/dist/screenLock/screenLocker.js +0 -95
- package/dist/screenLock/screenLocker.js.map +0 -1
- package/dist/states/useDebouncedState.d.ts +0 -10
- package/dist/states/useDebouncedState.d.ts.map +0 -1
- package/dist/states/useDebouncedState.js +0 -22
- package/dist/states/useDebouncedState.js.map +0 -1
- package/dist/states/useDomState.d.ts +0 -86
- package/dist/states/useDomState.d.ts.map +0 -1
- package/dist/states/useDomState.js +0 -35
- package/dist/states/useDomState.js.map +0 -1
- package/dist/storage/StatefulStore.d.ts +0 -205
- package/dist/storage/StatefulStore.d.ts.map +0 -1
- package/dist/storage/StatefulStore.js +0 -301
- package/dist/storage/StatefulStore.js.map +0 -1
- package/dist/storage/persistentStorage.d.ts +0 -12
- package/dist/storage/persistentStorage.d.ts.map +0 -1
- package/dist/storage/persistentStorage.js +0 -28
- package/dist/storage/persistentStorage.js.map +0 -1
- package/dist/storage/useLocalStorage.d.ts +0 -7
- package/dist/storage/useLocalStorage.d.ts.map +0 -1
- package/dist/storage/useLocalStorage.js +0 -40
- package/dist/storage/useLocalStorage.js.map +0 -1
- package/dist/string/alignment.d.ts +0 -25
- package/dist/string/alignment.d.ts.map +0 -1
- package/dist/string/alignment.js +0 -26
- package/dist/string/alignment.js.map +0 -1
- package/dist/string/ucfirst.d.ts +0 -4
- package/dist/string/ucfirst.d.ts.map +0 -1
- package/dist/string/ucfirst.js +0 -6
- package/dist/string/ucfirst.js.map +0 -1
- package/dist/typeGuards/toBoolean.d.ts +0 -26
- package/dist/typeGuards/toBoolean.d.ts.map +0 -1
- package/dist/typeGuards/toBoolean.js +0 -11
- package/dist/typeGuards/toBoolean.js.map +0 -1
- package/dist/types/apia/common.d.ts +0 -114
- package/dist/types/apia/common.d.ts.map +0 -1
- package/dist/types/apia/date.d.ts +0 -4
- package/dist/types/apia/date.d.ts.map +0 -1
- package/dist/types/apia/forms.d.ts +0 -221
- package/dist/types/apia/forms.d.ts.map +0 -1
- package/dist/types/misc.d.ts +0 -9
- package/dist/types/misc.d.ts.map +0 -1
- package/dist/xml/parseXmlAsync.d.ts +0 -4
- package/dist/xml/parseXmlAsync.d.ts.map +0 -1
- package/dist/xml/parseXmlAsync.js +0 -58
- package/dist/xml/parseXmlAsync.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
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;;;;"}
|
package/dist/events/types.d.ts
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @public
|
|
3
|
-
*
|
|
4
|
-
* A basic Record
|
|
5
|
-
* */
|
|
6
|
-
type Map = Record<string, unknown>;
|
|
7
|
-
/**
|
|
8
|
-
* @public
|
|
9
|
-
*
|
|
10
|
-
* This is the callback provided by the listener any time it wants to subscribe to an event.
|
|
11
|
-
*/
|
|
12
|
-
type Callback<Events extends Map, K extends keyof Events = keyof Events> = (data: Events[K]) => unknown;
|
|
13
|
-
/**
|
|
14
|
-
* @internal
|
|
15
|
-
*
|
|
16
|
-
* This is the emitter's callbacks storage
|
|
17
|
-
*/
|
|
18
|
-
type Callbacks<Events extends Map> = {
|
|
19
|
-
[K in keyof Events]: Callback<Events, K>[];
|
|
20
|
-
};
|
|
21
|
-
/**
|
|
22
|
-
* @public
|
|
23
|
-
*
|
|
24
|
-
* A method that unsubscribes the recently made subscription.
|
|
25
|
-
*/
|
|
26
|
-
type UnSubscriber = () => void;
|
|
27
|
-
|
|
28
|
-
export type { Callback, Callbacks, Map, UnSubscriber };
|
|
29
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
import { TRequireOnlyOne } from '../types/misc.js';
|
|
2
|
-
|
|
3
|
-
interface IFocusProps {
|
|
4
|
-
modalsContainerRetriever?: () => HTMLElement;
|
|
5
|
-
notificationsContainerRetriever?: () => HTMLElement;
|
|
6
|
-
}
|
|
7
|
-
interface IOnFocusConfiguration {
|
|
8
|
-
/**
|
|
9
|
-
* El controlador emite un evento custom cuando se realiza foco, con la
|
|
10
|
-
* intención de que los elementos colapsables se abran automáticamente. Si
|
|
11
|
-
* este parámetro es pasado con false, se evita ese comportamiento.
|
|
12
|
-
*/
|
|
13
|
-
dispatchCustomEvent?: boolean;
|
|
14
|
-
/**
|
|
15
|
-
* Cuando la pantalla está bloqueada con el spinner, el controlador no
|
|
16
|
-
* intentará hacer foco, a menos que este parámetro se pase en true.
|
|
17
|
-
*/
|
|
18
|
-
focusEvenWhenScreenLocked?: boolean;
|
|
19
|
-
scrollIntoViewOptions?: ScrollIntoViewOptions;
|
|
20
|
-
}
|
|
21
|
-
declare const notificationsSelector = ".notification";
|
|
22
|
-
/**
|
|
23
|
-
* Al método focus.on se le puede pasar o bien un HTMLElement o bien una
|
|
24
|
-
* función que implemente esta interfaz. Cuando se pasa una función, la misma
|
|
25
|
-
* será invocada cada vez que se vaya a intentar una acción de foco.
|
|
26
|
-
*
|
|
27
|
-
* Si la función devuelve un elemento HTML, se intentará hacer foco sobre éste.
|
|
28
|
-
*
|
|
29
|
-
* Si la función devuelve null, ese intento será tomado como nulo y se volverá
|
|
30
|
-
* a intentar luego del tiempo determinado.
|
|
31
|
-
*
|
|
32
|
-
* Si la función devuelve false, será eliminada de la cola de foco, lo que
|
|
33
|
-
* significa que ya no se intentará hacer foco sobre este elemento. En cambio,
|
|
34
|
-
* se continuará con los demás elementos de la cola o en caso de no haber
|
|
35
|
-
* ninguno, con el último elemento que tuvo foco y aún esté presente en el
|
|
36
|
-
* documento.
|
|
37
|
-
*/
|
|
38
|
-
type TFocusRetriever = (isLastTry: boolean) => HTMLElement | null | false;
|
|
39
|
-
interface IFocusQueryElement {
|
|
40
|
-
element: HTMLElement | TFocusRetriever;
|
|
41
|
-
configuration?: IOnFocusConfiguration;
|
|
42
|
-
}
|
|
43
|
-
declare global {
|
|
44
|
-
interface Window {
|
|
45
|
-
focusStatus: Record<string, unknown>;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
interface IFocusCheck {
|
|
49
|
-
currentInstruction: number;
|
|
50
|
-
}
|
|
51
|
-
declare const focus: {
|
|
52
|
-
"__#5@#root": HTMLElement;
|
|
53
|
-
"__#5@#props": IFocusProps | undefined;
|
|
54
|
-
afterNotificationFocus: IFocusQueryElement | undefined;
|
|
55
|
-
"__#5@#actualFocusQuery": IFocusQueryElement[];
|
|
56
|
-
"__#5@#currentInstruction": number;
|
|
57
|
-
"__#5@#focusDelay": number;
|
|
58
|
-
"__#5@#focusRetries": number;
|
|
59
|
-
"__#5@#focusTimeout": number;
|
|
60
|
-
"__#5@#isIntervalRunning": boolean;
|
|
61
|
-
"__#5@#focusQuery": IFocusQueryElement[];
|
|
62
|
-
"__#5@#checkInstruction"(focusCheck: IFocusCheck): boolean;
|
|
63
|
-
"__#5@#doFocus"(HTMLElement: HTMLElement | TFocusRetriever, focusCheck: IFocusCheck, isLastTry: boolean, configuration?: IOnFocusConfiguration): Promise<false | HTMLElement | null>;
|
|
64
|
-
"__#5@#resetInterval"(): void;
|
|
65
|
-
"__#5@#runFocusInterval"(focusElement?: IFocusQueryElement, internalCall?: boolean): Promise<false | HTMLElement>;
|
|
66
|
-
/**
|
|
67
|
-
* Da la instrucción de colocar el foco en el elemento provisto como
|
|
68
|
-
* parámetro una vez que todas las notificaciones se hayan cerrado. En caso
|
|
69
|
-
* de no existir notificaciones abiertas, hace foco en el elemento
|
|
70
|
-
* directamente.
|
|
71
|
-
*/
|
|
72
|
-
afterNotifications(element: HTMLElement | TFocusRetriever, configuration?: IOnFocusConfiguration): void;
|
|
73
|
-
/**
|
|
74
|
-
* Da la instrucción de colocar el foco en el elemento provisto como
|
|
75
|
-
* parámetro luego de recargar la página.
|
|
76
|
-
*
|
|
77
|
-
* Los parámetros pasados serán ordenados en orden de importancia priorizando
|
|
78
|
-
* en el siguiente orden:
|
|
79
|
-
* - id
|
|
80
|
-
* - name
|
|
81
|
-
* - className
|
|
82
|
-
* - selector
|
|
83
|
-
*/
|
|
84
|
-
afterReload({ className, id, name, selector, }: TRequireOnlyOne<{
|
|
85
|
-
className: string;
|
|
86
|
-
id: string;
|
|
87
|
-
name: string;
|
|
88
|
-
selector: string;
|
|
89
|
-
}>): void;
|
|
90
|
-
/**
|
|
91
|
-
* Da la instrucción de colocar el foco el elemento pasado como parámetro.
|
|
92
|
-
* Se puede pasar también una función que devuelva HTMLElement | false |
|
|
93
|
-
* null.
|
|
94
|
-
*
|
|
95
|
-
* El segundo parámetro del método on es un objeto de tipo
|
|
96
|
-
* ScrollIntoViewOptions, que permite modificar el comportamiento del scroll
|
|
97
|
-
* a en el elemento.
|
|
98
|
-
*
|
|
99
|
-
* @see TFocusRetriever para más detalles sobre la función como parámetro.
|
|
100
|
-
*/
|
|
101
|
-
on(element: HTMLElement | TFocusRetriever, configuration?: IOnFocusConfiguration): Promise<false | HTMLElement>;
|
|
102
|
-
focusOnReload: string | null;
|
|
103
|
-
restore(): void;
|
|
104
|
-
init(): void;
|
|
105
|
-
};
|
|
106
|
-
|
|
107
|
-
export { type IOnFocusConfiguration, type TFocusRetriever, focus, notificationsSelector };
|
|
108
|
-
//# sourceMappingURL=focusController.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"focusController.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,295 +0,0 @@
|
|
|
1
|
-
import isFunction from 'lodash-es/isFunction';
|
|
2
|
-
import { globalFocus } from './globalFocus.js';
|
|
3
|
-
import persistentStorage from '../storage/persistentStorage.js';
|
|
4
|
-
import { noNaN } from '../number/index.js';
|
|
5
|
-
import { focusSelector } from '../dom/getFocusSelector.js';
|
|
6
|
-
import { screenLocker } from '../screenLock/screenLocker.js';
|
|
7
|
-
import { customEvents } from '../dom/customEvents.js';
|
|
8
|
-
|
|
9
|
-
var __accessCheck = (obj, member, msg) => {
|
|
10
|
-
if (!member.has(obj))
|
|
11
|
-
throw TypeError("Cannot " + msg);
|
|
12
|
-
};
|
|
13
|
-
var __privateGet = (obj, member, getter) => {
|
|
14
|
-
__accessCheck(obj, member, "read from private field");
|
|
15
|
-
return getter ? getter.call(obj) : member.get(obj);
|
|
16
|
-
};
|
|
17
|
-
var __privateAdd = (obj, member, value) => {
|
|
18
|
-
if (member.has(obj))
|
|
19
|
-
throw TypeError("Cannot add the same private member more than once");
|
|
20
|
-
member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
21
|
-
};
|
|
22
|
-
var __privateSet = (obj, member, value, setter) => {
|
|
23
|
-
__accessCheck(obj, member, "write to private field");
|
|
24
|
-
setter ? setter.call(obj, value) : member.set(obj, value);
|
|
25
|
-
return value;
|
|
26
|
-
};
|
|
27
|
-
var __privateWrapper = (obj, member, setter, getter) => ({
|
|
28
|
-
set _(value) {
|
|
29
|
-
__privateSet(obj, member, value, setter);
|
|
30
|
-
},
|
|
31
|
-
get _() {
|
|
32
|
-
return __privateGet(obj, member, getter);
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
var __privateMethod = (obj, member, method) => {
|
|
36
|
-
__accessCheck(obj, member, "access private method");
|
|
37
|
-
return method;
|
|
38
|
-
};
|
|
39
|
-
var _root, _props, _actualFocusQuery, _currentInstruction, _focusDelay, _focusRetries, _focusTimeout, _isIntervalRunning, _focusQuery, focusQuery_get, _checkInstruction, checkInstruction_fn, _doFocus, doFocus_fn, _resetInterval, resetInterval_fn, _runFocusInterval, runFocusInterval_fn, _a;
|
|
40
|
-
const notificationsSelector = ".notification";
|
|
41
|
-
const focus = new (_a = class {
|
|
42
|
-
constructor(root, props) {
|
|
43
|
-
__privateAdd(this, _focusQuery);
|
|
44
|
-
__privateAdd(this, _checkInstruction);
|
|
45
|
-
__privateAdd(this, _doFocus);
|
|
46
|
-
__privateAdd(this, _resetInterval);
|
|
47
|
-
__privateAdd(this, _runFocusInterval);
|
|
48
|
-
__privateAdd(this, _root, void 0);
|
|
49
|
-
__privateAdd(this, _props, void 0);
|
|
50
|
-
this.afterNotificationFocus = void 0;
|
|
51
|
-
__privateAdd(this, _actualFocusQuery, []);
|
|
52
|
-
__privateAdd(this, _currentInstruction, 0);
|
|
53
|
-
__privateAdd(this, _focusDelay, 300);
|
|
54
|
-
__privateAdd(this, _focusRetries, 3);
|
|
55
|
-
__privateAdd(this, _focusTimeout, -1);
|
|
56
|
-
__privateAdd(this, _isIntervalRunning, false);
|
|
57
|
-
this.focusOnReload = null;
|
|
58
|
-
__privateSet(this, _root, root);
|
|
59
|
-
__privateSet(this, _props, props);
|
|
60
|
-
window.focusStatus = {};
|
|
61
|
-
globalFocus.onFocus(() => {
|
|
62
|
-
__privateMethod(this, _resetInterval, resetInterval_fn).call(this);
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Da la instrucción de colocar el foco en el elemento provisto como
|
|
67
|
-
* parámetro una vez que todas las notificaciones se hayan cerrado. En caso
|
|
68
|
-
* de no existir notificaciones abiertas, hace foco en el elemento
|
|
69
|
-
* directamente.
|
|
70
|
-
*/
|
|
71
|
-
afterNotifications(element, configuration) {
|
|
72
|
-
if (!element)
|
|
73
|
-
return;
|
|
74
|
-
void this.on(element, configuration);
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Da la instrucción de colocar el foco en el elemento provisto como
|
|
78
|
-
* parámetro luego de recargar la página.
|
|
79
|
-
*
|
|
80
|
-
* Los parámetros pasados serán ordenados en orden de importancia priorizando
|
|
81
|
-
* en el siguiente orden:
|
|
82
|
-
* - id
|
|
83
|
-
* - name
|
|
84
|
-
* - className
|
|
85
|
-
* - selector
|
|
86
|
-
*/
|
|
87
|
-
afterReload({
|
|
88
|
-
className,
|
|
89
|
-
id,
|
|
90
|
-
name,
|
|
91
|
-
selector
|
|
92
|
-
}) {
|
|
93
|
-
persistentStorage.focusOnReload = [
|
|
94
|
-
id ? `#${id}` : void 0,
|
|
95
|
-
name ? `[name="${name}"]` : void 0,
|
|
96
|
-
className ? `.${className}` : void 0,
|
|
97
|
-
selector
|
|
98
|
-
].filter((el) => el !== void 0).join(",");
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Da la instrucción de colocar el foco el elemento pasado como parámetro.
|
|
102
|
-
* Se puede pasar también una función que devuelva HTMLElement | false |
|
|
103
|
-
* null.
|
|
104
|
-
*
|
|
105
|
-
* El segundo parámetro del método on es un objeto de tipo
|
|
106
|
-
* ScrollIntoViewOptions, que permite modificar el comportamiento del scroll
|
|
107
|
-
* a en el elemento.
|
|
108
|
-
*
|
|
109
|
-
* @see TFocusRetriever para más detalles sobre la función como parámetro.
|
|
110
|
-
*/
|
|
111
|
-
async on(element, configuration) {
|
|
112
|
-
if (element) {
|
|
113
|
-
const focusElement = {
|
|
114
|
-
element,
|
|
115
|
-
configuration
|
|
116
|
-
};
|
|
117
|
-
for (let i = 0; i < __privateGet(this, _focusRetries); i++)
|
|
118
|
-
__privateGet(this, _focusQuery, focusQuery_get).unshift(focusElement);
|
|
119
|
-
__privateMethod(this, _resetInterval, resetInterval_fn).call(this);
|
|
120
|
-
return __privateMethod(this, _runFocusInterval, runFocusInterval_fn).call(this, focusElement);
|
|
121
|
-
}
|
|
122
|
-
return false;
|
|
123
|
-
}
|
|
124
|
-
restore() {
|
|
125
|
-
void this.on(
|
|
126
|
-
globalFocus.last(":not(body), body#tinymce") || document.querySelector(focusSelector)
|
|
127
|
-
);
|
|
128
|
-
}
|
|
129
|
-
init() {
|
|
130
|
-
const modalsObserver = new MutationObserver((mutation) => {
|
|
131
|
-
if (mutation[0].removedNodes.length === 0)
|
|
132
|
-
return;
|
|
133
|
-
this.afterNotifications(
|
|
134
|
-
globalFocus.last(
|
|
135
|
-
":not(body):not(.notificationsView *), body#tinymce"
|
|
136
|
-
)
|
|
137
|
-
);
|
|
138
|
-
});
|
|
139
|
-
const appModalsBox = (__privateGet(this, _props)?.modalsContainerRetriever ?? (() => __privateGet(this, _root).querySelector("#AppModals")))();
|
|
140
|
-
if (appModalsBox)
|
|
141
|
-
modalsObserver.observe(appModalsBox, { childList: true });
|
|
142
|
-
screenLocker.on("releaseForFirstTime", () => {
|
|
143
|
-
if (persistentStorage.focusOnReload)
|
|
144
|
-
this.focusOnReload = persistentStorage.focusOnReload;
|
|
145
|
-
persistentStorage.focusOnReload = null;
|
|
146
|
-
this.afterNotifications(() => {
|
|
147
|
-
if (this.focusOnReload) {
|
|
148
|
-
const initialFocusElement = document.querySelector(
|
|
149
|
-
this.focusOnReload
|
|
150
|
-
);
|
|
151
|
-
const scrollTop = noNaN(
|
|
152
|
-
window.CURRENT_TAB?.split(
|
|
153
|
-
"~"
|
|
154
|
-
)[1]
|
|
155
|
-
);
|
|
156
|
-
if (document.scrollingElement)
|
|
157
|
-
document.scrollingElement.scrollTop = scrollTop;
|
|
158
|
-
return initialFocusElement;
|
|
159
|
-
}
|
|
160
|
-
return false;
|
|
161
|
-
});
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
}, _root = new WeakMap(), _props = new WeakMap(), _actualFocusQuery = new WeakMap(), _currentInstruction = new WeakMap(), _focusDelay = new WeakMap(), _focusRetries = new WeakMap(), _focusTimeout = new WeakMap(), _isIntervalRunning = new WeakMap(), _focusQuery = new WeakSet(), focusQuery_get = function() {
|
|
165
|
-
return new Proxy(__privateGet(this, _actualFocusQuery), {
|
|
166
|
-
get: (target, key) => {
|
|
167
|
-
if (key in target) {
|
|
168
|
-
const prop = target[key];
|
|
169
|
-
if (isFunction(prop))
|
|
170
|
-
return (...props) => {
|
|
171
|
-
const result = target[key].bind(target, ...props)();
|
|
172
|
-
return result;
|
|
173
|
-
};
|
|
174
|
-
return prop;
|
|
175
|
-
}
|
|
176
|
-
return void 0;
|
|
177
|
-
}
|
|
178
|
-
});
|
|
179
|
-
}, _checkInstruction = new WeakSet(), checkInstruction_fn = function(focusCheck) {
|
|
180
|
-
return focusCheck.currentInstruction === __privateGet(this, _currentInstruction);
|
|
181
|
-
}, _doFocus = new WeakSet(), doFocus_fn = async function(HTMLElement, focusCheck, isLastTry, configuration) {
|
|
182
|
-
if (screenLocker.isLocked("common") && !configuration?.focusEvenWhenScreenLocked) {
|
|
183
|
-
return null;
|
|
184
|
-
}
|
|
185
|
-
const actualHTMLElement = isFunction(HTMLElement) ? HTMLElement(isLastTry) : HTMLElement;
|
|
186
|
-
if (actualHTMLElement) {
|
|
187
|
-
if (actualHTMLElement.disabled)
|
|
188
|
-
return false;
|
|
189
|
-
actualHTMLElement.focus();
|
|
190
|
-
return new Promise((resolve) => {
|
|
191
|
-
if (configuration?.dispatchCustomEvent !== false) {
|
|
192
|
-
const customFocusEvent = new CustomEvent(customEvents.focus, {
|
|
193
|
-
bubbles: true
|
|
194
|
-
});
|
|
195
|
-
actualHTMLElement.dispatchEvent(customFocusEvent);
|
|
196
|
-
}
|
|
197
|
-
setTimeout(() => {
|
|
198
|
-
if (!__privateMethod(this, _checkInstruction, checkInstruction_fn).call(this, focusCheck)) {
|
|
199
|
-
resolve(false);
|
|
200
|
-
return;
|
|
201
|
-
}
|
|
202
|
-
try {
|
|
203
|
-
if (configuration?.scrollIntoViewOptions)
|
|
204
|
-
actualHTMLElement?.scrollIntoView(
|
|
205
|
-
configuration.scrollIntoViewOptions
|
|
206
|
-
);
|
|
207
|
-
} catch (e) {
|
|
208
|
-
console.error(e);
|
|
209
|
-
}
|
|
210
|
-
setTimeout(() => {
|
|
211
|
-
if (!__privateMethod(this, _checkInstruction, checkInstruction_fn).call(this, focusCheck)) {
|
|
212
|
-
resolve(false);
|
|
213
|
-
} else if (document.activeElement?.tagName === "IFRAME") {
|
|
214
|
-
resolve(
|
|
215
|
-
document.activeElement.contentDocument?.contains(actualHTMLElement) ? actualHTMLElement : null
|
|
216
|
-
);
|
|
217
|
-
} else
|
|
218
|
-
resolve(
|
|
219
|
-
document.activeElement === actualHTMLElement ? actualHTMLElement : null
|
|
220
|
-
);
|
|
221
|
-
}, 0);
|
|
222
|
-
}, 0);
|
|
223
|
-
});
|
|
224
|
-
}
|
|
225
|
-
return actualHTMLElement;
|
|
226
|
-
}, _resetInterval = new WeakSet(), resetInterval_fn = function() {
|
|
227
|
-
clearTimeout(__privateGet(this, _focusTimeout));
|
|
228
|
-
__privateSet(this, _focusTimeout, -1);
|
|
229
|
-
__privateSet(this, _isIntervalRunning, false);
|
|
230
|
-
__privateWrapper(this, _currentInstruction)._++;
|
|
231
|
-
}, _runFocusInterval = new WeakSet(), runFocusInterval_fn = async function(focusElement, internalCall) {
|
|
232
|
-
if (!internalCall && (__privateGet(this, _focusTimeout) !== -1 || __privateGet(this, _isIntervalRunning)))
|
|
233
|
-
return false;
|
|
234
|
-
const currentInstruction = {
|
|
235
|
-
currentInstruction: __privateGet(this, _currentInstruction)
|
|
236
|
-
};
|
|
237
|
-
__privateSet(this, _isIntervalRunning, true);
|
|
238
|
-
return new Promise((resolve) => {
|
|
239
|
-
const resolvePromise = async () => {
|
|
240
|
-
const element = focusElement ?? __privateGet(this, _focusQuery, focusQuery_get).shift();
|
|
241
|
-
if (element) {
|
|
242
|
-
const hasFocused = await __privateMethod(this, _doFocus, doFocus_fn).call(this, element.element, currentInstruction, element !== __privateGet(this, _focusQuery, focusQuery_get)[0], element.configuration);
|
|
243
|
-
if (!__privateMethod(this, _checkInstruction, checkInstruction_fn).call(this, currentInstruction)) {
|
|
244
|
-
resolve(false);
|
|
245
|
-
return;
|
|
246
|
-
}
|
|
247
|
-
if (hasFocused !== null && hasFocused !== false) {
|
|
248
|
-
__privateSet(this, _actualFocusQuery, []);
|
|
249
|
-
resolve(hasFocused);
|
|
250
|
-
__privateSet(this, _isIntervalRunning, false);
|
|
251
|
-
return;
|
|
252
|
-
}
|
|
253
|
-
if (hasFocused === false) {
|
|
254
|
-
__privateSet(this, _actualFocusQuery, __privateGet(this, _actualFocusQuery).filter(
|
|
255
|
-
(current) => current !== element
|
|
256
|
-
));
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
if (!__privateMethod(this, _checkInstruction, checkInstruction_fn).call(this, currentInstruction)) {
|
|
260
|
-
resolve(false);
|
|
261
|
-
return;
|
|
262
|
-
}
|
|
263
|
-
if (__privateGet(this, _actualFocusQuery).length > 0) {
|
|
264
|
-
__privateSet(this, _focusTimeout, setTimeout(() => {
|
|
265
|
-
const runInterval = async () => {
|
|
266
|
-
const result = await __privateMethod(this, _runFocusInterval, runFocusInterval_fn).call(this, void 0, true);
|
|
267
|
-
resolve(result);
|
|
268
|
-
__privateSet(this, _isIntervalRunning, true);
|
|
269
|
-
};
|
|
270
|
-
void runInterval();
|
|
271
|
-
}, __privateGet(this, _focusDelay)));
|
|
272
|
-
} else {
|
|
273
|
-
const lastFocused = globalFocus.last(":not(body)");
|
|
274
|
-
if (lastFocused) {
|
|
275
|
-
const result = await __privateMethod(this, _doFocus, doFocus_fn).call(this, lastFocused, currentInstruction, element !== __privateGet(this, _focusQuery, focusQuery_get)[0], element?.configuration);
|
|
276
|
-
if (!__privateMethod(this, _checkInstruction, checkInstruction_fn).call(this, currentInstruction)) {
|
|
277
|
-
resolve(false);
|
|
278
|
-
return;
|
|
279
|
-
}
|
|
280
|
-
if (result)
|
|
281
|
-
resolve(result);
|
|
282
|
-
else
|
|
283
|
-
resolve(false);
|
|
284
|
-
__privateSet(this, _isIntervalRunning, true);
|
|
285
|
-
}
|
|
286
|
-
resolve(false);
|
|
287
|
-
__privateSet(this, _isIntervalRunning, true);
|
|
288
|
-
}
|
|
289
|
-
};
|
|
290
|
-
void resolvePromise();
|
|
291
|
-
});
|
|
292
|
-
}, _a)(document.getElementById("root"));
|
|
293
|
-
|
|
294
|
-
export { focus, notificationsSelector };
|
|
295
|
-
//# sourceMappingURL=focusController.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"focusController.js","sources":["../../src/focus/focusController.ts"],"sourcesContent":["import isFunction from 'lodash-es/isFunction';\nimport { TRequireOnlyOne } from '../types';\nimport { globalFocus } from './globalFocus';\nimport { screenLocker } from '../screenLock';\nimport { customEvents, focusSelector } from '../dom';\nimport { persistentStorage } from '../storage';\nimport { noNaN } from '../number';\n\ninterface IFocusProps {\n modalsContainerRetriever?: () => HTMLElement;\n notificationsContainerRetriever?: () => HTMLElement;\n}\n\nexport interface IOnFocusConfiguration {\n /**\n * El controlador emite un evento custom cuando se realiza foco, con la\n * intención de que los elementos colapsables se abran automáticamente. Si\n * este parámetro es pasado con false, se evita ese comportamiento.\n */\n dispatchCustomEvent?: boolean;\n /**\n * Cuando la pantalla está bloqueada con el spinner, el controlador no\n * intentará hacer foco, a menos que este parámetro se pase en true.\n */\n focusEvenWhenScreenLocked?: boolean;\n scrollIntoViewOptions?: ScrollIntoViewOptions;\n}\n\nexport const notificationsSelector = '.notification';\n\n/**\n * Al método focus.on se le puede pasar o bien un HTMLElement o bien una\n * función que implemente esta interfaz. Cuando se pasa una función, la misma\n * será invocada cada vez que se vaya a intentar una acción de foco.\n *\n * Si la función devuelve un elemento HTML, se intentará hacer foco sobre éste.\n *\n * Si la función devuelve null, ese intento será tomado como nulo y se volverá\n * a intentar luego del tiempo determinado.\n *\n * Si la función devuelve false, será eliminada de la cola de foco, lo que\n * significa que ya no se intentará hacer foco sobre este elemento. En cambio,\n * se continuará con los demás elementos de la cola o en caso de no haber\n * ninguno, con el último elemento que tuvo foco y aún esté presente en el\n * documento.\n */\nexport type TFocusRetriever = (\n isLastTry: boolean,\n) => HTMLElement | null | false;\n\ninterface IFocusQueryElement {\n element: HTMLElement | TFocusRetriever;\n configuration?: IOnFocusConfiguration;\n}\n\ndeclare global {\n interface Window {\n focusStatus: Record<string, unknown>;\n }\n}\n\ninterface IFocusCheck {\n currentInstruction: number;\n}\n\nexport const focus = new (class FocusController {\n #root: HTMLElement;\n\n #props: IFocusProps | undefined;\n\n constructor(root: HTMLElement, props?: IFocusProps) {\n this.#root = root;\n this.#props = props;\n\n window.focusStatus = {};\n globalFocus.onFocus(() => {\n this.#resetInterval();\n });\n }\n\n afterNotificationFocus: IFocusQueryElement | undefined = undefined;\n\n #actualFocusQuery: IFocusQueryElement[] = [];\n\n #currentInstruction = 0;\n\n #focusDelay = 300;\n\n #focusRetries = 3;\n\n #focusTimeout = -1;\n\n #isIntervalRunning = false;\n\n set #focusQuery(value: IFocusQueryElement[]) {\n this.#actualFocusQuery = value;\n }\n\n get #focusQuery() {\n return new Proxy(this.#actualFocusQuery, {\n get: (target, key) => {\n if (key in target) {\n const prop = target[key as keyof typeof target];\n if (isFunction(prop))\n return (...props: unknown[]) => {\n const result = (\n target[key as keyof typeof target] as unknown as (\n ...methodProps: unknown[]\n ) => void\n ).bind(target, ...props)();\n return result;\n };\n return prop;\n }\n return undefined;\n },\n });\n }\n\n #checkInstruction(focusCheck: IFocusCheck) {\n return focusCheck.currentInstruction === this.#currentInstruction;\n }\n\n async #doFocus(\n HTMLElement: HTMLElement | TFocusRetriever,\n focusCheck: IFocusCheck,\n isLastTry: boolean,\n configuration?: IOnFocusConfiguration,\n ) {\n if (\n screenLocker.isLocked('common') &&\n !configuration?.focusEvenWhenScreenLocked\n ) {\n return null;\n }\n const actualHTMLElement = isFunction(HTMLElement)\n ? HTMLElement(isLastTry)\n : HTMLElement;\n\n if (actualHTMLElement) {\n if ((actualHTMLElement as HTMLInputElement).disabled) return false;\n actualHTMLElement.focus();\n return new Promise<false | null | HTMLElement>((resolve) => {\n if (configuration?.dispatchCustomEvent !== false) {\n const customFocusEvent = new CustomEvent(customEvents.focus, {\n bubbles: true,\n });\n actualHTMLElement.dispatchEvent(customFocusEvent);\n }\n\n /**\n * Este setTimeout está colocado aquí para asegurarme de que se\n * propague correctamente el customEvent y los procesos de renderizado\n * asociados puedan ser ejecutados antes de proseguir con el proces de\n * foco.\n */\n setTimeout(() => {\n if (!this.#checkInstruction(focusCheck)) {\n resolve(false);\n return;\n }\n try {\n if (configuration?.scrollIntoViewOptions)\n actualHTMLElement?.scrollIntoView(\n configuration.scrollIntoViewOptions,\n );\n } catch (e) {\n console.error(e);\n }\n setTimeout(() => {\n if (!this.#checkInstruction(focusCheck)) {\n resolve(false);\n } else if (document.activeElement?.tagName === 'IFRAME') {\n resolve(\n (\n document.activeElement as HTMLIFrameElement\n ).contentDocument?.contains(actualHTMLElement)\n ? actualHTMLElement\n : null,\n );\n } else\n resolve(\n document.activeElement === actualHTMLElement\n ? actualHTMLElement\n : null,\n );\n }, 0);\n }, 0);\n });\n }\n return actualHTMLElement;\n }\n\n #resetInterval() {\n clearTimeout(this.#focusTimeout);\n this.#focusTimeout = -1;\n this.#isIntervalRunning = false;\n this.#currentInstruction++;\n }\n\n async #runFocusInterval(\n focusElement?: IFocusQueryElement,\n internalCall?: boolean,\n ): Promise<false | HTMLElement> {\n if (!internalCall && (this.#focusTimeout !== -1 || this.#isIntervalRunning))\n return false;\n const currentInstruction: IFocusCheck = {\n currentInstruction: this.#currentInstruction,\n };\n this.#isIntervalRunning = true;\n return new Promise<false | HTMLElement>((resolve) => {\n const resolvePromise = async () => {\n const element = focusElement ?? this.#focusQuery.shift();\n\n if (element) {\n const hasFocused = await this.#doFocus(\n element.element,\n currentInstruction,\n element !== this.#focusQuery[0],\n element.configuration,\n );\n if (!this.#checkInstruction(currentInstruction)) {\n resolve(false);\n return;\n }\n if (hasFocused !== null && hasFocused !== false) {\n this.#actualFocusQuery = [];\n resolve(hasFocused);\n this.#isIntervalRunning = false;\n return;\n }\n if (hasFocused === false) {\n this.#actualFocusQuery = this.#actualFocusQuery.filter(\n (current) => current !== element,\n );\n }\n }\n\n if (!this.#checkInstruction(currentInstruction)) {\n resolve(false);\n return;\n }\n\n if (this.#actualFocusQuery.length > 0) {\n this.#focusTimeout = setTimeout(() => {\n const runInterval = async () => {\n const result = await this.#runFocusInterval(undefined, true);\n resolve(result);\n this.#isIntervalRunning = true;\n };\n void runInterval();\n }, this.#focusDelay) as unknown as number;\n } else {\n const lastFocused = globalFocus.last(':not(body)');\n if (lastFocused) {\n const result = await this.#doFocus(\n lastFocused,\n currentInstruction,\n element !== this.#focusQuery[0],\n element?.configuration,\n );\n if (!this.#checkInstruction(currentInstruction)) {\n resolve(false);\n return;\n }\n if (result) resolve(result);\n else resolve(false);\n this.#isIntervalRunning = true;\n }\n resolve(false);\n this.#isIntervalRunning = true;\n }\n };\n void resolvePromise();\n });\n }\n\n /**\n * Da la instrucción de colocar el foco en el elemento provisto como\n * parámetro una vez que todas las notificaciones se hayan cerrado. En caso\n * de no existir notificaciones abiertas, hace foco en el elemento\n * directamente.\n */\n afterNotifications(\n element: HTMLElement | TFocusRetriever,\n configuration?: IOnFocusConfiguration,\n ) {\n if (!element) return;\n void this.on(element, configuration);\n }\n\n /**\n * Da la instrucción de colocar el foco en el elemento provisto como\n * parámetro luego de recargar la página.\n *\n * Los parámetros pasados serán ordenados en orden de importancia priorizando\n * en el siguiente orden:\n * - id\n * - name\n * - className\n * - selector\n */\n afterReload({\n className,\n id,\n name,\n selector,\n }: TRequireOnlyOne<{\n className: string;\n id: string;\n name: string;\n selector: string;\n }>) {\n persistentStorage.focusOnReload = [\n id ? `#${id}` : undefined,\n name ? `[name=\"${name}\"]` : undefined,\n className ? `.${className}` : undefined,\n selector,\n ]\n .filter((el) => el !== undefined)\n .join(',');\n }\n\n /**\n * Da la instrucción de colocar el foco el elemento pasado como parámetro.\n * Se puede pasar también una función que devuelva HTMLElement | false |\n * null.\n *\n * El segundo parámetro del método on es un objeto de tipo\n * ScrollIntoViewOptions, que permite modificar el comportamiento del scroll\n * a en el elemento.\n *\n * @see TFocusRetriever para más detalles sobre la función como parámetro.\n */\n async on(\n element: HTMLElement | TFocusRetriever,\n configuration?: IOnFocusConfiguration,\n ) {\n if (element) {\n const focusElement = {\n element,\n configuration,\n };\n for (let i = 0; i < this.#focusRetries; i++)\n this.#focusQuery.unshift(focusElement);\n\n this.#resetInterval();\n return this.#runFocusInterval(focusElement);\n }\n return false;\n }\n\n focusOnReload: string | null = null;\n\n restore() {\n void this.on(\n (globalFocus.last(':not(body), body#tinymce') as HTMLElement) ||\n (document.querySelector(focusSelector) as HTMLElement),\n );\n }\n\n init() {\n const modalsObserver = new MutationObserver((mutation) => {\n if (mutation[0].removedNodes.length === 0) return;\n this.afterNotifications(\n globalFocus.last(\n ':not(body):not(.notificationsView *), body#tinymce',\n ) as HTMLElement,\n );\n });\n const appModalsBox = (\n this.#props?.modalsContainerRetriever ??\n (() => this.#root.querySelector('#AppModals'))\n )();\n if (appModalsBox) modalsObserver.observe(appModalsBox, { childList: true });\n\n screenLocker.on('releaseForFirstTime', () => {\n if (persistentStorage.focusOnReload)\n this.focusOnReload = persistentStorage.focusOnReload as string;\n persistentStorage.focusOnReload = null;\n this.afterNotifications(() => {\n if (this.focusOnReload) {\n const initialFocusElement = document.querySelector(\n this.focusOnReload,\n );\n const scrollTop = noNaN(\n (window as unknown as Record<string, string>).CURRENT_TAB?.split(\n '~',\n )[1],\n );\n if (document.scrollingElement)\n document.scrollingElement.scrollTop = scrollTop;\n return initialFocusElement as HTMLElement | null;\n }\n return false;\n });\n });\n }\n})(document.getElementById('root') as HTMLElement);\n"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { TFocusRetriever } from './focusController.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* The GlobalFocus helper keeps a list of the last focused elements and allows
|
|
5
|
-
* to retrieve the last focused element which matches against a query selector.
|
|
6
|
-
*/
|
|
7
|
-
declare const globalFocus: {
|
|
8
|
-
focused: (HTMLElement | TFocusRetriever)[];
|
|
9
|
-
"__#2@#onFocusCallbacks": (() => unknown)[];
|
|
10
|
-
offFocus(cb: () => unknown): void;
|
|
11
|
-
onFocus(cb: () => unknown): () => void;
|
|
12
|
-
inDocument(el: HTMLElement | TFocusRetriever): boolean;
|
|
13
|
-
focus: HTMLElement | TFocusRetriever;
|
|
14
|
-
readonly list: (HTMLElement | TFocusRetriever)[];
|
|
15
|
-
/**
|
|
16
|
-
* @param querySelector A query selector against which the element should match
|
|
17
|
-
* @returns The last HTMLElement if no querySelector argument provided or else, the last which matches
|
|
18
|
-
* against that query selector.
|
|
19
|
-
* */
|
|
20
|
-
last(querySelector?: string, omit?: number): HTMLElement | TFocusRetriever | null;
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
export { globalFocus };
|
|
24
|
-
//# sourceMappingURL=globalFocus.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"globalFocus.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import isFunction from 'lodash-es/isFunction';
|
|
2
|
-
import { debugDispatcher } from '../debug/debugDispatcher.js';
|
|
3
|
-
|
|
4
|
-
var __accessCheck = (obj, member, msg) => {
|
|
5
|
-
if (!member.has(obj))
|
|
6
|
-
throw TypeError("Cannot " + msg);
|
|
7
|
-
};
|
|
8
|
-
var __privateGet = (obj, member, getter) => {
|
|
9
|
-
__accessCheck(obj, member, "read from private field");
|
|
10
|
-
return getter ? getter.call(obj) : member.get(obj);
|
|
11
|
-
};
|
|
12
|
-
var __privateAdd = (obj, member, value) => {
|
|
13
|
-
if (member.has(obj))
|
|
14
|
-
throw TypeError("Cannot add the same private member more than once");
|
|
15
|
-
member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
16
|
-
};
|
|
17
|
-
var __privateSet = (obj, member, value, setter) => {
|
|
18
|
-
__accessCheck(obj, member, "write to private field");
|
|
19
|
-
setter ? setter.call(obj, value) : member.set(obj, value);
|
|
20
|
-
return value;
|
|
21
|
-
};
|
|
22
|
-
var _onFocusCallbacks, _a;
|
|
23
|
-
const historySize = 50;
|
|
24
|
-
const globalFocus = new (_a = class {
|
|
25
|
-
constructor() {
|
|
26
|
-
this.focused = [];
|
|
27
|
-
__privateAdd(this, _onFocusCallbacks, []);
|
|
28
|
-
debugDispatcher.on(
|
|
29
|
-
"focusHistory",
|
|
30
|
-
() => {
|
|
31
|
-
console.info(this.focused);
|
|
32
|
-
},
|
|
33
|
-
"Muestra el historial de elementos que recibieron foco."
|
|
34
|
-
);
|
|
35
|
-
}
|
|
36
|
-
offFocus(cb) {
|
|
37
|
-
__privateSet(this, _onFocusCallbacks, __privateGet(this, _onFocusCallbacks).filter(
|
|
38
|
-
(current) => current !== cb
|
|
39
|
-
));
|
|
40
|
-
}
|
|
41
|
-
onFocus(cb) {
|
|
42
|
-
__privateGet(this, _onFocusCallbacks).push(cb);
|
|
43
|
-
return () => {
|
|
44
|
-
this.offFocus(cb);
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
inDocument(el) {
|
|
48
|
-
return el instanceof Function || el instanceof HTMLElement && el.offsetParent !== null;
|
|
49
|
-
}
|
|
50
|
-
set focus(element) {
|
|
51
|
-
this.focused = this.focused.filter((el) => {
|
|
52
|
-
const existsInDocument = this.inDocument(el) && element !== el;
|
|
53
|
-
return existsInDocument;
|
|
54
|
-
});
|
|
55
|
-
this.focused.unshift(element);
|
|
56
|
-
if (this.focused.length > historySize) {
|
|
57
|
-
this.focused = this.focused.splice(0, historySize);
|
|
58
|
-
}
|
|
59
|
-
__privateGet(this, _onFocusCallbacks).forEach((cb) => cb());
|
|
60
|
-
}
|
|
61
|
-
get list() {
|
|
62
|
-
return [...this.focused];
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* @param querySelector A query selector against which the element should match
|
|
66
|
-
* @returns The last HTMLElement if no querySelector argument provided or else, the last which matches
|
|
67
|
-
* against that query selector.
|
|
68
|
-
* */
|
|
69
|
-
last(querySelector, omit = 0) {
|
|
70
|
-
if (querySelector)
|
|
71
|
-
for (let i = omit; i <= this.focused.length; i++) {
|
|
72
|
-
const storedElement = this.focused[i];
|
|
73
|
-
const element = (
|
|
74
|
-
// eslint-disable-next-line no-nested-ternary
|
|
75
|
-
storedElement?.id !== void 0 ? storedElement : isFunction(storedElement) ? storedElement(false) : null
|
|
76
|
-
);
|
|
77
|
-
if (element && this.inDocument(element) && element.matches && element.matches(querySelector))
|
|
78
|
-
return element;
|
|
79
|
-
}
|
|
80
|
-
else
|
|
81
|
-
return this.focused[this.focused.length - 1];
|
|
82
|
-
return null;
|
|
83
|
-
}
|
|
84
|
-
}, _onFocusCallbacks = new WeakMap(), _a)();
|
|
85
|
-
|
|
86
|
-
export { globalFocus };
|
|
87
|
-
//# sourceMappingURL=globalFocus.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"globalFocus.js","sources":["../../src/focus/globalFocus.ts"],"sourcesContent":["import isFunction from 'lodash-es/isFunction';\nimport { TFocusRetriever } from './focusController';\nimport { debugDispatcher } from '../debug';\n\nconst historySize = 50;\n\n/**\n * The GlobalFocus helper keeps a list of the last focused elements and allows\n * to retrieve the last focused element which matches against a query selector.\n */\nexport const globalFocus = new (class {\n focused: (HTMLElement | TFocusRetriever)[] = [];\n\n #onFocusCallbacks: (() => unknown)[] = [];\n\n offFocus(cb: () => unknown) {\n this.#onFocusCallbacks = this.#onFocusCallbacks.filter(\n (current) => current !== cb,\n );\n }\n\n onFocus(cb: () => unknown) {\n this.#onFocusCallbacks.push(cb);\n\n return () => {\n this.offFocus(cb);\n };\n }\n\n constructor() {\n debugDispatcher.on(\n 'focusHistory',\n () => {\n console.info(this.focused);\n },\n 'Muestra el historial de elementos que recibieron foco.',\n );\n }\n\n inDocument(el: HTMLElement | TFocusRetriever) {\n return (\n el instanceof Function ||\n (el instanceof HTMLElement && el.offsetParent !== null)\n );\n }\n\n set focus(element: HTMLElement | TFocusRetriever) {\n this.focused = this.focused.filter((el) => {\n const existsInDocument = this.inDocument(el) && element !== el;\n\n return existsInDocument;\n });\n this.focused.unshift(element);\n if (this.focused.length > historySize) {\n this.focused = this.focused.splice(0, historySize);\n }\n\n this.#onFocusCallbacks.forEach((cb) => cb());\n }\n\n get list() {\n return [...this.focused];\n }\n\n /**\n * @param querySelector A query selector against which the element should match\n * @returns The last HTMLElement if no querySelector argument provided or else, the last which matches\n * against that query selector.\n * */\n last(querySelector?: string, omit = 0) {\n if (querySelector)\n for (let i = omit; i <= this.focused.length; i++) {\n const storedElement = this.focused[i];\n const element =\n // eslint-disable-next-line no-nested-ternary\n (storedElement as HTMLElement)?.id !== undefined\n ? (storedElement as HTMLElement)\n : isFunction(storedElement)\n ? storedElement(false)\n : null;\n\n if (\n element &&\n this.inDocument(element) &&\n element.matches &&\n element.matches(querySelector)\n )\n return element;\n }\n else return this.focused[this.focused.length - 1];\n return null;\n }\n})();\n"],"names":[],"mappings":"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"}
|