@xylabs/sdk-react 2.9.1 → 2.9.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/dist/components/Experiments/Experiment.d.ts +1 -0
  2. package/dist/components/Experiments/Experiment.js.map +1 -1
  3. package/dist/components/Experiments/Experiments.d.ts +3 -8
  4. package/dist/components/Experiments/Experiments.js +18 -2
  5. package/dist/components/Experiments/Experiments.js.map +1 -1
  6. package/dist/components/Experiments/Experiments.stories.d.ts +6 -0
  7. package/dist/components/Experiments/Experiments.stories.js +27 -0
  8. package/dist/components/Experiments/Experiments.stories.js.map +1 -0
  9. package/dist/components/Experiments/ExperimentsDebugger.d.ts +3 -0
  10. package/dist/components/Experiments/ExperimentsDebugger.js +37 -0
  11. package/dist/components/Experiments/ExperimentsDebugger.js.map +1 -0
  12. package/dist/components/Experiments/ExperimentsDebugger.stories.d.ts +6 -0
  13. package/dist/components/Experiments/ExperimentsDebugger.stories.js +20 -0
  14. package/dist/components/Experiments/ExperimentsDebugger.stories.js.map +1 -0
  15. package/dist/components/Experiments/ExperimentsProps.d.ts +7 -0
  16. package/dist/components/Experiments/ExperimentsProps.js +2 -0
  17. package/dist/components/Experiments/ExperimentsProps.js.map +1 -0
  18. package/dist/components/Experiments/index.d.ts +2 -1
  19. package/dist/components/Experiments/index.js +2 -1
  20. package/dist/components/Experiments/index.js.map +1 -1
  21. package/dist/components/Experiments/models/index.d.ts +12 -0
  22. package/dist/components/Experiments/models/index.js +3 -0
  23. package/dist/components/Experiments/models/index.js.map +1 -0
  24. package/dist/esm2017/components/Experiments/Experiment.d.ts +1 -0
  25. package/dist/esm2017/components/Experiments/Experiments.d.ts +3 -8
  26. package/dist/esm2017/components/Experiments/Experiments.stories.d.ts +6 -0
  27. package/dist/esm2017/components/Experiments/ExperimentsDebugger.d.ts +3 -0
  28. package/dist/esm2017/components/Experiments/ExperimentsDebugger.stories.d.ts +6 -0
  29. package/dist/esm2017/components/Experiments/ExperimentsProps.d.ts +7 -0
  30. package/dist/esm2017/components/Experiments/index.d.ts +2 -1
  31. package/dist/esm2017/components/Experiments/models/index.d.ts +12 -0
  32. package/dist/esm2017/hooks/index.d.ts +1 -0
  33. package/dist/esm2017/hooks/useLocalStorage.d.ts +1 -0
  34. package/dist/esm2017/index.js +82 -4
  35. package/dist/esm2017/index.js.map +1 -1
  36. package/dist/esm5/components/Experiments/Experiment.d.ts +1 -0
  37. package/dist/esm5/components/Experiments/Experiments.d.ts +3 -8
  38. package/dist/esm5/components/Experiments/Experiments.stories.d.ts +6 -0
  39. package/dist/esm5/components/Experiments/ExperimentsDebugger.d.ts +3 -0
  40. package/dist/esm5/components/Experiments/ExperimentsDebugger.stories.d.ts +6 -0
  41. package/dist/esm5/components/Experiments/ExperimentsProps.d.ts +7 -0
  42. package/dist/esm5/components/Experiments/index.d.ts +2 -1
  43. package/dist/esm5/components/Experiments/models/index.d.ts +12 -0
  44. package/dist/esm5/hooks/index.d.ts +1 -0
  45. package/dist/esm5/hooks/useLocalStorage.d.ts +1 -0
  46. package/dist/esm5/index.js +82 -4
  47. package/dist/esm5/index.js.map +1 -1
  48. package/dist/hooks/index.d.ts +1 -0
  49. package/dist/hooks/index.js +1 -0
  50. package/dist/hooks/index.js.map +1 -1
  51. package/dist/hooks/useLocalStorage.d.ts +1 -0
  52. package/dist/hooks/useLocalStorage.js +23 -0
  53. package/dist/hooks/useLocalStorage.js.map +1 -0
  54. package/dist/node/components/Experiments/Experiment.d.ts +1 -0
  55. package/dist/node/components/Experiments/Experiments.d.ts +3 -8
  56. package/dist/node/components/Experiments/Experiments.stories.d.ts +6 -0
  57. package/dist/node/components/Experiments/ExperimentsDebugger.d.ts +3 -0
  58. package/dist/node/components/Experiments/ExperimentsDebugger.stories.d.ts +6 -0
  59. package/dist/node/components/Experiments/ExperimentsProps.d.ts +7 -0
  60. package/dist/node/components/Experiments/index.d.ts +2 -1
  61. package/dist/node/components/Experiments/models/index.d.ts +12 -0
  62. package/dist/node/hooks/index.d.ts +1 -0
  63. package/dist/node/hooks/useLocalStorage.d.ts +1 -0
  64. package/dist/node/index.js +82 -2
  65. package/dist/node/index.js.map +1 -1
  66. package/dist/node-esm/components/Experiments/Experiment.d.ts +1 -0
  67. package/dist/node-esm/components/Experiments/Experiments.d.ts +3 -8
  68. package/dist/node-esm/components/Experiments/Experiments.stories.d.ts +6 -0
  69. package/dist/node-esm/components/Experiments/ExperimentsDebugger.d.ts +3 -0
  70. package/dist/node-esm/components/Experiments/ExperimentsDebugger.stories.d.ts +6 -0
  71. package/dist/node-esm/components/Experiments/ExperimentsProps.d.ts +7 -0
  72. package/dist/node-esm/components/Experiments/index.d.ts +2 -1
  73. package/dist/node-esm/components/Experiments/models/index.d.ts +12 -0
  74. package/dist/node-esm/hooks/index.d.ts +1 -0
  75. package/dist/node-esm/hooks/useLocalStorage.d.ts +1 -0
  76. package/dist/node-esm/index.js +82 -4
  77. package/dist/node-esm/index.js.map +1 -1
  78. package/package.json +4 -4
  79. package/src/components/Experiments/Experiment.tsx +1 -0
  80. package/src/components/Experiments/Experiments.stories.tsx +35 -0
  81. package/src/components/Experiments/Experiments.tsx +21 -10
  82. package/src/components/Experiments/ExperimentsDebugger.stories.tsx +24 -0
  83. package/src/components/Experiments/ExperimentsDebugger.tsx +71 -0
  84. package/src/components/Experiments/ExperimentsProps.ts +9 -0
  85. package/src/components/Experiments/index.tsx +2 -1
  86. package/src/components/Experiments/models/index.ts +8 -0
  87. package/src/hooks/index.ts +1 -0
  88. package/src/hooks/useLocalStorage.ts +24 -0
  89. package/xylabs-sdk-react-v2.8.2.tgz +0 -0
@@ -1,6 +1,7 @@
1
1
  import React, { PropsWithChildren } from 'react';
2
2
  export interface ExperimentProps {
3
3
  weight: number;
4
+ key: string;
4
5
  }
5
6
  declare const Experiment: React.FC<PropsWithChildren<ExperimentProps>>;
6
7
  export { Experiment };
@@ -1 +1 @@
1
- {"version":3,"file":"Experiment.js","sourceRoot":"","sources":["../../../src/components/Experiments/Experiment.tsx"],"names":[],"mappings":";AAMA,IAAM,UAAU,GAAiD,UAAC,KAAK;IAC7D,IAAA,QAAQ,GAAK,KAAK,SAAV,CAAU;IAC1B,OAAO,4BAAG,QAAQ,WAAI,CAAA;AACxB,CAAC,CAAA;AAED,OAAO,EAAE,UAAU,EAAE,CAAA"}
1
+ {"version":3,"file":"Experiment.js","sourceRoot":"","sources":["../../../src/components/Experiments/Experiment.tsx"],"names":[],"mappings":";AAOA,IAAM,UAAU,GAAiD,UAAC,KAAK;IAC7D,IAAA,QAAQ,GAAK,KAAK,SAAV,CAAU;IAC1B,OAAO,4BAAG,QAAQ,WAAI,CAAA;AACxB,CAAC,CAAA;AAED,OAAO,EAAE,UAAU,EAAE,CAAA"}
@@ -1,9 +1,4 @@
1
- import React, { ReactElement } from 'react';
2
- import { ExperimentProps } from './Experiment';
3
- declare type Props = {
4
- children: ReactElement<ExperimentProps>[] | ReactElement<ExperimentProps>;
5
- localStorageProp?: string | boolean;
6
- name: string;
7
- };
8
- declare const Experiments: React.FC<Props>;
1
+ import React from 'react';
2
+ import { ExperimentsProps } from './ExperimentsProps';
3
+ declare const Experiments: React.FC<ExperimentsProps>;
9
4
  export { Experiments };
@@ -3,14 +3,15 @@ import { forget } from '@xylabs/sdk-js';
3
3
  import { useContext } from 'react';
4
4
  import { UserEventsContext } from '../../contexts';
5
5
  import { getLocalStorageObject, setLocalStorageObject } from '../../lib';
6
+ import { ExperimentsLocalStorageKey, OutcomesLocalStorageKey } from './models';
6
7
  var defaultLocalStorageKey = 'testData';
7
8
  var experimentsTestData = {};
8
9
  var outcomes = {}; //prevent multi-outcome
9
10
  var saveOutcomes = function () {
10
- setLocalStorageObject('outcomes', outcomes);
11
+ setLocalStorageObject(OutcomesLocalStorageKey, outcomes);
11
12
  };
12
13
  var loadOutcomes = function () {
13
- outcomes = getLocalStorageObject('outcomes');
14
+ outcomes = getLocalStorageObject(OutcomesLocalStorageKey);
14
15
  };
15
16
  var mergeData = function (data, log) {
16
17
  var dataArray = [];
@@ -54,6 +55,20 @@ var calcTotalWeight = function (childList) {
54
55
  }
55
56
  return totalWeight;
56
57
  };
58
+ var saveExperimentDebugRanges = function (name, totalWeight, childList) {
59
+ var experiments = getLocalStorageObject(ExperimentsLocalStorageKey) || {};
60
+ experiments[name] = {
61
+ totalWeight: totalWeight,
62
+ variants: childList.map(function (child) {
63
+ var _a;
64
+ return ({
65
+ name: (_a = child.key) === null || _a === void 0 ? void 0 : _a.toString(),
66
+ weight: child.props.weight,
67
+ });
68
+ }),
69
+ };
70
+ setLocalStorageObject(ExperimentsLocalStorageKey, experiments);
71
+ };
57
72
  var Experiments = function (props) {
58
73
  var e_2, _a;
59
74
  var _b, _c;
@@ -64,6 +79,7 @@ var Experiments = function (props) {
64
79
  var localStorageKey = buildLocalStorageKey(localStorageProp);
65
80
  var childList = makeChildrenArray(children);
66
81
  var totalWeight = calcTotalWeight(childList);
82
+ saveExperimentDebugRanges(name, totalWeight, childList);
67
83
  var firstTime = outcomes[name] === undefined;
68
84
  var targetWeight = (_b = outcomes[name]) !== null && _b !== void 0 ? _b : Math.random() * totalWeight;
69
85
  outcomes[name] = targetWeight;
@@ -1 +1 @@
1
- {"version":3,"file":"Experiments.js","sourceRoot":"","sources":["../../../src/components/Experiments/Experiments.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAO,MAAM,gBAAgB,CAAA;AAC5C,OAAc,EAAgB,UAAU,EAAE,MAAM,OAAO,CAAA;AAEvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AAGxE,IAAM,sBAAsB,GAAG,UAAU,CAAA;AAEzC,IAAM,mBAAmB,GAAgC,EAAE,CAAA;AAC3D,IAAI,QAAQ,GAAgC,EAAE,CAAA,CAAC,uBAAuB;AAEtE,IAAM,YAAY,GAAG;IACnB,qBAAqB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;AAC7C,CAAC,CAAA;AAED,IAAM,YAAY,GAAG;IACnB,QAAQ,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAA;AAC9C,CAAC,CAAA;AAED,IAAM,SAAS,GAAG,UAAC,IAAiC,EAAE,GAAS;IAC7D,IAAM,SAAS,GAAa,EAAE,CAAA;IAC9B,KAAK,IAAM,GAAG,IAAI,IAAI,EAAE;QACtB,SAAS,CAAC,IAAI,CAAC,UAAG,GAAG,cAAI,IAAI,CAAC,GAAG,CAAC,CAAE,CAAC,CAAA;KACtC;IACD,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IAC3C,OAAO,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC5B,CAAC,CAAA;AAQD,IAAM,eAAe,GAAG,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;AAEvE,IAAM,iBAAiB,GAAG,UAAC,QAAyE;IAClG,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QAC3B,OAAO,QAA2C,CAAA;KACnD;SAAM;QACL,OAAO,CAAC,QAAQ,CAAoC,CAAA;KACrD;AACH,CAAC,CAAA;AAED,IAAM,oBAAoB,GAAG,UAAC,gBAAkC;IAC9D,OAAO,gBAAgB,KAAK,IAAI;QAC9B,CAAC,CAAC,sBAAsB;QACxB,CAAC,CAAC,OAAO,gBAAgB,KAAK,QAAQ;YACtC,CAAC,CAAC,gBAAgB,aAAhB,gBAAgB,cAAhB,gBAAgB,GAAI,sBAAsB;YAC5C,CAAC,CAAC,EAAE,CAAA;AACR,CAAC,CAAA;AAED,IAAM,eAAe,GAAG,UAAC,SAA0C;;IACjE,IAAI,WAAW,GAAG,CAAC,CAAA;;QACnB,KAAoB,IAAA,cAAA,SAAA,SAAS,CAAA,oCAAA,2DAAE;YAA1B,IAAM,KAAK,sBAAA;YACd,WAAW,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAA;SAClC;;;;;;;;;IACD,OAAO,WAAW,CAAA;AACpB,CAAC,CAAA;AAED,IAAM,WAAW,GAAoB,UAAC,KAAK;;;IACjC,IAAA,IAAI,GAAwC,KAAK,KAA7C,EAAE,QAAQ,GAA8B,KAAK,SAAnC,EAAE,KAA4B,KAAK,iBAAV,EAAvB,gBAAgB,mBAAG,IAAI,KAAA,CAAU;IACzD,IAAM,iBAAiB,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAA;IAC/C,IAAA,UAAU,GAAK,iBAAiB,WAAtB,CAAsB;IACxC,YAAY,EAAE,CAAA;IAEd,IAAM,eAAe,GAAG,oBAAoB,CAAC,gBAAgB,CAAC,CAAA;IAE9D,IAAM,SAAS,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IAE7C,IAAM,WAAW,GAAG,eAAe,CAAC,SAAS,CAAC,CAAA;IAE9C,IAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,SAAS,CAAA;IAC9C,IAAI,YAAY,GAAG,MAAA,QAAQ,CAAC,IAAI,CAAC,mCAAI,IAAI,CAAC,MAAM,EAAE,GAAG,WAAW,CAAA;IAChE,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY,CAAA;IAC7B,YAAY,EAAE,CAAA;;QACd,KAAoB,IAAA,cAAA,SAAA,SAAS,CAAA,oCAAA,2DAAE;YAA1B,IAAM,KAAK,sBAAA;YACd,YAAY,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAA;YAClC,IAAI,YAAY,GAAG,CAAC;gBAAE,SAAQ;YAC9B,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;gBACd,MAAM,eAAe,CAAA;aACtB;YACD,mBAAmB,CAAC,IAAI,CAAC,GAAG,MAAA,KAAK,CAAC,GAAG,0CAAE,QAAQ,EAAE,CAAA;YACjD,IAAI,SAAS,EAAE;gBACb,IAAI,gBAAgB,KAAK,KAAK,EAAE;oBAC9B,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,SAAS,CAAC,mBAAmB,CAAC,CAAC,CAAA;iBACtE;gBACD,IAAI,UAAU,EAAE;oBACd,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,IAAI,MAAA,EAAE,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;iBAC/D;aACF;YAED,OAAO,KAAK,CAAA;SACb;;;;;;;;;IACD,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;AAC7C,CAAC,CAAA;AAED,OAAO,EAAE,WAAW,EAAE,CAAA"}
1
+ {"version":3,"file":"Experiments.js","sourceRoot":"","sources":["../../../src/components/Experiments/Experiments.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /// <reference types="react" />
2
+ import { ComponentMeta, ComponentStory } from '@storybook/react';
3
+ declare const StorybookEntry: ComponentMeta<import("react").FC<import("./ExperimentsProps").ExperimentsProps>>;
4
+ declare const Default: ComponentStory<import("react").FC<import("./ExperimentsProps").ExperimentsProps>>;
5
+ export { Default };
6
+ export default StorybookEntry;
@@ -0,0 +1,27 @@
1
+ import { __assign } from "tslib";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { Experiment } from './Experiment';
4
+ import { Experiments } from './Experiments';
5
+ var StorybookEntry = {
6
+ argTypes: {},
7
+ component: Experiments,
8
+ parameters: {
9
+ docs: {
10
+ page: null,
11
+ },
12
+ },
13
+ title: 'Components/Experiments',
14
+ };
15
+ var Template = function (args) { return _jsx(Experiments, __assign({}, args), void 0); };
16
+ var Default = Template.bind({});
17
+ Default.args = {
18
+ children: [
19
+ _jsx(Experiment, __assign({ weight: 50 }, { children: "True" }), 'true'),
20
+ _jsx(Experiment, __assign({ weight: 50 }, { children: "False" }), 'false'),
21
+ ],
22
+ name: 'StorybookAB',
23
+ };
24
+ export { Default };
25
+ // eslint-disable-next-line import/no-default-export
26
+ export default StorybookEntry;
27
+ //# sourceMappingURL=Experiments.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Experiments.stories.js","sourceRoot":"","sources":["../../../src/components/Experiments/Experiments.stories.tsx"],"names":[],"mappings":";;AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE3C,IAAM,cAAc,GAAG;IACrB,QAAQ,EAAE,EAAE;IACZ,SAAS,EAAE,WAAW;IACtB,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,IAAI,EAAE,IAAI;SACX;KACF;IACD,KAAK,EAAE,wBAAwB;CACK,CAAA;AAEtC,IAAM,QAAQ,GAAuC,UAAC,IAAI,IAAK,OAAA,KAAC,WAAW,eAAK,IAAI,UAAgB,EAArC,CAAqC,CAAA;AAEpG,IAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACjC,OAAO,CAAC,IAAI,GAAG;IACb,QAAQ,EAAE;QACR,KAAC,UAAU,aAAC,MAAM,EAAE,EAAE,2BAAO,MAAM,CAEtB;QACb,KAAC,UAAU,aAAC,MAAM,EAAE,EAAE,4BAAO,OAAO,CAEvB;KACd;IACD,IAAI,EAAE,aAAa;CACpB,CAAA;AAED,OAAO,EAAE,OAAO,EAAE,CAAA;AAElB,oDAAoD;AACpD,eAAe,cAAc,CAAA"}
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const ExperimentsDebugger: React.FC;
3
+ export { ExperimentsDebugger };
@@ -0,0 +1,37 @@
1
+ import { __assign, __read, __rest, __spreadArray } from "tslib";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Slider, Typography } from '@mui/material';
4
+ import { useLocalStorage } from '../../hooks';
5
+ import { FlexCol, FlexRow } from '../FlexBox';
6
+ import { ExperimentsLocalStorageKey, OutcomesLocalStorageKey, } from './models';
7
+ var ExperimentsDebugger = function (_a) {
8
+ var props = __rest(_a, []);
9
+ var _b = __read(useLocalStorage(ExperimentsLocalStorageKey, {}), 1), experiments = _b[0];
10
+ var _c = __read(useLocalStorage(OutcomesLocalStorageKey, {}), 2), outcomes = _c[0], setOutcomes = _c[1];
11
+ var sumUpVariants = function (items) { return items.reduce(function (acc, curr) { return acc + curr.weight; }, 0); };
12
+ var experimentEntries = Object.entries(experiments);
13
+ if (!experiments || !experimentEntries.length) {
14
+ return (_jsxs(FlexCol, __assign({ alignItems: "stretch" }, props, { children: [_jsx(Typography, __assign({ variant: "subtitle1" }, { children: "No Experiments loaded" }), void 0), _jsx(Typography, __assign({ variant: "subtitle2" }, { children: "Visit a page with an experiment to load the data" }), void 0)] }), void 0));
15
+ }
16
+ return (_jsx(FlexCol, __assign({ alignItems: "stretch" }, props, { children: Object.entries(experiments).map(function (data) {
17
+ var _a = __read(data, 2), name = _a[0], experiment = _a[1];
18
+ var outcome = (outcomes[name] || 0);
19
+ var marks = __spreadArray([
20
+ { label: "".concat(experiment.variants[0].name, " | ").concat(experiment.variants[0].weight), value: 0 }
21
+ ], __read(experiment.variants.map(function (_a, index) {
22
+ var weight = _a.weight;
23
+ return ({
24
+ label: index === experiment.variants.length - 1 ? 'End' : "".concat(experiment.variants[index + 1].name, " | ").concat(weight),
25
+ value: index === 0 ? weight : sumUpVariants(experiment.variants.slice(0, index + 1)),
26
+ });
27
+ })), false);
28
+ return (_jsxs(FlexCol, __assign({ alignItems: "stretch", paddingX: 4, marginBottom: 4 }, props, { children: [_jsxs(FlexRow, { children: [name, ":\u00A0", outcome] }, void 0), _jsx(FlexRow, { children: _jsx(Slider, { "aria-label": "Experiment ".concat(name), defaultValue: outcome, value: outcome, marks: marks, onChange: function (e, value) {
29
+ var truncated = Number((Array.isArray(value) ? value[0] : value).toFixed(2));
30
+ outcomes[name] = truncated;
31
+ // Spread operator triggers rerender
32
+ setOutcomes(__assign({}, outcomes));
33
+ } }, void 0) }, void 0)] }), "experiment-".concat(name)));
34
+ }) }), void 0));
35
+ };
36
+ export { ExperimentsDebugger };
37
+ //# sourceMappingURL=ExperimentsDebugger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExperimentsDebugger.js","sourceRoot":"","sources":["../../../src/components/Experiments/ExperimentsDebugger.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /// <reference types="react" />
2
+ import { ComponentMeta, ComponentStory } from '@storybook/react';
3
+ declare const StorybookEntry: ComponentMeta<import("react").FC<{}>>;
4
+ declare const Default: ComponentStory<import("react").FC<{}>>;
5
+ export { Default };
6
+ export default StorybookEntry;
@@ -0,0 +1,20 @@
1
+ import { __assign } from "tslib";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { ExperimentsDebugger } from './index';
4
+ var StorybookEntry = {
5
+ argTypes: {},
6
+ component: ExperimentsDebugger,
7
+ parameters: {
8
+ docs: {
9
+ page: null,
10
+ },
11
+ },
12
+ title: 'Components/ExperimentsDebugger',
13
+ };
14
+ var Template = function (args) { return _jsx(ExperimentsDebugger, __assign({}, args), void 0); };
15
+ var Default = Template.bind({});
16
+ Default.args = {};
17
+ export { Default };
18
+ // eslint-disable-next-line import/no-default-export
19
+ export default StorybookEntry;
20
+ //# sourceMappingURL=ExperimentsDebugger.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExperimentsDebugger.stories.js","sourceRoot":"","sources":["../../../src/components/Experiments/ExperimentsDebugger.stories.tsx"],"names":[],"mappings":";;AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAE7C,IAAM,cAAc,GAAG;IACrB,QAAQ,EAAE,EAAE;IACZ,SAAS,EAAE,mBAAmB;IAC9B,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,IAAI,EAAE,IAAI;SACX;KACF;IACD,KAAK,EAAE,gCAAgC;CACK,CAAA;AAE9C,IAAM,QAAQ,GAA+C,UAAC,IAAI,IAAK,OAAA,KAAC,mBAAmB,eAAK,IAAI,UAAI,EAAjC,CAAiC,CAAA;AAExG,IAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACjC,OAAO,CAAC,IAAI,GAAG,EAAE,CAAA;AAEjB,OAAO,EAAE,OAAO,EAAE,CAAA;AAElB,oDAAoD;AACpD,eAAe,cAAc,CAAA"}
@@ -0,0 +1,7 @@
1
+ import { ReactElement } from 'react';
2
+ import { ExperimentProps } from './Experiment';
3
+ export declare type ExperimentsProps = {
4
+ children: ReactElement<ExperimentProps>[] | ReactElement<ExperimentProps>;
5
+ localStorageProp?: string | boolean;
6
+ name: string;
7
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ExperimentsProps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExperimentsProps.js","sourceRoot":"","sources":["../../../src/components/Experiments/ExperimentsProps.ts"],"names":[],"mappings":""}
@@ -1,3 +1,4 @@
1
1
  import { Experiment } from './Experiment';
2
2
  import { Experiments } from './Experiments';
3
- export { Experiment, Experiments };
3
+ import { ExperimentsDebugger } from './ExperimentsDebugger';
4
+ export { Experiment, Experiments, ExperimentsDebugger };
@@ -1,4 +1,5 @@
1
1
  import { Experiment } from './Experiment';
2
2
  import { Experiments } from './Experiments';
3
- export { Experiment, Experiments };
3
+ import { ExperimentsDebugger } from './ExperimentsDebugger';
4
+ export { Experiment, Experiments, ExperimentsDebugger };
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/Experiments/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE3C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/Experiments/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAE3D,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,mBAAmB,EAAE,CAAA"}
@@ -0,0 +1,12 @@
1
+ export declare const OutcomesLocalStorageKey = "outcomes";
2
+ export declare const ExperimentsLocalStorageKey = "experiments";
3
+ export declare type OutcomesData = Record<string, number>;
4
+ export declare type ExperimentsData = Record<string, ExperimentData>;
5
+ export declare type ExperimentData = {
6
+ totalWeight: number;
7
+ variants: VariantData[];
8
+ };
9
+ export declare type VariantData = {
10
+ weight: number;
11
+ name?: string;
12
+ };
@@ -0,0 +1,3 @@
1
+ export var OutcomesLocalStorageKey = 'outcomes';
2
+ export var ExperimentsLocalStorageKey = 'experiments';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/Experiments/models/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,IAAM,uBAAuB,GAAG,UAAU,CAAA;AACjD,MAAM,CAAC,IAAM,0BAA0B,GAAG,aAAa,CAAA"}
@@ -1,6 +1,7 @@
1
1
  import React, { PropsWithChildren } from 'react';
2
2
  export interface ExperimentProps {
3
3
  weight: number;
4
+ key: string;
4
5
  }
5
6
  declare const Experiment: React.FC<PropsWithChildren<ExperimentProps>>;
6
7
  export { Experiment };
@@ -1,9 +1,4 @@
1
- import React, { ReactElement } from 'react';
2
- import { ExperimentProps } from './Experiment';
3
- declare type Props = {
4
- children: ReactElement<ExperimentProps>[] | ReactElement<ExperimentProps>;
5
- localStorageProp?: string | boolean;
6
- name: string;
7
- };
8
- declare const Experiments: React.FC<Props>;
1
+ import React from 'react';
2
+ import { ExperimentsProps } from './ExperimentsProps';
3
+ declare const Experiments: React.FC<ExperimentsProps>;
9
4
  export { Experiments };
@@ -0,0 +1,6 @@
1
+ /// <reference types="react" />
2
+ import { ComponentMeta, ComponentStory } from '@storybook/react';
3
+ declare const StorybookEntry: ComponentMeta<import("react").FC<import("./ExperimentsProps").ExperimentsProps>>;
4
+ declare const Default: ComponentStory<import("react").FC<import("./ExperimentsProps").ExperimentsProps>>;
5
+ export { Default };
6
+ export default StorybookEntry;
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const ExperimentsDebugger: React.FC;
3
+ export { ExperimentsDebugger };
@@ -0,0 +1,6 @@
1
+ /// <reference types="react" />
2
+ import { ComponentMeta, ComponentStory } from '@storybook/react';
3
+ declare const StorybookEntry: ComponentMeta<import("react").FC<{}>>;
4
+ declare const Default: ComponentStory<import("react").FC<{}>>;
5
+ export { Default };
6
+ export default StorybookEntry;
@@ -0,0 +1,7 @@
1
+ import { ReactElement } from 'react';
2
+ import { ExperimentProps } from './Experiment';
3
+ export declare type ExperimentsProps = {
4
+ children: ReactElement<ExperimentProps>[] | ReactElement<ExperimentProps>;
5
+ localStorageProp?: string | boolean;
6
+ name: string;
7
+ };
@@ -1,3 +1,4 @@
1
1
  import { Experiment } from './Experiment';
2
2
  import { Experiments } from './Experiments';
3
- export { Experiment, Experiments };
3
+ import { ExperimentsDebugger } from './ExperimentsDebugger';
4
+ export { Experiment, Experiments, ExperimentsDebugger };
@@ -0,0 +1,12 @@
1
+ export declare const OutcomesLocalStorageKey = "outcomes";
2
+ export declare const ExperimentsLocalStorageKey = "experiments";
3
+ export declare type OutcomesData = Record<string, number>;
4
+ export declare type ExperimentsData = Record<string, ExperimentData>;
5
+ export declare type ExperimentData = {
6
+ totalWeight: number;
7
+ variants: VariantData[];
8
+ };
9
+ export declare type VariantData = {
10
+ weight: number;
11
+ name?: string;
12
+ };
@@ -1,4 +1,5 @@
1
1
  export * from './useBreakpoint';
2
+ export * from './useLocalStorage';
2
3
  export * from './useMediaQuery';
3
4
  export * from './useMounted';
4
5
  export * from './useNavigateToEthAddress';
@@ -0,0 +1 @@
1
+ export declare const useLocalStorage: <T>(key: string, defaultValue: T) => [T, (value: T) => void];
@@ -1,5 +1,5 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
- import { useTheme, Box, alpha, CircularProgress, LinearProgress, Paper, Typography, IconButton, useScrollTrigger, Zoom, AppBar, Container, Toolbar, Button, Link, responsiveFontSizes, ScopedCssBaseline, ThemeProvider, Fab, Breadcrumbs, Dialog, DialogTitle, DialogContent, DialogActions, useMediaQuery } from '@mui/material';
2
+ import { useTheme, Box, alpha, CircularProgress, LinearProgress, Paper, Typography, IconButton, useScrollTrigger, Zoom, AppBar, Container, Toolbar, Button, Link, responsiveFontSizes, ScopedCssBaseline, ThemeProvider, Fab, Breadcrumbs, Dialog, DialogTitle, DialogContent, DialogActions, useMediaQuery, Slider } from '@mui/material';
3
3
  export { useMediaQuery } from '@mui/material';
4
4
  import { AiOutlineReload, AiOutlineQuestionCircle } from 'react-icons/ai';
5
5
  import { makeStyles, createStyles } from '@mui/styles';
@@ -135,6 +135,16 @@ function __read(o, n) {
135
135
  finally { if (e) throw e.error; }
136
136
  }
137
137
  return ar;
138
+ }
139
+
140
+ function __spreadArray(to, from, pack) {
141
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
142
+ if (ar || !(i in from)) {
143
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
144
+ ar[i] = from[i];
145
+ }
146
+ }
147
+ return to.concat(ar || Array.prototype.slice.call(from));
138
148
  }
139
149
 
140
150
  var BusyCircularProgress = function (_a) {
@@ -2229,6 +2239,26 @@ var useBreakpoint = function () {
2229
2239
  }
2230
2240
  };
2231
2241
 
2242
+ var useLocalStorage = function (key, defaultValue) {
2243
+ var _a = __read(useState(function () {
2244
+ try {
2245
+ var item = getLocalStorageObject(key);
2246
+ return item || defaultValue;
2247
+ }
2248
+ catch (ex) {
2249
+ //Error is already logged
2250
+ return defaultValue;
2251
+ }
2252
+ }), 2), storedValue = _a[0], setStoredValue = _a[1];
2253
+ var setValue = function (value) {
2254
+ console.log('setValue', value);
2255
+ setStoredValue(value);
2256
+ setLocalStorageObject(key, value);
2257
+ console.log('getValue from ls', getLocalStorageObject(key));
2258
+ };
2259
+ return [storedValue, setValue];
2260
+ };
2261
+
2232
2262
  var useMounted = function () {
2233
2263
  var _a = __read(useState(true), 2), mounted = _a[0], setMounted = _a[1];
2234
2264
  useEffect(function () {
@@ -2352,14 +2382,17 @@ var Experiment = function (props) {
2352
2382
  return jsx(Fragment, { children: children }, void 0);
2353
2383
  };
2354
2384
 
2385
+ var OutcomesLocalStorageKey = 'outcomes';
2386
+ var ExperimentsLocalStorageKey = 'experiments';
2387
+
2355
2388
  var defaultLocalStorageKey = 'testData';
2356
2389
  var experimentsTestData = {};
2357
2390
  var outcomes = {}; //prevent multi-outcome
2358
2391
  var saveOutcomes = function () {
2359
- setLocalStorageObject('outcomes', outcomes);
2392
+ setLocalStorageObject(OutcomesLocalStorageKey, outcomes);
2360
2393
  };
2361
2394
  var loadOutcomes = function () {
2362
- outcomes = getLocalStorageObject('outcomes');
2395
+ outcomes = getLocalStorageObject(OutcomesLocalStorageKey);
2363
2396
  };
2364
2397
  var mergeData = function (data, log) {
2365
2398
  var dataArray = [];
@@ -2403,6 +2436,20 @@ var calcTotalWeight = function (childList) {
2403
2436
  }
2404
2437
  return totalWeight;
2405
2438
  };
2439
+ var saveExperimentDebugRanges = function (name, totalWeight, childList) {
2440
+ var experiments = getLocalStorageObject(ExperimentsLocalStorageKey) || {};
2441
+ experiments[name] = {
2442
+ totalWeight: totalWeight,
2443
+ variants: childList.map(function (child) {
2444
+ var _a;
2445
+ return ({
2446
+ name: (_a = child.key) === null || _a === void 0 ? void 0 : _a.toString(),
2447
+ weight: child.props.weight,
2448
+ });
2449
+ }),
2450
+ };
2451
+ setLocalStorageObject(ExperimentsLocalStorageKey, experiments);
2452
+ };
2406
2453
  var Experiments = function (props) {
2407
2454
  var e_2, _a;
2408
2455
  var _b, _c;
@@ -2413,6 +2460,7 @@ var Experiments = function (props) {
2413
2460
  var localStorageKey = buildLocalStorageKey(localStorageProp);
2414
2461
  var childList = makeChildrenArray(children);
2415
2462
  var totalWeight = calcTotalWeight(childList);
2463
+ saveExperimentDebugRanges(name, totalWeight, childList);
2416
2464
  var firstTime = outcomes[name] === undefined;
2417
2465
  var targetWeight = (_b = outcomes[name]) !== null && _b !== void 0 ? _b : Math.random() * totalWeight;
2418
2466
  outcomes[name] = targetWeight;
@@ -2448,6 +2496,36 @@ var Experiments = function (props) {
2448
2496
  throw new Error('Experiment Choice Failed');
2449
2497
  };
2450
2498
 
2499
+ var ExperimentsDebugger = function (_a) {
2500
+ var props = __rest(_a, []);
2501
+ var _b = __read(useLocalStorage(ExperimentsLocalStorageKey, {}), 1), experiments = _b[0];
2502
+ var _c = __read(useLocalStorage(OutcomesLocalStorageKey, {}), 2), outcomes = _c[0], setOutcomes = _c[1];
2503
+ var sumUpVariants = function (items) { return items.reduce(function (acc, curr) { return acc + curr.weight; }, 0); };
2504
+ var experimentEntries = Object.entries(experiments);
2505
+ if (!experiments || !experimentEntries.length) {
2506
+ return (jsxs(FlexCol, __assign({ alignItems: "stretch" }, props, { children: [jsx(Typography, __assign({ variant: "subtitle1" }, { children: "No Experiments loaded" }), void 0), jsx(Typography, __assign({ variant: "subtitle2" }, { children: "Visit a page with an experiment to load the data" }), void 0)] }), void 0));
2507
+ }
2508
+ return (jsx(FlexCol, __assign({ alignItems: "stretch" }, props, { children: Object.entries(experiments).map(function (data) {
2509
+ var _a = __read(data, 2), name = _a[0], experiment = _a[1];
2510
+ var outcome = (outcomes[name] || 0);
2511
+ var marks = __spreadArray([
2512
+ { label: "".concat(experiment.variants[0].name, " | ").concat(experiment.variants[0].weight), value: 0 }
2513
+ ], __read(experiment.variants.map(function (_a, index) {
2514
+ var weight = _a.weight;
2515
+ return ({
2516
+ label: index === experiment.variants.length - 1 ? 'End' : "".concat(experiment.variants[index + 1].name, " | ").concat(weight),
2517
+ value: index === 0 ? weight : sumUpVariants(experiment.variants.slice(0, index + 1)),
2518
+ });
2519
+ })), false);
2520
+ return (jsxs(FlexCol, __assign({ alignItems: "stretch", paddingX: 4, marginBottom: 4 }, props, { children: [jsxs(FlexRow, { children: [name, ":\u00A0", outcome] }, void 0), jsx(FlexRow, { children: jsx(Slider, { "aria-label": "Experiment ".concat(name), defaultValue: outcome, value: outcome, marks: marks, onChange: function (e, value) {
2521
+ var truncated = Number((Array.isArray(value) ? value[0] : value).toFixed(2));
2522
+ outcomes[name] = truncated;
2523
+ // Spread operator triggers rerender
2524
+ setOutcomes(__assign({}, outcomes));
2525
+ } }, void 0) }, void 0)] }), "experiment-".concat(name)));
2526
+ }) }), void 0));
2527
+ };
2528
+
2451
2529
  var LinkToEx = function (_a) {
2452
2530
  var to = _a.to, props = __rest(_a, ["to"]);
2453
2531
  return jsx(Link, __assign({ component: Link$1, to: to }, props), void 0);
@@ -2549,5 +2627,5 @@ var TokenAmount = function (_a) {
2549
2627
  return (jsx(ButtonEx, __assign({ style: __assign({ backgroundColor: statusColor }, style), variant: "outlined", onClick: onButtonClick }, props, { children: jsxs(FlexRow, __assign({ justifyContent: "space-between", width: "100%", busy: amount === undefined, busySize: 16 }, { children: [jsxs(FlexRow, { children: [logo ? jsx("img", { src: img, height: 24 }, void 0) : null, label ? (jsx(Typography, __assign({ marginRight: 1, marginLeft: logo ? 1 : 0, noWrap: true, fontFamily: textFontFamily, variant: "caption" }, { children: label }), void 0)) : null] }, void 0), jsx(Typography, __assign({ color: textColor, noWrap: true, fontFamily: textFontFamily, variant: "body1", style: { textTransform: 'none' } }, { children: amountString }), void 0)] }), void 0) }), void 0));
2550
2628
  };
2551
2629
 
2552
- export { ActionStatusType, AppBarEx, Background, BasePage, BreadcrumbsEx, BusyBox, ButtonEx, ContactPointOption, CookieConsent, CookieConsentBody, CookieConsentContext, CookieConsentLoader, CoverProgress, DripCustomEvent, DripStandardEvents, ErrorDialog, EthAccount, EthersContext, EthersLoader, Experiment, Experiments, FacebookCustomEvent, FacebookStandardEvents, Fbq, FlexCol, FlexGrowCol, FlexGrowRow, FlexRow, GoogleBaseEvent, GoogleCustomEvent, GoogleStandardEvents, GoogleUserEventHandler, Gtag, Gtm, HoverScale, Identicon, InvertableThemeProvider, ItemAvailability, LinkToEx, MapCategoryType, MessageDialog, NetworkSettingsContext, NetworkSettingsLoader, NumberStatus, QuickTipButton, Rdt, RedditCustomEvent, RedditStandardEvents, RedirectWithQuery, Referrer, RichResult, ScrollToTop, ScrollToTopButton, SnapTr, SnapchatStandardEvents, TiktokCustomEvent, TiktokStandardEvents, TokenAmount, Ttq, UserEventsContext, XyBaseEvent, XyCustomEvent, XyUserEventHandler, XyoUserEventHandler, enableProfileLogging, getApiStage, getLocalStorageObject, getSessionStorageObject, isLocalhost, profileBlock, profileResults, setLocalStorageObject, setSessionStorageObject, useAsyncEffect, useBreakpoint, useCookieConsent, useMounted, useNavigateToEthAddress, useSpacing, useWebP, useWindowSize };
2630
+ export { ActionStatusType, AppBarEx, Background, BasePage, BreadcrumbsEx, BusyBox, ButtonEx, ContactPointOption, CookieConsent, CookieConsentBody, CookieConsentContext, CookieConsentLoader, CoverProgress, DripCustomEvent, DripStandardEvents, ErrorDialog, EthAccount, EthersContext, EthersLoader, Experiment, Experiments, ExperimentsDebugger, FacebookCustomEvent, FacebookStandardEvents, Fbq, FlexCol, FlexGrowCol, FlexGrowRow, FlexRow, GoogleBaseEvent, GoogleCustomEvent, GoogleStandardEvents, GoogleUserEventHandler, Gtag, Gtm, HoverScale, Identicon, InvertableThemeProvider, ItemAvailability, LinkToEx, MapCategoryType, MessageDialog, NetworkSettingsContext, NetworkSettingsLoader, NumberStatus, QuickTipButton, Rdt, RedditCustomEvent, RedditStandardEvents, RedirectWithQuery, Referrer, RichResult, ScrollToTop, ScrollToTopButton, SnapTr, SnapchatStandardEvents, TiktokCustomEvent, TiktokStandardEvents, TokenAmount, Ttq, UserEventsContext, XyBaseEvent, XyCustomEvent, XyUserEventHandler, XyoUserEventHandler, enableProfileLogging, getApiStage, getLocalStorageObject, getSessionStorageObject, isLocalhost, profileBlock, profileResults, setLocalStorageObject, setSessionStorageObject, useAsyncEffect, useBreakpoint, useCookieConsent, useLocalStorage, useMounted, useNavigateToEthAddress, useSpacing, useWebP, useWindowSize };
2553
2631
  //# sourceMappingURL=index.js.map