@magmamath/students-features 1.4.2 → 1.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commonjs/features/fluency/components/Fluency.js +12 -6
- package/dist/commonjs/features/fluency/components/Fluency.js.map +1 -1
- package/dist/commonjs/features/fluency/components/FluencyStatusOverlay.js +101 -0
- package/dist/commonjs/features/fluency/components/FluencyStatusOverlay.js.map +1 -0
- package/dist/commonjs/features/fluency/components/select-math-operator/SelectMathOperator.js +13 -5
- package/dist/commonjs/features/fluency/components/select-math-operator/SelectMathOperator.js.map +1 -1
- package/dist/commonjs/features/fluency/model/FluencyModel.js +21 -0
- package/dist/commonjs/features/fluency/model/FluencyModel.js.map +1 -1
- package/dist/commonjs/features/fluency/shared/fluency.constants.js +6 -1
- package/dist/commonjs/features/fluency/shared/fluency.constants.js.map +1 -1
- package/dist/commonjs/features/fluency/shared/fluency.helpers.js +3 -1
- package/dist/commonjs/features/fluency/shared/fluency.helpers.js.map +1 -1
- package/dist/module/features/fluency/components/Fluency.js +14 -8
- package/dist/module/features/fluency/components/Fluency.js.map +1 -1
- package/dist/module/features/fluency/components/FluencyStatusOverlay.js +95 -0
- package/dist/module/features/fluency/components/FluencyStatusOverlay.js.map +1 -0
- package/dist/module/features/fluency/components/select-math-operator/SelectMathOperator.js +13 -5
- package/dist/module/features/fluency/components/select-math-operator/SelectMathOperator.js.map +1 -1
- package/dist/module/features/fluency/model/FluencyModel.js +22 -1
- package/dist/module/features/fluency/model/FluencyModel.js.map +1 -1
- package/dist/module/features/fluency/shared/fluency.constants.js +5 -0
- package/dist/module/features/fluency/shared/fluency.constants.js.map +1 -1
- package/dist/module/features/fluency/shared/fluency.helpers.js +1 -0
- package/dist/module/features/fluency/shared/fluency.helpers.js.map +1 -1
- package/dist/typescript/commonjs/features/fluency/components/Fluency.d.ts.map +1 -1
- package/dist/typescript/commonjs/features/fluency/components/FluencyStatusOverlay.d.ts +8 -0
- package/dist/typescript/commonjs/features/fluency/components/FluencyStatusOverlay.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/fluency/components/select-math-operator/SelectMathOperator.d.ts.map +1 -1
- package/dist/typescript/commonjs/features/fluency/model/FluencyModel.d.ts +3 -0
- package/dist/typescript/commonjs/features/fluency/model/FluencyModel.d.ts.map +1 -1
- package/dist/typescript/commonjs/features/fluency/shared/fluency.constants.d.ts +4 -0
- package/dist/typescript/commonjs/features/fluency/shared/fluency.constants.d.ts.map +1 -1
- package/dist/typescript/commonjs/features/fluency/shared/fluency.helpers.d.ts +1 -0
- package/dist/typescript/commonjs/features/fluency/shared/fluency.helpers.d.ts.map +1 -1
- package/dist/typescript/module/features/fluency/components/Fluency.d.ts.map +1 -1
- package/dist/typescript/module/features/fluency/components/FluencyStatusOverlay.d.ts +8 -0
- package/dist/typescript/module/features/fluency/components/FluencyStatusOverlay.d.ts.map +1 -0
- package/dist/typescript/module/features/fluency/components/select-math-operator/SelectMathOperator.d.ts.map +1 -1
- package/dist/typescript/module/features/fluency/model/FluencyModel.d.ts +3 -0
- package/dist/typescript/module/features/fluency/model/FluencyModel.d.ts.map +1 -1
- package/dist/typescript/module/features/fluency/shared/fluency.constants.d.ts +4 -0
- package/dist/typescript/module/features/fluency/shared/fluency.constants.d.ts.map +1 -1
- package/dist/typescript/module/features/fluency/shared/fluency.helpers.d.ts +1 -0
- package/dist/typescript/module/features/fluency/shared/fluency.helpers.d.ts.map +1 -1
- package/package.json +8 -3
- package/src/features/fluency/components/Fluency.tsx +17 -9
- package/src/features/fluency/components/FluencyStatusOverlay.tsx +101 -0
- package/src/features/fluency/components/select-math-operator/SelectMathOperator.tsx +11 -5
- package/src/features/fluency/model/FluencyModel.ts +25 -1
- package/src/features/fluency/shared/fluency.constants.ts +5 -0
- package/src/features/fluency/shared/fluency.helpers.ts +3 -0
- package/src/i18n/.generated/schema.json +4 -0
package/dist/module/features/fluency/components/select-math-operator/SelectMathOperator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","StyleSheet","View","BORDER_RADIUS","COLORS","HeadingVariants","SHADOWS","SPACING","Typography","useUnit","FLUENCY_MODES","MathOperatorRow","useFluency","useText","jsx","_jsx","SelectMathOperator","t","model","onModeSelectPress","fluencyMode","matrix","$mode","$data","style","styles","container","children","map","
|
|
1
|
+
{"version":3,"names":["React","StyleSheet","View","BORDER_RADIUS","COLORS","HeadingVariants","SHADOWS","SPACING","Typography","useUnit","FLUENCY_MODES","MathOperatorRow","useFluency","useText","jsx","_jsx","SelectMathOperator","t","model","onModeSelectPress","fluencyMode","matrix","$mode","$data","visibleModes","filter","mode","Object","keys","operations","facts","length","style","styles","container","children","map","label","symbol","select","index","isSelectedMode","progress","completionRate","title","icon","variant","H6","symbolSelected","color","selected","onSelect","setMode","showDivider","create","alignSelf","width","padding","borderRadius","backgroundColor","NEUTRAL_1","fontSize","fontWeight","NEUTRAL_9"],"sourceRoot":"../../../../../../src","sources":["features/fluency/components/select-math-operator/SelectMathOperator.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -7,10 +7,12 @@ import { FluencyDaysStreakModel } from "./FluencyDaysStreakModel.js";
|
|
|
7
7
|
import { FluencyMatrixModel } from "./FluencyMatrixModel.js";
|
|
8
8
|
import { FluencyApiModel } from "./FluencyApiModel.js";
|
|
9
9
|
import { FluencySolvingModel } from "./FluencySolvingModel.js";
|
|
10
|
-
import { MatrixConfig } from "../shared/fluency.constants.js";
|
|
10
|
+
import { FluencyStatus, MatrixConfig } from "../shared/fluency.constants.js";
|
|
11
|
+
import { allFactsEmpty } from "../shared/fluency.helpers.js";
|
|
11
12
|
export class FluencyModel {
|
|
12
13
|
gate = createGate();
|
|
13
14
|
$config = createStore(null);
|
|
15
|
+
$status = createStore(null);
|
|
14
16
|
constructor({
|
|
15
17
|
api
|
|
16
18
|
}) {
|
|
@@ -19,6 +21,7 @@ export class FluencyModel {
|
|
|
19
21
|
this.matrix = new FluencyMatrixModel(this.api);
|
|
20
22
|
this.solving = new FluencySolvingModel(this.matrix, this.$config);
|
|
21
23
|
this.init();
|
|
24
|
+
this.setupStatusTracking();
|
|
22
25
|
}
|
|
23
26
|
init() {
|
|
24
27
|
sample({
|
|
@@ -55,5 +58,23 @@ export class FluencyModel {
|
|
|
55
58
|
target: this.api.postAttemptFx
|
|
56
59
|
});
|
|
57
60
|
}
|
|
61
|
+
setupStatusTracking() {
|
|
62
|
+
sample({
|
|
63
|
+
clock: this.gate.open,
|
|
64
|
+
fn: () => null,
|
|
65
|
+
target: this.$status
|
|
66
|
+
});
|
|
67
|
+
sample({
|
|
68
|
+
clock: [this.api.getMatrixFx.fail, this.api.getWeeklyStatsFx.fail],
|
|
69
|
+
fn: () => FluencyStatus.ERROR,
|
|
70
|
+
target: this.$status
|
|
71
|
+
});
|
|
72
|
+
sample({
|
|
73
|
+
clock: this.api.getMatrixFx.doneData,
|
|
74
|
+
filter: allFactsEmpty,
|
|
75
|
+
fn: () => FluencyStatus.EMPTY,
|
|
76
|
+
target: this.$status
|
|
77
|
+
});
|
|
78
|
+
}
|
|
58
79
|
}
|
|
59
80
|
//# sourceMappingURL=FluencyModel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createStore","sample","createGate","not","FluencyDaysStreakModel","FluencyMatrixModel","FluencyApiModel","FluencySolvingModel","MatrixConfig","FluencyModel","gate","$config","constructor","api","streak","matrix","solving","init","clock","open","fn","config","target","filter","getMatrixFx","pending","grade","getWeeklyStatsFx","flushAttempts","source","Boolean","attempts","matrixConfig","STANDARD","postAttemptFx"],"sourceRoot":"../../../../../src","sources":["features/fluency/model/FluencyModel.ts"],"mappings":";;AAAA,SAASA,WAAW,EAAEC,MAAM,QAAQ,UAAU;AAC9C,SAASC,UAAU,QAAQ,gBAAgB;AAC3C,SAASC,GAAG,QAAQ,cAAc;AAClC,SAASC,sBAAsB,QAAQ,6BAA0B;AACjE,SAASC,kBAAkB,QAAQ,yBAAsB;AACzD,SAASC,eAAe,QAAQ,sBAAmB;AACnD,SAASC,mBAAmB,QAAQ,0BAAuB;AAC3D,SAASC,YAAY,QAAQ,gCAA6B;
|
|
1
|
+
{"version":3,"names":["createStore","sample","createGate","not","FluencyDaysStreakModel","FluencyMatrixModel","FluencyApiModel","FluencySolvingModel","FluencyStatus","MatrixConfig","allFactsEmpty","FluencyModel","gate","$config","$status","constructor","api","streak","matrix","solving","init","setupStatusTracking","clock","open","fn","config","target","filter","getMatrixFx","pending","grade","getWeeklyStatsFx","flushAttempts","source","Boolean","attempts","matrixConfig","STANDARD","postAttemptFx","fail","ERROR","doneData","EMPTY"],"sourceRoot":"../../../../../src","sources":["features/fluency/model/FluencyModel.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -97,4 +97,9 @@ export const FLUENCY_MODE_PRESETS = Object.fromEntries(FLUENCY_MODES.map(({
|
|
|
97
97
|
preset
|
|
98
98
|
}) => [mode, preset]));
|
|
99
99
|
export const ONE_DAY_MS = 86_400_000;
|
|
100
|
+
export let FluencyStatus = /*#__PURE__*/function (FluencyStatus) {
|
|
101
|
+
FluencyStatus["ERROR"] = "ERROR";
|
|
102
|
+
FluencyStatus["EMPTY"] = "EMPTY";
|
|
103
|
+
return FluencyStatus;
|
|
104
|
+
}({});
|
|
100
105
|
//# sourceMappingURL=fluency.constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ButtonColor","COLORS","SelectOptionColor","createFluencyMode","MAX_INPUT_LENGTH","SESSION_LENGTH","FLUSH_ATTEMPTS_COUNT","getTimeThresholdByGrade","grade","FluencyMode","FluencyMasteryLevel","FluencyColorFamily","StreakStatus","AttemptStatus","MatrixConfig","COLOR_FAMILY_PALETTES","GREEN","shades","GREEN_2","GREEN_3","PRIMARY_GREEN","GREEN_6","button","select","ORANGE","ORANGE_2","ORANGE_3","PRIMARY_ORANGE","ORANGE_6","BLUE","BLUE_2","BLUE_3","PRIMARY_BLUE","BLUE_6","PURPLE","PURPLE_2","PURPLE_3","PRIMARY_PURPLE","PURPLE_6","FLUENCY_MODES","mode","ADDITION","label","symbol","colorFamily","SUBTRACTION","MULTIPLICATION","DIVISION","FLUENCY_MODE_PRESETS","Object","fromEntries","map","preset","ONE_DAY_MS"],"sourceRoot":"../../../../../src","sources":["features/fluency/shared/fluency.constants.ts"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["ButtonColor","COLORS","SelectOptionColor","createFluencyMode","MAX_INPUT_LENGTH","SESSION_LENGTH","FLUSH_ATTEMPTS_COUNT","getTimeThresholdByGrade","grade","FluencyMode","FluencyMasteryLevel","FluencyColorFamily","StreakStatus","AttemptStatus","MatrixConfig","COLOR_FAMILY_PALETTES","GREEN","shades","GREEN_2","GREEN_3","PRIMARY_GREEN","GREEN_6","button","select","ORANGE","ORANGE_2","ORANGE_3","PRIMARY_ORANGE","ORANGE_6","BLUE","BLUE_2","BLUE_3","PRIMARY_BLUE","BLUE_6","PURPLE","PURPLE_2","PURPLE_3","PRIMARY_PURPLE","PURPLE_6","FLUENCY_MODES","mode","ADDITION","label","symbol","colorFamily","SUBTRACTION","MULTIPLICATION","DIVISION","FLUENCY_MODE_PRESETS","Object","fromEntries","map","preset","ONE_DAY_MS","FluencyStatus"],"sourceRoot":"../../../../../src","sources":["features/fluency/shared/fluency.constants.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -107,6 +107,7 @@ export const buildMatrixGrid = (data, mode) => {
|
|
|
107
107
|
})]);
|
|
108
108
|
return [headerRow, ...dataRows];
|
|
109
109
|
};
|
|
110
|
+
export const allFactsEmpty = response => Object.values(response.operations).every(op => Object.keys(op.facts).length === 0);
|
|
110
111
|
export const generateStreakDates = stats => {
|
|
111
112
|
const todayMs = new Date().setHours(0, 0, 0, 0);
|
|
112
113
|
const startMs = new Date(stats.weekStart).setHours(0, 0, 0, 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["COLORS","FluencyMasteryLevel","FluencyMode","COLOR_FAMILY_PALETTES","StreakStatus","ONE_DAY_MS","createFluencyMode","mode","label","symbol","colorFamily","palette","learning","growing","strong","mastered","shades","select","preset","buttonColor","button","accentColor","header","streakColor","gained","todayBorder","matrix","operatorLabel","levelColors","NOT_STARTED","NEUTRAL_2","LEARNING","GROWING","STRONG","MASTERED","buildMatrixGrid","data","facts","Object","values","operations","maxRow","Math","max","map","f","position","row","maxColumn","column","isDivision","DIVISION","isSubtraction","SUBTRACTION","isCommutative","ADDITION","MULTIPLICATION","factAt","col","find","maxMinuend","numbers","rowNumbers","Array","from","length","_","i","columnNumbers","headerRow","isHeader","isEmpty","box","dataRows","fact","mirrorFact","primaryBox","mirrorBox","effectiveBox","generateStreakDates","stats","todayMs","Date","setHours","startMs","weekStart","practiced","Set","practicedDates","d","dayMs","isPracticed","has","isToday","TODAY_GAINED","GAINED","TODAY","MISSED"],"sourceRoot":"../../../../../src","sources":["features/fluency/shared/fluency.helpers.ts"],"mappings":"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
|
|
1
|
+
{"version":3,"names":["COLORS","FluencyMasteryLevel","FluencyMode","COLOR_FAMILY_PALETTES","StreakStatus","ONE_DAY_MS","createFluencyMode","mode","label","symbol","colorFamily","palette","learning","growing","strong","mastered","shades","select","preset","buttonColor","button","accentColor","header","streakColor","gained","todayBorder","matrix","operatorLabel","levelColors","NOT_STARTED","NEUTRAL_2","LEARNING","GROWING","STRONG","MASTERED","buildMatrixGrid","data","facts","Object","values","operations","maxRow","Math","max","map","f","position","row","maxColumn","column","isDivision","DIVISION","isSubtraction","SUBTRACTION","isCommutative","ADDITION","MULTIPLICATION","factAt","col","find","maxMinuend","numbers","rowNumbers","Array","from","length","_","i","columnNumbers","headerRow","isHeader","isEmpty","box","dataRows","fact","mirrorFact","primaryBox","mirrorBox","effectiveBox","allFactsEmpty","response","every","op","keys","generateStreakDates","stats","todayMs","Date","setHours","startMs","weekStart","practiced","Set","practicedDates","d","dayMs","isPracticed","has","isToday","TODAY_GAINED","GAINED","TODAY","MISSED"],"sourceRoot":"../../../../../src","sources":["features/fluency/shared/fluency.helpers.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Fluency.d.ts","sourceRoot":"","sources":["../../../../../../src/features/fluency/components/Fluency.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"Fluency.d.ts","sourceRoot":"","sources":["../../../../../../src/features/fluency/components/Fluency.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAYzB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAE5D,KAAK,YAAY,GAAG;IAClB,KAAK,EAAE,YAAY,CAAA;IACnB,MAAM,EAAE,aAAa,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAA;IACxB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAA;IACzB,eAAe,CAAC,EAAE,MAAM,IAAI,CAAA;IAC5B,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAA;CAChD,CAAA;AAED,eAAO,MAAM,OAAO,sFAOjB,YAAY,sBAiCd,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { FluencyStatus } from '../shared/fluency.constants';
|
|
3
|
+
type FluencyStatusOverlayProps = {
|
|
4
|
+
status: FluencyStatus;
|
|
5
|
+
};
|
|
6
|
+
export declare const FluencyStatusOverlay: ({ status }: FluencyStatusOverlayProps) => React.JSX.Element | null;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=FluencyStatusOverlay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FluencyStatusOverlay.d.ts","sourceRoot":"","sources":["../../../../../../src/features/fluency/components/FluencyStatusOverlay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAA;AAUxC,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AA0B3D,KAAK,yBAAyB,GAAG;IAC/B,MAAM,EAAE,aAAa,CAAA;CACtB,CAAA;AAED,eAAO,MAAM,oBAAoB,eAAgB,yBAAyB,6BAuBzE,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectMathOperator.d.ts","sourceRoot":"","sources":["../../../../../../../src/features/fluency/components/select-math-operator/SelectMathOperator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAgBzB,eAAO,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"SelectMathOperator.d.ts","sourceRoot":"","sources":["../../../../../../../src/features/fluency/components/select-math-operator/SelectMathOperator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAgBzB,eAAO,MAAM,kBAAkB,yBA2C9B,CAAA"}
|
|
@@ -2,15 +2,18 @@ import { FluencyDaysStreakModel } from './FluencyDaysStreakModel';
|
|
|
2
2
|
import { FluencyMatrixModel } from './FluencyMatrixModel';
|
|
3
3
|
import { FluencyApiModel } from './FluencyApiModel';
|
|
4
4
|
import { FluencySolvingModel } from './FluencySolvingModel';
|
|
5
|
+
import { FluencyStatus } from '../shared/fluency.constants';
|
|
5
6
|
import type { FluencyConfig, FluencyModelGateProps, FluencyModelProps } from '../shared/fluency.types';
|
|
6
7
|
export declare class FluencyModel {
|
|
7
8
|
readonly gate: import("effector-react").Gate<FluencyModelGateProps>;
|
|
8
9
|
readonly $config: import("effector").StoreWritable<FluencyConfig | null>;
|
|
10
|
+
readonly $status: import("effector").StoreWritable<FluencyStatus | null>;
|
|
9
11
|
readonly api: FluencyApiModel;
|
|
10
12
|
readonly streak: FluencyDaysStreakModel;
|
|
11
13
|
readonly matrix: FluencyMatrixModel;
|
|
12
14
|
readonly solving: FluencySolvingModel;
|
|
13
15
|
constructor({ api }: FluencyModelProps);
|
|
14
16
|
private init;
|
|
17
|
+
private setupStatusTracking;
|
|
15
18
|
}
|
|
16
19
|
//# sourceMappingURL=FluencyModel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FluencyModel.d.ts","sourceRoot":"","sources":["../../../../../../src/features/fluency/model/FluencyModel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"FluencyModel.d.ts","sourceRoot":"","sources":["../../../../../../src/features/fluency/model/FluencyModel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAgB,MAAM,6BAA6B,CAAA;AAEzE,OAAO,KAAK,EAEV,aAAa,EACb,qBAAqB,EACrB,iBAAiB,EAClB,MAAM,yBAAyB,CAAA;AAEhC,qBAAa,YAAY;IACvB,SAAgB,IAAI,uDAAsC;IAC1D,SAAgB,OAAO,yDAA0C;IACjE,SAAgB,OAAO,yDAA0C;IAEjE,SAAgB,GAAG,EAAE,eAAe,CAAA;IACpC,SAAgB,MAAM,EAAE,sBAAsB,CAAA;IAC9C,SAAgB,MAAM,EAAE,kBAAkB,CAAA;IAC1C,SAAgB,OAAO,EAAE,mBAAmB,CAAA;gBAEhC,EAAE,GAAG,EAAE,EAAE,iBAAiB;IAUtC,OAAO,CAAC,IAAI;IAiCZ,OAAO,CAAC,mBAAmB;CAoB5B"}
|
|
@@ -40,4 +40,8 @@ export declare const COLOR_FAMILY_PALETTES: Record<FluencyColorFamily, FluencyCo
|
|
|
40
40
|
export declare const FLUENCY_MODES: readonly FluencyModeConfig[];
|
|
41
41
|
export declare const FLUENCY_MODE_PRESETS: Record<FluencyMode, FluencyModePreset>;
|
|
42
42
|
export declare const ONE_DAY_MS = 86400000;
|
|
43
|
+
export declare enum FluencyStatus {
|
|
44
|
+
ERROR = "ERROR",
|
|
45
|
+
EMPTY = "EMPTY"
|
|
46
|
+
}
|
|
43
47
|
//# sourceMappingURL=fluency.constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fluency.constants.d.ts","sourceRoot":"","sources":["../../../../../../src/features/fluency/shared/fluency.constants.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAEhG,eAAO,MAAM,gBAAgB,IAAI,CAAA;AACjC,eAAO,MAAM,cAAc,KAAK,CAAA;AAChC,eAAO,MAAM,oBAAoB,IAAI,CAAA;AAErC,eAAO,MAAM,uBAAuB,WAAY,MAAM,KAAG,MAIxD,CAAA;AAED,oBAAY,WAAW;IACrB,QAAQ,aAAa;IACrB,WAAW,gBAAgB;IAC3B,cAAc,mBAAmB;IACjC,QAAQ,aAAa;CACtB;AAED,oBAAY,mBAAmB;IAC7B,WAAW,IAAI;IACf,QAAQ,IAAI;IACZ,OAAO,IAAI;IACX,MAAM,IAAI;IACV,QAAQ,IAAI;CACb;AAED,oBAAY,kBAAkB;IAC5B,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,MAAM,WAAW;CAClB;AAED,oBAAY,YAAY;IACtB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,YAAY,iBAAiB;CAC9B;AAED,oBAAY,aAAa;IACvB,OAAO,YAAY;IACnB,SAAS,cAAc;IACvB,OAAO,YAAY;CACpB;AAED,oBAAY,YAAY;IACtB,QAAQ,aAAa;CACtB;AAED,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,kBAAkB,EAAE,mBAAmB,CAqBjF,CAAA;AAED,eAAO,MAAM,aAAa,EAAE,SAAS,iBAAiB,EAyBrD,CAAA;AAED,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,WAAW,EAAE,iBAAiB,CAE7B,CAAA;AAE3C,eAAO,MAAM,UAAU,WAAa,CAAA"}
|
|
1
|
+
{"version":3,"file":"fluency.constants.d.ts","sourceRoot":"","sources":["../../../../../../src/features/fluency/shared/fluency.constants.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAEhG,eAAO,MAAM,gBAAgB,IAAI,CAAA;AACjC,eAAO,MAAM,cAAc,KAAK,CAAA;AAChC,eAAO,MAAM,oBAAoB,IAAI,CAAA;AAErC,eAAO,MAAM,uBAAuB,WAAY,MAAM,KAAG,MAIxD,CAAA;AAED,oBAAY,WAAW;IACrB,QAAQ,aAAa;IACrB,WAAW,gBAAgB;IAC3B,cAAc,mBAAmB;IACjC,QAAQ,aAAa;CACtB;AAED,oBAAY,mBAAmB;IAC7B,WAAW,IAAI;IACf,QAAQ,IAAI;IACZ,OAAO,IAAI;IACX,MAAM,IAAI;IACV,QAAQ,IAAI;CACb;AAED,oBAAY,kBAAkB;IAC5B,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,MAAM,WAAW;CAClB;AAED,oBAAY,YAAY;IACtB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,YAAY,iBAAiB;CAC9B;AAED,oBAAY,aAAa;IACvB,OAAO,YAAY;IACnB,SAAS,cAAc;IACvB,OAAO,YAAY;CACpB;AAED,oBAAY,YAAY;IACtB,QAAQ,aAAa;CACtB;AAED,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,kBAAkB,EAAE,mBAAmB,CAqBjF,CAAA;AAED,eAAO,MAAM,aAAa,EAAE,SAAS,iBAAiB,EAyBrD,CAAA;AAED,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,WAAW,EAAE,iBAAiB,CAE7B,CAAA;AAE3C,eAAO,MAAM,UAAU,WAAa,CAAA;AAEpC,oBAAY,aAAa;IACvB,KAAK,UAAU;IACf,KAAK,UAAU;CAChB"}
|
|
@@ -9,6 +9,7 @@ type CreateFluencyModeParams = {
|
|
|
9
9
|
};
|
|
10
10
|
export declare const createFluencyMode: ({ mode, label, symbol, colorFamily, }: CreateFluencyModeParams) => FluencyModeConfig;
|
|
11
11
|
export declare const buildMatrixGrid: (data: GetMatrixResponse, mode: FluencyMode) => MatrixGrid;
|
|
12
|
+
export declare const allFactsEmpty: (response: GetMatrixResponse) => boolean;
|
|
12
13
|
export declare const generateStreakDates: (stats: GetWeeklyStatsResponse) => StreakStatus[];
|
|
13
14
|
export {};
|
|
14
15
|
//# sourceMappingURL=fluency.helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fluency.helpers.d.ts","sourceRoot":"","sources":["../../../../../../src/features/fluency/shared/fluency.helpers.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAElB,WAAW,EAEX,YAAY,EAEb,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EAEtB,UAAU,EACX,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAExD,KAAK,uBAAuB,GAAG;IAC7B,IAAI,EAAE,WAAW,CAAA;IACjB,KAAK,EAAE,cAAc,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,kBAAkB,CAAA;CAChC,CAAA;AAED,eAAO,MAAM,iBAAiB,0CAK3B,uBAAuB,KAAG,iBA4B5B,CAAA;AAED,eAAO,MAAM,eAAe,SAAU,iBAAiB,QAAQ,WAAW,KAAG,UAyD5E,CAAA;AAED,eAAO,MAAM,mBAAmB,UAAW,sBAAsB,mBAchE,CAAA"}
|
|
1
|
+
{"version":3,"file":"fluency.helpers.d.ts","sourceRoot":"","sources":["../../../../../../src/features/fluency/shared/fluency.helpers.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAElB,WAAW,EAEX,YAAY,EAEb,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EAEtB,UAAU,EACX,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAExD,KAAK,uBAAuB,GAAG;IAC7B,IAAI,EAAE,WAAW,CAAA;IACjB,KAAK,EAAE,cAAc,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,kBAAkB,CAAA;CAChC,CAAA;AAED,eAAO,MAAM,iBAAiB,0CAK3B,uBAAuB,KAAG,iBA4B5B,CAAA;AAED,eAAO,MAAM,eAAe,SAAU,iBAAiB,QAAQ,WAAW,KAAG,UAyD5E,CAAA;AAED,eAAO,MAAM,aAAa,aAAc,iBAAiB,KAAG,OAC0B,CAAA;AAEtF,eAAO,MAAM,mBAAmB,UAAW,sBAAsB,mBAchE,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Fluency.d.ts","sourceRoot":"","sources":["../../../../../../src/features/fluency/components/Fluency.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"Fluency.d.ts","sourceRoot":"","sources":["../../../../../../src/features/fluency/components/Fluency.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAYzB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAE5D,KAAK,YAAY,GAAG;IAClB,KAAK,EAAE,YAAY,CAAA;IACnB,MAAM,EAAE,aAAa,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAA;IACxB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAA;IACzB,eAAe,CAAC,EAAE,MAAM,IAAI,CAAA;IAC5B,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAA;CAChD,CAAA;AAED,eAAO,MAAM,OAAO,sFAOjB,YAAY,sBAiCd,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { FluencyStatus } from '../shared/fluency.constants';
|
|
3
|
+
type FluencyStatusOverlayProps = {
|
|
4
|
+
status: FluencyStatus;
|
|
5
|
+
};
|
|
6
|
+
export declare const FluencyStatusOverlay: ({ status }: FluencyStatusOverlayProps) => React.JSX.Element | null;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=FluencyStatusOverlay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FluencyStatusOverlay.d.ts","sourceRoot":"","sources":["../../../../../../src/features/fluency/components/FluencyStatusOverlay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAA;AAUxC,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AA0B3D,KAAK,yBAAyB,GAAG;IAC/B,MAAM,EAAE,aAAa,CAAA;CACtB,CAAA;AAED,eAAO,MAAM,oBAAoB,eAAgB,yBAAyB,6BAuBzE,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectMathOperator.d.ts","sourceRoot":"","sources":["../../../../../../../src/features/fluency/components/select-math-operator/SelectMathOperator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAgBzB,eAAO,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"SelectMathOperator.d.ts","sourceRoot":"","sources":["../../../../../../../src/features/fluency/components/select-math-operator/SelectMathOperator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAgBzB,eAAO,MAAM,kBAAkB,yBA2C9B,CAAA"}
|
|
@@ -2,15 +2,18 @@ import { FluencyDaysStreakModel } from './FluencyDaysStreakModel';
|
|
|
2
2
|
import { FluencyMatrixModel } from './FluencyMatrixModel';
|
|
3
3
|
import { FluencyApiModel } from './FluencyApiModel';
|
|
4
4
|
import { FluencySolvingModel } from './FluencySolvingModel';
|
|
5
|
+
import { FluencyStatus } from '../shared/fluency.constants';
|
|
5
6
|
import type { FluencyConfig, FluencyModelGateProps, FluencyModelProps } from '../shared/fluency.types';
|
|
6
7
|
export declare class FluencyModel {
|
|
7
8
|
readonly gate: import("effector-react").Gate<FluencyModelGateProps>;
|
|
8
9
|
readonly $config: import("effector").StoreWritable<FluencyConfig | null>;
|
|
10
|
+
readonly $status: import("effector").StoreWritable<FluencyStatus | null>;
|
|
9
11
|
readonly api: FluencyApiModel;
|
|
10
12
|
readonly streak: FluencyDaysStreakModel;
|
|
11
13
|
readonly matrix: FluencyMatrixModel;
|
|
12
14
|
readonly solving: FluencySolvingModel;
|
|
13
15
|
constructor({ api }: FluencyModelProps);
|
|
14
16
|
private init;
|
|
17
|
+
private setupStatusTracking;
|
|
15
18
|
}
|
|
16
19
|
//# sourceMappingURL=FluencyModel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FluencyModel.d.ts","sourceRoot":"","sources":["../../../../../../src/features/fluency/model/FluencyModel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"FluencyModel.d.ts","sourceRoot":"","sources":["../../../../../../src/features/fluency/model/FluencyModel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAgB,MAAM,6BAA6B,CAAA;AAEzE,OAAO,KAAK,EAEV,aAAa,EACb,qBAAqB,EACrB,iBAAiB,EAClB,MAAM,yBAAyB,CAAA;AAEhC,qBAAa,YAAY;IACvB,SAAgB,IAAI,uDAAsC;IAC1D,SAAgB,OAAO,yDAA0C;IACjE,SAAgB,OAAO,yDAA0C;IAEjE,SAAgB,GAAG,EAAE,eAAe,CAAA;IACpC,SAAgB,MAAM,EAAE,sBAAsB,CAAA;IAC9C,SAAgB,MAAM,EAAE,kBAAkB,CAAA;IAC1C,SAAgB,OAAO,EAAE,mBAAmB,CAAA;gBAEhC,EAAE,GAAG,EAAE,EAAE,iBAAiB;IAUtC,OAAO,CAAC,IAAI;IAiCZ,OAAO,CAAC,mBAAmB;CAoB5B"}
|
|
@@ -40,4 +40,8 @@ export declare const COLOR_FAMILY_PALETTES: Record<FluencyColorFamily, FluencyCo
|
|
|
40
40
|
export declare const FLUENCY_MODES: readonly FluencyModeConfig[];
|
|
41
41
|
export declare const FLUENCY_MODE_PRESETS: Record<FluencyMode, FluencyModePreset>;
|
|
42
42
|
export declare const ONE_DAY_MS = 86400000;
|
|
43
|
+
export declare enum FluencyStatus {
|
|
44
|
+
ERROR = "ERROR",
|
|
45
|
+
EMPTY = "EMPTY"
|
|
46
|
+
}
|
|
43
47
|
//# sourceMappingURL=fluency.constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fluency.constants.d.ts","sourceRoot":"","sources":["../../../../../../src/features/fluency/shared/fluency.constants.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAEhG,eAAO,MAAM,gBAAgB,IAAI,CAAA;AACjC,eAAO,MAAM,cAAc,KAAK,CAAA;AAChC,eAAO,MAAM,oBAAoB,IAAI,CAAA;AAErC,eAAO,MAAM,uBAAuB,WAAY,MAAM,KAAG,MAIxD,CAAA;AAED,oBAAY,WAAW;IACrB,QAAQ,aAAa;IACrB,WAAW,gBAAgB;IAC3B,cAAc,mBAAmB;IACjC,QAAQ,aAAa;CACtB;AAED,oBAAY,mBAAmB;IAC7B,WAAW,IAAI;IACf,QAAQ,IAAI;IACZ,OAAO,IAAI;IACX,MAAM,IAAI;IACV,QAAQ,IAAI;CACb;AAED,oBAAY,kBAAkB;IAC5B,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,MAAM,WAAW;CAClB;AAED,oBAAY,YAAY;IACtB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,YAAY,iBAAiB;CAC9B;AAED,oBAAY,aAAa;IACvB,OAAO,YAAY;IACnB,SAAS,cAAc;IACvB,OAAO,YAAY;CACpB;AAED,oBAAY,YAAY;IACtB,QAAQ,aAAa;CACtB;AAED,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,kBAAkB,EAAE,mBAAmB,CAqBjF,CAAA;AAED,eAAO,MAAM,aAAa,EAAE,SAAS,iBAAiB,EAyBrD,CAAA;AAED,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,WAAW,EAAE,iBAAiB,CAE7B,CAAA;AAE3C,eAAO,MAAM,UAAU,WAAa,CAAA"}
|
|
1
|
+
{"version":3,"file":"fluency.constants.d.ts","sourceRoot":"","sources":["../../../../../../src/features/fluency/shared/fluency.constants.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAEhG,eAAO,MAAM,gBAAgB,IAAI,CAAA;AACjC,eAAO,MAAM,cAAc,KAAK,CAAA;AAChC,eAAO,MAAM,oBAAoB,IAAI,CAAA;AAErC,eAAO,MAAM,uBAAuB,WAAY,MAAM,KAAG,MAIxD,CAAA;AAED,oBAAY,WAAW;IACrB,QAAQ,aAAa;IACrB,WAAW,gBAAgB;IAC3B,cAAc,mBAAmB;IACjC,QAAQ,aAAa;CACtB;AAED,oBAAY,mBAAmB;IAC7B,WAAW,IAAI;IACf,QAAQ,IAAI;IACZ,OAAO,IAAI;IACX,MAAM,IAAI;IACV,QAAQ,IAAI;CACb;AAED,oBAAY,kBAAkB;IAC5B,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,MAAM,WAAW;CAClB;AAED,oBAAY,YAAY;IACtB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,YAAY,iBAAiB;CAC9B;AAED,oBAAY,aAAa;IACvB,OAAO,YAAY;IACnB,SAAS,cAAc;IACvB,OAAO,YAAY;CACpB;AAED,oBAAY,YAAY;IACtB,QAAQ,aAAa;CACtB;AAED,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,kBAAkB,EAAE,mBAAmB,CAqBjF,CAAA;AAED,eAAO,MAAM,aAAa,EAAE,SAAS,iBAAiB,EAyBrD,CAAA;AAED,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,WAAW,EAAE,iBAAiB,CAE7B,CAAA;AAE3C,eAAO,MAAM,UAAU,WAAa,CAAA;AAEpC,oBAAY,aAAa;IACvB,KAAK,UAAU;IACf,KAAK,UAAU;CAChB"}
|
|
@@ -9,6 +9,7 @@ type CreateFluencyModeParams = {
|
|
|
9
9
|
};
|
|
10
10
|
export declare const createFluencyMode: ({ mode, label, symbol, colorFamily, }: CreateFluencyModeParams) => FluencyModeConfig;
|
|
11
11
|
export declare const buildMatrixGrid: (data: GetMatrixResponse, mode: FluencyMode) => MatrixGrid;
|
|
12
|
+
export declare const allFactsEmpty: (response: GetMatrixResponse) => boolean;
|
|
12
13
|
export declare const generateStreakDates: (stats: GetWeeklyStatsResponse) => StreakStatus[];
|
|
13
14
|
export {};
|
|
14
15
|
//# sourceMappingURL=fluency.helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fluency.helpers.d.ts","sourceRoot":"","sources":["../../../../../../src/features/fluency/shared/fluency.helpers.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAElB,WAAW,EAEX,YAAY,EAEb,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EAEtB,UAAU,EACX,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAExD,KAAK,uBAAuB,GAAG;IAC7B,IAAI,EAAE,WAAW,CAAA;IACjB,KAAK,EAAE,cAAc,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,kBAAkB,CAAA;CAChC,CAAA;AAED,eAAO,MAAM,iBAAiB,0CAK3B,uBAAuB,KAAG,iBA4B5B,CAAA;AAED,eAAO,MAAM,eAAe,SAAU,iBAAiB,QAAQ,WAAW,KAAG,UAyD5E,CAAA;AAED,eAAO,MAAM,mBAAmB,UAAW,sBAAsB,mBAchE,CAAA"}
|
|
1
|
+
{"version":3,"file":"fluency.helpers.d.ts","sourceRoot":"","sources":["../../../../../../src/features/fluency/shared/fluency.helpers.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAElB,WAAW,EAEX,YAAY,EAEb,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EAEtB,UAAU,EACX,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAExD,KAAK,uBAAuB,GAAG;IAC7B,IAAI,EAAE,WAAW,CAAA;IACjB,KAAK,EAAE,cAAc,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,kBAAkB,CAAA;CAChC,CAAA;AAED,eAAO,MAAM,iBAAiB,0CAK3B,uBAAuB,KAAG,iBA4B5B,CAAA;AAED,eAAO,MAAM,eAAe,SAAU,iBAAiB,QAAQ,WAAW,KAAG,UAyD5E,CAAA;AAED,eAAO,MAAM,aAAa,aAAc,iBAAiB,KAAG,OAC0B,CAAA;AAEtF,eAAO,MAAM,mBAAmB,UAAW,sBAAsB,mBAchE,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@magmamath/students-features",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.3",
|
|
4
4
|
"description": "Magmamath features library",
|
|
5
5
|
"source": "src/index.ts",
|
|
6
6
|
"main": "src/index.ts",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"@types/d3-shape": "3.1.7",
|
|
57
57
|
"@types/jest": "^29.5.5",
|
|
58
58
|
"@types/react": "^18.2.44",
|
|
59
|
-
"axios": "^1.
|
|
59
|
+
"axios": "^1.15.2",
|
|
60
60
|
"del-cli": "^5.1.0",
|
|
61
61
|
"effector": "^23.2.3",
|
|
62
62
|
"effector-action": "1.2.2",
|
|
@@ -85,7 +85,12 @@
|
|
|
85
85
|
"react-i18next": "^15.5.2"
|
|
86
86
|
},
|
|
87
87
|
"resolutions": {
|
|
88
|
-
"@types/react": "^18.2.44"
|
|
88
|
+
"@types/react": "^18.2.44",
|
|
89
|
+
"@babel/plugin-transform-modules-systemjs": "7.29.4",
|
|
90
|
+
"basic-ftp": "5.3.1",
|
|
91
|
+
"@xmldom/xmldom": "0.8.13",
|
|
92
|
+
"lodash": "4.18.1",
|
|
93
|
+
"handlebars": "4.7.9"
|
|
89
94
|
},
|
|
90
95
|
"repository": "https://github.com/matteappen/magmamath-features.git",
|
|
91
96
|
"author": "magmamath <magmamath@gmail.com> (https://magmamath.com)",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
|
-
import { useGate } from 'effector-react'
|
|
2
|
+
import { useGate, useUnit } from 'effector-react'
|
|
3
3
|
import { View, StyleSheet } from 'react-native'
|
|
4
4
|
import { Typography, HeadingVariants, SPACING, COLORS } from '@magmamath/react-native-ui'
|
|
5
5
|
import { useText } from '../../../i18n/i18n'
|
|
@@ -8,6 +8,7 @@ import { DayStreakCounter } from './day-streak-counter/DayStreakCounter'
|
|
|
8
8
|
import { SelectMathOperator } from './select-math-operator/SelectMathOperator'
|
|
9
9
|
import { FluencyMatrix } from './matrix/FluencyMatrix'
|
|
10
10
|
import { MobileMenu } from './mobile-menu/MobileMenu'
|
|
11
|
+
import { FluencyStatusOverlay } from './FluencyStatusOverlay'
|
|
11
12
|
import { FluencyProvider } from '../context/FluencyContext'
|
|
12
13
|
import type { FluencyModel } from '../model/FluencyModel'
|
|
13
14
|
import type { FluencyMode } from '../shared/fluency.constants'
|
|
@@ -32,6 +33,7 @@ export const Fluency = ({
|
|
|
32
33
|
}: FluencyProps) => {
|
|
33
34
|
useGate(model.gate, { config })
|
|
34
35
|
const t = useText()
|
|
36
|
+
const status = useUnit(model.$status)
|
|
35
37
|
|
|
36
38
|
return (
|
|
37
39
|
<FluencyProvider value={{ model, onStartPress, onPracticePress, onModeSelectPress }}>
|
|
@@ -43,15 +45,21 @@ export const Fluency = ({
|
|
|
43
45
|
</Typography>
|
|
44
46
|
</View>
|
|
45
47
|
|
|
46
|
-
|
|
47
|
-
<
|
|
48
|
-
|
|
49
|
-
|
|
48
|
+
{status ? (
|
|
49
|
+
<FluencyStatusOverlay status={status} />
|
|
50
|
+
) : (
|
|
51
|
+
<>
|
|
52
|
+
<View style={styles.header}>
|
|
53
|
+
<StartBanner />
|
|
54
|
+
<DayStreakCounter />
|
|
55
|
+
</View>
|
|
50
56
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
57
|
+
<View style={styles.matrix}>
|
|
58
|
+
<SelectMathOperator />
|
|
59
|
+
<FluencyMatrix />
|
|
60
|
+
</View>
|
|
61
|
+
</>
|
|
62
|
+
)}
|
|
55
63
|
</View>
|
|
56
64
|
</FluencyProvider>
|
|
57
65
|
)
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import React, { ReactNode } from 'react'
|
|
2
|
+
import { StyleSheet, View } from 'react-native'
|
|
3
|
+
import {
|
|
4
|
+
COLORS,
|
|
5
|
+
ErrorIcon,
|
|
6
|
+
HeadingVariants,
|
|
7
|
+
InfoIcon,
|
|
8
|
+
SPACING,
|
|
9
|
+
Typography,
|
|
10
|
+
} from '@magmamath/react-native-ui'
|
|
11
|
+
import { FluencyStatus } from '../shared/fluency.constants'
|
|
12
|
+
import type { TranslationKey } from '../../../i18n/i18n'
|
|
13
|
+
import { useText } from '../../../i18n/i18n'
|
|
14
|
+
|
|
15
|
+
type StatusVariant = {
|
|
16
|
+
icon: ReactNode
|
|
17
|
+
circleColor: string
|
|
18
|
+
titleKey: TranslationKey
|
|
19
|
+
subtitleKey: TranslationKey
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const FLUENCY_STATUS_VARIANTS: Record<FluencyStatus, StatusVariant> = {
|
|
23
|
+
[FluencyStatus.ERROR]: {
|
|
24
|
+
icon: <ErrorIcon color={COLORS.PRIMARY_RED} size={40} />,
|
|
25
|
+
circleColor: COLORS.RED_1,
|
|
26
|
+
titleKey: 'student.fluency.errorTitle',
|
|
27
|
+
subtitleKey: 'student.fluency.errorSubtitle',
|
|
28
|
+
},
|
|
29
|
+
[FluencyStatus.EMPTY]: {
|
|
30
|
+
icon: <InfoIcon color={COLORS.NEUTRAL_6} size={40} />,
|
|
31
|
+
circleColor: COLORS.NEUTRAL_2,
|
|
32
|
+
titleKey: 'student.fluency.emptyTitle',
|
|
33
|
+
subtitleKey: 'student.fluency.emptySubtitle',
|
|
34
|
+
},
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
type FluencyStatusOverlayProps = {
|
|
38
|
+
status: FluencyStatus
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export const FluencyStatusOverlay = ({ status }: FluencyStatusOverlayProps) => {
|
|
42
|
+
const t = useText()
|
|
43
|
+
|
|
44
|
+
const variant = FLUENCY_STATUS_VARIANTS[status]
|
|
45
|
+
if (!variant) return null
|
|
46
|
+
|
|
47
|
+
return (
|
|
48
|
+
<View style={styles.container}>
|
|
49
|
+
<View style={styles.content}>
|
|
50
|
+
<View style={[styles.iconCircle, { backgroundColor: variant.circleColor }]}>
|
|
51
|
+
{variant.icon}
|
|
52
|
+
</View>
|
|
53
|
+
<View style={styles.text}>
|
|
54
|
+
<Typography variant={HeadingVariants.H2} style={styles.title}>
|
|
55
|
+
{t(variant.titleKey)}
|
|
56
|
+
</Typography>
|
|
57
|
+
<Typography variant={HeadingVariants.H7} style={styles.subtitle}>
|
|
58
|
+
{t(variant.subtitleKey)}
|
|
59
|
+
</Typography>
|
|
60
|
+
</View>
|
|
61
|
+
</View>
|
|
62
|
+
</View>
|
|
63
|
+
)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const styles = StyleSheet.create({
|
|
67
|
+
container: {
|
|
68
|
+
flex: 1,
|
|
69
|
+
alignItems: 'center',
|
|
70
|
+
justifyContent: 'center',
|
|
71
|
+
},
|
|
72
|
+
content: {
|
|
73
|
+
alignItems: 'center',
|
|
74
|
+
gap: SPACING[500],
|
|
75
|
+
paddingBottom: SPACING[800],
|
|
76
|
+
},
|
|
77
|
+
iconCircle: {
|
|
78
|
+
width: 88,
|
|
79
|
+
height: 88,
|
|
80
|
+
borderRadius: 44,
|
|
81
|
+
alignItems: 'center',
|
|
82
|
+
justifyContent: 'center',
|
|
83
|
+
},
|
|
84
|
+
text: {
|
|
85
|
+
alignItems: 'center',
|
|
86
|
+
gap: SPACING[200],
|
|
87
|
+
maxWidth: 340,
|
|
88
|
+
},
|
|
89
|
+
title: {
|
|
90
|
+
color: COLORS.NEUTRAL_9,
|
|
91
|
+
textAlign: 'center',
|
|
92
|
+
fontSize: 24,
|
|
93
|
+
fontWeight: '500',
|
|
94
|
+
},
|
|
95
|
+
subtitle: {
|
|
96
|
+
color: COLORS.NEUTRAL_7,
|
|
97
|
+
textAlign: 'center',
|
|
98
|
+
fontSize: 16,
|
|
99
|
+
fontWeight: '400',
|
|
100
|
+
},
|
|
101
|
+
})
|
|
@@ -17,14 +17,20 @@ import { useText } from '../../../../i18n/i18n'
|
|
|
17
17
|
export const SelectMathOperator = () => {
|
|
18
18
|
const t = useText()
|
|
19
19
|
const { model, onModeSelectPress } = useFluency()
|
|
20
|
-
const fluencyMode = useUnit(
|
|
21
|
-
|
|
20
|
+
const { fluencyMode, matrix } = useUnit({
|
|
21
|
+
fluencyMode: model.matrix.$mode,
|
|
22
|
+
matrix: model.matrix.$data,
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
const visibleModes = matrix
|
|
26
|
+
? FLUENCY_MODES.filter(({ mode }) => Object.keys(matrix.operations?.[mode]?.facts).length > 0)
|
|
27
|
+
: FLUENCY_MODES
|
|
22
28
|
|
|
23
29
|
return (
|
|
24
30
|
<View style={styles.container}>
|
|
25
|
-
{
|
|
31
|
+
{visibleModes.map(({ mode, label, symbol, select }, index) => {
|
|
26
32
|
const isSelectedMode = mode === fluencyMode
|
|
27
|
-
const progress = (matrix?.operations[mode]
|
|
33
|
+
const progress = (matrix?.operations?.[mode]?.completionRate ?? 0) * 100
|
|
28
34
|
|
|
29
35
|
return (
|
|
30
36
|
<MathOperatorRow
|
|
@@ -45,7 +51,7 @@ export const SelectMathOperator = () => {
|
|
|
45
51
|
model.matrix.setMode(mode)
|
|
46
52
|
onModeSelectPress?.(mode)
|
|
47
53
|
}}
|
|
48
|
-
showDivider={index <
|
|
54
|
+
showDivider={index < visibleModes.length - 1}
|
|
49
55
|
/>
|
|
50
56
|
)
|
|
51
57
|
})}
|
|
@@ -5,7 +5,8 @@ import { FluencyDaysStreakModel } from './FluencyDaysStreakModel'
|
|
|
5
5
|
import { FluencyMatrixModel } from './FluencyMatrixModel'
|
|
6
6
|
import { FluencyApiModel } from './FluencyApiModel'
|
|
7
7
|
import { FluencySolvingModel } from './FluencySolvingModel'
|
|
8
|
-
import { MatrixConfig } from '../shared/fluency.constants'
|
|
8
|
+
import { FluencyStatus, MatrixConfig } from '../shared/fluency.constants'
|
|
9
|
+
import { allFactsEmpty } from '../shared/fluency.helpers'
|
|
9
10
|
import type {
|
|
10
11
|
FluencyAttemptPayload,
|
|
11
12
|
FluencyConfig,
|
|
@@ -16,6 +17,7 @@ import type {
|
|
|
16
17
|
export class FluencyModel {
|
|
17
18
|
public readonly gate = createGate<FluencyModelGateProps>()
|
|
18
19
|
public readonly $config = createStore<FluencyConfig | null>(null)
|
|
20
|
+
public readonly $status = createStore<FluencyStatus | null>(null)
|
|
19
21
|
|
|
20
22
|
public readonly api: FluencyApiModel
|
|
21
23
|
public readonly streak: FluencyDaysStreakModel
|
|
@@ -29,6 +31,7 @@ export class FluencyModel {
|
|
|
29
31
|
this.solving = new FluencySolvingModel(this.matrix, this.$config)
|
|
30
32
|
|
|
31
33
|
this.init()
|
|
34
|
+
this.setupStatusTracking()
|
|
32
35
|
}
|
|
33
36
|
|
|
34
37
|
private init() {
|
|
@@ -63,4 +66,25 @@ export class FluencyModel {
|
|
|
63
66
|
target: this.api.postAttemptFx,
|
|
64
67
|
})
|
|
65
68
|
}
|
|
69
|
+
|
|
70
|
+
private setupStatusTracking() {
|
|
71
|
+
sample({
|
|
72
|
+
clock: this.gate.open,
|
|
73
|
+
fn: () => null as FluencyStatus | null,
|
|
74
|
+
target: this.$status,
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
sample({
|
|
78
|
+
clock: [this.api.getMatrixFx.fail, this.api.getWeeklyStatsFx.fail],
|
|
79
|
+
fn: () => FluencyStatus.ERROR,
|
|
80
|
+
target: this.$status,
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
sample({
|
|
84
|
+
clock: this.api.getMatrixFx.doneData,
|
|
85
|
+
filter: allFactsEmpty,
|
|
86
|
+
fn: () => FluencyStatus.EMPTY,
|
|
87
|
+
target: this.$status,
|
|
88
|
+
})
|
|
89
|
+
}
|
|
66
90
|
}
|