@startlibs/core 1.0.6 → 1.1.0
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/lib/SlotFill.mjs +232 -0
- package/lib/SlotFill.mjs.map +1 -0
- package/lib/StartlibsProvider.mjs +62 -0
- package/lib/StartlibsProvider.mjs.map +1 -0
- package/lib/hocs/WithLazyResource.mjs +74 -0
- package/lib/hocs/WithLazyResource.mjs.map +1 -0
- package/lib/hocs/WithRef.mjs +20 -0
- package/lib/hocs/WithRef.mjs.map +1 -0
- package/lib/hocs/consumes.mjs +22 -0
- package/lib/hocs/consumes.mjs.map +1 -0
- package/lib/hocs/withDialogError.mjs +22 -0
- package/lib/hocs/withDialogError.mjs.map +1 -0
- package/lib/hocs/withGroupEvent.mjs +45 -0
- package/lib/hocs/withGroupEvent.mjs.map +1 -0
- package/lib/hooks/WithConstant.mjs +13 -0
- package/lib/hooks/WithConstant.mjs.map +1 -0
- package/lib/hooks/WithEffect.mjs +12 -0
- package/lib/hooks/WithEffect.mjs.map +1 -0
- package/lib/hooks/useAsyncEffect.mjs +14 -0
- package/lib/hooks/useAsyncEffect.mjs.map +1 -0
- package/lib/hooks/useCallState.mjs +21 -0
- package/lib/hooks/useCallState.mjs.map +1 -0
- package/lib/hooks/useCallbackStable.mjs +17 -0
- package/lib/hooks/useCallbackStable.mjs.map +1 -0
- package/lib/hooks/useConstant.mjs +21 -0
- package/lib/hooks/useConstant.mjs.map +1 -0
- package/lib/hooks/useConsumerCatalog.mjs +25 -0
- package/lib/hooks/useConsumerCatalog.mjs.map +1 -0
- package/lib/hooks/useEnsureRef.mjs +9 -0
- package/lib/hooks/useEnsureRef.mjs.map +1 -0
- package/lib/hooks/useForceUpdate.mjs +28 -0
- package/lib/hooks/useForceUpdate.mjs.map +1 -0
- package/lib/hooks/useIsUnmounted.mjs +15 -0
- package/lib/hooks/useIsUnmounted.mjs.map +1 -0
- package/lib/hooks/usePopupToggle.mjs +33 -0
- package/lib/hooks/usePopupToggle.mjs.map +1 -0
- package/lib/hooks/usePrevious.mjs +28 -0
- package/lib/hooks/usePrevious.mjs.map +1 -0
- package/lib/hooks/useRecycleFocus.mjs +36 -0
- package/lib/hooks/useRecycleFocus.mjs.map +1 -0
- package/lib/hooks/useRefMemo.mjs +13 -0
- package/lib/hooks/useRefMemo.mjs.map +1 -0
- package/lib/hooks/useRefState.mjs +29 -0
- package/lib/hooks/useRefState.mjs.map +1 -0
- package/lib/hooks/useSignal.mjs +271 -0
- package/lib/hooks/useSignal.mjs.map +1 -0
- package/lib/hooks/useTitle.mjs +17 -0
- package/lib/hooks/useTitle.mjs.map +1 -0
- package/lib/hooks/useToggle.mjs +152 -0
- package/lib/hooks/useToggle.mjs.map +1 -0
- package/lib/hooks/useUpdateEffect.mjs +15 -0
- package/lib/hooks/useUpdateEffect.mjs.map +1 -0
- package/lib/hooks/useUpdateOnResize.mjs +18 -0
- package/lib/hooks/useUpdateOnResize.mjs.map +1 -0
- package/lib/hooks/useWithTransition.mjs +18 -0
- package/lib/hooks/useWithTransition.mjs.map +1 -0
- package/lib/hooks/willUseLayers.mjs +55 -0
- package/lib/hooks/willUseLayers.mjs.map +1 -0
- package/lib/hooks/willUseSharedCallback.mjs +70 -0
- package/lib/hooks/willUseSharedCallback.mjs.map +1 -0
- package/lib/hooks/willUseSharedState.mjs +41 -0
- package/lib/hooks/willUseSharedState.mjs.map +1 -0
- package/lib/hooks/willUseSpreadState.mjs +119 -0
- package/lib/hooks/willUseSpreadState.mjs.map +1 -0
- package/lib/index.cjs +1474 -0
- package/lib/index.cjs.map +1 -0
- package/lib/index.mjs +33 -0
- package/lib/index.mjs.map +1 -0
- package/package.json +43 -29
- package/src/SlotFill.jsx +166 -0
- package/src/StartlibsProvider.jsx +62 -0
- package/src/hocs/WithLazyResource.jsx +32 -0
- package/src/hocs/WithRef.js +20 -0
- package/src/hocs/Wrapper.jsx +40 -0
- package/src/hocs/consumes.jsx +16 -0
- package/src/hocs/withDialogError.jsx +16 -0
- package/src/hocs/withGroupEvent.jsx +43 -0
- package/src/hooks/WithConstant.jsx +7 -0
- package/src/hooks/WithEffect.jsx +6 -0
- package/src/hooks/useAsyncEffect.jsx +11 -0
- package/src/hooks/useCallState.js +15 -0
- package/src/hooks/useCallbackStable.jsx +12 -0
- package/src/hooks/useConstant.js +20 -0
- package/src/hooks/useConsumerCatalog.jsx +21 -0
- package/src/hooks/useEnsureRef.js +6 -0
- package/src/hooks/useForceUpdate.jsx +16 -0
- package/src/hooks/useIsUnmounted.jsx +12 -0
- package/src/hooks/usePopupToggle.js +30 -0
- package/src/hooks/usePrevious.jsx +27 -0
- package/src/hooks/useRecycleFocus.jsx +26 -0
- package/src/hooks/useRefMemo.jsx +10 -0
- package/src/hooks/useRefState.js +26 -0
- package/src/hooks/useSignal.jsx +193 -0
- package/src/hooks/useTitle.jsx +12 -0
- package/src/hooks/useToggle.js +126 -0
- package/src/hooks/useUpdateEffect.js +14 -0
- package/src/hooks/useUpdateOnResize.jsx +14 -0
- package/src/hooks/useWithTransition.jsx +14 -0
- package/src/hooks/willUseLayers.jsx +42 -0
- package/src/hooks/willUseSharedCallback.jsx +60 -0
- package/src/hooks/willUseSharedState.jsx +34 -0
- package/src/hooks/willUseSpreadState.jsx +103 -0
- package/src/index.js +32 -0
- package/.babelrc +0 -27
- package/lib/index.js +0 -1907
- package/rollup.config.js +0 -53
- package/yarn-error.log +0 -3374
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
2
|
+
import { useState, useMemo } from 'react';
|
|
3
|
+
import '@startlibs/utils';
|
|
4
|
+
|
|
5
|
+
const useCallState = (defaultValue, setCallback) => {
|
|
6
|
+
const _useState = useState(defaultValue),
|
|
7
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
8
|
+
val = _useState2[0],
|
|
9
|
+
setValue = _useState2[1];
|
|
10
|
+
return useMemo(() => {
|
|
11
|
+
const get = () => val;
|
|
12
|
+
return {
|
|
13
|
+
get,
|
|
14
|
+
val,
|
|
15
|
+
set: setValue
|
|
16
|
+
};
|
|
17
|
+
}, [val]);
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export { useCallState };
|
|
21
|
+
//# sourceMappingURL=useCallState.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCallState.mjs","sources":["../../src/hooks/useCallState.js"],"sourcesContent":["import React, {useMemo, useState} from 'react'\nimport {_s} from '@startlibs/utils'\n\nconst isPath = (path) => typeof path === 'string' || typeof path === 'number' || Array.isArray(path)\n\nconst getter = (value) => path => isPath(path) ? _s.get(path, value) : value\n\nexport const useCallState = (defaultValue, setCallback) => {\n const [val, setValue] = useState(defaultValue)\n\n return useMemo(() => {\n const get = () => val\n return {get, val, set: setValue}\n }, [val])\n}\n"],"names":["useCallState","defaultValue","setCallback","_useState","useState","_useState2","_slicedToArray","val","setValue","useMemo","get","set"],"mappings":";;;;MAOaA,YAAY,GAAGA,CAACC,YAAY,EAAEC,WAAW,KAAK;AACzD,EAAA,MAAAC,SAAA,GAAwBC,QAAQ,CAACH,YAAY,CAAC;IAAAI,UAAA,GAAAC,cAAA,CAAAH,SAAA,EAAA,CAAA,CAAA;AAAvCI,IAAAA,GAAG,GAAAF,UAAA,CAAA,CAAA,CAAA;AAAEG,IAAAA,QAAQ,GAAAH,UAAA,CAAA,CAAA,CAAA,CAAA;EAEpB,OAAOI,OAAO,CAAC,MAAM;AACnB,IAAA,MAAMC,GAAG,GAAGA,MAAMH,GAAG,CAAA;IACrB,OAAO;MAACG,GAAG;MAAEH,GAAG;AAAEI,MAAAA,GAAG,EAAEH,QAAAA;KAAS,CAAA;AAClC,GAAC,EAAE,CAACD,GAAG,CAAC,CAAC,CAAA;AACX;;;;"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React, { useInsertionEffect } from 'react';
|
|
2
|
+
|
|
3
|
+
const useCallbackStable = fn => {
|
|
4
|
+
const ref = React.useRef([fn, function () {
|
|
5
|
+
return ref[0](...arguments);
|
|
6
|
+
}]).current;
|
|
7
|
+
// Per Dan Abramov: useInsertionEffect executes marginally closer to the
|
|
8
|
+
// correct timing for ref synchronization than useLayoutEffect on React 18.
|
|
9
|
+
// See: https://github.com/facebook/react/pull/25881#issuecomment-1356244360
|
|
10
|
+
useInsertionEffect(() => {
|
|
11
|
+
ref[0] = fn;
|
|
12
|
+
});
|
|
13
|
+
return ref[1];
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export { useCallbackStable };
|
|
17
|
+
//# sourceMappingURL=useCallbackStable.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCallbackStable.mjs","sources":["../../src/hooks/useCallbackStable.jsx"],"sourcesContent":["import React, {useInsertionEffect} from 'react'\n\nexport const useCallbackStable = (fn) => {\n const ref = React.useRef([fn, (...args) => ref[0](...args)]).current;\n // Per Dan Abramov: useInsertionEffect executes marginally closer to the\n // correct timing for ref synchronization than useLayoutEffect on React 18.\n // See: https://github.com/facebook/react/pull/25881#issuecomment-1356244360\n useInsertionEffect(() => {\n ref[0] = fn;\n });\n return ref[1];\n}"],"names":["useCallbackStable","fn","ref","React","useRef","arguments","current","useInsertionEffect"],"mappings":";;AAEaA,MAAAA,iBAAiB,GAAIC,EAAE,IAAK;EACvC,MAAMC,GAAG,GAAGC,KAAK,CAACC,MAAM,CAAC,CAACH,EAAE,EAAE,YAAA;AAAA,IAAA,OAAaC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAAG,SAAO,CAAC,CAAA;GAAC,CAAA,CAAC,CAACC,OAAO,CAAA;AACpE;AACA;AACA;AACAC,EAAAA,kBAAkB,CAAC,MAAM;AACvBL,IAAAA,GAAG,CAAC,CAAC,CAAC,GAAGD,EAAE,CAAA;AACb,GAAC,CAAC,CAAA;EACF,OAAOC,GAAG,CAAC,CAAC,CAAC,CAAA;AACf;;;;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { useRef } from 'react';
|
|
2
|
+
import { callIfFunction } from '@startlibs/utils';
|
|
3
|
+
|
|
4
|
+
const not_defined = {};
|
|
5
|
+
const useConstant = value => {
|
|
6
|
+
const ref = useRef(not_defined);
|
|
7
|
+
if (ref.current === not_defined) {
|
|
8
|
+
ref.current = value;
|
|
9
|
+
}
|
|
10
|
+
return ref.current;
|
|
11
|
+
};
|
|
12
|
+
const useLazyConstant = value => {
|
|
13
|
+
const ref = useRef(not_defined);
|
|
14
|
+
if (ref.current === not_defined) {
|
|
15
|
+
ref.current = callIfFunction(value);
|
|
16
|
+
}
|
|
17
|
+
return ref.current;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export { useConstant, useLazyConstant };
|
|
21
|
+
//# sourceMappingURL=useConstant.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useConstant.mjs","sources":["../../src/hooks/useConstant.js"],"sourcesContent":["import React, {useRef} from 'react'\nimport {callIfFunction} from '@startlibs/utils'\n\nconst not_defined = {}\n\nexport const useConstant = (value) => {\n const ref = useRef(not_defined)\n if (ref.current === not_defined) {\n ref.current = value\n }\n return ref.current\n}\n\nexport const useLazyConstant= (value) => {\n const ref = useRef(not_defined)\n if (ref.current === not_defined) {\n ref.current = callIfFunction(value)\n }\n return ref.current\n}\n"],"names":["not_defined","useConstant","value","ref","useRef","current","useLazyConstant","callIfFunction"],"mappings":";;;AAGA,MAAMA,WAAW,GAAG,EAAE,CAAA;AAETC,MAAAA,WAAW,GAAIC,KAAK,IAAK;AACpC,EAAA,MAAMC,GAAG,GAAGC,MAAM,CAACJ,WAAW,CAAC,CAAA;AAC/B,EAAA,IAAIG,GAAG,CAACE,OAAO,KAAKL,WAAW,EAAE;IAC/BG,GAAG,CAACE,OAAO,GAAGH,KAAK,CAAA;AACrB,GAAA;EACA,OAAOC,GAAG,CAACE,OAAO,CAAA;AACpB,EAAC;AAEYC,MAAAA,eAAe,GAAGJ,KAAK,IAAK;AACvC,EAAA,MAAMC,GAAG,GAAGC,MAAM,CAACJ,WAAW,CAAC,CAAA;AAC/B,EAAA,IAAIG,GAAG,CAACE,OAAO,KAAKL,WAAW,EAAE;AAC/BG,IAAAA,GAAG,CAACE,OAAO,GAAGE,cAAc,CAACL,KAAK,CAAC,CAAA;AACrC,GAAA;EACA,OAAOC,GAAG,CAACE,OAAO,CAAA;AACpB;;;;"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { useMemo, useEffect } from 'react';
|
|
2
|
+
import { callMany } from '@startlibs/utils';
|
|
3
|
+
import { useRefState } from './useRefState.mjs';
|
|
4
|
+
|
|
5
|
+
const useConsumerCatalog = (mountCallback, unmountCallback) => {
|
|
6
|
+
const elements = useRefState([]);
|
|
7
|
+
const register = callMany(element => elements.set(elements => elements.concat([element])), mountCallback);
|
|
8
|
+
const unregister = callMany(element => elements.set(elements => elements.filter(_ => _ !== element)), unmountCallback);
|
|
9
|
+
const manager = useMemo(() => ({
|
|
10
|
+
register,
|
|
11
|
+
unregister
|
|
12
|
+
}), []);
|
|
13
|
+
return [elements.get, manager];
|
|
14
|
+
};
|
|
15
|
+
const useCatalogManager = (_ref, ref) => {
|
|
16
|
+
let register = _ref.register,
|
|
17
|
+
unregister = _ref.unregister;
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
register(ref);
|
|
20
|
+
return () => unregister(ref);
|
|
21
|
+
}, [ref]);
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export { useCatalogManager, useConsumerCatalog };
|
|
25
|
+
//# sourceMappingURL=useConsumerCatalog.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useConsumerCatalog.mjs","sources":["../../src/hooks/useConsumerCatalog.jsx"],"sourcesContent":["import React, {useEffect, useMemo} from 'react'\nimport {callMany} from '@startlibs/utils'\nimport {useRefState} from './useRefState'\n\nexport const useConsumerCatalog = (mountCallback,unmountCallback) => {\n const elements = useRefState([])\n\n const register = callMany((element) => elements.set((elements) => elements.concat([element])), mountCallback)\n const unregister = callMany((element) => elements.set((elements) => elements.filter(_ => _ !== element)), unmountCallback)\n\n const manager = useMemo(()=> ({register,unregister}), [])\n\n return [elements.get,manager]\n}\n\nexport const useCatalogManager = ({register,unregister},ref) => {\n useEffect(() => {\n register(ref)\n return () => unregister(ref)\n },[ref])\n}"],"names":["useConsumerCatalog","mountCallback","unmountCallback","elements","useRefState","register","callMany","element","set","concat","unregister","filter","_","manager","useMemo","get","useCatalogManager","_ref","ref","useEffect"],"mappings":";;;;MAIaA,kBAAkB,GAAGA,CAACC,aAAa,EAACC,eAAe,KAAK;AACnE,EAAA,MAAMC,QAAQ,GAAGC,WAAW,CAAC,EAAE,CAAC,CAAA;EAEhC,MAAMC,QAAQ,GAAGC,QAAQ,CAAEC,OAAO,IAAKJ,QAAQ,CAACK,GAAG,CAAEL,QAAQ,IAAKA,QAAQ,CAACM,MAAM,CAAC,CAACF,OAAO,CAAC,CAAC,CAAC,EAAEN,aAAa,CAAC,CAAA;EAC7G,MAAMS,UAAU,GAAGJ,QAAQ,CAAEC,OAAO,IAAMJ,QAAQ,CAACK,GAAG,CAAEL,QAAQ,IAAKA,QAAQ,CAACQ,MAAM,CAACC,CAAC,IAAIA,CAAC,KAAKL,OAAO,CAAC,CAAC,EAAEL,eAAe,CAAC,CAAA;AAE3H,EAAA,MAAMW,OAAO,GAAGC,OAAO,CAAC,OAAM;IAACT,QAAQ;AAACK,IAAAA,UAAAA;GAAW,CAAC,EAAE,EAAE,CAAC,CAAA;AAEzD,EAAA,OAAO,CAACP,QAAQ,CAACY,GAAG,EAACF,OAAO,CAAC,CAAA;AAC/B,EAAC;MAEYG,iBAAiB,GAAGA,CAAAC,IAAA,EAAuBC,GAAG,KAAK;AAAA,EAAA,IAA7Bb,QAAQ,GAAAY,IAAA,CAARZ,QAAQ;IAACK,UAAU,GAAAO,IAAA,CAAVP,UAAU,CAAA;AACpDS,EAAAA,SAAS,CAAC,MAAM;IACdd,QAAQ,CAACa,GAAG,CAAC,CAAA;AACb,IAAA,OAAO,MAAMR,UAAU,CAACQ,GAAG,CAAC,CAAA;AAC9B,GAAC,EAAC,CAACA,GAAG,CAAC,CAAC,CAAA;AACV;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useEnsureRef.mjs","sources":["../../src/hooks/useEnsureRef.js"],"sourcesContent":["import React, {useRef} from 'react'\n\nexport const useEnsureRef = (forwardedRef) => {\n const ref = useRef()\n return forwardedRef || ref\n}\n"],"names":["useEnsureRef","forwardedRef","ref","useRef"],"mappings":";;AAEaA,MAAAA,YAAY,GAAIC,YAAY,IAAK;AAC5C,EAAA,MAAMC,GAAG,GAAGC,MAAM,EAAE,CAAA;EACpB,OAAOF,YAAY,IAAIC,GAAG,CAAA;AAC5B;;;;"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { willUseSharedState } from './willUseSharedState.mjs';
|
|
4
|
+
|
|
5
|
+
const useForceUpdate = () => {
|
|
6
|
+
const _useState = useState(0),
|
|
7
|
+
_useState2 = _slicedToArray(_useState, 2);
|
|
8
|
+
_useState2[0];
|
|
9
|
+
const setValue = _useState2[1]; // integer state
|
|
10
|
+
return () => setValue(value => value + 1); // update the state to force render
|
|
11
|
+
};
|
|
12
|
+
const willUseForceUpdate = () => {
|
|
13
|
+
const _willUseSharedState = willUseSharedState(),
|
|
14
|
+
_willUseSharedState2 = _slicedToArray(_willUseSharedState, 3),
|
|
15
|
+
useValue = _willUseSharedState2[0],
|
|
16
|
+
set = _willUseSharedState2[2];
|
|
17
|
+
const useForceUpdate = () => {
|
|
18
|
+
const _useValue = useValue(0),
|
|
19
|
+
_useValue2 = _slicedToArray(_useValue, 2);
|
|
20
|
+
_useValue2[0];
|
|
21
|
+
const setV = _useValue2[1];
|
|
22
|
+
return () => setV(value => value + 1);
|
|
23
|
+
};
|
|
24
|
+
return [useForceUpdate, () => set(value => value + 1)];
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export { useForceUpdate, willUseForceUpdate };
|
|
28
|
+
//# sourceMappingURL=useForceUpdate.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useForceUpdate.mjs","sources":["../../src/hooks/useForceUpdate.jsx"],"sourcesContent":["import {useState} from 'react'\nimport {willUseSharedState} from './willUseSharedState'\n\nexport const useForceUpdate = () => {\n const [value, setValue] = useState(0); // integer state\n return () => setValue(value => value + 1); // update the state to force render\n}\n\nexport const willUseForceUpdate = () => {\n const [useValue,,set] = willUseSharedState()\n const useForceUpdate = () => {\n const [v,setV] = useValue(0)\n return () => setV(value => value + 1)\n }\n return [useForceUpdate,() => set(value => value + 1)]\n}"],"names":["useForceUpdate","_useState","useState","_useState2","_slicedToArray","value","setValue","willUseForceUpdate","_willUseSharedState","willUseSharedState","_willUseSharedState2","useValue","set","_useValue","_useValue2","v","setV"],"mappings":";;;;AAGaA,MAAAA,cAAc,GAAGA,MAAM;AAClC,EAAA,MAAAC,SAAA,GAA0BC,QAAQ,CAAC,CAAC,CAAC,CAAA;IAAAC,UAAA,GAAAC,cAAA,CAAAH,SAAA,EAAA,CAAA,CAAA,CAAA;AAA9BI,IAAKF,UAAA,CAAA,CAAA,CAAA,CAAA;UAAEG,QAAQ,GAAAH,UAAA,CAAA,CAAA,EAAgB;EACtC,OAAO,MAAMG,QAAQ,CAACD,KAAK,IAAIA,KAAK,GAAG,CAAC,CAAC,CAAC;AAC5C,EAAC;AAEYE,MAAAA,kBAAkB,GAAGA,MAAM;AACtC,EAAA,MAAAC,mBAAA,GAAwBC,kBAAkB,EAAE;IAAAC,oBAAA,GAAAN,cAAA,CAAAI,mBAAA,EAAA,CAAA,CAAA;AAArCG,IAAAA,QAAQ,GAAAD,oBAAA,CAAA,CAAA,CAAA;AAAEE,IAAAA,GAAG,GAAAF,oBAAA,CAAA,CAAA,CAAA,CAAA;EACpB,MAAMV,cAAc,GAAGA,MAAM;AAC3B,IAAA,MAAAa,SAAA,GAAiBF,QAAQ,CAAC,CAAC,CAAC,CAAA;MAAAG,UAAA,GAAAV,cAAA,CAAAS,SAAA,EAAA,CAAA,CAAA,CAAA;AAArBE,MAACD,UAAA,CAAA,CAAA,CAAA,CAAA;AAACE,YAAAA,IAAI,GAAAF,UAAA,CAAA,CAAA,EAAA;IACb,OAAO,MAAME,IAAI,CAACX,KAAK,IAAIA,KAAK,GAAG,CAAC,CAAC,CAAA;GACtC,CAAA;AACD,EAAA,OAAO,CAACL,cAAc,EAAC,MAAMY,GAAG,CAACP,KAAK,IAAIA,KAAK,GAAG,CAAC,CAAC,CAAC,CAAA;AACvD;;;;"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { useRef, useEffect } from 'react';
|
|
2
|
+
|
|
3
|
+
const useIsUnmounted = () => {
|
|
4
|
+
const unmounted = useRef(false);
|
|
5
|
+
useEffect(() => {
|
|
6
|
+
unmounted.current = false;
|
|
7
|
+
return () => {
|
|
8
|
+
unmounted.current = true;
|
|
9
|
+
};
|
|
10
|
+
}, []);
|
|
11
|
+
return () => unmounted.current;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export { useIsUnmounted };
|
|
15
|
+
//# sourceMappingURL=useIsUnmounted.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useIsUnmounted.mjs","sources":["../../src/hooks/useIsUnmounted.jsx"],"sourcesContent":["import {useEffect, useRef} from 'react'\n\nexport const useIsUnmounted = () => {\n const unmounted = useRef(false)\n\n useEffect(() => {\n unmounted.current = false\n return () => { unmounted.current = true }\n }, [])\n\n return () => unmounted.current\n}"],"names":["useIsUnmounted","unmounted","useRef","useEffect","current"],"mappings":";;AAEaA,MAAAA,cAAc,GAAGA,MAAM;AAClC,EAAA,MAAMC,SAAS,GAAGC,MAAM,CAAC,KAAK,CAAC,CAAA;AAE/BC,EAAAA,SAAS,CAAC,MAAM;IACdF,SAAS,CAACG,OAAO,GAAG,KAAK,CAAA;AACzB,IAAA,OAAO,MAAM;MAAEH,SAAS,CAACG,OAAO,GAAG,IAAI,CAAA;KAAE,CAAA;GAC1C,EAAE,EAAE,CAAC,CAAA;EAEN,OAAO,MAAMH,SAAS,CAACG,OAAO,CAAA;AAChC;;;;"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import 'react';
|
|
2
|
+
import { useToggle } from './useToggle.mjs';
|
|
3
|
+
import { callIfFunction } from '@startlibs/utils';
|
|
4
|
+
|
|
5
|
+
let prevOpenToggleClose = () => {};
|
|
6
|
+
let sameTick = false;
|
|
7
|
+
const clearPopups = () => {
|
|
8
|
+
if (!sameTick) {
|
|
9
|
+
prevOpenToggleClose();
|
|
10
|
+
prevOpenToggleClose = () => {};
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
const usePopupToggle = (startWith, callback) => {
|
|
14
|
+
const toggle = useToggle(startWith, (v, prev) => {
|
|
15
|
+
const result = callIfFunction(callback, v, prev);
|
|
16
|
+
if (result === false) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
if (v !== false && prevOpenToggleClose !== toggle.close) {
|
|
20
|
+
prevOpenToggleClose();
|
|
21
|
+
prevOpenToggleClose = toggle.close;
|
|
22
|
+
sameTick = true;
|
|
23
|
+
window.setTimeout(() => sameTick = false, 1);
|
|
24
|
+
}
|
|
25
|
+
if (v === false) {
|
|
26
|
+
prevOpenToggleClose = () => {};
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
return toggle;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export { clearPopups, usePopupToggle };
|
|
33
|
+
//# sourceMappingURL=usePopupToggle.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePopupToggle.mjs","sources":["../../src/hooks/usePopupToggle.js"],"sourcesContent":["import React from 'react'\nimport {useToggle} from './useToggle'\nimport {callIfFunction} from '@startlibs/utils'\n\nlet prevOpenToggleClose = () => {}\nlet sameTick = false\n\nexport const clearPopups = () => {\n if (!sameTick) {\n prevOpenToggleClose()\n prevOpenToggleClose = () => {}\n }\n}\n\nexport const usePopupToggle = (startWith,callback) => {\n const toggle = useToggle(startWith,(v,prev) => {\n const result = callIfFunction(callback,v,prev)\n if (result === false) { return false}\n if (v !== false && prevOpenToggleClose !== toggle.close) {\n prevOpenToggleClose()\n prevOpenToggleClose = toggle.close\n sameTick = true\n window.setTimeout(()=>sameTick = false, 1)\n }\n if (v === false) {\n prevOpenToggleClose = () => {}\n }\n })\n return toggle\n}"],"names":["prevOpenToggleClose","sameTick","clearPopups","usePopupToggle","startWith","callback","toggle","useToggle","v","prev","result","callIfFunction","close","window","setTimeout"],"mappings":";;;;AAIA,IAAIA,mBAAmB,GAAGA,MAAM,EAAE,CAAA;AAClC,IAAIC,QAAQ,GAAG,KAAK,CAAA;AAEPC,MAAAA,WAAW,GAAGA,MAAM;EAC/B,IAAI,CAACD,QAAQ,EAAE;AACbD,IAAAA,mBAAmB,EAAE,CAAA;AACrBA,IAAAA,mBAAmB,GAAGA,MAAM,EAAE,CAAA;AAChC,GAAA;AACF,EAAC;MAEYG,cAAc,GAAGA,CAACC,SAAS,EAACC,QAAQ,KAAK;EACpD,MAAMC,MAAM,GAAGC,SAAS,CAACH,SAAS,EAAC,CAACI,CAAC,EAACC,IAAI,KAAK;IAC7C,MAAMC,MAAM,GAAGC,cAAc,CAACN,QAAQ,EAACG,CAAC,EAACC,IAAI,CAAC,CAAA;IAC9C,IAAIC,MAAM,KAAK,KAAK,EAAE;AAAE,MAAA,OAAO,KAAK,CAAA;AAAA,KAAA;IACpC,IAAIF,CAAC,KAAK,KAAK,IAAIR,mBAAmB,KAAKM,MAAM,CAACM,KAAK,EAAE;AACvDZ,MAAAA,mBAAmB,EAAE,CAAA;MACrBA,mBAAmB,GAAGM,MAAM,CAACM,KAAK,CAAA;AAClCX,MAAAA,QAAQ,GAAG,IAAI,CAAA;MACfY,MAAM,CAACC,UAAU,CAAC,MAAIb,QAAQ,GAAG,KAAK,EAAE,CAAC,CAAC,CAAA;AAC5C,KAAA;IACA,IAAIO,CAAC,KAAK,KAAK,EAAE;AACfR,MAAAA,mBAAmB,GAAGA,MAAM,EAAE,CAAA;AAChC,KAAA;AACF,GAAC,CAAC,CAAA;AACF,EAAA,OAAOM,MAAM,CAAA;AACf;;;;"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { useRef, useEffect } from 'react';
|
|
2
|
+
|
|
3
|
+
function usePrevious(value, initialValue) {
|
|
4
|
+
const ref = useRef(initialValue);
|
|
5
|
+
useEffect(() => {
|
|
6
|
+
ref.current = value;
|
|
7
|
+
});
|
|
8
|
+
return ref.current;
|
|
9
|
+
}
|
|
10
|
+
function usePreviousUnique(value, initialValue) {
|
|
11
|
+
const ref = useRef(initialValue);
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
if (value !== ref.current) {
|
|
14
|
+
ref.current = value;
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
return ref.current;
|
|
18
|
+
}
|
|
19
|
+
function usePreviousForEffect(value, initialValue) {
|
|
20
|
+
const ref = useRef(initialValue);
|
|
21
|
+
useEffect(() => () => {
|
|
22
|
+
ref.current = value;
|
|
23
|
+
}, [value]);
|
|
24
|
+
return ref.current;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export { usePrevious, usePreviousForEffect, usePreviousUnique };
|
|
28
|
+
//# sourceMappingURL=usePrevious.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePrevious.mjs","sources":["../../src/hooks/usePrevious.jsx"],"sourcesContent":["import {useEffect, useRef} from 'react'\n\nexport function usePrevious(value,initialValue) {\n const ref = useRef(initialValue);\n useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n}\n\nexport function usePreviousUnique(value,initialValue) {\n const ref = useRef(initialValue);\n useEffect(() => {\n if (value !== ref.current) {\n ref.current = value;\n }\n });\n return ref.current;\n}\n\nexport function usePreviousForEffect(value,initialValue) {\n const ref = useRef(initialValue);\n useEffect(() => () => {\n ref.current = value;\n },[value]);\n return ref.current;\n}"],"names":["usePrevious","value","initialValue","ref","useRef","useEffect","current","usePreviousUnique","usePreviousForEffect"],"mappings":";;AAEO,SAASA,WAAWA,CAACC,KAAK,EAACC,YAAY,EAAE;AAC9C,EAAA,MAAMC,GAAG,GAAGC,MAAM,CAACF,YAAY,CAAC,CAAA;AAChCG,EAAAA,SAAS,CAAC,MAAM;IACdF,GAAG,CAACG,OAAO,GAAGL,KAAK,CAAA;AACrB,GAAC,CAAC,CAAA;EACF,OAAOE,GAAG,CAACG,OAAO,CAAA;AACpB,CAAA;AAEO,SAASC,iBAAiBA,CAACN,KAAK,EAACC,YAAY,EAAE;AACpD,EAAA,MAAMC,GAAG,GAAGC,MAAM,CAACF,YAAY,CAAC,CAAA;AAChCG,EAAAA,SAAS,CAAC,MAAM;AACd,IAAA,IAAIJ,KAAK,KAAKE,GAAG,CAACG,OAAO,EAAE;MACzBH,GAAG,CAACG,OAAO,GAAGL,KAAK,CAAA;AACrB,KAAA;AACF,GAAC,CAAC,CAAA;EACF,OAAOE,GAAG,CAACG,OAAO,CAAA;AACpB,CAAA;AAEO,SAASE,oBAAoBA,CAACP,KAAK,EAACC,YAAY,EAAE;AACvD,EAAA,MAAMC,GAAG,GAAGC,MAAM,CAACF,YAAY,CAAC,CAAA;EAChCG,SAAS,CAAC,MAAM,MAAM;IACpBF,GAAG,CAACG,OAAO,GAAGL,KAAK,CAAA;AACrB,GAAC,EAAC,CAACA,KAAK,CAAC,CAAC,CAAA;EACV,OAAOE,GAAG,CAACG,OAAO,CAAA;AACpB;;;;"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import styled from 'styled-components';
|
|
3
|
+
|
|
4
|
+
const TabFocus = /*#__PURE__*/styled.div.withConfig({
|
|
5
|
+
displayName: "useRecycleFocus__TabFocus",
|
|
6
|
+
componentId: "kxnccs-0"
|
|
7
|
+
})(["width:0;height:0;position:absolute;"]);
|
|
8
|
+
const useRecycleFocus = function (ref) {
|
|
9
|
+
let enabled = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
10
|
+
let lastIndex = arguments.length > 2 ? arguments[2] : undefined;
|
|
11
|
+
const recycle = i => e => {
|
|
12
|
+
if (!enabled || !ref.current) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const nextTab = ref.current.querySelectorAll('[tabindex]');
|
|
16
|
+
if (nextTab) {
|
|
17
|
+
if (i < 0) {
|
|
18
|
+
console.log(nextTab[1]);
|
|
19
|
+
nextTab[1].focus();
|
|
20
|
+
} else {
|
|
21
|
+
console.log(nextTab[nextTab.length - 2]);
|
|
22
|
+
nextTab[nextTab.length - 2].focus();
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
return [/*#__PURE__*/React.createElement(TabFocus, {
|
|
27
|
+
tabIndex: 1,
|
|
28
|
+
onFocus: recycle(0)
|
|
29
|
+
}), /*#__PURE__*/React.createElement(TabFocus, {
|
|
30
|
+
tabIndex: lastIndex || 1,
|
|
31
|
+
onFocus: recycle(-1)
|
|
32
|
+
})];
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export { useRecycleFocus };
|
|
36
|
+
//# sourceMappingURL=useRecycleFocus.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRecycleFocus.mjs","sources":["../../src/hooks/useRecycleFocus.jsx"],"sourcesContent":["import React from 'react'\nimport styled from 'styled-components'\n\nstyled\n\nconst TabFocus = styled.div`width:0;height:0;position:absolute;`\nexport const useRecycleFocus = (ref, enabled = true,lastIndex) => {\n\n const recycle = i => (e) => {\n if (!enabled || !ref.current) {\n return\n }\n const nextTab = ref.current.querySelectorAll('[tabindex]')\n if (nextTab) {\n if (i<0) {\n console.log(nextTab[1])\n nextTab[1].focus()\n } else {\n console.log(nextTab[nextTab.length - 2])\n nextTab[nextTab.length - 2].focus()\n }\n }\n }\n\n return [<TabFocus tabIndex={1} onFocus={recycle(0)}></TabFocus>,<TabFocus tabIndex={lastIndex || 1} onFocus={recycle(-1)}></TabFocus>]\n}"],"names":["TabFocus","styled","div","withConfig","displayName","componentId","useRecycleFocus","ref","enabled","arguments","length","undefined","lastIndex","recycle","i","e","current","nextTab","querySelectorAll","console","log","focus","React","createElement","tabIndex","onFocus"],"mappings":";;;AAKA,MAAMA,QAAQ,gBAAGC,MAAM,CAACC,GAAG,CAAAC,UAAA,CAAA;EAAAC,WAAA,EAAA,2BAAA;EAAAC,WAAA,EAAA,UAAA;AAAA,CAAqC,CAAA,CAAA,CAAA,qCAAA,CAAA,CAAA,CAAA;MACnDC,eAAe,GAAG,UAACC,GAAG,EAA+B;AAAA,EAAA,IAA7BC,OAAO,GAAAC,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,IAAI,CAAA;EAAA,IAACG,SAAS,GAAAH,SAAA,CAAAC,MAAA,GAAAD,CAAAA,GAAAA,SAAA,MAAAE,SAAA,CAAA;AAE3D,EAAA,MAAME,OAAO,GAAGC,CAAC,IAAKC,CAAC,IAAK;AAC1B,IAAA,IAAI,CAACP,OAAO,IAAI,CAACD,GAAG,CAACS,OAAO,EAAE;AAC5B,MAAA,OAAA;AACF,KAAA;IACA,MAAMC,OAAO,GAAGV,GAAG,CAACS,OAAO,CAACE,gBAAgB,CAAC,YAAY,CAAC,CAAA;AAC1D,IAAA,IAAID,OAAO,EAAE;MACX,IAAIH,CAAC,GAAC,CAAC,EAAE;AACPK,QAAAA,OAAO,CAACC,GAAG,CAACH,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;AACvBA,QAAAA,OAAO,CAAC,CAAC,CAAC,CAACI,KAAK,EAAE,CAAA;AACpB,OAAC,MAAM;QACLF,OAAO,CAACC,GAAG,CAACH,OAAO,CAACA,OAAO,CAACP,MAAM,GAAG,CAAC,CAAC,CAAC,CAAA;QACxCO,OAAO,CAACA,OAAO,CAACP,MAAM,GAAG,CAAC,CAAC,CAACW,KAAK,EAAE,CAAA;AACrC,OAAA;AACF,KAAA;GACD,CAAA;AAED,EAAA,OAAO,cAACC,KAAA,CAAAC,aAAA,CAACvB,QAAQ,EAAA;AAACwB,IAAAA,QAAQ,EAAE,CAAE;IAACC,OAAO,EAAEZ,OAAO,CAAC,CAAC,CAAA;AAAE,GAAW,CAAC,eAACS,KAAA,CAAAC,aAAA,CAACvB,QAAQ,EAAA;IAACwB,QAAQ,EAAEZ,SAAS,IAAI,CAAE;AAACa,IAAAA,OAAO,EAAEZ,OAAO,CAAC,CAAC,CAAC,CAAA;AAAE,GAAW,CAAC,CAAC,CAAA;AACxI;;;;"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { useRef } from 'react';
|
|
2
|
+
import { callIfFunction } from '@startlibs/utils';
|
|
3
|
+
|
|
4
|
+
const useRefMemo = value => {
|
|
5
|
+
const ref = useRef(value);
|
|
6
|
+
if (ref.current !== value) {
|
|
7
|
+
ref.current = callIfFunction(value);
|
|
8
|
+
}
|
|
9
|
+
return ref;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export { useRefMemo };
|
|
13
|
+
//# sourceMappingURL=useRefMemo.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRefMemo.mjs","sources":["../../src/hooks/useRefMemo.jsx"],"sourcesContent":["import React, {useRef} from 'react'\nimport {callIfFunction} from '@startlibs/utils'\n\nexport const useRefMemo = (value) => {\n const ref = useRef(value)\n if (ref.current !== value) {\n ref.current = callIfFunction(value)\n }\n return ref\n}"],"names":["useRefMemo","value","ref","useRef","current","callIfFunction"],"mappings":";;;AAGaA,MAAAA,UAAU,GAAIC,KAAK,IAAK;AACnC,EAAA,MAAMC,GAAG,GAAGC,MAAM,CAACF,KAAK,CAAC,CAAA;AACzB,EAAA,IAAIC,GAAG,CAACE,OAAO,KAAKH,KAAK,EAAE;AACzBC,IAAAA,GAAG,CAACE,OAAO,GAAGC,cAAc,CAACJ,KAAK,CAAC,CAAA;AACrC,GAAA;AACA,EAAA,OAAOC,GAAG,CAAA;AACZ;;;;"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { useRef, useMemo } from 'react';
|
|
2
|
+
import { callIfFunction, callIfFunctions, _s } from '@startlibs/utils';
|
|
3
|
+
|
|
4
|
+
const isPath = path => typeof path === 'string' || typeof path === 'number' || Array.isArray(path);
|
|
5
|
+
const getter = value => path => path !== "" && isPath(path) ? _s.get(path, value) : value;
|
|
6
|
+
const uninitialized = {};
|
|
7
|
+
const useRefState = (defaultValue, setCallback) => {
|
|
8
|
+
const ref = useRef(uninitialized);
|
|
9
|
+
if (ref.current === uninitialized) {
|
|
10
|
+
ref.current = callIfFunction(defaultValue);
|
|
11
|
+
}
|
|
12
|
+
return useMemo(() => {
|
|
13
|
+
const get = path => getter(ref.current)(path);
|
|
14
|
+
const set = (v, config) => {
|
|
15
|
+
const prev = ref.current;
|
|
16
|
+
ref.current = callIfFunctions(v, () => get());
|
|
17
|
+
if (prev !== ref.current && (!config || !config.ignoreCallback)) {
|
|
18
|
+
callIfFunction(setCallback, prev, ref.current);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
return {
|
|
22
|
+
get,
|
|
23
|
+
set
|
|
24
|
+
};
|
|
25
|
+
}, []);
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export { useRefState };
|
|
29
|
+
//# sourceMappingURL=useRefState.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRefState.mjs","sources":["../../src/hooks/useRefState.js"],"sourcesContent":["import React, {useMemo, useRef} from 'react'\nimport {_s, callIfFunction, callIfFunctions} from '@startlibs/utils'\n\nconst isPath = (path) => typeof path === 'string' || typeof path === 'number' || Array.isArray(path)\n\nconst getter = (value) => path => path !== \"\" && isPath(path) ? _s.get(path,value) : value\n\nconst uninitialized = {}\n\nexport const useRefState = (defaultValue, setCallback) => {\n const ref = useRef(uninitialized)\n if (ref.current === uninitialized) {\n ref.current = callIfFunction(defaultValue)\n }\n return useMemo(() => {\n const get = (path) => getter(ref.current)(path)\n const set = (v, config) => {\n const prev = ref.current\n ref.current = callIfFunctions(v, () => get())\n if (prev !== ref.current && (!config || !config.ignoreCallback)) {\n callIfFunction(setCallback, prev, ref.current)\n }\n }\n return {get, set}\n }, [])\n}\n"],"names":["isPath","path","Array","isArray","getter","value","_s","get","uninitialized","useRefState","defaultValue","setCallback","ref","useRef","current","callIfFunction","useMemo","set","v","config","prev","callIfFunctions","ignoreCallback"],"mappings":";;;AAGA,MAAMA,MAAM,GAAIC,IAAI,IAAK,OAAOA,IAAI,KAAK,QAAQ,IAAI,OAAOA,IAAI,KAAK,QAAQ,IAAIC,KAAK,CAACC,OAAO,CAACF,IAAI,CAAC,CAAA;AAEpG,MAAMG,MAAM,GAAIC,KAAK,IAAKJ,IAAI,IAAIA,IAAI,KAAK,EAAE,IAAID,MAAM,CAACC,IAAI,CAAC,GAAGK,EAAE,CAACC,GAAG,CAACN,IAAI,EAACI,KAAK,CAAC,GAAGA,KAAK,CAAA;AAE1F,MAAMG,aAAa,GAAG,EAAE,CAAA;MAEXC,WAAW,GAAGA,CAACC,YAAY,EAAEC,WAAW,KAAK;AACxD,EAAA,MAAMC,GAAG,GAAGC,MAAM,CAACL,aAAa,CAAC,CAAA;AACjC,EAAA,IAAII,GAAG,CAACE,OAAO,KAAKN,aAAa,EAAE;AACjCI,IAAAA,GAAG,CAACE,OAAO,GAAGC,cAAc,CAACL,YAAY,CAAC,CAAA;AAC5C,GAAA;EACA,OAAOM,OAAO,CAAC,MAAM;AACnB,IAAA,MAAMT,GAAG,GAAIN,IAAI,IAAKG,MAAM,CAACQ,GAAG,CAACE,OAAO,CAAC,CAACb,IAAI,CAAC,CAAA;AAC/C,IAAA,MAAMgB,GAAG,GAAGA,CAACC,CAAC,EAAEC,MAAM,KAAK;AACzB,MAAA,MAAMC,IAAI,GAAGR,GAAG,CAACE,OAAO,CAAA;MACxBF,GAAG,CAACE,OAAO,GAAGO,eAAe,CAACH,CAAC,EAAE,MAAMX,GAAG,EAAE,CAAC,CAAA;AAC7C,MAAA,IAAIa,IAAI,KAAKR,GAAG,CAACE,OAAO,KAAK,CAACK,MAAM,IAAI,CAACA,MAAM,CAACG,cAAc,CAAC,EAAE;QAC/DP,cAAc,CAACJ,WAAW,EAAES,IAAI,EAAER,GAAG,CAACE,OAAO,CAAC,CAAA;AAChD,OAAA;KACD,CAAA;IACD,OAAO;MAACP,GAAG;AAAEU,MAAAA,GAAAA;KAAI,CAAA;GAClB,EAAE,EAAE,CAAC,CAAA;AACR;;;;"}
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
2
|
+
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
3
|
+
import _isPlainObject from 'lodash/fp/isPlainObject';
|
|
4
|
+
import _update from 'lodash/fp/update';
|
|
5
|
+
import _identity from 'lodash/fp/identity';
|
|
6
|
+
import _isArray from 'lodash/fp/isArray';
|
|
7
|
+
import React, { useRef, useEffect, startTransition, useContext, useState, use, useCallback, useMemo } from 'react';
|
|
8
|
+
import { useLazyConstant, useConstant } from './useConstant.mjs';
|
|
9
|
+
import { useForceUpdate } from './useForceUpdate.mjs';
|
|
10
|
+
import { _s, callIfFunction } from '@startlibs/utils';
|
|
11
|
+
|
|
12
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
13
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
14
|
+
const IS_ARRAY_ITEMS_EQUALS = (a, b) => a.length === b.length && !a.some((x, i) => !Object.is(x, b[i]));
|
|
15
|
+
const IS_DEPS_EQUALS = function () {
|
|
16
|
+
let a = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
17
|
+
let b = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
18
|
+
return Object.is(a, b) || IS_ARRAY_ITEMS_EQUALS(a, b);
|
|
19
|
+
};
|
|
20
|
+
const SHALLOW_IS_EQUAL = (a, b) => Object.is(a, b) || _isArray(a) && _isArray(b) && IS_ARRAY_ITEMS_EQUALS(a, b);
|
|
21
|
+
const EMPTY_DEPS = [];
|
|
22
|
+
const EMPTY_VALUE = {
|
|
23
|
+
"EMPTY": true
|
|
24
|
+
};
|
|
25
|
+
const useUpdateSignal = initialValue => {
|
|
26
|
+
const value = useRef(initialValue);
|
|
27
|
+
value.current = initialValue;
|
|
28
|
+
return useLazyConstant(() => {
|
|
29
|
+
let registered = [];
|
|
30
|
+
const register = function () {
|
|
31
|
+
let selector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _identity;
|
|
32
|
+
let isEqual = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : SHALLOW_IS_EQUAL;
|
|
33
|
+
let withTransition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
34
|
+
const selectorRef = useRef();
|
|
35
|
+
selectorRef.current = selector;
|
|
36
|
+
const update = useForceUpdate();
|
|
37
|
+
const lastValueRef = useRef(_s.select(selectorRef.current, value.current));
|
|
38
|
+
useEffect(() => {
|
|
39
|
+
const item = [update, selectorRef, isEqual, lastValueRef, withTransition];
|
|
40
|
+
registered = [...registered, item];
|
|
41
|
+
return () => {
|
|
42
|
+
registered = registered.filter(v => v !== item);
|
|
43
|
+
};
|
|
44
|
+
}, []);
|
|
45
|
+
if (value.current === EMPTY_VALUE) {
|
|
46
|
+
return EMPTY_VALUE;
|
|
47
|
+
}
|
|
48
|
+
return lastValueRef.current;
|
|
49
|
+
};
|
|
50
|
+
const call = function () {
|
|
51
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
52
|
+
args[_key] = arguments[_key];
|
|
53
|
+
}
|
|
54
|
+
return registered.forEach(_ref => {
|
|
55
|
+
let _ref2 = _slicedToArray(_ref, 5),
|
|
56
|
+
fn = _ref2[0],
|
|
57
|
+
selectorRef = _ref2[1],
|
|
58
|
+
isEqual = _ref2[2],
|
|
59
|
+
lastValueRef = _ref2[3],
|
|
60
|
+
withTransition = _ref2[4];
|
|
61
|
+
const nextValue = _s.select(selectorRef.current, ...args);
|
|
62
|
+
if (!callIfFunction(isEqual, nextValue, lastValueRef.current)) {
|
|
63
|
+
lastValueRef.current = nextValue;
|
|
64
|
+
if (withTransition) {
|
|
65
|
+
(withTransition === true ? startTransition : withTransition)(() => fn(nextValue));
|
|
66
|
+
} else {
|
|
67
|
+
fn(nextValue);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
};
|
|
72
|
+
return [register, call];
|
|
73
|
+
});
|
|
74
|
+
};
|
|
75
|
+
const useSelectorSignal = value => {
|
|
76
|
+
const prevValue = useRef(value);
|
|
77
|
+
const _useUpdateSignal = useUpdateSignal(value),
|
|
78
|
+
_useUpdateSignal2 = _slicedToArray(_useUpdateSignal, 2),
|
|
79
|
+
_register = _useUpdateSignal2[0],
|
|
80
|
+
call = _useUpdateSignal2[1];
|
|
81
|
+
const register = useCallback((selector, deps, isEqual, withTransition) => {
|
|
82
|
+
const prevDeps = useRef(EMPTY_DEPS);
|
|
83
|
+
if (prevDeps.current !== EMPTY_DEPS && !IS_DEPS_EQUALS(deps, prevDeps.current)) {
|
|
84
|
+
call(prevValue.current);
|
|
85
|
+
}
|
|
86
|
+
prevDeps.current = deps;
|
|
87
|
+
return _register(selector, isEqual, withTransition);
|
|
88
|
+
}, []);
|
|
89
|
+
useEffect(() => {
|
|
90
|
+
if (prevValue.current !== value) {
|
|
91
|
+
prevValue.current = value;
|
|
92
|
+
call(value);
|
|
93
|
+
}
|
|
94
|
+
}, [value]);
|
|
95
|
+
return register;
|
|
96
|
+
};
|
|
97
|
+
const updateStateFn = (path, update) => state => path ? _update(path, v => callIfFunction(update, v), state) : callIfFunction(update, state);
|
|
98
|
+
const createStatefulContext = (v, defaultIsEqual) => {
|
|
99
|
+
const Ctx = /*#__PURE__*/React.createContext(v);
|
|
100
|
+
const Provider = _ref3 => {
|
|
101
|
+
let value = _ref3.value,
|
|
102
|
+
setValue = _ref3.setValue,
|
|
103
|
+
utils = _ref3.utils,
|
|
104
|
+
children = _ref3.children;
|
|
105
|
+
const register = useSelectorSignal(value);
|
|
106
|
+
const v = useLazyConstant(() => [register, setValue, utils]);
|
|
107
|
+
return /*#__PURE__*/React.createElement(Ctx.Provider, {
|
|
108
|
+
value: v
|
|
109
|
+
}, children);
|
|
110
|
+
};
|
|
111
|
+
const useCtx = () => useContext(Ctx);
|
|
112
|
+
const useSelectValue = (selector, deps, defaultIsEqual, withTransition) => {
|
|
113
|
+
const _useCtx = useCtx(),
|
|
114
|
+
_useCtx2 = _slicedToArray(_useCtx, 1),
|
|
115
|
+
useRegister = _useCtx2[0];
|
|
116
|
+
if (deps === true) {
|
|
117
|
+
return useRegister(selector, [], undefined, startTransition);
|
|
118
|
+
} else if (_isPlainObject(deps)) {
|
|
119
|
+
return useRegister(selector, deps.deps, deps.isEqual, deps.withTransition);
|
|
120
|
+
} else {
|
|
121
|
+
return useRegister(selector, _isArray(deps) ? deps : deps === null || deps === void 0 ? void 0 : deps.deps, defaultIsEqual, withTransition);
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
const useSetValue = path => {
|
|
125
|
+
const _useCtx3 = useCtx(),
|
|
126
|
+
_useCtx4 = _slicedToArray(_useCtx3, 2);
|
|
127
|
+
_useCtx4[0];
|
|
128
|
+
const set = _useCtx4[1];
|
|
129
|
+
return useConstant(update => set(updateStateFn(path, update)));
|
|
130
|
+
};
|
|
131
|
+
const useUtils = (path, deps) => {
|
|
132
|
+
const _useCtx5 = useCtx(),
|
|
133
|
+
_useCtx6 = _slicedToArray(_useCtx5, 3);
|
|
134
|
+
_useCtx6[0];
|
|
135
|
+
_useCtx6[1];
|
|
136
|
+
const utils = _useCtx6[2];
|
|
137
|
+
return utils;
|
|
138
|
+
};
|
|
139
|
+
return [Provider, [useSelectValue, useSetValue, useUtils, useCtx]];
|
|
140
|
+
};
|
|
141
|
+
const createSelfStatefulContext = (v, defaultIsEqual) => {
|
|
142
|
+
const _createStatefulContex = createStatefulContext(v),
|
|
143
|
+
_createStatefulContex2 = _slicedToArray(_createStatefulContex, 2),
|
|
144
|
+
Provider = _createStatefulContex2[0],
|
|
145
|
+
_createStatefulContex3 = _slicedToArray(_createStatefulContex2[1], 4),
|
|
146
|
+
useSelectValue = _createStatefulContex3[0],
|
|
147
|
+
useSetValue = _createStatefulContex3[1],
|
|
148
|
+
useUtils = _createStatefulContex3[2],
|
|
149
|
+
useCtx = _createStatefulContex3[3];
|
|
150
|
+
const StateFullProvider = _ref4 => {
|
|
151
|
+
let _ref4$init = _ref4.init,
|
|
152
|
+
init = _ref4$init === void 0 ? {} : _ref4$init,
|
|
153
|
+
utils = _ref4.utils,
|
|
154
|
+
children = _ref4.children;
|
|
155
|
+
const _useState = useState(init),
|
|
156
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
157
|
+
state = _useState2[0],
|
|
158
|
+
setState = _useState2[1];
|
|
159
|
+
return /*#__PURE__*/React.createElement(Provider, {
|
|
160
|
+
value: state,
|
|
161
|
+
setValue: setState,
|
|
162
|
+
utils: utils
|
|
163
|
+
}, children);
|
|
164
|
+
};
|
|
165
|
+
return [StateFullProvider, [useSelectValue, useSetValue, useUtils, useCtx]];
|
|
166
|
+
};
|
|
167
|
+
const createLazyStatefulContext = (toPromise, defaultIsEqual) => {
|
|
168
|
+
const _createStatefulContex4 = createStatefulContext(EMPTY_VALUE),
|
|
169
|
+
_createStatefulContex5 = _slicedToArray(_createStatefulContex4, 2),
|
|
170
|
+
Provider = _createStatefulContex5[0],
|
|
171
|
+
_createStatefulContex6 = _slicedToArray(_createStatefulContex5[1], 4),
|
|
172
|
+
useSelectValue = _createStatefulContex6[0];
|
|
173
|
+
_createStatefulContex6[1];
|
|
174
|
+
const useUtils = _createStatefulContex6[2],
|
|
175
|
+
useCtx = _createStatefulContex6[3];
|
|
176
|
+
const useSelectLazyValue = function (selector, deps) {
|
|
177
|
+
let isEqual = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultIsEqual;
|
|
178
|
+
let withTransition = arguments.length > 3 ? arguments[3] : undefined;
|
|
179
|
+
const value = useSelectValue(selector, deps, isEqual, withTransition);
|
|
180
|
+
const utils = useUtils();
|
|
181
|
+
if (value === EMPTY_VALUE) {
|
|
182
|
+
const loadedValue = use(utils._lazyValue());
|
|
183
|
+
return _s.select(selector, loadedValue);
|
|
184
|
+
}
|
|
185
|
+
return value;
|
|
186
|
+
};
|
|
187
|
+
const useSetLazyValue = path => {
|
|
188
|
+
const _useCtx7 = useCtx(),
|
|
189
|
+
_useCtx8 = _slicedToArray(_useCtx7, 3),
|
|
190
|
+
setValue = _useCtx8[1],
|
|
191
|
+
utils = _useCtx8[2];
|
|
192
|
+
return useConstant(update => {
|
|
193
|
+
return setValue(value => value === EMPTY_VALUE ? updateStateFn(path, update)(utils.loadedValue()) : updateStateFn(path, update)(value));
|
|
194
|
+
});
|
|
195
|
+
};
|
|
196
|
+
const useValuePromise = (selector, deps, isEqual, withTransition) => {
|
|
197
|
+
const value = useSelectValue(selector, deps, isEqual, withTransition);
|
|
198
|
+
const utils = useUtils();
|
|
199
|
+
return useCallback(() => {
|
|
200
|
+
if (value === EMPTY_VALUE) {
|
|
201
|
+
return utils._lazyValue().then(v => console.log(v, _s.select(selector, v), selector) || _s.select(selector, v));
|
|
202
|
+
}
|
|
203
|
+
return new Promise(value);
|
|
204
|
+
}, [value, deps]);
|
|
205
|
+
};
|
|
206
|
+
const LazyStateFullProvider = _ref5 => {
|
|
207
|
+
let value = _ref5.value,
|
|
208
|
+
utils = _ref5.utils,
|
|
209
|
+
children = _ref5.children,
|
|
210
|
+
_ref5$fallback = _ref5.fallback,
|
|
211
|
+
fallback = _ref5$fallback === void 0 ? null : _ref5$fallback;
|
|
212
|
+
const _useState3 = useState(EMPTY_VALUE),
|
|
213
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
214
|
+
state = _useState4[0],
|
|
215
|
+
setState = _useState4[1];
|
|
216
|
+
const promise = useRef();
|
|
217
|
+
const loadedValue = useRef();
|
|
218
|
+
const lazyUtils = useMemo(() => _objectSpread(_objectSpread({}, utils), {}, {
|
|
219
|
+
_lazyValue: () => {
|
|
220
|
+
var _promise$current;
|
|
221
|
+
(_promise$current = promise.current) !== null && _promise$current !== void 0 ? _promise$current : promise.current = callIfFunction(toPromise || _identity, value);
|
|
222
|
+
promise.current.then(value => {
|
|
223
|
+
loadedValue.current = value;
|
|
224
|
+
});
|
|
225
|
+
return promise.current;
|
|
226
|
+
},
|
|
227
|
+
loadedValue: () => loadedValue.current
|
|
228
|
+
}), [value, utils]);
|
|
229
|
+
return /*#__PURE__*/React.createElement(Provider, {
|
|
230
|
+
value: state,
|
|
231
|
+
setValue: setState,
|
|
232
|
+
utils: lazyUtils
|
|
233
|
+
}, fallback === false ? children : /*#__PURE__*/React.createElement(React.Suspense, {
|
|
234
|
+
fallback: fallback
|
|
235
|
+
}, children));
|
|
236
|
+
};
|
|
237
|
+
return [LazyStateFullProvider, [useSelectLazyValue, useSetLazyValue, useValuePromise]];
|
|
238
|
+
};
|
|
239
|
+
const createSelectableContext = v => {
|
|
240
|
+
const _createStatefulContex7 = createStatefulContext(v),
|
|
241
|
+
_createStatefulContex8 = _slicedToArray(_createStatefulContex7, 2),
|
|
242
|
+
Provider = _createStatefulContex8[0],
|
|
243
|
+
_createStatefulContex9 = _slicedToArray(_createStatefulContex8[1], 1),
|
|
244
|
+
useSelectValue = _createStatefulContex9[0];
|
|
245
|
+
return [Provider, useSelectValue];
|
|
246
|
+
};
|
|
247
|
+
const createTriggerUpdateContext = v => {
|
|
248
|
+
const _createStatefulContex0 = createStatefulContext(v),
|
|
249
|
+
_createStatefulContex1 = _slicedToArray(_createStatefulContex0, 2),
|
|
250
|
+
Provider = _createStatefulContex1[0],
|
|
251
|
+
_createStatefulContex10 = _slicedToArray(_createStatefulContex1[1], 1),
|
|
252
|
+
useSelectValue = _createStatefulContex10[0];
|
|
253
|
+
const TriggerProvider = /*#__PURE__*/React.forwardRef((_ref6, ref) => {
|
|
254
|
+
let children = _ref6.children;
|
|
255
|
+
const _useState5 = useState(0),
|
|
256
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
257
|
+
v = _useState6[0],
|
|
258
|
+
setV = _useState6[1];
|
|
259
|
+
const trigger = React.useMemo(() => () => setV(v => v + 1), [v]);
|
|
260
|
+
React.useImperativeHandle(ref, () => ({
|
|
261
|
+
trigger
|
|
262
|
+
}), []);
|
|
263
|
+
return /*#__PURE__*/React.createElement(Provider, {
|
|
264
|
+
value: trigger
|
|
265
|
+
}, children);
|
|
266
|
+
});
|
|
267
|
+
return [TriggerProvider, useSelectValue];
|
|
268
|
+
};
|
|
269
|
+
|
|
270
|
+
export { createLazyStatefulContext, createSelectableContext, createSelfStatefulContext, createStatefulContext, createTriggerUpdateContext, useUpdateSignal };
|
|
271
|
+
//# sourceMappingURL=useSignal.mjs.map
|