@elliemae/ds-zustand-helpers 3.14.0-next.12

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.
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
24
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
25
+ var AutoUpdater_exports = {};
26
+ __export(AutoUpdater_exports, {
27
+ AutoUpdaterComponent: () => AutoUpdaterComponent
28
+ });
29
+ module.exports = __toCommonJS(AutoUpdater_exports);
30
+ var React = __toESM(require("react"));
31
+ var import_jsx_runtime = require("react/jsx-runtime");
32
+ var import_react = require("react");
33
+ const getPropsSetter = (state) => state.set;
34
+ const getInternalSetter = (state) => state.set;
35
+ const AutoUpdaterComponent = (props) => {
36
+ const { usePropsStore, useInternalStore, autoCalculatedData, propsWithDefault, Component } = props;
37
+ const setProps = usePropsStore(getPropsSetter);
38
+ const setInternal = useInternalStore(getInternalSetter);
39
+ (0, import_react.useEffect)(() => {
40
+ setProps({ ...propsWithDefault });
41
+ }, [propsWithDefault, setProps]);
42
+ (0, import_react.useEffect)(() => {
43
+ setInternal(autoCalculatedData);
44
+ }, [setInternal, autoCalculatedData]);
45
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, {});
46
+ };
47
+ //# sourceMappingURL=AutoUpdater.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/AutoUpdater.tsx", "../../../../scripts/build/transpile/react-shim.js"],
4
+ "sourcesContent": ["import React, { useEffect } from 'react';\nimport type { ZustandT } from './types';\n\nconst getPropsSetter = <P extends object>(state: ZustandT.PropsStore<P>) => state.set;\nconst getInternalSetter = <A extends object, C extends object, S extends object, R extends object>(\n state: ZustandT.InternalStore<A, C, S, R>,\n) => state.set;\n\nexport const AutoUpdaterComponent: ZustandT.AutoUpdaterComponentT = (props) => {\n const { usePropsStore, useInternalStore, autoCalculatedData, propsWithDefault, Component } = props;\n const setProps = usePropsStore(getPropsSetter);\n const setInternal = useInternalStore(getInternalSetter);\n\n useEffect(() => {\n setProps({ ...propsWithDefault });\n }, [propsWithDefault, setProps]);\n\n useEffect(() => {\n setInternal(autoCalculatedData);\n }, [setInternal, autoCalculatedData]);\n\n return <Component />;\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADqBd;AArBT,mBAAiC;AAGjC,MAAM,iBAAiB,CAAmB,UAAkC,MAAM;AAClF,MAAM,oBAAoB,CACxB,UACG,MAAM;AAEJ,MAAM,uBAAuD,CAAC,UAAU;AAC7E,QAAM,EAAE,eAAe,kBAAkB,oBAAoB,kBAAkB,UAAU,IAAI;AAC7F,QAAM,WAAW,cAAc,cAAc;AAC7C,QAAM,cAAc,iBAAiB,iBAAiB;AAEtD,8BAAU,MAAM;AACd,aAAS,EAAE,GAAG,iBAAiB,CAAC;AAAA,EAClC,GAAG,CAAC,kBAAkB,QAAQ,CAAC;AAE/B,8BAAU,MAAM;AACd,gBAAY,kBAAkB;AAAA,EAChC,GAAG,CAAC,aAAa,kBAAkB,CAAC;AAEpC,SAAO,4CAAC,aAAU;AACpB;",
6
+ "names": []
7
+ }
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
24
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
25
+ var createInternalAndPropsContext_exports = {};
26
+ __export(createInternalAndPropsContext_exports, {
27
+ createInternalAndPropsContext: () => createInternalAndPropsContext
28
+ });
29
+ module.exports = __toCommonJS(createInternalAndPropsContext_exports);
30
+ var React = __toESM(require("react"));
31
+ var import_context = __toESM(require("zustand/context"));
32
+ const createInternalAndPropsContext = () => {
33
+ const { Provider: PropsProvider, useStore: usePropsStore } = (0, import_context.default)();
34
+ const { Provider: InternalProvider, useStore: useInternalStore } = (0, import_context.default)();
35
+ return { PropsProvider, usePropsStore, InternalProvider, useInternalStore };
36
+ };
37
+ //# sourceMappingURL=createInternalAndPropsContext.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/createInternalAndPropsContext.ts", "../../../../scripts/build/transpile/react-shim.js"],
4
+ "sourcesContent": ["import createContext from 'zustand/context';\nimport type { ZustandT } from './types';\n\nexport const createInternalAndPropsContext = <\n P extends object,\n A extends object,\n C extends object,\n S extends object,\n R extends object,\n>() => {\n const { Provider: PropsProvider, useStore: usePropsStore } =\n createContext<ZustandT.ZustandStore<ZustandT.PropsStore<P>>>();\n const { Provider: InternalProvider, useStore: useInternalStore } =\n createContext<ZustandT.ZustandStore<ZustandT.InternalStore<A, C, S, R>>>();\n\n return { PropsProvider, usePropsStore, InternalProvider, useInternalStore };\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB,qBAA0B;AAGnB,MAAM,gCAAgC,MAMtC;AACL,QAAM,EAAE,UAAU,eAAe,UAAU,cAAc,QACvD,eAAAA,SAA6D;AAC/D,QAAM,EAAE,UAAU,kBAAkB,UAAU,iBAAiB,QAC7D,eAAAA,SAAyE;AAE3E,SAAO,EAAE,eAAe,eAAe,kBAAkB,iBAAiB;AAC5E;",
6
+ "names": ["createContext"]
7
+ }
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
24
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
25
+ var src_exports = {};
26
+ __export(src_exports, {
27
+ createInternalAndPropsContext: () => import_createInternalAndPropsContext.createInternalAndPropsContext,
28
+ withZustand: () => import_withZustand.withZustand
29
+ });
30
+ module.exports = __toCommonJS(src_exports);
31
+ var React = __toESM(require("react"));
32
+ var import_createInternalAndPropsContext = require("./createInternalAndPropsContext");
33
+ var import_withZustand = require("./withZustand");
34
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/index.ts", "../../../../scripts/build/transpile/react-shim.js"],
4
+ "sourcesContent": ["export { createInternalAndPropsContext } from './createInternalAndPropsContext';\nexport { withZustand } from './withZustand';\nexport type { ZustandT } from './types';\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB,2CAA8C;AAC9C,yBAA4B;",
6
+ "names": []
7
+ }
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") {
10
+ for (let key of __getOwnPropNames(from))
11
+ if (!__hasOwnProp.call(to, key) && key !== except)
12
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
+ }
14
+ return to;
15
+ };
16
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
17
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
18
+ mod
19
+ ));
20
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
21
+ var types_exports = {};
22
+ module.exports = __toCommonJS(types_exports);
23
+ var React = __toESM(require("react"));
24
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/types.ts", "../../../../scripts/build/transpile/react-shim.js"],
4
+ "sourcesContent": ["/* eslint-disable no-use-before-define */\nimport type { StoreApi, UseBoundStore } from 'zustand';\nimport type createContext from 'zustand/context';\n\n// U is a generic assigned to the user props for clarity\n// P is a generic assigned to the internal props for clarity\n// A is a generic assigned to the atoms for clarity\n// C is a generic assigned to the auto-calculated values for clarity\n// S is a generic assigned to selectors for clarity\n// R is a generic assigned to reducers for clarity\n\nexport namespace ZustandT {\n export type ZustandStore<T> = UseBoundStore<StoreApi<T>>;\n\n export type Getter<T> = StoreApi<T>['getState'];\n export type Setter<T> = StoreApi<T>['setState'];\n\n export type InternalStore<A extends object, C extends object, S extends object, R extends object> = A &\n AtomGetters<A> &\n AtomSetters<A, C, S, R> &\n C &\n S &\n R & {\n set: Setter<InternalStore<A, C, S, R>>;\n };\n\n export type PropsStore<T> = T & {\n set: Setter<PropsStore<T>>;\n };\n\n export type AtomGetters<A extends object> = {\n [key in keyof A as `get${Capitalize<string & key>}`]: () => A[key];\n };\n\n export type AtomSetters<A extends object, C extends object, S extends object, R extends object> = {\n [key in keyof A as `set${Capitalize<string & key>}`]: (\n newVal: A[key] | ((arg: A[key], store: InternalStore<A, C, S, R>) => A[key]),\n ) => void;\n };\n\n export type SelectorObject<T, S extends object> = (get: Getter<T>) => S;\n export type ReducerObject<T, R extends object> = (get: Getter<T>, set: Setter<T>) => R;\n\n export type InternalParameters<A extends object, C extends object, S extends object, R extends object> = {\n internalAtomDefaultValues: A;\n autoCalculatedData: C;\n selectors: SelectorObject<InternalStore<A, C, S, R>, S>;\n reducers: ReducerObject<InternalStore<A, C, S, R>, R>;\n };\n\n export type InternalAndPropsContext<\n P extends object,\n A extends object,\n C extends object,\n S extends object,\n R extends object,\n > = {\n PropsProvider: ReturnType<typeof createContext<ZustandStore<PropsStore<P>>>>['Provider'];\n usePropsStore: ReturnType<typeof createContext<ZustandStore<PropsStore<P>>>>['useStore'];\n InternalProvider: ReturnType<typeof createContext<ZustandStore<InternalStore<A, C, S, R>>>>['Provider'];\n useInternalStore: ReturnType<typeof createContext<ZustandStore<InternalStore<A, C, S, R>>>>['useStore'];\n };\n\n export type Config<P extends object, A extends object, C extends object, S extends object, R extends object> = {\n defaultProps: P;\n internalAtomDefaultValues: A;\n useAutoCalculated: (props: P) => C;\n selectors?: SelectorObject<InternalStore<A, C, S, R>, S>;\n reducers?: ReducerObject<InternalStore<A, C, S, R>, R>;\n } & InternalAndPropsContext<P, A, C, S, R>;\n\n export type AutoUpdaterComponentT = <\n P extends object,\n A extends object,\n C extends object,\n S extends object,\n R extends object,\n >(\n props: Pick<Config<P, A, C, S, R>, 'usePropsStore' | 'useInternalStore'> & { autoCalculatedData: C } & {\n propsWithDefault: P;\n } & { Component: React.ComponentType<Record<string, never>> },\n ) => JSX.Element;\n}\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;ACAA,YAAuB;",
6
+ "names": []
7
+ }
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
24
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
25
+ var useInternalStoreCreator_exports = {};
26
+ __export(useInternalStoreCreator_exports, {
27
+ useInternalStoreCreator: () => useInternalStoreCreator
28
+ });
29
+ module.exports = __toCommonJS(useInternalStoreCreator_exports);
30
+ var React = __toESM(require("react"));
31
+ var import_react = require("react");
32
+ var import_zustand = __toESM(require("zustand"));
33
+ const capitalize = (str) => str.charAt(0).toUpperCase() + str.slice(1);
34
+ const getKeys = (obj) => Object.keys(obj);
35
+ const createInternalStore = ({
36
+ internalAtomDefaultValues,
37
+ autoCalculatedData,
38
+ selectors,
39
+ reducers
40
+ }) => {
41
+ const store = (0, import_zustand.default)((set, get) => {
42
+ const internalAtomGetters = {};
43
+ getKeys(internalAtomDefaultValues).forEach((key) => {
44
+ const keyForGetter = `get${capitalize(key)}`;
45
+ const getter = () => get()[key];
46
+ internalAtomGetters[keyForGetter] = getter;
47
+ });
48
+ const internalAtomSetters = {};
49
+ getKeys(internalAtomDefaultValues).forEach((key) => {
50
+ const keyForSetter = `set${capitalize(key)}`;
51
+ const setter = (newVal) => {
52
+ if (typeof newVal === "function") {
53
+ set({ [key]: newVal(get()[key], get()) });
54
+ } else {
55
+ set({ [key]: newVal });
56
+ }
57
+ };
58
+ internalAtomSetters[keyForSetter] = setter;
59
+ });
60
+ return {
61
+ ...internalAtomDefaultValues,
62
+ ...internalAtomGetters,
63
+ ...internalAtomSetters,
64
+ ...autoCalculatedData,
65
+ ...selectors(get),
66
+ ...reducers(get, set),
67
+ set
68
+ };
69
+ });
70
+ return store;
71
+ };
72
+ const useInternalStoreCreator = ({
73
+ internalAtomDefaultValues,
74
+ autoCalculatedData,
75
+ selectors,
76
+ reducers
77
+ }) => {
78
+ const storeCreator = (0, import_react.useCallback)(
79
+ () => createInternalStore({ internalAtomDefaultValues, autoCalculatedData, selectors, reducers }),
80
+ [internalAtomDefaultValues, autoCalculatedData, selectors, reducers]
81
+ );
82
+ return storeCreator;
83
+ };
84
+ //# sourceMappingURL=useInternalStoreCreator.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/useInternalStoreCreator.ts", "../../../../scripts/build/transpile/react-shim.js"],
4
+ "sourcesContent": ["import { useCallback } from 'react';\nimport create from 'zustand';\nimport type { ZustandT } from './types';\n\nconst capitalize = (str: string) => str.charAt(0).toUpperCase() + str.slice(1);\n\nconst getKeys = <T extends object>(obj: T) => Object.keys(obj) as (keyof T)[];\n\n// Function that will create the store, putting:\n// 1) the atoms\n// 2) the setters for the atoms (which we auto-calculate)\n// 3) the auto-calculated values\n// 4) the set function\n// The store is fully typed, and the setters are typed as well\nconst createInternalStore = <A extends object, C extends object, S extends object, R extends object>({\n internalAtomDefaultValues,\n autoCalculatedData,\n selectors,\n reducers,\n}: ZustandT.InternalParameters<A, C, S, R>) => {\n const store = create<ZustandT.InternalStore<A, C, S, R>>((set, get) => {\n // We build the getters\n const internalAtomGetters: ZustandT.AtomGetters<A> = {} as ZustandT.AtomGetters<A>;\n\n getKeys(internalAtomDefaultValues).forEach((key) => {\n const keyForGetter = `get${capitalize(key as string)}` as keyof ZustandT.AtomGetters<A>;\n\n const getter = (() => get()[key]) as ZustandT.AtomGetters<A>[keyof ZustandT.AtomGetters<A>];\n\n internalAtomGetters[keyForGetter] = getter;\n });\n\n // We build the setters\n const internalAtomSetters: ZustandT.AtomSetters<A, C, S, R> = {} as ZustandT.AtomSetters<A, C, S, R>;\n\n getKeys(internalAtomDefaultValues).forEach((key) => {\n const keyForSetter = `set${capitalize(key as string)}` as keyof ZustandT.AtomSetters<A, C, S, R>;\n\n const setter = ((newVal: A[typeof key]) => {\n if (typeof newVal === 'function') {\n // If it's a function, we call it with the current store value, and the full store. We try to mimic react-setState's behavior\n set({ [key]: newVal(get()[key], get()) as A[typeof key] } as Partial<ZustandT.InternalStore<A, C, S, R>>);\n } else {\n // We just received the new value, set it\n set({ [key]: newVal } as Partial<ZustandT.InternalStore<A, C, S, R>>);\n }\n }) as ZustandT.AtomSetters<A, C, S, R>[keyof ZustandT.AtomSetters<A, C, S, R>];\n\n // We add the setter to the internalAtomSetters object\n internalAtomSetters[keyForSetter] = setter;\n });\n\n return {\n ...internalAtomDefaultValues,\n ...internalAtomGetters,\n ...internalAtomSetters,\n ...autoCalculatedData,\n ...selectors(get),\n ...reducers(get, set),\n set,\n };\n });\n\n return store;\n};\n\nexport const useInternalStoreCreator = <A extends object, C extends object, S extends object, R extends object>({\n internalAtomDefaultValues,\n autoCalculatedData,\n selectors,\n reducers,\n}: ZustandT.InternalParameters<A, C, S, R>) => {\n const storeCreator = useCallback(\n () => createInternalStore({ internalAtomDefaultValues, autoCalculatedData, selectors, reducers }),\n [internalAtomDefaultValues, autoCalculatedData, selectors, reducers],\n );\n\n return storeCreator;\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB,mBAA4B;AAC5B,qBAAmB;AAGnB,MAAM,aAAa,CAAC,QAAgB,IAAI,OAAO,CAAC,EAAE,YAAY,IAAI,IAAI,MAAM,CAAC;AAE7E,MAAM,UAAU,CAAmB,QAAW,OAAO,KAAK,GAAG;AAQ7D,MAAM,sBAAsB,CAAyE;AAAA,EACnG;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA+C;AAC7C,QAAM,YAAQ,eAAAA,SAA2C,CAAC,KAAK,QAAQ;AAErE,UAAM,sBAA+C,CAAC;AAEtD,YAAQ,yBAAyB,EAAE,QAAQ,CAAC,QAAQ;AAClD,YAAM,eAAe,MAAM,WAAW,GAAa;AAEnD,YAAM,SAAU,MAAM,IAAI,EAAE;AAE5B,0BAAoB,gBAAgB;AAAA,IACtC,CAAC;AAGD,UAAM,sBAAwD,CAAC;AAE/D,YAAQ,yBAAyB,EAAE,QAAQ,CAAC,QAAQ;AAClD,YAAM,eAAe,MAAM,WAAW,GAAa;AAEnD,YAAM,SAAU,CAAC,WAA0B;AACzC,YAAI,OAAO,WAAW,YAAY;AAEhC,cAAI,EAAE,CAAC,MAAM,OAAO,IAAI,EAAE,MAAM,IAAI,CAAC,EAAmB,CAAgD;AAAA,QAC1G,OAAO;AAEL,cAAI,EAAE,CAAC,MAAM,OAAO,CAAgD;AAAA,QACtE;AAAA,MACF;AAGA,0BAAoB,gBAAgB;AAAA,IACtC,CAAC;AAED,WAAO;AAAA,MACL,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG,UAAU,GAAG;AAAA,MAChB,GAAG,SAAS,KAAK,GAAG;AAAA,MACpB;AAAA,IACF;AAAA,EACF,CAAC;AAED,SAAO;AACT;AAEO,MAAM,0BAA0B,CAAyE;AAAA,EAC9G;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA+C;AAC7C,QAAM,mBAAe;AAAA,IACnB,MAAM,oBAAoB,EAAE,2BAA2B,oBAAoB,WAAW,SAAS,CAAC;AAAA,IAChG,CAAC,2BAA2B,oBAAoB,WAAW,QAAQ;AAAA,EACrE;AAEA,SAAO;AACT;",
6
+ "names": ["create"]
7
+ }
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
24
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
25
+ var usePropsStoreCreator_exports = {};
26
+ __export(usePropsStoreCreator_exports, {
27
+ usePropsStoreCreator: () => usePropsStoreCreator
28
+ });
29
+ module.exports = __toCommonJS(usePropsStoreCreator_exports);
30
+ var React = __toESM(require("react"));
31
+ var import_react = require("react");
32
+ var import_zustand = __toESM(require("zustand"));
33
+ const createPropsStore = (propsWithDefault) => (0, import_zustand.default)((set) => ({
34
+ set,
35
+ ...propsWithDefault
36
+ }));
37
+ const usePropsStoreCreator = (props) => {
38
+ const storeCreator = (0, import_react.useCallback)(() => createPropsStore(props), []);
39
+ return storeCreator;
40
+ };
41
+ //# sourceMappingURL=usePropsStoreCreator.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/usePropsStoreCreator.ts", "../../../../scripts/build/transpile/react-shim.js"],
4
+ "sourcesContent": ["import { useCallback } from 'react';\nimport create from 'zustand';\nimport type { ZustandT } from './types';\n\nconst createPropsStore = <T extends object>(propsWithDefault: T) =>\n create<ZustandT.PropsStore<T>>((set) => ({\n set,\n ...propsWithDefault,\n }));\n\nexport const usePropsStoreCreator = <P extends object>(props: P) => {\n // we want to memoize the creation of the store,\n // it doesn't make sense to create a new store every time the props change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const storeCreator = useCallback(() => createPropsStore(props), []);\n\n return storeCreator;\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB,mBAA4B;AAC5B,qBAAmB;AAGnB,MAAM,mBAAmB,CAAmB,yBAC1C,eAAAA,SAA+B,CAAC,SAAS;AAAA,EACvC;AAAA,EACA,GAAG;AACL,EAAE;AAEG,MAAM,uBAAuB,CAAmB,UAAa;AAIlE,QAAM,mBAAe,0BAAY,MAAM,iBAAiB,KAAK,GAAG,CAAC,CAAC;AAElE,SAAO;AACT;",
6
+ "names": ["create"]
7
+ }
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
24
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
25
+ var withZustand_exports = {};
26
+ __export(withZustand_exports, {
27
+ withZustand: () => withZustand
28
+ });
29
+ module.exports = __toCommonJS(withZustand_exports);
30
+ var React = __toESM(require("react"));
31
+ var import_jsx_runtime = require("react/jsx-runtime");
32
+ var import_ds_utilities = require("@elliemae/ds-utilities");
33
+ var import_useInternalStoreCreator = require("./useInternalStoreCreator");
34
+ var import_usePropsStoreCreator = require("./usePropsStoreCreator");
35
+ var import_AutoUpdater = require("./AutoUpdater");
36
+ const noopish = () => ({});
37
+ const withZustand = (Component, config) => {
38
+ const {
39
+ defaultProps,
40
+ internalAtomDefaultValues,
41
+ useAutoCalculated,
42
+ selectors = noopish,
43
+ reducers = noopish,
44
+ PropsProvider,
45
+ InternalProvider,
46
+ usePropsStore,
47
+ useInternalStore
48
+ } = config;
49
+ const ComponentWithStore = (props) => {
50
+ const propsWithDefault = (0, import_ds_utilities.useMemoMergePropsWithDefault)(props, defaultProps);
51
+ const autoCalculatedData = useAutoCalculated(propsWithDefault);
52
+ const internalStoreCreator = (0, import_useInternalStoreCreator.useInternalStoreCreator)({
53
+ internalAtomDefaultValues,
54
+ autoCalculatedData,
55
+ selectors,
56
+ reducers
57
+ });
58
+ const propsStoreCreator = (0, import_usePropsStoreCreator.usePropsStoreCreator)(propsWithDefault);
59
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(PropsProvider, { createStore: propsStoreCreator, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(InternalProvider, { createStore: internalStoreCreator, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
60
+ import_AutoUpdater.AutoUpdaterComponent,
61
+ {
62
+ Component,
63
+ usePropsStore,
64
+ useInternalStore,
65
+ autoCalculatedData,
66
+ propsWithDefault
67
+ }
68
+ ) }) });
69
+ };
70
+ return ComponentWithStore;
71
+ };
72
+ //# sourceMappingURL=withZustand.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/withZustand.tsx", "../../../../scripts/build/transpile/react-shim.js"],
4
+ "sourcesContent": ["/* eslint-disable indent */\nimport { useMemoMergePropsWithDefault } from '@elliemae/ds-utilities';\nimport { useInternalStoreCreator } from './useInternalStoreCreator';\nimport { usePropsStoreCreator } from './usePropsStoreCreator';\nimport { AutoUpdaterComponent } from './AutoUpdater';\nimport type { ZustandT } from './types';\n\nconst noopish = <T extends object>() => ({} as T);\n\nexport const withZustand = <\n U extends object,\n P extends object,\n A extends object,\n C extends object,\n S extends object,\n R extends object,\n>(\n Component: React.ComponentType<Record<string, never>>,\n config: ZustandT.Config<P, A, C, S, R>,\n) => {\n const {\n defaultProps,\n internalAtomDefaultValues,\n useAutoCalculated,\n selectors = noopish,\n reducers = noopish,\n PropsProvider,\n InternalProvider,\n usePropsStore,\n useInternalStore,\n } = config;\n\n const ComponentWithStore = (props: U) => {\n const propsWithDefault = useMemoMergePropsWithDefault<P>(props, defaultProps);\n\n const autoCalculatedData = useAutoCalculated(propsWithDefault);\n\n const internalStoreCreator = useInternalStoreCreator({\n internalAtomDefaultValues,\n autoCalculatedData,\n selectors,\n reducers,\n });\n\n const propsStoreCreator = usePropsStoreCreator(propsWithDefault);\n\n return (\n <PropsProvider createStore={propsStoreCreator}>\n <InternalProvider createStore={internalStoreCreator}>\n <AutoUpdaterComponent\n Component={Component}\n usePropsStore={usePropsStore}\n useInternalStore={useInternalStore}\n autoCalculatedData={autoCalculatedData}\n propsWithDefault={propsWithDefault}\n />\n </InternalProvider>\n </PropsProvider>\n );\n };\n return ComponentWithStore;\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADiDb;AAhDV,0BAA6C;AAC7C,qCAAwC;AACxC,kCAAqC;AACrC,yBAAqC;AAGrC,MAAM,UAAU,OAAyB,CAAC;AAEnC,MAAM,cAAc,CAQzB,WACA,WACG;AACH,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY;AAAA,IACZ,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,QAAM,qBAAqB,CAAC,UAAa;AACvC,UAAM,uBAAmB,kDAAgC,OAAO,YAAY;AAE5E,UAAM,qBAAqB,kBAAkB,gBAAgB;AAE7D,UAAM,2BAAuB,wDAAwB;AAAA,MACnD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAED,UAAM,wBAAoB,kDAAqB,gBAAgB;AAE/D,WACE,4CAAC,iBAAc,aAAa,mBAC1B,sDAAC,oBAAiB,aAAa,sBAC7B;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACF,GACF,GACF;AAAA,EAEJ;AACA,SAAO;AACT;",
6
+ "names": []
7
+ }
@@ -0,0 +1,21 @@
1
+ import * as React from "react";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { useEffect } from "react";
4
+ const getPropsSetter = (state) => state.set;
5
+ const getInternalSetter = (state) => state.set;
6
+ const AutoUpdaterComponent = (props) => {
7
+ const { usePropsStore, useInternalStore, autoCalculatedData, propsWithDefault, Component } = props;
8
+ const setProps = usePropsStore(getPropsSetter);
9
+ const setInternal = useInternalStore(getInternalSetter);
10
+ useEffect(() => {
11
+ setProps({ ...propsWithDefault });
12
+ }, [propsWithDefault, setProps]);
13
+ useEffect(() => {
14
+ setInternal(autoCalculatedData);
15
+ }, [setInternal, autoCalculatedData]);
16
+ return /* @__PURE__ */ jsx(Component, {});
17
+ };
18
+ export {
19
+ AutoUpdaterComponent
20
+ };
21
+ //# sourceMappingURL=AutoUpdater.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../scripts/build/transpile/react-shim.js", "../../src/AutoUpdater.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React, { useEffect } from 'react';\nimport type { ZustandT } from './types';\n\nconst getPropsSetter = <P extends object>(state: ZustandT.PropsStore<P>) => state.set;\nconst getInternalSetter = <A extends object, C extends object, S extends object, R extends object>(\n state: ZustandT.InternalStore<A, C, S, R>,\n) => state.set;\n\nexport const AutoUpdaterComponent: ZustandT.AutoUpdaterComponentT = (props) => {\n const { usePropsStore, useInternalStore, autoCalculatedData, propsWithDefault, Component } = props;\n const setProps = usePropsStore(getPropsSetter);\n const setInternal = useInternalStore(getInternalSetter);\n\n useEffect(() => {\n setProps({ ...propsWithDefault });\n }, [propsWithDefault, setProps]);\n\n useEffect(() => {\n setInternal(autoCalculatedData);\n }, [setInternal, autoCalculatedData]);\n\n return <Component />;\n};\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;ACqBd;AArBT,SAAgB,iBAAiB;AAGjC,MAAM,iBAAiB,CAAmB,UAAkC,MAAM;AAClF,MAAM,oBAAoB,CACxB,UACG,MAAM;AAEJ,MAAM,uBAAuD,CAAC,UAAU;AAC7E,QAAM,EAAE,eAAe,kBAAkB,oBAAoB,kBAAkB,UAAU,IAAI;AAC7F,QAAM,WAAW,cAAc,cAAc;AAC7C,QAAM,cAAc,iBAAiB,iBAAiB;AAEtD,YAAU,MAAM;AACd,aAAS,EAAE,GAAG,iBAAiB,CAAC;AAAA,EAClC,GAAG,CAAC,kBAAkB,QAAQ,CAAC;AAE/B,YAAU,MAAM;AACd,gBAAY,kBAAkB;AAAA,EAChC,GAAG,CAAC,aAAa,kBAAkB,CAAC;AAEpC,SAAO,oBAAC,aAAU;AACpB;",
6
+ "names": []
7
+ }
@@ -0,0 +1,11 @@
1
+ import * as React from "react";
2
+ import createContext from "zustand/context";
3
+ const createInternalAndPropsContext = () => {
4
+ const { Provider: PropsProvider, useStore: usePropsStore } = createContext();
5
+ const { Provider: InternalProvider, useStore: useInternalStore } = createContext();
6
+ return { PropsProvider, usePropsStore, InternalProvider, useInternalStore };
7
+ };
8
+ export {
9
+ createInternalAndPropsContext
10
+ };
11
+ //# sourceMappingURL=createInternalAndPropsContext.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../scripts/build/transpile/react-shim.js", "../../src/createInternalAndPropsContext.ts"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import createContext from 'zustand/context';\nimport type { ZustandT } from './types';\n\nexport const createInternalAndPropsContext = <\n P extends object,\n A extends object,\n C extends object,\n S extends object,\n R extends object,\n>() => {\n const { Provider: PropsProvider, useStore: usePropsStore } =\n createContext<ZustandT.ZustandStore<ZustandT.PropsStore<P>>>();\n const { Provider: InternalProvider, useStore: useInternalStore } =\n createContext<ZustandT.ZustandStore<ZustandT.InternalStore<A, C, S, R>>>();\n\n return { PropsProvider, usePropsStore, InternalProvider, useInternalStore };\n};\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;ACAvB,OAAO,mBAAmB;AAGnB,MAAM,gCAAgC,MAMtC;AACL,QAAM,EAAE,UAAU,eAAe,UAAU,cAAc,IACvD,cAA6D;AAC/D,QAAM,EAAE,UAAU,kBAAkB,UAAU,iBAAiB,IAC7D,cAAyE;AAE3E,SAAO,EAAE,eAAe,eAAe,kBAAkB,iBAAiB;AAC5E;",
6
+ "names": []
7
+ }
@@ -0,0 +1,8 @@
1
+ import * as React from "react";
2
+ import { createInternalAndPropsContext } from "./createInternalAndPropsContext";
3
+ import { withZustand } from "./withZustand";
4
+ export {
5
+ createInternalAndPropsContext,
6
+ withZustand
7
+ };
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../scripts/build/transpile/react-shim.js", "../../src/index.ts"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "export { createInternalAndPropsContext } from './createInternalAndPropsContext';\nexport { withZustand } from './withZustand';\nexport type { ZustandT } from './types';\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;ACAvB,SAAS,qCAAqC;AAC9C,SAAS,mBAAmB;",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import * as React from "react";
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../scripts/build/transpile/react-shim.js"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;",
6
+ "names": []
7
+ }
@@ -0,0 +1,58 @@
1
+ import * as React from "react";
2
+ import { useCallback } from "react";
3
+ import create from "zustand";
4
+ const capitalize = (str) => str.charAt(0).toUpperCase() + str.slice(1);
5
+ const getKeys = (obj) => Object.keys(obj);
6
+ const createInternalStore = ({
7
+ internalAtomDefaultValues,
8
+ autoCalculatedData,
9
+ selectors,
10
+ reducers
11
+ }) => {
12
+ const store = create((set, get) => {
13
+ const internalAtomGetters = {};
14
+ getKeys(internalAtomDefaultValues).forEach((key) => {
15
+ const keyForGetter = `get${capitalize(key)}`;
16
+ const getter = () => get()[key];
17
+ internalAtomGetters[keyForGetter] = getter;
18
+ });
19
+ const internalAtomSetters = {};
20
+ getKeys(internalAtomDefaultValues).forEach((key) => {
21
+ const keyForSetter = `set${capitalize(key)}`;
22
+ const setter = (newVal) => {
23
+ if (typeof newVal === "function") {
24
+ set({ [key]: newVal(get()[key], get()) });
25
+ } else {
26
+ set({ [key]: newVal });
27
+ }
28
+ };
29
+ internalAtomSetters[keyForSetter] = setter;
30
+ });
31
+ return {
32
+ ...internalAtomDefaultValues,
33
+ ...internalAtomGetters,
34
+ ...internalAtomSetters,
35
+ ...autoCalculatedData,
36
+ ...selectors(get),
37
+ ...reducers(get, set),
38
+ set
39
+ };
40
+ });
41
+ return store;
42
+ };
43
+ const useInternalStoreCreator = ({
44
+ internalAtomDefaultValues,
45
+ autoCalculatedData,
46
+ selectors,
47
+ reducers
48
+ }) => {
49
+ const storeCreator = useCallback(
50
+ () => createInternalStore({ internalAtomDefaultValues, autoCalculatedData, selectors, reducers }),
51
+ [internalAtomDefaultValues, autoCalculatedData, selectors, reducers]
52
+ );
53
+ return storeCreator;
54
+ };
55
+ export {
56
+ useInternalStoreCreator
57
+ };
58
+ //# sourceMappingURL=useInternalStoreCreator.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../scripts/build/transpile/react-shim.js", "../../src/useInternalStoreCreator.ts"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { useCallback } from 'react';\nimport create from 'zustand';\nimport type { ZustandT } from './types';\n\nconst capitalize = (str: string) => str.charAt(0).toUpperCase() + str.slice(1);\n\nconst getKeys = <T extends object>(obj: T) => Object.keys(obj) as (keyof T)[];\n\n// Function that will create the store, putting:\n// 1) the atoms\n// 2) the setters for the atoms (which we auto-calculate)\n// 3) the auto-calculated values\n// 4) the set function\n// The store is fully typed, and the setters are typed as well\nconst createInternalStore = <A extends object, C extends object, S extends object, R extends object>({\n internalAtomDefaultValues,\n autoCalculatedData,\n selectors,\n reducers,\n}: ZustandT.InternalParameters<A, C, S, R>) => {\n const store = create<ZustandT.InternalStore<A, C, S, R>>((set, get) => {\n // We build the getters\n const internalAtomGetters: ZustandT.AtomGetters<A> = {} as ZustandT.AtomGetters<A>;\n\n getKeys(internalAtomDefaultValues).forEach((key) => {\n const keyForGetter = `get${capitalize(key as string)}` as keyof ZustandT.AtomGetters<A>;\n\n const getter = (() => get()[key]) as ZustandT.AtomGetters<A>[keyof ZustandT.AtomGetters<A>];\n\n internalAtomGetters[keyForGetter] = getter;\n });\n\n // We build the setters\n const internalAtomSetters: ZustandT.AtomSetters<A, C, S, R> = {} as ZustandT.AtomSetters<A, C, S, R>;\n\n getKeys(internalAtomDefaultValues).forEach((key) => {\n const keyForSetter = `set${capitalize(key as string)}` as keyof ZustandT.AtomSetters<A, C, S, R>;\n\n const setter = ((newVal: A[typeof key]) => {\n if (typeof newVal === 'function') {\n // If it's a function, we call it with the current store value, and the full store. We try to mimic react-setState's behavior\n set({ [key]: newVal(get()[key], get()) as A[typeof key] } as Partial<ZustandT.InternalStore<A, C, S, R>>);\n } else {\n // We just received the new value, set it\n set({ [key]: newVal } as Partial<ZustandT.InternalStore<A, C, S, R>>);\n }\n }) as ZustandT.AtomSetters<A, C, S, R>[keyof ZustandT.AtomSetters<A, C, S, R>];\n\n // We add the setter to the internalAtomSetters object\n internalAtomSetters[keyForSetter] = setter;\n });\n\n return {\n ...internalAtomDefaultValues,\n ...internalAtomGetters,\n ...internalAtomSetters,\n ...autoCalculatedData,\n ...selectors(get),\n ...reducers(get, set),\n set,\n };\n });\n\n return store;\n};\n\nexport const useInternalStoreCreator = <A extends object, C extends object, S extends object, R extends object>({\n internalAtomDefaultValues,\n autoCalculatedData,\n selectors,\n reducers,\n}: ZustandT.InternalParameters<A, C, S, R>) => {\n const storeCreator = useCallback(\n () => createInternalStore({ internalAtomDefaultValues, autoCalculatedData, selectors, reducers }),\n [internalAtomDefaultValues, autoCalculatedData, selectors, reducers],\n );\n\n return storeCreator;\n};\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;ACAvB,SAAS,mBAAmB;AAC5B,OAAO,YAAY;AAGnB,MAAM,aAAa,CAAC,QAAgB,IAAI,OAAO,CAAC,EAAE,YAAY,IAAI,IAAI,MAAM,CAAC;AAE7E,MAAM,UAAU,CAAmB,QAAW,OAAO,KAAK,GAAG;AAQ7D,MAAM,sBAAsB,CAAyE;AAAA,EACnG;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA+C;AAC7C,QAAM,QAAQ,OAA2C,CAAC,KAAK,QAAQ;AAErE,UAAM,sBAA+C,CAAC;AAEtD,YAAQ,yBAAyB,EAAE,QAAQ,CAAC,QAAQ;AAClD,YAAM,eAAe,MAAM,WAAW,GAAa;AAEnD,YAAM,SAAU,MAAM,IAAI,EAAE;AAE5B,0BAAoB,gBAAgB;AAAA,IACtC,CAAC;AAGD,UAAM,sBAAwD,CAAC;AAE/D,YAAQ,yBAAyB,EAAE,QAAQ,CAAC,QAAQ;AAClD,YAAM,eAAe,MAAM,WAAW,GAAa;AAEnD,YAAM,SAAU,CAAC,WAA0B;AACzC,YAAI,OAAO,WAAW,YAAY;AAEhC,cAAI,EAAE,CAAC,MAAM,OAAO,IAAI,EAAE,MAAM,IAAI,CAAC,EAAmB,CAAgD;AAAA,QAC1G,OAAO;AAEL,cAAI,EAAE,CAAC,MAAM,OAAO,CAAgD;AAAA,QACtE;AAAA,MACF;AAGA,0BAAoB,gBAAgB;AAAA,IACtC,CAAC;AAED,WAAO;AAAA,MACL,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG,UAAU,GAAG;AAAA,MAChB,GAAG,SAAS,KAAK,GAAG;AAAA,MACpB;AAAA,IACF;AAAA,EACF,CAAC;AAED,SAAO;AACT;AAEO,MAAM,0BAA0B,CAAyE;AAAA,EAC9G;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA+C;AAC7C,QAAM,eAAe;AAAA,IACnB,MAAM,oBAAoB,EAAE,2BAA2B,oBAAoB,WAAW,SAAS,CAAC;AAAA,IAChG,CAAC,2BAA2B,oBAAoB,WAAW,QAAQ;AAAA,EACrE;AAEA,SAAO;AACT;",
6
+ "names": []
7
+ }
@@ -0,0 +1,15 @@
1
+ import * as React from "react";
2
+ import { useCallback } from "react";
3
+ import create from "zustand";
4
+ const createPropsStore = (propsWithDefault) => create((set) => ({
5
+ set,
6
+ ...propsWithDefault
7
+ }));
8
+ const usePropsStoreCreator = (props) => {
9
+ const storeCreator = useCallback(() => createPropsStore(props), []);
10
+ return storeCreator;
11
+ };
12
+ export {
13
+ usePropsStoreCreator
14
+ };
15
+ //# sourceMappingURL=usePropsStoreCreator.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../scripts/build/transpile/react-shim.js", "../../src/usePropsStoreCreator.ts"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { useCallback } from 'react';\nimport create from 'zustand';\nimport type { ZustandT } from './types';\n\nconst createPropsStore = <T extends object>(propsWithDefault: T) =>\n create<ZustandT.PropsStore<T>>((set) => ({\n set,\n ...propsWithDefault,\n }));\n\nexport const usePropsStoreCreator = <P extends object>(props: P) => {\n // we want to memoize the creation of the store,\n // it doesn't make sense to create a new store every time the props change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const storeCreator = useCallback(() => createPropsStore(props), []);\n\n return storeCreator;\n};\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;ACAvB,SAAS,mBAAmB;AAC5B,OAAO,YAAY;AAGnB,MAAM,mBAAmB,CAAmB,qBAC1C,OAA+B,CAAC,SAAS;AAAA,EACvC;AAAA,EACA,GAAG;AACL,EAAE;AAEG,MAAM,uBAAuB,CAAmB,UAAa;AAIlE,QAAM,eAAe,YAAY,MAAM,iBAAiB,KAAK,GAAG,CAAC,CAAC;AAElE,SAAO;AACT;",
6
+ "names": []
7
+ }
@@ -0,0 +1,46 @@
1
+ import * as React from "react";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { useMemoMergePropsWithDefault } from "@elliemae/ds-utilities";
4
+ import { useInternalStoreCreator } from "./useInternalStoreCreator";
5
+ import { usePropsStoreCreator } from "./usePropsStoreCreator";
6
+ import { AutoUpdaterComponent } from "./AutoUpdater";
7
+ const noopish = () => ({});
8
+ const withZustand = (Component, config) => {
9
+ const {
10
+ defaultProps,
11
+ internalAtomDefaultValues,
12
+ useAutoCalculated,
13
+ selectors = noopish,
14
+ reducers = noopish,
15
+ PropsProvider,
16
+ InternalProvider,
17
+ usePropsStore,
18
+ useInternalStore
19
+ } = config;
20
+ const ComponentWithStore = (props) => {
21
+ const propsWithDefault = useMemoMergePropsWithDefault(props, defaultProps);
22
+ const autoCalculatedData = useAutoCalculated(propsWithDefault);
23
+ const internalStoreCreator = useInternalStoreCreator({
24
+ internalAtomDefaultValues,
25
+ autoCalculatedData,
26
+ selectors,
27
+ reducers
28
+ });
29
+ const propsStoreCreator = usePropsStoreCreator(propsWithDefault);
30
+ return /* @__PURE__ */ jsx(PropsProvider, { createStore: propsStoreCreator, children: /* @__PURE__ */ jsx(InternalProvider, { createStore: internalStoreCreator, children: /* @__PURE__ */ jsx(
31
+ AutoUpdaterComponent,
32
+ {
33
+ Component,
34
+ usePropsStore,
35
+ useInternalStore,
36
+ autoCalculatedData,
37
+ propsWithDefault
38
+ }
39
+ ) }) });
40
+ };
41
+ return ComponentWithStore;
42
+ };
43
+ export {
44
+ withZustand
45
+ };
46
+ //# sourceMappingURL=withZustand.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../scripts/build/transpile/react-shim.js", "../../src/withZustand.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable indent */\nimport { useMemoMergePropsWithDefault } from '@elliemae/ds-utilities';\nimport { useInternalStoreCreator } from './useInternalStoreCreator';\nimport { usePropsStoreCreator } from './usePropsStoreCreator';\nimport { AutoUpdaterComponent } from './AutoUpdater';\nimport type { ZustandT } from './types';\n\nconst noopish = <T extends object>() => ({} as T);\n\nexport const withZustand = <\n U extends object,\n P extends object,\n A extends object,\n C extends object,\n S extends object,\n R extends object,\n>(\n Component: React.ComponentType<Record<string, never>>,\n config: ZustandT.Config<P, A, C, S, R>,\n) => {\n const {\n defaultProps,\n internalAtomDefaultValues,\n useAutoCalculated,\n selectors = noopish,\n reducers = noopish,\n PropsProvider,\n InternalProvider,\n usePropsStore,\n useInternalStore,\n } = config;\n\n const ComponentWithStore = (props: U) => {\n const propsWithDefault = useMemoMergePropsWithDefault<P>(props, defaultProps);\n\n const autoCalculatedData = useAutoCalculated(propsWithDefault);\n\n const internalStoreCreator = useInternalStoreCreator({\n internalAtomDefaultValues,\n autoCalculatedData,\n selectors,\n reducers,\n });\n\n const propsStoreCreator = usePropsStoreCreator(propsWithDefault);\n\n return (\n <PropsProvider createStore={propsStoreCreator}>\n <InternalProvider createStore={internalStoreCreator}>\n <AutoUpdaterComponent\n Component={Component}\n usePropsStore={usePropsStore}\n useInternalStore={useInternalStore}\n autoCalculatedData={autoCalculatedData}\n propsWithDefault={propsWithDefault}\n />\n </InternalProvider>\n </PropsProvider>\n );\n };\n return ComponentWithStore;\n};\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;ACiDb;AAhDV,SAAS,oCAAoC;AAC7C,SAAS,+BAA+B;AACxC,SAAS,4BAA4B;AACrC,SAAS,4BAA4B;AAGrC,MAAM,UAAU,OAAyB,CAAC;AAEnC,MAAM,cAAc,CAQzB,WACA,WACG;AACH,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY;AAAA,IACZ,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,QAAM,qBAAqB,CAAC,UAAa;AACvC,UAAM,mBAAmB,6BAAgC,OAAO,YAAY;AAE5E,UAAM,qBAAqB,kBAAkB,gBAAgB;AAE7D,UAAM,uBAAuB,wBAAwB;AAAA,MACnD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAED,UAAM,oBAAoB,qBAAqB,gBAAgB;AAE/D,WACE,oBAAC,iBAAc,aAAa,mBAC1B,8BAAC,oBAAiB,aAAa,sBAC7B;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACF,GACF,GACF;AAAA,EAEJ;AACA,SAAO;AACT;",
6
+ "names": []
7
+ }
package/package.json ADDED
@@ -0,0 +1,64 @@
1
+ {
2
+ "name": "@elliemae/ds-zustand-helpers",
3
+ "version": "3.14.0-next.12",
4
+ "license": "MIT",
5
+ "description": "ICE MT - Dimsum - Zustand Helpers",
6
+ "files": [
7
+ "dist"
8
+ ],
9
+ "module": "./dist/esm/index.js",
10
+ "main": "./dist/cjs/index.js",
11
+ "types": "./dist/types/index.d.ts",
12
+ "exports": {
13
+ ".": {
14
+ "import": "./dist/esm/index.js",
15
+ "require": "./dist/cjs/index.js"
16
+ }
17
+ },
18
+ "sideEffects": [
19
+ "*.css",
20
+ "*.scss"
21
+ ],
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "https://git.elliemae.io/platform-ui/dimsum.git"
25
+ },
26
+ "engines": {
27
+ "pnpm": ">=6",
28
+ "node": ">=16"
29
+ },
30
+ "author": "ICE MT",
31
+ "jestSonar": {
32
+ "sonar56x": true,
33
+ "reportPath": "reports",
34
+ "reportFile": "tests.xml",
35
+ "indent": 4
36
+ },
37
+ "publishConfig": {
38
+ "access": "public",
39
+ "typeSafety": false
40
+ },
41
+ "dependencies": {
42
+ "zustand": "4.1.4",
43
+ "@elliemae/ds-utilities": "3.14.0-next.12"
44
+ },
45
+ "devDependencies": {
46
+ "@testing-library/jest-dom": "~5.16.5",
47
+ "@testing-library/react": "~12.1.3"
48
+ },
49
+ "peerDependencies": {
50
+ "react": "~17.0.2",
51
+ "react-dom": "^17.0.2"
52
+ },
53
+ "scripts": {
54
+ "test": "node ../../scripts/testing/test.mjs",
55
+ "lint": "node ../../scripts/lint.mjs",
56
+ "eslint:fix": "eslint --ext='.js,.jsx,.test.js,.ts,.tsx' --fix --config='../../.eslintrc.js' src/",
57
+ "dts": "node ../../scripts/dts.mjs",
58
+ "build": "cross-env NODE_ENV=production node ../../scripts/build/build.mjs",
59
+ "dev:build": "pnpm --filter {.}... build && pnpm --filter {.}... dts",
60
+ "dev:install": "pnpm --filter {.}... i --no-lockfile && pnpm run dev:build",
61
+ "checkDeps": "npx -yes ../ds-codemods check-missing-packages --projectFolderPath=\"./\" --ignorePackagesGlobPattern=\"\" --ignoreFilesGlobPattern=\"**/test-ables/*,**/tests/*\"",
62
+ "dev": "cross-env NODE_ENV=development node ../../scripts/build/build.mjs --watch"
63
+ }
64
+ }