@magmamath/students-features 1.3.26-rc.2 → 1.3.26-rc.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.
Files changed (29) hide show
  1. package/dist/commonjs/features/fluency/assets/success.mp3 +0 -0
  2. package/dist/commonjs/features/fluency/components/fluency-solving/FluencySolvingCard.js +10 -4
  3. package/dist/commonjs/features/fluency/components/fluency-solving/FluencySolvingCard.js.map +1 -1
  4. package/dist/commonjs/features/fluency/hooks/useSuccessSound.js +29 -0
  5. package/dist/commonjs/features/fluency/hooks/useSuccessSound.js.map +1 -0
  6. package/dist/commonjs/features/fluency/model/FluencyModel.js +3 -0
  7. package/dist/commonjs/features/fluency/model/FluencyModel.js.map +1 -1
  8. package/dist/module/features/fluency/assets/success.mp3 +0 -0
  9. package/dist/module/features/fluency/components/fluency-solving/FluencySolvingCard.js +10 -4
  10. package/dist/module/features/fluency/components/fluency-solving/FluencySolvingCard.js.map +1 -1
  11. package/dist/module/features/fluency/hooks/useSuccessSound.js +22 -0
  12. package/dist/module/features/fluency/hooks/useSuccessSound.js.map +1 -0
  13. package/dist/module/features/fluency/model/FluencyModel.js +3 -0
  14. package/dist/module/features/fluency/model/FluencyModel.js.map +1 -1
  15. package/dist/typescript/commonjs/features/fluency/components/fluency-solving/FluencySolvingCard.d.ts.map +1 -1
  16. package/dist/typescript/commonjs/features/fluency/hooks/useSuccessSound.d.ts +4 -0
  17. package/dist/typescript/commonjs/features/fluency/hooks/useSuccessSound.d.ts.map +1 -0
  18. package/dist/typescript/commonjs/features/fluency/model/FluencyModel.d.ts +1 -0
  19. package/dist/typescript/commonjs/features/fluency/model/FluencyModel.d.ts.map +1 -1
  20. package/dist/typescript/module/features/fluency/components/fluency-solving/FluencySolvingCard.d.ts.map +1 -1
  21. package/dist/typescript/module/features/fluency/hooks/useSuccessSound.d.ts +4 -0
  22. package/dist/typescript/module/features/fluency/hooks/useSuccessSound.d.ts.map +1 -0
  23. package/dist/typescript/module/features/fluency/model/FluencyModel.d.ts +1 -0
  24. package/dist/typescript/module/features/fluency/model/FluencyModel.d.ts.map +1 -1
  25. package/package.json +1 -1
  26. package/src/features/fluency/assets/success.mp3 +0 -0
  27. package/src/features/fluency/components/fluency-solving/FluencySolvingCard.tsx +8 -2
  28. package/src/features/fluency/hooks/useSuccessSound.ts +21 -0
  29. package/src/features/fluency/model/FluencyModel.ts +4 -0
@@ -11,6 +11,7 @@ var _FluencyEquationCard = require("./FluencyEquationCard.js");
11
11
  var _reactNativeUi = require("@magmamath/react-native-ui");
12
12
  var _FluencyContext = require("../../context/FluencyContext.js");
13
13
  var _useCardSnapAnimation = require("../../hooks/useCardSnapAnimation.js");
14
+ var _useSuccessSound = require("../../hooks/useSuccessSound.js");
14
15
  var _commonConstants = require("../../../../shared/common.constants.js");
15
16
  var _jsxRuntime = require("react/jsx-runtime");
16
17
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
@@ -20,11 +21,16 @@ const FluencySolvingCard = () => {
20
21
  model
21
22
  } = (0, _FluencyContext.useFluency)();
22
23
  const animation = (0, _useCardSnapAnimation.useCardSnapAnimation)();
23
- const submit = async () => {
24
- const {
25
- isCorrect
26
- } = await model.submitFx();
24
+ const {
25
+ play: playSuccess
26
+ } = (0, _useSuccessSound.useSuccessSound)();
27
+ const submit = () => {
28
+ const input = model.input.$state.getState();
29
+ const problem = model.solving.$problem.getState();
30
+ const isCorrect = Number(input) === problem.answer;
31
+ if (isCorrect) playSuccess();
27
32
  animation.trigger(isCorrect ? 'right' : 'left');
33
+ void model.submitFx();
28
34
  };
29
35
  (0, _react.useEffect)(() => {
30
36
  if (!_commonConstants.isWeb) return;
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_FluencyNumpad","_FluencyEquationCard","_reactNativeUi","_FluencyContext","_useCardSnapAnimation","_commonConstants","_jsxRuntime","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","FluencySolvingCard","model","useFluency","animation","useCardSnapAnimation","submit","isCorrect","submitFx","trigger","useEffect","isWeb","handleKeyDown","event","isDigit","test","key","input","value","Number","erase","window","addEventListener","removeEventListener","jsxs","View","children","jsx","style","styles","wrapper","FluencyEquationCard","animationStyles","snapStyles","FluencyNumpad","onEnterPress","exports","StyleSheet","create","alignItems","paddingVertical","SPACING","paddingHorizontal","marginTop"],"sourceRoot":"../../../../../../src","sources":["features/fluency/components/fluency-solving/FluencySolvingCard.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_FluencyNumpad","_FluencyEquationCard","_reactNativeUi","_FluencyContext","_useCardSnapAnimation","_useSuccessSound","_commonConstants","_jsxRuntime","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","FluencySolvingCard","model","useFluency","animation","useCardSnapAnimation","play","playSuccess","useSuccessSound","submit","input","$state","getState","problem","solving","$problem","isCorrect","Number","answer","trigger","submitFx","useEffect","isWeb","handleKeyDown","event","isDigit","test","key","value","erase","window","addEventListener","removeEventListener","jsxs","View","children","jsx","style","styles","wrapper","FluencyEquationCard","animationStyles","snapStyles","FluencyNumpad","onEnterPress","exports","StyleSheet","create","alignItems","paddingVertical","SPACING","paddingHorizontal","marginTop"],"sourceRoot":"../../../../../../src","sources":["features/fluency/components/fluency-solving/FluencySolvingCard.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useSuccessSound = void 0;
7
+ var _react = require("react");
8
+ var _expoAudio = require("expo-audio");
9
+ var _success = _interopRequireDefault(require("../assets/success.mp3"));
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
+ // @ts-ignore
12
+
13
+ const useSuccessSound = () => {
14
+ const playerRef = (0, _react.useRef)(null);
15
+ (0, _react.useEffect)(() => {
16
+ const player = (0, _expoAudio.createAudioPlayer)(_success.default);
17
+ playerRef.current = player;
18
+ return () => player.remove();
19
+ }, []);
20
+ const play = () => {
21
+ playerRef.current?.seekTo(0);
22
+ playerRef.current?.play();
23
+ };
24
+ return {
25
+ play
26
+ };
27
+ };
28
+ exports.useSuccessSound = useSuccessSound;
29
+ //# sourceMappingURL=useSuccessSound.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_expoAudio","_success","_interopRequireDefault","e","__esModule","default","useSuccessSound","playerRef","useRef","useEffect","player","createAudioPlayer","SUCCESS_SOUND","current","remove","play","seekTo","exports"],"sourceRoot":"../../../../../src","sources":["features/fluency/hooks/useSuccessSound.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AAEA,IAAAE,QAAA,GAAAC,sBAAA,CAAAH,OAAA;AAAiD,SAAAG,uBAAAC,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AADjD;;AAGO,MAAMG,eAAe,GAAGA,CAAA,KAAM;EACnC,MAAMC,SAAS,GAAG,IAAAC,aAAM,EAAqB,IAAI,CAAC;EAElD,IAAAC,gBAAS,EAAC,MAAM;IACd,MAAMC,MAAM,GAAG,IAAAC,4BAAiB,EAACC,gBAAa,CAAC;IAC/CL,SAAS,CAACM,OAAO,GAAGH,MAAM;IAC1B,OAAO,MAAMA,MAAM,CAACI,MAAM,CAAC,CAAC;EAC9B,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMC,IAAI,GAAGA,CAAA,KAAM;IACjBR,SAAS,CAACM,OAAO,EAAEG,MAAM,CAAC,CAAC,CAAC;IAC5BT,SAAS,CAACM,OAAO,EAAEE,IAAI,CAAC,CAAC;EAC3B,CAAC;EAED,OAAO;IAAEA;EAAK,CAAC;AACjB,CAAC;AAAAE,OAAA,CAAAX,eAAA,GAAAA,eAAA","ignoreList":[]}
@@ -14,6 +14,9 @@ var _FluencyInputModel = require("./FluencyInputModel.js");
14
14
  class FluencyModel {
15
15
  setMode = (0, _effector.createEvent)();
16
16
  $mode = (0, _effector.restore)(this.setMode, _fluencyConstants.FluencyMode.ADDITION);
17
+ checkAnswer() {
18
+ return Number(this.input.$state.getState()) === this.solving.$problem.getState().answer;
19
+ }
17
20
  constructor({
18
21
  api
19
22
  }) {
@@ -1 +1 @@
1
- {"version":3,"names":["_effector","require","_fluencyConstants","_FluencyDaysStreakModel","_FluencyMatrixModel","_FluencyApiModel","_FluencySolvingModel","_FluencyInputModel","FluencyModel","setMode","createEvent","$mode","restore","FluencyMode","ADDITION","constructor","api","FluencyApiModel","streak","FluencyDaysStreakModel","matrix","FluencyMatrixModel","solving","FluencySolvingModel","input","FluencyInputModel","submitFx","attach","source","$state","problem","$problem","effect","isCorrect","Number","answer","sample","clock","done","fn","erase","target","set","exports"],"sourceRoot":"../../../../../src","sources":["features/fluency/model/FluencyModel.ts"],"mappings":";;;;;;AAAA,IAAAA,SAAA,GAAAC,OAAA;AAEA,IAAAC,iBAAA,GAAAD,OAAA;AACA,IAAAE,uBAAA,GAAAF,OAAA;AACA,IAAAG,mBAAA,GAAAH,OAAA;AACA,IAAAI,gBAAA,GAAAJ,OAAA;AACA,IAAAK,oBAAA,GAAAL,OAAA;AACA,IAAAM,kBAAA,GAAAN,OAAA;AAQO,MAAMO,YAAY,CAAC;EAQRC,OAAO,GAAG,IAAAC,qBAAW,EAAc,CAAC;EACpCC,KAAK,GAAG,IAAAC,iBAAO,EAAC,IAAI,CAACH,OAAO,EAAEI,6BAAW,CAACC,QAAQ,CAAC;EAEnEC,WAAWA,CAAC;IAAEC;EAAuB,CAAC,EAAE;IACtC,IAAI,CAACA,GAAG,GAAG,IAAIC,gCAAe,CAACD,GAAG,CAAC;IACnC,IAAI,CAACE,MAAM,GAAG,IAAIC,8CAAsB,CAAC,CAAC;IAC1C,IAAI,CAACC,MAAM,GAAG,IAAIC,sCAAkB,CAAC,CAAC;IACtC,IAAI,CAACC,OAAO,GAAG,IAAIC,wCAAmB,CAAC,CAAC;IACxC,IAAI,CAACC,KAAK,GAAG,IAAIC,oCAAiB,CAAC,CAAC;IAEpC,IAAI,CAACC,QAAQ,GAAG,IAAAC,gBAAM,EAAC;MACrBC,MAAM,EAAE;QAAEJ,KAAK,EAAE,IAAI,CAACA,KAAK,CAACK,MAAM;QAAEC,OAAO,EAAE,IAAI,CAACR,OAAO,CAACS;MAAS,CAAC;MACpEC,MAAM,EAAEA,CAAC;QAAER,KAAK;QAAEM;MAAQ,CAAC,MAAM;QAAEG,SAAS,EAAEC,MAAM,CAACV,KAAK,CAAC,KAAKM,OAAO,CAACK;MAAO,CAAC;IAClF,CAAC,CAAC;IAEF,IAAAC,gBAAM,EAAC;MACLC,KAAK,EAAE,IAAI,CAACX,QAAQ,CAACY,IAAI;MACzBC,EAAE,EAAEA,CAAA,MAAO;QAAEC,KAAK,EAAE;MAAe,CAAC,CAAC;MACrCC,MAAM,EAAE,IAAI,CAACjB,KAAK,CAACkB;IACrB,CAAC,CAAC;EACJ;AACF;AAACC,OAAA,CAAAnC,YAAA,GAAAA,YAAA","ignoreList":[]}
1
+ {"version":3,"names":["_effector","require","_fluencyConstants","_FluencyDaysStreakModel","_FluencyMatrixModel","_FluencyApiModel","_FluencySolvingModel","_FluencyInputModel","FluencyModel","setMode","createEvent","$mode","restore","FluencyMode","ADDITION","checkAnswer","Number","input","$state","getState","solving","$problem","answer","constructor","api","FluencyApiModel","streak","FluencyDaysStreakModel","matrix","FluencyMatrixModel","FluencySolvingModel","FluencyInputModel","submitFx","attach","source","problem","effect","isCorrect","sample","clock","done","fn","erase","target","set","exports"],"sourceRoot":"../../../../../src","sources":["features/fluency/model/FluencyModel.ts"],"mappings":";;;;;;AAAA,IAAAA,SAAA,GAAAC,OAAA;AAEA,IAAAC,iBAAA,GAAAD,OAAA;AACA,IAAAE,uBAAA,GAAAF,OAAA;AACA,IAAAG,mBAAA,GAAAH,OAAA;AACA,IAAAI,gBAAA,GAAAJ,OAAA;AACA,IAAAK,oBAAA,GAAAL,OAAA;AACA,IAAAM,kBAAA,GAAAN,OAAA;AAQO,MAAMO,YAAY,CAAC;EAQRC,OAAO,GAAG,IAAAC,qBAAW,EAAc,CAAC;EACpCC,KAAK,GAAG,IAAAC,iBAAO,EAAC,IAAI,CAACH,OAAO,EAAEI,6BAAW,CAACC,QAAQ,CAAC;EAE5DC,WAAWA,CAAA,EAAY;IAC5B,OAAOC,MAAM,CAAC,IAAI,CAACC,KAAK,CAACC,MAAM,CAACC,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAACC,OAAO,CAACC,QAAQ,CAACF,QAAQ,CAAC,CAAC,CAACG,MAAM;EACzF;EAEAC,WAAWA,CAAC;IAAEC;EAAuB,CAAC,EAAE;IACtC,IAAI,CAACA,GAAG,GAAG,IAAIC,gCAAe,CAACD,GAAG,CAAC;IACnC,IAAI,CAACE,MAAM,GAAG,IAAIC,8CAAsB,CAAC,CAAC;IAC1C,IAAI,CAACC,MAAM,GAAG,IAAIC,sCAAkB,CAAC,CAAC;IACtC,IAAI,CAACT,OAAO,GAAG,IAAIU,wCAAmB,CAAC,CAAC;IACxC,IAAI,CAACb,KAAK,GAAG,IAAIc,oCAAiB,CAAC,CAAC;IAEpC,IAAI,CAACC,QAAQ,GAAG,IAAAC,gBAAM,EAAC;MACrBC,MAAM,EAAE;QAAEjB,KAAK,EAAE,IAAI,CAACA,KAAK,CAACC,MAAM;QAAEiB,OAAO,EAAE,IAAI,CAACf,OAAO,CAACC;MAAS,CAAC;MACpEe,MAAM,EAAEA,CAAC;QAAEnB,KAAK;QAAEkB;MAAQ,CAAC,MAAM;QAAEE,SAAS,EAAErB,MAAM,CAACC,KAAK,CAAC,KAAKkB,OAAO,CAACb;MAAO,CAAC;IAClF,CAAC,CAAC;IAEF,IAAAgB,gBAAM,EAAC;MACLC,KAAK,EAAE,IAAI,CAACP,QAAQ,CAACQ,IAAI;MACzBC,EAAE,EAAEA,CAAA,MAAO;QAAEC,KAAK,EAAE;MAAe,CAAC,CAAC;MACrCC,MAAM,EAAE,IAAI,CAAC1B,KAAK,CAAC2B;IACrB,CAAC,CAAC;EACJ;AACF;AAACC,OAAA,CAAArC,YAAA,GAAAA,YAAA","ignoreList":[]}
@@ -7,6 +7,7 @@ import { FluencyEquationCard } from "./FluencyEquationCard.js";
7
7
  import { SPACING } from '@magmamath/react-native-ui';
8
8
  import { useFluency } from "../../context/FluencyContext.js";
9
9
  import { useCardSnapAnimation } from "../../hooks/useCardSnapAnimation.js";
10
+ import { useSuccessSound } from "../../hooks/useSuccessSound.js";
10
11
  import { isWeb } from "../../../../shared/common.constants.js";
11
12
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
12
13
  export const FluencySolvingCard = () => {
@@ -14,11 +15,16 @@ export const FluencySolvingCard = () => {
14
15
  model
15
16
  } = useFluency();
16
17
  const animation = useCardSnapAnimation();
17
- const submit = async () => {
18
- const {
19
- isCorrect
20
- } = await model.submitFx();
18
+ const {
19
+ play: playSuccess
20
+ } = useSuccessSound();
21
+ const submit = () => {
22
+ const input = model.input.$state.getState();
23
+ const problem = model.solving.$problem.getState();
24
+ const isCorrect = Number(input) === problem.answer;
25
+ if (isCorrect) playSuccess();
21
26
  animation.trigger(isCorrect ? 'right' : 'left');
27
+ void model.submitFx();
22
28
  };
23
29
  useEffect(() => {
24
30
  if (!isWeb) return;
@@ -1 +1 @@
1
- {"version":3,"names":["React","useEffect","View","StyleSheet","FluencyNumpad","FluencyEquationCard","SPACING","useFluency","useCardSnapAnimation","isWeb","jsx","_jsx","jsxs","_jsxs","FluencySolvingCard","model","animation","submit","isCorrect","submitFx","trigger","handleKeyDown","event","isDigit","test","key","input","set","value","Number","erase","window","addEventListener","removeEventListener","children","style","styles","wrapper","animationStyles","snapStyles","onEnterPress","create","alignItems","paddingVertical","paddingHorizontal","marginTop"],"sourceRoot":"../../../../../../src","sources":["features/fluency/components/fluency-solving/FluencySolvingCard.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAQ,OAAO;AACxC,SAASC,IAAI,EAAEC,UAAU,QAAQ,cAAc;AAC/C,SAASC,aAAa,QAAQ,oBAAiB;AAC/C,SAASC,mBAAmB,QAAQ,0BAAuB;AAC3D,SAASC,OAAO,QAAQ,4BAA4B;AACpD,SAASC,UAAU,QAAQ,iCAA8B;AACzD,SAASC,oBAAoB,QAAQ,qCAAkC;AACvE,SAASC,KAAK,QAAQ,wCAAqC;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAE3D,OAAO,MAAMC,kBAAkB,GAAGA,CAAA,KAAM;EACtC,MAAM;IAAEC;EAAM,CAAC,GAAGR,UAAU,CAAC,CAAC;EAC9B,MAAMS,SAAS,GAAGR,oBAAoB,CAAC,CAAC;EAExC,MAAMS,MAAM,GAAG,MAAAA,CAAA,KAAY;IACzB,MAAM;MAAEC;IAAU,CAAC,GAAG,MAAMH,KAAK,CAACI,QAAQ,CAAC,CAAC;IAC5CH,SAAS,CAACI,OAAO,CAACF,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;EACjD,CAAC;EAEDjB,SAAS,CAAC,MAAM;IACd,IAAI,CAACQ,KAAK,EAAE;IAEZ,MAAMY,aAAa,GAAIC,KAAoB,IAAK;MAC9C,MAAMC,OAAO,GAAG,MAAM,CAACC,IAAI,CAACF,KAAK,CAACG,GAAG,CAAC;MACtC,IAAIF,OAAO,EAAE,OAAOR,KAAK,CAACW,KAAK,CAACC,GAAG,CAAC;QAAEC,KAAK,EAAEC,MAAM,CAACP,KAAK,CAACG,GAAG;MAAE,CAAC,CAAC;MACjE,IAAIH,KAAK,CAACG,GAAG,KAAK,WAAW,EAAE,OAAOV,KAAK,CAACW,KAAK,CAACC,GAAG,CAAC;QAAEG,KAAK,EAAE;MAAS,CAAC,CAAC;MAC1E,IAAIR,KAAK,CAACG,GAAG,KAAK,OAAO,EAAE;QACzBR,MAAM,CAAC,CAAC;QACR;MACF;IACF,CAAC;IAEDc,MAAM,CAACC,gBAAgB,CAAC,SAAS,EAAEX,aAAa,CAAC;IACjD,OAAO,MAAMU,MAAM,CAACE,mBAAmB,CAAC,SAAS,EAAEZ,aAAa,CAAC;EACnE,CAAC,EAAE,EAAE,CAAC;EAEN,oBACER,KAAA,CAACX,IAAI;IAAAgC,QAAA,gBACHvB,IAAA,CAACT,IAAI;MAACiC,KAAK,EAAEC,MAAM,CAACC,OAAQ;MAAAH,QAAA,eAC1BvB,IAAA,CAACN,mBAAmB;QAACiC,eAAe,EAAEtB,SAAS,CAACuB;MAAW,CAAE;IAAC,CAC1D,CAAC,eACP5B,IAAA,CAACP,aAAa;MAACoC,YAAY,EAAEvB;IAAO,CAAE,CAAC;EAAA,CACnC,CAAC;AAEX,CAAC;AAED,MAAMmB,MAAM,GAAGjC,UAAU,CAACsC,MAAM,CAAC;EAC/BJ,OAAO,EAAE;IACPK,UAAU,EAAE,QAAQ;IACpBC,eAAe,EAAErC,OAAO,CAAC,GAAG,CAAC;IAC7BsC,iBAAiB,EAAEtC,OAAO,CAAC,GAAG,CAAC;IAC/BuC,SAAS,EAAEvC,OAAO,CAAC,GAAG;EACxB;AACF,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["React","useEffect","View","StyleSheet","FluencyNumpad","FluencyEquationCard","SPACING","useFluency","useCardSnapAnimation","useSuccessSound","isWeb","jsx","_jsx","jsxs","_jsxs","FluencySolvingCard","model","animation","play","playSuccess","submit","input","$state","getState","problem","solving","$problem","isCorrect","Number","answer","trigger","submitFx","handleKeyDown","event","isDigit","test","key","set","value","erase","window","addEventListener","removeEventListener","children","style","styles","wrapper","animationStyles","snapStyles","onEnterPress","create","alignItems","paddingVertical","paddingHorizontal","marginTop"],"sourceRoot":"../../../../../../src","sources":["features/fluency/components/fluency-solving/FluencySolvingCard.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ import { useEffect, useRef } from 'react';
4
+ import { createAudioPlayer } from 'expo-audio';
5
+ // @ts-ignore
6
+ import SUCCESS_SOUND from '../assets/success.mp3';
7
+ export const useSuccessSound = () => {
8
+ const playerRef = useRef(null);
9
+ useEffect(() => {
10
+ const player = createAudioPlayer(SUCCESS_SOUND);
11
+ playerRef.current = player;
12
+ return () => player.remove();
13
+ }, []);
14
+ const play = () => {
15
+ playerRef.current?.seekTo(0);
16
+ playerRef.current?.play();
17
+ };
18
+ return {
19
+ play
20
+ };
21
+ };
22
+ //# sourceMappingURL=useSuccessSound.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","useRef","createAudioPlayer","SUCCESS_SOUND","useSuccessSound","playerRef","player","current","remove","play","seekTo"],"sourceRoot":"../../../../../src","sources":["features/fluency/hooks/useSuccessSound.ts"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,MAAM,QAAQ,OAAO;AACzC,SAAsBC,iBAAiB,QAAQ,YAAY;AAC3D;AACA,OAAOC,aAAa,MAAM,uBAAuB;AAEjD,OAAO,MAAMC,eAAe,GAAGA,CAAA,KAAM;EACnC,MAAMC,SAAS,GAAGJ,MAAM,CAAqB,IAAI,CAAC;EAElDD,SAAS,CAAC,MAAM;IACd,MAAMM,MAAM,GAAGJ,iBAAiB,CAACC,aAAa,CAAC;IAC/CE,SAAS,CAACE,OAAO,GAAGD,MAAM;IAC1B,OAAO,MAAMA,MAAM,CAACE,MAAM,CAAC,CAAC;EAC9B,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMC,IAAI,GAAGA,CAAA,KAAM;IACjBJ,SAAS,CAACE,OAAO,EAAEG,MAAM,CAAC,CAAC,CAAC;IAC5BL,SAAS,CAACE,OAAO,EAAEE,IAAI,CAAC,CAAC;EAC3B,CAAC;EAED,OAAO;IAAEA;EAAK,CAAC;AACjB,CAAC","ignoreList":[]}
@@ -10,6 +10,9 @@ import { FluencyInputModel } from "./FluencyInputModel.js";
10
10
  export class FluencyModel {
11
11
  setMode = createEvent();
12
12
  $mode = restore(this.setMode, FluencyMode.ADDITION);
13
+ checkAnswer() {
14
+ return Number(this.input.$state.getState()) === this.solving.$problem.getState().answer;
15
+ }
13
16
  constructor({
14
17
  api
15
18
  }) {
@@ -1 +1 @@
1
- {"version":3,"names":["attach","createEvent","restore","sample","FluencyMode","FluencyDaysStreakModel","FluencyMatrixModel","FluencyApiModel","FluencySolvingModel","FluencyInputModel","FluencyModel","setMode","$mode","ADDITION","constructor","api","streak","matrix","solving","input","submitFx","source","$state","problem","$problem","effect","isCorrect","Number","answer","clock","done","fn","erase","target","set"],"sourceRoot":"../../../../../src","sources":["features/fluency/model/FluencyModel.ts"],"mappings":";;AAAA,SAASA,MAAM,EAAEC,WAAW,EAAEC,OAAO,EAAEC,MAAM,QAAQ,UAAU;AAE/D,SAASC,WAAW,QAAQ,yBAAsB;AAClD,SAASC,sBAAsB,QAAQ,6BAA0B;AACjE,SAASC,kBAAkB,QAAQ,yBAAsB;AACzD,SAASC,eAAe,QAAQ,sBAAmB;AACnD,SAASC,mBAAmB,QAAQ,0BAAuB;AAC3D,SAASC,iBAAiB,QAAQ,wBAAqB;AAQvD,OAAO,MAAMC,YAAY,CAAC;EAQRC,OAAO,GAAGV,WAAW,CAAc,CAAC;EACpCW,KAAK,GAAGV,OAAO,CAAC,IAAI,CAACS,OAAO,EAAEP,WAAW,CAACS,QAAQ,CAAC;EAEnEC,WAAWA,CAAC;IAAEC;EAAuB,CAAC,EAAE;IACtC,IAAI,CAACA,GAAG,GAAG,IAAIR,eAAe,CAACQ,GAAG,CAAC;IACnC,IAAI,CAACC,MAAM,GAAG,IAAIX,sBAAsB,CAAC,CAAC;IAC1C,IAAI,CAACY,MAAM,GAAG,IAAIX,kBAAkB,CAAC,CAAC;IACtC,IAAI,CAACY,OAAO,GAAG,IAAIV,mBAAmB,CAAC,CAAC;IACxC,IAAI,CAACW,KAAK,GAAG,IAAIV,iBAAiB,CAAC,CAAC;IAEpC,IAAI,CAACW,QAAQ,GAAGpB,MAAM,CAAC;MACrBqB,MAAM,EAAE;QAAEF,KAAK,EAAE,IAAI,CAACA,KAAK,CAACG,MAAM;QAAEC,OAAO,EAAE,IAAI,CAACL,OAAO,CAACM;MAAS,CAAC;MACpEC,MAAM,EAAEA,CAAC;QAAEN,KAAK;QAAEI;MAAQ,CAAC,MAAM;QAAEG,SAAS,EAAEC,MAAM,CAACR,KAAK,CAAC,KAAKI,OAAO,CAACK;MAAO,CAAC;IAClF,CAAC,CAAC;IAEFzB,MAAM,CAAC;MACL0B,KAAK,EAAE,IAAI,CAACT,QAAQ,CAACU,IAAI;MACzBC,EAAE,EAAEA,CAAA,MAAO;QAAEC,KAAK,EAAE;MAAe,CAAC,CAAC;MACrCC,MAAM,EAAE,IAAI,CAACd,KAAK,CAACe;IACrB,CAAC,CAAC;EACJ;AACF","ignoreList":[]}
1
+ {"version":3,"names":["attach","createEvent","restore","sample","FluencyMode","FluencyDaysStreakModel","FluencyMatrixModel","FluencyApiModel","FluencySolvingModel","FluencyInputModel","FluencyModel","setMode","$mode","ADDITION","checkAnswer","Number","input","$state","getState","solving","$problem","answer","constructor","api","streak","matrix","submitFx","source","problem","effect","isCorrect","clock","done","fn","erase","target","set"],"sourceRoot":"../../../../../src","sources":["features/fluency/model/FluencyModel.ts"],"mappings":";;AAAA,SAASA,MAAM,EAAEC,WAAW,EAAEC,OAAO,EAAEC,MAAM,QAAQ,UAAU;AAE/D,SAASC,WAAW,QAAQ,yBAAsB;AAClD,SAASC,sBAAsB,QAAQ,6BAA0B;AACjE,SAASC,kBAAkB,QAAQ,yBAAsB;AACzD,SAASC,eAAe,QAAQ,sBAAmB;AACnD,SAASC,mBAAmB,QAAQ,0BAAuB;AAC3D,SAASC,iBAAiB,QAAQ,wBAAqB;AAQvD,OAAO,MAAMC,YAAY,CAAC;EAQRC,OAAO,GAAGV,WAAW,CAAc,CAAC;EACpCW,KAAK,GAAGV,OAAO,CAAC,IAAI,CAACS,OAAO,EAAEP,WAAW,CAACS,QAAQ,CAAC;EAE5DC,WAAWA,CAAA,EAAY;IAC5B,OAAOC,MAAM,CAAC,IAAI,CAACC,KAAK,CAACC,MAAM,CAACC,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAACC,OAAO,CAACC,QAAQ,CAACF,QAAQ,CAAC,CAAC,CAACG,MAAM;EACzF;EAEAC,WAAWA,CAAC;IAAEC;EAAuB,CAAC,EAAE;IACtC,IAAI,CAACA,GAAG,GAAG,IAAIhB,eAAe,CAACgB,GAAG,CAAC;IACnC,IAAI,CAACC,MAAM,GAAG,IAAInB,sBAAsB,CAAC,CAAC;IAC1C,IAAI,CAACoB,MAAM,GAAG,IAAInB,kBAAkB,CAAC,CAAC;IACtC,IAAI,CAACa,OAAO,GAAG,IAAIX,mBAAmB,CAAC,CAAC;IACxC,IAAI,CAACQ,KAAK,GAAG,IAAIP,iBAAiB,CAAC,CAAC;IAEpC,IAAI,CAACiB,QAAQ,GAAG1B,MAAM,CAAC;MACrB2B,MAAM,EAAE;QAAEX,KAAK,EAAE,IAAI,CAACA,KAAK,CAACC,MAAM;QAAEW,OAAO,EAAE,IAAI,CAACT,OAAO,CAACC;MAAS,CAAC;MACpES,MAAM,EAAEA,CAAC;QAAEb,KAAK;QAAEY;MAAQ,CAAC,MAAM;QAAEE,SAAS,EAAEf,MAAM,CAACC,KAAK,CAAC,KAAKY,OAAO,CAACP;MAAO,CAAC;IAClF,CAAC,CAAC;IAEFlB,MAAM,CAAC;MACL4B,KAAK,EAAE,IAAI,CAACL,QAAQ,CAACM,IAAI;MACzBC,EAAE,EAAEA,CAAA,MAAO;QAAEC,KAAK,EAAE;MAAe,CAAC,CAAC;MACrCC,MAAM,EAAE,IAAI,CAACnB,KAAK,CAACoB;IACrB,CAAC,CAAC;EACJ;AACF","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"FluencySolvingCard.d.ts","sourceRoot":"","sources":["../../../../../../../src/features/fluency/components/fluency-solving/FluencySolvingCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAA;AASxC,eAAO,MAAM,kBAAkB,yBAkC9B,CAAA"}
1
+ {"version":3,"file":"FluencySolvingCard.d.ts","sourceRoot":"","sources":["../../../../../../../src/features/fluency/components/fluency-solving/FluencySolvingCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAA;AAUxC,eAAO,MAAM,kBAAkB,yBAuC9B,CAAA"}
@@ -0,0 +1,4 @@
1
+ export declare const useSuccessSound: () => {
2
+ play: () => void;
3
+ };
4
+ //# sourceMappingURL=useSuccessSound.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSuccessSound.d.ts","sourceRoot":"","sources":["../../../../../../src/features/fluency/hooks/useSuccessSound.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,eAAe;;CAe3B,CAAA"}
@@ -20,6 +20,7 @@ export declare class FluencyModel {
20
20
  readonly submitFx: Effect<void, SubmitResult, Error>;
21
21
  readonly setMode: import("effector").EventCallable<FluencyMode>;
22
22
  readonly $mode: import("effector").StoreWritable<FluencyMode>;
23
+ checkAnswer(): boolean;
23
24
  constructor({ api }: FluencyModelProps);
24
25
  }
25
26
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"FluencyModel.d.ts","sourceRoot":"","sources":["../../../../../../src/features/fluency/model/FluencyModel.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,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,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAEvD,KAAK,YAAY,GAAG;IAAE,SAAS,EAAE,OAAO,CAAA;CAAE,CAAA;AAE1C,KAAK,iBAAiB,GAAG;IACvB,GAAG,EAAE,EAAE,CAAA;CACR,CAAA;AAED,qBAAa,YAAY;IACvB,SAAgB,GAAG,EAAE,eAAe,CAAA;IACpC,SAAgB,MAAM,EAAE,sBAAsB,CAAA;IAC9C,SAAgB,MAAM,EAAE,kBAAkB,CAAA;IAC1C,SAAgB,OAAO,EAAE,mBAAmB,CAAA;IAC5C,SAAgB,KAAK,EAAE,iBAAiB,CAAA;IACxC,SAAgB,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,CAAA;IAE3D,SAAgB,OAAO,gDAA6B;IACpD,SAAgB,KAAK,gDAA8C;gBAEvD,EAAE,GAAG,EAAE,EAAE,iBAAiB;CAkBvC"}
1
+ {"version":3,"file":"FluencyModel.d.ts","sourceRoot":"","sources":["../../../../../../src/features/fluency/model/FluencyModel.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,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,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAEvD,KAAK,YAAY,GAAG;IAAE,SAAS,EAAE,OAAO,CAAA;CAAE,CAAA;AAE1C,KAAK,iBAAiB,GAAG;IACvB,GAAG,EAAE,EAAE,CAAA;CACR,CAAA;AAED,qBAAa,YAAY;IACvB,SAAgB,GAAG,EAAE,eAAe,CAAA;IACpC,SAAgB,MAAM,EAAE,sBAAsB,CAAA;IAC9C,SAAgB,MAAM,EAAE,kBAAkB,CAAA;IAC1C,SAAgB,OAAO,EAAE,mBAAmB,CAAA;IAC5C,SAAgB,KAAK,EAAE,iBAAiB,CAAA;IACxC,SAAgB,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,CAAA;IAE3D,SAAgB,OAAO,gDAA6B;IACpD,SAAgB,KAAK,gDAA8C;IAE5D,WAAW,IAAI,OAAO;gBAIjB,EAAE,GAAG,EAAE,EAAE,iBAAiB;CAkBvC"}
@@ -1 +1 @@
1
- {"version":3,"file":"FluencySolvingCard.d.ts","sourceRoot":"","sources":["../../../../../../../src/features/fluency/components/fluency-solving/FluencySolvingCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAA;AASxC,eAAO,MAAM,kBAAkB,yBAkC9B,CAAA"}
1
+ {"version":3,"file":"FluencySolvingCard.d.ts","sourceRoot":"","sources":["../../../../../../../src/features/fluency/components/fluency-solving/FluencySolvingCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAA;AAUxC,eAAO,MAAM,kBAAkB,yBAuC9B,CAAA"}
@@ -0,0 +1,4 @@
1
+ export declare const useSuccessSound: () => {
2
+ play: () => void;
3
+ };
4
+ //# sourceMappingURL=useSuccessSound.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSuccessSound.d.ts","sourceRoot":"","sources":["../../../../../../src/features/fluency/hooks/useSuccessSound.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,eAAe;;CAe3B,CAAA"}
@@ -20,6 +20,7 @@ export declare class FluencyModel {
20
20
  readonly submitFx: Effect<void, SubmitResult, Error>;
21
21
  readonly setMode: import("effector").EventCallable<FluencyMode>;
22
22
  readonly $mode: import("effector").StoreWritable<FluencyMode>;
23
+ checkAnswer(): boolean;
23
24
  constructor({ api }: FluencyModelProps);
24
25
  }
25
26
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"FluencyModel.d.ts","sourceRoot":"","sources":["../../../../../../src/features/fluency/model/FluencyModel.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,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,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAEvD,KAAK,YAAY,GAAG;IAAE,SAAS,EAAE,OAAO,CAAA;CAAE,CAAA;AAE1C,KAAK,iBAAiB,GAAG;IACvB,GAAG,EAAE,EAAE,CAAA;CACR,CAAA;AAED,qBAAa,YAAY;IACvB,SAAgB,GAAG,EAAE,eAAe,CAAA;IACpC,SAAgB,MAAM,EAAE,sBAAsB,CAAA;IAC9C,SAAgB,MAAM,EAAE,kBAAkB,CAAA;IAC1C,SAAgB,OAAO,EAAE,mBAAmB,CAAA;IAC5C,SAAgB,KAAK,EAAE,iBAAiB,CAAA;IACxC,SAAgB,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,CAAA;IAE3D,SAAgB,OAAO,gDAA6B;IACpD,SAAgB,KAAK,gDAA8C;gBAEvD,EAAE,GAAG,EAAE,EAAE,iBAAiB;CAkBvC"}
1
+ {"version":3,"file":"FluencyModel.d.ts","sourceRoot":"","sources":["../../../../../../src/features/fluency/model/FluencyModel.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,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,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAEvD,KAAK,YAAY,GAAG;IAAE,SAAS,EAAE,OAAO,CAAA;CAAE,CAAA;AAE1C,KAAK,iBAAiB,GAAG;IACvB,GAAG,EAAE,EAAE,CAAA;CACR,CAAA;AAED,qBAAa,YAAY;IACvB,SAAgB,GAAG,EAAE,eAAe,CAAA;IACpC,SAAgB,MAAM,EAAE,sBAAsB,CAAA;IAC9C,SAAgB,MAAM,EAAE,kBAAkB,CAAA;IAC1C,SAAgB,OAAO,EAAE,mBAAmB,CAAA;IAC5C,SAAgB,KAAK,EAAE,iBAAiB,CAAA;IACxC,SAAgB,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,CAAA;IAE3D,SAAgB,OAAO,gDAA6B;IACpD,SAAgB,KAAK,gDAA8C;IAE5D,WAAW,IAAI,OAAO;gBAIjB,EAAE,GAAG,EAAE,EAAE,iBAAiB;CAkBvC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@magmamath/students-features",
3
- "version": "1.3.26-rc.2",
3
+ "version": "1.3.26-rc.3",
4
4
  "description": "Magmamath features library",
5
5
  "source": "src/index.ts",
6
6
  "main": "src/index.ts",
@@ -5,15 +5,21 @@ import { FluencyEquationCard } from './FluencyEquationCard'
5
5
  import { SPACING } from '@magmamath/react-native-ui'
6
6
  import { useFluency } from '../../context/FluencyContext'
7
7
  import { useCardSnapAnimation } from '../../hooks/useCardSnapAnimation'
8
+ import { useSuccessSound } from '../../hooks/useSuccessSound'
8
9
  import { isWeb } from '../../../../shared/common.constants'
9
10
 
10
11
  export const FluencySolvingCard = () => {
11
12
  const { model } = useFluency()
12
13
  const animation = useCardSnapAnimation()
14
+ const { play: playSuccess } = useSuccessSound()
13
15
 
14
- const submit = async () => {
15
- const { isCorrect } = await model.submitFx()
16
+ const submit = () => {
17
+ const input = model.input.$state.getState()
18
+ const problem = model.solving.$problem.getState()
19
+ const isCorrect = Number(input) === problem.answer
20
+ if (isCorrect) playSuccess()
16
21
  animation.trigger(isCorrect ? 'right' : 'left')
22
+ void model.submitFx()
17
23
  }
18
24
 
19
25
  useEffect(() => {
@@ -0,0 +1,21 @@
1
+ import { useEffect, useRef } from 'react'
2
+ import { AudioPlayer, createAudioPlayer } from 'expo-audio'
3
+ // @ts-ignore
4
+ import SUCCESS_SOUND from '../assets/success.mp3'
5
+
6
+ export const useSuccessSound = () => {
7
+ const playerRef = useRef<AudioPlayer | null>(null)
8
+
9
+ useEffect(() => {
10
+ const player = createAudioPlayer(SUCCESS_SOUND)
11
+ playerRef.current = player
12
+ return () => player.remove()
13
+ }, [])
14
+
15
+ const play = () => {
16
+ playerRef.current?.seekTo(0)
17
+ playerRef.current?.play()
18
+ }
19
+
20
+ return { play }
21
+ }
@@ -24,6 +24,10 @@ export class FluencyModel {
24
24
  public readonly setMode = createEvent<FluencyMode>()
25
25
  public readonly $mode = restore(this.setMode, FluencyMode.ADDITION)
26
26
 
27
+ public checkAnswer(): boolean {
28
+ return Number(this.input.$state.getState()) === this.solving.$problem.getState().answer
29
+ }
30
+
27
31
  constructor({ api }: FluencyModelProps) {
28
32
  this.api = new FluencyApiModel(api)
29
33
  this.streak = new FluencyDaysStreakModel()