@magmamath/students-features 1.2.1-rc.2 → 1.2.1-rc.21

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 (434) 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 +23 -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 +77 -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 +70 -0
  36. package/dist/commonjs/features/pmProgress/components/insights/PmInsights.js.map +1 -0
  37. package/dist/commonjs/features/pmProgress/components/insights/PmTimeframeStats.js +94 -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 +69 -0
  42. package/dist/commonjs/features/pmProgress/components/list/Fluency.js.map +1 -0
  43. package/dist/commonjs/features/pmProgress/components/list/ListCard.js +198 -0
  44. package/dist/commonjs/features/pmProgress/components/list/ListCard.js.map +1 -0
  45. package/dist/commonjs/features/pmProgress/components/list/ListItem.js +121 -0
  46. package/dist/commonjs/features/pmProgress/components/list/ListItem.js.map +1 -0
  47. package/dist/commonjs/features/pmProgress/components/list/PmDomainList.js +89 -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/components/standard/StandardTag.js +202 -0
  52. package/dist/commonjs/features/pmProgress/components/standard/StandardTag.js.map +1 -0
  53. package/dist/commonjs/features/pmProgress/context/PmProgressContext.js +18 -0
  54. package/dist/commonjs/features/pmProgress/context/PmProgressContext.js.map +1 -0
  55. package/dist/commonjs/features/pmProgress/index.js +56 -0
  56. package/dist/commonjs/features/pmProgress/index.js.map +1 -0
  57. package/dist/commonjs/features/pmProgress/model/PmHighlightModel.js +15 -0
  58. package/dist/commonjs/features/pmProgress/model/PmHighlightModel.js.map +1 -0
  59. package/dist/commonjs/features/pmProgress/model/PmInsightsModel.js +22 -0
  60. package/dist/commonjs/features/pmProgress/model/PmInsightsModel.js.map +1 -0
  61. package/dist/commonjs/features/pmProgress/model/PmProgressApi.js +18 -0
  62. package/dist/commonjs/features/pmProgress/model/PmProgressApi.js.map +1 -0
  63. package/dist/commonjs/features/pmProgress/model/PmProgressModel.js +43 -0
  64. package/dist/commonjs/features/pmProgress/model/PmProgressModel.js.map +1 -0
  65. package/dist/commonjs/features/pmProgress/model/PmRecommendationsModel.js +47 -0
  66. package/dist/commonjs/features/pmProgress/model/PmRecommendationsModel.js.map +1 -0
  67. package/dist/commonjs/features/pmProgress/model/PmSolvingFlowModel.js +100 -0
  68. package/dist/commonjs/features/pmProgress/model/PmSolvingFlowModel.js.map +1 -0
  69. package/dist/commonjs/features/pmProgress/model/PmTreeModel.js +141 -0
  70. package/dist/commonjs/features/pmProgress/model/PmTreeModel.js.map +1 -0
  71. package/dist/commonjs/features/pmProgress/shared/pmProgress.constants.js +49 -0
  72. package/dist/commonjs/features/pmProgress/shared/pmProgress.constants.js.map +1 -0
  73. package/dist/commonjs/features/pmProgress/shared/pmProgress.helpers.js +221 -0
  74. package/dist/commonjs/features/pmProgress/shared/pmProgress.helpers.js.map +1 -0
  75. package/dist/commonjs/features/pmProgress/shared/pmProgress.types.js +12 -0
  76. package/dist/commonjs/features/pmProgress/shared/pmProgress.types.js.map +1 -0
  77. package/dist/commonjs/features/voice/recording/model/VoiceRecord.model.js +0 -5
  78. package/dist/commonjs/features/voice/recording/model/VoiceRecord.model.js.map +1 -1
  79. package/dist/commonjs/features/voice/types.js +0 -6
  80. package/dist/commonjs/features/voice/types.js.map +1 -1
  81. package/dist/commonjs/index.js +15 -3
  82. package/dist/commonjs/index.js.map +1 -1
  83. package/dist/commonjs/shared/icons/PentagonIcon.js +32 -0
  84. package/dist/commonjs/shared/icons/PentagonIcon.js.map +1 -0
  85. package/dist/commonjs/shared/icons/SketchArrowRight.js +33 -0
  86. package/dist/commonjs/shared/icons/SketchArrowRight.js.map +1 -0
  87. package/dist/commonjs/shared/icons/SliceDiamondIcon.js +32 -0
  88. package/dist/commonjs/shared/icons/SliceDiamondIcon.js.map +1 -0
  89. package/dist/commonjs/shared/icons/StarIcon.js +32 -0
  90. package/dist/commonjs/shared/icons/StarIcon.js.map +1 -0
  91. package/dist/commonjs/shared/icons/TimerIcon.js +35 -0
  92. package/dist/commonjs/shared/icons/TimerIcon.js.map +1 -0
  93. package/dist/commonjs/shared/translation/localization/ca.json +19 -0
  94. package/dist/commonjs/shared/translation/localization/de.json +19 -0
  95. package/dist/commonjs/shared/translation/localization/en.json +19 -0
  96. package/dist/commonjs/shared/translation/localization/gb.json +19 -0
  97. package/dist/commonjs/shared/translation/localization/sct.json +19 -0
  98. package/dist/commonjs/shared/translation/localization/sw.json +19 -0
  99. package/dist/module/features/chatbot/components/ChatInput/ChatInput.js +2 -1
  100. package/dist/module/features/chatbot/components/ChatInput/ChatInput.js.map +1 -1
  101. package/dist/module/features/chatbot/components/ChatMessage/MessageContent.js +2 -1
  102. package/dist/module/features/chatbot/components/ChatMessage/MessageContent.js.map +1 -1
  103. package/dist/module/features/endOfAssignment/components/AssessmentScoreCard/AssessmentScoreCard.js +2 -2
  104. package/dist/module/features/endOfAssignment/components/AssessmentScoreCard/AssessmentScoreCard.js.map +1 -1
  105. package/dist/module/features/pmProgress/PmProgress.js +56 -0
  106. package/dist/module/features/pmProgress/PmProgress.js.map +1 -0
  107. package/dist/module/features/pmProgress/components/chart/chart.helpers.js +16 -0
  108. package/dist/module/features/pmProgress/components/chart/chart.helpers.js.map +1 -0
  109. package/dist/module/features/pmProgress/components/chart/chart.types.js +2 -0
  110. package/dist/module/features/pmProgress/components/chart/chart.types.js.map +1 -0
  111. package/dist/module/features/pmProgress/components/chart/components/PracticeProgressPieChart.js +38 -0
  112. package/dist/module/features/pmProgress/components/chart/components/PracticeProgressPieChart.js.map +1 -0
  113. package/dist/module/features/pmProgress/components/chart/components/SlicesClipPaths.js +20 -0
  114. package/dist/module/features/pmProgress/components/chart/components/SlicesClipPaths.js.map +1 -0
  115. package/dist/module/features/pmProgress/components/chart/components/SlicesPaths.js +71 -0
  116. package/dist/module/features/pmProgress/components/chart/components/SlicesPaths.js.map +1 -0
  117. package/dist/module/features/pmProgress/components/chart/components/layers/SliceArcPattern.js +32 -0
  118. package/dist/module/features/pmProgress/components/chart/components/layers/SliceArcPattern.js.map +1 -0
  119. package/dist/module/features/pmProgress/components/chart/components/layers/SliceBackgroundColor.js +15 -0
  120. package/dist/module/features/pmProgress/components/chart/components/layers/SliceBackgroundColor.js.map +1 -0
  121. package/dist/module/features/pmProgress/components/chart/components/layers/SliceFillColor.js +76 -0
  122. package/dist/module/features/pmProgress/components/chart/components/layers/SliceFillColor.js.map +1 -0
  123. package/dist/module/features/pmProgress/components/chart/model/ArcPatternGenerator.js +44 -0
  124. package/dist/module/features/pmProgress/components/chart/model/ArcPatternGenerator.js.map +1 -0
  125. package/dist/module/features/pmProgress/components/chart/model/PieChartManager.js +20 -0
  126. package/dist/module/features/pmProgress/components/chart/model/PieChartManager.js.map +1 -0
  127. package/dist/module/features/pmProgress/components/chart/model/SliceHighlight.js +15 -0
  128. package/dist/module/features/pmProgress/components/chart/model/SliceHighlight.js.map +1 -0
  129. package/dist/module/features/pmProgress/components/chart/model/SliceShapeGenerator.js +74 -0
  130. package/dist/module/features/pmProgress/components/chart/model/SliceShapeGenerator.js.map +1 -0
  131. package/dist/module/features/pmProgress/components/header/PmProgressHeader.js +192 -0
  132. package/dist/module/features/pmProgress/components/header/PmProgressHeader.js.map +1 -0
  133. package/dist/module/features/pmProgress/components/insights/PmInsights.js +63 -0
  134. package/dist/module/features/pmProgress/components/insights/PmInsights.js.map +1 -0
  135. package/dist/module/features/pmProgress/components/insights/PmTimeframeStats.js +89 -0
  136. package/dist/module/features/pmProgress/components/insights/PmTimeframeStats.js.map +1 -0
  137. package/dist/module/features/pmProgress/components/insights/StatsCard.js +65 -0
  138. package/dist/module/features/pmProgress/components/insights/StatsCard.js.map +1 -0
  139. package/dist/module/features/pmProgress/components/list/Fluency.js +63 -0
  140. package/dist/module/features/pmProgress/components/list/Fluency.js.map +1 -0
  141. package/dist/module/features/pmProgress/components/list/ListCard.js +191 -0
  142. package/dist/module/features/pmProgress/components/list/ListCard.js.map +1 -0
  143. package/dist/module/features/pmProgress/components/list/ListItem.js +114 -0
  144. package/dist/module/features/pmProgress/components/list/ListItem.js.map +1 -0
  145. package/dist/module/features/pmProgress/components/list/PmDomainList.js +83 -0
  146. package/dist/module/features/pmProgress/components/list/PmDomainList.js.map +1 -0
  147. package/dist/module/features/pmProgress/components/recs/PmTeacherRecs.js +112 -0
  148. package/dist/module/features/pmProgress/components/recs/PmTeacherRecs.js.map +1 -0
  149. package/dist/module/features/pmProgress/components/standard/StandardTag.js +196 -0
  150. package/dist/module/features/pmProgress/components/standard/StandardTag.js.map +1 -0
  151. package/dist/module/features/pmProgress/context/PmProgressContext.js +13 -0
  152. package/dist/module/features/pmProgress/context/PmProgressContext.js.map +1 -0
  153. package/dist/module/features/pmProgress/index.js +11 -0
  154. package/dist/module/features/pmProgress/index.js.map +1 -0
  155. package/dist/module/features/pmProgress/model/PmHighlightModel.js +10 -0
  156. package/dist/module/features/pmProgress/model/PmHighlightModel.js.map +1 -0
  157. package/dist/module/features/pmProgress/model/PmInsightsModel.js +17 -0
  158. package/dist/module/features/pmProgress/model/PmInsightsModel.js.map +1 -0
  159. package/dist/module/features/pmProgress/model/PmProgressApi.js +13 -0
  160. package/dist/module/features/pmProgress/model/PmProgressApi.js.map +1 -0
  161. package/dist/module/features/pmProgress/model/PmProgressModel.js +38 -0
  162. package/dist/module/features/pmProgress/model/PmProgressModel.js.map +1 -0
  163. package/dist/module/features/pmProgress/model/PmRecommendationsModel.js +42 -0
  164. package/dist/module/features/pmProgress/model/PmRecommendationsModel.js.map +1 -0
  165. package/dist/module/features/pmProgress/model/PmSolvingFlowModel.js +95 -0
  166. package/dist/module/features/pmProgress/model/PmSolvingFlowModel.js.map +1 -0
  167. package/dist/module/features/pmProgress/model/PmTreeModel.js +136 -0
  168. package/dist/module/features/pmProgress/model/PmTreeModel.js.map +1 -0
  169. package/dist/module/features/pmProgress/shared/pmProgress.constants.js +46 -0
  170. package/dist/module/features/pmProgress/shared/pmProgress.constants.js.map +1 -0
  171. package/dist/module/features/pmProgress/shared/pmProgress.helpers.js +202 -0
  172. package/dist/module/features/pmProgress/shared/pmProgress.helpers.js.map +1 -0
  173. package/dist/module/features/pmProgress/shared/pmProgress.types.js +10 -0
  174. package/dist/module/features/pmProgress/shared/pmProgress.types.js.map +1 -0
  175. package/dist/module/features/voice/recording/model/VoiceRecord.model.js +0 -5
  176. package/dist/module/features/voice/recording/model/VoiceRecord.model.js.map +1 -1
  177. package/dist/module/features/voice/types.js +1 -5
  178. package/dist/module/features/voice/types.js.map +1 -1
  179. package/dist/module/index.js +1 -0
  180. package/dist/module/index.js.map +1 -1
  181. package/dist/module/shared/icons/PentagonIcon.js +24 -0
  182. package/dist/module/shared/icons/PentagonIcon.js.map +1 -0
  183. package/dist/module/shared/icons/SketchArrowRight.js +25 -0
  184. package/dist/module/shared/icons/SketchArrowRight.js.map +1 -0
  185. package/dist/module/shared/icons/SliceDiamondIcon.js +24 -0
  186. package/dist/module/shared/icons/SliceDiamondIcon.js.map +1 -0
  187. package/dist/module/shared/icons/StarIcon.js +24 -0
  188. package/dist/module/shared/icons/StarIcon.js.map +1 -0
  189. package/dist/module/shared/icons/TimerIcon.js +27 -0
  190. package/dist/module/shared/icons/TimerIcon.js.map +1 -0
  191. package/dist/module/shared/translation/localization/ca.json +19 -0
  192. package/dist/module/shared/translation/localization/de.json +19 -0
  193. package/dist/module/shared/translation/localization/en.json +19 -0
  194. package/dist/module/shared/translation/localization/gb.json +19 -0
  195. package/dist/module/shared/translation/localization/sct.json +19 -0
  196. package/dist/module/shared/translation/localization/sw.json +19 -0
  197. package/dist/typescript/commonjs/features/chatbot/components/ChatInput/ChatInput.d.ts.map +1 -1
  198. package/dist/typescript/commonjs/features/chatbot/components/ChatMessage/MessageContent.d.ts.map +1 -1
  199. package/dist/typescript/commonjs/features/pmProgress/PmProgress.d.ts +9 -0
  200. package/dist/typescript/commonjs/features/pmProgress/PmProgress.d.ts.map +1 -0
  201. package/dist/typescript/commonjs/features/pmProgress/components/chart/chart.helpers.d.ts +4 -0
  202. package/dist/typescript/commonjs/features/pmProgress/components/chart/chart.helpers.d.ts.map +1 -0
  203. package/dist/typescript/commonjs/features/pmProgress/components/chart/chart.types.d.ts +36 -0
  204. package/dist/typescript/commonjs/features/pmProgress/components/chart/chart.types.d.ts.map +1 -0
  205. package/dist/typescript/commonjs/features/pmProgress/components/chart/components/PracticeProgressPieChart.d.ts +9 -0
  206. package/dist/typescript/commonjs/features/pmProgress/components/chart/components/PracticeProgressPieChart.d.ts.map +1 -0
  207. package/dist/typescript/commonjs/features/pmProgress/components/chart/components/SlicesClipPaths.d.ts +10 -0
  208. package/dist/typescript/commonjs/features/pmProgress/components/chart/components/SlicesClipPaths.d.ts.map +1 -0
  209. package/dist/typescript/commonjs/features/pmProgress/components/chart/components/SlicesPaths.d.ts +11 -0
  210. package/dist/typescript/commonjs/features/pmProgress/components/chart/components/SlicesPaths.d.ts.map +1 -0
  211. package/dist/typescript/commonjs/features/pmProgress/components/chart/components/layers/SliceArcPattern.d.ts +12 -0
  212. package/dist/typescript/commonjs/features/pmProgress/components/chart/components/layers/SliceArcPattern.d.ts.map +1 -0
  213. package/dist/typescript/commonjs/features/pmProgress/components/chart/components/layers/SliceBackgroundColor.d.ts +8 -0
  214. package/dist/typescript/commonjs/features/pmProgress/components/chart/components/layers/SliceBackgroundColor.d.ts.map +1 -0
  215. package/dist/typescript/commonjs/features/pmProgress/components/chart/components/layers/SliceFillColor.d.ts +14 -0
  216. package/dist/typescript/commonjs/features/pmProgress/components/chart/components/layers/SliceFillColor.d.ts.map +1 -0
  217. package/dist/typescript/commonjs/features/pmProgress/components/chart/model/ArcPatternGenerator.d.ts +12 -0
  218. package/dist/typescript/commonjs/features/pmProgress/components/chart/model/ArcPatternGenerator.d.ts.map +1 -0
  219. package/dist/typescript/commonjs/features/pmProgress/components/chart/model/PieChartManager.d.ts +16 -0
  220. package/dist/typescript/commonjs/features/pmProgress/components/chart/model/PieChartManager.d.ts.map +1 -0
  221. package/dist/typescript/commonjs/features/pmProgress/components/chart/model/SliceHighlight.d.ts +10 -0
  222. package/dist/typescript/commonjs/features/pmProgress/components/chart/model/SliceHighlight.d.ts.map +1 -0
  223. package/dist/typescript/commonjs/features/pmProgress/components/chart/model/SliceShapeGenerator.d.ts +17 -0
  224. package/dist/typescript/commonjs/features/pmProgress/components/chart/model/SliceShapeGenerator.d.ts.map +1 -0
  225. package/dist/typescript/commonjs/features/pmProgress/components/header/PmProgressHeader.d.ts +3 -0
  226. package/dist/typescript/commonjs/features/pmProgress/components/header/PmProgressHeader.d.ts.map +1 -0
  227. package/dist/typescript/commonjs/features/pmProgress/components/insights/PmInsights.d.ts +3 -0
  228. package/dist/typescript/commonjs/features/pmProgress/components/insights/PmInsights.d.ts.map +1 -0
  229. package/dist/typescript/commonjs/features/pmProgress/components/insights/PmTimeframeStats.d.ts +3 -0
  230. package/dist/typescript/commonjs/features/pmProgress/components/insights/PmTimeframeStats.d.ts.map +1 -0
  231. package/dist/typescript/commonjs/features/pmProgress/components/insights/StatsCard.d.ts +10 -0
  232. package/dist/typescript/commonjs/features/pmProgress/components/insights/StatsCard.d.ts.map +1 -0
  233. package/dist/typescript/commonjs/features/pmProgress/components/list/Fluency.d.ts +8 -0
  234. package/dist/typescript/commonjs/features/pmProgress/components/list/Fluency.d.ts.map +1 -0
  235. package/dist/typescript/commonjs/features/pmProgress/components/list/ListCard.d.ts +30 -0
  236. package/dist/typescript/commonjs/features/pmProgress/components/list/ListCard.d.ts.map +1 -0
  237. package/dist/typescript/commonjs/features/pmProgress/components/list/ListItem.d.ts +11 -0
  238. package/dist/typescript/commonjs/features/pmProgress/components/list/ListItem.d.ts.map +1 -0
  239. package/dist/typescript/commonjs/features/pmProgress/components/list/PmDomainList.d.ts +3 -0
  240. package/dist/typescript/commonjs/features/pmProgress/components/list/PmDomainList.d.ts.map +1 -0
  241. package/dist/typescript/commonjs/features/pmProgress/components/recs/PmTeacherRecs.d.ts +3 -0
  242. package/dist/typescript/commonjs/features/pmProgress/components/recs/PmTeacherRecs.d.ts.map +1 -0
  243. package/dist/typescript/commonjs/features/pmProgress/components/standard/StandardTag.d.ts +9 -0
  244. package/dist/typescript/commonjs/features/pmProgress/components/standard/StandardTag.d.ts.map +1 -0
  245. package/dist/typescript/commonjs/features/pmProgress/context/PmProgressContext.d.ts +12 -0
  246. package/dist/typescript/commonjs/features/pmProgress/context/PmProgressContext.d.ts.map +1 -0
  247. package/dist/typescript/commonjs/features/pmProgress/index.d.ts +6 -0
  248. package/dist/typescript/commonjs/features/pmProgress/index.d.ts.map +1 -0
  249. package/dist/typescript/commonjs/features/pmProgress/model/PmHighlightModel.d.ts +7 -0
  250. package/dist/typescript/commonjs/features/pmProgress/model/PmHighlightModel.d.ts.map +1 -0
  251. package/dist/typescript/commonjs/features/pmProgress/model/PmInsightsModel.d.ts +14 -0
  252. package/dist/typescript/commonjs/features/pmProgress/model/PmInsightsModel.d.ts.map +1 -0
  253. package/dist/typescript/commonjs/features/pmProgress/model/PmProgressApi.d.ts +17 -0
  254. package/dist/typescript/commonjs/features/pmProgress/model/PmProgressApi.d.ts.map +1 -0
  255. package/dist/typescript/commonjs/features/pmProgress/model/PmProgressModel.d.ts +23 -0
  256. package/dist/typescript/commonjs/features/pmProgress/model/PmProgressModel.d.ts.map +1 -0
  257. package/dist/typescript/commonjs/features/pmProgress/model/PmRecommendationsModel.d.ts +102 -0
  258. package/dist/typescript/commonjs/features/pmProgress/model/PmRecommendationsModel.d.ts.map +1 -0
  259. package/dist/typescript/commonjs/features/pmProgress/model/PmSolvingFlowModel.d.ts +20 -0
  260. package/dist/typescript/commonjs/features/pmProgress/model/PmSolvingFlowModel.d.ts.map +1 -0
  261. package/dist/typescript/commonjs/features/pmProgress/model/PmTreeModel.d.ts +19 -0
  262. package/dist/typescript/commonjs/features/pmProgress/model/PmTreeModel.d.ts.map +1 -0
  263. package/dist/typescript/commonjs/features/pmProgress/shared/pmProgress.constants.d.ts +36 -0
  264. package/dist/typescript/commonjs/features/pmProgress/shared/pmProgress.constants.d.ts.map +1 -0
  265. package/dist/typescript/commonjs/features/pmProgress/shared/pmProgress.helpers.d.ts +64 -0
  266. package/dist/typescript/commonjs/features/pmProgress/shared/pmProgress.helpers.d.ts.map +1 -0
  267. package/dist/typescript/commonjs/features/pmProgress/shared/pmProgress.types.d.ts +187 -0
  268. package/dist/typescript/commonjs/features/pmProgress/shared/pmProgress.types.d.ts.map +1 -0
  269. package/dist/typescript/commonjs/features/voice/recording/model/VoiceRecord.model.d.ts +1 -3
  270. package/dist/typescript/commonjs/features/voice/recording/model/VoiceRecord.model.d.ts.map +1 -1
  271. package/dist/typescript/commonjs/features/voice/types.d.ts +0 -4
  272. package/dist/typescript/commonjs/features/voice/types.d.ts.map +1 -1
  273. package/dist/typescript/commonjs/index.d.ts +1 -0
  274. package/dist/typescript/commonjs/index.d.ts.map +1 -1
  275. package/dist/typescript/commonjs/shared/icons/PentagonIcon.d.ts +4 -0
  276. package/dist/typescript/commonjs/shared/icons/PentagonIcon.d.ts.map +1 -0
  277. package/dist/typescript/commonjs/shared/icons/SketchArrowRight.d.ts +4 -0
  278. package/dist/typescript/commonjs/shared/icons/SketchArrowRight.d.ts.map +1 -0
  279. package/dist/typescript/commonjs/shared/icons/SliceDiamondIcon.d.ts +4 -0
  280. package/dist/typescript/commonjs/shared/icons/SliceDiamondIcon.d.ts.map +1 -0
  281. package/dist/typescript/commonjs/shared/icons/StarIcon.d.ts +4 -0
  282. package/dist/typescript/commonjs/shared/icons/StarIcon.d.ts.map +1 -0
  283. package/dist/typescript/commonjs/shared/icons/TimerIcon.d.ts +4 -0
  284. package/dist/typescript/commonjs/shared/icons/TimerIcon.d.ts.map +1 -0
  285. package/dist/typescript/commonjs/shared/translation/constants.d.ts +114 -0
  286. package/dist/typescript/commonjs/shared/translation/constants.d.ts.map +1 -1
  287. package/dist/typescript/commonjs/shared/translation/model.d.ts +38 -0
  288. package/dist/typescript/commonjs/shared/translation/model.d.ts.map +1 -1
  289. package/dist/typescript/module/features/chatbot/components/ChatInput/ChatInput.d.ts.map +1 -1
  290. package/dist/typescript/module/features/chatbot/components/ChatMessage/MessageContent.d.ts.map +1 -1
  291. package/dist/typescript/module/features/pmProgress/PmProgress.d.ts +9 -0
  292. package/dist/typescript/module/features/pmProgress/PmProgress.d.ts.map +1 -0
  293. package/dist/typescript/module/features/pmProgress/components/chart/chart.helpers.d.ts +4 -0
  294. package/dist/typescript/module/features/pmProgress/components/chart/chart.helpers.d.ts.map +1 -0
  295. package/dist/typescript/module/features/pmProgress/components/chart/chart.types.d.ts +36 -0
  296. package/dist/typescript/module/features/pmProgress/components/chart/chart.types.d.ts.map +1 -0
  297. package/dist/typescript/module/features/pmProgress/components/chart/components/PracticeProgressPieChart.d.ts +9 -0
  298. package/dist/typescript/module/features/pmProgress/components/chart/components/PracticeProgressPieChart.d.ts.map +1 -0
  299. package/dist/typescript/module/features/pmProgress/components/chart/components/SlicesClipPaths.d.ts +10 -0
  300. package/dist/typescript/module/features/pmProgress/components/chart/components/SlicesClipPaths.d.ts.map +1 -0
  301. package/dist/typescript/module/features/pmProgress/components/chart/components/SlicesPaths.d.ts +11 -0
  302. package/dist/typescript/module/features/pmProgress/components/chart/components/SlicesPaths.d.ts.map +1 -0
  303. package/dist/typescript/module/features/pmProgress/components/chart/components/layers/SliceArcPattern.d.ts +12 -0
  304. package/dist/typescript/module/features/pmProgress/components/chart/components/layers/SliceArcPattern.d.ts.map +1 -0
  305. package/dist/typescript/module/features/pmProgress/components/chart/components/layers/SliceBackgroundColor.d.ts +8 -0
  306. package/dist/typescript/module/features/pmProgress/components/chart/components/layers/SliceBackgroundColor.d.ts.map +1 -0
  307. package/dist/typescript/module/features/pmProgress/components/chart/components/layers/SliceFillColor.d.ts +14 -0
  308. package/dist/typescript/module/features/pmProgress/components/chart/components/layers/SliceFillColor.d.ts.map +1 -0
  309. package/dist/typescript/module/features/pmProgress/components/chart/model/ArcPatternGenerator.d.ts +12 -0
  310. package/dist/typescript/module/features/pmProgress/components/chart/model/ArcPatternGenerator.d.ts.map +1 -0
  311. package/dist/typescript/module/features/pmProgress/components/chart/model/PieChartManager.d.ts +16 -0
  312. package/dist/typescript/module/features/pmProgress/components/chart/model/PieChartManager.d.ts.map +1 -0
  313. package/dist/typescript/module/features/pmProgress/components/chart/model/SliceHighlight.d.ts +10 -0
  314. package/dist/typescript/module/features/pmProgress/components/chart/model/SliceHighlight.d.ts.map +1 -0
  315. package/dist/typescript/module/features/pmProgress/components/chart/model/SliceShapeGenerator.d.ts +17 -0
  316. package/dist/typescript/module/features/pmProgress/components/chart/model/SliceShapeGenerator.d.ts.map +1 -0
  317. package/dist/typescript/module/features/pmProgress/components/header/PmProgressHeader.d.ts +3 -0
  318. package/dist/typescript/module/features/pmProgress/components/header/PmProgressHeader.d.ts.map +1 -0
  319. package/dist/typescript/module/features/pmProgress/components/insights/PmInsights.d.ts +3 -0
  320. package/dist/typescript/module/features/pmProgress/components/insights/PmInsights.d.ts.map +1 -0
  321. package/dist/typescript/module/features/pmProgress/components/insights/PmTimeframeStats.d.ts +3 -0
  322. package/dist/typescript/module/features/pmProgress/components/insights/PmTimeframeStats.d.ts.map +1 -0
  323. package/dist/typescript/module/features/pmProgress/components/insights/StatsCard.d.ts +10 -0
  324. package/dist/typescript/module/features/pmProgress/components/insights/StatsCard.d.ts.map +1 -0
  325. package/dist/typescript/module/features/pmProgress/components/list/Fluency.d.ts +8 -0
  326. package/dist/typescript/module/features/pmProgress/components/list/Fluency.d.ts.map +1 -0
  327. package/dist/typescript/module/features/pmProgress/components/list/ListCard.d.ts +30 -0
  328. package/dist/typescript/module/features/pmProgress/components/list/ListCard.d.ts.map +1 -0
  329. package/dist/typescript/module/features/pmProgress/components/list/ListItem.d.ts +11 -0
  330. package/dist/typescript/module/features/pmProgress/components/list/ListItem.d.ts.map +1 -0
  331. package/dist/typescript/module/features/pmProgress/components/list/PmDomainList.d.ts +3 -0
  332. package/dist/typescript/module/features/pmProgress/components/list/PmDomainList.d.ts.map +1 -0
  333. package/dist/typescript/module/features/pmProgress/components/recs/PmTeacherRecs.d.ts +3 -0
  334. package/dist/typescript/module/features/pmProgress/components/recs/PmTeacherRecs.d.ts.map +1 -0
  335. package/dist/typescript/module/features/pmProgress/components/standard/StandardTag.d.ts +9 -0
  336. package/dist/typescript/module/features/pmProgress/components/standard/StandardTag.d.ts.map +1 -0
  337. package/dist/typescript/module/features/pmProgress/context/PmProgressContext.d.ts +12 -0
  338. package/dist/typescript/module/features/pmProgress/context/PmProgressContext.d.ts.map +1 -0
  339. package/dist/typescript/module/features/pmProgress/index.d.ts +6 -0
  340. package/dist/typescript/module/features/pmProgress/index.d.ts.map +1 -0
  341. package/dist/typescript/module/features/pmProgress/model/PmHighlightModel.d.ts +7 -0
  342. package/dist/typescript/module/features/pmProgress/model/PmHighlightModel.d.ts.map +1 -0
  343. package/dist/typescript/module/features/pmProgress/model/PmInsightsModel.d.ts +14 -0
  344. package/dist/typescript/module/features/pmProgress/model/PmInsightsModel.d.ts.map +1 -0
  345. package/dist/typescript/module/features/pmProgress/model/PmProgressApi.d.ts +17 -0
  346. package/dist/typescript/module/features/pmProgress/model/PmProgressApi.d.ts.map +1 -0
  347. package/dist/typescript/module/features/pmProgress/model/PmProgressModel.d.ts +23 -0
  348. package/dist/typescript/module/features/pmProgress/model/PmProgressModel.d.ts.map +1 -0
  349. package/dist/typescript/module/features/pmProgress/model/PmRecommendationsModel.d.ts +102 -0
  350. package/dist/typescript/module/features/pmProgress/model/PmRecommendationsModel.d.ts.map +1 -0
  351. package/dist/typescript/module/features/pmProgress/model/PmSolvingFlowModel.d.ts +20 -0
  352. package/dist/typescript/module/features/pmProgress/model/PmSolvingFlowModel.d.ts.map +1 -0
  353. package/dist/typescript/module/features/pmProgress/model/PmTreeModel.d.ts +19 -0
  354. package/dist/typescript/module/features/pmProgress/model/PmTreeModel.d.ts.map +1 -0
  355. package/dist/typescript/module/features/pmProgress/shared/pmProgress.constants.d.ts +36 -0
  356. package/dist/typescript/module/features/pmProgress/shared/pmProgress.constants.d.ts.map +1 -0
  357. package/dist/typescript/module/features/pmProgress/shared/pmProgress.helpers.d.ts +64 -0
  358. package/dist/typescript/module/features/pmProgress/shared/pmProgress.helpers.d.ts.map +1 -0
  359. package/dist/typescript/module/features/pmProgress/shared/pmProgress.types.d.ts +187 -0
  360. package/dist/typescript/module/features/pmProgress/shared/pmProgress.types.d.ts.map +1 -0
  361. package/dist/typescript/module/features/voice/recording/model/VoiceRecord.model.d.ts +1 -3
  362. package/dist/typescript/module/features/voice/recording/model/VoiceRecord.model.d.ts.map +1 -1
  363. package/dist/typescript/module/features/voice/types.d.ts +0 -4
  364. package/dist/typescript/module/features/voice/types.d.ts.map +1 -1
  365. package/dist/typescript/module/index.d.ts +1 -0
  366. package/dist/typescript/module/index.d.ts.map +1 -1
  367. package/dist/typescript/module/shared/icons/PentagonIcon.d.ts +4 -0
  368. package/dist/typescript/module/shared/icons/PentagonIcon.d.ts.map +1 -0
  369. package/dist/typescript/module/shared/icons/SketchArrowRight.d.ts +4 -0
  370. package/dist/typescript/module/shared/icons/SketchArrowRight.d.ts.map +1 -0
  371. package/dist/typescript/module/shared/icons/SliceDiamondIcon.d.ts +4 -0
  372. package/dist/typescript/module/shared/icons/SliceDiamondIcon.d.ts.map +1 -0
  373. package/dist/typescript/module/shared/icons/StarIcon.d.ts +4 -0
  374. package/dist/typescript/module/shared/icons/StarIcon.d.ts.map +1 -0
  375. package/dist/typescript/module/shared/icons/TimerIcon.d.ts +4 -0
  376. package/dist/typescript/module/shared/icons/TimerIcon.d.ts.map +1 -0
  377. package/dist/typescript/module/shared/translation/constants.d.ts +114 -0
  378. package/dist/typescript/module/shared/translation/constants.d.ts.map +1 -1
  379. package/dist/typescript/module/shared/translation/model.d.ts +38 -0
  380. package/dist/typescript/module/shared/translation/model.d.ts.map +1 -1
  381. package/package.json +23 -12
  382. package/src/features/chatbot/components/ChatInput/ChatInput.tsx +2 -1
  383. package/src/features/chatbot/components/ChatMessage/MessageContent.tsx +2 -1
  384. package/src/features/endOfAssignment/components/AssessmentScoreCard/AssessmentScoreCard.tsx +2 -2
  385. package/src/features/pmProgress/PmProgress.tsx +52 -0
  386. package/src/features/pmProgress/__tests__/.keep +0 -0
  387. package/src/features/pmProgress/components/chart/chart.helpers.ts +15 -0
  388. package/src/features/pmProgress/components/chart/chart.types.ts +37 -0
  389. package/src/features/pmProgress/components/chart/components/PracticeProgressPieChart.tsx +32 -0
  390. package/src/features/pmProgress/components/chart/components/SlicesClipPaths.tsx +22 -0
  391. package/src/features/pmProgress/components/chart/components/SlicesPaths.tsx +86 -0
  392. package/src/features/pmProgress/components/chart/components/layers/SliceArcPattern.tsx +44 -0
  393. package/src/features/pmProgress/components/chart/components/layers/SliceBackgroundColor.tsx +11 -0
  394. package/src/features/pmProgress/components/chart/components/layers/SliceFillColor.tsx +88 -0
  395. package/src/features/pmProgress/components/chart/model/ArcPatternGenerator.ts +48 -0
  396. package/src/features/pmProgress/components/chart/model/PieChartManager.ts +20 -0
  397. package/src/features/pmProgress/components/chart/model/SliceHighlight.ts +17 -0
  398. package/src/features/pmProgress/components/chart/model/SliceShapeGenerator.ts +90 -0
  399. package/src/features/pmProgress/components/header/PmProgressHeader.tsx +187 -0
  400. package/src/features/pmProgress/components/insights/PmInsights.tsx +58 -0
  401. package/src/features/pmProgress/components/insights/PmTimeframeStats.tsx +83 -0
  402. package/src/features/pmProgress/components/insights/StatsCard.tsx +53 -0
  403. package/src/features/pmProgress/components/list/Fluency.tsx +58 -0
  404. package/src/features/pmProgress/components/list/ListCard.tsx +231 -0
  405. package/src/features/pmProgress/components/list/ListItem.tsx +136 -0
  406. package/src/features/pmProgress/components/list/PmDomainList.tsx +69 -0
  407. package/src/features/pmProgress/components/recs/PmTeacherRecs.tsx +109 -0
  408. package/src/features/pmProgress/components/standard/StandardTag.tsx +177 -0
  409. package/src/features/pmProgress/context/PmProgressContext.tsx +23 -0
  410. package/src/features/pmProgress/index.ts +8 -0
  411. package/src/features/pmProgress/model/PmHighlightModel.ts +11 -0
  412. package/src/features/pmProgress/model/PmInsightsModel.ts +23 -0
  413. package/src/features/pmProgress/model/PmProgressApi.ts +34 -0
  414. package/src/features/pmProgress/model/PmProgressModel.ts +48 -0
  415. package/src/features/pmProgress/model/PmRecommendationsModel.ts +47 -0
  416. package/src/features/pmProgress/model/PmSolvingFlowModel.ts +131 -0
  417. package/src/features/pmProgress/model/PmTreeModel.ts +130 -0
  418. package/src/features/pmProgress/shared/pmProgress.constants.ts +88 -0
  419. package/src/features/pmProgress/shared/pmProgress.helpers.ts +271 -0
  420. package/src/features/pmProgress/shared/pmProgress.types.ts +210 -0
  421. package/src/features/voice/recording/model/VoiceRecord.model.ts +0 -7
  422. package/src/features/voice/types.ts +0 -5
  423. package/src/index.ts +1 -0
  424. package/src/shared/icons/PentagonIcon.tsx +17 -0
  425. package/src/shared/icons/SketchArrowRight.tsx +18 -0
  426. package/src/shared/icons/SliceDiamondIcon.tsx +16 -0
  427. package/src/shared/icons/StarIcon.tsx +17 -0
  428. package/src/shared/icons/TimerIcon.tsx +21 -0
  429. package/src/shared/translation/localization/ca.json +19 -0
  430. package/src/shared/translation/localization/de.json +19 -0
  431. package/src/shared/translation/localization/en.json +19 -0
  432. package/src/shared/translation/localization/gb.json +19 -0
  433. package/src/shared/translation/localization/sct.json +19 -0
  434. package/src/shared/translation/localization/sw.json +19 -0
@@ -0,0 +1,88 @@
1
+ import { COLORS } from '@magmamath/react-native-ui'
2
+
3
+ export const STATS_MAX_HEIGHT = 136
4
+ export const RECOMMENDATIONS_LIMIT_PARAM = 150
5
+ export const MAX_PIE_CHART_SIZE = 505
6
+
7
+ export enum CustomDomain {
8
+ TEACHER = 'TEACHER',
9
+ FLUENCY = 'FLUENCY',
10
+ }
11
+
12
+ export enum InsightsTimeframe {
13
+ ALL = 'all',
14
+ WEEK = 'week',
15
+ LAST_WEEK = 'lastWeek',
16
+ }
17
+
18
+ export enum SolvingFlow {
19
+ TEACHER = 'TEACHER',
20
+ MAGMA = 'MAGMA',
21
+ STANDARD = 'STANDARD',
22
+ }
23
+
24
+ export enum SessionStorageKeys {
25
+ SOLVING_QUEUE = 'PM_SOLVING_QUEUE',
26
+ GRADE = 'PM_GRADE',
27
+ DOMAINS = 'PM_DOMAINS',
28
+ }
29
+
30
+ /**
31
+ * Primary → _4 → _6 variants, cycling through 7 base colors.
32
+ * Supports up to 21 unique colors before repeating.
33
+ */
34
+ export const DOMAIN_COLORS = [
35
+ COLORS.PRIMARY_RED,
36
+ COLORS.PRIMARY_MAGENTA,
37
+ COLORS.PRIMARY_PURPLE,
38
+ COLORS.PRIMARY_INDIGO,
39
+ COLORS.PRIMARY_TURQUOISE,
40
+ COLORS.PRIMARY_GREEN,
41
+ COLORS.PRIMARY_ORANGE,
42
+ COLORS.RED_4,
43
+ COLORS.MAGENTA_4,
44
+ COLORS.PURPLE_4,
45
+ COLORS.INDIGO_4,
46
+ COLORS.TURQUOISE_4,
47
+ COLORS.GREEN_4,
48
+ COLORS.ORANGE_4,
49
+ COLORS.RED_6,
50
+ COLORS.MAGENTA_6,
51
+ COLORS.PURPLE_6,
52
+ COLORS.INDIGO_6,
53
+ COLORS.TURQUOISE_6,
54
+ COLORS.GREEN_6,
55
+ COLORS.ORANGE_6,
56
+ ]
57
+
58
+ export const EMPTY_PIE_CHART_DATA = Array.from({ length: 5 }, () => ({
59
+ value: 1,
60
+ fillPercent: 0,
61
+ fillColor: COLORS.NEUTRAL_4,
62
+ borderColor: COLORS.NEUTRAL_4,
63
+ backgroundColor: COLORS.NEUTRAL_3,
64
+ }))
65
+
66
+ export const DOMAIN_BORDER_COLORS = [
67
+ COLORS.RED_6,
68
+ COLORS.MAGENTA_6,
69
+ COLORS.PURPLE_6,
70
+ COLORS.INDIGO_6,
71
+ COLORS.TURQUOISE_6,
72
+ COLORS.GREEN_6,
73
+ COLORS.ORANGE_6,
74
+ COLORS.RED_6,
75
+ COLORS.MAGENTA_6,
76
+ COLORS.PURPLE_6,
77
+ COLORS.INDIGO_6,
78
+ COLORS.TURQUOISE_6,
79
+ COLORS.GREEN_6,
80
+ COLORS.ORANGE_6,
81
+ COLORS.RED_6,
82
+ COLORS.MAGENTA_6,
83
+ COLORS.PURPLE_6,
84
+ COLORS.INDIGO_6,
85
+ COLORS.TURQUOISE_6,
86
+ COLORS.GREEN_6,
87
+ COLORS.ORANGE_6,
88
+ ]
@@ -0,0 +1,271 @@
1
+ import { COLORS } from '@magmamath/react-native-ui'
2
+ import type { ProgressMatrixStatsDto } from '@matteappen/skills-utils/enhanceProgressData/types'
3
+ import {
4
+ Domain,
5
+ DomainStandard,
6
+ Grade,
7
+ Skill,
8
+ SkillsCount,
9
+ SkillsMapping,
10
+ StatsResponse,
11
+ TreeMappingResponse,
12
+ User,
13
+ } from './pmProgress.types'
14
+ import { CustomDomain, DOMAIN_BORDER_COLORS, DOMAIN_COLORS } from './pmProgress.constants'
15
+ import { dynamicCornerRadius, dynamicInnerRadius } from '../components/chart/chart.helpers'
16
+ import type { PieChartManagerConfig } from '../components/chart/chart.types'
17
+ import { getText } from '../../../shared/translation/helpers'
18
+
19
+ function groupStandardsByDomain(
20
+ standardStats: ProgressMatrixStatsDto[number]['standardStats'],
21
+ treeMapping: TreeMappingResponse['treeMapping'],
22
+ ) {
23
+ const grouped = new Map<string, Domain['standards']>()
24
+
25
+ for (const [standardId, stat] of Object.entries(standardStats)) {
26
+ const { domainId, skillIds, skillsCount, scorePercentage, skillsToPractice } = stat
27
+
28
+ if (!grouped.has(domainId)) {
29
+ grouped.set(domainId, [])
30
+ }
31
+
32
+ grouped.get(domainId)!.push({
33
+ standardId,
34
+ title:
35
+ treeMapping[standardId].shortDescriptionTranslations ||
36
+ treeMapping[standardId].nameTranslations,
37
+ subtitle: treeMapping[standardId].originalId,
38
+ skillIds,
39
+ skillsToPractice,
40
+ skillsCount,
41
+ scorePercentage,
42
+ })
43
+ }
44
+
45
+ return grouped
46
+ }
47
+
48
+ function sumSkillsCount(standards: Domain['standards']): SkillsCount {
49
+ return standards.reduce(
50
+ (sum, s) => ({
51
+ total: sum.total + s.skillsCount.total,
52
+ achieved: sum.achieved + s.skillsCount.achieved,
53
+ failed: sum.failed + s.skillsCount.failed,
54
+ }),
55
+ { total: 0, achieved: 0, failed: 0 },
56
+ )
57
+ }
58
+
59
+ function averageScorePercentage(standards: Domain['standards']): number {
60
+ const sum = standards.reduce((acc, s) => acc + s.scorePercentage, 0)
61
+ return Math.round((sum / standards.length) * 10) / 10
62
+ }
63
+
64
+ export function getDomainStructure(
65
+ data: ProgressMatrixStatsDto[number],
66
+ treeMapping: TreeMappingResponse['treeMapping'],
67
+ ): Domain[] {
68
+ const grouped = groupStandardsByDomain(data.standardStats, treeMapping)
69
+
70
+ return Array.from(grouped.entries()).map(([domainId, standards], index) => {
71
+ const title = treeMapping[domainId].nameTranslations
72
+ const isFluency = title.toLowerCase() === CustomDomain.FLUENCY.toLowerCase()
73
+
74
+ return {
75
+ domainId,
76
+ title,
77
+ color: isFluency
78
+ ? COLORS.PRIMARY_ORANGE
79
+ : (DOMAIN_COLORS[index] ?? DOMAIN_COLORS[DOMAIN_COLORS.length - 1]),
80
+ borderColor: isFluency
81
+ ? COLORS.ORANGE_6
82
+ : (DOMAIN_BORDER_COLORS[index] ?? DOMAIN_BORDER_COLORS[DOMAIN_BORDER_COLORS.length - 1]),
83
+ backgroundColor: COLORS.NEUTRAL_4,
84
+ standards,
85
+ skillsCount: sumSkillsCount(standards),
86
+ scorePercentage: averageScorePercentage(standards),
87
+ }
88
+ })
89
+ }
90
+
91
+ type GetInitialPmGradeParams = {
92
+ treeGrades: number[]
93
+ lockedGrades: number[]
94
+ enrolledGrades: number[]
95
+ userGrade: number | null | undefined
96
+ }
97
+
98
+ /**
99
+ * Resolves which grade a student should practice on.
100
+ *
101
+ * When userGrade is -1, null, or undefined (i.e. not explicitly set), we fall back
102
+ * to the student's enrolled grades and pick the lowest one that isn't locked.
103
+ * If userGrade is set but locked, we find the closest unlocked grade.
104
+ * All candidates are filtered against lockedGrades, so only unlocked grades are ever returned.
105
+ *
106
+ * Examples:
107
+ * locked=[1,2], enrolled=[2,5], grade=4 → 4 (unlocked, use as-is)
108
+ * locked=[1,2], enrolled=[2,5], grade=-1 → 5 (lowest unlocked enrolled)
109
+ * locked=[0,1,2,5], enrolled=[2,5], grade=-1 → 3 (no enrolled available, first unlocked)
110
+ * locked=[0,1], enrolled=[2,5], grade=-1 → 2 (lowest unlocked enrolled)
111
+ * locked=[0,1,2,3], enrolled=[3,9], grade=-1 → 9 (lowest unlocked enrolled)
112
+ * locked=[1,2,3], enrolled=[2,5], grade=2 → 4 (grade locked, closest below=none, above=4)
113
+ */
114
+
115
+ export function getInitialPmGrade({
116
+ treeGrades,
117
+ lockedGrades,
118
+ enrolledGrades,
119
+ userGrade,
120
+ }: GetInitialPmGradeParams): number | null {
121
+ const locked = new Set(lockedGrades)
122
+ const unlocked = treeGrades.filter((g) => !locked.has(g)).sort((a, b) => a - b)
123
+
124
+ if (unlocked.length === 0) {
125
+ return null
126
+ }
127
+
128
+ const isUserGradeMissing = userGrade === null || userGrade === -1 || userGrade === undefined
129
+ if (isUserGradeMissing) {
130
+ const unlockedEnrolled = enrolledGrades.filter((g) => unlocked.includes(g))
131
+ return unlockedEnrolled.length > 0 ? Math.min(...unlockedEnrolled) : unlocked[0]
132
+ }
133
+
134
+ if (unlocked.includes(userGrade)) return userGrade
135
+
136
+ const nearestBelow = [...unlocked].reverse().find((grade) => grade < userGrade)
137
+ const nearestAbove = unlocked.find((grade) => grade > userGrade)
138
+ return nearestBelow ?? nearestAbove ?? unlocked[0] ?? 0
139
+ }
140
+
141
+ export function formatTime(ms: number): string {
142
+ const totalMinutes = Math.floor(ms / 60_000)
143
+ if (totalMinutes < 60) return `${totalMinutes}m`
144
+ const hours = Math.floor(totalMinutes / 60)
145
+ const minutes = totalMinutes % 60
146
+ return minutes > 0 ? `${hours}h ${minutes}m` : `${hours}h`
147
+ }
148
+
149
+ export const isTreeDataReady = (source: {
150
+ tree: TreeMappingResponse | null
151
+ stats: StatsResponse | null
152
+ user: User | null
153
+ grade: number | null
154
+ }): source is { tree: TreeMappingResponse; stats: StatsResponse; user: User; grade: number } =>
155
+ source.tree !== null && source.stats !== null && source.user !== null && source.grade !== null
156
+
157
+ const MARGIN = 5
158
+ export const createChartConfig = (size: number): PieChartManagerConfig => ({
159
+ size,
160
+ outerRadius: size / 2 - MARGIN,
161
+ innerRadius: dynamicInnerRadius,
162
+ gapBetweenSlices: 8,
163
+ cornerRadius: dynamicCornerRadius,
164
+ pressOffset: 4,
165
+ borderWidth: 4,
166
+ colors: {
167
+ background: 'white',
168
+ highlightedBackground: COLORS.NEUTRAL_6,
169
+ },
170
+ outerArc: {
171
+ color: '#FFFFFF40',
172
+ strokeWidth: 11.75,
173
+ dashWidth: 22,
174
+ },
175
+ })
176
+
177
+ /**
178
+ * Returns uncompleted skills from a single standard.
179
+ * Failed skills come first, then unattempted.
180
+ */
181
+ export function getUncompletedSkillsFromStandard(
182
+ standard: DomainStandard,
183
+ skillsMapping: SkillsMapping,
184
+ ): Skill[] {
185
+ if (!standard.skillsToPractice) return []
186
+
187
+ return [...standard.skillsToPractice.failed, ...standard.skillsToPractice.unattempted]
188
+ .map(({ skillId }) => skillsMapping[skillId])
189
+ .filter(Boolean)
190
+ .sort((a, b) => skillsMapping[a._id]?.difficulty - skillsMapping[b._id]?.difficulty)
191
+ }
192
+
193
+ /**
194
+ * Returns uncompleted skills from a domain, scanning standards from the beginning.
195
+ * Optionally excludes a standard (used when student selected a specific one).
196
+ */
197
+ export function getUncompletedSkillsFromDomain(
198
+ domain: Domain,
199
+ skillsMapping: SkillsMapping,
200
+ excludeStandardId?: string,
201
+ ): Skill[] {
202
+ const isStandardUncompleted = (standard: DomainStandard) => {
203
+ return standard.skillsCount.achieved < standard.skillsCount.total
204
+ }
205
+
206
+ return domain.standards
207
+ .filter((s) => isStandardUncompleted(s) && s.standardId !== excludeStandardId)
208
+ .flatMap((s) => getUncompletedSkillsFromStandard(s, skillsMapping))
209
+ }
210
+
211
+ /**
212
+ * Returns all uncompleted skills across all domains in list order.
213
+ * Used as a fallback when recommendation arrays are empty.
214
+ */
215
+ export function getAllUncompletedSkills(domains: Domain[], skillsMapping: SkillsMapping): Skill[] {
216
+ return domains
217
+ .filter((d) => d.skillsCount.achieved < d.skillsCount.total)
218
+ .flatMap((d) => getUncompletedSkillsFromDomain(d, skillsMapping))
219
+ }
220
+
221
+ /** Moves item with the given id to the front: [0,1,2,3,4] with id of 3rd → [3,0,1,2,4] */
222
+ export function shiftToBeginningOfArray(id: string, items: Skill[]): Skill[] {
223
+ const index = items.findIndex((item) => item._id === id)
224
+ if (index <= 0) return items
225
+ return [items[index], ...items.slice(0, index), ...items.slice(index + 1)]
226
+ }
227
+
228
+ export function withoutDuplicates(skills: (Skill | undefined)[]): Skill[] {
229
+ const seen = new Set<string>()
230
+ return skills.filter((skill): skill is Skill => {
231
+ if (!skill) return false
232
+ if (seen.has(skill._id)) return false
233
+ seen.add(skill._id)
234
+ return true
235
+ })
236
+ }
237
+
238
+ // Reorders grades starting from the given grade, wrapping around. [1,2,3] with start=2 → [2,3,1]
239
+ export function startGradesFrom(grades: Grade[], startGrade: number): Grade[] {
240
+ const index = grades.findIndex(({ value }) => value === startGrade)
241
+ if (index <= 0) return grades
242
+ return [...grades.slice(index), ...grades.slice(0, index)]
243
+ }
244
+
245
+ export const isFluencyDomain = (title: string) => {
246
+ return title.toLowerCase() === CustomDomain.FLUENCY.toLowerCase()
247
+ }
248
+
249
+ export function formatGradeName(grade: number): string {
250
+ if (grade === -1) return getText('pmProgress.gradeOther')
251
+ if (grade === 0) return `${getText('pmProgress.grade')} ${getText('pmProgress.gradeK')}`
252
+ return `${getText('pmProgress.grade')} ${grade}`
253
+ }
254
+
255
+ export function getTreeGrades(tree: TreeMappingResponse, user: User): Grade[] {
256
+ const lockedGrades = new Set(user.setting.practiceModeLockedGrades)
257
+
258
+ const gradeNodes = Object.values(tree.treeMapping).filter(
259
+ (node) => node?.type === 'grade' && node.attributes.grade !== null,
260
+ )
261
+
262
+ const uniqueSortedGrades = [...new Set(gradeNodes.map((node) => node.attributes.grade))].sort(
263
+ (a, b) => a - b,
264
+ )
265
+
266
+ return uniqueSortedGrades.map((grade) => ({
267
+ name: formatGradeName(grade),
268
+ value: grade,
269
+ isLocked: lockedGrades.has(grade),
270
+ }))
271
+ }
@@ -0,0 +1,210 @@
1
+ import { DOMAIN_COLORS, SolvingFlow } from './pmProgress.constants'
2
+ import type { SkillsToPracticeDto } from '@matteappen/skills-utils/enhanceProgressData/types'
3
+
4
+ type StatsSkill = {
5
+ userId: string
6
+ skillId: string
7
+ achievedSkills: number
8
+ failedSkills: number
9
+ totalSkills: number
10
+ }
11
+
12
+ export type StatsPayload = {
13
+ entityIds: string[]
14
+ }
15
+
16
+ export type StatsResponse = {
17
+ entityId: string
18
+ skills: StatsSkill[]
19
+ }[]
20
+
21
+ export type GetRecommendationsPayload = {
22
+ limit?: number
23
+ }
24
+
25
+ type Ability = {
26
+ functionName: string
27
+ problemCount: number
28
+ sectionId: string
29
+ visibility: unknown[]
30
+ }
31
+
32
+ export type Skill = {
33
+ _id: string
34
+ nameTranslations: string
35
+ shortDescriptionTranslations: string
36
+ descriptionTranslations: string
37
+ ability: Ability
38
+ theory: {
39
+ languageCode: string
40
+ theory: string
41
+ }[]
42
+ type?: SolvingFlow
43
+ }
44
+
45
+ type MappingTree = {
46
+ _id: string
47
+ parents: string[]
48
+ type: string
49
+ nameTranslations: string
50
+ shortDescriptionTranslations: string
51
+ descriptionTranslations: string
52
+ order: number
53
+ children: string[]
54
+ skills: string[]
55
+ originalId: string
56
+ originalPath: string
57
+ attributes: { grade: number }
58
+ }
59
+
60
+ export type TreeId = string
61
+
62
+ export type SkillsMapping = Record<string, Skill & { difficulty: number }>
63
+
64
+ export type TreeMappingResponse = {
65
+ rootId: string
66
+ skillsMapping: SkillsMapping
67
+ treeMapping: Record<string, MappingTree>
68
+ }
69
+
70
+ export enum RecommendationType {
71
+ MAGMA = 'magma',
72
+ TEACHER = 'teacher',
73
+ }
74
+
75
+ type Recommendation<T extends string = RecommendationType> = {
76
+ _id: string
77
+ type: T
78
+ skillId: string
79
+ teacherId: string
80
+ studentId: string
81
+ exerciseIds: string[]
82
+ failedAttempts: string[]
83
+ refreshedAt: string
84
+ createdAt: string
85
+ updatedAt: string
86
+ }
87
+
88
+ export type RecsResponse<T extends RecommendationType = RecommendationType.MAGMA> = {
89
+ offset: number
90
+ limit: number
91
+ total: number
92
+ items: Recommendation<T>[]
93
+ }
94
+
95
+ export type Recommendations = {
96
+ items: Skill[]
97
+ offset: number
98
+ limit: number
99
+ total: number
100
+ }
101
+
102
+ export type UserTimeframeStats = {
103
+ studentId: string
104
+ practiceModeStatsByTimeFrame: {
105
+ all: {
106
+ timeInPracticeMs: number
107
+ numberOfStars: number
108
+ }
109
+ week: {
110
+ timeInPracticeMs: number
111
+ numberOfStars: number
112
+ }
113
+ lastWeek: {
114
+ timeInPracticeMs: number
115
+ numberOfStars: number
116
+ }
117
+ }
118
+ }
119
+
120
+ export type SkillsCount = {
121
+ total: number
122
+ achieved: number
123
+ failed: number
124
+ }
125
+
126
+ export type DomainStandard = {
127
+ standardId: string
128
+ title: string
129
+ subtitle: string
130
+ skillIds: string[]
131
+ skillsToPractice?: SkillsToPracticeDto
132
+ skillsCount: SkillsCount
133
+ scorePercentage: number
134
+ }
135
+
136
+ export type Domain = {
137
+ domainId: string
138
+ title: string
139
+ color: string
140
+ borderColor: string
141
+ backgroundColor: string
142
+ standards: DomainStandard[]
143
+ skillsCount: SkillsCount
144
+ scorePercentage: number
145
+ }
146
+
147
+ // TODO: to /shared/user.types.ts and create full type? any sense to duplicate it??
148
+ export type User = {
149
+ _id: string
150
+ fullName: string
151
+ grade: number | null
152
+ enrolledGrades: number[]
153
+ setting: {
154
+ practiceModeTreeId: string
155
+ practiceModeLockedGrades: number[]
156
+ }
157
+ }
158
+
159
+ export type Grade = {
160
+ name: string
161
+ value: number
162
+ isLocked: boolean
163
+ }
164
+
165
+ export type PmProgressGateProps = {
166
+ user: User
167
+ }
168
+
169
+ export type SetupInitialGradeProps = { tree: TreeMappingResponse; user: User }
170
+
171
+ export type GetTreeContextFxParams = {
172
+ tree: TreeMappingResponse
173
+ stats: StatsResponse
174
+ user: User
175
+ grade: number
176
+ }
177
+
178
+ export type TreeContext = {
179
+ tree: TreeMappingResponse
180
+ stats: StatsResponse
181
+ user: User
182
+ treeWithStats: unknown
183
+ }
184
+
185
+ export type QueueBuilderData<T extends StartSolvingProps = StartSolvingProps> = {
186
+ domains: Domain[]
187
+ context: TreeContext
188
+ } & T
189
+
190
+ export type TeacherQueueData = QueueBuilderData<StartSolvingTeacher>
191
+ export type MagmaQueueData = QueueBuilderData<StartSolvingMagma>
192
+ export type StandardQueueData = QueueBuilderData<StartSolvingStandard>
193
+
194
+ export type StartSolvingTeacher = {
195
+ type: SolvingFlow.TEACHER
196
+ skillId?: string
197
+ }
198
+
199
+ export type StartSolvingMagma = {
200
+ type: SolvingFlow.MAGMA
201
+ }
202
+
203
+ export type StartSolvingStandard = {
204
+ type: SolvingFlow.STANDARD
205
+ standardId: string
206
+ }
207
+
208
+ export type StartSolvingProps = StartSolvingTeacher | StartSolvingMagma | StartSolvingStandard
209
+
210
+ export type DomainColor = (typeof DOMAIN_COLORS)[number]
@@ -4,7 +4,6 @@ import { VoiceRecordsCollection } from './VoiceRecordCollection'
4
4
  import { UploaderModel } from './Uploader.model'
5
5
  import { VoiceRecorderState } from '../../constants'
6
6
  import {
7
- RecordButtonVariant,
8
7
  VoiceRecordCollectionItem,
9
8
  VoiceRecorderApi,
10
9
  VoiceRecordNotificationTypes,
@@ -59,8 +58,6 @@ export class VoiceRecordModel {
59
58
  public readonly events: VoiceRecordEvents
60
59
  private shouldDiscardRecording = false
61
60
 
62
- public recordButtonVariant = RecordButtonVariant.DEFAULT
63
-
64
61
  public readonly setCurrentKey = createEvent<string>()
65
62
  public readonly setCurrentRecord = createEvent<any>()
66
63
  public readonly reset = createEvent()
@@ -85,10 +82,6 @@ export class VoiceRecordModel {
85
82
  await this.api.deleteAudioFile(audioFileId)
86
83
  })
87
84
 
88
- public readonly setRecordButtonVariant = (variant: RecordButtonVariant) => {
89
- this.recordButtonVariant = variant
90
- }
91
-
92
85
  public readonly deleteCurrentRecording = attach({
93
86
  source: this.$currentKey,
94
87
  mapParams: (props: DeleteCurrentRecordingProps | void, currentKey) => ({
@@ -82,8 +82,3 @@ export type VoiceTranscriptionItem = {
82
82
  controller?: AbortController
83
83
  hasDrawing?: boolean
84
84
  }
85
-
86
- export enum RecordButtonVariant {
87
- DEFAULT = 'default',
88
- ADVANCED = 'advanced',
89
- }
package/src/index.ts CHANGED
@@ -9,6 +9,7 @@ export * from './features/problemSelector'
9
9
  export * from './features/gifCelebrations'
10
10
  export * from './features/exampleSolution'
11
11
  export * from './features/keyboard'
12
+ export * from './features/pmProgress'
12
13
  export * from './features/openEnded'
13
14
  export * from './shared/icons'
14
15
  export * from './features/voice'
@@ -0,0 +1,17 @@
1
+ import React from 'react'
2
+ import Svg, { G, Path, Defs } from 'react-native-svg'
3
+ import { IconProps } from './icon.types'
4
+
5
+ export const PentagonIcon = ({ size = 32, color }: IconProps) => {
6
+ return (
7
+ <Svg width={size} height={size} viewBox="0 0 32 31" fill="none">
8
+ <G filter="url(#filter0_dd_2255_6755)">
9
+ <Path
10
+ d="M14.025 2.573a3 3 0 013.527 0l9.788 7.111a3 3 0 011.09 3.355l-3.74 11.506a3 3 0 01-2.852 2.073H9.739a3 3 0 01-2.853-2.073L3.147 13.038a3 3 0 011.09-3.354l9.788-7.111z"
11
+ fill={color}
12
+ />
13
+ </G>
14
+ <Defs></Defs>
15
+ </Svg>
16
+ )
17
+ }
@@ -0,0 +1,18 @@
1
+ import React from 'react'
2
+ import Svg, { Path } from 'react-native-svg'
3
+ import { IconProps } from './icon.types'
4
+
5
+ export const SketchArrowRight = ({ size = 46, color = '#4D4D63' }: IconProps) => {
6
+ const sizeRatio = 1.65
7
+ return (
8
+ <Svg width={size} height={size * sizeRatio} viewBox="0 0 46 28" fill="none">
9
+ <Path
10
+ d="M2 14.714c17.875-3.906 41.975-1.466 41.975-1.466m0 0s-7.319-9-11.4-11.248m11.4 11.248s-8.773 6.653-10.562 12.737"
11
+ stroke={color}
12
+ strokeWidth={4}
13
+ strokeLinecap="round"
14
+ strokeLinejoin="round"
15
+ />
16
+ </Svg>
17
+ )
18
+ }
@@ -0,0 +1,16 @@
1
+ import React from 'react'
2
+ import { IconProps } from './icon.types'
3
+ import Svg, { G, Path } from 'react-native-svg'
4
+
5
+ export const SliceDiamondIcon = ({ color, size = 28 }: IconProps) => {
6
+ return (
7
+ <Svg width={size} height={size} viewBox="0 0 28 27" fill="none">
8
+ <G filter="url(#filter0_dd_1929_4175)">
9
+ <Path
10
+ d="M12.004 22.19a2.25 2.25 0 003.652 0l9.269-12.877a2.578 2.578 0 00-.27-3.329C18.677.005 8.983.005 3.005 5.984a2.578 2.578 0 00-.27 3.33l9.269 12.876z"
11
+ fill={color}
12
+ />
13
+ </G>
14
+ </Svg>
15
+ )
16
+ }
@@ -0,0 +1,17 @@
1
+ import React from 'react'
2
+ import Svg, { Path } from 'react-native-svg'
3
+ import { IconProps } from './icon.types'
4
+ import { COLORS } from '@magmamath/react-native-ui'
5
+
6
+ export const StarIcon = ({ width = 25, color = COLORS.NEUTRAL_1 }: IconProps) => {
7
+ return (
8
+ <Svg width={width} height={width} viewBox="0 0 25 25" fill="none">
9
+ <Path
10
+ fillRule="evenodd"
11
+ clipRule="evenodd"
12
+ d="M13.76.971c-.776-1.295-2.653-1.295-3.43 0L7.082 6.387l-5.565 1.39c-1.508.378-2.028 2.256-.929 3.355l4.128 4.128-1.368 6.502c-.35 1.659 1.394 2.973 2.892 2.18l5.795-3.068 3.865 2.147 2.007 1.004c1.497.748 3.196-.563 2.851-2.201l-1.381-6.564 4.128-4.128c1.099-1.099.579-2.977-.93-3.354L17.01 6.387 13.76.97zM8.796 7.416L12.046 2l3.249 5.416a2 2 0 001.23.91l5.565 1.392-4.129 4.128a2 2 0 00-.542 1.826l1.381 6.564-1.968-.984-3.827-2.126a2 2 0 00-1.907-.02l-5.794 3.068 1.368-6.502a2 2 0 00-.542-1.826L2 9.718l5.565-1.391a2 2 0 001.23-.911z"
13
+ fill={color}
14
+ />
15
+ </Svg>
16
+ )
17
+ }