diff --git a/.babelrc b/.babelrc
new file mode 100644
index 0000000..d604723
--- /dev/null
+++ b/.babelrc
@@ -0,0 +1,4 @@
+{
+  "presets": ["@babel/preset-env"],
+  "plugins": ["@babel/plugin-transform-modules-commonjs"]
+}
diff --git a/.npmignore b/.npmignore
new file mode 100644
index 0000000..1a1a903
--- /dev/null
+++ b/.npmignore
@@ -0,0 +1,4 @@
+node_modules
+src
+dist
+tsconfig.json
diff --git a/cjs/contexts/index.d.ts b/cjs/contexts/index.d.ts
new file mode 100644
index 0000000..10233aa
--- /dev/null
+++ b/cjs/contexts/index.d.ts
@@ -0,0 +1,4 @@
+/// <reference types="react" />
+import { GXContextType } from "./types";
+declare const GXContext: import("react").Context<GXContextType>;
+export default GXContext;
diff --git a/cjs/contexts/index.js b/cjs/contexts/index.js
new file mode 100644
index 0000000..0aeec25
--- /dev/null
+++ b/cjs/contexts/index.js
@@ -0,0 +1,12 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+var react_1 = require("react");
+var GXContext = (0, react_1.createContext)({
+  signals: [],
+  dispatch: function dispatch() {}
+});
+exports.default = GXContext;
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZWFjdF8xIiwicmVxdWlyZSIsIkdYQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJzaWduYWxzIiwiZGlzcGF0Y2giLCJleHBvcnRzIiwiZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0cy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLE9BQUE7QUFHQSxJQUFNQyxTQUFTLEdBQUcsSUFBQUYsT0FBQSxDQUFBRyxhQUFhLEVBQWdCO0VBQzdDQyxPQUFPLEVBQUUsRUFBRTtFQUNYQyxRQUFRLEVBQUUsU0FBQUEsU0FBQSxFQUFLLENBQUU7Q0FDbEIsQ0FBQztBQUVGQyxPQUFBLENBQUFDLE9BQUEsR0FBZUwsU0FBUyJ9
\ No newline at end of file
diff --git a/cjs/contexts/index.js.map b/cjs/contexts/index.js.map
new file mode 100644
index 0000000..24febf7
--- /dev/null
+++ b/cjs/contexts/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/contexts/index.ts"],"names":[],"mappings":";;AAAA,iCAAsC;AAGtC,MAAM,SAAS,GAAG,IAAA,qBAAa,EAAgB;IAC7C,OAAO,EAAE,EAAE;IACX,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;CACnB,CAAC,CAAC;AAEH,kBAAe,SAAS,CAAA"}
\ No newline at end of file
diff --git a/cjs/contexts/types.d.ts b/cjs/contexts/types.d.ts
new file mode 100644
index 0000000..9b5bb4b
--- /dev/null
+++ b/cjs/contexts/types.d.ts
@@ -0,0 +1,19 @@
+/// <reference types="react" />
+import { GXAction } from "../providers/types";
+export type GXSignalType<T = any> = {
+    name: string;
+    state: T;
+    actions: GXActionType<T>[];
+};
+export type GXActionType<T, P = any> = {
+    type: string;
+    handler: (state: T, payload: P) => T;
+};
+export type DispatchedActionType = {
+    type: string;
+    payload: any;
+};
+export type GXContextType = {
+    signals: GXSignalType[];
+    dispatch: React.Dispatch<GXAction>;
+};
diff --git a/cjs/contexts/types.js b/cjs/contexts/types.js
new file mode 100644
index 0000000..74da1f2
--- /dev/null
+++ b/cjs/contexts/types.js
@@ -0,0 +1,6 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRleHRzL3R5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbbnVsbF0sIm1hcHBpbmdzIjoiIn0=
\ No newline at end of file
diff --git a/cjs/contexts/types.js.map b/cjs/contexts/types.js.map
new file mode 100644
index 0000000..50cfc6a
--- /dev/null
+++ b/cjs/contexts/types.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/contexts/types.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/cjs/helpers/createSignal.d.ts b/cjs/helpers/createSignal.d.ts
new file mode 100644
index 0000000..59ce0f7
--- /dev/null
+++ b/cjs/helpers/createSignal.d.ts
@@ -0,0 +1,13 @@
+import { CreateSignalOptionType } from './types';
+import { GXActionType } from '../contexts/types';
+/**
+ * Create a signal with a state and actions for managing this state
+ * @param options
+ * @returns
+ */
+declare const createSignal: <T>(options: CreateSignalOptionType<T>) => {
+    name: string;
+    state: T;
+    actions: GXActionType<T, any>[];
+};
+export default createSignal;
diff --git a/cjs/helpers/createSignal.js b/cjs/helpers/createSignal.js
new file mode 100644
index 0000000..0388d14
--- /dev/null
+++ b/cjs/helpers/createSignal.js
@@ -0,0 +1,31 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+/**
+ * Create a signal with a state and actions for managing this state
+ * @param options
+ * @returns
+ */
+var createSignal = function createSignal(options) {
+  var actions = [];
+  // Convert the actions object to an array
+  var actionsTable = Object.entries(options.actions);
+  for (var _i = 0, _actionsTable = actionsTable; _i < _actionsTable.length; _i++) {
+    var action = _actionsTable[_i];
+    actions.push({
+      type: "".concat(options.name, "/").concat(action[0]),
+      handler: action[1]
+    });
+  }
+  // Create a signal
+  var signal = {
+    name: options.name,
+    state: options.state,
+    actions: actions
+  };
+  return signal;
+};
+exports.default = createSignal;
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVTaWduYWwiLCJvcHRpb25zIiwiYWN0aW9ucyIsImFjdGlvbnNUYWJsZSIsIk9iamVjdCIsImVudHJpZXMiLCJfaSIsIl9hY3Rpb25zVGFibGUiLCJsZW5ndGgiLCJhY3Rpb24iLCJwdXNoIiwidHlwZSIsImNvbmNhdCIsIm5hbWUiLCJoYW5kbGVyIiwic2lnbmFsIiwic3RhdGUiLCJleHBvcnRzIiwiZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9oZWxwZXJzL2NyZWF0ZVNpZ25hbC50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFHQTs7Ozs7QUFLQSxJQUFNQSxZQUFZLEdBQUcsU0FBZkEsWUFBWUEsQ0FBT0MsT0FBa0MsRUFBSTtFQUM3RCxJQUFNQyxPQUFPLEdBQTJCLEVBQUU7RUFFMUM7RUFDQSxJQUFNQyxZQUFZLEdBQUdDLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDSixPQUFPLENBQUNDLE9BQU8sQ0FBQztFQUVwRCxTQUFBSSxFQUFBLE1BQUFDLGFBQUEsR0FBbUJKLFlBQVksRUFBQUcsRUFBQSxHQUFBQyxhQUFBLENBQUFDLE1BQUEsRUFBQUYsRUFBQSxJQUFFO0lBQTVCLElBQUlHLE1BQU0sR0FBQUYsYUFBQSxDQUFBRCxFQUFBO0lBQ2JKLE9BQU8sQ0FBQ1EsSUFBSSxDQUFDO01BQ1hDLElBQUksS0FBQUMsTUFBQSxDQUFLWCxPQUFPLENBQUNZLElBQUksT0FBQUQsTUFBQSxDQUFJSCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUU7TUFDcENLLE9BQU8sRUFBRUwsTUFBTSxDQUFDLENBQUM7S0FDbEIsQ0FBQzs7RUFHSjtFQUNBLElBQU1NLE1BQU0sR0FBRztJQUNiRixJQUFJLEVBQUVaLE9BQU8sQ0FBQ1ksSUFBSTtJQUNsQkcsS0FBSyxFQUFFZixPQUFPLENBQUNlLEtBQUs7SUFDcEJkLE9BQU8sRUFBUEE7R0FDRDtFQUVELE9BQU9hLE1BQU07QUFDZixDQUFDO0FBRURFLE9BQUEsQ0FBQUMsT0FBQSxHQUFlbEIsWUFBWSJ9
\ No newline at end of file
diff --git a/cjs/helpers/createSignal.js.map b/cjs/helpers/createSignal.js.map
new file mode 100644
index 0000000..c3dddca
--- /dev/null
+++ b/cjs/helpers/createSignal.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"createSignal.js","sourceRoot":"","sources":["../../src/helpers/createSignal.ts"],"names":[],"mappings":";;AAGA;;;;GAIG;AACH,MAAM,YAAY,GAAG,CAAI,OAAkC,EAAE,EAAE;IAC7D,MAAM,OAAO,GAA2B,EAAE,CAAC;IAE3C,yCAAyC;IACzC,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAEpD,KAAK,IAAI,MAAM,IAAI,YAAY,EAAE;QAC/B,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE;YACpC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;SACnB,CAAC,CAAA;KACH;IAED,kBAAkB;IAClB,MAAM,MAAM,GAAG;QACb,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,OAAO;KACR,CAAA;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAA;AAED,kBAAe,YAAY,CAAC"}
\ No newline at end of file
diff --git a/cjs/helpers/createStore.d.ts b/cjs/helpers/createStore.d.ts
new file mode 100644
index 0000000..cdcabf4
--- /dev/null
+++ b/cjs/helpers/createStore.d.ts
@@ -0,0 +1,4 @@
+import { GXSignalType } from "../contexts/types";
+import { CreateStoreType } from "./types";
+declare const createStore: (signals: GXSignalType[]) => CreateStoreType;
+export default createStore;
diff --git a/cjs/helpers/createStore.js b/cjs/helpers/createStore.js
new file mode 100644
index 0000000..dfa0e25
--- /dev/null
+++ b/cjs/helpers/createStore.js
@@ -0,0 +1,14 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+var createStore = function createStore(signals) {
+  return {
+    getSignals: function getSignals() {
+      return signals;
+    }
+  };
+};
+exports.default = createStore;
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVTdG9yZSIsInNpZ25hbHMiLCJnZXRTaWduYWxzIiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvaGVscGVycy9jcmVhdGVTdG9yZS50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFHQSxJQUFNQSxXQUFXLEdBQUcsU0FBZEEsV0FBV0EsQ0FBSUMsT0FBdUIsRUFBcUI7RUFDL0QsT0FBTztJQUNMQyxVQUFVLEVBQUUsU0FBQUEsV0FBQTtNQUFBLE9BQU1ELE9BQU87SUFBQTtHQUMxQjtBQUNILENBQUM7QUFFREUsT0FBQSxDQUFBQyxPQUFBLEdBQWVKLFdBQVcifQ==
\ No newline at end of file
diff --git a/cjs/helpers/createStore.js.map b/cjs/helpers/createStore.js.map
new file mode 100644
index 0000000..90cccb2
--- /dev/null
+++ b/cjs/helpers/createStore.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"createStore.js","sourceRoot":"","sources":["../../src/helpers/createStore.ts"],"names":[],"mappings":";;AAGA,MAAM,WAAW,GAAG,CAAC,OAAuB,EAAmB,EAAE;IAC/D,OAAO;QACL,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO;KAC1B,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,WAAW,CAAC"}
\ No newline at end of file
diff --git a/cjs/helpers/types.d.ts b/cjs/helpers/types.d.ts
new file mode 100644
index 0000000..59eb067
--- /dev/null
+++ b/cjs/helpers/types.d.ts
@@ -0,0 +1,12 @@
+import { GXSignalType } from "../contexts/types";
+export type CreateSignalOptionType<T> = {
+    name: string;
+    state: T;
+    actions: Action<T>;
+};
+export type CreateStoreType = {
+    getSignals: () => GXSignalType[];
+};
+export type Action<T> = {
+    [key: string]: (state: T, payload: any) => T;
+};
diff --git a/cjs/helpers/types.js b/cjs/helpers/types.js
new file mode 100644
index 0000000..a35be81
--- /dev/null
+++ b/cjs/helpers/types.js
@@ -0,0 +1,6 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hlbHBlcnMvdHlwZXMudHMiXSwic291cmNlc0NvbnRlbnQiOltudWxsXSwibWFwcGluZ3MiOiIifQ==
\ No newline at end of file
diff --git a/cjs/helpers/types.js.map b/cjs/helpers/types.js.map
new file mode 100644
index 0000000..bc4cff3
--- /dev/null
+++ b/cjs/helpers/types.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/helpers/types.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/cjs/hooks/types.d.ts b/cjs/hooks/types.d.ts
new file mode 100644
index 0000000..5ea0015
--- /dev/null
+++ b/cjs/hooks/types.d.ts
@@ -0,0 +1,3 @@
+export type Actions = {
+    [key: string]: (payload: any) => void;
+};
diff --git a/cjs/hooks/types.js b/cjs/hooks/types.js
new file mode 100644
index 0000000..f77d742
--- /dev/null
+++ b/cjs/hooks/types.js
@@ -0,0 +1,6 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hvb2tzL3R5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbbnVsbF0sIm1hcHBpbmdzIjoiIn0=
\ No newline at end of file
diff --git a/cjs/hooks/types.js.map b/cjs/hooks/types.js.map
new file mode 100644
index 0000000..c660c10
--- /dev/null
+++ b/cjs/hooks/types.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/hooks/types.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/cjs/hooks/useAction.d.ts b/cjs/hooks/useAction.d.ts
new file mode 100644
index 0000000..b7661c7
--- /dev/null
+++ b/cjs/hooks/useAction.d.ts
@@ -0,0 +1,2 @@
+declare const useAction: (signalName: string, action: string) => (payload: any) => void;
+export default useAction;
diff --git a/cjs/hooks/useAction.js b/cjs/hooks/useAction.js
new file mode 100644
index 0000000..98a4a69
--- /dev/null
+++ b/cjs/hooks/useAction.js
@@ -0,0 +1,19 @@
+"use strict";
+
+var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
+  return mod && mod.__esModule ? mod : {
+    "default": mod
+  };
+};
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+var useActions_1 = __importDefault(require("./useActions"));
+var useAction = function useAction(signalName, action) {
+  if (!signalName || typeof signalName !== "string") throw new Error("Provide a signalName as a first argument of useAction");
+  if (!action || typeof action !== "string") throw new Error("Provide an action as second argument of useAction");
+  var actions = (0, useActions_1.default)(signalName, action);
+  return Object.values(actions)[0];
+};
+exports.default = useAction;
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VBY3Rpb25zXzEiLCJfX2ltcG9ydERlZmF1bHQiLCJyZXF1aXJlIiwidXNlQWN0aW9uIiwic2lnbmFsTmFtZSIsImFjdGlvbiIsIkVycm9yIiwiYWN0aW9ucyIsImRlZmF1bHQiLCJPYmplY3QiLCJ2YWx1ZXMiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hvb2tzL3VzZUFjdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLElBQUFBLFlBQUEsR0FBQUMsZUFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBTUMsU0FBUyxHQUFHLFNBQVpBLFNBQVNBLENBQUlDLFVBQWtCLEVBQUVDLE1BQWMsRUFBSTtFQUN2RCxJQUFJLENBQUNELFVBQVUsSUFBSSxPQUFPQSxVQUFVLEtBQUssUUFBUSxFQUMvQyxNQUFNLElBQUlFLEtBQUssQ0FBQyx1REFBdUQsQ0FBQztFQUUxRSxJQUFJLENBQUNELE1BQU0sSUFBSSxPQUFPQSxNQUFNLEtBQUssUUFBUSxFQUN2QyxNQUFNLElBQUlDLEtBQUssQ0FBQyxtREFBbUQsQ0FBQztFQUV0RSxJQUFNQyxPQUFPLEdBQUcsSUFBQVAsWUFBQSxDQUFBUSxPQUFVLEVBQUNKLFVBQVUsRUFBRUMsTUFBTSxDQUFDO0VBRTlDLE9BQU9JLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDSCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEMsQ0FBQztBQUVESSxPQUFBLENBQUFILE9BQUEsR0FBZUwsU0FBUyJ9
\ No newline at end of file
diff --git a/cjs/hooks/useAction.js.map b/cjs/hooks/useAction.js.map
new file mode 100644
index 0000000..043e7e7
--- /dev/null
+++ b/cjs/hooks/useAction.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"useAction.js","sourceRoot":"","sources":["../../src/hooks/useAction.ts"],"names":[],"mappings":";;;;;AAAA,8DAAsC;AAEtC,MAAM,SAAS,GAAG,CAAC,UAAkB,EAAE,MAAc,EAAE,EAAE;IACvD,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ;QAC/C,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAE3E,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QACvC,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IAEvE,MAAM,OAAO,GAAG,IAAA,oBAAU,EAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAE/C,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC,CAAC;AAEF,kBAAe,SAAS,CAAC"}
\ No newline at end of file
diff --git a/cjs/hooks/useActions.d.ts b/cjs/hooks/useActions.d.ts
new file mode 100644
index 0000000..07ef067
--- /dev/null
+++ b/cjs/hooks/useActions.d.ts
@@ -0,0 +1,3 @@
+import { Actions } from "./types";
+declare const useActions: (signalName: string, ...actions: string[]) => Actions;
+export default useActions;
diff --git a/cjs/hooks/useActions.js b/cjs/hooks/useActions.js
new file mode 100644
index 0000000..f2fa582
--- /dev/null
+++ b/cjs/hooks/useActions.js
@@ -0,0 +1,84 @@
+"use strict";
+
+function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
+var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
+  return mod && mod.__esModule ? mod : {
+    "default": mod
+  };
+};
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+var react_1 = require("react");
+var contexts_1 = __importDefault(require("../contexts"));
+var useActions = function useActions(signalName) {
+  for (var _len = arguments.length, actions = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
+    actions[_key - 1] = arguments[_key];
+  }
+  if (!signalName || typeof signalName !== "string") throw new Error("Provide a signalName as first argument of useActions");
+  // Get Global Context
+  var _ref = (0, react_1.useContext)(contexts_1.default),
+    signals = _ref.signals,
+    dispatch = _ref.dispatch;
+  // Some handlers
+  /**
+   * Get actions of a signal
+   * @param signalName
+   * @returns
+   */
+  var handleGetActions = function handleGetActions(signalName) {
+    var signal = signals.find(function (signal) {
+      return signal.name === signalName;
+    });
+    if (signal) {
+      if (!actions || actions.length === 0) return signal.actions;
+      var filteredActions = [];
+      var _loop = function _loop() {
+        var action = _actions[_i];
+        var actionName = "".concat(signalName, "/").concat(action);
+        var retrievedAction = signal.actions.find(function (act) {
+          return act.type === actionName;
+        });
+        if (retrievedAction) filteredActions.push(retrievedAction);else throw new Error("Action ".concat(actionName, " not found"));
+      };
+      for (var _i = 0, _actions = actions; _i < _actions.length; _i++) {
+        _loop();
+      }
+      return filteredActions;
+    } else throw new Error("Signal ".concat(signalName, " not found"));
+  };
+  var handleFormatActions = function handleFormatActions() {
+    // Get actions
+    var nonFormattedActions = handleGetActions(signalName);
+    // Formatted actions
+    var formattedActions = {};
+    var _iterator = _createForOfIteratorHelper(nonFormattedActions),
+      _step;
+    try {
+      var _loop2 = function _loop2() {
+        var action = _step.value;
+        // Get action name
+        var actionName = action.type.split("/")[1];
+        formattedActions[actionName] = function (payload) {
+          dispatch({
+            type: action.type,
+            payload: payload
+          });
+        };
+      };
+      for (_iterator.s(); !(_step = _iterator.n()).done;) {
+        _loop2();
+      }
+    } catch (err) {
+      _iterator.e(err);
+    } finally {
+      _iterator.f();
+    }
+    return formattedActions;
+  };
+  return handleFormatActions();
+};
+exports.default = useActions;
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZWFjdF8xIiwicmVxdWlyZSIsImNvbnRleHRzXzEiLCJfX2ltcG9ydERlZmF1bHQiLCJ1c2VBY3Rpb25zIiwic2lnbmFsTmFtZSIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhY3Rpb25zIiwiQXJyYXkiLCJfa2V5IiwiRXJyb3IiLCJfcmVmIiwidXNlQ29udGV4dCIsImRlZmF1bHQiLCJzaWduYWxzIiwiZGlzcGF0Y2giLCJoYW5kbGVHZXRBY3Rpb25zIiwic2lnbmFsIiwiZmluZCIsIm5hbWUiLCJmaWx0ZXJlZEFjdGlvbnMiLCJfbG9vcCIsImFjdGlvbiIsIl9hY3Rpb25zIiwiX2kiLCJhY3Rpb25OYW1lIiwiY29uY2F0IiwicmV0cmlldmVkQWN0aW9uIiwiYWN0IiwidHlwZSIsInB1c2giLCJoYW5kbGVGb3JtYXRBY3Rpb25zIiwibm9uRm9ybWF0dGVkQWN0aW9ucyIsImZvcm1hdHRlZEFjdGlvbnMiLCJfaXRlcmF0b3IiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIl9zdGVwIiwiX2xvb3AyIiwidmFsdWUiLCJzcGxpdCIsInBheWxvYWQiLCJzIiwibiIsImRvbmUiLCJlcnIiLCJlIiwiZiIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvdXNlQWN0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLFVBQUEsR0FBQUMsZUFBQSxDQUFBRixPQUFBO0FBSUEsSUFBTUcsVUFBVSxHQUFHLFNBQWJBLFVBQVVBLENBQUlDLFVBQWtCLEVBQTBCO0VBQUEsU0FBQUMsSUFBQSxHQUFBQyxTQUFBLENBQUFDLE1BQUEsRUFBckJDLE9BQWlCLE9BQUFDLEtBQUEsQ0FBQUosSUFBQSxPQUFBQSxJQUFBLFdBQUFLLElBQUEsTUFBQUEsSUFBQSxHQUFBTCxJQUFBLEVBQUFLLElBQUE7SUFBakJGLE9BQWlCLENBQUFFLElBQUEsUUFBQUosU0FBQSxDQUFBSSxJQUFBO0VBQUE7RUFDMUQsSUFBSSxDQUFDTixVQUFVLElBQUksT0FBT0EsVUFBVSxLQUFLLFFBQVEsRUFDL0MsTUFBTSxJQUFJTyxLQUFLLENBQUMsc0RBQXNELENBQUM7RUFFekU7RUFDQSxJQUFBQyxJQUFBLEdBQThCLElBQUFiLE9BQUEsQ0FBQWMsVUFBVSxFQUFDWixVQUFBLENBQUFhLE9BQVMsQ0FBQztJQUEzQ0MsT0FBTyxHQUFBSCxJQUFBLENBQVBHLE9BQU87SUFBRUMsUUFBUSxHQUFBSixJQUFBLENBQVJJLFFBQVE7RUFFekI7RUFFQTs7Ozs7RUFLQSxJQUFNQyxnQkFBZ0IsR0FBRyxTQUFuQkEsZ0JBQWdCQSxDQUFJYixVQUFrQixFQUFJO0lBQzlDLElBQU1jLE1BQU0sR0FBR0gsT0FBTyxDQUFDSSxJQUFJLENBQUMsVUFBQ0QsTUFBTTtNQUFBLE9BQUtBLE1BQU0sQ0FBQ0UsSUFBSSxLQUFLaEIsVUFBVTtJQUFBLEVBQUM7SUFFbkUsSUFBSWMsTUFBTSxFQUFFO01BQ1YsSUFBSSxDQUFDVixPQUFPLElBQUlBLE9BQU8sQ0FBQ0QsTUFBTSxLQUFLLENBQUMsRUFBRSxPQUFPVyxNQUFNLENBQUNWLE9BQU87TUFFM0QsSUFBTWEsZUFBZSxHQUF3QixFQUFFO01BQUMsSUFBQUMsS0FBQSxZQUFBQSxNQUFBLEVBRXBCO1FBQXZCLElBQUlDLE1BQU0sR0FBQUMsUUFBQSxDQUFBQyxFQUFBO1FBQ2IsSUFBTUMsVUFBVSxNQUFBQyxNQUFBLENBQU12QixVQUFVLE9BQUF1QixNQUFBLENBQUlKLE1BQU0sQ0FBRTtRQUU1QyxJQUFNSyxlQUFlLEdBQUdWLE1BQU0sQ0FBQ1YsT0FBTyxDQUFDVyxJQUFJLENBQ3pDLFVBQUNVLEdBQUc7VUFBQSxPQUFLQSxHQUFHLENBQUNDLElBQUksS0FBS0osVUFBVTtRQUFBLEVBQ2pDO1FBRUQsSUFBSUUsZUFBZSxFQUFFUCxlQUFlLENBQUNVLElBQUksQ0FBQ0gsZUFBZSxDQUFDLENBQUMsS0FDdEQsTUFBTSxJQUFJakIsS0FBSyxXQUFBZ0IsTUFBQSxDQUFXRCxVQUFVLGdCQUFhO09BQ3ZEO01BVEQsU0FBQUQsRUFBQSxNQUFBRCxRQUFBLEdBQW1CaEIsT0FBTyxFQUFBaUIsRUFBQSxHQUFBRCxRQUFBLENBQUFqQixNQUFBLEVBQUFrQixFQUFBO1FBQUFILEtBQUE7TUFBQTtNQVcxQixPQUFPRCxlQUFlO0tBQ3ZCLE1BQU0sTUFBTSxJQUFJVixLQUFLLFdBQUFnQixNQUFBLENBQVd2QixVQUFVLGdCQUFhO0VBQzFELENBQUM7RUFFRCxJQUFNNEIsbUJBQW1CLEdBQUcsU0FBdEJBLG1CQUFtQkEsQ0FBQSxFQUFRO0lBQy9CO0lBQ0EsSUFBTUMsbUJBQW1CLEdBQUdoQixnQkFBZ0IsQ0FBQ2IsVUFBVSxDQUFDO0lBRXhEO0lBQ0EsSUFBTThCLGdCQUFnQixHQUFZLEVBQUU7SUFBQyxJQUFBQyxTQUFBLEdBQUFDLDBCQUFBLENBRWhCSCxtQkFBbUI7TUFBQUksS0FBQTtJQUFBO01BQUEsSUFBQUMsTUFBQSxZQUFBQSxPQUFBLEVBQUU7UUFBQSxJQUEvQmYsTUFBTSxHQUFBYyxLQUFBLENBQUFFLEtBQUE7UUFDZjtRQUNBLElBQU1iLFVBQVUsR0FBR0gsTUFBTSxDQUFDTyxJQUFJLENBQUNVLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFNUNOLGdCQUFnQixDQUFDUixVQUFVLENBQUMsR0FBRyxVQUFDZSxPQUFZLEVBQUk7VUFDOUN6QixRQUFRLENBQUM7WUFDUGMsSUFBSSxFQUFFUCxNQUFNLENBQUNPLElBQUk7WUFDakJXLE9BQU8sRUFBUEE7V0FDRCxDQUFDO1FBQ0osQ0FBQztPQUNGO01BVkQsS0FBQU4sU0FBQSxDQUFBTyxDQUFBLE1BQUFMLEtBQUEsR0FBQUYsU0FBQSxDQUFBUSxDQUFBLElBQUFDLElBQUE7UUFBQU4sTUFBQTtNQUFBO0lBVUMsU0FBQU8sR0FBQTtNQUFBVixTQUFBLENBQUFXLENBQUEsQ0FBQUQsR0FBQTtJQUFBO01BQUFWLFNBQUEsQ0FBQVksQ0FBQTtJQUFBO0lBRUQsT0FBT2IsZ0JBQWdCO0VBQ3pCLENBQUM7RUFFRCxPQUFPRixtQkFBbUIsRUFBRTtBQUM5QixDQUFDO0FBRURnQixPQUFBLENBQUFsQyxPQUFBLEdBQWVYLFVBQVUifQ==
\ No newline at end of file
diff --git a/cjs/hooks/useActions.js.map b/cjs/hooks/useActions.js.map
new file mode 100644
index 0000000..0fad069
--- /dev/null
+++ b/cjs/hooks/useActions.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"useActions.js","sourceRoot":"","sources":["../../src/hooks/useActions.ts"],"names":[],"mappings":";;;;;AAAA,iCAAmC;AACnC,2DAAoC;AAIpC,MAAM,UAAU,GAAG,CAAC,UAAkB,EAAE,GAAG,OAAiB,EAAE,EAAE;IAC9D,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ;QAC/C,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAE1E,qBAAqB;IACrB,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAA,kBAAU,EAAC,kBAAS,CAAC,CAAC;IAEpD,gBAAgB;IAEhB;;;;OAIG;IACH,MAAM,gBAAgB,GAAG,CAAC,UAAkB,EAAE,EAAE;QAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;QAEpE,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,MAAM,CAAC,OAAO,CAAC;YAE5D,MAAM,eAAe,GAAwB,EAAE,CAAC;YAEhD,KAAK,IAAI,MAAM,IAAI,OAAO,EAAE;gBAC1B,MAAM,UAAU,GAAG,GAAG,UAAU,IAAI,MAAM,EAAE,CAAC;gBAE7C,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CACzC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,UAAU,CACjC,CAAC;gBAEF,IAAI,eAAe;oBAAE,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;;oBACtD,MAAM,IAAI,KAAK,CAAC,UAAU,UAAU,YAAY,CAAC,CAAC;aACxD;YAED,OAAO,eAAe,CAAC;SACxB;;YAAM,MAAM,IAAI,KAAK,CAAC,UAAU,UAAU,YAAY,CAAC,CAAC;IAC3D,CAAC,CAAC;IAEF,MAAM,mBAAmB,GAAG,GAAG,EAAE;QAC/B,cAAc;QACd,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAEzD,oBAAoB;QACpB,MAAM,gBAAgB,GAAY,EAAE,CAAC;QAErC,KAAK,MAAM,MAAM,IAAI,mBAAmB,EAAE;YACxC,kBAAkB;YAClB,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAE7C,gBAAgB,CAAC,UAAU,CAAC,GAAG,CAAC,OAAY,EAAE,EAAE;gBAC9C,QAAQ,CAAC;oBACP,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,OAAO;iBACR,CAAC,CAAC;YACL,CAAC,CAAC;SACH;QAED,OAAO,gBAAgB,CAAC;IAC1B,CAAC,CAAC;IAEF,OAAO,mBAAmB,EAAE,CAAC;AAC/B,CAAC,CAAC;AAEF,kBAAe,UAAU,CAAC"}
\ No newline at end of file
diff --git a/cjs/hooks/useSignal.d.ts b/cjs/hooks/useSignal.d.ts
new file mode 100644
index 0000000..51d6a1c
--- /dev/null
+++ b/cjs/hooks/useSignal.d.ts
@@ -0,0 +1,2 @@
+declare const useSignal: <T = any>(signalName: string) => T;
+export default useSignal;
diff --git a/cjs/hooks/useSignal.js b/cjs/hooks/useSignal.js
new file mode 100644
index 0000000..25e9e63
--- /dev/null
+++ b/cjs/hooks/useSignal.js
@@ -0,0 +1,37 @@
+"use strict";
+
+var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
+  return mod && mod.__esModule ? mod : {
+    "default": mod
+  };
+};
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+var react_1 = require("react");
+var contexts_1 = __importDefault(require("../contexts"));
+var useSignal = function useSignal(signalName) {
+  var _ref = (0, react_1.useContext)(contexts_1.default),
+    signals = _ref.signals;
+  var memoizedSignals = (0, react_1.useMemo)(function () {
+    return signals;
+  }, [signals]);
+  /**
+   * Get state of a signal base on its name
+   * @param signalName
+   * @returns
+   */
+  var handleGetSignalState = function handleGetSignalState(signalName) {
+    var signal = memoizedSignals.find(function (signal) {
+      return signal.name === signalName;
+    });
+    if (signal) {
+      return signal.state;
+    }
+    // Throw error if signal not found
+    throw new Error("Signal ".concat(signalName, " not found"));
+  };
+  return handleGetSignalState(signalName);
+};
+exports.default = useSignal;
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZWFjdF8xIiwicmVxdWlyZSIsImNvbnRleHRzXzEiLCJfX2ltcG9ydERlZmF1bHQiLCJ1c2VTaWduYWwiLCJzaWduYWxOYW1lIiwiX3JlZiIsInVzZUNvbnRleHQiLCJkZWZhdWx0Iiwic2lnbmFscyIsIm1lbW9pemVkU2lnbmFscyIsInVzZU1lbW8iLCJoYW5kbGVHZXRTaWduYWxTdGF0ZSIsInNpZ25hbCIsImZpbmQiLCJuYW1lIiwic3RhdGUiLCJFcnJvciIsImNvbmNhdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvdXNlU2lnbmFsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbbnVsbF0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsVUFBQSxHQUFBQyxlQUFBLENBQUFGLE9BQUE7QUFFQSxJQUFNRyxTQUFTLEdBQUcsU0FBWkEsU0FBU0EsQ0FBYUMsVUFBa0IsRUFBSTtFQUNoRCxJQUFBQyxJQUFBLEdBQW9CLElBQUFOLE9BQUEsQ0FBQU8sVUFBVSxFQUFDTCxVQUFBLENBQUFNLE9BQVMsQ0FBQztJQUFqQ0MsT0FBTyxHQUFBSCxJQUFBLENBQVBHLE9BQU87RUFDZixJQUFNQyxlQUFlLEdBQUcsSUFBQVYsT0FBQSxDQUFBVyxPQUFPLEVBQUM7SUFBQSxPQUFNRixPQUFPO0VBQUEsR0FBRSxDQUFDQSxPQUFPLENBQUMsQ0FBQztFQUV6RDs7Ozs7RUFLQSxJQUFNRyxvQkFBb0IsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUFJUCxVQUFrQixFQUFPO0lBQ3JELElBQU1RLE1BQU0sR0FBR0gsZUFBZSxDQUFDSSxJQUFJLENBQUMsVUFBQUQsTUFBTTtNQUFBLE9BQUlBLE1BQU0sQ0FBQ0UsSUFBSSxLQUFLVixVQUFVO0lBQUEsRUFBQztJQUV6RSxJQUFJUSxNQUFNLEVBQUU7TUFDVixPQUFPQSxNQUFNLENBQUNHLEtBQUs7O0lBR3JCO0lBQ0EsTUFBTSxJQUFJQyxLQUFLLFdBQUFDLE1BQUEsQ0FBV2IsVUFBVSxnQkFBYTtFQUNuRCxDQUFDO0VBRUQsT0FBT08sb0JBQW9CLENBQUNQLFVBQVUsQ0FBQztBQUN6QyxDQUFDO0FBRURjLE9BQUEsQ0FBQVgsT0FBQSxHQUFlSixTQUFTIn0=
\ No newline at end of file
diff --git a/cjs/hooks/useSignal.js.map b/cjs/hooks/useSignal.js.map
new file mode 100644
index 0000000..cbcf249
--- /dev/null
+++ b/cjs/hooks/useSignal.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"useSignal.js","sourceRoot":"","sources":["../../src/hooks/useSignal.ts"],"names":[],"mappings":";;;;;AAAA,iCAA4C;AAC5C,2DAAoC;AAEpC,MAAM,SAAS,GAAG,CAAU,UAAkB,EAAE,EAAE;IAChD,MAAM,EAAE,OAAO,EAAE,GAAG,IAAA,kBAAU,EAAC,kBAAS,CAAC,CAAC;IAC1C,MAAM,eAAe,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAE1D;;;;OAIG;IACH,MAAM,oBAAoB,GAAG,CAAC,UAAkB,EAAK,EAAE;QACrD,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;QAE1E,IAAI,MAAM,EAAE;YACV,OAAO,MAAM,CAAC,KAAK,CAAC;SACrB;QAED,kCAAkC;QAClC,MAAM,IAAI,KAAK,CAAC,UAAU,UAAU,YAAY,CAAC,CAAC;IACpD,CAAC,CAAA;IAED,OAAO,oBAAoB,CAAC,UAAU,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF,kBAAe,SAAS,CAAC"}
\ No newline at end of file
diff --git a/cjs/index.d.ts b/cjs/index.d.ts
new file mode 100644
index 0000000..b115086
--- /dev/null
+++ b/cjs/index.d.ts
@@ -0,0 +1,8 @@
+import createSignal from "./helpers/createSignal";
+import createStore from "./helpers/createStore";
+import GXProvider from "./providers";
+import useAction from "./hooks/useAction";
+import useActions from "./hooks/useActions";
+import useSignal from "./hooks/useSignal";
+export default GXProvider;
+export { createSignal, createStore, useAction, useActions, useSignal };
diff --git a/cjs/index.js b/cjs/index.js
new file mode 100644
index 0000000..88a9da8
--- /dev/null
+++ b/cjs/index.js
@@ -0,0 +1,33 @@
+"use strict";
+
+var __importDefault =
+  (void 0 && (void 0).__importDefault) ||
+  function (mod) {
+    return mod && mod.__esModule
+      ? mod
+      : {
+          default: mod,
+        };
+  };
+Object.defineProperty(exports, "__esModule", {
+  value: true,
+});
+exports.useSignal =
+  exports.useActions =
+  exports.useAction =
+  exports.createStore =
+  exports.createSignal =
+    void 0;
+var createSignal_1 = __importDefault(require("./helpers/createSignal.js"));
+exports.createSignal = createSignal_1.default;
+var createStore_1 = __importDefault(require("./helpers/createStore.js"));
+exports.createStore = createStore_1.default;
+var providers_1 = __importDefault(require("./providers"));
+var useAction_1 = __importDefault(require("./hooks/useAction.js"));
+exports.useAction = useAction_1.default;
+var useActions_1 = __importDefault(require("./hooks/useActions.js"));
+exports.useActions = useActions_1.default;
+var useSignal_1 = __importDefault(require("./hooks/useSignal.js"));
+exports.useSignal = useSignal_1.default;
+exports.default = providers_1.default;
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVTaWduYWxfMSIsIl9faW1wb3J0RGVmYXVsdCIsInJlcXVpcmUiLCJleHBvcnRzIiwiY3JlYXRlU2lnbmFsIiwiZGVmYXVsdCIsImNyZWF0ZVN0b3JlXzEiLCJjcmVhdGVTdG9yZSIsInByb3ZpZGVyc18xIiwidXNlQWN0aW9uXzEiLCJ1c2VBY3Rpb24iLCJ1c2VBY3Rpb25zXzEiLCJ1c2VBY3Rpb25zIiwidXNlU2lnbmFsXzEiLCJ1c2VTaWduYWwiXSwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOltudWxsXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEsY0FBQSxHQUFBQyxlQUFBLENBQUFDLE9BQUE7QUFVU0MsT0FBQSxDQUFBQyxZQUFBLEdBVkZKLGNBQUEsQ0FBQUssT0FBWTtBQUNuQixJQUFBQyxhQUFBLEdBQUFMLGVBQUEsQ0FBQUMsT0FBQTtBQVN1QkMsT0FBQSxDQUFBSSxXQUFBLEdBVGhCRCxhQUFBLENBQUFELE9BQVc7QUFDbEIsSUFBQUcsV0FBQSxHQUFBUCxlQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBTyxXQUFBLEdBQUFSLGVBQUEsQ0FBQUMsT0FBQTtBQU1vQ0MsT0FBQSxDQUFBTyxTQUFBLEdBTjdCRCxXQUFBLENBQUFKLE9BQVM7QUFDaEIsSUFBQU0sWUFBQSxHQUFBVixlQUFBLENBQUFDLE9BQUE7QUFLK0NDLE9BQUEsQ0FBQVMsVUFBQSxHQUx4Q0QsWUFBQSxDQUFBTixPQUFVO0FBQ2pCLElBQUFRLFdBQUEsR0FBQVosZUFBQSxDQUFBQyxPQUFBO0FBSTJEQyxPQUFBLENBQUFXLFNBQUEsR0FKcERELFdBQUEsQ0FBQVIsT0FBUztBQUVoQkYsT0FBQSxDQUFBRSxPQUFBLEdBQWVHLFdBQUEsQ0FBQUgsT0FBVSJ9
diff --git a/cjs/index.js.map b/cjs/index.js.map
new file mode 100644
index 0000000..80d41cd
--- /dev/null
+++ b/cjs/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,0EAAkD;AAUzC,uBAVF,sBAAY,CAUE;AATrB,wEAAgD;AASzB,sBAThB,qBAAW,CASgB;AARlC,4DAAqC;AAErC,kEAA0C;AAMN,oBAN7B,mBAAS,CAM6B;AAL7C,oEAA4C;AAKG,qBALxC,oBAAU,CAKwC;AAJzD,kEAA0C;AAIiB,oBAJpD,mBAAS,CAIoD;AAFpE,kBAAe,mBAAU,CAAC"}
\ No newline at end of file
diff --git a/cjs/providers/index.d.ts b/cjs/providers/index.d.ts
new file mode 100644
index 0000000..6a3aabf
--- /dev/null
+++ b/cjs/providers/index.d.ts
@@ -0,0 +1,3 @@
+/// <reference types="react" />
+import { GXProviderProps } from "./types";
+export default function GXProvider({ children, store }: GXProviderProps): JSX.Element;
diff --git a/cjs/providers/index.js b/cjs/providers/index.js
new file mode 100644
index 0000000..873fda2
--- /dev/null
+++ b/cjs/providers/index.js
@@ -0,0 +1,42 @@
+"use strict";
+
+function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
+function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
+function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
+function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
+var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
+  return mod && mod.__esModule ? mod : {
+    "default": mod
+  };
+};
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+var jsx_runtime_1 = require("react/jsx-runtime");
+var react_1 = require("react");
+var contexts_1 = __importDefault(require("../contexts"));
+var reducer_1 = __importDefault(require("./reducer"));
+function GXProvider(_ref) {
+  var children = _ref.children,
+    store = _ref.store;
+  // Global state that manage all signals
+  var _ref2 = (0, react_1.useReducer)(reducer_1.default, store.getSignals()),
+    _ref3 = _slicedToArray(_ref2, 2),
+    signals = _ref3[0],
+    dispatch = _ref3[1];
+  // Context value
+  var contextValue = {
+    signals: signals,
+    dispatch: dispatch
+  };
+  return (0, jsx_runtime_1.jsx)(contexts_1.default.Provider, Object.assign({
+    value: contextValue
+  }, {
+    children: children
+  }));
+}
+exports.default = GXProvider;
+;
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZWFjdF8xIiwicmVxdWlyZSIsImNvbnRleHRzXzEiLCJfX2ltcG9ydERlZmF1bHQiLCJyZWR1Y2VyXzEiLCJHWFByb3ZpZGVyIiwiX3JlZiIsImNoaWxkcmVuIiwic3RvcmUiLCJfcmVmMiIsInVzZVJlZHVjZXIiLCJkZWZhdWx0IiwiZ2V0U2lnbmFscyIsIl9yZWYzIiwiX3NsaWNlZFRvQXJyYXkiLCJzaWduYWxzIiwiZGlzcGF0Y2giLCJjb250ZXh0VmFsdWUiLCJqc3hfcnVudGltZV8xIiwianN4IiwiUHJvdmlkZXIiLCJPYmplY3QiLCJhc3NpZ24iLCJ2YWx1ZSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvdmlkZXJzL2luZGV4LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxVQUFBLEdBQUFDLGVBQUEsQ0FBQUYsT0FBQTtBQUVBLElBQUFHLFNBQUEsR0FBQUQsZUFBQSxDQUFBRixPQUFBO0FBRUEsU0FBd0JJLFVBQVVBLENBQUFDLElBQUEsRUFBcUM7RUFBQSxJQUFsQ0MsUUFBUSxHQUFBRCxJQUFBLENBQVJDLFFBQVE7SUFBRUMsS0FBSyxHQUFBRixJQUFBLENBQUxFLEtBQUs7RUFDbEQ7RUFDQSxJQUFBQyxLQUFBLEdBQTRCLElBQUFULE9BQUEsQ0FBQVUsVUFBVSxFQUFDTixTQUFBLENBQUFPLE9BQVMsRUFBRUgsS0FBSyxDQUFDSSxVQUFVLEVBQUUsQ0FBQztJQUFBQyxLQUFBLEdBQUFDLGNBQUEsQ0FBQUwsS0FBQTtJQUE5RE0sT0FBTyxHQUFBRixLQUFBO0lBQUVHLFFBQVEsR0FBQUgsS0FBQTtFQUV4QjtFQUNBLElBQU1JLFlBQVksR0FBRztJQUNuQkYsT0FBTyxFQUFQQSxPQUFPO0lBQ1BDLFFBQVEsRUFBUkE7R0FDRDtFQUVELE9BQ0UsSUFBQUUsYUFBQSxDQUFBQyxHQUFBLEVBQUNqQixVQUFBLENBQUFTLE9BQVMsQ0FBQ1MsUUFBUSxFQUFBQyxNQUFBLENBQUFDLE1BQUE7SUFBQ0MsS0FBSyxFQUFFTjtFQUFZO0lBQUFWLFFBQUEsRUFBR0E7RUFBUSxHQUFzQjtBQUU1RTtBQWJBaUIsT0FBQSxDQUFBYixPQUFBLEdBQUFOLFVBQUE7QUFhQyJ9
\ No newline at end of file
diff --git a/cjs/providers/index.js.map b/cjs/providers/index.js.map
new file mode 100644
index 0000000..fbe3203
--- /dev/null
+++ b/cjs/providers/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.tsx"],"names":[],"mappings":";;;;;;AAAA,iCAAmC;AACnC,2DAAoC;AAEpC,wDAAkC;AAElC,SAAwB,UAAU,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAmB;IACrE,uCAAuC;IACvC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,IAAA,kBAAU,EAAC,iBAAS,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;IAEtE,gBAAgB;IAChB,MAAM,YAAY,GAAG;QACnB,OAAO;QACP,QAAQ;KACT,CAAC;IAEF,OAAO,CACL,uBAAC,kBAAS,CAAC,QAAQ,kBAAC,KAAK,EAAE,YAAY,gBAAG,QAAQ,IAAsB,CACzE,CAAC;AACJ,CAAC;AAbD,6BAaC;AAAA,CAAC"}
\ No newline at end of file
diff --git a/cjs/providers/reducer.d.ts b/cjs/providers/reducer.d.ts
new file mode 100644
index 0000000..6999312
--- /dev/null
+++ b/cjs/providers/reducer.d.ts
@@ -0,0 +1,4 @@
+import { GXSignalType } from "../contexts/types";
+import { GXAction } from "./types";
+declare const gxReducer: (signals: GXSignalType[], action: GXAction) => GXSignalType<any>[];
+export default gxReducer;
diff --git a/cjs/providers/reducer.js b/cjs/providers/reducer.js
new file mode 100644
index 0000000..6d020ab
--- /dev/null
+++ b/cjs/providers/reducer.js
@@ -0,0 +1,47 @@
+"use strict";
+
+function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
+function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
+function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
+function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+var gxReducer = function gxReducer(signals, action) {
+  // Prev signals
+  var prevSignals = _toConsumableArray(signals);
+  // Get the signal name
+  var signalName = action.type.split("/")[0];
+  // Get the signal
+  var signal = prevSignals.find(function (signal) {
+    return signal.name === signalName;
+  });
+  if (!signal) throw new Error("Signal \"".concat(signalName, "\" not found"));
+  var actionToDispatch = null;
+  // Get the action
+  var _iterator = _createForOfIteratorHelper(signal.actions),
+    _step;
+  try {
+    for (_iterator.s(); !(_step = _iterator.n()).done;) {
+      var act = _step.value;
+      if (act.type === action.type) {
+        actionToDispatch = act;
+        break;
+      }
+    }
+  } catch (err) {
+    _iterator.e(err);
+  } finally {
+    _iterator.f();
+  }
+  if (actionToDispatch) {
+    // Dispatch the action
+    signal.state = actionToDispatch.handler(signal.state, action.payload);
+  } else throw new Error("Action \"".concat(action.type, "\" not found"));
+  return prevSignals;
+};
+exports.default = gxReducer;
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJneFJlZHVjZXIiLCJzaWduYWxzIiwiYWN0aW9uIiwicHJldlNpZ25hbHMiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJzaWduYWxOYW1lIiwidHlwZSIsInNwbGl0Iiwic2lnbmFsIiwiZmluZCIsIm5hbWUiLCJFcnJvciIsImNvbmNhdCIsImFjdGlvblRvRGlzcGF0Y2giLCJfaXRlcmF0b3IiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsImFjdGlvbnMiLCJfc3RlcCIsInMiLCJuIiwiZG9uZSIsImFjdCIsInZhbHVlIiwiZXJyIiwiZSIsImYiLCJzdGF0ZSIsImhhbmRsZXIiLCJwYXlsb2FkIiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvdmlkZXJzL3JlZHVjZXIudHMiXSwic291cmNlc0NvbnRlbnQiOltudWxsXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUdBLElBQU1BLFNBQVMsR0FBRyxTQUFaQSxTQUFTQSxDQUFJQyxPQUF1QixFQUFFQyxNQUFnQixFQUFJO0VBQzlEO0VBQ0EsSUFBTUMsV0FBVyxHQUFBQyxrQkFBQSxDQUFPSCxPQUFPLENBQUM7RUFFaEM7RUFDQSxJQUFNSSxVQUFVLEdBQUdILE1BQU0sQ0FBQ0ksSUFBSSxDQUFDQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBRTVDO0VBQ0EsSUFBTUMsTUFBTSxHQUFHTCxXQUFXLENBQUNNLElBQUksQ0FBQyxVQUFDRCxNQUFNO0lBQUEsT0FBS0EsTUFBTSxDQUFDRSxJQUFJLEtBQUtMLFVBQVU7RUFBQSxFQUFDO0VBRXZFLElBQUksQ0FBQ0csTUFBTSxFQUFFLE1BQU0sSUFBSUcsS0FBSyxhQUFBQyxNQUFBLENBQVlQLFVBQVUsa0JBQWM7RUFFaEUsSUFBSVEsZ0JBQWdCLEdBQUcsSUFBSTtFQUUzQjtFQUFBLElBQUFDLFNBQUEsR0FBQUMsMEJBQUEsQ0FDZ0JQLE1BQU0sQ0FBQ1EsT0FBTztJQUFBQyxLQUFBO0VBQUE7SUFBOUIsS0FBQUgsU0FBQSxDQUFBSSxDQUFBLE1BQUFELEtBQUEsR0FBQUgsU0FBQSxDQUFBSyxDQUFBLElBQUFDLElBQUEsR0FBZ0M7TUFBQSxJQUF2QkMsR0FBRyxHQUFBSixLQUFBLENBQUFLLEtBQUE7TUFDVixJQUFJRCxHQUFHLENBQUNmLElBQUksS0FBS0osTUFBTSxDQUFDSSxJQUFJLEVBQUU7UUFDNUJPLGdCQUFnQixHQUFHUSxHQUFHO1FBRXRCOzs7RUFFSCxTQUFBRSxHQUFBO0lBQUFULFNBQUEsQ0FBQVUsQ0FBQSxDQUFBRCxHQUFBO0VBQUE7SUFBQVQsU0FBQSxDQUFBVyxDQUFBO0VBQUE7RUFFRCxJQUFJWixnQkFBZ0IsRUFBRTtJQUNwQjtJQUNBTCxNQUFNLENBQUNrQixLQUFLLEdBQUdiLGdCQUFnQixDQUFDYyxPQUFPLENBQUNuQixNQUFNLENBQUNrQixLQUFLLEVBQUV4QixNQUFNLENBQUMwQixPQUFPLENBQUM7R0FDdEUsTUFBTSxNQUFNLElBQUlqQixLQUFLLGFBQUFDLE1BQUEsQ0FBWVYsTUFBTSxDQUFDSSxJQUFJLGtCQUFjO0VBRTNELE9BQU9ILFdBQVc7QUFDcEIsQ0FBQztBQUVEMEIsT0FBQSxDQUFBQyxPQUFBLEdBQWU5QixTQUFTIn0=
\ No newline at end of file
diff --git a/cjs/providers/reducer.js.map b/cjs/providers/reducer.js.map
new file mode 100644
index 0000000..f935362
--- /dev/null
+++ b/cjs/providers/reducer.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"reducer.js","sourceRoot":"","sources":["../../src/providers/reducer.ts"],"names":[],"mappings":";;AAGA,MAAM,SAAS,GAAG,CAAC,OAAuB,EAAE,MAAgB,EAAE,EAAE;IAC9D,eAAe;IACf,MAAM,WAAW,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;IAEjC,sBAAsB;IACtB,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7C,iBAAiB;IACjB,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;IAExE,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,WAAW,UAAU,aAAa,CAAC,CAAC;IAEjE,IAAI,gBAAgB,GAAG,IAAI,CAAC;IAE5B,iBAAiB;IACjB,KAAK,IAAI,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE;QAC9B,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE;YAC5B,gBAAgB,GAAG,GAAG,CAAC;YAEvB,MAAM;SACP;KACF;IAED,IAAI,gBAAgB,EAAE;QACpB,sBAAsB;QACtB,MAAM,CAAC,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;KACvE;;QAAM,MAAM,IAAI,KAAK,CAAC,WAAW,MAAM,CAAC,IAAI,aAAa,CAAC,CAAC;IAE5D,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AAEF,kBAAe,SAAS,CAAC"}
\ No newline at end of file
diff --git a/cjs/providers/types.d.ts b/cjs/providers/types.d.ts
new file mode 100644
index 0000000..0212864
--- /dev/null
+++ b/cjs/providers/types.d.ts
@@ -0,0 +1,10 @@
+/// <reference types="react" />
+import { CreateStoreType } from '../helpers/types';
+export type GXProviderProps = {
+    children: React.ReactElement;
+    store: CreateStoreType;
+};
+export type GXAction = {
+    type: string;
+    payload: any;
+};
diff --git a/cjs/providers/types.js b/cjs/providers/types.js
new file mode 100644
index 0000000..fe53c0e
--- /dev/null
+++ b/cjs/providers/types.js
@@ -0,0 +1,6 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3ZpZGVycy90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6IiJ9
\ No newline at end of file
diff --git a/cjs/providers/types.js.map b/cjs/providers/types.js.map
new file mode 100644
index 0000000..27cedee
--- /dev/null
+++ b/cjs/providers/types.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/dist/contexts/index.js b/dist/contexts/index.js
index 1e91a38..90ea21f 100644
--- a/dist/contexts/index.js
+++ b/dist/contexts/index.js
@@ -1,7 +1,9 @@
-import { createContext } from "react";
-const GXContext = createContext({
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const react_1 = require("react");
+const GXContext = (0, react_1.createContext)({
     signals: [],
     dispatch: () => { }
 });
-export default GXContext;
+exports.default = GXContext;
 //# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/dist/contexts/index.js.map b/dist/contexts/index.js.map
index 75b434f..24febf7 100644
--- a/dist/contexts/index.js.map
+++ b/dist/contexts/index.js.map
@@ -1 +1 @@
-{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/contexts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAGtC,MAAM,SAAS,GAAG,aAAa,CAAgB;IAC7C,OAAO,EAAE,EAAE;IACX,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;CACnB,CAAC,CAAC;AAEH,eAAe,SAAS,CAAA"}
\ No newline at end of file
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/contexts/index.ts"],"names":[],"mappings":";;AAAA,iCAAsC;AAGtC,MAAM,SAAS,GAAG,IAAA,qBAAa,EAAgB;IAC7C,OAAO,EAAE,EAAE;IACX,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;CACnB,CAAC,CAAC;AAEH,kBAAe,SAAS,CAAA"}
\ No newline at end of file
diff --git a/dist/contexts/types.js b/dist/contexts/types.js
index 718fd38..11e638d 100644
--- a/dist/contexts/types.js
+++ b/dist/contexts/types.js
@@ -1,2 +1,3 @@
-export {};
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
 //# sourceMappingURL=types.js.map
\ No newline at end of file
diff --git a/dist/helpers/createSignal.js b/dist/helpers/createSignal.js
index cac5caf..6ce7448 100644
--- a/dist/helpers/createSignal.js
+++ b/dist/helpers/createSignal.js
@@ -1,3 +1,5 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
 /**
  * Create a signal with a state and actions for managing this state
  * @param options
@@ -21,5 +23,5 @@ const createSignal = (options) => {
     };
     return signal;
 };
-export default createSignal;
+exports.default = createSignal;
 //# sourceMappingURL=createSignal.js.map
\ No newline at end of file
diff --git a/dist/helpers/createSignal.js.map b/dist/helpers/createSignal.js.map
index ff051a5..c3dddca 100644
--- a/dist/helpers/createSignal.js.map
+++ b/dist/helpers/createSignal.js.map
@@ -1 +1 @@
-{"version":3,"file":"createSignal.js","sourceRoot":"","sources":["../../src/helpers/createSignal.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,YAAY,GAAG,CAAI,OAAkC,EAAE,EAAE;IAC7D,MAAM,OAAO,GAA2B,EAAE,CAAC;IAE3C,yCAAyC;IACzC,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAEpD,KAAK,IAAI,MAAM,IAAI,YAAY,EAAE;QAC/B,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE;YACpC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;SACnB,CAAC,CAAA;KACH;IAED,kBAAkB;IAClB,MAAM,MAAM,GAAG;QACb,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,OAAO;KACR,CAAA;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAA;AAED,eAAe,YAAY,CAAC"}
\ No newline at end of file
+{"version":3,"file":"createSignal.js","sourceRoot":"","sources":["../../src/helpers/createSignal.ts"],"names":[],"mappings":";;AAGA;;;;GAIG;AACH,MAAM,YAAY,GAAG,CAAI,OAAkC,EAAE,EAAE;IAC7D,MAAM,OAAO,GAA2B,EAAE,CAAC;IAE3C,yCAAyC;IACzC,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAEpD,KAAK,IAAI,MAAM,IAAI,YAAY,EAAE;QAC/B,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE;YACpC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;SACnB,CAAC,CAAA;KACH;IAED,kBAAkB;IAClB,MAAM,MAAM,GAAG;QACb,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,OAAO;KACR,CAAA;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAA;AAED,kBAAe,YAAY,CAAC"}
\ No newline at end of file
diff --git a/dist/helpers/createStore.js b/dist/helpers/createStore.js
index 590d274..0bf40e1 100644
--- a/dist/helpers/createStore.js
+++ b/dist/helpers/createStore.js
@@ -1,7 +1,9 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
 const createStore = (signals) => {
     return {
         getSignals: () => signals,
     };
 };
-export default createStore;
+exports.default = createStore;
 //# sourceMappingURL=createStore.js.map
\ No newline at end of file
diff --git a/dist/helpers/createStore.js.map b/dist/helpers/createStore.js.map
index 457ca0f..90cccb2 100644
--- a/dist/helpers/createStore.js.map
+++ b/dist/helpers/createStore.js.map
@@ -1 +1 @@
-{"version":3,"file":"createStore.js","sourceRoot":"","sources":["../../src/helpers/createStore.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,GAAG,CAAC,OAAuB,EAAmB,EAAE;IAC/D,OAAO;QACL,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO;KAC1B,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,WAAW,CAAC"}
\ No newline at end of file
+{"version":3,"file":"createStore.js","sourceRoot":"","sources":["../../src/helpers/createStore.ts"],"names":[],"mappings":";;AAGA,MAAM,WAAW,GAAG,CAAC,OAAuB,EAAmB,EAAE;IAC/D,OAAO;QACL,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO;KAC1B,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,WAAW,CAAC"}
\ No newline at end of file
diff --git a/dist/helpers/types.js b/dist/helpers/types.js
index 718fd38..11e638d 100644
--- a/dist/helpers/types.js
+++ b/dist/helpers/types.js
@@ -1,2 +1,3 @@
-export {};
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
 //# sourceMappingURL=types.js.map
\ No newline at end of file
diff --git a/dist/hooks/types.js b/dist/hooks/types.js
index 718fd38..11e638d 100644
--- a/dist/hooks/types.js
+++ b/dist/hooks/types.js
@@ -1,2 +1,3 @@
-export {};
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
 //# sourceMappingURL=types.js.map
\ No newline at end of file
diff --git a/dist/hooks/useAction.js b/dist/hooks/useAction.js
index ca0baab..3eaef77 100644
--- a/dist/hooks/useAction.js
+++ b/dist/hooks/useAction.js
@@ -1,11 +1,16 @@
-import useActions from "./useActions";
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const useActions_1 = __importDefault(require("./useActions"));
 const useAction = (signalName, action) => {
     if (!signalName || typeof signalName !== "string")
         throw new Error("Provide a signalName as a first argument of useAction");
     if (!action || typeof action !== "string")
         throw new Error("Provide an action as second argument of useAction");
-    const actions = useActions(signalName, action);
+    const actions = (0, useActions_1.default)(signalName, action);
     return Object.values(actions)[0];
 };
-export default useAction;
+exports.default = useAction;
 //# sourceMappingURL=useAction.js.map
\ No newline at end of file
diff --git a/dist/hooks/useAction.js.map b/dist/hooks/useAction.js.map
index 703fce2..043e7e7 100644
--- a/dist/hooks/useAction.js.map
+++ b/dist/hooks/useAction.js.map
@@ -1 +1 @@
-{"version":3,"file":"useAction.js","sourceRoot":"","sources":["../../src/hooks/useAction.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,MAAM,SAAS,GAAG,CAAC,UAAkB,EAAE,MAAc,EAAE,EAAE;IACvD,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ;QAC/C,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAE3E,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QACvC,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IAEvE,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAE/C,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC,CAAC;AAEF,eAAe,SAAS,CAAC"}
\ No newline at end of file
+{"version":3,"file":"useAction.js","sourceRoot":"","sources":["../../src/hooks/useAction.ts"],"names":[],"mappings":";;;;;AAAA,8DAAsC;AAEtC,MAAM,SAAS,GAAG,CAAC,UAAkB,EAAE,MAAc,EAAE,EAAE;IACvD,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ;QAC/C,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAE3E,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QACvC,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IAEvE,MAAM,OAAO,GAAG,IAAA,oBAAU,EAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAE/C,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC,CAAC;AAEF,kBAAe,SAAS,CAAC"}
\ No newline at end of file
diff --git a/dist/hooks/useActions.js b/dist/hooks/useActions.js
index 2db8e88..70762cc 100644
--- a/dist/hooks/useActions.js
+++ b/dist/hooks/useActions.js
@@ -1,10 +1,15 @@
-import { useContext } from "react";
-import GXContext from "../contexts";
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const react_1 = require("react");
+const contexts_1 = __importDefault(require("../contexts"));
 const useActions = (signalName, ...actions) => {
     if (!signalName || typeof signalName !== "string")
         throw new Error("Provide a signalName as first argument of useActions");
     // Get Global Context
-    const { signals, dispatch } = useContext(GXContext);
+    const { signals, dispatch } = (0, react_1.useContext)(contexts_1.default);
     // Some handlers
     /**
      * Get actions of a signal
@@ -49,5 +54,5 @@ const useActions = (signalName, ...actions) => {
     };
     return handleFormatActions();
 };
-export default useActions;
+exports.default = useActions;
 //# sourceMappingURL=useActions.js.map
\ No newline at end of file
diff --git a/dist/hooks/useActions.js.map b/dist/hooks/useActions.js.map
index acd0869..0fad069 100644
--- a/dist/hooks/useActions.js.map
+++ b/dist/hooks/useActions.js.map
@@ -1 +1 @@
-{"version":3,"file":"useActions.js","sourceRoot":"","sources":["../../src/hooks/useActions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,SAAS,MAAM,aAAa,CAAC;AAIpC,MAAM,UAAU,GAAG,CAAC,UAAkB,EAAE,GAAG,OAAiB,EAAE,EAAE;IAC9D,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ;QAC/C,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAE1E,qBAAqB;IACrB,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IAEpD,gBAAgB;IAEhB;;;;OAIG;IACH,MAAM,gBAAgB,GAAG,CAAC,UAAkB,EAAE,EAAE;QAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;QAEpE,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,MAAM,CAAC,OAAO,CAAC;YAE5D,MAAM,eAAe,GAAwB,EAAE,CAAC;YAEhD,KAAK,IAAI,MAAM,IAAI,OAAO,EAAE;gBAC1B,MAAM,UAAU,GAAG,GAAG,UAAU,IAAI,MAAM,EAAE,CAAC;gBAE7C,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CACzC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,UAAU,CACjC,CAAC;gBAEF,IAAI,eAAe;oBAAE,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;;oBACtD,MAAM,IAAI,KAAK,CAAC,UAAU,UAAU,YAAY,CAAC,CAAC;aACxD;YAED,OAAO,eAAe,CAAC;SACxB;;YAAM,MAAM,IAAI,KAAK,CAAC,UAAU,UAAU,YAAY,CAAC,CAAC;IAC3D,CAAC,CAAC;IAEF,MAAM,mBAAmB,GAAG,GAAG,EAAE;QAC/B,cAAc;QACd,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAEzD,oBAAoB;QACpB,MAAM,gBAAgB,GAAY,EAAE,CAAC;QAErC,KAAK,MAAM,MAAM,IAAI,mBAAmB,EAAE;YACxC,kBAAkB;YAClB,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAE7C,gBAAgB,CAAC,UAAU,CAAC,GAAG,CAAC,OAAY,EAAE,EAAE;gBAC9C,QAAQ,CAAC;oBACP,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,OAAO;iBACR,CAAC,CAAC;YACL,CAAC,CAAC;SACH;QAED,OAAO,gBAAgB,CAAC;IAC1B,CAAC,CAAC;IAEF,OAAO,mBAAmB,EAAE,CAAC;AAC/B,CAAC,CAAC;AAEF,eAAe,UAAU,CAAC"}
\ No newline at end of file
+{"version":3,"file":"useActions.js","sourceRoot":"","sources":["../../src/hooks/useActions.ts"],"names":[],"mappings":";;;;;AAAA,iCAAmC;AACnC,2DAAoC;AAIpC,MAAM,UAAU,GAAG,CAAC,UAAkB,EAAE,GAAG,OAAiB,EAAE,EAAE;IAC9D,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ;QAC/C,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAE1E,qBAAqB;IACrB,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAA,kBAAU,EAAC,kBAAS,CAAC,CAAC;IAEpD,gBAAgB;IAEhB;;;;OAIG;IACH,MAAM,gBAAgB,GAAG,CAAC,UAAkB,EAAE,EAAE;QAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;QAEpE,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,MAAM,CAAC,OAAO,CAAC;YAE5D,MAAM,eAAe,GAAwB,EAAE,CAAC;YAEhD,KAAK,IAAI,MAAM,IAAI,OAAO,EAAE;gBAC1B,MAAM,UAAU,GAAG,GAAG,UAAU,IAAI,MAAM,EAAE,CAAC;gBAE7C,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CACzC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,UAAU,CACjC,CAAC;gBAEF,IAAI,eAAe;oBAAE,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;;oBACtD,MAAM,IAAI,KAAK,CAAC,UAAU,UAAU,YAAY,CAAC,CAAC;aACxD;YAED,OAAO,eAAe,CAAC;SACxB;;YAAM,MAAM,IAAI,KAAK,CAAC,UAAU,UAAU,YAAY,CAAC,CAAC;IAC3D,CAAC,CAAC;IAEF,MAAM,mBAAmB,GAAG,GAAG,EAAE;QAC/B,cAAc;QACd,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAEzD,oBAAoB;QACpB,MAAM,gBAAgB,GAAY,EAAE,CAAC;QAErC,KAAK,MAAM,MAAM,IAAI,mBAAmB,EAAE;YACxC,kBAAkB;YAClB,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAE7C,gBAAgB,CAAC,UAAU,CAAC,GAAG,CAAC,OAAY,EAAE,EAAE;gBAC9C,QAAQ,CAAC;oBACP,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,OAAO;iBACR,CAAC,CAAC;YACL,CAAC,CAAC;SACH;QAED,OAAO,gBAAgB,CAAC;IAC1B,CAAC,CAAC;IAEF,OAAO,mBAAmB,EAAE,CAAC;AAC/B,CAAC,CAAC;AAEF,kBAAe,UAAU,CAAC"}
\ No newline at end of file
diff --git a/dist/hooks/useSignal.js b/dist/hooks/useSignal.js
index 61c92a8..d40f896 100644
--- a/dist/hooks/useSignal.js
+++ b/dist/hooks/useSignal.js
@@ -1,8 +1,13 @@
-import { useContext, useMemo } from "react";
-import GXContext from "../contexts";
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const react_1 = require("react");
+const contexts_1 = __importDefault(require("../contexts"));
 const useSignal = (signalName) => {
-    const { signals } = useContext(GXContext);
-    const memoizedSignals = useMemo(() => signals, [signals]);
+    const { signals } = (0, react_1.useContext)(contexts_1.default);
+    const memoizedSignals = (0, react_1.useMemo)(() => signals, [signals]);
     /**
      * Get state of a signal base on its name
      * @param signalName
@@ -18,5 +23,5 @@ const useSignal = (signalName) => {
     };
     return handleGetSignalState(signalName);
 };
-export default useSignal;
+exports.default = useSignal;
 //# sourceMappingURL=useSignal.js.map
\ No newline at end of file
diff --git a/dist/hooks/useSignal.js.map b/dist/hooks/useSignal.js.map
index 3f23341..cbcf249 100644
--- a/dist/hooks/useSignal.js.map
+++ b/dist/hooks/useSignal.js.map
@@ -1 +1 @@
-{"version":3,"file":"useSignal.js","sourceRoot":"","sources":["../../src/hooks/useSignal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,MAAM,SAAS,GAAG,CAAU,UAAkB,EAAE,EAAE;IAChD,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IAC1C,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAE1D;;;;OAIG;IACH,MAAM,oBAAoB,GAAG,CAAC,UAAkB,EAAK,EAAE;QACrD,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;QAE1E,IAAI,MAAM,EAAE;YACV,OAAO,MAAM,CAAC,KAAK,CAAC;SACrB;QAED,kCAAkC;QAClC,MAAM,IAAI,KAAK,CAAC,UAAU,UAAU,YAAY,CAAC,CAAC;IACpD,CAAC,CAAA;IAED,OAAO,oBAAoB,CAAC,UAAU,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF,eAAe,SAAS,CAAC"}
\ No newline at end of file
+{"version":3,"file":"useSignal.js","sourceRoot":"","sources":["../../src/hooks/useSignal.ts"],"names":[],"mappings":";;;;;AAAA,iCAA4C;AAC5C,2DAAoC;AAEpC,MAAM,SAAS,GAAG,CAAU,UAAkB,EAAE,EAAE;IAChD,MAAM,EAAE,OAAO,EAAE,GAAG,IAAA,kBAAU,EAAC,kBAAS,CAAC,CAAC;IAC1C,MAAM,eAAe,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAE1D;;;;OAIG;IACH,MAAM,oBAAoB,GAAG,CAAC,UAAkB,EAAK,EAAE;QACrD,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;QAE1E,IAAI,MAAM,EAAE;YACV,OAAO,MAAM,CAAC,KAAK,CAAC;SACrB;QAED,kCAAkC;QAClC,MAAM,IAAI,KAAK,CAAC,UAAU,UAAU,YAAY,CAAC,CAAC;IACpD,CAAC,CAAA;IAED,OAAO,oBAAoB,CAAC,UAAU,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF,kBAAe,SAAS,CAAC"}
\ No newline at end of file
diff --git a/dist/index.d.ts b/dist/index.d.ts
index 50175ef..b115086 100644
--- a/dist/index.d.ts
+++ b/dist/index.d.ts
@@ -5,4 +5,4 @@ import useAction from "./hooks/useAction";
 import useActions from "./hooks/useActions";
 import useSignal from "./hooks/useSignal";
 export default GXProvider;
-export { createSignal, createStore, useAction, useActions, useSignal, };
+export { createSignal, createStore, useAction, useActions, useSignal };
diff --git a/dist/index.js b/dist/index.js
index f3e5cd1..3e99ec8 100644
--- a/dist/index.js
+++ b/dist/index.js
@@ -1,9 +1,19 @@
-import createSignal from "./helpers/createSignal";
-import createStore from "./helpers/createStore";
-import GXProvider from "./providers";
-import useAction from "./hooks/useAction";
-import useActions from "./hooks/useActions";
-import useSignal from "./hooks/useSignal";
-export default GXProvider;
-export { createSignal, createStore, useAction, useActions, useSignal, };
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.useSignal = exports.useActions = exports.useAction = exports.createStore = exports.createSignal = void 0;
+const createSignal_1 = __importDefault(require("./helpers/createSignal"));
+exports.createSignal = createSignal_1.default;
+const createStore_1 = __importDefault(require("./helpers/createStore"));
+exports.createStore = createStore_1.default;
+const providers_1 = __importDefault(require("./providers"));
+const useAction_1 = __importDefault(require("./hooks/useAction"));
+exports.useAction = useAction_1.default;
+const useActions_1 = __importDefault(require("./hooks/useActions"));
+exports.useActions = useActions_1.default;
+const useSignal_1 = __importDefault(require("./hooks/useSignal"));
+exports.useSignal = useSignal_1.default;
+exports.default = providers_1.default;
 //# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/dist/index.js.map b/dist/index.js.map
index 32bf400..80d41cd 100644
--- a/dist/index.js.map
+++ b/dist/index.js.map
@@ -1 +1 @@
-{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,wBAAwB,CAAC;AAClD,OAAO,WAAW,MAAM,uBAAuB,CAAC;AAChD,OAAO,UAAU,MAAM,aAAa,CAAA;AAEpC,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAC1C,OAAO,UAAU,MAAM,oBAAoB,CAAC;AAC5C,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAE1C,eAAe,UAAU,CAAC;AAE1B,OAAO,EACL,YAAY,EACZ,WAAW,EACX,SAAS,EACT,UAAU,EACV,SAAS,GACV,CAAA"}
\ No newline at end of file
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,0EAAkD;AAUzC,uBAVF,sBAAY,CAUE;AATrB,wEAAgD;AASzB,sBAThB,qBAAW,CASgB;AARlC,4DAAqC;AAErC,kEAA0C;AAMN,oBAN7B,mBAAS,CAM6B;AAL7C,oEAA4C;AAKG,qBALxC,oBAAU,CAKwC;AAJzD,kEAA0C;AAIiB,oBAJpD,mBAAS,CAIoD;AAFpE,kBAAe,mBAAU,CAAC"}
\ No newline at end of file
diff --git a/dist/providers/index.js b/dist/providers/index.js
index 049f671..c3dc3d1 100644
--- a/dist/providers/index.js
+++ b/dist/providers/index.js
@@ -1,16 +1,22 @@
-import { jsx as _jsx } from "react/jsx-runtime";
-import { useReducer } from "react";
-import GXContext from "../contexts";
-import gxReducer from "./reducer";
-export default function GXProvider({ children, store }) {
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const jsx_runtime_1 = require("react/jsx-runtime");
+const react_1 = require("react");
+const contexts_1 = __importDefault(require("../contexts"));
+const reducer_1 = __importDefault(require("./reducer"));
+function GXProvider({ children, store }) {
     // Global state that manage all signals
-    const [signals, dispatch] = useReducer(gxReducer, store.getSignals());
+    const [signals, dispatch] = (0, react_1.useReducer)(reducer_1.default, store.getSignals());
     // Context value
     const contextValue = {
         signals,
         dispatch,
     };
-    return (_jsx(GXContext.Provider, Object.assign({ value: contextValue }, { children: children })));
+    return ((0, jsx_runtime_1.jsx)(contexts_1.default.Provider, Object.assign({ value: contextValue }, { children: children })));
 }
+exports.default = GXProvider;
 ;
 //# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/dist/providers/index.js.map b/dist/providers/index.js.map
index 819e4a8..fbe3203 100644
--- a/dist/providers/index.js.map
+++ b/dist/providers/index.js.map
@@ -1 +1 @@
-{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,OAAO,SAAS,MAAM,WAAW,CAAC;AAElC,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAmB;IACrE,uCAAuC;IACvC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;IAEtE,gBAAgB;IAChB,MAAM,YAAY,GAAG;QACnB,OAAO;QACP,QAAQ;KACT,CAAC;IAEF,OAAO,CACL,KAAC,SAAS,CAAC,QAAQ,kBAAC,KAAK,EAAE,YAAY,gBAAG,QAAQ,IAAsB,CACzE,CAAC;AACJ,CAAC;AAAA,CAAC"}
\ No newline at end of file
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.tsx"],"names":[],"mappings":";;;;;;AAAA,iCAAmC;AACnC,2DAAoC;AAEpC,wDAAkC;AAElC,SAAwB,UAAU,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAmB;IACrE,uCAAuC;IACvC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,IAAA,kBAAU,EAAC,iBAAS,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;IAEtE,gBAAgB;IAChB,MAAM,YAAY,GAAG;QACnB,OAAO;QACP,QAAQ;KACT,CAAC;IAEF,OAAO,CACL,uBAAC,kBAAS,CAAC,QAAQ,kBAAC,KAAK,EAAE,YAAY,gBAAG,QAAQ,IAAsB,CACzE,CAAC;AACJ,CAAC;AAbD,6BAaC;AAAA,CAAC"}
\ No newline at end of file
diff --git a/dist/providers/reducer.js b/dist/providers/reducer.js
index fbf86fb..3d7f053 100644
--- a/dist/providers/reducer.js
+++ b/dist/providers/reducer.js
@@ -1,3 +1,5 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
 const gxReducer = (signals, action) => {
     // Prev signals
     const prevSignals = [...signals];
@@ -23,5 +25,5 @@ const gxReducer = (signals, action) => {
         throw new Error(`Action "${action.type}" not found`);
     return prevSignals;
 };
-export default gxReducer;
+exports.default = gxReducer;
 //# sourceMappingURL=reducer.js.map
\ No newline at end of file
diff --git a/dist/providers/reducer.js.map b/dist/providers/reducer.js.map
index 2ceae6d..f935362 100644
--- a/dist/providers/reducer.js.map
+++ b/dist/providers/reducer.js.map
@@ -1 +1 @@
-{"version":3,"file":"reducer.js","sourceRoot":"","sources":["../../src/providers/reducer.ts"],"names":[],"mappings":"AAGA,MAAM,SAAS,GAAG,CAAC,OAAuB,EAAE,MAAgB,EAAE,EAAE;IAC9D,eAAe;IACf,MAAM,WAAW,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;IAEjC,sBAAsB;IACtB,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7C,iBAAiB;IACjB,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;IAExE,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,WAAW,UAAU,aAAa,CAAC,CAAC;IAEjE,IAAI,gBAAgB,GAAG,IAAI,CAAC;IAE5B,iBAAiB;IACjB,KAAK,IAAI,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE;QAC9B,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE;YAC5B,gBAAgB,GAAG,GAAG,CAAC;YAEvB,MAAM;SACP;KACF;IAED,IAAI,gBAAgB,EAAE;QACpB,sBAAsB;QACtB,MAAM,CAAC,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;KACvE;;QAAM,MAAM,IAAI,KAAK,CAAC,WAAW,MAAM,CAAC,IAAI,aAAa,CAAC,CAAC;IAE5D,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AAEF,eAAe,SAAS,CAAC"}
\ No newline at end of file
+{"version":3,"file":"reducer.js","sourceRoot":"","sources":["../../src/providers/reducer.ts"],"names":[],"mappings":";;AAGA,MAAM,SAAS,GAAG,CAAC,OAAuB,EAAE,MAAgB,EAAE,EAAE;IAC9D,eAAe;IACf,MAAM,WAAW,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;IAEjC,sBAAsB;IACtB,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7C,iBAAiB;IACjB,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;IAExE,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,WAAW,UAAU,aAAa,CAAC,CAAC;IAEjE,IAAI,gBAAgB,GAAG,IAAI,CAAC;IAE5B,iBAAiB;IACjB,KAAK,IAAI,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE;QAC9B,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE;YAC5B,gBAAgB,GAAG,GAAG,CAAC;YAEvB,MAAM;SACP;KACF;IAED,IAAI,gBAAgB,EAAE;QACpB,sBAAsB;QACtB,MAAM,CAAC,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;KACvE;;QAAM,MAAM,IAAI,KAAK,CAAC,WAAW,MAAM,CAAC,IAAI,aAAa,CAAC,CAAC;IAE5D,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AAEF,kBAAe,SAAS,CAAC"}
\ No newline at end of file
diff --git a/dist/providers/types.js b/dist/providers/types.js
index 718fd38..11e638d 100644
--- a/dist/providers/types.js
+++ b/dist/providers/types.js
@@ -1,2 +1,3 @@
-export {};
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
 //# sourceMappingURL=types.js.map
\ No newline at end of file
diff --git a/dist/tests/index.test.d.ts b/dist/tests/index.test.d.ts
deleted file mode 100644
index cb0ff5c..0000000
--- a/dist/tests/index.test.d.ts
+++ /dev/null
@@ -1 +0,0 @@
-export {};
diff --git a/dist/tests/index.test.js b/dist/tests/index.test.js
deleted file mode 100644
index 8bcb510..0000000
--- a/dist/tests/index.test.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import createSignal from '../helpers/createSignal';
-import createStore from '../helpers/createStore';
-test("should create a store containing signals", () => {
-    // Create a signal
-    const counterSignal = createSignal({
-        name: "counter",
-        state: 0,
-        actions: {
-            increment: (state, payload) => {
-                return state + payload;
-            },
-            decrement: (state, payload) => {
-                return state + payload;
-            },
-        },
-    });
-    // Create a store
-    const store = createStore([counterSignal]);
-    // render(<GXProvider store={store}/>);
-    // Expectations
-});
-//# sourceMappingURL=index.test.js.map
\ No newline at end of file
diff --git a/dist/tests/index.test.js.map b/dist/tests/index.test.js.map
deleted file mode 100644
index 49d35d5..0000000
--- a/dist/tests/index.test.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/tests/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,yBAAyB,CAAC;AACnD,OAAO,WAAW,MAAM,wBAAwB,CAAC;AAIjD,IAAI,CAAC,0CAA0C,EAAE,GAAG,EAAE;IACpD,kBAAkB;IAClB,MAAM,aAAa,GAAG,YAAY,CAAC;QACjC,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,CAAC;QACR,OAAO,EAAE;YACP,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;gBAC5B,OAAO,KAAK,GAAG,OAAO,CAAC;YACzB,CAAC;YAED,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;gBAC5B,OAAO,KAAK,GAAG,OAAO,CAAC;YACzB,CAAC;SACF;KACF,CAAC,CAAC;IAEH,iBAAiB;IACjB,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;IAE3C,uCAAuC;IAEvC,eAAe;AACjB,CAAC,CAAC,CAAC"}
\ No newline at end of file
diff --git a/dist/tests/signals.test.d.ts b/dist/tests/signals.test.d.ts
deleted file mode 100644
index cb0ff5c..0000000
--- a/dist/tests/signals.test.d.ts
+++ /dev/null
@@ -1 +0,0 @@
-export {};
diff --git a/dist/tests/signals.test.js b/dist/tests/signals.test.js
deleted file mode 100644
index 3c2468b..0000000
--- a/dist/tests/signals.test.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import createSignal from "../helpers/createSignal";
-test("should create a signal", () => {
-    const counterSignal = createSignal({
-        name: "counter",
-        state: 0,
-        actions: {
-            increment: (state, payload) => {
-                return state + payload;
-            },
-            decrement: (state, payload) => {
-                return state + payload;
-            },
-        },
-    });
-    // Expectations
-    expect(counterSignal).not.toBeNull();
-    expect(counterSignal.name).toEqual("counter");
-    expect(counterSignal.state).toEqual(0);
-    expect(counterSignal.actions.length).toEqual(2);
-    expect(counterSignal.actions[0].handler(counterSignal.state, 3)).toEqual(3);
-});
-//# sourceMappingURL=signals.test.js.map
\ No newline at end of file
diff --git a/dist/tests/signals.test.js.map b/dist/tests/signals.test.js.map
deleted file mode 100644
index 3ebeb29..0000000
--- a/dist/tests/signals.test.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"signals.test.js","sourceRoot":"","sources":["../../src/tests/signals.test.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,yBAAyB,CAAC;AAEnD,IAAI,CAAC,wBAAwB,EAAE,GAAG,EAAE;IAClC,MAAM,aAAa,GAAG,YAAY,CAAC;QACjC,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,CAAC;QACR,OAAO,EAAE;YACP,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;gBAC5B,OAAO,KAAK,GAAG,OAAO,CAAC;YACzB,CAAC;YAED,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;gBAC5B,OAAO,KAAK,GAAG,OAAO,CAAC;YACzB,CAAC;SACF;KACF,CAAC,CAAC;IAEH,eAAe;IACf,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;IACrC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC9C,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACvC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAChD,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC9E,CAAC,CAAC,CAAC"}
\ No newline at end of file
diff --git a/dist/tests/store.test.d.ts b/dist/tests/store.test.d.ts
deleted file mode 100644
index cb0ff5c..0000000
--- a/dist/tests/store.test.d.ts
+++ /dev/null
@@ -1 +0,0 @@
-export {};
diff --git a/dist/tests/store.test.js b/dist/tests/store.test.js
deleted file mode 100644
index 804dbab..0000000
--- a/dist/tests/store.test.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import createSignal from '../helpers/createSignal';
-import createStore from '../helpers/createStore';
-test("should create a store containing signals", () => {
-    // Create a signal
-    const counterSignal = createSignal({
-        name: "counter",
-        state: 0,
-        actions: {
-            increment: (state, payload) => {
-                return state + payload;
-            },
-            decrement: (state, payload) => {
-                return state + payload;
-            },
-        },
-    });
-    // Create a store
-    const store = createStore([counterSignal]);
-    // Expectations
-    expect(store.getSignals()).not.toBeNull();
-    expect(store.getSignals()).toEqual([counterSignal]);
-});
-//# sourceMappingURL=store.test.js.map
\ No newline at end of file
diff --git a/dist/tests/store.test.js.map b/dist/tests/store.test.js.map
deleted file mode 100644
index c7907cf..0000000
--- a/dist/tests/store.test.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"store.test.js","sourceRoot":"","sources":["../../src/tests/store.test.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,yBAAyB,CAAC;AACnD,OAAO,WAAW,MAAM,wBAAwB,CAAC;AAEjD,IAAI,CAAC,0CAA0C,EAAE,GAAG,EAAE;IACpD,kBAAkB;IAClB,MAAM,aAAa,GAAG,YAAY,CAAC;QACjC,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,CAAC;QACR,OAAO,EAAE;YACP,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;gBAC5B,OAAO,KAAK,GAAG,OAAO,CAAC;YACzB,CAAC;YAED,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;gBAC5B,OAAO,KAAK,GAAG,OAAO,CAAC;YACzB,CAAC;SACF;KACF,CAAC,CAAC;IAEH,iBAAiB;IACjB,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;IAE3C,eAAe;IACf,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;IAC1C,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;AACtD,CAAC,CAAC,CAAC"}
\ No newline at end of file
diff --git a/package.json b/package.json
index 4687343..d80a687 100644
--- a/package.json
+++ b/package.json
@@ -1,9 +1,10 @@
 {
   "name": "@dilane3/gx",
-  "version": "1.2.1",
+  "version": "1.2.5",
   "private": false,
   "license": "MIT",
-  "main": "dist/index.js",
+  "main": "cjs/index.js",
+  "type": "commonjs",
   "author": {
     "name": "dilane3",
     "email": "komboudilane125@gmail.com",
@@ -17,6 +18,10 @@
     "issues": "https://github.com/react-gx/gx/issues"
   },
   "devDependencies": {
+    "@babel/cli": "^7.21.0",
+    "@babel/core": "^7.21.4",
+    "@babel/plugin-transform-modules-commonjs": "^7.21.2",
+    "@babel/preset-env": "^7.21.4",
     "@testing-library/jest-dom": "^5.14.1",
     "@testing-library/react": "^13.0.0",
     "@testing-library/user-event": "^13.2.1",
@@ -31,7 +36,7 @@
     "react": "^18.0.0"
   },
   "scripts": {
-    "build": "tsc",
+    "build": "tsc && npx babel dist --out-dir cjs --extensions '.js' --source-maps inline --copy-files",
     "test": "react-scripts test",
     "deploy": "npm publish --access public"
   },
diff --git a/src/index.ts b/src/index.ts
index 613ee64..721e7f8 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,6 +1,6 @@
 import createSignal from "./helpers/createSignal";
 import createStore from "./helpers/createStore";
-import GXProvider from "./providers"
+import GXProvider from "./providers";
 
 import useAction from "./hooks/useAction";
 import useActions from "./hooks/useActions";
@@ -8,10 +8,4 @@ import useSignal from "./hooks/useSignal";
 
 export default GXProvider;
 
-export {
-  createSignal,
-  createStore,
-  useAction,
-  useActions,
-  useSignal,
-}
\ No newline at end of file
+export { createSignal, createStore, useAction, useActions, useSignal };
diff --git a/tsconfig.json b/tsconfig.json
index a0cbdd6..d157f7f 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -4,6 +4,7 @@
     "rootDir": "src",
     "target": "ES6",
     "lib": [
+      "ES2016",
       "dom",
       "dom.iterable",
       "esnext"
@@ -15,20 +16,21 @@
     "strict": false,
     "forceConsistentCasingInFileNames": true,
     "noFallthroughCasesInSwitch": true,
-    "module": "esnext",
+    "module": "CommonJS",
     "moduleResolution": "node",
     "resolveJsonModule": true,
     "isolatedModules": true,
     "noEmit": false,
     "jsx": "react-jsx",
     "declaration": true,
-    "sourceMap": true,
+    "sourceMap": true
   },
   "include": [
     "src"
   ],
   "exclude": [
     "node_modules",
-    "dist"
+    "dist",
+    "src/tests"
   ]
 }
diff --git a/yarn.lock b/yarn.lock
index 29eaed7..947d91e 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -24,6 +24,22 @@
     jsonpointer "^5.0.0"
     leven "^3.1.0"
 
+"@babel/cli@^7.21.0":
+  version "7.21.0"
+  resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.21.0.tgz#1868eb70e9824b427fc607610cce8e9e7889e7e1"
+  integrity sha512-xi7CxyS8XjSyiwUGCfwf+brtJxjW1/ZTcBUkP10xawIEXLX5HzLn+3aXkgxozcP2UhRhtKTmQurw9Uaes7jZrA==
+  dependencies:
+    "@jridgewell/trace-mapping" "^0.3.17"
+    commander "^4.0.1"
+    convert-source-map "^1.1.0"
+    fs-readdir-recursive "^1.1.0"
+    glob "^7.2.0"
+    make-dir "^2.1.0"
+    slash "^2.0.0"
+  optionalDependencies:
+    "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents.3"
+    chokidar "^3.4.0"
+
 "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.8.3":
   version "7.18.6"
   resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a"
@@ -31,11 +47,23 @@
   dependencies:
     "@babel/highlight" "^7.18.6"
 
+"@babel/code-frame@^7.21.4":
+  version "7.21.4"
+  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39"
+  integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==
+  dependencies:
+    "@babel/highlight" "^7.18.6"
+
 "@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.1", "@babel/compat-data@^7.20.5":
   version "7.21.0"
   resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.0.tgz#c241dc454e5b5917e40d37e525e2f4530c399298"
   integrity sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==
 
+"@babel/compat-data@^7.21.4":
+  version "7.21.4"
+  resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.4.tgz#457ffe647c480dff59c2be092fc3acf71195c87f"
+  integrity sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==
+
 "@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.7.2", "@babel/core@^7.8.0":
   version "7.21.0"
   resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.0.tgz#1341aefdcc14ccc7553fcc688dd8986a2daffc13"
@@ -57,6 +85,27 @@
     json5 "^2.2.2"
     semver "^6.3.0"
 
+"@babel/core@^7.21.4":
+  version "7.21.4"
+  resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.4.tgz#c6dc73242507b8e2a27fd13a9c1814f9fa34a659"
+  integrity sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==
+  dependencies:
+    "@ampproject/remapping" "^2.2.0"
+    "@babel/code-frame" "^7.21.4"
+    "@babel/generator" "^7.21.4"
+    "@babel/helper-compilation-targets" "^7.21.4"
+    "@babel/helper-module-transforms" "^7.21.2"
+    "@babel/helpers" "^7.21.0"
+    "@babel/parser" "^7.21.4"
+    "@babel/template" "^7.20.7"
+    "@babel/traverse" "^7.21.4"
+    "@babel/types" "^7.21.4"
+    convert-source-map "^1.7.0"
+    debug "^4.1.0"
+    gensync "^1.0.0-beta.2"
+    json5 "^2.2.2"
+    semver "^6.3.0"
+
 "@babel/eslint-parser@^7.16.3":
   version "7.19.1"
   resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.19.1.tgz#4f68f6b0825489e00a24b41b6a1ae35414ecd2f4"
@@ -76,6 +125,16 @@
     "@jridgewell/trace-mapping" "^0.3.17"
     jsesc "^2.5.1"
 
+"@babel/generator@^7.21.4":
+  version "7.21.4"
+  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.4.tgz#64a94b7448989f421f919d5239ef553b37bb26bc"
+  integrity sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==
+  dependencies:
+    "@babel/types" "^7.21.4"
+    "@jridgewell/gen-mapping" "^0.3.2"
+    "@jridgewell/trace-mapping" "^0.3.17"
+    jsesc "^2.5.1"
+
 "@babel/helper-annotate-as-pure@^7.18.6":
   version "7.18.6"
   resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb"
@@ -102,6 +161,17 @@
     lru-cache "^5.1.1"
     semver "^6.3.0"
 
+"@babel/helper-compilation-targets@^7.21.4":
+  version "7.21.4"
+  resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz#770cd1ce0889097ceacb99418ee6934ef0572656"
+  integrity sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==
+  dependencies:
+    "@babel/compat-data" "^7.21.4"
+    "@babel/helper-validator-option" "^7.21.0"
+    browserslist "^4.21.3"
+    lru-cache "^5.1.1"
+    semver "^6.3.0"
+
 "@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0":
   version "7.21.0"
   resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.0.tgz#64f49ecb0020532f19b1d014b03bccaa1ab85fb9"
@@ -294,6 +364,11 @@
   resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.2.tgz#dacafadfc6d7654c3051a66d6fe55b6cb2f2a0b3"
   integrity sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==
 
+"@babel/parser@^7.21.4":
+  version "7.21.4"
+  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.4.tgz#94003fdfc520bbe2875d4ae557b43ddb6d880f17"
+  integrity sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==
+
 "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6":
   version "7.18.6"
   resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2"
@@ -301,7 +376,7 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.18.6"
 
-"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9":
+"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.20.7":
   version "7.20.7"
   resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz#d9c85589258539a22a901033853101a6198d4ef1"
   integrity sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==
@@ -310,7 +385,7 @@
     "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0"
     "@babel/plugin-proposal-optional-chaining" "^7.20.7"
 
-"@babel/plugin-proposal-async-generator-functions@^7.20.1":
+"@babel/plugin-proposal-async-generator-functions@^7.20.1", "@babel/plugin-proposal-async-generator-functions@^7.20.7":
   version "7.20.7"
   resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz#bfb7276d2d573cb67ba379984a2334e262ba5326"
   integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==
@@ -328,7 +403,7 @@
     "@babel/helper-create-class-features-plugin" "^7.18.6"
     "@babel/helper-plugin-utils" "^7.18.6"
 
-"@babel/plugin-proposal-class-static-block@^7.18.6":
+"@babel/plugin-proposal-class-static-block@^7.18.6", "@babel/plugin-proposal-class-static-block@^7.21.0":
   version "7.21.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz#77bdd66fb7b605f3a61302d224bdfacf5547977d"
   integrity sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==
@@ -372,7 +447,7 @@
     "@babel/helper-plugin-utils" "^7.18.6"
     "@babel/plugin-syntax-json-strings" "^7.8.3"
 
-"@babel/plugin-proposal-logical-assignment-operators@^7.18.9":
+"@babel/plugin-proposal-logical-assignment-operators@^7.18.9", "@babel/plugin-proposal-logical-assignment-operators@^7.20.7":
   version "7.20.7"
   resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz#dfbcaa8f7b4d37b51e8bfb46d94a5aea2bb89d83"
   integrity sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==
@@ -396,7 +471,7 @@
     "@babel/helper-plugin-utils" "^7.18.6"
     "@babel/plugin-syntax-numeric-separator" "^7.10.4"
 
-"@babel/plugin-proposal-object-rest-spread@^7.20.2":
+"@babel/plugin-proposal-object-rest-spread@^7.20.2", "@babel/plugin-proposal-object-rest-spread@^7.20.7":
   version "7.20.7"
   resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a"
   integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==
@@ -415,7 +490,7 @@
     "@babel/helper-plugin-utils" "^7.18.6"
     "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
 
-"@babel/plugin-proposal-optional-chaining@^7.16.0", "@babel/plugin-proposal-optional-chaining@^7.18.9", "@babel/plugin-proposal-optional-chaining@^7.20.7":
+"@babel/plugin-proposal-optional-chaining@^7.16.0", "@babel/plugin-proposal-optional-chaining@^7.18.9", "@babel/plugin-proposal-optional-chaining@^7.20.7", "@babel/plugin-proposal-optional-chaining@^7.21.0":
   version "7.21.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea"
   integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==
@@ -432,7 +507,7 @@
     "@babel/helper-create-class-features-plugin" "^7.18.6"
     "@babel/helper-plugin-utils" "^7.18.6"
 
-"@babel/plugin-proposal-private-property-in-object@^7.18.6":
+"@babel/plugin-proposal-private-property-in-object@^7.18.6", "@babel/plugin-proposal-private-property-in-object@^7.21.0":
   version "7.21.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz#19496bd9883dd83c23c7d7fc45dcd9ad02dfa1dc"
   integrity sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==
@@ -597,14 +672,14 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.19.0"
 
-"@babel/plugin-transform-arrow-functions@^7.18.6":
+"@babel/plugin-transform-arrow-functions@^7.18.6", "@babel/plugin-transform-arrow-functions@^7.20.7":
   version "7.20.7"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz#bea332b0e8b2dab3dafe55a163d8227531ab0551"
   integrity sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==
   dependencies:
     "@babel/helper-plugin-utils" "^7.20.2"
 
-"@babel/plugin-transform-async-to-generator@^7.18.6":
+"@babel/plugin-transform-async-to-generator@^7.18.6", "@babel/plugin-transform-async-to-generator@^7.20.7":
   version "7.20.7"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz#dfee18623c8cb31deb796aa3ca84dda9cea94354"
   integrity sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==
@@ -620,14 +695,14 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.18.6"
 
-"@babel/plugin-transform-block-scoping@^7.20.2":
+"@babel/plugin-transform-block-scoping@^7.20.2", "@babel/plugin-transform-block-scoping@^7.21.0":
   version "7.21.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz#e737b91037e5186ee16b76e7ae093358a5634f02"
   integrity sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==
   dependencies:
     "@babel/helper-plugin-utils" "^7.20.2"
 
-"@babel/plugin-transform-classes@^7.20.2":
+"@babel/plugin-transform-classes@^7.20.2", "@babel/plugin-transform-classes@^7.21.0":
   version "7.21.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz#f469d0b07a4c5a7dbb21afad9e27e57b47031665"
   integrity sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==
@@ -642,7 +717,7 @@
     "@babel/helper-split-export-declaration" "^7.18.6"
     globals "^11.1.0"
 
-"@babel/plugin-transform-computed-properties@^7.18.9":
+"@babel/plugin-transform-computed-properties@^7.18.9", "@babel/plugin-transform-computed-properties@^7.20.7":
   version "7.20.7"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz#704cc2fd155d1c996551db8276d55b9d46e4d0aa"
   integrity sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==
@@ -657,6 +732,13 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.20.2"
 
+"@babel/plugin-transform-destructuring@^7.21.3":
+  version "7.21.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz#73b46d0fd11cd6ef57dea8a381b1215f4959d401"
+  integrity sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.20.2"
+
 "@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4":
   version "7.18.6"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8"
@@ -688,7 +770,7 @@
     "@babel/helper-plugin-utils" "^7.20.2"
     "@babel/plugin-syntax-flow" "^7.18.6"
 
-"@babel/plugin-transform-for-of@^7.18.8":
+"@babel/plugin-transform-for-of@^7.18.8", "@babel/plugin-transform-for-of@^7.21.0":
   version "7.21.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz#964108c9988de1a60b4be2354a7d7e245f36e86e"
   integrity sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==
@@ -718,7 +800,7 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.18.6"
 
-"@babel/plugin-transform-modules-amd@^7.19.6":
+"@babel/plugin-transform-modules-amd@^7.19.6", "@babel/plugin-transform-modules-amd@^7.20.11":
   version "7.20.11"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz#3daccca8e4cc309f03c3a0c4b41dc4b26f55214a"
   integrity sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==
@@ -726,7 +808,7 @@
     "@babel/helper-module-transforms" "^7.20.11"
     "@babel/helper-plugin-utils" "^7.20.2"
 
-"@babel/plugin-transform-modules-commonjs@^7.19.6":
+"@babel/plugin-transform-modules-commonjs@^7.19.6", "@babel/plugin-transform-modules-commonjs@^7.21.2":
   version "7.21.2"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz#6ff5070e71e3192ef2b7e39820a06fb78e3058e7"
   integrity sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==
@@ -735,7 +817,7 @@
     "@babel/helper-plugin-utils" "^7.20.2"
     "@babel/helper-simple-access" "^7.20.2"
 
-"@babel/plugin-transform-modules-systemjs@^7.19.6":
+"@babel/plugin-transform-modules-systemjs@^7.19.6", "@babel/plugin-transform-modules-systemjs@^7.20.11":
   version "7.20.11"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz#467ec6bba6b6a50634eea61c9c232654d8a4696e"
   integrity sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==
@@ -753,7 +835,7 @@
     "@babel/helper-module-transforms" "^7.18.6"
     "@babel/helper-plugin-utils" "^7.18.6"
 
-"@babel/plugin-transform-named-capturing-groups-regex@^7.19.1":
+"@babel/plugin-transform-named-capturing-groups-regex@^7.19.1", "@babel/plugin-transform-named-capturing-groups-regex@^7.20.5":
   version "7.20.5"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz#626298dd62ea51d452c3be58b285d23195ba69a8"
   integrity sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==
@@ -783,6 +865,13 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.20.2"
 
+"@babel/plugin-transform-parameters@^7.21.3":
+  version "7.21.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz#18fc4e797cf6d6d972cb8c411dbe8a809fa157db"
+  integrity sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.20.2"
+
 "@babel/plugin-transform-property-literals@^7.18.6":
   version "7.18.6"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3"
@@ -830,7 +919,7 @@
     "@babel/helper-annotate-as-pure" "^7.18.6"
     "@babel/helper-plugin-utils" "^7.18.6"
 
-"@babel/plugin-transform-regenerator@^7.18.6":
+"@babel/plugin-transform-regenerator@^7.18.6", "@babel/plugin-transform-regenerator@^7.20.5":
   version "7.20.5"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz#57cda588c7ffb7f4f8483cc83bdcea02a907f04d"
   integrity sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==
@@ -864,7 +953,7 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.18.6"
 
-"@babel/plugin-transform-spread@^7.19.0":
+"@babel/plugin-transform-spread@^7.19.0", "@babel/plugin-transform-spread@^7.20.7":
   version "7.20.7"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz#c2d83e0b99d3bf83e07b11995ee24bf7ca09401e"
   integrity sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==
@@ -998,6 +1087,87 @@
     core-js-compat "^3.25.1"
     semver "^6.3.0"
 
+"@babel/preset-env@^7.21.4":
+  version "7.21.4"
+  resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.21.4.tgz#a952482e634a8dd8271a3fe5459a16eb10739c58"
+  integrity sha512-2W57zHs2yDLm6GD5ZpvNn71lZ0B/iypSdIeq25OurDKji6AdzV07qp4s3n1/x5BqtiGaTrPN3nerlSCaC5qNTw==
+  dependencies:
+    "@babel/compat-data" "^7.21.4"
+    "@babel/helper-compilation-targets" "^7.21.4"
+    "@babel/helper-plugin-utils" "^7.20.2"
+    "@babel/helper-validator-option" "^7.21.0"
+    "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6"
+    "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.20.7"
+    "@babel/plugin-proposal-async-generator-functions" "^7.20.7"
+    "@babel/plugin-proposal-class-properties" "^7.18.6"
+    "@babel/plugin-proposal-class-static-block" "^7.21.0"
+    "@babel/plugin-proposal-dynamic-import" "^7.18.6"
+    "@babel/plugin-proposal-export-namespace-from" "^7.18.9"
+    "@babel/plugin-proposal-json-strings" "^7.18.6"
+    "@babel/plugin-proposal-logical-assignment-operators" "^7.20.7"
+    "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6"
+    "@babel/plugin-proposal-numeric-separator" "^7.18.6"
+    "@babel/plugin-proposal-object-rest-spread" "^7.20.7"
+    "@babel/plugin-proposal-optional-catch-binding" "^7.18.6"
+    "@babel/plugin-proposal-optional-chaining" "^7.21.0"
+    "@babel/plugin-proposal-private-methods" "^7.18.6"
+    "@babel/plugin-proposal-private-property-in-object" "^7.21.0"
+    "@babel/plugin-proposal-unicode-property-regex" "^7.18.6"
+    "@babel/plugin-syntax-async-generators" "^7.8.4"
+    "@babel/plugin-syntax-class-properties" "^7.12.13"
+    "@babel/plugin-syntax-class-static-block" "^7.14.5"
+    "@babel/plugin-syntax-dynamic-import" "^7.8.3"
+    "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
+    "@babel/plugin-syntax-import-assertions" "^7.20.0"
+    "@babel/plugin-syntax-json-strings" "^7.8.3"
+    "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
+    "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+    "@babel/plugin-syntax-numeric-separator" "^7.10.4"
+    "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+    "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+    "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+    "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
+    "@babel/plugin-syntax-top-level-await" "^7.14.5"
+    "@babel/plugin-transform-arrow-functions" "^7.20.7"
+    "@babel/plugin-transform-async-to-generator" "^7.20.7"
+    "@babel/plugin-transform-block-scoped-functions" "^7.18.6"
+    "@babel/plugin-transform-block-scoping" "^7.21.0"
+    "@babel/plugin-transform-classes" "^7.21.0"
+    "@babel/plugin-transform-computed-properties" "^7.20.7"
+    "@babel/plugin-transform-destructuring" "^7.21.3"
+    "@babel/plugin-transform-dotall-regex" "^7.18.6"
+    "@babel/plugin-transform-duplicate-keys" "^7.18.9"
+    "@babel/plugin-transform-exponentiation-operator" "^7.18.6"
+    "@babel/plugin-transform-for-of" "^7.21.0"
+    "@babel/plugin-transform-function-name" "^7.18.9"
+    "@babel/plugin-transform-literals" "^7.18.9"
+    "@babel/plugin-transform-member-expression-literals" "^7.18.6"
+    "@babel/plugin-transform-modules-amd" "^7.20.11"
+    "@babel/plugin-transform-modules-commonjs" "^7.21.2"
+    "@babel/plugin-transform-modules-systemjs" "^7.20.11"
+    "@babel/plugin-transform-modules-umd" "^7.18.6"
+    "@babel/plugin-transform-named-capturing-groups-regex" "^7.20.5"
+    "@babel/plugin-transform-new-target" "^7.18.6"
+    "@babel/plugin-transform-object-super" "^7.18.6"
+    "@babel/plugin-transform-parameters" "^7.21.3"
+    "@babel/plugin-transform-property-literals" "^7.18.6"
+    "@babel/plugin-transform-regenerator" "^7.20.5"
+    "@babel/plugin-transform-reserved-words" "^7.18.6"
+    "@babel/plugin-transform-shorthand-properties" "^7.18.6"
+    "@babel/plugin-transform-spread" "^7.20.7"
+    "@babel/plugin-transform-sticky-regex" "^7.18.6"
+    "@babel/plugin-transform-template-literals" "^7.18.9"
+    "@babel/plugin-transform-typeof-symbol" "^7.18.9"
+    "@babel/plugin-transform-unicode-escapes" "^7.18.10"
+    "@babel/plugin-transform-unicode-regex" "^7.18.6"
+    "@babel/preset-modules" "^0.1.5"
+    "@babel/types" "^7.21.4"
+    babel-plugin-polyfill-corejs2 "^0.3.3"
+    babel-plugin-polyfill-corejs3 "^0.6.0"
+    babel-plugin-polyfill-regenerator "^0.4.1"
+    core-js-compat "^3.25.1"
+    semver "^6.3.0"
+
 "@babel/preset-modules@^0.1.5":
   version "0.1.5"
   resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9"
@@ -1067,6 +1237,22 @@
     debug "^4.1.0"
     globals "^11.1.0"
 
+"@babel/traverse@^7.21.4":
+  version "7.21.4"
+  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.4.tgz#a836aca7b116634e97a6ed99976236b3282c9d36"
+  integrity sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==
+  dependencies:
+    "@babel/code-frame" "^7.21.4"
+    "@babel/generator" "^7.21.4"
+    "@babel/helper-environment-visitor" "^7.18.9"
+    "@babel/helper-function-name" "^7.21.0"
+    "@babel/helper-hoist-variables" "^7.18.6"
+    "@babel/helper-split-export-declaration" "^7.18.6"
+    "@babel/parser" "^7.21.4"
+    "@babel/types" "^7.21.4"
+    debug "^4.1.0"
+    globals "^11.1.0"
+
 "@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4":
   version "7.21.2"
   resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.2.tgz#92246f6e00f91755893c2876ad653db70c8310d1"
@@ -1076,6 +1262,15 @@
     "@babel/helper-validator-identifier" "^7.19.1"
     to-fast-properties "^2.0.0"
 
+"@babel/types@^7.21.4":
+  version "7.21.4"
+  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.4.tgz#2d5d6bb7908699b3b416409ffd3b5daa25b030d4"
+  integrity sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==
+  dependencies:
+    "@babel/helper-string-parser" "^7.19.4"
+    "@babel/helper-validator-identifier" "^7.19.1"
+    to-fast-properties "^2.0.0"
+
 "@bcoe/v8-coverage@^0.2.3":
   version "0.2.3"
   resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
@@ -1548,6 +1743,11 @@
   resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b"
   integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==
 
+"@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3":
+  version "2.1.8-no-fsevents.3"
+  resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz#323d72dd25103d0c4fbdce89dadf574a787b1f9b"
+  integrity sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==
+
 "@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1":
   version "5.1.1-v1"
   resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz#dbf733a965ca47b1973177dc0bb6c889edcfb129"
@@ -3058,7 +3258,7 @@ check-types@^11.1.1:
   resolved "https://registry.yarnpkg.com/check-types/-/check-types-11.2.2.tgz#7afc0b6a860d686885062f2dba888ba5710335b4"
   integrity sha512-HBiYvXvn9Z70Z88XKjz3AEKd4HJhBXsa3j7xFnITAzoS8+q6eIGi8qDB8FKPBAjtuxjI/zFpwuiCb8oDtKOYrA==
 
-chokidar@^3.4.2, chokidar@^3.5.3:
+chokidar@^3.4.0, chokidar@^3.4.2, chokidar@^3.5.3:
   version "3.5.3"
   resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
   integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
@@ -3169,6 +3369,11 @@ commander@^2.20.0:
   resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
   integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
 
+commander@^4.0.1:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
+  integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
+
 commander@^7.2.0:
   version "7.2.0"
   resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
@@ -3241,7 +3446,7 @@ content-type@~1.0.4:
   resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918"
   integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==
 
-convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0:
+convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0:
   version "1.9.0"
   resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f"
   integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==
@@ -4582,6 +4787,11 @@ fs-monkey@^1.0.3:
   resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3"
   integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==
 
+fs-readdir-recursive@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27"
+  integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==
+
 fs.realpath@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
@@ -4673,7 +4883,7 @@ glob-to-regexp@^0.4.1:
   resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
   integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
 
-glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
+glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0:
   version "7.2.3"
   resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
   integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
@@ -6191,6 +6401,14 @@ magic-string@^0.25.0, magic-string@^0.25.7:
   dependencies:
     sourcemap-codec "^1.4.8"
 
+make-dir@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
+  integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
+  dependencies:
+    pify "^4.0.1"
+    semver "^5.6.0"
+
 make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
@@ -6730,6 +6948,11 @@ pify@^2.3.0:
   resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
   integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==
 
+pify@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
+  integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
+
 pirates@^4.0.4:
   version "4.0.5"
   resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b"
@@ -7585,13 +7808,6 @@ react-scripts@^5.0.1:
   optionalDependencies:
     fsevents "^2.3.2"
 
-react@^18.0.0:
-  version "18.2.0"
-  resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5"
-  integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==
-  dependencies:
-    loose-envify "^1.1.0"
-
 read-cache@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774"
@@ -7933,6 +8149,11 @@ selfsigned@^2.1.1:
   dependencies:
     node-forge "^1"
 
+semver@^5.6.0:
+  version "5.7.1"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
+  integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
+
 semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0:
   version "6.3.0"
   resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
@@ -8047,6 +8268,11 @@ sisteransi@^1.0.5:
   resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
   integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==
 
+slash@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"
+  integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==
+
 slash@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"