@magmamath/students-features 1.2.0 → 1.2.1-rc.10

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 (398) hide show
  1. package/dist/commonjs/features/chatbot/components/ChatInput/ChatInput.js +2 -1
  2. package/dist/commonjs/features/chatbot/components/ChatInput/ChatInput.js.map +1 -1
  3. package/dist/commonjs/features/chatbot/components/ChatMessage/MessageContent.js +2 -1
  4. package/dist/commonjs/features/chatbot/components/ChatMessage/MessageContent.js.map +1 -1
  5. package/dist/commonjs/features/endOfAssignment/components/AssessmentScoreCard/AssessmentScoreCard.js +1 -1
  6. package/dist/commonjs/features/endOfAssignment/components/AssessmentScoreCard/AssessmentScoreCard.js.map +1 -1
  7. package/dist/commonjs/features/pmProgress/PmProgress.js +62 -0
  8. package/dist/commonjs/features/pmProgress/PmProgress.js.map +1 -0
  9. package/dist/commonjs/features/pmProgress/components/chart/chart.helpers.js +22 -0
  10. package/dist/commonjs/features/pmProgress/components/chart/chart.helpers.js.map +1 -0
  11. package/dist/commonjs/features/pmProgress/components/chart/chart.types.js +2 -0
  12. package/dist/commonjs/features/pmProgress/components/chart/chart.types.js.map +1 -0
  13. package/dist/commonjs/features/pmProgress/components/chart/components/PracticeProgressPieChart.js +44 -0
  14. package/dist/commonjs/features/pmProgress/components/chart/components/PracticeProgressPieChart.js.map +1 -0
  15. package/dist/commonjs/features/pmProgress/components/chart/components/SlicesClipPaths.js +26 -0
  16. package/dist/commonjs/features/pmProgress/components/chart/components/SlicesClipPaths.js.map +1 -0
  17. package/dist/commonjs/features/pmProgress/components/chart/components/SlicesPaths.js +69 -0
  18. package/dist/commonjs/features/pmProgress/components/chart/components/SlicesPaths.js.map +1 -0
  19. package/dist/commonjs/features/pmProgress/components/chart/components/layers/SliceArcPattern.js +38 -0
  20. package/dist/commonjs/features/pmProgress/components/chart/components/layers/SliceArcPattern.js.map +1 -0
  21. package/dist/commonjs/features/pmProgress/components/chart/components/layers/SliceBackgroundColor.js +21 -0
  22. package/dist/commonjs/features/pmProgress/components/chart/components/layers/SliceBackgroundColor.js.map +1 -0
  23. package/dist/commonjs/features/pmProgress/components/chart/components/layers/SliceFillColor.js +82 -0
  24. package/dist/commonjs/features/pmProgress/components/chart/components/layers/SliceFillColor.js.map +1 -0
  25. package/dist/commonjs/features/pmProgress/components/chart/model/ArcPatternGenerator.js +49 -0
  26. package/dist/commonjs/features/pmProgress/components/chart/model/ArcPatternGenerator.js.map +1 -0
  27. package/dist/commonjs/features/pmProgress/components/chart/model/PieChartManager.js +25 -0
  28. package/dist/commonjs/features/pmProgress/components/chart/model/PieChartManager.js.map +1 -0
  29. package/dist/commonjs/features/pmProgress/components/chart/model/SliceHighlight.js +20 -0
  30. package/dist/commonjs/features/pmProgress/components/chart/model/SliceHighlight.js.map +1 -0
  31. package/dist/commonjs/features/pmProgress/components/chart/model/SliceShapeGenerator.js +79 -0
  32. package/dist/commonjs/features/pmProgress/components/chart/model/SliceShapeGenerator.js.map +1 -0
  33. package/dist/commonjs/features/pmProgress/components/header/PmProgressHeader.js +199 -0
  34. package/dist/commonjs/features/pmProgress/components/header/PmProgressHeader.js.map +1 -0
  35. package/dist/commonjs/features/pmProgress/components/insights/PmInsights.js +71 -0
  36. package/dist/commonjs/features/pmProgress/components/insights/PmInsights.js.map +1 -0
  37. package/dist/commonjs/features/pmProgress/components/insights/PmTimeframeStats.js +95 -0
  38. package/dist/commonjs/features/pmProgress/components/insights/PmTimeframeStats.js.map +1 -0
  39. package/dist/commonjs/features/pmProgress/components/insights/StatsCard.js +71 -0
  40. package/dist/commonjs/features/pmProgress/components/insights/StatsCard.js.map +1 -0
  41. package/dist/commonjs/features/pmProgress/components/list/Fluency.js +70 -0
  42. package/dist/commonjs/features/pmProgress/components/list/Fluency.js.map +1 -0
  43. package/dist/commonjs/features/pmProgress/components/list/ListCard.js +187 -0
  44. package/dist/commonjs/features/pmProgress/components/list/ListCard.js.map +1 -0
  45. package/dist/commonjs/features/pmProgress/components/list/ListItem.js +119 -0
  46. package/dist/commonjs/features/pmProgress/components/list/ListItem.js.map +1 -0
  47. package/dist/commonjs/features/pmProgress/components/list/PmDomainList.js +86 -0
  48. package/dist/commonjs/features/pmProgress/components/list/PmDomainList.js.map +1 -0
  49. package/dist/commonjs/features/pmProgress/components/recs/PmTeacherRecs.js +118 -0
  50. package/dist/commonjs/features/pmProgress/components/recs/PmTeacherRecs.js.map +1 -0
  51. package/dist/commonjs/features/pmProgress/context/PmProgressContext.js +18 -0
  52. package/dist/commonjs/features/pmProgress/context/PmProgressContext.js.map +1 -0
  53. package/dist/commonjs/features/pmProgress/index.js +36 -0
  54. package/dist/commonjs/features/pmProgress/index.js.map +1 -0
  55. package/dist/commonjs/features/pmProgress/model/PmInsightsModel.js +22 -0
  56. package/dist/commonjs/features/pmProgress/model/PmInsightsModel.js.map +1 -0
  57. package/dist/commonjs/features/pmProgress/model/PmProgressApi.js +18 -0
  58. package/dist/commonjs/features/pmProgress/model/PmProgressApi.js.map +1 -0
  59. package/dist/commonjs/features/pmProgress/model/PmProgressModel.js +45 -0
  60. package/dist/commonjs/features/pmProgress/model/PmProgressModel.js.map +1 -0
  61. package/dist/commonjs/features/pmProgress/model/PmRecommendationsModel.js +47 -0
  62. package/dist/commonjs/features/pmProgress/model/PmRecommendationsModel.js.map +1 -0
  63. package/dist/commonjs/features/pmProgress/model/PmSolvingFlowModel.js +79 -0
  64. package/dist/commonjs/features/pmProgress/model/PmSolvingFlowModel.js.map +1 -0
  65. package/dist/commonjs/features/pmProgress/model/PmTreeModel.js +148 -0
  66. package/dist/commonjs/features/pmProgress/model/PmTreeModel.js.map +1 -0
  67. package/dist/commonjs/features/pmProgress/shared/pmProgress.constants.js +33 -0
  68. package/dist/commonjs/features/pmProgress/shared/pmProgress.constants.js.map +1 -0
  69. package/dist/commonjs/features/pmProgress/shared/pmProgress.helpers.js +193 -0
  70. package/dist/commonjs/features/pmProgress/shared/pmProgress.helpers.js.map +1 -0
  71. package/dist/commonjs/features/pmProgress/shared/pmProgress.types.js +12 -0
  72. package/dist/commonjs/features/pmProgress/shared/pmProgress.types.js.map +1 -0
  73. package/dist/commonjs/index.js +15 -3
  74. package/dist/commonjs/index.js.map +1 -1
  75. package/dist/commonjs/shared/icons/PentagonIcon.js +32 -0
  76. package/dist/commonjs/shared/icons/PentagonIcon.js.map +1 -0
  77. package/dist/commonjs/shared/icons/SketchArrowRight.js +33 -0
  78. package/dist/commonjs/shared/icons/SketchArrowRight.js.map +1 -0
  79. package/dist/commonjs/shared/icons/SliceDiamondIcon.js +32 -0
  80. package/dist/commonjs/shared/icons/SliceDiamondIcon.js.map +1 -0
  81. package/dist/commonjs/shared/icons/StarIcon.js +32 -0
  82. package/dist/commonjs/shared/icons/StarIcon.js.map +1 -0
  83. package/dist/commonjs/shared/icons/TimerIcon.js +35 -0
  84. package/dist/commonjs/shared/icons/TimerIcon.js.map +1 -0
  85. package/dist/commonjs/shared/translation/localization/ca.json +19 -0
  86. package/dist/commonjs/shared/translation/localization/de.json +19 -0
  87. package/dist/commonjs/shared/translation/localization/en.json +19 -0
  88. package/dist/commonjs/shared/translation/localization/gb.json +19 -0
  89. package/dist/commonjs/shared/translation/localization/sct.json +19 -0
  90. package/dist/commonjs/shared/translation/localization/sw.json +19 -0
  91. package/dist/module/features/chatbot/components/ChatInput/ChatInput.js +2 -1
  92. package/dist/module/features/chatbot/components/ChatInput/ChatInput.js.map +1 -1
  93. package/dist/module/features/chatbot/components/ChatMessage/MessageContent.js +2 -1
  94. package/dist/module/features/chatbot/components/ChatMessage/MessageContent.js.map +1 -1
  95. package/dist/module/features/endOfAssignment/components/AssessmentScoreCard/AssessmentScoreCard.js +2 -2
  96. package/dist/module/features/endOfAssignment/components/AssessmentScoreCard/AssessmentScoreCard.js.map +1 -1
  97. package/dist/module/features/pmProgress/PmProgress.js +56 -0
  98. package/dist/module/features/pmProgress/PmProgress.js.map +1 -0
  99. package/dist/module/features/pmProgress/components/chart/chart.helpers.js +15 -0
  100. package/dist/module/features/pmProgress/components/chart/chart.helpers.js.map +1 -0
  101. package/dist/module/features/pmProgress/components/chart/chart.types.js +2 -0
  102. package/dist/module/features/pmProgress/components/chart/chart.types.js.map +1 -0
  103. package/dist/module/features/pmProgress/components/chart/components/PracticeProgressPieChart.js +38 -0
  104. package/dist/module/features/pmProgress/components/chart/components/PracticeProgressPieChart.js.map +1 -0
  105. package/dist/module/features/pmProgress/components/chart/components/SlicesClipPaths.js +20 -0
  106. package/dist/module/features/pmProgress/components/chart/components/SlicesClipPaths.js.map +1 -0
  107. package/dist/module/features/pmProgress/components/chart/components/SlicesPaths.js +63 -0
  108. package/dist/module/features/pmProgress/components/chart/components/SlicesPaths.js.map +1 -0
  109. package/dist/module/features/pmProgress/components/chart/components/layers/SliceArcPattern.js +32 -0
  110. package/dist/module/features/pmProgress/components/chart/components/layers/SliceArcPattern.js.map +1 -0
  111. package/dist/module/features/pmProgress/components/chart/components/layers/SliceBackgroundColor.js +15 -0
  112. package/dist/module/features/pmProgress/components/chart/components/layers/SliceBackgroundColor.js.map +1 -0
  113. package/dist/module/features/pmProgress/components/chart/components/layers/SliceFillColor.js +76 -0
  114. package/dist/module/features/pmProgress/components/chart/components/layers/SliceFillColor.js.map +1 -0
  115. package/dist/module/features/pmProgress/components/chart/model/ArcPatternGenerator.js +44 -0
  116. package/dist/module/features/pmProgress/components/chart/model/ArcPatternGenerator.js.map +1 -0
  117. package/dist/module/features/pmProgress/components/chart/model/PieChartManager.js +20 -0
  118. package/dist/module/features/pmProgress/components/chart/model/PieChartManager.js.map +1 -0
  119. package/dist/module/features/pmProgress/components/chart/model/SliceHighlight.js +15 -0
  120. package/dist/module/features/pmProgress/components/chart/model/SliceHighlight.js.map +1 -0
  121. package/dist/module/features/pmProgress/components/chart/model/SliceShapeGenerator.js +74 -0
  122. package/dist/module/features/pmProgress/components/chart/model/SliceShapeGenerator.js.map +1 -0
  123. package/dist/module/features/pmProgress/components/header/PmProgressHeader.js +192 -0
  124. package/dist/module/features/pmProgress/components/header/PmProgressHeader.js.map +1 -0
  125. package/dist/module/features/pmProgress/components/insights/PmInsights.js +64 -0
  126. package/dist/module/features/pmProgress/components/insights/PmInsights.js.map +1 -0
  127. package/dist/module/features/pmProgress/components/insights/PmTimeframeStats.js +90 -0
  128. package/dist/module/features/pmProgress/components/insights/PmTimeframeStats.js.map +1 -0
  129. package/dist/module/features/pmProgress/components/insights/StatsCard.js +65 -0
  130. package/dist/module/features/pmProgress/components/insights/StatsCard.js.map +1 -0
  131. package/dist/module/features/pmProgress/components/list/Fluency.js +64 -0
  132. package/dist/module/features/pmProgress/components/list/Fluency.js.map +1 -0
  133. package/dist/module/features/pmProgress/components/list/ListCard.js +180 -0
  134. package/dist/module/features/pmProgress/components/list/ListCard.js.map +1 -0
  135. package/dist/module/features/pmProgress/components/list/ListItem.js +112 -0
  136. package/dist/module/features/pmProgress/components/list/ListItem.js.map +1 -0
  137. package/dist/module/features/pmProgress/components/list/PmDomainList.js +80 -0
  138. package/dist/module/features/pmProgress/components/list/PmDomainList.js.map +1 -0
  139. package/dist/module/features/pmProgress/components/recs/PmTeacherRecs.js +112 -0
  140. package/dist/module/features/pmProgress/components/recs/PmTeacherRecs.js.map +1 -0
  141. package/dist/module/features/pmProgress/context/PmProgressContext.js +13 -0
  142. package/dist/module/features/pmProgress/context/PmProgressContext.js.map +1 -0
  143. package/dist/module/features/pmProgress/index.js +9 -0
  144. package/dist/module/features/pmProgress/index.js.map +1 -0
  145. package/dist/module/features/pmProgress/model/PmInsightsModel.js +17 -0
  146. package/dist/module/features/pmProgress/model/PmInsightsModel.js.map +1 -0
  147. package/dist/module/features/pmProgress/model/PmProgressApi.js +13 -0
  148. package/dist/module/features/pmProgress/model/PmProgressApi.js.map +1 -0
  149. package/dist/module/features/pmProgress/model/PmProgressModel.js +40 -0
  150. package/dist/module/features/pmProgress/model/PmProgressModel.js.map +1 -0
  151. package/dist/module/features/pmProgress/model/PmRecommendationsModel.js +42 -0
  152. package/dist/module/features/pmProgress/model/PmRecommendationsModel.js.map +1 -0
  153. package/dist/module/features/pmProgress/model/PmSolvingFlowModel.js +74 -0
  154. package/dist/module/features/pmProgress/model/PmSolvingFlowModel.js.map +1 -0
  155. package/dist/module/features/pmProgress/model/PmTreeModel.js +143 -0
  156. package/dist/module/features/pmProgress/model/PmTreeModel.js.map +1 -0
  157. package/dist/module/features/pmProgress/shared/pmProgress.constants.js +30 -0
  158. package/dist/module/features/pmProgress/shared/pmProgress.constants.js.map +1 -0
  159. package/dist/module/features/pmProgress/shared/pmProgress.helpers.js +177 -0
  160. package/dist/module/features/pmProgress/shared/pmProgress.helpers.js.map +1 -0
  161. package/dist/module/features/pmProgress/shared/pmProgress.types.js +10 -0
  162. package/dist/module/features/pmProgress/shared/pmProgress.types.js.map +1 -0
  163. package/dist/module/index.js +1 -0
  164. package/dist/module/index.js.map +1 -1
  165. package/dist/module/shared/icons/PentagonIcon.js +24 -0
  166. package/dist/module/shared/icons/PentagonIcon.js.map +1 -0
  167. package/dist/module/shared/icons/SketchArrowRight.js +25 -0
  168. package/dist/module/shared/icons/SketchArrowRight.js.map +1 -0
  169. package/dist/module/shared/icons/SliceDiamondIcon.js +24 -0
  170. package/dist/module/shared/icons/SliceDiamondIcon.js.map +1 -0
  171. package/dist/module/shared/icons/StarIcon.js +24 -0
  172. package/dist/module/shared/icons/StarIcon.js.map +1 -0
  173. package/dist/module/shared/icons/TimerIcon.js +27 -0
  174. package/dist/module/shared/icons/TimerIcon.js.map +1 -0
  175. package/dist/module/shared/translation/localization/ca.json +19 -0
  176. package/dist/module/shared/translation/localization/de.json +19 -0
  177. package/dist/module/shared/translation/localization/en.json +19 -0
  178. package/dist/module/shared/translation/localization/gb.json +19 -0
  179. package/dist/module/shared/translation/localization/sct.json +19 -0
  180. package/dist/module/shared/translation/localization/sw.json +19 -0
  181. package/dist/typescript/commonjs/features/chatbot/components/ChatInput/ChatInput.d.ts.map +1 -1
  182. package/dist/typescript/commonjs/features/chatbot/components/ChatMessage/MessageContent.d.ts.map +1 -1
  183. package/dist/typescript/commonjs/features/pmProgress/PmProgress.d.ts +9 -0
  184. package/dist/typescript/commonjs/features/pmProgress/PmProgress.d.ts.map +1 -0
  185. package/dist/typescript/commonjs/features/pmProgress/components/chart/chart.helpers.d.ts +4 -0
  186. package/dist/typescript/commonjs/features/pmProgress/components/chart/chart.helpers.d.ts.map +1 -0
  187. package/dist/typescript/commonjs/features/pmProgress/components/chart/chart.types.d.ts +36 -0
  188. package/dist/typescript/commonjs/features/pmProgress/components/chart/chart.types.d.ts.map +1 -0
  189. package/dist/typescript/commonjs/features/pmProgress/components/chart/components/PracticeProgressPieChart.d.ts +9 -0
  190. package/dist/typescript/commonjs/features/pmProgress/components/chart/components/PracticeProgressPieChart.d.ts.map +1 -0
  191. package/dist/typescript/commonjs/features/pmProgress/components/chart/components/SlicesClipPaths.d.ts +10 -0
  192. package/dist/typescript/commonjs/features/pmProgress/components/chart/components/SlicesClipPaths.d.ts.map +1 -0
  193. package/dist/typescript/commonjs/features/pmProgress/components/chart/components/SlicesPaths.d.ts +11 -0
  194. package/dist/typescript/commonjs/features/pmProgress/components/chart/components/SlicesPaths.d.ts.map +1 -0
  195. package/dist/typescript/commonjs/features/pmProgress/components/chart/components/layers/SliceArcPattern.d.ts +12 -0
  196. package/dist/typescript/commonjs/features/pmProgress/components/chart/components/layers/SliceArcPattern.d.ts.map +1 -0
  197. package/dist/typescript/commonjs/features/pmProgress/components/chart/components/layers/SliceBackgroundColor.d.ts +8 -0
  198. package/dist/typescript/commonjs/features/pmProgress/components/chart/components/layers/SliceBackgroundColor.d.ts.map +1 -0
  199. package/dist/typescript/commonjs/features/pmProgress/components/chart/components/layers/SliceFillColor.d.ts +14 -0
  200. package/dist/typescript/commonjs/features/pmProgress/components/chart/components/layers/SliceFillColor.d.ts.map +1 -0
  201. package/dist/typescript/commonjs/features/pmProgress/components/chart/model/ArcPatternGenerator.d.ts +12 -0
  202. package/dist/typescript/commonjs/features/pmProgress/components/chart/model/ArcPatternGenerator.d.ts.map +1 -0
  203. package/dist/typescript/commonjs/features/pmProgress/components/chart/model/PieChartManager.d.ts +16 -0
  204. package/dist/typescript/commonjs/features/pmProgress/components/chart/model/PieChartManager.d.ts.map +1 -0
  205. package/dist/typescript/commonjs/features/pmProgress/components/chart/model/SliceHighlight.d.ts +10 -0
  206. package/dist/typescript/commonjs/features/pmProgress/components/chart/model/SliceHighlight.d.ts.map +1 -0
  207. package/dist/typescript/commonjs/features/pmProgress/components/chart/model/SliceShapeGenerator.d.ts +17 -0
  208. package/dist/typescript/commonjs/features/pmProgress/components/chart/model/SliceShapeGenerator.d.ts.map +1 -0
  209. package/dist/typescript/commonjs/features/pmProgress/components/header/PmProgressHeader.d.ts +3 -0
  210. package/dist/typescript/commonjs/features/pmProgress/components/header/PmProgressHeader.d.ts.map +1 -0
  211. package/dist/typescript/commonjs/features/pmProgress/components/insights/PmInsights.d.ts +3 -0
  212. package/dist/typescript/commonjs/features/pmProgress/components/insights/PmInsights.d.ts.map +1 -0
  213. package/dist/typescript/commonjs/features/pmProgress/components/insights/PmTimeframeStats.d.ts +3 -0
  214. package/dist/typescript/commonjs/features/pmProgress/components/insights/PmTimeframeStats.d.ts.map +1 -0
  215. package/dist/typescript/commonjs/features/pmProgress/components/insights/StatsCard.d.ts +10 -0
  216. package/dist/typescript/commonjs/features/pmProgress/components/insights/StatsCard.d.ts.map +1 -0
  217. package/dist/typescript/commonjs/features/pmProgress/components/list/Fluency.d.ts +8 -0
  218. package/dist/typescript/commonjs/features/pmProgress/components/list/Fluency.d.ts.map +1 -0
  219. package/dist/typescript/commonjs/features/pmProgress/components/list/ListCard.d.ts +26 -0
  220. package/dist/typescript/commonjs/features/pmProgress/components/list/ListCard.d.ts.map +1 -0
  221. package/dist/typescript/commonjs/features/pmProgress/components/list/ListItem.d.ts +10 -0
  222. package/dist/typescript/commonjs/features/pmProgress/components/list/ListItem.d.ts.map +1 -0
  223. package/dist/typescript/commonjs/features/pmProgress/components/list/PmDomainList.d.ts +3 -0
  224. package/dist/typescript/commonjs/features/pmProgress/components/list/PmDomainList.d.ts.map +1 -0
  225. package/dist/typescript/commonjs/features/pmProgress/components/recs/PmTeacherRecs.d.ts +3 -0
  226. package/dist/typescript/commonjs/features/pmProgress/components/recs/PmTeacherRecs.d.ts.map +1 -0
  227. package/dist/typescript/commonjs/features/pmProgress/context/PmProgressContext.d.ts +12 -0
  228. package/dist/typescript/commonjs/features/pmProgress/context/PmProgressContext.d.ts.map +1 -0
  229. package/dist/typescript/commonjs/features/pmProgress/index.d.ts +4 -0
  230. package/dist/typescript/commonjs/features/pmProgress/index.d.ts.map +1 -0
  231. package/dist/typescript/commonjs/features/pmProgress/model/PmInsightsModel.d.ts +14 -0
  232. package/dist/typescript/commonjs/features/pmProgress/model/PmInsightsModel.d.ts.map +1 -0
  233. package/dist/typescript/commonjs/features/pmProgress/model/PmProgressApi.d.ts +17 -0
  234. package/dist/typescript/commonjs/features/pmProgress/model/PmProgressApi.d.ts.map +1 -0
  235. package/dist/typescript/commonjs/features/pmProgress/model/PmProgressModel.d.ts +21 -0
  236. package/dist/typescript/commonjs/features/pmProgress/model/PmProgressModel.d.ts.map +1 -0
  237. package/dist/typescript/commonjs/features/pmProgress/model/PmRecommendationsModel.d.ts +102 -0
  238. package/dist/typescript/commonjs/features/pmProgress/model/PmRecommendationsModel.d.ts.map +1 -0
  239. package/dist/typescript/commonjs/features/pmProgress/model/PmSolvingFlowModel.d.ts +19 -0
  240. package/dist/typescript/commonjs/features/pmProgress/model/PmSolvingFlowModel.d.ts.map +1 -0
  241. package/dist/typescript/commonjs/features/pmProgress/model/PmTreeModel.d.ts +24 -0
  242. package/dist/typescript/commonjs/features/pmProgress/model/PmTreeModel.d.ts.map +1 -0
  243. package/dist/typescript/commonjs/features/pmProgress/shared/pmProgress.constants.d.ts +23 -0
  244. package/dist/typescript/commonjs/features/pmProgress/shared/pmProgress.constants.d.ts.map +1 -0
  245. package/dist/typescript/commonjs/features/pmProgress/shared/pmProgress.helpers.d.ts +59 -0
  246. package/dist/typescript/commonjs/features/pmProgress/shared/pmProgress.helpers.d.ts.map +1 -0
  247. package/dist/typescript/commonjs/features/pmProgress/shared/pmProgress.types.d.ts +185 -0
  248. package/dist/typescript/commonjs/features/pmProgress/shared/pmProgress.types.d.ts.map +1 -0
  249. package/dist/typescript/commonjs/index.d.ts +1 -0
  250. package/dist/typescript/commonjs/index.d.ts.map +1 -1
  251. package/dist/typescript/commonjs/shared/icons/PentagonIcon.d.ts +4 -0
  252. package/dist/typescript/commonjs/shared/icons/PentagonIcon.d.ts.map +1 -0
  253. package/dist/typescript/commonjs/shared/icons/SketchArrowRight.d.ts +4 -0
  254. package/dist/typescript/commonjs/shared/icons/SketchArrowRight.d.ts.map +1 -0
  255. package/dist/typescript/commonjs/shared/icons/SliceDiamondIcon.d.ts +4 -0
  256. package/dist/typescript/commonjs/shared/icons/SliceDiamondIcon.d.ts.map +1 -0
  257. package/dist/typescript/commonjs/shared/icons/StarIcon.d.ts +4 -0
  258. package/dist/typescript/commonjs/shared/icons/StarIcon.d.ts.map +1 -0
  259. package/dist/typescript/commonjs/shared/icons/TimerIcon.d.ts +4 -0
  260. package/dist/typescript/commonjs/shared/icons/TimerIcon.d.ts.map +1 -0
  261. package/dist/typescript/commonjs/shared/translation/constants.d.ts +114 -0
  262. package/dist/typescript/commonjs/shared/translation/constants.d.ts.map +1 -1
  263. package/dist/typescript/commonjs/shared/translation/model.d.ts +38 -0
  264. package/dist/typescript/commonjs/shared/translation/model.d.ts.map +1 -1
  265. package/dist/typescript/module/features/chatbot/components/ChatInput/ChatInput.d.ts.map +1 -1
  266. package/dist/typescript/module/features/chatbot/components/ChatMessage/MessageContent.d.ts.map +1 -1
  267. package/dist/typescript/module/features/pmProgress/PmProgress.d.ts +9 -0
  268. package/dist/typescript/module/features/pmProgress/PmProgress.d.ts.map +1 -0
  269. package/dist/typescript/module/features/pmProgress/components/chart/chart.helpers.d.ts +4 -0
  270. package/dist/typescript/module/features/pmProgress/components/chart/chart.helpers.d.ts.map +1 -0
  271. package/dist/typescript/module/features/pmProgress/components/chart/chart.types.d.ts +36 -0
  272. package/dist/typescript/module/features/pmProgress/components/chart/chart.types.d.ts.map +1 -0
  273. package/dist/typescript/module/features/pmProgress/components/chart/components/PracticeProgressPieChart.d.ts +9 -0
  274. package/dist/typescript/module/features/pmProgress/components/chart/components/PracticeProgressPieChart.d.ts.map +1 -0
  275. package/dist/typescript/module/features/pmProgress/components/chart/components/SlicesClipPaths.d.ts +10 -0
  276. package/dist/typescript/module/features/pmProgress/components/chart/components/SlicesClipPaths.d.ts.map +1 -0
  277. package/dist/typescript/module/features/pmProgress/components/chart/components/SlicesPaths.d.ts +11 -0
  278. package/dist/typescript/module/features/pmProgress/components/chart/components/SlicesPaths.d.ts.map +1 -0
  279. package/dist/typescript/module/features/pmProgress/components/chart/components/layers/SliceArcPattern.d.ts +12 -0
  280. package/dist/typescript/module/features/pmProgress/components/chart/components/layers/SliceArcPattern.d.ts.map +1 -0
  281. package/dist/typescript/module/features/pmProgress/components/chart/components/layers/SliceBackgroundColor.d.ts +8 -0
  282. package/dist/typescript/module/features/pmProgress/components/chart/components/layers/SliceBackgroundColor.d.ts.map +1 -0
  283. package/dist/typescript/module/features/pmProgress/components/chart/components/layers/SliceFillColor.d.ts +14 -0
  284. package/dist/typescript/module/features/pmProgress/components/chart/components/layers/SliceFillColor.d.ts.map +1 -0
  285. package/dist/typescript/module/features/pmProgress/components/chart/model/ArcPatternGenerator.d.ts +12 -0
  286. package/dist/typescript/module/features/pmProgress/components/chart/model/ArcPatternGenerator.d.ts.map +1 -0
  287. package/dist/typescript/module/features/pmProgress/components/chart/model/PieChartManager.d.ts +16 -0
  288. package/dist/typescript/module/features/pmProgress/components/chart/model/PieChartManager.d.ts.map +1 -0
  289. package/dist/typescript/module/features/pmProgress/components/chart/model/SliceHighlight.d.ts +10 -0
  290. package/dist/typescript/module/features/pmProgress/components/chart/model/SliceHighlight.d.ts.map +1 -0
  291. package/dist/typescript/module/features/pmProgress/components/chart/model/SliceShapeGenerator.d.ts +17 -0
  292. package/dist/typescript/module/features/pmProgress/components/chart/model/SliceShapeGenerator.d.ts.map +1 -0
  293. package/dist/typescript/module/features/pmProgress/components/header/PmProgressHeader.d.ts +3 -0
  294. package/dist/typescript/module/features/pmProgress/components/header/PmProgressHeader.d.ts.map +1 -0
  295. package/dist/typescript/module/features/pmProgress/components/insights/PmInsights.d.ts +3 -0
  296. package/dist/typescript/module/features/pmProgress/components/insights/PmInsights.d.ts.map +1 -0
  297. package/dist/typescript/module/features/pmProgress/components/insights/PmTimeframeStats.d.ts +3 -0
  298. package/dist/typescript/module/features/pmProgress/components/insights/PmTimeframeStats.d.ts.map +1 -0
  299. package/dist/typescript/module/features/pmProgress/components/insights/StatsCard.d.ts +10 -0
  300. package/dist/typescript/module/features/pmProgress/components/insights/StatsCard.d.ts.map +1 -0
  301. package/dist/typescript/module/features/pmProgress/components/list/Fluency.d.ts +8 -0
  302. package/dist/typescript/module/features/pmProgress/components/list/Fluency.d.ts.map +1 -0
  303. package/dist/typescript/module/features/pmProgress/components/list/ListCard.d.ts +26 -0
  304. package/dist/typescript/module/features/pmProgress/components/list/ListCard.d.ts.map +1 -0
  305. package/dist/typescript/module/features/pmProgress/components/list/ListItem.d.ts +10 -0
  306. package/dist/typescript/module/features/pmProgress/components/list/ListItem.d.ts.map +1 -0
  307. package/dist/typescript/module/features/pmProgress/components/list/PmDomainList.d.ts +3 -0
  308. package/dist/typescript/module/features/pmProgress/components/list/PmDomainList.d.ts.map +1 -0
  309. package/dist/typescript/module/features/pmProgress/components/recs/PmTeacherRecs.d.ts +3 -0
  310. package/dist/typescript/module/features/pmProgress/components/recs/PmTeacherRecs.d.ts.map +1 -0
  311. package/dist/typescript/module/features/pmProgress/context/PmProgressContext.d.ts +12 -0
  312. package/dist/typescript/module/features/pmProgress/context/PmProgressContext.d.ts.map +1 -0
  313. package/dist/typescript/module/features/pmProgress/index.d.ts +4 -0
  314. package/dist/typescript/module/features/pmProgress/index.d.ts.map +1 -0
  315. package/dist/typescript/module/features/pmProgress/model/PmInsightsModel.d.ts +14 -0
  316. package/dist/typescript/module/features/pmProgress/model/PmInsightsModel.d.ts.map +1 -0
  317. package/dist/typescript/module/features/pmProgress/model/PmProgressApi.d.ts +17 -0
  318. package/dist/typescript/module/features/pmProgress/model/PmProgressApi.d.ts.map +1 -0
  319. package/dist/typescript/module/features/pmProgress/model/PmProgressModel.d.ts +21 -0
  320. package/dist/typescript/module/features/pmProgress/model/PmProgressModel.d.ts.map +1 -0
  321. package/dist/typescript/module/features/pmProgress/model/PmRecommendationsModel.d.ts +102 -0
  322. package/dist/typescript/module/features/pmProgress/model/PmRecommendationsModel.d.ts.map +1 -0
  323. package/dist/typescript/module/features/pmProgress/model/PmSolvingFlowModel.d.ts +19 -0
  324. package/dist/typescript/module/features/pmProgress/model/PmSolvingFlowModel.d.ts.map +1 -0
  325. package/dist/typescript/module/features/pmProgress/model/PmTreeModel.d.ts +24 -0
  326. package/dist/typescript/module/features/pmProgress/model/PmTreeModel.d.ts.map +1 -0
  327. package/dist/typescript/module/features/pmProgress/shared/pmProgress.constants.d.ts +23 -0
  328. package/dist/typescript/module/features/pmProgress/shared/pmProgress.constants.d.ts.map +1 -0
  329. package/dist/typescript/module/features/pmProgress/shared/pmProgress.helpers.d.ts +59 -0
  330. package/dist/typescript/module/features/pmProgress/shared/pmProgress.helpers.d.ts.map +1 -0
  331. package/dist/typescript/module/features/pmProgress/shared/pmProgress.types.d.ts +185 -0
  332. package/dist/typescript/module/features/pmProgress/shared/pmProgress.types.d.ts.map +1 -0
  333. package/dist/typescript/module/index.d.ts +1 -0
  334. package/dist/typescript/module/index.d.ts.map +1 -1
  335. package/dist/typescript/module/shared/icons/PentagonIcon.d.ts +4 -0
  336. package/dist/typescript/module/shared/icons/PentagonIcon.d.ts.map +1 -0
  337. package/dist/typescript/module/shared/icons/SketchArrowRight.d.ts +4 -0
  338. package/dist/typescript/module/shared/icons/SketchArrowRight.d.ts.map +1 -0
  339. package/dist/typescript/module/shared/icons/SliceDiamondIcon.d.ts +4 -0
  340. package/dist/typescript/module/shared/icons/SliceDiamondIcon.d.ts.map +1 -0
  341. package/dist/typescript/module/shared/icons/StarIcon.d.ts +4 -0
  342. package/dist/typescript/module/shared/icons/StarIcon.d.ts.map +1 -0
  343. package/dist/typescript/module/shared/icons/TimerIcon.d.ts +4 -0
  344. package/dist/typescript/module/shared/icons/TimerIcon.d.ts.map +1 -0
  345. package/dist/typescript/module/shared/translation/constants.d.ts +114 -0
  346. package/dist/typescript/module/shared/translation/constants.d.ts.map +1 -1
  347. package/dist/typescript/module/shared/translation/model.d.ts +38 -0
  348. package/dist/typescript/module/shared/translation/model.d.ts.map +1 -1
  349. package/package.json +13 -2
  350. package/src/features/chatbot/components/ChatInput/ChatInput.tsx +2 -1
  351. package/src/features/chatbot/components/ChatMessage/MessageContent.tsx +2 -1
  352. package/src/features/endOfAssignment/components/AssessmentScoreCard/AssessmentScoreCard.tsx +2 -2
  353. package/src/features/pmProgress/PmProgress.tsx +52 -0
  354. package/src/features/pmProgress/__tests__/.keep +0 -0
  355. package/src/features/pmProgress/components/chart/chart.helpers.ts +14 -0
  356. package/src/features/pmProgress/components/chart/chart.types.ts +37 -0
  357. package/src/features/pmProgress/components/chart/components/PracticeProgressPieChart.tsx +32 -0
  358. package/src/features/pmProgress/components/chart/components/SlicesClipPaths.tsx +22 -0
  359. package/src/features/pmProgress/components/chart/components/SlicesPaths.tsx +75 -0
  360. package/src/features/pmProgress/components/chart/components/layers/SliceArcPattern.tsx +44 -0
  361. package/src/features/pmProgress/components/chart/components/layers/SliceBackgroundColor.tsx +11 -0
  362. package/src/features/pmProgress/components/chart/components/layers/SliceFillColor.tsx +88 -0
  363. package/src/features/pmProgress/components/chart/model/ArcPatternGenerator.ts +48 -0
  364. package/src/features/pmProgress/components/chart/model/PieChartManager.ts +20 -0
  365. package/src/features/pmProgress/components/chart/model/SliceHighlight.ts +17 -0
  366. package/src/features/pmProgress/components/chart/model/SliceShapeGenerator.ts +90 -0
  367. package/src/features/pmProgress/components/header/PmProgressHeader.tsx +187 -0
  368. package/src/features/pmProgress/components/insights/PmInsights.tsx +60 -0
  369. package/src/features/pmProgress/components/insights/PmTimeframeStats.tsx +85 -0
  370. package/src/features/pmProgress/components/insights/StatsCard.tsx +53 -0
  371. package/src/features/pmProgress/components/list/Fluency.tsx +59 -0
  372. package/src/features/pmProgress/components/list/ListCard.tsx +216 -0
  373. package/src/features/pmProgress/components/list/ListItem.tsx +132 -0
  374. package/src/features/pmProgress/components/list/PmDomainList.tsx +66 -0
  375. package/src/features/pmProgress/components/recs/PmTeacherRecs.tsx +108 -0
  376. package/src/features/pmProgress/context/PmProgressContext.tsx +23 -0
  377. package/src/features/pmProgress/index.ts +6 -0
  378. package/src/features/pmProgress/model/PmInsightsModel.ts +23 -0
  379. package/src/features/pmProgress/model/PmProgressApi.ts +34 -0
  380. package/src/features/pmProgress/model/PmProgressModel.ts +50 -0
  381. package/src/features/pmProgress/model/PmRecommendationsModel.ts +47 -0
  382. package/src/features/pmProgress/model/PmSolvingFlowModel.ts +105 -0
  383. package/src/features/pmProgress/model/PmTreeModel.ts +148 -0
  384. package/src/features/pmProgress/shared/pmProgress.constants.ts +73 -0
  385. package/src/features/pmProgress/shared/pmProgress.helpers.ts +239 -0
  386. package/src/features/pmProgress/shared/pmProgress.types.ts +207 -0
  387. package/src/index.ts +1 -0
  388. package/src/shared/icons/PentagonIcon.tsx +17 -0
  389. package/src/shared/icons/SketchArrowRight.tsx +18 -0
  390. package/src/shared/icons/SliceDiamondIcon.tsx +16 -0
  391. package/src/shared/icons/StarIcon.tsx +17 -0
  392. package/src/shared/icons/TimerIcon.tsx +21 -0
  393. package/src/shared/translation/localization/ca.json +19 -0
  394. package/src/shared/translation/localization/de.json +19 -0
  395. package/src/shared/translation/localization/en.json +19 -0
  396. package/src/shared/translation/localization/gb.json +19 -0
  397. package/src/shared/translation/localization/sct.json +19 -0
  398. package/src/shared/translation/localization/sw.json +19 -0
@@ -0,0 +1,59 @@
1
+ import React from 'react'
2
+ import { StyleSheet, View } from 'react-native'
3
+ import { ListCard } from './ListCard'
4
+ import { COLORS, SPACING } from '@magmamath/react-native-ui'
5
+ import { SliceDiamondIcon } from '../../../../shared/icons/SliceDiamondIcon'
6
+ import { useText } from '../../../../shared/translation'
7
+ import { useUnit } from 'effector-react'
8
+ import { CustomDomain, SolvingFlow } from '../../shared/pmProgress.constants'
9
+ import { Domain } from '../../shared/pmProgress.types'
10
+ import { usePmProgress } from '../../context/PmProgressContext'
11
+
12
+ type FluencyProps = {
13
+ data: Domain | undefined
14
+ }
15
+
16
+ export const Fluency = ({ data }: FluencyProps) => {
17
+ const t = useText()
18
+ const { model, onStandardPress } = usePmProgress()
19
+ const highlightedId = useUnit(model.tree.$highlightedId)
20
+
21
+ if (!data) return null
22
+
23
+ return (
24
+ <View style={styles.container}>
25
+ <View style={styles.separator} />
26
+ <ListCard
27
+ title={t('pmProgress.fluency')}
28
+ items={data.standards.map((standard) => ({ ...standard, id: standard.standardId }))}
29
+ progress={data.scorePercentage}
30
+ color={COLORS.PRIMARY_ORANGE}
31
+ onPress={() => model.tree.setHighlightedId(CustomDomain.FLUENCY)}
32
+ onItemPress={async (item) => {
33
+ const skill = await model.solving.start({
34
+ type: SolvingFlow.STANDARD,
35
+ standardId: item.standardId,
36
+ })
37
+ // @ts-ignore
38
+ onStandardPress?.(skill)
39
+ }}
40
+ isFirst
41
+ isLast
42
+ isExpanded={highlightedId === CustomDomain.FLUENCY}
43
+ icon={<SliceDiamondIcon color={COLORS.PRIMARY_ORANGE} />}
44
+ />
45
+ </View>
46
+ )
47
+ }
48
+
49
+ const styles = StyleSheet.create({
50
+ container: {
51
+ marginBottom: SPACING[800],
52
+ },
53
+ separator: {
54
+ height: 1,
55
+ marginHorizontal: SPACING[100],
56
+ marginVertical: SPACING[200],
57
+ backgroundColor: COLORS.NEUTRAL_4,
58
+ },
59
+ })
@@ -0,0 +1,216 @@
1
+ import React, { useState } from 'react'
2
+ import { Pressable, View, StyleSheet } from 'react-native'
3
+ import {
4
+ BORDER_RADIUS,
5
+ CaretDownIcon,
6
+ CaretRightIcon,
7
+ COLORS,
8
+ HeadingVariants,
9
+ SPACING,
10
+ Typography,
11
+ } from '@magmamath/react-native-ui'
12
+ import { ListItem } from './ListItem'
13
+ import { useText } from '../../../../shared/translation'
14
+ import { SkillsCount } from '../../shared/pmProgress.types'
15
+
16
+ const HEADER_HEIGHT = 60
17
+ const PROGRESS_BAR_WIDTH = 50
18
+ const PROGRESS_BAR_HEIGHT = 10
19
+
20
+ export type ListCardItem = {
21
+ id: string
22
+ title: string
23
+ subtitle: string
24
+ skillsCount: SkillsCount
25
+ }
26
+
27
+ function getVisibleItems<T>(items: T[], maxItems?: number) {
28
+ const visible = maxItems != null ? items.slice(0, maxItems) : items
29
+ const remainingCount = maxItems != null ? Math.max(0, items.length - maxItems) : 0
30
+ return { visible, remainingCount }
31
+ }
32
+
33
+ type ListCardProps<T extends ListCardItem> = {
34
+ title: string
35
+ icon: React.ReactElement
36
+ color: string
37
+ items: T[]
38
+ onItemPress?: (item: T) => void
39
+ isExpanded?: boolean
40
+ onPress?: () => void
41
+ progress?: number
42
+ rightContent?: React.ReactNode
43
+ isFirst?: boolean
44
+ isLast?: boolean
45
+ maxItems?: number
46
+ expandedColor?: string
47
+ }
48
+
49
+ export const ListCard = <T extends ListCardItem>({
50
+ title,
51
+ icon,
52
+ color,
53
+ items,
54
+ isExpanded = false,
55
+ onPress,
56
+ onItemPress,
57
+ progress = 0,
58
+ rightContent,
59
+ isFirst,
60
+ isLast,
61
+ maxItems,
62
+ expandedColor = COLORS.NEUTRAL_3,
63
+ }: ListCardProps<T>) => {
64
+ const t = useText()
65
+ const [isHovered, setIsHovered] = useState(false)
66
+
67
+ const { visible, remainingCount } = getVisibleItems(items, maxItems)
68
+ const isHighlighted = isHovered || isExpanded
69
+
70
+ const Caret = isExpanded ? CaretDownIcon : CaretRightIcon
71
+
72
+ return (
73
+ <View
74
+ style={[
75
+ styles.container,
76
+ !isFirst && styles.containerCollapsed,
77
+ isFirst && styles.containerFirst,
78
+ isLast && styles.containerLast,
79
+ isHighlighted && { backgroundColor: expandedColor },
80
+ ]}
81
+ >
82
+ <Pressable
83
+ style={[
84
+ styles.header,
85
+ isFirst && styles.headerFirst,
86
+ isLast && !isExpanded && styles.headerLast,
87
+ isHighlighted && { backgroundColor: expandedColor },
88
+ ]}
89
+ onPress={onPress}
90
+ onHoverIn={() => setIsHovered(true)}
91
+ onHoverOut={() => setIsHovered(false)}
92
+ >
93
+ {icon}
94
+ <View style={styles.caret}>
95
+ <Caret color={COLORS.NEUTRAL_9} />
96
+ </View>
97
+ <Typography variant={HeadingVariants.H6} style={styles.title}>
98
+ {title}
99
+ </Typography>
100
+ {rightContent ?? (
101
+ <View style={styles.progress}>
102
+ <Typography variant={HeadingVariants.H7} style={[styles.percentage, { color }]}>
103
+ {Math.round(progress)}%
104
+ </Typography>
105
+ <View style={styles.track}>
106
+ <View
107
+ style={[styles.fill, { width: `${Math.round(progress)}%`, backgroundColor: color }]}
108
+ />
109
+ </View>
110
+ </View>
111
+ )}
112
+ </Pressable>
113
+ {isExpanded && (
114
+ <View style={[styles.items, isLast && styles.itemsLast]}>
115
+ {visible.map((item) => {
116
+ const skillsLeft = item.skillsCount.total - item.skillsCount.achieved
117
+ return (
118
+ <ListItem
119
+ key={item.id}
120
+ title={item.title}
121
+ skillsLeft={skillsLeft}
122
+ subtitle={item.subtitle}
123
+ isFinished={skillsLeft === 0}
124
+ onPress={() => onItemPress?.(item)}
125
+ />
126
+ )
127
+ })}
128
+ {remainingCount > 0 && (
129
+ <Typography variant={HeadingVariants.H8} style={styles.moreText}>
130
+ {t('pmProgress.andMore', { count: `${remainingCount}` })}
131
+ </Typography>
132
+ )}
133
+ </View>
134
+ )}
135
+ </View>
136
+ )
137
+ }
138
+
139
+ const styles = StyleSheet.create({
140
+ container: {
141
+ justifyContent: 'center',
142
+ backgroundColor: COLORS.NEUTRAL_2,
143
+ overflow: 'hidden',
144
+ cursor: 'pointer',
145
+ },
146
+ containerCollapsed: {
147
+ marginTop: -1,
148
+ },
149
+ containerFirst: {
150
+ borderTopLeftRadius: BORDER_RADIUS[200],
151
+ borderTopRightRadius: BORDER_RADIUS[200],
152
+ },
153
+ containerLast: {
154
+ borderBottomLeftRadius: BORDER_RADIUS[200],
155
+ borderBottomRightRadius: BORDER_RADIUS[200],
156
+ },
157
+ header: {
158
+ flexDirection: 'row',
159
+ alignItems: 'center',
160
+ height: HEADER_HEIGHT,
161
+ padding: SPACING[400],
162
+ backgroundColor: COLORS.NEUTRAL_2,
163
+ borderWidth: 1,
164
+ borderColor: COLORS.NEUTRAL_4,
165
+ cursor: 'pointer',
166
+ },
167
+ headerFirst: {
168
+ borderTopLeftRadius: BORDER_RADIUS[200],
169
+ borderTopRightRadius: BORDER_RADIUS[200],
170
+ },
171
+ headerLast: {
172
+ borderBottomLeftRadius: BORDER_RADIUS[200],
173
+ borderBottomRightRadius: BORDER_RADIUS[200],
174
+ },
175
+ caret: {
176
+ marginLeft: SPACING[400],
177
+ },
178
+ title: {
179
+ color: COLORS.NEUTRAL_9,
180
+ marginLeft: SPACING[200],
181
+ flex: 1,
182
+ },
183
+ progress: {
184
+ flexDirection: 'row',
185
+ alignItems: 'center',
186
+ gap: SPACING[200],
187
+ },
188
+ percentage: {
189
+ textAlign: 'right',
190
+ },
191
+ track: {
192
+ width: PROGRESS_BAR_WIDTH,
193
+ height: PROGRESS_BAR_HEIGHT,
194
+ backgroundColor: COLORS.NEUTRAL_4,
195
+ borderRadius: BORDER_RADIUS[200],
196
+ overflow: 'hidden',
197
+ },
198
+ fill: {
199
+ height: '100%',
200
+ borderRadius: BORDER_RADIUS[200],
201
+ },
202
+ items: {
203
+ gap: SPACING[200],
204
+ padding: SPACING[200],
205
+ backgroundColor: COLORS.NEUTRAL_1,
206
+ },
207
+ itemsLast: {
208
+ borderBottomLeftRadius: BORDER_RADIUS[200],
209
+ borderBottomRightRadius: BORDER_RADIUS[200],
210
+ },
211
+ moreText: {
212
+ textAlign: 'center',
213
+ color: COLORS.NEUTRAL_7,
214
+ marginVertical: SPACING[200],
215
+ },
216
+ })
@@ -0,0 +1,132 @@
1
+ import React, { useState } from 'react'
2
+ import { View, Pressable, StyleSheet } from 'react-native'
3
+ import {
4
+ ArrowRightIcon,
5
+ CheckIcon,
6
+ COLORS,
7
+ FONT_FAMILY,
8
+ HeadingVariants,
9
+ Typography,
10
+ } from '@magmamath/react-native-ui'
11
+ import { useText } from '../../../../shared/translation'
12
+
13
+ const FINISHED_BG = '#EFFBF5'
14
+ const FINISHED_TITLE = '#00804A'
15
+ const FINISHED_SUBTITLE = '#29A96F'
16
+ const FINISHED_ICON = '#5CD497'
17
+ const CARD_HEIGHT = 52
18
+ const ICON_SIZE = 25
19
+ const SUBTITLE_FONT_SIZE = 10
20
+ const SUBTITLE_LINE_HEIGHT = 14
21
+
22
+ export type ListItemProps = {
23
+ title: string
24
+ subtitle: string
25
+ skillsLeft: number
26
+ isFinished?: boolean
27
+ onPress?: () => void
28
+ }
29
+
30
+ export const ListItem = ({
31
+ title,
32
+ subtitle,
33
+ skillsLeft,
34
+ isFinished = false,
35
+ onPress,
36
+ }: ListItemProps) => {
37
+ const t = useText()
38
+ const [isHovered, setIsHovered] = useState(false)
39
+ return (
40
+ <Pressable
41
+ onPress={onPress}
42
+ style={[styles.card, isFinished && styles.finished, isHovered && styles.hovered]}
43
+ onHoverIn={() => setIsHovered(true)}
44
+ onHoverOut={() => setIsHovered(false)}
45
+ >
46
+ <View style={styles.content}>
47
+ <Typography
48
+ variant={HeadingVariants.H10}
49
+ style={[styles.title, isFinished && styles.titleFinished]}
50
+ numberOfLines={1}
51
+ >
52
+ {title}
53
+ </Typography>
54
+ <Typography
55
+ style={[styles.subtitle, isFinished && styles.subtitleFinished]}
56
+ numberOfLines={1}
57
+ >
58
+ {subtitle}
59
+ </Typography>
60
+ </View>
61
+ <View style={styles.trailing}>
62
+ {!isFinished && skillsLeft > 0 && (
63
+ <Typography variant={HeadingVariants.H10} style={styles.skills}>
64
+ {skillsLeft} {skillsLeft === 1 ? t('pmProgress.skillLeft') : t('pmProgress.skillsLeft')}
65
+ </Typography>
66
+ )}
67
+ <View style={styles.icon}>
68
+ {isFinished ? (
69
+ <CheckIcon color={FINISHED_ICON} />
70
+ ) : (
71
+ <ArrowRightIcon color={COLORS.NEUTRAL_9} />
72
+ )}
73
+ </View>
74
+ </View>
75
+ </Pressable>
76
+ )
77
+ }
78
+
79
+ const styles = StyleSheet.create({
80
+ card: {
81
+ flexDirection: 'row',
82
+ alignItems: 'center',
83
+ height: CARD_HEIGHT,
84
+ paddingLeft: 32,
85
+ paddingRight: 16,
86
+ backgroundColor: 'white',
87
+ borderRadius: 12,
88
+ gap: 8,
89
+ boxShadow: '0px 0px 1px 0px #33333366, 0px 1px 3px 0px #3333331A',
90
+ },
91
+ finished: {
92
+ backgroundColor: FINISHED_BG,
93
+ boxShadow: '0px 0px 1px 0px #33333366, 0px 1px 3px 0px #3333331A',
94
+ },
95
+ hovered: {
96
+ backgroundColor: '#FAFAFB',
97
+ boxShadow:
98
+ '0px 0px 1px 0px #33333366, 0px 1px 3px 0px #3333331A, 4px 4px 10px rgba(51, 51, 51, 0.15)',
99
+ },
100
+ content: {
101
+ flex: 1,
102
+ },
103
+ title: {
104
+ color: COLORS.NEUTRAL_9,
105
+ },
106
+ titleFinished: {
107
+ color: FINISHED_TITLE,
108
+ },
109
+ subtitle: {
110
+ color: COLORS.NEUTRAL_7,
111
+ fontSize: SUBTITLE_FONT_SIZE,
112
+ fontFamily: FONT_FAMILY.buenosAires,
113
+ lineHeight: SUBTITLE_LINE_HEIGHT,
114
+ },
115
+ subtitleFinished: {
116
+ color: FINISHED_SUBTITLE,
117
+ },
118
+ trailing: {
119
+ flexDirection: 'row',
120
+ alignItems: 'center',
121
+ gap: 8,
122
+ },
123
+ skills: {
124
+ color: COLORS.NEUTRAL_9,
125
+ },
126
+ icon: {
127
+ width: ICON_SIZE,
128
+ height: ICON_SIZE,
129
+ justifyContent: 'center',
130
+ alignItems: 'center',
131
+ },
132
+ })
@@ -0,0 +1,66 @@
1
+ import React from 'react'
2
+ import { StyleSheet, View } from 'react-native'
3
+ import { useUnit } from 'effector-react'
4
+ import { BORDER_RADIUS, COLORS, ScrollableList, SPACING } from '@magmamath/react-native-ui'
5
+ import { ListCard } from './ListCard'
6
+ import { Fluency } from './Fluency'
7
+ import { SliceDiamondIcon } from '../../../../shared/icons/SliceDiamondIcon'
8
+ import { usePmProgress } from '../../context/PmProgressContext'
9
+ import { isFluencyDomain } from '../../shared/pmProgress.helpers'
10
+ import { SolvingFlow } from '../../shared/pmProgress.constants'
11
+
12
+ export const PmDomainList = () => {
13
+ const { model, onStandardPress } = usePmProgress()
14
+ const domains = useUnit(model.tree.$domains)
15
+ const highlightedId = useUnit(model.tree.$highlightedId)
16
+
17
+ const fluency = domains.find(({ title }) => isFluencyDomain(title))
18
+ const list = fluency ? domains.filter(({ title }) => !isFluencyDomain(title)) : domains
19
+
20
+ return (
21
+ <View style={styles.container}>
22
+ <ScrollableList
23
+ data={list}
24
+ hideShadow
25
+ scrollbarWidth={8}
26
+ style={styles.scroll}
27
+ ListFooterComponent={<Fluency data={fluency} />}
28
+ keyExtractor={(item) => item.domainId}
29
+ renderItem={({ item, index }) => (
30
+ <ListCard
31
+ title={item.title}
32
+ items={item.standards.map((standard) => ({ ...standard, id: standard.standardId }))}
33
+ progress={item.scorePercentage}
34
+ color={item.color}
35
+ onPress={() => model.tree.setHighlightedId(item.domainId)}
36
+ onItemPress={async (item) => {
37
+ const skill = await model.solving.start({
38
+ type: SolvingFlow.STANDARD,
39
+ standardId: item.standardId,
40
+ })
41
+ // @ts-ignore
42
+ onStandardPress?.(skill)
43
+ }}
44
+ isLast={index === list.length - 1}
45
+ isFirst={index === 0}
46
+ isExpanded={highlightedId === item.domainId}
47
+ icon={<SliceDiamondIcon color={item.color} />}
48
+ />
49
+ )}
50
+ />
51
+ </View>
52
+ )
53
+ }
54
+
55
+ const styles = StyleSheet.create({
56
+ container: {
57
+ flex: 1,
58
+ overflow: 'hidden',
59
+ padding: SPACING[200],
60
+ backgroundColor: COLORS.NEUTRAL_1,
61
+ borderRadius: BORDER_RADIUS[400],
62
+ },
63
+ scroll: {
64
+ flex: 1,
65
+ },
66
+ })
@@ -0,0 +1,108 @@
1
+ import React from 'react'
2
+ import { StyleSheet, Text, View } from 'react-native'
3
+ import { ListCard } from '../list/ListCard'
4
+ import { PentagonIcon } from '../../../../shared/icons/PentagonIcon'
5
+ import {
6
+ BORDER_RADIUS,
7
+ Button,
8
+ ButtonSize,
9
+ ButtonVariant,
10
+ COLORS,
11
+ SPACING,
12
+ } from '@magmamath/react-native-ui'
13
+ import { useText } from '../../../../shared/translation'
14
+ import { useStoreMap, useUnit } from 'effector-react'
15
+ import { CustomDomain, SolvingFlow } from '../../shared/pmProgress.constants'
16
+ import { usePmProgress } from '../../context/PmProgressContext'
17
+
18
+ export const PmTeacherRecs = () => {
19
+ const t = useText()
20
+ const { model, onPracticePress, onTeacherRecommendationPress } = usePmProgress()
21
+ const highlightedId = useUnit(model.tree.$highlightedId)
22
+
23
+ // TODO: rework this, probably split and pass renderer to ListCard
24
+ const recommendations = useStoreMap(model.recommendations.$teacher, ({ items }) =>
25
+ items.map((skill) => ({
26
+ id: skill._id,
27
+ skillId: skill._id,
28
+ title: skill.nameTranslations,
29
+ subtitle: skill.shortDescriptionTranslations,
30
+ skillsCount: { total: 1, achieved: 0, failed: 0 }, // TODO: fix this to be able to determine if isFinished - I think need to find this in skillsMapping or something??
31
+ })),
32
+ )
33
+
34
+ return (
35
+ <View style={styles.container}>
36
+ <View style={styles.wrapper}>
37
+ <ListCard
38
+ title={t('pmProgress.teacherRecs')}
39
+ items={recommendations}
40
+ maxItems={3}
41
+ color={COLORS.PRIMARY_YELLOW}
42
+ expandedColor={COLORS.YELLOW_1}
43
+ onPress={() => model.tree.setHighlightedId(CustomDomain.TEACHER)}
44
+ onItemPress={async (item) => {
45
+ const skill = await model.solving.start({
46
+ type: SolvingFlow.TEACHER,
47
+ skillId: item.skillId,
48
+ })
49
+ // @ts-ignore
50
+ onPracticePress?.(skill)
51
+ }}
52
+ isLast
53
+ isFirst
54
+ isExpanded={highlightedId === CustomDomain.TEACHER}
55
+ icon={<PentagonIcon color={COLORS.PRIMARY_YELLOW} />}
56
+ rightContent={
57
+ <Button
58
+ onPress={async () => {
59
+ const skill = await model.solving.start({ type: SolvingFlow.TEACHER })
60
+
61
+ // @ts-ignore
62
+ onTeacherRecommendationPress?.(skill)
63
+ }}
64
+ size={ButtonSize.SMALL}
65
+ variant={ButtonVariant.SECONDARY}
66
+ >
67
+ {t('pmProgress.practiceButton')}
68
+ </Button>
69
+ }
70
+ />
71
+ {recommendations.length > 0 && (
72
+ <View style={styles.badge}>
73
+ <Text style={styles.text}>{recommendations.length}</Text>
74
+ </View>
75
+ )}
76
+ </View>
77
+ </View>
78
+ )
79
+ }
80
+
81
+ const styles = StyleSheet.create({
82
+ container: {
83
+ overflow: 'visible',
84
+ padding: SPACING[200],
85
+ borderRadius: BORDER_RADIUS[400],
86
+ backgroundColor: COLORS.NEUTRAL_1,
87
+ },
88
+ wrapper: {
89
+ position: 'relative',
90
+ },
91
+ badge: {
92
+ position: 'absolute',
93
+ top: -8,
94
+ right: -8,
95
+ width: 20,
96
+ height: 20,
97
+ backgroundColor: COLORS.PRIMARY_RED,
98
+ alignItems: 'center',
99
+ justifyContent: 'center',
100
+ borderRadius: '50%',
101
+ },
102
+ text: {
103
+ textAlign: 'center',
104
+ fontSize: 12,
105
+ fontWeight: '600',
106
+ color: COLORS.NEUTRAL_1,
107
+ },
108
+ })
@@ -0,0 +1,23 @@
1
+ import { createContext, useContext } from 'react'
2
+ import { PmProgressModel } from '../model/PmProgressModel'
3
+ import { Skill } from '@magmamath/students-features'
4
+
5
+ export type PmProgressContextValue = {
6
+ model: PmProgressModel
7
+ onStartPress?: (skill: Skill) => Promise<void>
8
+ onPracticePress?: (skill: Skill) => Promise<void>
9
+ onStandardPress?: (skill: Skill) => Promise<void>
10
+ onTeacherRecommendationPress?: (skill: Skill) => Promise<void>
11
+ }
12
+
13
+ const PmProgressContext = createContext<PmProgressContextValue | null>(null)
14
+
15
+ export function usePmProgress(): PmProgressContextValue {
16
+ const value = useContext(PmProgressContext)
17
+ if (!value) {
18
+ throw new Error('usePmProgress must be used within PmProgressProvider')
19
+ }
20
+ return value
21
+ }
22
+
23
+ export const PmProgressProvider = PmProgressContext.Provider
@@ -0,0 +1,6 @@
1
+ export { PmProgress } from './PmProgress'
2
+ export { PmProgressModel } from './model/PmProgressModel'
3
+ export * from './shared/pmProgress.types'
4
+
5
+ // TODO:
6
+ // !!! case when card is failed and easier card suggested !!!
@@ -0,0 +1,23 @@
1
+ import { combine, createEvent, createStore, restore } from 'effector'
2
+ import { UserTimeframeStats } from '../shared/pmProgress.types'
3
+ import { PmProgressApi } from './PmProgressApi'
4
+ import { InsightsTimeframe } from '../shared/pmProgress.constants'
5
+
6
+ export class PmInsightsModel {
7
+ public readonly setTimeframe = createEvent<InsightsTimeframe>()
8
+
9
+ private readonly $data = createStore<UserTimeframeStats['practiceModeStatsByTimeFrame'] | null>(
10
+ null,
11
+ )
12
+ public readonly $timeframe = restore(this.setTimeframe, InsightsTimeframe.WEEK)
13
+ public readonly $insights = combine(this.$data, this.$timeframe, (stats, timeframe) => {
14
+ return stats ? stats[timeframe] : null
15
+ })
16
+
17
+ constructor(private readonly api: PmProgressApi) {
18
+ this.$data.on(
19
+ this.api.getUserInsightsFx.doneData,
20
+ (_, response) => response.practiceModeStatsByTimeFrame,
21
+ )
22
+ }
23
+ }
@@ -0,0 +1,34 @@
1
+ import { createEffect } from 'effector'
2
+ import {
3
+ GetRecommendationsPayload,
4
+ RecsResponse,
5
+ StatsPayload,
6
+ StatsResponse,
7
+ TreeId,
8
+ TreeMappingResponse,
9
+ UserTimeframeStats,
10
+ } from '../shared/pmProgress.types'
11
+
12
+ export type PmProgressApiProps = {
13
+ getTree: (treeId: TreeId) => Promise<TreeMappingResponse>
14
+ getStatistics: (payload: StatsPayload) => Promise<StatsResponse>
15
+ getTeacherRecs: (payload: GetRecommendationsPayload) => Promise<RecsResponse>
16
+ getMagmaRecs: (payload: GetRecommendationsPayload) => Promise<RecsResponse>
17
+ getUserInsights: () => Promise<UserTimeframeStats>
18
+ }
19
+
20
+ export class PmProgressApi {
21
+ public readonly getTreeFx
22
+ public readonly getStatisticsFx
23
+ public readonly getTeacherRecsFx
24
+ public readonly getMagmaRecsFx
25
+ public readonly getUserInsightsFx
26
+
27
+ constructor(props: PmProgressApiProps) {
28
+ this.getTreeFx = createEffect(props.getTree)
29
+ this.getStatisticsFx = createEffect(props.getStatistics)
30
+ this.getTeacherRecsFx = createEffect(props.getTeacherRecs)
31
+ this.getMagmaRecsFx = createEffect(props.getMagmaRecs)
32
+ this.getUserInsightsFx = createEffect(() => props.getUserInsights())
33
+ }
34
+ }