@webiny/react-composition 5.41.5-beta.0 → 5.41.5-beta.1

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/Context.js CHANGED
@@ -31,26 +31,22 @@ function compose() {
31
31
  */
32
32
 
33
33
  var CompositionContext = /*#__PURE__*/(0, _react.createContext)(undefined);
34
+ var getCacheKey = function getCacheKey(scopes) {
35
+ return scopes.join(";");
36
+ };
37
+
34
38
  /**
35
39
  * Scopes are ordered in reverse, to go from child to parent. As we iterate over scopes, we try to find the latest component
36
40
  * recipe (a "recipe" is a base component + all decorators registered so far). If none exist, we return an empty recipe.
37
41
  */
38
42
  var findComponentRecipe = function findComponentRecipe(component, lookupScopes, components) {
39
- var _iterator = (0, _createForOfIteratorHelper2.default)(lookupScopes),
40
- _step;
41
- try {
42
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
43
- var _scope = _step.value;
44
- var scopeMap = components.get(_scope) || new Map();
45
- var recipe = scopeMap.get(component);
46
- if (recipe) {
47
- return recipe;
48
- }
43
+ for (var i = lookupScopes.length; i > 0; i--) {
44
+ var cacheKey = getCacheKey(lookupScopes.slice(0, i));
45
+ var scopeMap = components.get(cacheKey) || new Map();
46
+ var recipe = scopeMap.get(component);
47
+ if (recipe) {
48
+ return recipe;
49
49
  }
50
- } catch (err) {
51
- _iterator.e(err);
52
- } finally {
53
- _iterator.f();
54
50
  }
55
51
  return {
56
52
  component: null,
@@ -59,28 +55,27 @@ var findComponentRecipe = function findComponentRecipe(component, lookupScopes,
59
55
  };
60
56
  var composeComponents = function composeComponents(components, decorators) {
61
57
  var scopes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
62
- var targetScope = scopes[scopes.length - 1];
63
- var targetComponents = components.get(targetScope) || new Map();
64
- var lookupScopes = scopes.reverse();
65
- var _iterator2 = (0, _createForOfIteratorHelper2.default)(decorators),
66
- _step2;
58
+ var cacheKey = getCacheKey(scopes);
59
+ var targetComponents = components.get(cacheKey) || new Map();
60
+ var _iterator = (0, _createForOfIteratorHelper2.default)(decorators),
61
+ _step;
67
62
  try {
68
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
69
- var _step2$value = (0, _slicedToArray2.default)(_step2.value, 2),
70
- _component = _step2$value[0],
71
- _hocs = _step2$value[1];
72
- var recipe = findComponentRecipe(_component, lookupScopes, components);
63
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
64
+ var _step$value = (0, _slicedToArray2.default)(_step.value, 2),
65
+ _component = _step$value[0],
66
+ _hocs = _step$value[1];
67
+ var recipe = findComponentRecipe(_component, scopes, components);
73
68
  var newHocs = [].concat((0, _toConsumableArray2.default)(recipe.hocs || []), (0, _toConsumableArray2.default)(_hocs));
74
69
  targetComponents.set(_component, {
75
70
  component: compose.apply(void 0, (0, _toConsumableArray2.default)((0, _toConsumableArray2.default)(newHocs).reverse()))(_component),
76
71
  hocs: newHocs
77
72
  });
78
- components.set(targetScope, targetComponents);
73
+ components.set(cacheKey, targetComponents);
79
74
  }
80
75
  } catch (err) {
81
- _iterator2.e(err);
76
+ _iterator.e(err);
82
77
  } finally {
83
- _iterator2.f();
78
+ _iterator.f();
84
79
  }
85
80
  return components;
86
81
  };
@@ -98,16 +93,17 @@ var CompositionProvider = exports.CompositionProvider = function CompositionProv
98
93
  setComponents = _useState2[1];
99
94
  var composeComponent = (0, _react.useCallback)(function (component, hocs) {
100
95
  var scopes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
96
+ var allScopes = ["*"].concat((0, _toConsumableArray2.default)(scopes));
101
97
  setComponents(function (prevComponents) {
102
- return composeComponents(new Map(prevComponents), [[component, hocs]], ["*"].concat((0, _toConsumableArray2.default)(scopes)));
98
+ return composeComponents(new Map(prevComponents), [[component, hocs]], allScopes);
103
99
  });
104
100
 
105
101
  // Return a function that will remove the added HOCs.
106
102
  return function () {
107
- var scope = scopes[scopes.length - 1];
103
+ var cacheKey = getCacheKey(allScopes);
108
104
  setComponents(function (prevComponents) {
109
105
  var components = new Map(prevComponents);
110
- var scopeMap = components.get(scope) || new Map();
106
+ var scopeMap = components.get(cacheKey) || new Map();
111
107
  var recipe = scopeMap.get(component) || {
112
108
  component: null,
113
109
  hocs: []
@@ -120,29 +116,21 @@ var CompositionProvider = exports.CompositionProvider = function CompositionProv
120
116
  component: NewComponent,
121
117
  hocs: newHOCs
122
118
  });
123
- components.set(scope, scopeMap);
119
+ components.set(cacheKey, scopeMap);
124
120
  return components;
125
121
  });
126
122
  };
127
123
  }, [setComponents]);
128
124
  var getComponent = (0, _react.useCallback)(function (Component) {
129
125
  var scope = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
130
- var scopesToResolve = ["*"].concat((0, _toConsumableArray2.default)(scope)).reverse();
131
- var _iterator3 = (0, _createForOfIteratorHelper2.default)(scopesToResolve),
132
- _step3;
133
- try {
134
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
135
- var _scope2 = _step3.value;
136
- var scopeMap = components.get(_scope2) || new Map();
137
- var composedComponent = scopeMap.get(Component);
138
- if (composedComponent) {
139
- return composedComponent.component;
140
- }
126
+ var scopes = ["*"].concat((0, _toConsumableArray2.default)(scope));
127
+ for (var i = scopes.length; i > 0; i--) {
128
+ var cacheKey = getCacheKey(scopes.slice(0, i));
129
+ var scopeMap = components.get(cacheKey) || new Map();
130
+ var composedComponent = scopeMap.get(Component);
131
+ if (composedComponent) {
132
+ return composedComponent.component;
141
133
  }
142
- } catch (err) {
143
- _iterator3.e(err);
144
- } finally {
145
- _iterator3.f();
146
134
  }
147
135
  return undefined;
148
136
  }, [components]);
@@ -153,6 +141,14 @@ var CompositionProvider = exports.CompositionProvider = function CompositionProv
153
141
  components: components
154
142
  };
155
143
  }, [components, composeComponent]);
144
+ (0, _react.useEffect)(function () {
145
+ if (process.env.NODE_ENV !== "production") {
146
+ // @ts-expect-error This is a developers-only utility.
147
+ window["debug_printComposedComponents"] = function () {
148
+ console.log(components);
149
+ };
150
+ }
151
+ }, [components]);
156
152
  return /*#__PURE__*/_react.default.createElement(CompositionContext.Provider, {
157
153
  value: context
158
154
  }, children);
package/Context.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_CompositionScope","compose","_len","arguments","length","fns","Array","_key","decoratee","reduceRight","decorator","CompositionContext","createContext","undefined","findComponentRecipe","component","lookupScopes","components","_iterator","_createForOfIteratorHelper2","default","_step","s","n","done","scope","value","scopeMap","get","Map","recipe","err","e","f","hocs","composeComponents","decorators","scopes","targetScope","targetComponents","reverse","_iterator2","_step2","_step2$value","_slicedToArray2","newHocs","concat","_toConsumableArray2","set","apply","CompositionProvider","exports","_ref","_ref$decorators","children","_useState","useState","map","tuple","original","_useState2","setComponents","composeComponent","useCallback","prevComponents","newHOCs","filter","hoc","includes","NewComponent","getComponent","Component","scopesToResolve","_iterator3","_step3","composedComponent","context","useMemo","createElement","Provider","useComponent","baseFunction","useOptionalComposition","useCompositionScope","useComposition","useContext","Error"],"sources":["Context.tsx"],"sourcesContent":["import React, {\n ComponentType,\n createContext,\n useCallback,\n useContext,\n useMemo,\n useState\n} from \"react\";\nimport { useCompositionScope } from \"~/CompositionScope\";\nimport {\n ComposedFunction,\n ComposeWith,\n Decoratable,\n DecoratableComponent,\n DecoratableHook,\n Decorator,\n Enumerable,\n GenericComponent,\n GenericHook\n} from \"~/types\";\n\nexport function compose<T>(...fns: Decorator<T>[]) {\n return (decoratee: T): T => {\n return fns.reduceRight((decoratee, decorator) => decorator(decoratee), decoratee) as T;\n };\n}\n\ninterface ComposedComponent {\n /**\n * Ready to use React component.\n */\n component: GenericHook | GenericComponent;\n /**\n * HOCs used to compose the original component.\n */\n hocs: Decorator<GenericComponent | GenericHook>[];\n /**\n * Component composition can be scoped.\n */\n scope?: string;\n}\n\n/**\n * @deprecated Use `Decorator` instead.\n */\nexport interface HigherOrderComponent<TProps = any, TOutput = TProps> {\n (Component: GenericComponent<TProps>): GenericComponent<TOutput>;\n}\n\ntype ComposedComponents = Map<ComponentType<unknown>, ComposedComponent>;\ntype ComponentScopes = Map<string, ComposedComponents>;\n\nexport type DecoratableTypes = DecoratableComponent | DecoratableHook;\n\ninterface CompositionContextGetComponentCallable {\n (component: ComponentType<unknown>, scope: string[]):\n | ComposedFunction\n | GenericComponent\n | undefined;\n}\n\ninterface CompositionContext {\n components: ComponentScopes;\n getComponent: CompositionContextGetComponentCallable;\n composeComponent(\n component: ComponentType<unknown>,\n hocs: Enumerable<ComposeWith>,\n scope?: string[]\n ): void;\n}\n\nconst CompositionContext = createContext<CompositionContext | undefined>(undefined);\n\nexport type DecoratorsTuple = [Decoratable, Decorator<any>[]];\nexport type DecoratorsCollection = Array<DecoratorsTuple>;\n\ninterface CompositionProviderProps {\n decorators?: DecoratorsCollection;\n children: React.ReactNode;\n}\n\n/**\n * Scopes are ordered in reverse, to go from child to parent. As we iterate over scopes, we try to find the latest component\n * recipe (a \"recipe\" is a base component + all decorators registered so far). If none exist, we return an empty recipe.\n */\nconst findComponentRecipe = (\n component: GenericComponent | GenericHook,\n lookupScopes: string[],\n components: ComponentScopes\n) => {\n for (const scope of lookupScopes) {\n const scopeMap: ComposedComponents = components.get(scope) || new Map();\n const recipe = scopeMap.get(component);\n if (recipe) {\n return recipe;\n }\n }\n\n return { component: null, hocs: [] };\n};\n\nconst composeComponents = (\n components: ComponentScopes,\n decorators: Array<[GenericComponent | GenericHook, Decorator<any>[]]>,\n scopes: string[] = []\n) => {\n const targetScope = scopes[scopes.length - 1];\n const targetComponents = components.get(targetScope) || new Map();\n const lookupScopes = scopes.reverse();\n\n for (const [component, hocs] of decorators) {\n const recipe = findComponentRecipe(component, lookupScopes, components);\n\n const newHocs = [...(recipe.hocs || []), ...hocs] as Decorator<\n GenericHook | GenericComponent\n >[];\n\n targetComponents.set(component, {\n component: compose(...[...newHocs].reverse())(component),\n hocs: newHocs\n });\n\n components.set(targetScope, targetComponents);\n }\n\n return components;\n};\n\nexport const CompositionProvider = ({ decorators = [], children }: CompositionProviderProps) => {\n const [components, setComponents] = useState<ComponentScopes>(() => {\n return composeComponents(\n new Map(),\n decorators.map(tuple => {\n return [tuple[0].original, tuple[1]];\n }),\n [\"*\"]\n );\n });\n\n const composeComponent = useCallback(\n (\n component: GenericComponent | GenericHook,\n hocs: HigherOrderComponent<any, any>[],\n scopes: string[] = []\n ) => {\n setComponents(prevComponents => {\n return composeComponents(\n new Map(prevComponents),\n [[component, hocs]],\n [\"*\", ...scopes]\n );\n });\n\n // Return a function that will remove the added HOCs.\n return () => {\n const scope = scopes[scopes.length - 1];\n setComponents(prevComponents => {\n const components = new Map(prevComponents);\n const scopeMap: ComposedComponents = components.get(scope) || new Map();\n const recipe = scopeMap.get(component) || {\n component: null,\n hocs: []\n };\n\n const newHOCs = [...recipe.hocs].filter(hoc => !hocs.includes(hoc));\n const NewComponent = compose(...[...newHOCs].reverse())(component);\n\n scopeMap.set(component, {\n component: NewComponent,\n hocs: newHOCs\n });\n\n components.set(scope, scopeMap);\n return components;\n });\n };\n },\n [setComponents]\n );\n\n const getComponent = useCallback<CompositionContextGetComponentCallable>(\n (Component, scope = []) => {\n const scopesToResolve = [\"*\", ...scope].reverse();\n for (const scope of scopesToResolve) {\n const scopeMap: ComposedComponents = components.get(scope) || new Map();\n const composedComponent = scopeMap.get(Component);\n if (composedComponent) {\n return composedComponent.component;\n }\n }\n\n return undefined;\n },\n [components]\n );\n\n const context: CompositionContext = useMemo(\n () => ({\n getComponent,\n composeComponent,\n components\n }),\n [components, composeComponent]\n );\n\n return <CompositionContext.Provider value={context}>{children}</CompositionContext.Provider>;\n};\n\nexport function useComponent<T>(baseFunction: T) {\n const context = useOptionalComposition();\n const scope = useCompositionScope();\n\n if (!context) {\n return baseFunction;\n }\n\n return (context.getComponent(baseFunction as any, scope) || baseFunction) as T;\n}\n\n/**\n * This hook will throw an error if composition context doesn't exist.\n */\nexport function useComposition() {\n const context = useContext(CompositionContext);\n if (!context) {\n throw new Error(\n `You're missing a <CompositionProvider> higher up in your component hierarchy!`\n );\n }\n\n return context;\n}\n\n/**\n * This hook will not throw an error if composition context doesn't exist.\n */\nexport function useOptionalComposition() {\n return useContext(CompositionContext);\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_CompositionScope","compose","_len","arguments","length","fns","Array","_key","decoratee","reduceRight","decorator","CompositionContext","createContext","undefined","getCacheKey","scopes","join","findComponentRecipe","component","lookupScopes","components","i","cacheKey","slice","scopeMap","get","Map","recipe","hocs","composeComponents","decorators","targetComponents","_iterator","_createForOfIteratorHelper2","default","_step","s","n","done","_step$value","_slicedToArray2","value","newHocs","concat","_toConsumableArray2","set","apply","reverse","err","e","f","CompositionProvider","exports","_ref","_ref$decorators","children","_useState","useState","map","tuple","original","_useState2","setComponents","composeComponent","useCallback","allScopes","prevComponents","newHOCs","filter","hoc","includes","NewComponent","getComponent","Component","scope","composedComponent","context","useMemo","useEffect","process","env","NODE_ENV","window","console","log","createElement","Provider","useComponent","baseFunction","useOptionalComposition","useCompositionScope","useComposition","useContext","Error"],"sources":["Context.tsx"],"sourcesContent":["import React, {\n ComponentType,\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState\n} from \"react\";\nimport { useCompositionScope } from \"~/CompositionScope\";\nimport {\n ComposedFunction,\n ComposeWith,\n Decoratable,\n DecoratableComponent,\n DecoratableHook,\n Decorator,\n Enumerable,\n GenericComponent,\n GenericHook\n} from \"~/types\";\n\nexport function compose<T>(...fns: Decorator<T>[]) {\n return (decoratee: T): T => {\n return fns.reduceRight((decoratee, decorator) => decorator(decoratee), decoratee) as T;\n };\n}\n\ninterface ComposedComponent {\n /**\n * Ready to use React component.\n */\n component: GenericHook | GenericComponent;\n /**\n * HOCs used to compose the original component.\n */\n hocs: Decorator<GenericComponent | GenericHook>[];\n /**\n * Component composition can be scoped.\n */\n scope?: string;\n}\n\n/**\n * @deprecated Use `Decorator` instead.\n */\nexport interface HigherOrderComponent<TProps = any, TOutput = TProps> {\n (Component: GenericComponent<TProps>): GenericComponent<TOutput>;\n}\n\ntype ComposedComponents = Map<ComponentType<unknown>, ComposedComponent>;\ntype ComponentScopes = Map<string, ComposedComponents>;\n\nexport type DecoratableTypes = DecoratableComponent | DecoratableHook;\n\ninterface CompositionContextGetComponentCallable {\n (component: ComponentType<unknown>, scope: string[]):\n | ComposedFunction\n | GenericComponent\n | undefined;\n}\n\ninterface CompositionContext {\n components: ComponentScopes;\n getComponent: CompositionContextGetComponentCallable;\n composeComponent(\n component: ComponentType<unknown>,\n hocs: Enumerable<ComposeWith>,\n scope?: string[]\n ): void;\n}\n\nconst CompositionContext = createContext<CompositionContext | undefined>(undefined);\n\nexport type DecoratorsTuple = [Decoratable, Decorator<any>[]];\nexport type DecoratorsCollection = Array<DecoratorsTuple>;\n\ninterface CompositionProviderProps {\n decorators?: DecoratorsCollection;\n children: React.ReactNode;\n}\n\nconst getCacheKey = (scopes: string[]) => {\n return scopes.join(\";\");\n};\n\n/**\n * Scopes are ordered in reverse, to go from child to parent. As we iterate over scopes, we try to find the latest component\n * recipe (a \"recipe\" is a base component + all decorators registered so far). If none exist, we return an empty recipe.\n */\nconst findComponentRecipe = (\n component: GenericComponent | GenericHook,\n lookupScopes: string[],\n components: ComponentScopes\n) => {\n for (let i = lookupScopes.length; i > 0; i--) {\n const cacheKey = getCacheKey(lookupScopes.slice(0, i));\n const scopeMap: ComposedComponents = components.get(cacheKey) || new Map();\n const recipe = scopeMap.get(component);\n if (recipe) {\n return recipe;\n }\n }\n\n return { component: null, hocs: [] };\n};\n\nconst composeComponents = (\n components: ComponentScopes,\n decorators: Array<[GenericComponent | GenericHook, Decorator<any>[]]>,\n scopes: string[] = []\n) => {\n const cacheKey = getCacheKey(scopes);\n const targetComponents: ComposedComponents = components.get(cacheKey) || new Map();\n\n for (const [component, hocs] of decorators) {\n const recipe = findComponentRecipe(component, scopes, components);\n\n const newHocs = [...(recipe.hocs || []), ...hocs] as Decorator<\n GenericHook | GenericComponent\n >[];\n\n targetComponents.set(component, {\n component: compose(...[...newHocs].reverse())(component),\n hocs: newHocs\n });\n\n components.set(cacheKey, targetComponents);\n }\n\n return components;\n};\n\nexport const CompositionProvider = ({ decorators = [], children }: CompositionProviderProps) => {\n const [components, setComponents] = useState<ComponentScopes>(() => {\n return composeComponents(\n new Map(),\n decorators.map(tuple => {\n return [tuple[0].original, tuple[1]];\n }),\n [\"*\"]\n );\n });\n\n const composeComponent = useCallback(\n (\n component: GenericComponent | GenericHook,\n hocs: HigherOrderComponent<any, any>[],\n scopes: string[] = []\n ) => {\n const allScopes = [\"*\", ...scopes];\n\n setComponents(prevComponents => {\n return composeComponents(new Map(prevComponents), [[component, hocs]], allScopes);\n });\n\n // Return a function that will remove the added HOCs.\n return () => {\n const cacheKey = getCacheKey(allScopes);\n setComponents(prevComponents => {\n const components = new Map(prevComponents);\n const scopeMap: ComposedComponents = components.get(cacheKey) || new Map();\n const recipe = scopeMap.get(component) || {\n component: null,\n hocs: []\n };\n\n const newHOCs = [...recipe.hocs].filter(hoc => !hocs.includes(hoc));\n const NewComponent = compose(...[...newHOCs].reverse())(component);\n\n scopeMap.set(component, {\n component: NewComponent,\n hocs: newHOCs\n });\n\n components.set(cacheKey, scopeMap);\n return components;\n });\n };\n },\n [setComponents]\n );\n\n const getComponent = useCallback<CompositionContextGetComponentCallable>(\n (Component, scope = []) => {\n const scopes = [\"*\", ...scope];\n for (let i = scopes.length; i > 0; i--) {\n const cacheKey = getCacheKey(scopes.slice(0, i));\n const scopeMap: ComposedComponents = components.get(cacheKey) || new Map();\n const composedComponent = scopeMap.get(Component);\n if (composedComponent) {\n return composedComponent.component;\n }\n }\n\n return undefined;\n },\n [components]\n );\n\n const context: CompositionContext = useMemo(\n () => ({\n getComponent,\n composeComponent,\n components\n }),\n [components, composeComponent]\n );\n\n useEffect(() => {\n if (process.env.NODE_ENV !== \"production\") {\n // @ts-expect-error This is a developers-only utility.\n window[\"debug_printComposedComponents\"] = () => {\n console.log(components);\n };\n }\n }, [components]);\n\n return <CompositionContext.Provider value={context}>{children}</CompositionContext.Provider>;\n};\n\nexport function useComponent<T>(baseFunction: T) {\n const context = useOptionalComposition();\n const scope = useCompositionScope();\n\n if (!context) {\n return baseFunction;\n }\n\n return (context.getComponent(baseFunction as any, scope) || baseFunction) as T;\n}\n\n/**\n * This hook will throw an error if composition context doesn't exist.\n */\nexport function useComposition() {\n const context = useContext(CompositionContext);\n if (!context) {\n throw new Error(\n `You're missing a <CompositionProvider> higher up in your component hierarchy!`\n );\n }\n\n return context;\n}\n\n/**\n * This hook will not throw an error if composition context doesn't exist.\n */\nexport function useOptionalComposition() {\n return useContext(CompositionContext);\n}\n"],"mappings":";;;;;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AASA,IAAAC,iBAAA,GAAAD,OAAA;AAaO,SAASE,OAAOA,CAAA,EAA4B;EAAA,SAAAC,IAAA,GAAAC,SAAA,CAAAC,MAAA,EAArBC,GAAG,OAAAC,KAAA,CAAAJ,IAAA,GAAAK,IAAA,MAAAA,IAAA,GAAAL,IAAA,EAAAK,IAAA;IAAHF,GAAG,CAAAE,IAAA,IAAAJ,SAAA,CAAAI,IAAA;EAAA;EAC7B,OAAO,UAACC,SAAY,EAAQ;IACxB,OAAOH,GAAG,CAACI,WAAW,CAAC,UAACD,SAAS,EAAEE,SAAS;MAAA,OAAKA,SAAS,CAACF,SAAS,CAAC;IAAA,GAAEA,SAAS,CAAC;EACrF,CAAC;AACL;;AAiBA;AACA;AACA;;AA2BA,IAAMG,kBAAkB,gBAAG,IAAAC,oBAAa,EAAiCC,SAAS,CAAC;AAUnF,IAAMC,WAAW,GAAG,SAAdA,WAAWA,CAAIC,MAAgB,EAAK;EACtC,OAAOA,MAAM,CAACC,IAAI,CAAC,GAAG,CAAC;AAC3B,CAAC;;AAED;AACA;AACA;AACA;AACA,IAAMC,mBAAmB,GAAG,SAAtBA,mBAAmBA,CACrBC,SAAyC,EACzCC,YAAsB,EACtBC,UAA2B,EAC1B;EACD,KAAK,IAAIC,CAAC,GAAGF,YAAY,CAACf,MAAM,EAAEiB,CAAC,GAAG,CAAC,EAAEA,CAAC,EAAE,EAAE;IAC1C,IAAMC,QAAQ,GAAGR,WAAW,CAACK,YAAY,CAACI,KAAK,CAAC,CAAC,EAAEF,CAAC,CAAC,CAAC;IACtD,IAAMG,QAA4B,GAAGJ,UAAU,CAACK,GAAG,CAACH,QAAQ,CAAC,IAAI,IAAII,GAAG,CAAC,CAAC;IAC1E,IAAMC,MAAM,GAAGH,QAAQ,CAACC,GAAG,CAACP,SAAS,CAAC;IACtC,IAAIS,MAAM,EAAE;MACR,OAAOA,MAAM;IACjB;EACJ;EAEA,OAAO;IAAET,SAAS,EAAE,IAAI;IAAEU,IAAI,EAAE;EAAG,CAAC;AACxC,CAAC;AAED,IAAMC,iBAAiB,GAAG,SAApBA,iBAAiBA,CACnBT,UAA2B,EAC3BU,UAAqE,EAEpE;EAAA,IADDf,MAAgB,GAAAZ,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAU,SAAA,GAAAV,SAAA,MAAG,EAAE;EAErB,IAAMmB,QAAQ,GAAGR,WAAW,CAACC,MAAM,CAAC;EACpC,IAAMgB,gBAAoC,GAAGX,UAAU,CAACK,GAAG,CAACH,QAAQ,CAAC,IAAI,IAAII,GAAG,CAAC,CAAC;EAAC,IAAAM,SAAA,OAAAC,2BAAA,CAAAC,OAAA,EAEnDJ,UAAU;IAAAK,KAAA;EAAA;IAA1C,KAAAH,SAAA,CAAAI,CAAA,MAAAD,KAAA,GAAAH,SAAA,CAAAK,CAAA,IAAAC,IAAA,GAA4C;MAAA,IAAAC,WAAA,OAAAC,eAAA,CAAAN,OAAA,EAAAC,KAAA,CAAAM,KAAA;QAAhCvB,UAAS,GAAAqB,WAAA;QAAEX,KAAI,GAAAW,WAAA;MACvB,IAAMZ,MAAM,GAAGV,mBAAmB,CAACC,UAAS,EAAEH,MAAM,EAAEK,UAAU,CAAC;MAEjE,IAAMsB,OAAO,MAAAC,MAAA,KAAAC,mBAAA,CAAAV,OAAA,EAAQP,MAAM,CAACC,IAAI,IAAI,EAAE,OAAAgB,mBAAA,CAAAV,OAAA,EAAMN,KAAI,EAE7C;MAEHG,gBAAgB,CAACc,GAAG,CAAC3B,UAAS,EAAE;QAC5BA,SAAS,EAAEjB,OAAO,CAAA6C,KAAA,aAAAF,mBAAA,CAAAV,OAAA,EAAI,IAAAU,mBAAA,CAAAV,OAAA,EAAIQ,OAAO,EAAEK,OAAO,CAAC,CAAC,EAAC,CAAC7B,UAAS,CAAC;QACxDU,IAAI,EAAEc;MACV,CAAC,CAAC;MAEFtB,UAAU,CAACyB,GAAG,CAACvB,QAAQ,EAAES,gBAAgB,CAAC;IAC9C;EAAC,SAAAiB,GAAA;IAAAhB,SAAA,CAAAiB,CAAA,CAAAD,GAAA;EAAA;IAAAhB,SAAA,CAAAkB,CAAA;EAAA;EAED,OAAO9B,UAAU;AACrB,CAAC;AAEM,IAAM+B,mBAAmB,GAAAC,OAAA,CAAAD,mBAAA,GAAG,SAAtBA,mBAAmBA,CAAAE,IAAA,EAAgE;EAAA,IAAAC,eAAA,GAAAD,IAAA,CAA1DvB,UAAU;IAAVA,UAAU,GAAAwB,eAAA,cAAG,EAAE,GAAAA,eAAA;IAAEC,QAAQ,GAAAF,IAAA,CAARE,QAAQ;EAC3D,IAAAC,SAAA,GAAoC,IAAAC,eAAQ,EAAkB,YAAM;MAChE,OAAO5B,iBAAiB,CACpB,IAAIH,GAAG,CAAC,CAAC,EACTI,UAAU,CAAC4B,GAAG,CAAC,UAAAC,KAAK,EAAI;QACpB,OAAO,CAACA,KAAK,CAAC,CAAC,CAAC,CAACC,QAAQ,EAAED,KAAK,CAAC,CAAC,CAAC,CAAC;MACxC,CAAC,CAAC,EACF,CAAC,GAAG,CACR,CAAC;IACL,CAAC,CAAC;IAAAE,UAAA,OAAArB,eAAA,CAAAN,OAAA,EAAAsB,SAAA;IARKpC,UAAU,GAAAyC,UAAA;IAAEC,aAAa,GAAAD,UAAA;EAUhC,IAAME,gBAAgB,GAAG,IAAAC,kBAAW,EAChC,UACI9C,SAAyC,EACzCU,IAAsC,EAErC;IAAA,IADDb,MAAgB,GAAAZ,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAU,SAAA,GAAAV,SAAA,MAAG,EAAE;IAErB,IAAM8D,SAAS,IAAI,GAAG,EAAAtB,MAAA,KAAAC,mBAAA,CAAAV,OAAA,EAAKnB,MAAM,EAAC;IAElC+C,aAAa,CAAC,UAAAI,cAAc,EAAI;MAC5B,OAAOrC,iBAAiB,CAAC,IAAIH,GAAG,CAACwC,cAAc,CAAC,EAAE,CAAC,CAAChD,SAAS,EAAEU,IAAI,CAAC,CAAC,EAAEqC,SAAS,CAAC;IACrF,CAAC,CAAC;;IAEF;IACA,OAAO,YAAM;MACT,IAAM3C,QAAQ,GAAGR,WAAW,CAACmD,SAAS,CAAC;MACvCH,aAAa,CAAC,UAAAI,cAAc,EAAI;QAC5B,IAAM9C,UAAU,GAAG,IAAIM,GAAG,CAACwC,cAAc,CAAC;QAC1C,IAAM1C,QAA4B,GAAGJ,UAAU,CAACK,GAAG,CAACH,QAAQ,CAAC,IAAI,IAAII,GAAG,CAAC,CAAC;QAC1E,IAAMC,MAAM,GAAGH,QAAQ,CAACC,GAAG,CAACP,SAAS,CAAC,IAAI;UACtCA,SAAS,EAAE,IAAI;UACfU,IAAI,EAAE;QACV,CAAC;QAED,IAAMuC,OAAO,GAAG,IAAAvB,mBAAA,CAAAV,OAAA,EAAIP,MAAM,CAACC,IAAI,EAAEwC,MAAM,CAAC,UAAAC,GAAG;UAAA,OAAI,CAACzC,IAAI,CAAC0C,QAAQ,CAACD,GAAG,CAAC;QAAA,EAAC;QACnE,IAAME,YAAY,GAAGtE,OAAO,CAAA6C,KAAA,aAAAF,mBAAA,CAAAV,OAAA,EAAI,IAAAU,mBAAA,CAAAV,OAAA,EAAIiC,OAAO,EAAEpB,OAAO,CAAC,CAAC,EAAC,CAAC7B,SAAS,CAAC;QAElEM,QAAQ,CAACqB,GAAG,CAAC3B,SAAS,EAAE;UACpBA,SAAS,EAAEqD,YAAY;UACvB3C,IAAI,EAAEuC;QACV,CAAC,CAAC;QAEF/C,UAAU,CAACyB,GAAG,CAACvB,QAAQ,EAAEE,QAAQ,CAAC;QAClC,OAAOJ,UAAU;MACrB,CAAC,CAAC;IACN,CAAC;EACL,CAAC,EACD,CAAC0C,aAAa,CAClB,CAAC;EAED,IAAMU,YAAY,GAAG,IAAAR,kBAAW,EAC5B,UAACS,SAAS,EAAiB;IAAA,IAAfC,KAAK,GAAAvE,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAU,SAAA,GAAAV,SAAA,MAAG,EAAE;IAClB,IAAMY,MAAM,IAAI,GAAG,EAAA4B,MAAA,KAAAC,mBAAA,CAAAV,OAAA,EAAKwC,KAAK,EAAC;IAC9B,KAAK,IAAIrD,CAAC,GAAGN,MAAM,CAACX,MAAM,EAAEiB,CAAC,GAAG,CAAC,EAAEA,CAAC,EAAE,EAAE;MACpC,IAAMC,QAAQ,GAAGR,WAAW,CAACC,MAAM,CAACQ,KAAK,CAAC,CAAC,EAAEF,CAAC,CAAC,CAAC;MAChD,IAAMG,QAA4B,GAAGJ,UAAU,CAACK,GAAG,CAACH,QAAQ,CAAC,IAAI,IAAII,GAAG,CAAC,CAAC;MAC1E,IAAMiD,iBAAiB,GAAGnD,QAAQ,CAACC,GAAG,CAACgD,SAAS,CAAC;MACjD,IAAIE,iBAAiB,EAAE;QACnB,OAAOA,iBAAiB,CAACzD,SAAS;MACtC;IACJ;IAEA,OAAOL,SAAS;EACpB,CAAC,EACD,CAACO,UAAU,CACf,CAAC;EAED,IAAMwD,OAA2B,GAAG,IAAAC,cAAO,EACvC;IAAA,OAAO;MACHL,YAAY,EAAZA,YAAY;MACZT,gBAAgB,EAAhBA,gBAAgB;MAChB3C,UAAU,EAAVA;IACJ,CAAC;EAAA,CAAC,EACF,CAACA,UAAU,EAAE2C,gBAAgB,CACjC,CAAC;EAED,IAAAe,gBAAS,EAAC,YAAM;IACZ,IAAIC,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,EAAE;MACvC;MACAC,MAAM,CAAC,+BAA+B,CAAC,GAAG,YAAM;QAC5CC,OAAO,CAACC,GAAG,CAAChE,UAAU,CAAC;MAC3B,CAAC;IACL;EACJ,CAAC,EAAE,CAACA,UAAU,CAAC,CAAC;EAEhB,oBAAOvB,MAAA,CAAAqC,OAAA,CAAAmD,aAAA,CAAC1E,kBAAkB,CAAC2E,QAAQ;IAAC7C,KAAK,EAAEmC;EAAQ,GAAErB,QAAsC,CAAC;AAChG,CAAC;AAEM,SAASgC,YAAYA,CAAIC,YAAe,EAAE;EAC7C,IAAMZ,OAAO,GAAGa,sBAAsB,CAAC,CAAC;EACxC,IAAMf,KAAK,GAAG,IAAAgB,qCAAmB,EAAC,CAAC;EAEnC,IAAI,CAACd,OAAO,EAAE;IACV,OAAOY,YAAY;EACvB;EAEA,OAAQZ,OAAO,CAACJ,YAAY,CAACgB,YAAY,EAASd,KAAK,CAAC,IAAIc,YAAY;AAC5E;;AAEA;AACA;AACA;AACO,SAASG,cAAcA,CAAA,EAAG;EAC7B,IAAMf,OAAO,GAAG,IAAAgB,iBAAU,EAACjF,kBAAkB,CAAC;EAC9C,IAAI,CAACiE,OAAO,EAAE;IACV,MAAM,IAAIiB,KAAK,gFAEf,CAAC;EACL;EAEA,OAAOjB,OAAO;AAClB;;AAEA;AACA;AACA;AACO,SAASa,sBAAsBA,CAAA,EAAG;EACrC,OAAO,IAAAG,iBAAU,EAACjF,kBAAkB,CAAC;AACzC","ignoreList":[]}
@@ -59,7 +59,9 @@ function createVoidComponent() {
59
59
  }
60
60
  function makeDecoratable(hookOrName, Component) {
61
61
  if (Component) {
62
- return makeDecoratableComponent(hookOrName, /*#__PURE__*/_react.default.memo(Component));
62
+ var component = makeDecoratableComponent(hookOrName, /*#__PURE__*/_react.default.memo(Component));
63
+ component.original.displayName = hookOrName;
64
+ return component;
63
65
  }
64
66
  return makeDecoratableHook(hookOrName);
65
67
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_Context","_decorators","ComposableContext","createContext","displayName","useComposableParents","context","useContext","nullRenderer","makeDecoratableComponent","name","Component","arguments","length","undefined","Decoratable","props","parents","ComposedComponent","useComponent","useMemo","concat","_toConsumableArray2","default","createElement","Provider","value","children","staticProps","original","originalName","withDecoratorFactory","Object","assign","makeDecoratableHook","hook","decoratableHook","params","composedHook","withHookDecoratorFactory","createVoidComponent","makeDecoratable","hookOrName","React","memo"],"sources":["makeDecoratable.tsx"],"sourcesContent":["import React, { createContext, useContext, useMemo } from \"react\";\nimport { useComponent } from \"./Context\";\nimport { DecoratableComponent, DecoratableHook, GenericComponent, GenericHook } from \"~/types\";\nimport { withDecoratorFactory, withHookDecoratorFactory } from \"~/decorators\";\n\nconst ComposableContext = createContext<string[]>([]);\nComposableContext.displayName = \"ComposableContext\";\n\nfunction useComposableParents() {\n const context = useContext(ComposableContext);\n if (!context) {\n return [];\n }\n\n return context;\n}\n\nconst nullRenderer = () => null;\n\nfunction makeDecoratableComponent<T extends GenericComponent>(\n name: string,\n Component: T = nullRenderer as unknown as T\n) {\n const Decoratable = (props: React.ComponentProps<T>): JSX.Element | null => {\n const parents = useComposableParents();\n const ComposedComponent = useComponent(Component) as GenericComponent<\n React.ComponentProps<T>\n >;\n\n const context = useMemo(() => [...parents, name], [parents, name]);\n\n return (\n <ComposableContext.Provider value={context}>\n <ComposedComponent {...props}>{props.children}</ComposedComponent>\n </ComposableContext.Provider>\n );\n };\n\n const staticProps = {\n original: Component,\n originalName: name,\n displayName: `Decoratable<${name}>`\n };\n\n return withDecoratorFactory()(\n Object.assign(Decoratable, staticProps) as DecoratableComponent<\n typeof Component & typeof staticProps\n >\n );\n}\n\nexport function makeDecoratableHook<T extends GenericHook>(hook: T) {\n const decoratableHook = (params: Parameters<T>) => {\n const composedHook = useComponent(hook);\n\n return composedHook(params) as DecoratableHook<T>;\n };\n\n decoratableHook.original = hook;\n\n return withHookDecoratorFactory()(decoratableHook as DecoratableHook<T>);\n}\n\nexport function createVoidComponent<T>() {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n return (props: T): JSX.Element | null => {\n return null;\n };\n}\n\nexport function makeDecoratable<T extends GenericHook>(\n hook: T\n): ReturnType<typeof makeDecoratableHook<T>>;\nexport function makeDecoratable<T extends GenericComponent>(\n name: string,\n Component: T\n): ReturnType<typeof makeDecoratableComponent<T>>;\nexport function makeDecoratable(hookOrName: any, Component?: any) {\n if (Component) {\n return makeDecoratableComponent(hookOrName, React.memo(Component));\n }\n\n return makeDecoratableHook(hookOrName);\n}\n"],"mappings":";;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAEA,IAAAE,WAAA,GAAAF,OAAA;AAEA,IAAMG,iBAAiB,gBAAG,IAAAC,oBAAa,EAAW,EAAE,CAAC;AACrDD,iBAAiB,CAACE,WAAW,GAAG,mBAAmB;AAEnD,SAASC,oBAAoBA,CAAA,EAAG;EAC5B,IAAMC,OAAO,GAAG,IAAAC,iBAAU,EAACL,iBAAiB,CAAC;EAC7C,IAAI,CAACI,OAAO,EAAE;IACV,OAAO,EAAE;EACb;EAEA,OAAOA,OAAO;AAClB;AAEA,IAAME,YAAY,GAAG,SAAfA,YAAYA,CAAA;EAAA,OAAS,IAAI;AAAA;AAE/B,SAASC,wBAAwBA,CAC7BC,IAAY,EAEd;EAAA,IADEC,SAAY,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGJ,YAAY;EAE3B,IAAMO,WAAW,GAAG,SAAdA,WAAWA,CAAIC,KAA8B,EAAyB;IACxE,IAAMC,OAAO,GAAGZ,oBAAoB,CAAC,CAAC;IACtC,IAAMa,iBAAiB,GAAG,IAAAC,qBAAY,EAACR,SAAS,CAE/C;IAED,IAAML,OAAO,GAAG,IAAAc,cAAO,EAAC;MAAA,UAAAC,MAAA,KAAAC,mBAAA,CAAAC,OAAA,EAAUN,OAAO,IAAEP,IAAI;IAAA,CAAC,EAAE,CAACO,OAAO,EAAEP,IAAI,CAAC,CAAC;IAElE,oBACIb,MAAA,CAAA0B,OAAA,CAAAC,aAAA,CAACtB,iBAAiB,CAACuB,QAAQ;MAACC,KAAK,EAAEpB;IAAQ,gBACvCT,MAAA,CAAA0B,OAAA,CAAAC,aAAA,CAACN,iBAAiB,EAAKF,KAAK,EAAGA,KAAK,CAACW,QAA4B,CACzC,CAAC;EAErC,CAAC;EAED,IAAMC,WAAW,GAAG;IAChBC,QAAQ,EAAElB,SAAS;IACnBmB,YAAY,EAAEpB,IAAI;IAClBN,WAAW,iBAAAiB,MAAA,CAAiBX,IAAI;EACpC,CAAC;EAED,OAAO,IAAAqB,gCAAoB,EAAC,CAAC,CACzBC,MAAM,CAACC,MAAM,CAAClB,WAAW,EAAEa,WAAW,CAG1C,CAAC;AACL;AAEO,SAASM,mBAAmBA,CAAwBC,IAAO,EAAE;EAChE,IAAMC,eAAe,GAAG,SAAlBA,eAAeA,CAAIC,MAAqB,EAAK;IAC/C,IAAMC,YAAY,GAAG,IAAAnB,qBAAY,EAACgB,IAAI,CAAC;IAEvC,OAAOG,YAAY,CAACD,MAAM,CAAC;EAC/B,CAAC;EAEDD,eAAe,CAACP,QAAQ,GAAGM,IAAI;EAE/B,OAAO,IAAAI,oCAAwB,EAAC,CAAC,CAACH,eAAqC,CAAC;AAC5E;AAEO,SAASI,mBAAmBA,CAAA,EAAM;EACrC;EACA,OAAO,UAACxB,KAAQ,EAAyB;IACrC,OAAO,IAAI;EACf,CAAC;AACL;AASO,SAASyB,eAAeA,CAACC,UAAe,EAAE/B,SAAe,EAAE;EAC9D,IAAIA,SAAS,EAAE;IACX,OAAOF,wBAAwB,CAACiC,UAAU,eAAEC,cAAK,CAACC,IAAI,CAACjC,SAAS,CAAC,CAAC;EACtE;EAEA,OAAOuB,mBAAmB,CAACQ,UAAU,CAAC;AAC1C","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_Context","_decorators","ComposableContext","createContext","displayName","useComposableParents","context","useContext","nullRenderer","makeDecoratableComponent","name","Component","arguments","length","undefined","Decoratable","props","parents","ComposedComponent","useComponent","useMemo","concat","_toConsumableArray2","default","createElement","Provider","value","children","staticProps","original","originalName","withDecoratorFactory","Object","assign","makeDecoratableHook","hook","decoratableHook","params","composedHook","withHookDecoratorFactory","createVoidComponent","makeDecoratable","hookOrName","component","React","memo"],"sources":["makeDecoratable.tsx"],"sourcesContent":["import React, { createContext, useContext, useMemo } from \"react\";\nimport { useComponent } from \"./Context\";\nimport { DecoratableComponent, DecoratableHook, GenericComponent, GenericHook } from \"~/types\";\nimport { withDecoratorFactory, withHookDecoratorFactory } from \"~/decorators\";\n\nconst ComposableContext = createContext<string[]>([]);\nComposableContext.displayName = \"ComposableContext\";\n\nfunction useComposableParents() {\n const context = useContext(ComposableContext);\n if (!context) {\n return [];\n }\n\n return context;\n}\n\nconst nullRenderer = () => null;\n\nfunction makeDecoratableComponent<T extends GenericComponent>(\n name: string,\n Component: T = nullRenderer as unknown as T\n) {\n const Decoratable = (props: React.ComponentProps<T>): JSX.Element | null => {\n const parents = useComposableParents();\n const ComposedComponent = useComponent(Component) as GenericComponent<\n React.ComponentProps<T>\n >;\n\n const context = useMemo(() => [...parents, name], [parents, name]);\n\n return (\n <ComposableContext.Provider value={context}>\n <ComposedComponent {...props}>{props.children}</ComposedComponent>\n </ComposableContext.Provider>\n );\n };\n\n const staticProps = {\n original: Component,\n originalName: name,\n displayName: `Decoratable<${name}>`\n };\n\n return withDecoratorFactory()(\n Object.assign(Decoratable, staticProps) as DecoratableComponent<\n typeof Component & typeof staticProps\n >\n );\n}\n\nexport function makeDecoratableHook<T extends GenericHook>(hook: T) {\n const decoratableHook = (params: Parameters<T>) => {\n const composedHook = useComponent(hook);\n\n return composedHook(params) as DecoratableHook<T>;\n };\n\n decoratableHook.original = hook;\n\n return withHookDecoratorFactory()(decoratableHook as DecoratableHook<T>);\n}\n\nexport function createVoidComponent<T>() {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n return (props: T): JSX.Element | null => {\n return null;\n };\n}\n\nexport function makeDecoratable<T extends GenericHook>(\n hook: T\n): ReturnType<typeof makeDecoratableHook<T>>;\nexport function makeDecoratable<T extends GenericComponent>(\n name: string,\n Component: T\n): ReturnType<typeof makeDecoratableComponent<T>>;\nexport function makeDecoratable(hookOrName: any, Component?: any) {\n if (Component) {\n const component = makeDecoratableComponent(hookOrName, React.memo(Component));\n component.original.displayName = hookOrName;\n return component;\n }\n\n return makeDecoratableHook(hookOrName);\n}\n"],"mappings":";;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAEA,IAAAE,WAAA,GAAAF,OAAA;AAEA,IAAMG,iBAAiB,gBAAG,IAAAC,oBAAa,EAAW,EAAE,CAAC;AACrDD,iBAAiB,CAACE,WAAW,GAAG,mBAAmB;AAEnD,SAASC,oBAAoBA,CAAA,EAAG;EAC5B,IAAMC,OAAO,GAAG,IAAAC,iBAAU,EAACL,iBAAiB,CAAC;EAC7C,IAAI,CAACI,OAAO,EAAE;IACV,OAAO,EAAE;EACb;EAEA,OAAOA,OAAO;AAClB;AAEA,IAAME,YAAY,GAAG,SAAfA,YAAYA,CAAA;EAAA,OAAS,IAAI;AAAA;AAE/B,SAASC,wBAAwBA,CAC7BC,IAAY,EAEd;EAAA,IADEC,SAAY,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGJ,YAAY;EAE3B,IAAMO,WAAW,GAAG,SAAdA,WAAWA,CAAIC,KAA8B,EAAyB;IACxE,IAAMC,OAAO,GAAGZ,oBAAoB,CAAC,CAAC;IACtC,IAAMa,iBAAiB,GAAG,IAAAC,qBAAY,EAACR,SAAS,CAE/C;IAED,IAAML,OAAO,GAAG,IAAAc,cAAO,EAAC;MAAA,UAAAC,MAAA,KAAAC,mBAAA,CAAAC,OAAA,EAAUN,OAAO,IAAEP,IAAI;IAAA,CAAC,EAAE,CAACO,OAAO,EAAEP,IAAI,CAAC,CAAC;IAElE,oBACIb,MAAA,CAAA0B,OAAA,CAAAC,aAAA,CAACtB,iBAAiB,CAACuB,QAAQ;MAACC,KAAK,EAAEpB;IAAQ,gBACvCT,MAAA,CAAA0B,OAAA,CAAAC,aAAA,CAACN,iBAAiB,EAAKF,KAAK,EAAGA,KAAK,CAACW,QAA4B,CACzC,CAAC;EAErC,CAAC;EAED,IAAMC,WAAW,GAAG;IAChBC,QAAQ,EAAElB,SAAS;IACnBmB,YAAY,EAAEpB,IAAI;IAClBN,WAAW,iBAAAiB,MAAA,CAAiBX,IAAI;EACpC,CAAC;EAED,OAAO,IAAAqB,gCAAoB,EAAC,CAAC,CACzBC,MAAM,CAACC,MAAM,CAAClB,WAAW,EAAEa,WAAW,CAG1C,CAAC;AACL;AAEO,SAASM,mBAAmBA,CAAwBC,IAAO,EAAE;EAChE,IAAMC,eAAe,GAAG,SAAlBA,eAAeA,CAAIC,MAAqB,EAAK;IAC/C,IAAMC,YAAY,GAAG,IAAAnB,qBAAY,EAACgB,IAAI,CAAC;IAEvC,OAAOG,YAAY,CAACD,MAAM,CAAC;EAC/B,CAAC;EAEDD,eAAe,CAACP,QAAQ,GAAGM,IAAI;EAE/B,OAAO,IAAAI,oCAAwB,EAAC,CAAC,CAACH,eAAqC,CAAC;AAC5E;AAEO,SAASI,mBAAmBA,CAAA,EAAM;EACrC;EACA,OAAO,UAACxB,KAAQ,EAAyB;IACrC,OAAO,IAAI;EACf,CAAC;AACL;AASO,SAASyB,eAAeA,CAACC,UAAe,EAAE/B,SAAe,EAAE;EAC9D,IAAIA,SAAS,EAAE;IACX,IAAMgC,SAAS,GAAGlC,wBAAwB,CAACiC,UAAU,eAAEE,cAAK,CAACC,IAAI,CAAClC,SAAS,CAAC,CAAC;IAC7EgC,SAAS,CAACd,QAAQ,CAACzB,WAAW,GAAGsC,UAAU;IAC3C,OAAOC,SAAS;EACpB;EAEA,OAAOT,mBAAmB,CAACQ,UAAU,CAAC;AAC1C","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/react-composition",
3
- "version": "5.41.5-beta.0",
3
+ "version": "5.41.5-beta.1",
4
4
  "main": "index.js",
5
5
  "repository": {
6
6
  "type": "git",
@@ -25,8 +25,8 @@
25
25
  "@babel/preset-env": "7.24.3",
26
26
  "@babel/preset-typescript": "7.24.1",
27
27
  "@testing-library/react": "15.0.7",
28
- "@webiny/cli": "5.41.5-beta.0",
29
- "@webiny/project-utils": "5.41.5-beta.0",
28
+ "@webiny/cli": "5.41.5-beta.1",
29
+ "@webiny/project-utils": "5.41.5-beta.1",
30
30
  "ttypescript": "1.5.15",
31
31
  "typescript": "4.9.5"
32
32
  },
@@ -38,5 +38,5 @@
38
38
  "build": "yarn webiny run build",
39
39
  "watch": "yarn webiny run watch"
40
40
  },
41
- "gitHead": "daa4faaafec4cd4053c64028d18806ea25b2c583"
41
+ "gitHead": "922a47688dd519ddc10b598d3ae79cb3186e3173"
42
42
  }