react-ui-basics 0.0.214 → 0.0.216

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-ui-basics",
3
- "version": "0.0.214",
3
+ "version": "0.0.216",
4
4
  "description": "",
5
5
  "module": "index.js",
6
6
  "_main": "index.cjs.js",
@@ -1,6 +1,6 @@
1
1
  import {UNDEFINED, isObject, deleteKey} from "../Tools";
2
2
 
3
- const FIELD_CHANGED = '__changed';
3
+ const FIELD_CHANGED = Symbol();
4
4
  const FIELD_BAKE = 'bake';
5
5
 
6
6
  export const createProxy = <T extends object>(target: T) => {
@@ -14,46 +14,62 @@ export const createProxy = <T extends object>(target: T) => {
14
14
  const initChangedValue = (target) => {
15
15
  !changedValue && (changedValue = Array.isArray(target) ? [...target] : {...target})
16
16
  };
17
+ const compile = (changedValue, innerProxies) => {
18
+ let result = changedValue || (Array.isArray(target) ? [...target] : {...target});
19
+ for (let key in innerProxies) {
20
+ result[key] = innerProxies[key][FIELD_BAKE]()
21
+ }
22
+ return result
23
+ }
17
24
  return new Proxy<T>(target, {
25
+ // get: (target: T, prop: string | symbol) => {
26
+ // if (prop === FIELD_CHANGED)
27
+ // return isChanged();
28
+ // if (prop === FIELD_BAKE) {
29
+ // return () =>
30
+ // !isChanged() ? target : (
31
+ // changedValue && !innerProxies ?
32
+ // changedValue :
33
+ // compile(changedValue, innerProxies)
34
+ // )
35
+ // }
36
+ //
37
+ // // console.log('get', {target, prop})
38
+ // const innerProxy = innerProxies && innerProxies[prop];
39
+ // if (innerProxy)
40
+ // return innerProxy
41
+ //
42
+ // const changed = changedValue && changedValue[prop]
43
+ // if (changed !== UNDEFINED)
44
+ // return changed
45
+ //
46
+ // if (deletedKeys && deletedKeys[prop])
47
+ // return UNDEFINED
48
+ //
49
+ // const value = target[prop];
50
+ // if (value && isObject(value)) {
51
+ // !innerProxies && (innerProxies = {})
52
+ // return innerProxies[prop] = createProxy(value)
53
+ // }
54
+ //
55
+ // return value;
56
+ // },
18
57
  get: (target: T, prop: string | symbol) => {
19
- if (prop === FIELD_CHANGED)
20
- return isChanged();
21
- if (prop === FIELD_BAKE) {
22
- return () => {
23
- // console.log('bake', changedValue, innerProxies)
24
- if (!isChanged())
25
- return target
26
-
27
- if (changedValue && !innerProxies)
28
- return changedValue
29
-
30
- let result = changedValue || (Array.isArray(target) ? [...target] : {...target});
31
- for (let key in innerProxies) {
32
- result[key] = innerProxies[key][FIELD_BAKE]()
33
- }
34
- return result
35
- }
36
- }
37
-
38
- // console.log('get', {target, prop})
39
- const innerProxy = innerProxies && innerProxies[prop];
40
- if (innerProxy)
41
- return innerProxy
42
-
43
- const changed = changedValue && changedValue[prop]
44
- if (changed !== UNDEFINED)
45
- return changed
46
-
47
- if (deletedKeys && deletedKeys[prop])
48
- return UNDEFINED
49
-
50
- const value = target[prop];
51
- if (value && isObject(value)) {
52
- !innerProxies && (innerProxies = {})
53
- return innerProxies[prop] = createProxy(value)
54
- }
55
-
56
- return value;
58
+ let value;
59
+ return prop === FIELD_CHANGED ? isChanged() : prop === FIELD_BAKE ? (() => !isChanged() ? target : (
60
+ changedValue && !innerProxies ?
61
+ changedValue :
62
+ compile(changedValue, innerProxies)
63
+ )) : (value = innerProxies && innerProxies[prop]) ?
64
+ value
65
+ : (value = changedValue && changedValue[prop]) !== UNDEFINED ?
66
+ value
67
+ : deletedKeys && deletedKeys[prop] ?
68
+ UNDEFINED
69
+ : ((value = target[prop]) && isObject(value) ?
70
+ (!innerProxies && (innerProxies = {}), innerProxies[prop] = createProxy(value))
71
+ : value
72
+ );
57
73
  },
58
74
  set: (target: T, prop, newval) => {
59
75
  // console.log('set', {target, prop, newval})
@@ -2,70 +2,71 @@ import {useEffect, useState} from "react";
2
2
  import {createProxy} from "./ProxyTools";
3
3
  import {isFunction, isObject} from "../Tools";
4
4
 
5
- interface Stores {
6
- [index: number]: any
7
- }
8
-
9
- let STORES: Stores = {}
10
- let COUNTER = 0
5
+ const STORES = new Map<Symbol, any>()
11
6
 
12
7
  type Setter<T> = (oldState: T) => T | void;
8
+ type ListenerFn = () => void;
9
+ type UnsubscribeFn = () => void;
13
10
 
14
11
  abstract class AbstractStore<T> {
15
12
  get: () => T;
16
13
  set: (setter: T | Partial<T> | (Setter<T>)) => void;
17
14
  reset: () => void;
18
- subscribe: (fn: () => void) => void;
19
- unsubscribe: (fn: () => void) => void;
15
+ /**
16
+ * Return unsubscribe function
17
+ *
18
+ * @returns unsubscribe function.
19
+ */
20
+ subscribe: (fn: ListenerFn) => UnsubscribeFn;
20
21
  toString: () => string;
21
22
  }
22
23
 
24
+
23
25
  export class Store<T> extends AbstractStore<T> {
24
26
 
25
27
  constructor(initialState: T, name?: string) {
26
28
  super()
27
29
  let that = this;
28
- let listeners: Array<() => void> = []
29
- let index = '' + COUNTER++;
30
+ let listeners: Map<Symbol, ListenerFn> = new Map<Symbol, () => void>()
31
+ let index = Symbol();
30
32
  let runListeners = () => {
31
- listeners.forEach(fn => fn())
33
+ for (let listener of listeners.values()) {
34
+ listener()
35
+ }
32
36
  };
33
37
 
34
- STORES[index] = initialState
38
+ let get = (): T => STORES.get(index);
39
+ let reset = () => {
40
+ STORES.set(index, initialState)
41
+ runListeners();
42
+ };
43
+ reset()
35
44
 
36
- that.unsubscribe = (fn: () => void) => {
37
- let i = listeners.indexOf(fn)
38
- let length = listeners.length;
39
- if (i > -1) {
40
- listeners[i] = listeners[length - 1]
41
- listeners.splice(length - 1, 1)
42
- }
43
- }
44
- that.get = (): T => STORES[index]
45
+ that.get = get
45
46
  that.set = (setter) => {
46
47
  let result;
47
48
  if (isFunction(setter)) {
48
- const proxy = createProxy(STORES[index]);
49
+ const proxy = createProxy(get() as object);
49
50
  result = (setter as Setter<T>)(proxy);
50
51
  if (!result || result === proxy)
51
52
  result = proxy.bake()
52
53
  } else if (isObject(setter)) {
53
- result = {...STORES[index], ...setter}
54
+ result = {...get(), ...setter}
54
55
  } else {
55
56
  result = setter
56
57
  }
57
58
 
58
- STORES[index] = result
59
+ STORES.set(index, result)
59
60
  runListeners();
60
61
  }
62
+ that.reset = reset
61
63
 
62
- that.reset = () => {
63
- STORES[index] = initialState
64
- runListeners();
65
- }
66
-
67
- that.subscribe = (fn: () => void) => {
68
- listeners.push(fn)
64
+ that.subscribe = (fn: ListenerFn) => {
65
+ const key = Symbol();
66
+ listeners.set(key, fn)
67
+ return () => {
68
+ listeners.delete(key)
69
+ }
69
70
  }
70
71
 
71
72
  that.toString = (): string => name;
@@ -78,22 +79,14 @@ export function getGlobalState() {
78
79
  return STORES
79
80
  }
80
81
 
81
- export function resetGlobalState() {
82
- STORES = {}
83
- }
84
-
85
- export function replaceGlobalState(state) {
86
- STORES = state
87
- }
88
-
89
-
90
82
  export type Selector<T, R> = (t: T) => R;
91
83
 
92
84
  export const defaultSelector = <T>(store: T): T => store;
93
85
 
94
- export function useStore<T, R>(store: Store<T>, selector: Selector<T, R>): R
95
- export function useStore<T>(store: Store<T>, selector?: undefined): T
96
- export function useStore<T, R>(store: Store<T>, selector?: Selector<T, R>): R {
86
+ export function useStore<T, R>(store: Store<T>, selector: Selector<T, R>, selectorDependencies: ReadonlyArray<any>): R
87
+ export function useStore<T, R>(store: Store<T>, selector: Selector<T, R>, selectorDependencies?: undefined): R
88
+ export function useStore<T>(store: Store<T>, selector?: undefined, selectorDependencies?: undefined): T
89
+ export function useStore<T, R>(store: Store<T>, selector?: Selector<T, R>, selectorDependencies: ReadonlyArray<any> = []): R {
97
90
  if (!selector)
98
91
  selector = (defaultSelector as Selector<T, R>)
99
92
 
@@ -103,12 +96,9 @@ export function useStore<T, R>(store: Store<T>, selector?: Selector<T, R>): R {
103
96
  const updateState = () => {
104
97
  setState(selector(store.get()))
105
98
  };
106
-
107
- store.subscribe(updateState)
108
- return () => {
109
- store.unsubscribe(updateState);
110
- }
111
- }, [])
99
+ updateState()
100
+ return store.subscribe(updateState)
101
+ }, selectorDependencies)
112
102
 
113
103
  return state
114
104
  }
@@ -1,6 +1,6 @@
1
- import ReactConstants from "./../ReactConstants"; import {clientHeight as __clientHeight, clientWidth as __clientWidth, createAccessor as __createAccessor, data as __data, height as __height, left as __left, length as __length, pageX as __pageX, pageY as __pageY, props as __props, scrollLeft as __scrollLeft, scrollTop as __scrollTop, state as __state, style as __style, target as __target, top as __top, value as __value, width as __width} from "./../CommonFields"; import {toConsumableArray as __toConsumableArray} from "./../_virtual/_rollupPluginBabelHelpers"; import {extends as __extends} from "./../_virtual/_rollupPluginBabelHelpers"; import {inherits as __inherits} from "./../_virtual/_rollupPluginBabelHelpers"; import { isObject, deleteKey, UNDEFINED } from '../Tools.js';
1
+ import ReactConstants from "./../ReactConstants"; import {clientHeight as __clientHeight, clientWidth as __clientWidth, createAccessor as __createAccessor, data as __data, height as __height, left as __left, length as __length, pageX as __pageX, pageY as __pageY, props as __props, scrollLeft as __scrollLeft, scrollTop as __scrollTop, state as __state, style as __style, target as __target, top as __top, value as __value, width as __width} from "./../CommonFields"; import {toConsumableArray as __toConsumableArray} from "./../_virtual/_rollupPluginBabelHelpers"; import {extends as __extends} from "./../_virtual/_rollupPluginBabelHelpers"; import {inherits as __inherits} from "./../_virtual/_rollupPluginBabelHelpers"; import { UNDEFINED, isObject, deleteKey } from '../Tools.js';
2
2
 
3
- const FIELD_CHANGED = '__changed';
3
+ const FIELD_CHANGED = Symbol();
4
4
  const FIELD_BAKE = 'bake';
5
5
  const createProxy = (target) => {
6
6
  if (!target)
@@ -12,39 +12,59 @@ const createProxy = (target) => {
12
12
  const initChangedValue = (target) => {
13
13
  !changedValue && (changedValue = Array.isArray(target) ? [...target] : __extends({}, target));
14
14
  };
15
+ const compile = (changedValue, innerProxies) => {
16
+ let result = changedValue || (Array.isArray(target) ? [...target] : __extends({}, target));
17
+ for (let key in innerProxies) {
18
+ result[key] = innerProxies[key][FIELD_BAKE]();
19
+ }
20
+ return result;
21
+ };
15
22
  return new Proxy(target, {
23
+ // get: (target: T, prop: string | symbol) => {
24
+ // if (prop === FIELD_CHANGED)
25
+ // return isChanged();
26
+ // if (prop === FIELD_BAKE) {
27
+ // return () =>
28
+ // !isChanged() ? target : (
29
+ // changedValue && !innerProxies ?
30
+ // changedValue :
31
+ // compile(changedValue, innerProxies)
32
+ // )
33
+ // }
34
+ //
35
+ // // console.log('get', {target, prop})
36
+ // const innerProxy = innerProxies && innerProxies[prop];
37
+ // if (innerProxy)
38
+ // return innerProxy
39
+ //
40
+ // const changed = changedValue && changedValue[prop]
41
+ // if (changed !== UNDEFINED)
42
+ // return changed
43
+ //
44
+ // if (deletedKeys && deletedKeys[prop])
45
+ // return UNDEFINED
46
+ //
47
+ // const value = target[prop];
48
+ // if (value && isObject(value)) {
49
+ // !innerProxies && (innerProxies = {})
50
+ // return innerProxies[prop] = createProxy(value)
51
+ // }
52
+ //
53
+ // return value;
54
+ // },
16
55
  get: (target, prop) => {
17
- if (prop === FIELD_CHANGED)
18
- return isChanged();
19
- if (prop === FIELD_BAKE) {
20
- return () => {
21
- // console.log('bake', changedValue, innerProxies)
22
- if (!isChanged())
23
- return target;
24
- if (changedValue && !innerProxies)
25
- return changedValue;
26
- let result = changedValue || (Array.isArray(target) ? [...target] : __extends({}, target));
27
- for (let key in innerProxies) {
28
- result[key] = innerProxies[key][FIELD_BAKE]();
29
- }
30
- return result;
31
- };
32
- }
33
- // console.log('get', {target, prop})
34
- const innerProxy = innerProxies && innerProxies[prop];
35
- if (innerProxy)
36
- return innerProxy;
37
- const changed = changedValue && changedValue[prop];
38
- if (changed !== UNDEFINED)
39
- return changed;
40
- if (deletedKeys && deletedKeys[prop])
41
- return UNDEFINED;
42
- const value = target[prop];
43
- if (value && isObject(value)) {
44
- !innerProxies && (innerProxies = {});
45
- return innerProxies[prop] = createProxy(value);
46
- }
47
- return value;
56
+ let value;
57
+ return prop === FIELD_CHANGED ? isChanged() : prop === FIELD_BAKE ? (() => !isChanged() ? target : (changedValue && !innerProxies ?
58
+ changedValue :
59
+ compile(changedValue, innerProxies))) : (value = innerProxies && innerProxies[prop]) ?
60
+ value
61
+ : (value = changedValue && changedValue[prop]) !== UNDEFINED ?
62
+ value
63
+ : deletedKeys && deletedKeys[prop] ?
64
+ UNDEFINED
65
+ : ((value = target[prop]) && isObject(value) ?
66
+ (!innerProxies && (innerProxies = {}), innerProxies[prop] = createProxy(value))
67
+ : value);
48
68
  },
49
69
  set: (target, prop, newval) => {
50
70
  // console.log('set', {target, prop, newval})
@@ -1 +1 @@
1
- {"version":3,"file":"ProxyTools.js","sources":["../src/store/ProxyTools.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ProxyTools.js","sources":["../src/store/ProxyTools.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
package/store/Store.d.ts CHANGED
@@ -1,23 +1,25 @@
1
- interface Stores {
2
- [index: number]: any;
3
- }
4
1
  declare type Setter<T> = (oldState: T) => T | void;
2
+ declare type ListenerFn = () => void;
3
+ declare type UnsubscribeFn = () => void;
5
4
  declare abstract class AbstractStore<T> {
6
5
  get: () => T;
7
6
  set: (setter: T | Partial<T> | (Setter<T>)) => void;
8
7
  reset: () => void;
9
- subscribe: (fn: () => void) => void;
10
- unsubscribe: (fn: () => void) => void;
8
+ /**
9
+ * Return unsubscribe function
10
+ *
11
+ * @returns unsubscribe function.
12
+ */
13
+ subscribe: (fn: ListenerFn) => UnsubscribeFn;
11
14
  toString: () => string;
12
15
  }
13
16
  export declare class Store<T> extends AbstractStore<T> {
14
17
  constructor(initialState: T, name?: string);
15
18
  }
16
19
  export default Store;
17
- export declare function getGlobalState(): Stores;
18
- export declare function resetGlobalState(): void;
19
- export declare function replaceGlobalState(state: any): void;
20
+ export declare function getGlobalState(): Map<Symbol, any>;
20
21
  export declare type Selector<T, R> = (t: T) => R;
21
22
  export declare const defaultSelector: <T>(store: T) => T;
22
- export declare function useStore<T, R>(store: Store<T>, selector: Selector<T, R>): R;
23
- export declare function useStore<T>(store: Store<T>, selector?: undefined): T;
23
+ export declare function useStore<T, R>(store: Store<T>, selector: Selector<T, R>, selectorDependencies: ReadonlyArray<any>): R;
24
+ export declare function useStore<T, R>(store: Store<T>, selector: Selector<T, R>, selectorDependencies?: undefined): R;
25
+ export declare function useStore<T>(store: Store<T>, selector?: undefined, selectorDependencies?: undefined): T;
package/store/Store.js CHANGED
@@ -2,52 +2,51 @@ import ReactConstants from "./../ReactConstants"; import {clientHeight as __clie
2
2
  import { createProxy } from './ProxyTools.js';
3
3
  import { isFunction, isObject } from '../Tools.js';
4
4
 
5
- let STORES = {};
6
- let COUNTER = 0;
5
+ const STORES = new Map();
7
6
  class AbstractStore {
8
7
  }
9
8
  class Store extends AbstractStore {
10
9
  constructor(initialState, name) {
11
10
  super();
12
11
  let that = this;
13
- let listeners = [];
14
- let index = '' + COUNTER++;
12
+ let listeners = new Map();
13
+ let index = Symbol();
15
14
  let runListeners = () => {
16
- listeners.forEach(fn => fn());
17
- };
18
- STORES[index] = initialState;
19
- that.unsubscribe = (fn) => {
20
- let i = listeners.indexOf(fn);
21
- let length = __length(listeners);
22
- if (i > -1) {
23
- listeners[i] = listeners[length - 1];
24
- listeners.splice(length - 1, 1);
15
+ for (let listener of listeners.values()) {
16
+ listener();
25
17
  }
26
18
  };
27
- that.get = () => STORES[index];
19
+ let get = () => STORES.get(index);
20
+ let reset = () => {
21
+ STORES.set(index, initialState);
22
+ runListeners();
23
+ };
24
+ reset();
25
+ that.get = get;
28
26
  that.set = (setter) => {
29
27
  let result;
30
28
  if (isFunction(setter)) {
31
- const proxy = createProxy(STORES[index]);
29
+ const proxy = createProxy(get());
32
30
  result = setter(proxy);
33
31
  if (!result || result === proxy)
34
32
  result = proxy.bake();
35
33
  }
36
34
  else if (isObject(setter)) {
37
- result = __extends(__extends({}, STORES[index]), setter);
35
+ result = __extends(__extends({}, get()), setter);
38
36
  }
39
37
  else {
40
38
  result = setter;
41
39
  }
42
- STORES[index] = result;
43
- runListeners();
44
- };
45
- that.reset = () => {
46
- STORES[index] = initialState;
40
+ STORES.set(index, result);
47
41
  runListeners();
48
42
  };
43
+ that.reset = reset;
49
44
  that.subscribe = (fn) => {
50
- listeners.push(fn);
45
+ const key = Symbol();
46
+ listeners.set(key, fn);
47
+ return () => {
48
+ listeners.delete(key);
49
+ };
51
50
  };
52
51
  that.toString = () => name;
53
52
  }
@@ -55,14 +54,8 @@ class Store extends AbstractStore {
55
54
  function getGlobalState() {
56
55
  return STORES;
57
56
  }
58
- function resetGlobalState() {
59
- STORES = {};
60
- }
61
- function replaceGlobalState(state) {
62
- STORES = state;
63
- }
64
57
  const defaultSelector = (store) => store;
65
- function useStore(store, selector) {
58
+ function useStore(store, selector, selectorDependencies = []) {
66
59
  if (!selector)
67
60
  selector = defaultSelector;
68
61
  const [state, setState] = useState(() => selector(store.get()));
@@ -70,13 +63,11 @@ function useStore(store, selector) {
70
63
  const updateState = () => {
71
64
  setState(selector(store.get()));
72
65
  };
73
- store.subscribe(updateState);
74
- return () => {
75
- store.unsubscribe(updateState);
76
- };
77
- }, []);
66
+ updateState();
67
+ return store.subscribe(updateState);
68
+ }, selectorDependencies);
78
69
  return state;
79
70
  }
80
71
 
81
- export { Store, Store as default, defaultSelector, getGlobalState, replaceGlobalState, resetGlobalState, useStore };
72
+ export { Store, Store as default, defaultSelector, getGlobalState, useStore };
82
73
  //# sourceMappingURL=Store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Store.js","sources":["../src/store/Store.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAQA,IAAI,MAAM,GAAW,EAAE,CAAA;AACvB,IAAI,OAAO,GAAG,CAAC,CAAA;AAIf,MAAe,aAAa,CAAA;AAO3B,CAAA;AAEK,MAAO,KAAS,SAAQ,aAAgB,CAAA;IAE1C,WAAY,CAAA,YAAe,EAAE,IAAa,EAAA;AACtC,QAAA,KAAK,EAAE,CAAA;QACP,IAAI,IAAI,GAAG,IAAI,CAAC;QAChB,IAAI,SAAS,GAAsB,EAAE,CAAA;AACrC,QAAA,IAAI,KAAK,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;QAC3B,IAAI,YAAY,GAAG,MAAK;YACpB,SAAS,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;AACjC,SAAC,CAAC;AAEF,QAAA,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,CAAA;AAE5B,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,EAAc,KAAI;YAClC,IAAI,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;AAC7B,YAAA,IAAI,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;AAC9B,YAAA,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE;gBACR,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;gBACpC,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;AAClC,aAAA;AACL,SAAC,CAAA;QACD,IAAI,CAAC,GAAG,GAAG,MAAS,MAAM,CAAC,KAAK,CAAC,CAAA;AACjC,QAAA,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,KAAI;AAClB,YAAA,IAAI,MAAM,CAAC;AACX,YAAA,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE;gBACpB,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACzC,gBAAA,MAAM,GAAI,MAAoB,CAAC,KAAK,CAAC,CAAC;AACtC,gBAAA,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,KAAK;AAC3B,oBAAA,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;AAC5B,aAAA;AAAM,iBAAA,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE;gBACzB,MAAM,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAO,MAAM,CAAC,KAAK,CAAC,CAAK,EAAA,MAAM,CAAC,CAAA;AACzC,aAAA;AAAM,iBAAA;gBACH,MAAM,GAAG,MAAM,CAAA;AAClB,aAAA;AAED,YAAA,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAA;AACtB,YAAA,YAAY,EAAE,CAAC;AACnB,SAAC,CAAA;AAED,QAAA,IAAI,CAAC,KAAK,GAAG,MAAK;AACd,YAAA,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,CAAA;AAC5B,YAAA,YAAY,EAAE,CAAC;AACnB,SAAC,CAAA;AAED,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,EAAc,KAAI;AAChC,YAAA,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACtB,SAAC,CAAA;AAED,QAAA,IAAI,CAAC,QAAQ,GAAG,MAAc,IAAI,CAAC;KACtC;AACJ,CAAA;SAIe,cAAc,GAAA;AAC1B,IAAA,OAAO,MAAM,CAAA;AACjB,CAAC;SAEe,gBAAgB,GAAA;IAC5B,MAAM,GAAG,EAAE,CAAA;AACf,CAAC;AAEK,SAAU,kBAAkB,CAAC,KAAK,EAAA;IACpC,MAAM,GAAG,KAAK,CAAA;AAClB,CAAC;AAKY,MAAA,eAAe,GAAG,CAAI,KAAQ,KAAQ,MAAM;AAIzC,SAAA,QAAQ,CAAO,KAAe,EAAE,QAAyB,EAAA;AACrE,IAAA,IAAI,CAAC,QAAQ;QACT,QAAQ,GAAI,eAAkC,CAAA;AAElD,IAAA,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IAE/D,SAAS,CAAC,MAAK;QACX,MAAM,WAAW,GAAG,MAAK;YACrB,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;AACnC,SAAC,CAAC;AAEF,QAAA,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;AAC5B,QAAA,OAAO,MAAK;AACR,YAAA,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;AACnC,SAAC,CAAA;KACJ,EAAE,EAAE,CAAC,CAAA;AAEN,IAAA,OAAO,KAAK,CAAA;AAChB;;;;"}
1
+ {"version":3,"file":"Store.js","sources":["../src/store/Store.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}