@ekz/react-utils 1.0.1 → 1.0.2

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.
Files changed (181) hide show
  1. package/lib/cjs/browser/index.d.ts +1 -0
  2. package/lib/cjs/browser/index.js +6 -0
  3. package/lib/cjs/browser/index.js.map +1 -0
  4. package/lib/cjs/browser/useWindowFocusDetection.d.ts +1 -0
  5. package/lib/cjs/browser/useWindowFocusDetection.js +17 -0
  6. package/lib/cjs/browser/useWindowFocusDetection.js.map +1 -0
  7. package/lib/cjs/effects/index.d.ts +3 -0
  8. package/lib/cjs/effects/index.js +10 -0
  9. package/lib/cjs/effects/index.js.map +1 -0
  10. package/lib/cjs/effects/useDebouncedEffect.d.ts +2 -0
  11. package/lib/cjs/effects/useDebouncedEffect.js +13 -0
  12. package/lib/cjs/effects/useDebouncedEffect.js.map +1 -0
  13. package/lib/cjs/effects/useEffectOnUpdate.d.ts +2 -0
  14. package/lib/cjs/effects/useEffectOnUpdate.js +16 -0
  15. package/lib/cjs/effects/useEffectOnUpdate.js.map +1 -0
  16. package/lib/cjs/effects/useRefresh.d.ts +3 -0
  17. package/lib/cjs/effects/useRefresh.js +11 -0
  18. package/lib/cjs/effects/useRefresh.js.map +1 -0
  19. package/lib/cjs/hooks/index.d.ts +1 -0
  20. package/lib/cjs/hooks/index.js +6 -0
  21. package/lib/cjs/hooks/index.js.map +1 -0
  22. package/lib/cjs/hooks/useToggle.d.ts +9 -0
  23. package/lib/cjs/hooks/useToggle.js +13 -0
  24. package/lib/cjs/hooks/useToggle.js.map +1 -0
  25. package/lib/cjs/index.d.ts +7 -0
  26. package/lib/cjs/index.js +11 -0
  27. package/lib/cjs/index.js.map +1 -0
  28. package/lib/cjs/storage/backends.d.ts +20 -0
  29. package/lib/cjs/storage/backends.js +32 -0
  30. package/lib/cjs/storage/backends.js.map +1 -0
  31. package/lib/cjs/storage/index.d.ts +18 -0
  32. package/lib/cjs/storage/index.js +37 -0
  33. package/lib/cjs/storage/index.js.map +1 -0
  34. package/lib/cjs/storage/services.d.ts +20 -0
  35. package/lib/cjs/storage/services.js +70 -0
  36. package/lib/cjs/storage/services.js.map +1 -0
  37. package/lib/cjs/time/datetime.d.ts +9 -0
  38. package/lib/cjs/time/datetime.js +19 -0
  39. package/lib/cjs/time/datetime.js.map +1 -0
  40. package/lib/cjs/time/index.d.ts +2 -0
  41. package/lib/cjs/time/index.js +8 -0
  42. package/lib/cjs/time/index.js.map +1 -0
  43. package/lib/cjs/time/useClock.d.ts +11 -0
  44. package/lib/cjs/time/useClock.js +23 -0
  45. package/lib/cjs/time/useClock.js.map +1 -0
  46. package/lib/cjs/timers/index.d.ts +2 -0
  47. package/lib/cjs/timers/index.js +9 -0
  48. package/lib/cjs/timers/index.js.map +1 -0
  49. package/lib/cjs/timers/useDebounce.d.ts +1 -0
  50. package/lib/cjs/timers/useDebounce.js +16 -0
  51. package/lib/cjs/timers/useDebounce.js.map +1 -0
  52. package/lib/cjs/timers/useTimer.d.ts +13 -0
  53. package/lib/cjs/timers/useTimer.js +44 -0
  54. package/lib/cjs/timers/useTimer.js.map +1 -0
  55. package/lib/cjs/ts/index.d.ts +1 -0
  56. package/lib/cjs/ts/index.js +6 -0
  57. package/lib/cjs/ts/index.js.map +1 -0
  58. package/lib/cjs/ts/unreachable.d.ts +1 -0
  59. package/lib/cjs/ts/unreachable.js +7 -0
  60. package/lib/cjs/ts/unreachable.js.map +1 -0
  61. package/lib/esm/browser/index.d.ts +1 -0
  62. package/lib/esm/browser/index.js +2 -0
  63. package/lib/esm/browser/index.js.map +1 -0
  64. package/lib/esm/browser/useWindowFocusDetection.d.ts +1 -0
  65. package/lib/esm/browser/useWindowFocusDetection.js +13 -0
  66. package/lib/esm/browser/useWindowFocusDetection.js.map +1 -0
  67. package/lib/esm/effects/index.d.ts +3 -0
  68. package/lib/esm/effects/index.js +4 -0
  69. package/lib/esm/effects/index.js.map +1 -0
  70. package/lib/esm/effects/useDebouncedEffect.d.ts +2 -0
  71. package/lib/esm/effects/useDebouncedEffect.js +9 -0
  72. package/lib/esm/effects/useDebouncedEffect.js.map +1 -0
  73. package/lib/esm/effects/useEffectOnUpdate.d.ts +2 -0
  74. package/lib/esm/effects/useEffectOnUpdate.js +12 -0
  75. package/lib/esm/effects/useEffectOnUpdate.js.map +1 -0
  76. package/lib/esm/effects/useRefresh.d.ts +3 -0
  77. package/lib/esm/effects/useRefresh.js +7 -0
  78. package/lib/esm/effects/useRefresh.js.map +1 -0
  79. package/lib/esm/hooks/index.d.ts +1 -0
  80. package/lib/esm/hooks/index.js +2 -0
  81. package/lib/esm/hooks/index.js.map +1 -0
  82. package/lib/esm/hooks/useToggle.d.ts +9 -0
  83. package/lib/esm/hooks/useToggle.js +9 -0
  84. package/lib/esm/hooks/useToggle.js.map +1 -0
  85. package/lib/esm/index.d.ts +7 -0
  86. package/lib/esm/index.js +8 -0
  87. package/lib/esm/index.js.map +1 -0
  88. package/lib/esm/storage/backends.d.ts +20 -0
  89. package/lib/esm/storage/backends.js +27 -0
  90. package/lib/esm/storage/backends.js.map +1 -0
  91. package/lib/esm/storage/index.d.ts +18 -0
  92. package/lib/esm/storage/index.js +30 -0
  93. package/lib/esm/storage/index.js.map +1 -0
  94. package/lib/esm/storage/services.d.ts +20 -0
  95. package/lib/esm/storage/services.js +64 -0
  96. package/lib/esm/storage/services.js.map +1 -0
  97. package/lib/esm/time/datetime.d.ts +9 -0
  98. package/lib/esm/time/datetime.js +16 -0
  99. package/lib/esm/time/datetime.js.map +1 -0
  100. package/lib/esm/time/index.d.ts +2 -0
  101. package/lib/esm/time/index.js +3 -0
  102. package/lib/esm/time/index.js.map +1 -0
  103. package/lib/esm/time/useClock.d.ts +11 -0
  104. package/lib/esm/time/useClock.js +18 -0
  105. package/lib/esm/time/useClock.js.map +1 -0
  106. package/lib/esm/timers/index.d.ts +2 -0
  107. package/lib/esm/timers/index.js +3 -0
  108. package/lib/esm/timers/index.js.map +1 -0
  109. package/lib/esm/timers/useDebounce.d.ts +1 -0
  110. package/lib/esm/timers/useDebounce.js +12 -0
  111. package/lib/esm/timers/useDebounce.js.map +1 -0
  112. package/lib/esm/timers/useTimer.d.ts +13 -0
  113. package/lib/esm/timers/useTimer.js +38 -0
  114. package/lib/esm/timers/useTimer.js.map +1 -0
  115. package/lib/esm/ts/index.d.ts +1 -0
  116. package/lib/esm/ts/index.js +2 -0
  117. package/lib/esm/ts/index.js.map +1 -0
  118. package/lib/esm/ts/unreachable.d.ts +1 -0
  119. package/lib/esm/ts/unreachable.js +4 -0
  120. package/lib/esm/ts/unreachable.js.map +1 -0
  121. package/lib/esnext/browser/index.d.ts +1 -0
  122. package/lib/esnext/browser/index.js +2 -0
  123. package/lib/esnext/browser/index.js.map +1 -0
  124. package/lib/esnext/browser/useWindowFocusDetection.d.ts +1 -0
  125. package/lib/esnext/browser/useWindowFocusDetection.js +13 -0
  126. package/lib/esnext/browser/useWindowFocusDetection.js.map +1 -0
  127. package/lib/esnext/effects/index.d.ts +3 -0
  128. package/lib/esnext/effects/index.js +4 -0
  129. package/lib/esnext/effects/index.js.map +1 -0
  130. package/lib/esnext/effects/useDebouncedEffect.d.ts +2 -0
  131. package/lib/esnext/effects/useDebouncedEffect.js +9 -0
  132. package/lib/esnext/effects/useDebouncedEffect.js.map +1 -0
  133. package/lib/esnext/effects/useEffectOnUpdate.d.ts +2 -0
  134. package/lib/esnext/effects/useEffectOnUpdate.js +12 -0
  135. package/lib/esnext/effects/useEffectOnUpdate.js.map +1 -0
  136. package/lib/esnext/effects/useRefresh.d.ts +3 -0
  137. package/lib/esnext/effects/useRefresh.js +7 -0
  138. package/lib/esnext/effects/useRefresh.js.map +1 -0
  139. package/lib/esnext/hooks/index.d.ts +1 -0
  140. package/lib/esnext/hooks/index.js +2 -0
  141. package/lib/esnext/hooks/index.js.map +1 -0
  142. package/lib/esnext/hooks/useToggle.d.ts +9 -0
  143. package/lib/esnext/hooks/useToggle.js +9 -0
  144. package/lib/esnext/hooks/useToggle.js.map +1 -0
  145. package/lib/esnext/index.d.ts +7 -0
  146. package/lib/esnext/index.js +8 -0
  147. package/lib/esnext/index.js.map +1 -0
  148. package/lib/esnext/storage/backends.d.ts +20 -0
  149. package/lib/esnext/storage/backends.js +22 -0
  150. package/lib/esnext/storage/backends.js.map +1 -0
  151. package/lib/esnext/storage/index.d.ts +18 -0
  152. package/lib/esnext/storage/index.js +30 -0
  153. package/lib/esnext/storage/index.js.map +1 -0
  154. package/lib/esnext/storage/services.d.ts +20 -0
  155. package/lib/esnext/storage/services.js +68 -0
  156. package/lib/esnext/storage/services.js.map +1 -0
  157. package/lib/esnext/time/datetime.d.ts +9 -0
  158. package/lib/esnext/time/datetime.js +16 -0
  159. package/lib/esnext/time/datetime.js.map +1 -0
  160. package/lib/esnext/time/index.d.ts +2 -0
  161. package/lib/esnext/time/index.js +3 -0
  162. package/lib/esnext/time/index.js.map +1 -0
  163. package/lib/esnext/time/useClock.d.ts +11 -0
  164. package/lib/esnext/time/useClock.js +18 -0
  165. package/lib/esnext/time/useClock.js.map +1 -0
  166. package/lib/esnext/timers/index.d.ts +2 -0
  167. package/lib/esnext/timers/index.js +3 -0
  168. package/lib/esnext/timers/index.js.map +1 -0
  169. package/lib/esnext/timers/useDebounce.d.ts +1 -0
  170. package/lib/esnext/timers/useDebounce.js +12 -0
  171. package/lib/esnext/timers/useDebounce.js.map +1 -0
  172. package/lib/esnext/timers/useTimer.d.ts +13 -0
  173. package/lib/esnext/timers/useTimer.js +38 -0
  174. package/lib/esnext/timers/useTimer.js.map +1 -0
  175. package/lib/esnext/ts/index.d.ts +1 -0
  176. package/lib/esnext/ts/index.js +2 -0
  177. package/lib/esnext/ts/index.js.map +1 -0
  178. package/lib/esnext/ts/unreachable.d.ts +1 -0
  179. package/lib/esnext/ts/unreachable.js +4 -0
  180. package/lib/esnext/ts/unreachable.js.map +1 -0
  181. package/package.json +3 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTimer.js","sourceRoot":"","sources":["../../../src/main/web/timers/useTimer.ts"],"names":[],"mappings":";;AAaA,4BAwCC;AAID,gCAEC;AAED,kCAEC;;AA/DD,qDAA+B;AAa/B,SAAgB,QAAQ,CACpB,wBAAwB,GAAG,CAAC,EAC5B,gBAA+B,UAAU;IAEzC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAgC,SAAS,CAAC,CAAC;IACzE,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,CAAe,SAAS,CAAC,CAAC;IAE9D,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACjC,IAAI,SAAS,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;YAC5B,IAAI,aAAa,KAAK,UAAU,EAAE,CAAC;gBAC/B,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACJ,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACrC,CAAC;QACL,CAAC;QAED,IAAI,OAAO,eAAe,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;YAChD,eAAe,CAAC,OAAO,EAAE,CAAC;YAC1B,eAAe,CAAC,OAAO,GAAG,SAAS,CAAC;QACxC,CAAC;IACL,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEtC,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACtB,MAAM,UAAU,GAAG,CACf,cAAmC,EACnC,iBAAiB,GAAG,wBAAwB,EAChC,EAAE;YACd,KAAK,EAAE,CAAC;YACR,SAAS,CAAC,OAAO,GAAG,aAAa,CAAC,GAAG,EAAE;gBACnC,eAAe,CAAC,OAAO,GAAG,cAAc,EAAE,CAAC;YAC/C,CAAC,EAAE,iBAAiB,CAAC,CAAC;YACtB,OAAO,KAAK,CAAC;QACjB,CAAC,CAAC;QAEF,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC;QAE1B,OAAO,UAAU,CAAC;IACtB,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,wBAAwB,CAAC,CAAC,CAAC;AACzD,CAAC;AAID,SAAgB,UAAU,CAAC,wBAAwB,GAAG,CAAC;IACnD,OAAO,QAAQ,CAAC,wBAAwB,EAAE,UAAU,CAAC,CAAC;AAC1D,CAAC;AAED,SAAgB,WAAW,CAAC,wBAAwB,GAAG,CAAC;IACpD,OAAO,QAAQ,CAAC,wBAAwB,EAAE,WAAW,CAAC,CAAC;AAC3D,CAAC"}
@@ -0,0 +1 @@
1
+ export { unreachable } from './unreachable';
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.unreachable = void 0;
4
+ var unreachable_1 = require("./unreachable");
5
+ Object.defineProperty(exports, "unreachable", { enumerable: true, get: function () { return unreachable_1.unreachable; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/main/web/ts/index.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAAnC,0GAAA,WAAW,OAAA"}
@@ -0,0 +1 @@
1
+ export declare function unreachable(value: never): never;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.unreachable = unreachable;
4
+ function unreachable(value) {
5
+ throw new TypeError(`Unexpected unreachable value [${value}]`);
6
+ }
7
+ //# sourceMappingURL=unreachable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unreachable.js","sourceRoot":"","sources":["../../../src/main/web/ts/unreachable.ts"],"names":[],"mappings":";;AAAA,kCAEC;AAFD,SAAgB,WAAW,CAAC,KAAY;IACpC,MAAM,IAAI,SAAS,CAAC,iCAAiC,KAAK,GAAG,CAAC,CAAC;AACnE,CAAC"}
@@ -0,0 +1 @@
1
+ export { useWindowFocusDetection } from './useWindowFocusDetection';
@@ -0,0 +1,2 @@
1
+ export { useWindowFocusDetection } from './useWindowFocusDetection';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/main/web/browser/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function useWindowFocusDetection(): boolean;
@@ -0,0 +1,13 @@
1
+ import * as React from 'react';
2
+ export function useWindowFocusDetection() {
3
+ const [isVisible, setVisible] = React.useState(!document.hidden);
4
+ const visibilityChangeHandler = React.useCallback(() => {
5
+ setVisible(!document.hidden);
6
+ }, []);
7
+ React.useEffect(() => {
8
+ document.addEventListener('visibilitychange', visibilityChangeHandler);
9
+ return () => document.removeEventListener('visibilitychange', visibilityChangeHandler);
10
+ }, [visibilityChangeHandler]);
11
+ return isVisible;
12
+ }
13
+ //# sourceMappingURL=useWindowFocusDetection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useWindowFocusDetection.js","sourceRoot":"","sources":["../../../src/main/web/browser/useWindowFocusDetection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,UAAU,uBAAuB;IACnC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEjE,MAAM,uBAAuB,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACnD,UAAU,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,uBAAuB,CAAC,CAAC;QACvE,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,uBAAuB,CAAC,CAAC;IAC3F,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAE9B,OAAO,SAAS,CAAC;AACrB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { useDebouncedEffect } from './useDebouncedEffect';
2
+ export { useEffectOnUpdate } from './useEffectOnUpdate';
3
+ export { useRefresh } from './useRefresh';
@@ -0,0 +1,4 @@
1
+ export { useDebouncedEffect } from './useDebouncedEffect';
2
+ export { useEffectOnUpdate } from './useEffectOnUpdate';
3
+ export { useRefresh } from './useRefresh';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/main/web/effects/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,2 @@
1
+ import * as React from 'react';
2
+ export declare function useDebouncedEffect(timeoutMs: number, effect: React.EffectCallback, dependencyList?: React.DependencyList): void;
@@ -0,0 +1,9 @@
1
+ import * as React from 'react';
2
+ import { useTimeout } from '../timers';
3
+ export function useDebouncedEffect(timeoutMs, effect, dependencyList) {
4
+ const deps = dependencyList || [];
5
+ const timeout = useTimeout(timeoutMs);
6
+ // eslint-disable-next-line react-hooks/exhaustive-deps
7
+ React.useEffect(() => timeout(effect), deps);
8
+ }
9
+ //# sourceMappingURL=useDebouncedEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDebouncedEffect.js","sourceRoot":"","sources":["../../../src/main/web/effects/useDebouncedEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,UAAU,kBAAkB,CAC9B,SAAiB,EACjB,MAA4B,EAC5B,cAAqC;IAErC,MAAM,IAAI,GAAG,cAAc,IAAI,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IACtC,uDAAuD;IACvD,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;AACjD,CAAC"}
@@ -0,0 +1,2 @@
1
+ import * as React from 'react';
2
+ export declare function useEffectOnUpdate(effect: React.EffectCallback, deps?: React.DependencyList): void;
@@ -0,0 +1,12 @@
1
+ import * as React from 'react';
2
+ export function useEffectOnUpdate(effect, deps) {
3
+ const hasMounted = React.useRef(false);
4
+ React.useEffect(() => {
5
+ if (hasMounted.current) {
6
+ return effect();
7
+ }
8
+ hasMounted.current = true;
9
+ // eslint-disable-next-line react-hooks/exhaustive-deps
10
+ }, deps);
11
+ }
12
+ //# sourceMappingURL=useEffectOnUpdate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEffectOnUpdate.js","sourceRoot":"","sources":["../../../src/main/web/effects/useEffectOnUpdate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,UAAU,iBAAiB,CAAC,MAA4B,EAAE,IAA2B;IACvF,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEvC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACrB,OAAO,MAAM,EAAE,CAAC;QACpB,CAAC;QAED,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;QAE1B,uDAAuD;IAC3D,CAAC,EAAE,IAAI,CAAC,CAAC;AACb,CAAC"}
@@ -0,0 +1,3 @@
1
+ type RefreshToken = number;
2
+ export declare function useRefresh(): [RefreshToken, () => void];
3
+ export {};
@@ -0,0 +1,7 @@
1
+ import * as React from 'react';
2
+ export function useRefresh() {
3
+ const [token, setToken] = React.useState(0);
4
+ const refresh = React.useCallback(() => setToken((x) => x + 1), []);
5
+ return React.useMemo(() => [token, refresh], [token, refresh]);
6
+ }
7
+ //# sourceMappingURL=useRefresh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRefresh.js","sourceRoot":"","sources":["../../../src/main/web/effects/useRefresh.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,UAAU,UAAU;IACtB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE5C,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEpE,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AACnE,CAAC"}
@@ -0,0 +1 @@
1
+ export { useToggle, type ToggleApi } from './useToggle';
@@ -0,0 +1,2 @@
1
+ export { useToggle } from './useToggle';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/main/web/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAkB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,9 @@
1
+ import * as React from 'react';
2
+ export interface ToggleApi {
3
+ isEnabled: boolean;
4
+ onEnable(): void;
5
+ onDisable(): void;
6
+ onToggle(): void;
7
+ setEnabled: React.Dispatch<React.SetStateAction<boolean>>;
8
+ }
9
+ export declare function useToggle(initialOpen?: boolean): ToggleApi;
@@ -0,0 +1,9 @@
1
+ import * as React from 'react';
2
+ export function useToggle(initialOpen = false) {
3
+ const [isEnabled, setEnabled] = React.useState(initialOpen);
4
+ const onEnable = React.useCallback(() => setEnabled(true), []);
5
+ const onDisable = React.useCallback(() => setEnabled(false), []);
6
+ const onToggle = React.useCallback(() => setEnabled((isEnabled) => !isEnabled), []);
7
+ return React.useMemo(() => ({ isEnabled, onEnable, onDisable, onToggle, setEnabled }), [isEnabled, onEnable, onDisable, onToggle]);
8
+ }
9
+ //# sourceMappingURL=useToggle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useToggle.js","sourceRoot":"","sources":["../../../src/main/web/hooks/useToggle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,MAAM,UAAU,SAAS,CAAC,WAAW,GAAG,KAAK;IACzC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAE5D,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;IAEpF,OAAO,KAAK,CAAC,OAAO,CAChB,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,EAChE,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAC7C,CAAC;AACN,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from './browser';
2
+ export * from './effects';
3
+ export * from './hooks';
4
+ export * from './storage';
5
+ export * from './time';
6
+ export * from './timers';
7
+ export * from './ts';
@@ -0,0 +1,8 @@
1
+ export * from './browser';
2
+ export * from './effects';
3
+ export * from './hooks';
4
+ export * from './storage';
5
+ export * from './time';
6
+ export * from './timers';
7
+ export * from './ts';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/main/web/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,MAAM,CAAC"}
@@ -0,0 +1,20 @@
1
+ export interface StorageBackend {
2
+ get(): string | null;
3
+ set(value: string): void;
4
+ delete(): void;
5
+ }
6
+ declare abstract class GenericStorageBackend implements StorageBackend {
7
+ private key;
8
+ protected abstract storage: Storage;
9
+ constructor(key: string);
10
+ get(): string | null;
11
+ set(value: string): void;
12
+ delete(): void;
13
+ }
14
+ export declare class LocalStorageBackend extends GenericStorageBackend {
15
+ protected storage: Storage;
16
+ }
17
+ export declare class SessionStorageBackend extends GenericStorageBackend {
18
+ protected storage: Storage;
19
+ }
20
+ export {};
@@ -0,0 +1,27 @@
1
+ class GenericStorageBackend {
2
+ constructor(key) {
3
+ this.key = key;
4
+ }
5
+ get() {
6
+ return this.storage.getItem(this.key);
7
+ }
8
+ set(value) {
9
+ this.storage.setItem(this.key, value);
10
+ }
11
+ delete() {
12
+ this.storage.removeItem(this.key);
13
+ }
14
+ }
15
+ export class LocalStorageBackend extends GenericStorageBackend {
16
+ constructor() {
17
+ super(...arguments);
18
+ this.storage = localStorage;
19
+ }
20
+ }
21
+ export class SessionStorageBackend extends GenericStorageBackend {
22
+ constructor() {
23
+ super(...arguments);
24
+ this.storage = sessionStorage;
25
+ }
26
+ }
27
+ //# sourceMappingURL=backends.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backends.js","sourceRoot":"","sources":["../../../src/main/web/storage/backends.ts"],"names":[],"mappings":"AAMA,MAAe,qBAAqB;IAGhC,YAAoB,GAAW;QAAX,QAAG,GAAH,GAAG,CAAQ;IAAG,CAAC;IAEnC,GAAG;QACC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1C,CAAC;IAED,GAAG,CAAC,KAAa;QACb,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM;QACF,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;CACJ;AAED,MAAM,OAAO,mBAAoB,SAAQ,qBAAqB;IAA9D;;QACc,YAAO,GAAG,YAAY,CAAC;IACrC,CAAC;CAAA;AAED,MAAM,OAAO,qBAAsB,SAAQ,qBAAqB;IAAhE;;QACc,YAAO,GAAG,cAAc,CAAC;IACvC,CAAC;CAAA"}
@@ -0,0 +1,18 @@
1
+ import * as React from 'react';
2
+ import { StorageService } from './services';
3
+ export { StorageService };
4
+ export type { StorageBackend } from './backends';
5
+ export interface StoredValue<T> {
6
+ value: T;
7
+ set(value: T): void;
8
+ update: React.Dispatch<React.SetStateAction<T>>;
9
+ delete(): void;
10
+ }
11
+ export interface StoredValueConfig<T> {
12
+ defaultValue: T;
13
+ serialize: (value: T) => string | null;
14
+ deserialize: (value: string) => T;
15
+ }
16
+ export declare function useLocalStorage<T>(name: string, config: StoredValueConfig<T>): StoredValue<T>;
17
+ export declare function useSessionStorage<T>(name: string, config: StoredValueConfig<T>): StoredValue<T>;
18
+ export declare function useStoredValue<T>(service: StorageService<T>): StoredValue<T>;
@@ -0,0 +1,30 @@
1
+ import * as React from 'react';
2
+ import { StorageService, fromLocalStorage, fromSessionStorage } from './services';
3
+ export { StorageService };
4
+ export function useLocalStorage(name, config) {
5
+ const service = React.useMemo(() => fromLocalStorage(name, config.defaultValue, config.serialize, config.deserialize), [name, config.defaultValue, config.serialize, config.deserialize]);
6
+ return useStoredValue(service);
7
+ }
8
+ export function useSessionStorage(name, config) {
9
+ const service = React.useMemo(() => fromSessionStorage(name, config.defaultValue, config.serialize, config.deserialize), [name, config.defaultValue, config.serialize, config.deserialize]);
10
+ return useStoredValue(service);
11
+ }
12
+ export function useStoredValue(service) {
13
+ const [value, setValue] = React.useState(service.get());
14
+ React.useEffect(() => service.addChangeListener(setValue), [service]);
15
+ const set = React.useCallback((value) => {
16
+ service.set(value);
17
+ }, [service]);
18
+ const updateValue = React.useCallback((updater) => {
19
+ return typeof updater === 'function'
20
+ ? service.update(updater)
21
+ : service.set(updater);
22
+ }, [service]);
23
+ const deleteValue = React.useCallback(() => {
24
+ service.delete();
25
+ }, [service]);
26
+ return React.useMemo(() => {
27
+ return { value, set, update: updateValue, delete: deleteValue };
28
+ }, [value, set, deleteValue, updateValue]);
29
+ }
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/main/web/storage/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAElF,OAAO,EAAE,cAAc,EAAE,CAAC;AAgB1B,MAAM,UAAU,eAAe,CAAI,IAAY,EAAE,MAA4B;IACzE,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CACzB,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,EACvF,CAAC,IAAI,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,CACpE,CAAC;IAEF,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAI,IAAY,EAAE,MAA4B;IAC3E,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CACzB,GAAG,EAAE,CAAC,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,EACzF,CAAC,IAAI,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,CACpE,CAAC;IAEF,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,cAAc,CAAI,OAA0B;IACxD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAE3D,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEtE,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,CACzB,CAAC,KAAQ,EAAE,EAAE;QACT,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC,EACD,CAAC,OAAO,CAAC,CACZ,CAAC;IAEF,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CACjC,CAAC,OAAgC,EAAE,EAAE;QACjC,OAAO,OAAO,OAAO,KAAK,UAAU;YAChC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,OAA0B,CAAC;YAC5C,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC,EACD,CAAC,OAAO,CAAC,CACZ,CAAC;IAEF,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACvC,OAAO,CAAC,MAAM,EAAE,CAAC;IACrB,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACtB,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IACpE,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { type StorageBackend } from './backends';
2
+ type ChangeListener<T> = (value: T) => unknown;
3
+ type Unsubscribe = () => void;
4
+ export declare class StorageService<T> {
5
+ private storage;
6
+ private defaultValue;
7
+ private serialize;
8
+ private deserialize;
9
+ private changeListeners;
10
+ constructor(storage: StorageBackend, defaultValue: T, serialize: (value: T) => string | null, deserialize: (value: string) => T);
11
+ get(): T;
12
+ set(value: T): void;
13
+ update(updater: (value: T) => T): void;
14
+ delete(): void;
15
+ addChangeListener(listener: ChangeListener<T>): Unsubscribe;
16
+ private emitChange;
17
+ }
18
+ export declare function fromLocalStorage<T>(key: string, defaultValue: T, serialize: (value: T) => string | null, deserialize: (value: string) => T): StorageService<T>;
19
+ export declare function fromSessionStorage<T>(key: string, defaultValue: T, serialize: (value: T) => string | null, deserialize: (value: string) => T): StorageService<T>;
20
+ export {};
@@ -0,0 +1,64 @@
1
+ import { LocalStorageBackend, SessionStorageBackend } from './backends';
2
+ export class StorageService {
3
+ constructor(storage, defaultValue, serialize, deserialize) {
4
+ this.storage = storage;
5
+ this.defaultValue = defaultValue;
6
+ this.serialize = serialize;
7
+ this.deserialize = deserialize;
8
+ this.changeListeners = [];
9
+ }
10
+ get() {
11
+ const value = this.storage.get();
12
+ if (value == null) {
13
+ return this.defaultValue;
14
+ }
15
+ return this.deserialize(value);
16
+ }
17
+ set(value) {
18
+ const serialized = this.serialize(value);
19
+ if (serialized != null) {
20
+ this.storage.set(serialized);
21
+ }
22
+ else {
23
+ this.delete();
24
+ }
25
+ this.emitChange();
26
+ }
27
+ update(updater) {
28
+ const value = updater(this.get());
29
+ this.set(value);
30
+ this.emitChange();
31
+ }
32
+ delete() {
33
+ this.storage.delete();
34
+ this.emitChange();
35
+ }
36
+ addChangeListener(listener) {
37
+ const unsubscribe = () => {
38
+ const index = this.changeListeners.indexOf(listener);
39
+ if (index !== -1) {
40
+ this.changeListeners.splice(index, 1);
41
+ }
42
+ };
43
+ if (this.changeListeners.indexOf(listener) === -1) {
44
+ this.changeListeners.push(listener);
45
+ listener(this.get());
46
+ }
47
+ return unsubscribe;
48
+ }
49
+ emitChange() {
50
+ const value = this.get();
51
+ this.changeListeners.forEach((listener) => {
52
+ listener(value);
53
+ });
54
+ }
55
+ }
56
+ export function fromLocalStorage(key, defaultValue, serialize, deserialize) {
57
+ const storageBackend = new LocalStorageBackend(key);
58
+ return new StorageService(storageBackend, defaultValue, serialize, deserialize);
59
+ }
60
+ export function fromSessionStorage(key, defaultValue, serialize, deserialize) {
61
+ const storageBackend = new SessionStorageBackend(key);
62
+ return new StorageService(storageBackend, defaultValue, serialize, deserialize);
63
+ }
64
+ //# sourceMappingURL=services.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"services.js","sourceRoot":"","sources":["../../../src/main/web/storage/services.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { DateTime } from 'luxon';
2
+ type Opaque<K, T> = T & {
3
+ __TYPE__: K;
4
+ };
5
+ export type ISODate = Opaque<'ISODate', string>;
6
+ export type DateFormat = 'DATETIME_FULL' | 'DATETIME_FULL_WITH_SECONDS' | 'DATETIME_HUGE' | 'DATETIME_HUGE_WITH_SECONDS' | 'DATETIME_MED' | 'DATETIME_MED_WITH_SECONDS' | 'DATETIME_SHORT' | 'DATETIME_SHORT_WITH_SECONDS' | 'DATE_FULL' | 'DATE_HUGE' | 'DATE_MED' | 'DATE_SHORT' | 'TIME_24_SIMPLE' | 'TIME_24_WITH_LONG_OFFSET' | 'TIME_24_WITH_SECONDS' | 'TIME_24_WITH_SHORT_OFFSET' | 'TIME_SIMPLE' | 'TIME_WITH_LONG_OFFSET' | 'TIME_WITH_SECONDS' | 'TIME_WITH_SHORT_OFFSET';
7
+ export type GenericDateTime = string | Date | DateTime | ISODate;
8
+ export declare function toDateTime(value: GenericDateTime): DateTime;
9
+ export {};
@@ -0,0 +1,16 @@
1
+ import { DateTime } from 'luxon';
2
+ export function toDateTime(value) {
3
+ if (value instanceof DateTime) {
4
+ return value.toUTC();
5
+ }
6
+ if (value instanceof Date) {
7
+ return DateTime.fromISO(value.toISOString());
8
+ }
9
+ try {
10
+ return DateTime.fromISO(new Date(value).toISOString());
11
+ }
12
+ catch (e) {
13
+ return DateTime.invalid(e instanceof Error ? e.message : '');
14
+ }
15
+ }
16
+ //# sourceMappingURL=datetime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datetime.js","sourceRoot":"","sources":["../../../src/main/web/time/datetime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AA8BjC,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC7C,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAED,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;QACxB,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,CAAC;QACD,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAC3D,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACjE,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { useClock, type Clock } from './useClock';
2
+ export { type ISODate, type GenericDateTime, type DateFormat, toDateTime } from './datetime';
@@ -0,0 +1,3 @@
1
+ export { useClock } from './useClock';
2
+ export { toDateTime } from './datetime';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/main/web/time/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAc,MAAM,YAAY,CAAC;AAClD,OAAO,EAAuD,UAAU,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { DateTime } from 'luxon';
2
+ export interface Clock {
3
+ readonly now: DateTime<true>;
4
+ /**
5
+ * Updates the current time in the given interval.
6
+ * @param intervalMs Interval for clock update in milliseconds. Defaults to 1000ms.
7
+ */
8
+ tick(intervalMs?: number): () => void;
9
+ update(): void;
10
+ }
11
+ export declare const useClock: (tickIntervalMs?: number, locale?: string) => Clock;
@@ -0,0 +1,18 @@
1
+ import { DateTime } from 'luxon';
2
+ import * as React from 'react';
3
+ export const useClock = function useClock(tickIntervalMs, locale) {
4
+ const getCurrentTime = React.useCallback(() => (locale != null ? DateTime.utc().setLocale(locale) : DateTime.utc()), [locale]);
5
+ const [now, setNow] = React.useState(getCurrentTime);
6
+ const update = React.useCallback(() => setNow(getCurrentTime()), [getCurrentTime]);
7
+ const tick = React.useCallback((intervalMs = 1000) => {
8
+ const interval = setInterval(update, intervalMs);
9
+ return () => clearInterval(interval);
10
+ }, [update]);
11
+ React.useEffect(() => {
12
+ if (tickIntervalMs != null && tickIntervalMs > 0) {
13
+ return tick(tickIntervalMs);
14
+ }
15
+ }, [tick, tickIntervalMs]);
16
+ return React.useMemo(() => ({ now, tick, update }), [now, tick, update]);
17
+ };
18
+ //# sourceMappingURL=useClock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useClock.js","sourceRoot":"","sources":["../../../src/main/web/time/useClock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAY/B,MAAM,CAAC,MAAM,QAAQ,GAAG,SAAS,QAAQ,CAAC,cAAuB,EAAE,MAAe;IAC9E,MAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CACpC,GAAG,EAAE,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,EAC1E,CAAC,MAAM,CAAC,CACX,CAAC;IAEF,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IAErD,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAEnF,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAC1B,CAAC,UAAU,GAAG,IAAI,EAAE,EAAE;QAClB,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACjD,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC,EACD,CAAC,MAAM,CAAC,CACX,CAAC;IAEF,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,IAAI,cAAc,IAAI,IAAI,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;YAC/C,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC;QAChC,CAAC;IACL,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC;IAE3B,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AAC7E,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { useDebounce } from './useDebounce';
2
+ export { useTimeout, useInterval } from './useTimer';
@@ -0,0 +1,3 @@
1
+ export { useDebounce } from './useDebounce';
2
+ export { useTimeout, useInterval } from './useTimer';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/main/web/timers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function useDebounce<T>(value: T, delay: number): T;
@@ -0,0 +1,12 @@
1
+ import * as react from 'react';
2
+ export function useDebounce(value, delay) {
3
+ const [debouncedValue, setDebouncedValue] = react.useState(value);
4
+ react.useEffect(() => {
5
+ const handler = setTimeout(() => {
6
+ setDebouncedValue(value);
7
+ }, delay);
8
+ return () => clearTimeout(handler);
9
+ }, [value, delay]);
10
+ return debouncedValue;
11
+ }
12
+ //# sourceMappingURL=useDebounce.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDebounce.js","sourceRoot":"","sources":["../../../src/main/web/timers/useDebounce.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,UAAU,WAAW,CAAI,KAAQ,EAAE,KAAa;IAClD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAElE,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC,EAAE,KAAK,CAAC,CAAC;QAEV,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAEnB,OAAO,cAAc,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,13 @@
1
+ type MaybeCleanup = (() => void) | void;
2
+ interface CallbackWithCleanup {
3
+ (): MaybeCleanup;
4
+ }
5
+ interface TimeoutCallback {
6
+ (timeoutHandler: CallbackWithCleanup, timeoutDurationMs?: number): () => void;
7
+ cancel(): void;
8
+ }
9
+ export declare function useTimer(defaultTimeoutDurationMs?: number, timerFunction?: TimerFunction): TimeoutCallback;
10
+ type TimerFunction = typeof setTimeout | typeof setInterval;
11
+ export declare function useTimeout(defaultTimeoutDurationMs?: number): TimeoutCallback;
12
+ export declare function useInterval(defaultTimeoutDurationMs?: number): TimeoutCallback;
13
+ export {};
@@ -0,0 +1,38 @@
1
+ import * as React from 'react';
2
+ export function useTimer(defaultTimeoutDurationMs = 0, timerFunction = setTimeout) {
3
+ const timeoutId = React.useRef(undefined);
4
+ const callbackCleanup = React.useRef(undefined);
5
+ const clear = React.useCallback(() => {
6
+ if (timeoutId.current != null) {
7
+ if (timerFunction === setTimeout) {
8
+ clearTimeout(timeoutId.current);
9
+ }
10
+ else {
11
+ clearInterval(timeoutId.current);
12
+ }
13
+ }
14
+ if (typeof callbackCleanup.current === 'function') {
15
+ callbackCleanup.current();
16
+ callbackCleanup.current = undefined;
17
+ }
18
+ }, [timerFunction]);
19
+ React.useEffect(() => clear, [clear]);
20
+ return React.useMemo(() => {
21
+ const runTimeout = (timeoutHandler, timeoutDurationMs = defaultTimeoutDurationMs) => {
22
+ clear();
23
+ timeoutId.current = timerFunction(() => {
24
+ callbackCleanup.current = timeoutHandler();
25
+ }, timeoutDurationMs);
26
+ return clear;
27
+ };
28
+ runTimeout.cancel = clear;
29
+ return runTimeout;
30
+ }, [clear, timerFunction, defaultTimeoutDurationMs]);
31
+ }
32
+ export function useTimeout(defaultTimeoutDurationMs = 0) {
33
+ return useTimer(defaultTimeoutDurationMs, setTimeout);
34
+ }
35
+ export function useInterval(defaultTimeoutDurationMs = 0) {
36
+ return useTimer(defaultTimeoutDurationMs, setInterval);
37
+ }
38
+ //# sourceMappingURL=useTimer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTimer.js","sourceRoot":"","sources":["../../../src/main/web/timers/useTimer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAa/B,MAAM,UAAU,QAAQ,CACpB,wBAAwB,GAAG,CAAC,EAC5B,gBAA+B,UAAU;IAEzC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAgC,SAAS,CAAC,CAAC;IACzE,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,CAAe,SAAS,CAAC,CAAC;IAE9D,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACjC,IAAI,SAAS,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;YAC5B,IAAI,aAAa,KAAK,UAAU,EAAE,CAAC;gBAC/B,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACJ,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACrC,CAAC;QACL,CAAC;QAED,IAAI,OAAO,eAAe,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;YAChD,eAAe,CAAC,OAAO,EAAE,CAAC;YAC1B,eAAe,CAAC,OAAO,GAAG,SAAS,CAAC;QACxC,CAAC;IACL,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEtC,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACtB,MAAM,UAAU,GAAG,CACf,cAAmC,EACnC,iBAAiB,GAAG,wBAAwB,EAChC,EAAE;YACd,KAAK,EAAE,CAAC;YACR,SAAS,CAAC,OAAO,GAAG,aAAa,CAAC,GAAG,EAAE;gBACnC,eAAe,CAAC,OAAO,GAAG,cAAc,EAAE,CAAC;YAC/C,CAAC,EAAE,iBAAiB,CAAC,CAAC;YACtB,OAAO,KAAK,CAAC;QACjB,CAAC,CAAC;QAEF,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC;QAE1B,OAAO,UAAU,CAAC;IACtB,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,wBAAwB,CAAC,CAAC,CAAC;AACzD,CAAC;AAID,MAAM,UAAU,UAAU,CAAC,wBAAwB,GAAG,CAAC;IACnD,OAAO,QAAQ,CAAC,wBAAwB,EAAE,UAAU,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,wBAAwB,GAAG,CAAC;IACpD,OAAO,QAAQ,CAAC,wBAAwB,EAAE,WAAW,CAAC,CAAC;AAC3D,CAAC"}
@@ -0,0 +1 @@
1
+ export { unreachable } from './unreachable';
@@ -0,0 +1,2 @@
1
+ export { unreachable } from './unreachable';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/main/web/ts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function unreachable(value: never): never;
@@ -0,0 +1,4 @@
1
+ export function unreachable(value) {
2
+ throw new TypeError(`Unexpected unreachable value [${value}]`);
3
+ }
4
+ //# sourceMappingURL=unreachable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unreachable.js","sourceRoot":"","sources":["../../../src/main/web/ts/unreachable.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,WAAW,CAAC,KAAY;IACpC,MAAM,IAAI,SAAS,CAAC,iCAAiC,KAAK,GAAG,CAAC,CAAC;AACnE,CAAC"}
@@ -0,0 +1 @@
1
+ export { useWindowFocusDetection } from './useWindowFocusDetection';