@magmamath/students-features 0.9.9 → 0.9.14-rc.11

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 (378) hide show
  1. package/.editorconfig +15 -0
  2. package/.eslintignore +2 -0
  3. package/.eslintrc +22 -0
  4. package/.gitattributes +3 -0
  5. package/.github/actions/setup/action.yml +37 -0
  6. package/.github/workflows/ci.yml +73 -0
  7. package/.gitignore +84 -0
  8. package/.idea/.gitignore +8 -0
  9. package/.idea/codeStyles/Project.xml +62 -0
  10. package/.idea/codeStyles/codeStyleConfig.xml +5 -0
  11. package/.idea/copilot.data.migration.agent.xml +6 -0
  12. package/.idea/copilot.data.migration.ask.xml +6 -0
  13. package/.idea/copilot.data.migration.ask2agent.xml +6 -0
  14. package/.idea/copilot.data.migration.edit.xml +6 -0
  15. package/.idea/inspectionProfiles/Project_Default.xml +8 -0
  16. package/.idea/jsLinters/eslint.xml +6 -0
  17. package/.idea/modules.xml +8 -0
  18. package/.idea/prettier.xml +7 -0
  19. package/.idea/shelf/Uncommitted_changes_before_Checkout_at_29_12_2025,_13_10_[Changes]/shelved.patch +18 -0
  20. package/.idea/shelf/Uncommitted_changes_before_Checkout_at_29_12_2025,_13_11_[Changes]/shelved.patch +19 -0
  21. package/.idea/shelf/Uncommitted_changes_before_Checkout_at_29_12_2025__13_10__Changes_.xml +4 -0
  22. package/.idea/shelf/Uncommitted_changes_before_Checkout_at_29_12_2025__13_11__Changes_.xml +4 -0
  23. package/.idea/shelf/Uncommitted_changes_before_Checkout_at_30_12_2025,_11_06_[Changes]/shelved.patch +18 -0
  24. package/.idea/shelf/Uncommitted_changes_before_Checkout_at_30_12_2025,_11_07_[Changes]/shelved.patch +18 -0
  25. package/.idea/shelf/Uncommitted_changes_before_Checkout_at_30_12_2025__11_06__Changes_.xml +4 -0
  26. package/.idea/students-features.iml +12 -0
  27. package/.idea/vcs.xml +6 -0
  28. package/.idea/workspace.xml +645 -0
  29. package/.nvmrc +1 -0
  30. package/.prettierrc +11 -0
  31. package/.release-it.json +17 -0
  32. package/.watchmanconfig +1 -0
  33. package/.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs +541 -0
  34. package/.yarn/plugins/@yarnpkg/plugin-workspace-tools.cjs +28 -0
  35. package/.yarn/releases/yarn-3.6.1.cjs +874 -0
  36. package/babel.config.js +5 -0
  37. package/bob.config.js +25 -0
  38. package/dist/commonjs/features/celebrations/helpers.js +4 -1
  39. package/dist/commonjs/features/celebrations/helpers.js.map +1 -1
  40. package/dist/commonjs/features/chatbot/components/Chatbot.js +2 -2
  41. package/dist/commonjs/features/chatbot/components/Chatbot.js.map +1 -1
  42. package/dist/commonjs/features/chatbot/model/ChatBotModel.js +8 -6
  43. package/dist/commonjs/features/chatbot/model/ChatBotModel.js.map +1 -1
  44. package/dist/commonjs/features/chatbot/model/t2s.js +4 -3
  45. package/dist/commonjs/features/chatbot/model/t2s.js.map +1 -1
  46. package/dist/commonjs/features/chatbot/types/model.types.js.map +1 -1
  47. package/dist/commonjs/features/endOfAssignment/ui/PracticeButtonGroup.js +3 -2
  48. package/dist/commonjs/features/endOfAssignment/ui/PracticeButtonGroup.js.map +1 -1
  49. package/dist/commonjs/features/feedback/model/model.js.map +1 -1
  50. package/dist/commonjs/features/feedback/model/sockets.js +8 -5
  51. package/dist/commonjs/features/feedback/model/sockets.js.map +1 -1
  52. package/dist/commonjs/features/keyboard/components/BasicLayout/keyboardGroups.js +5 -1
  53. package/dist/commonjs/features/keyboard/components/BasicLayout/keyboardGroups.js.map +1 -1
  54. package/dist/commonjs/features/keyboard/components/BasicPlusLayout/keyboardGroups.js +4 -4
  55. package/dist/commonjs/features/keyboard/components/BasicPlusLayout/keyboardGroups.js.map +1 -1
  56. package/dist/commonjs/features/keyboard/components/BasicPlusPlusLayout/keyboardGroups.js +4 -4
  57. package/dist/commonjs/features/keyboard/components/BasicPlusPlusLayout/keyboardGroups.js.map +1 -1
  58. package/dist/commonjs/features/keyboard/components/Keyboard.js +24 -9
  59. package/dist/commonjs/features/keyboard/components/Keyboard.js.map +1 -1
  60. package/dist/commonjs/features/keyboard/components/{MainLayout.js → MainLayout/MainLayout.js} +9 -7
  61. package/dist/commonjs/features/keyboard/components/MainLayout/MainLayout.js.map +1 -0
  62. package/dist/commonjs/features/keyboard/components/{constants.js → MainLayout/constants.js} +7 -2
  63. package/dist/commonjs/features/keyboard/components/MainLayout/constants.js.map +1 -0
  64. package/dist/commonjs/features/keyboard/components/UnderlinedLayout/UnderlinedLayout.js +3 -2
  65. package/dist/commonjs/features/keyboard/components/UnderlinedLayout/UnderlinedLayout.js.map +1 -1
  66. package/dist/commonjs/features/keyboard/components/UnderlinedLayout/keyboardGroups.js +2 -1
  67. package/dist/commonjs/features/keyboard/components/UnderlinedLayout/keyboardGroups.js.map +1 -1
  68. package/dist/commonjs/features/keyboard/components/UnitsLayout/UnitsLayout.js +2 -1
  69. package/dist/commonjs/features/keyboard/components/UnitsLayout/UnitsLayout.js.map +1 -1
  70. package/dist/commonjs/features/keyboard/components/UnitsLayout/helpers.js +3 -1
  71. package/dist/commonjs/features/keyboard/components/UnitsLayout/helpers.js.map +1 -1
  72. package/dist/commonjs/features/keyboard/components/UnitsLayout/hooks/useUnitTabs.js +27 -6
  73. package/dist/commonjs/features/keyboard/components/UnitsLayout/hooks/useUnitTabs.js.map +1 -1
  74. package/dist/commonjs/features/keyboard/components/UnitsLayout/keyboardGroups.js +9 -1
  75. package/dist/commonjs/features/keyboard/components/UnitsLayout/keyboardGroups.js.map +1 -1
  76. package/dist/commonjs/features/keyboard/components/UnitsLayout/types.js +1 -0
  77. package/dist/commonjs/features/keyboard/components/UnitsLayout/types.js.map +1 -1
  78. package/dist/commonjs/features/keyboard/constants/keyboardGroupsByLocale.js +22 -1
  79. package/dist/commonjs/features/keyboard/constants/keyboardGroupsByLocale.js.map +1 -1
  80. package/dist/commonjs/features/keyboard/constants/keyboardLayouts.js +7 -0
  81. package/dist/commonjs/features/keyboard/constants/keyboardLayouts.js.map +1 -1
  82. package/dist/commonjs/features/keyboard/types/MathKeysGroups/basicOperators.js +20 -30
  83. package/dist/commonjs/features/keyboard/types/MathKeysGroups/basicOperators.js.map +1 -1
  84. package/dist/commonjs/features/keyboard/types/MathKeysGroups/specialOperators.js +27 -0
  85. package/dist/commonjs/features/keyboard/types/MathKeysGroups/specialOperators.js.map +1 -1
  86. package/dist/commonjs/features/keyboard/types/MathKeysGroups/units.js +6 -3
  87. package/dist/commonjs/features/keyboard/types/MathKeysGroups/units.js.map +1 -1
  88. package/dist/commonjs/features/keyboard/types/keyboardGroupIds.js +1 -0
  89. package/dist/commonjs/features/keyboard/types/keyboardGroupIds.js.map +1 -1
  90. package/dist/commonjs/lib/helpers/helpers.js +28 -5
  91. package/dist/commonjs/lib/helpers/helpers.js.map +1 -1
  92. package/dist/commonjs/lib/types/requests.js +2 -0
  93. package/dist/commonjs/lib/types/requests.js.map +1 -0
  94. package/dist/commonjs/shared/icons/TimeIcon.js +37 -0
  95. package/dist/commonjs/shared/icons/TimeIcon.js.map +1 -0
  96. package/dist/commonjs/shared/icons/keyboard/CDotIcon/CDotIcon.js +4 -4
  97. package/dist/commonjs/shared/icons/keyboard/CDotIcon/CDotIcon.js.map +1 -1
  98. package/dist/commonjs/shared/icons/keyboard/RoundBracketLeftIcon/RoundBracketLeftIcon.js +32 -0
  99. package/dist/commonjs/shared/icons/keyboard/RoundBracketLeftIcon/RoundBracketLeftIcon.js.map +1 -0
  100. package/dist/commonjs/shared/icons/keyboard/RoundBracketRightIcon/RoundBracketRightIcon.js +32 -0
  101. package/dist/commonjs/shared/icons/keyboard/RoundBracketRightIcon/RoundBracketRightIcon.js.map +1 -0
  102. package/dist/commonjs/shared/translation/constants.js +3 -1
  103. package/dist/commonjs/shared/translation/constants.js.map +1 -1
  104. package/dist/commonjs/shared/translation/localization/ca.json +7 -6
  105. package/dist/commonjs/shared/translation/localization/de.json +43 -0
  106. package/dist/commonjs/shared/translation/localization/en.json +7 -6
  107. package/dist/commonjs/shared/translation/localization/gb.json +7 -6
  108. package/dist/commonjs/shared/translation/localization/sct.json +7 -6
  109. package/dist/commonjs/shared/translation/localization/sw.json +7 -6
  110. package/dist/commonjs/shared/translation/types.js +1 -0
  111. package/dist/commonjs/shared/translation/types.js.map +1 -1
  112. package/dist/module/features/celebrations/helpers.js +4 -1
  113. package/dist/module/features/celebrations/helpers.js.map +1 -1
  114. package/dist/module/features/chatbot/components/Chatbot.js +2 -2
  115. package/dist/module/features/chatbot/components/Chatbot.js.map +1 -1
  116. package/dist/module/features/chatbot/model/ChatBotModel.js +8 -6
  117. package/dist/module/features/chatbot/model/ChatBotModel.js.map +1 -1
  118. package/dist/module/features/chatbot/model/t2s.js +4 -3
  119. package/dist/module/features/chatbot/model/t2s.js.map +1 -1
  120. package/dist/module/features/chatbot/types/model.types.js.map +1 -1
  121. package/dist/module/features/endOfAssignment/ui/PracticeButtonGroup.js +3 -2
  122. package/dist/module/features/endOfAssignment/ui/PracticeButtonGroup.js.map +1 -1
  123. package/dist/module/features/feedback/model/model.js.map +1 -1
  124. package/dist/module/features/feedback/model/sockets.js +8 -5
  125. package/dist/module/features/feedback/model/sockets.js.map +1 -1
  126. package/dist/module/features/keyboard/components/BasicLayout/keyboardGroups.js +4 -0
  127. package/dist/module/features/keyboard/components/BasicLayout/keyboardGroups.js.map +1 -1
  128. package/dist/module/features/keyboard/components/BasicPlusLayout/keyboardGroups.js +4 -4
  129. package/dist/module/features/keyboard/components/BasicPlusLayout/keyboardGroups.js.map +1 -1
  130. package/dist/module/features/keyboard/components/BasicPlusPlusLayout/keyboardGroups.js +4 -4
  131. package/dist/module/features/keyboard/components/BasicPlusPlusLayout/keyboardGroups.js.map +1 -1
  132. package/dist/module/features/keyboard/components/Keyboard.js +23 -8
  133. package/dist/module/features/keyboard/components/Keyboard.js.map +1 -1
  134. package/dist/module/features/keyboard/components/KeysList/KeysList.js.map +1 -1
  135. package/dist/module/features/keyboard/components/{MainLayout.js → MainLayout/MainLayout.js} +9 -7
  136. package/dist/module/features/keyboard/components/MainLayout/MainLayout.js.map +1 -0
  137. package/dist/module/features/keyboard/components/{constants.js → MainLayout/constants.js} +6 -1
  138. package/dist/module/features/keyboard/components/MainLayout/constants.js.map +1 -0
  139. package/dist/module/features/keyboard/components/UnderlinedLayout/UnderlinedLayout.js +3 -2
  140. package/dist/module/features/keyboard/components/UnderlinedLayout/UnderlinedLayout.js.map +1 -1
  141. package/dist/module/features/keyboard/components/UnderlinedLayout/keyboardGroups.js +2 -1
  142. package/dist/module/features/keyboard/components/UnderlinedLayout/keyboardGroups.js.map +1 -1
  143. package/dist/module/features/keyboard/components/UnitsLayout/UnitsLayout.js +2 -1
  144. package/dist/module/features/keyboard/components/UnitsLayout/UnitsLayout.js.map +1 -1
  145. package/dist/module/features/keyboard/components/UnitsLayout/helpers.js +2 -1
  146. package/dist/module/features/keyboard/components/UnitsLayout/helpers.js.map +1 -1
  147. package/dist/module/features/keyboard/components/UnitsLayout/hooks/useUnitTabs.js +27 -6
  148. package/dist/module/features/keyboard/components/UnitsLayout/hooks/useUnitTabs.js.map +1 -1
  149. package/dist/module/features/keyboard/components/UnitsLayout/keyboardGroups.js +9 -1
  150. package/dist/module/features/keyboard/components/UnitsLayout/keyboardGroups.js.map +1 -1
  151. package/dist/module/features/keyboard/components/UnitsLayout/types.js +1 -0
  152. package/dist/module/features/keyboard/components/UnitsLayout/types.js.map +1 -1
  153. package/dist/module/features/keyboard/constants/keyboardGroupsByLocale.js +24 -3
  154. package/dist/module/features/keyboard/constants/keyboardGroupsByLocale.js.map +1 -1
  155. package/dist/module/features/keyboard/constants/keyboardLayouts.js +6 -0
  156. package/dist/module/features/keyboard/constants/keyboardLayouts.js.map +1 -1
  157. package/dist/module/features/keyboard/types/MathKeysGroups/basicOperators.js +20 -30
  158. package/dist/module/features/keyboard/types/MathKeysGroups/basicOperators.js.map +1 -1
  159. package/dist/module/features/keyboard/types/MathKeysGroups/specialOperators.js +27 -0
  160. package/dist/module/features/keyboard/types/MathKeysGroups/specialOperators.js.map +1 -1
  161. package/dist/module/features/keyboard/types/MathKeysGroups/units.js +6 -3
  162. package/dist/module/features/keyboard/types/MathKeysGroups/units.js.map +1 -1
  163. package/dist/module/features/keyboard/types/keyboardGroupIds.js +1 -0
  164. package/dist/module/features/keyboard/types/keyboardGroupIds.js.map +1 -1
  165. package/dist/module/lib/helpers/helpers.js +28 -5
  166. package/dist/module/lib/helpers/helpers.js.map +1 -1
  167. package/dist/module/lib/types/requests.js +2 -0
  168. package/dist/module/lib/types/requests.js.map +1 -0
  169. package/dist/module/shared/icons/TimeIcon.js +29 -0
  170. package/dist/module/shared/icons/TimeIcon.js.map +1 -0
  171. package/dist/module/shared/icons/keyboard/CDotIcon/CDotIcon.js +4 -4
  172. package/dist/module/shared/icons/keyboard/CDotIcon/CDotIcon.js.map +1 -1
  173. package/dist/module/shared/icons/keyboard/RoundBracketLeftIcon/RoundBracketLeftIcon.js +24 -0
  174. package/dist/module/shared/icons/keyboard/RoundBracketLeftIcon/RoundBracketLeftIcon.js.map +1 -0
  175. package/dist/module/shared/icons/keyboard/RoundBracketRightIcon/RoundBracketRightIcon.js +24 -0
  176. package/dist/module/shared/icons/keyboard/RoundBracketRightIcon/RoundBracketRightIcon.js.map +1 -0
  177. package/dist/module/shared/translation/constants.js +3 -1
  178. package/dist/module/shared/translation/constants.js.map +1 -1
  179. package/dist/module/shared/translation/localization/ca.json +7 -6
  180. package/dist/module/shared/translation/localization/de.json +43 -0
  181. package/dist/module/shared/translation/localization/en.json +7 -6
  182. package/dist/module/shared/translation/localization/gb.json +7 -6
  183. package/dist/module/shared/translation/localization/sct.json +7 -6
  184. package/dist/module/shared/translation/localization/sw.json +7 -6
  185. package/dist/module/shared/translation/types.js +1 -0
  186. package/dist/module/shared/translation/types.js.map +1 -1
  187. package/dist/typescript/commonjs/features/celebrations/helpers.d.ts.map +1 -1
  188. package/dist/typescript/commonjs/features/chatbot/model/ChatBotModel.d.ts +8 -7
  189. package/dist/typescript/commonjs/features/chatbot/model/ChatBotModel.d.ts.map +1 -1
  190. package/dist/typescript/commonjs/features/chatbot/model/ChatbotApi.d.ts +2 -2
  191. package/dist/typescript/commonjs/features/chatbot/model/ChatbotApi.d.ts.map +1 -1
  192. package/dist/typescript/commonjs/features/chatbot/model/t2s.d.ts.map +1 -1
  193. package/dist/typescript/commonjs/features/chatbot/types/api.types.d.ts +11 -1
  194. package/dist/typescript/commonjs/features/chatbot/types/api.types.d.ts.map +1 -1
  195. package/dist/typescript/commonjs/features/chatbot/types/model.types.d.ts +8 -5
  196. package/dist/typescript/commonjs/features/chatbot/types/model.types.d.ts.map +1 -1
  197. package/dist/typescript/commonjs/features/endOfAssignment/ui/PracticeButtonGroup.d.ts.map +1 -1
  198. package/dist/typescript/commonjs/features/feedback/model/model.d.ts +4 -1
  199. package/dist/typescript/commonjs/features/feedback/model/model.d.ts.map +1 -1
  200. package/dist/typescript/commonjs/features/feedback/model/sockets.d.ts.map +1 -1
  201. package/dist/typescript/commonjs/features/keyboard/components/BasicLayout/keyboardGroups.d.ts +1 -0
  202. package/dist/typescript/commonjs/features/keyboard/components/BasicLayout/keyboardGroups.d.ts.map +1 -1
  203. package/dist/typescript/commonjs/features/keyboard/components/BasicPlusLayout/keyboardGroups.d.ts.map +1 -1
  204. package/dist/typescript/commonjs/features/keyboard/components/BasicPlusPlusLayout/keyboardGroups.d.ts.map +1 -1
  205. package/dist/typescript/commonjs/features/keyboard/components/Keyboard.d.ts +3 -2
  206. package/dist/typescript/commonjs/features/keyboard/components/Keyboard.d.ts.map +1 -1
  207. package/dist/typescript/commonjs/features/keyboard/components/{MainLayout.d.ts → MainLayout/MainLayout.d.ts} +1 -1
  208. package/dist/typescript/commonjs/features/keyboard/components/MainLayout/MainLayout.d.ts.map +1 -0
  209. package/dist/typescript/{module/features/keyboard/components → commonjs/features/keyboard/components/MainLayout}/constants.d.ts +5 -0
  210. package/dist/typescript/commonjs/features/keyboard/components/MainLayout/constants.d.ts.map +1 -0
  211. package/dist/typescript/commonjs/features/keyboard/components/UnderlinedLayout/UnderlinedLayout.d.ts +5 -1
  212. package/dist/typescript/commonjs/features/keyboard/components/UnderlinedLayout/UnderlinedLayout.d.ts.map +1 -1
  213. package/dist/typescript/commonjs/features/keyboard/components/UnderlinedLayout/keyboardGroups.d.ts.map +1 -1
  214. package/dist/typescript/commonjs/features/keyboard/components/UnitsLayout/helpers.d.ts +1 -0
  215. package/dist/typescript/commonjs/features/keyboard/components/UnitsLayout/helpers.d.ts.map +1 -1
  216. package/dist/typescript/commonjs/features/keyboard/components/UnitsLayout/hooks/useUnitTabs.d.ts +4 -7
  217. package/dist/typescript/commonjs/features/keyboard/components/UnitsLayout/hooks/useUnitTabs.d.ts.map +1 -1
  218. package/dist/typescript/commonjs/features/keyboard/components/UnitsLayout/keyboardGroups.d.ts +1 -0
  219. package/dist/typescript/commonjs/features/keyboard/components/UnitsLayout/keyboardGroups.d.ts.map +1 -1
  220. package/dist/typescript/commonjs/features/keyboard/components/UnitsLayout/types.d.ts +7 -1
  221. package/dist/typescript/commonjs/features/keyboard/components/UnitsLayout/types.d.ts.map +1 -1
  222. package/dist/typescript/commonjs/features/keyboard/constants/keyboardGroupsByLocale.d.ts.map +1 -1
  223. package/dist/typescript/commonjs/features/keyboard/constants/keyboardLayouts.d.ts +1 -0
  224. package/dist/typescript/commonjs/features/keyboard/constants/keyboardLayouts.d.ts.map +1 -1
  225. package/dist/typescript/commonjs/features/keyboard/types/MathKeysGroups/basicOperators.d.ts +5 -13
  226. package/dist/typescript/commonjs/features/keyboard/types/MathKeysGroups/basicOperators.d.ts.map +1 -1
  227. package/dist/typescript/commonjs/features/keyboard/types/MathKeysGroups/specialOperators.d.ts +18 -0
  228. package/dist/typescript/commonjs/features/keyboard/types/MathKeysGroups/specialOperators.d.ts.map +1 -1
  229. package/dist/typescript/commonjs/features/keyboard/types/MathKeysGroups/units.d.ts +36 -0
  230. package/dist/typescript/commonjs/features/keyboard/types/MathKeysGroups/units.d.ts.map +1 -1
  231. package/dist/typescript/commonjs/features/keyboard/types/keyboardGroupIds.d.ts +1 -0
  232. package/dist/typescript/commonjs/features/keyboard/types/keyboardGroupIds.d.ts.map +1 -1
  233. package/dist/typescript/commonjs/lib/helpers/helpers.d.ts.map +1 -1
  234. package/dist/typescript/commonjs/lib/types/requests.d.ts +4 -0
  235. package/dist/typescript/commonjs/lib/types/requests.d.ts.map +1 -0
  236. package/dist/typescript/commonjs/shared/icons/TimeIcon.d.ts +4 -0
  237. package/dist/typescript/commonjs/shared/icons/TimeIcon.d.ts.map +1 -0
  238. package/dist/typescript/commonjs/shared/icons/keyboard/RoundBracketLeftIcon/RoundBracketLeftIcon.d.ts +4 -0
  239. package/dist/typescript/commonjs/shared/icons/keyboard/RoundBracketLeftIcon/RoundBracketLeftIcon.d.ts.map +1 -0
  240. package/dist/typescript/commonjs/shared/icons/keyboard/RoundBracketRightIcon/RoundBracketRightIcon.d.ts +4 -0
  241. package/dist/typescript/commonjs/shared/icons/keyboard/RoundBracketRightIcon/RoundBracketRightIcon.d.ts.map +1 -0
  242. package/dist/typescript/commonjs/shared/translation/constants.d.ts +48 -0
  243. package/dist/typescript/commonjs/shared/translation/constants.d.ts.map +1 -1
  244. package/dist/typescript/commonjs/shared/translation/model.d.ts +2 -0
  245. package/dist/typescript/commonjs/shared/translation/model.d.ts.map +1 -1
  246. package/dist/typescript/commonjs/shared/translation/types.d.ts +2 -1
  247. package/dist/typescript/commonjs/shared/translation/types.d.ts.map +1 -1
  248. package/dist/typescript/module/features/celebrations/helpers.d.ts.map +1 -1
  249. package/dist/typescript/module/features/chatbot/model/ChatBotModel.d.ts +8 -7
  250. package/dist/typescript/module/features/chatbot/model/ChatBotModel.d.ts.map +1 -1
  251. package/dist/typescript/module/features/chatbot/model/ChatbotApi.d.ts +2 -2
  252. package/dist/typescript/module/features/chatbot/model/ChatbotApi.d.ts.map +1 -1
  253. package/dist/typescript/module/features/chatbot/model/t2s.d.ts.map +1 -1
  254. package/dist/typescript/module/features/chatbot/types/api.types.d.ts +11 -1
  255. package/dist/typescript/module/features/chatbot/types/api.types.d.ts.map +1 -1
  256. package/dist/typescript/module/features/chatbot/types/model.types.d.ts +8 -5
  257. package/dist/typescript/module/features/chatbot/types/model.types.d.ts.map +1 -1
  258. package/dist/typescript/module/features/endOfAssignment/ui/PracticeButtonGroup.d.ts.map +1 -1
  259. package/dist/typescript/module/features/feedback/model/model.d.ts +4 -1
  260. package/dist/typescript/module/features/feedback/model/model.d.ts.map +1 -1
  261. package/dist/typescript/module/features/feedback/model/sockets.d.ts.map +1 -1
  262. package/dist/typescript/module/features/keyboard/components/BasicLayout/keyboardGroups.d.ts +1 -0
  263. package/dist/typescript/module/features/keyboard/components/BasicLayout/keyboardGroups.d.ts.map +1 -1
  264. package/dist/typescript/module/features/keyboard/components/BasicPlusLayout/keyboardGroups.d.ts.map +1 -1
  265. package/dist/typescript/module/features/keyboard/components/BasicPlusPlusLayout/keyboardGroups.d.ts.map +1 -1
  266. package/dist/typescript/module/features/keyboard/components/Keyboard.d.ts +3 -2
  267. package/dist/typescript/module/features/keyboard/components/Keyboard.d.ts.map +1 -1
  268. package/dist/typescript/module/features/keyboard/components/{MainLayout.d.ts → MainLayout/MainLayout.d.ts} +1 -1
  269. package/dist/typescript/module/features/keyboard/components/MainLayout/MainLayout.d.ts.map +1 -0
  270. package/dist/typescript/{commonjs/features/keyboard/components → module/features/keyboard/components/MainLayout}/constants.d.ts +5 -0
  271. package/dist/typescript/module/features/keyboard/components/MainLayout/constants.d.ts.map +1 -0
  272. package/dist/typescript/module/features/keyboard/components/UnderlinedLayout/UnderlinedLayout.d.ts +5 -1
  273. package/dist/typescript/module/features/keyboard/components/UnderlinedLayout/UnderlinedLayout.d.ts.map +1 -1
  274. package/dist/typescript/module/features/keyboard/components/UnderlinedLayout/keyboardGroups.d.ts.map +1 -1
  275. package/dist/typescript/module/features/keyboard/components/UnitsLayout/helpers.d.ts +1 -0
  276. package/dist/typescript/module/features/keyboard/components/UnitsLayout/helpers.d.ts.map +1 -1
  277. package/dist/typescript/module/features/keyboard/components/UnitsLayout/hooks/useUnitTabs.d.ts +4 -7
  278. package/dist/typescript/module/features/keyboard/components/UnitsLayout/hooks/useUnitTabs.d.ts.map +1 -1
  279. package/dist/typescript/module/features/keyboard/components/UnitsLayout/keyboardGroups.d.ts +1 -0
  280. package/dist/typescript/module/features/keyboard/components/UnitsLayout/keyboardGroups.d.ts.map +1 -1
  281. package/dist/typescript/module/features/keyboard/components/UnitsLayout/types.d.ts +7 -1
  282. package/dist/typescript/module/features/keyboard/components/UnitsLayout/types.d.ts.map +1 -1
  283. package/dist/typescript/module/features/keyboard/constants/keyboardGroupsByLocale.d.ts.map +1 -1
  284. package/dist/typescript/module/features/keyboard/constants/keyboardLayouts.d.ts +1 -0
  285. package/dist/typescript/module/features/keyboard/constants/keyboardLayouts.d.ts.map +1 -1
  286. package/dist/typescript/module/features/keyboard/types/MathKeysGroups/basicOperators.d.ts +5 -13
  287. package/dist/typescript/module/features/keyboard/types/MathKeysGroups/basicOperators.d.ts.map +1 -1
  288. package/dist/typescript/module/features/keyboard/types/MathKeysGroups/specialOperators.d.ts +18 -0
  289. package/dist/typescript/module/features/keyboard/types/MathKeysGroups/specialOperators.d.ts.map +1 -1
  290. package/dist/typescript/module/features/keyboard/types/MathKeysGroups/units.d.ts +36 -0
  291. package/dist/typescript/module/features/keyboard/types/MathKeysGroups/units.d.ts.map +1 -1
  292. package/dist/typescript/module/features/keyboard/types/keyboardGroupIds.d.ts +1 -0
  293. package/dist/typescript/module/features/keyboard/types/keyboardGroupIds.d.ts.map +1 -1
  294. package/dist/typescript/module/lib/helpers/helpers.d.ts.map +1 -1
  295. package/dist/typescript/module/lib/types/requests.d.ts +4 -0
  296. package/dist/typescript/module/lib/types/requests.d.ts.map +1 -0
  297. package/dist/typescript/module/shared/icons/TimeIcon.d.ts +4 -0
  298. package/dist/typescript/module/shared/icons/TimeIcon.d.ts.map +1 -0
  299. package/dist/typescript/module/shared/icons/keyboard/RoundBracketLeftIcon/RoundBracketLeftIcon.d.ts +4 -0
  300. package/dist/typescript/module/shared/icons/keyboard/RoundBracketLeftIcon/RoundBracketLeftIcon.d.ts.map +1 -0
  301. package/dist/typescript/module/shared/icons/keyboard/RoundBracketRightIcon/RoundBracketRightIcon.d.ts +4 -0
  302. package/dist/typescript/module/shared/icons/keyboard/RoundBracketRightIcon/RoundBracketRightIcon.d.ts.map +1 -0
  303. package/dist/typescript/module/shared/translation/constants.d.ts +48 -0
  304. package/dist/typescript/module/shared/translation/constants.d.ts.map +1 -1
  305. package/dist/typescript/module/shared/translation/model.d.ts +2 -0
  306. package/dist/typescript/module/shared/translation/model.d.ts.map +1 -1
  307. package/dist/typescript/module/shared/translation/types.d.ts +2 -1
  308. package/dist/typescript/module/shared/translation/types.d.ts.map +1 -1
  309. package/example/.expo/README.md +8 -0
  310. package/example/.expo/devices.json +3 -0
  311. package/example/.expo/web/cache/production/images/favicon/favicon-24272cdaeff82cc5facdaccd982a6f05b60c4504704bbf94c19a6388659880bb-contain-transparent/favicon-48.png +0 -0
  312. package/example/app.json +30 -0
  313. package/example/assets/adaptive-icon.png +0 -0
  314. package/example/assets/favicon.png +0 -0
  315. package/example/assets/icon.png +0 -0
  316. package/example/assets/splash-icon.png +0 -0
  317. package/example/babel.config.js +28 -0
  318. package/example/index.js +8 -0
  319. package/example/metro.config.js +18 -0
  320. package/example/package.json +25 -0
  321. package/example/src/App.tsx +8 -0
  322. package/example/tsconfig.json +6 -0
  323. package/example/yarn.lock +6552 -0
  324. package/package.json +1 -1
  325. package/src/features/celebrations/helpers.ts +35 -33
  326. package/src/features/chatbot/components/Chatbot.tsx +2 -2
  327. package/src/features/chatbot/model/ChatBotModel.ts +10 -5
  328. package/src/features/chatbot/model/t2s.ts +3 -2
  329. package/src/features/chatbot/types/api.types.ts +14 -1
  330. package/src/features/chatbot/types/model.types.ts +12 -5
  331. package/src/features/endOfAssignment/ui/PracticeButtonGroup.tsx +4 -3
  332. package/src/features/feedback/model/model.ts +4 -1
  333. package/src/features/feedback/model/sockets.ts +8 -6
  334. package/src/features/keyboard/components/BasicLayout/keyboardGroups.ts +4 -0
  335. package/src/features/keyboard/components/BasicPlusLayout/keyboardGroups.ts +26 -16
  336. package/src/features/keyboard/components/BasicPlusPlusLayout/keyboardGroups.ts +30 -24
  337. package/src/features/keyboard/components/Keyboard.tsx +44 -11
  338. package/src/features/keyboard/components/KeysList/KeysList.tsx +1 -1
  339. package/src/features/keyboard/components/{MainLayout.tsx → MainLayout/MainLayout.tsx} +6 -7
  340. package/src/features/keyboard/components/{constants.ts → MainLayout/constants.ts} +6 -1
  341. package/src/features/keyboard/components/UnderlinedLayout/UnderlinedLayout.tsx +7 -2
  342. package/src/features/keyboard/components/UnderlinedLayout/keyboardGroups.ts +5 -3
  343. package/src/features/keyboard/components/UnitsLayout/UnitsLayout.tsx +1 -0
  344. package/src/features/keyboard/components/UnitsLayout/helpers.tsx +3 -0
  345. package/src/features/keyboard/components/UnitsLayout/hooks/useUnitTabs.ts +36 -22
  346. package/src/features/keyboard/components/UnitsLayout/keyboardGroups.ts +11 -0
  347. package/src/features/keyboard/components/UnitsLayout/types.ts +7 -0
  348. package/src/features/keyboard/constants/keyboardGroupsByLocale.ts +23 -0
  349. package/src/features/keyboard/constants/keyboardLayouts.ts +11 -0
  350. package/src/features/keyboard/types/MathKeysGroups/basicOperators.tsx +15 -24
  351. package/src/features/keyboard/types/MathKeysGroups/specialOperators.tsx +21 -0
  352. package/src/features/keyboard/types/MathKeysGroups/units.tsx +3 -0
  353. package/src/features/keyboard/types/keyboardGroupIds.ts +1 -0
  354. package/src/lib/helpers/helpers.ts +23 -8
  355. package/src/lib/types/requests.ts +1 -0
  356. package/src/shared/icons/TimeIcon.tsx +23 -0
  357. package/src/shared/icons/keyboard/CDotIcon/CDotIcon.tsx +2 -2
  358. package/src/shared/icons/keyboard/RoundBracketLeftIcon/RoundBracketLeftIcon.tsx +18 -0
  359. package/src/shared/icons/keyboard/RoundBracketRightIcon/RoundBracketRightIcon.tsx +18 -0
  360. package/src/shared/translation/constants.ts +2 -0
  361. package/src/shared/translation/localization/ca.json +7 -6
  362. package/src/shared/translation/localization/de.json +43 -0
  363. package/src/shared/translation/localization/en.json +7 -6
  364. package/src/shared/translation/localization/gb.json +7 -6
  365. package/src/shared/translation/localization/sct.json +7 -6
  366. package/src/shared/translation/localization/sw.json +7 -6
  367. package/src/shared/translation/types.ts +4 -0
  368. package/tsconfig.build.json +4 -0
  369. package/tsconfig.json +34 -0
  370. package/yarn.lock +8623 -0
  371. package/dist/commonjs/features/keyboard/components/MainLayout.js.map +0 -1
  372. package/dist/commonjs/features/keyboard/components/constants.js.map +0 -1
  373. package/dist/module/features/keyboard/components/MainLayout.js.map +0 -1
  374. package/dist/module/features/keyboard/components/constants.js.map +0 -1
  375. package/dist/typescript/commonjs/features/keyboard/components/MainLayout.d.ts.map +0 -1
  376. package/dist/typescript/commonjs/features/keyboard/components/constants.d.ts.map +0 -1
  377. package/dist/typescript/module/features/keyboard/components/MainLayout.d.ts.map +0 -1
  378. package/dist/typescript/module/features/keyboard/components/constants.d.ts.map +0 -1
@@ -1,12 +1,15 @@
1
- import React, { useMemo } from 'react'
2
- import { StyleProp, StyleSheet, useWindowDimensions, ViewStyle } from 'react-native'
3
- import { COLORS, IS_MOBILE, SelectOptionColor, SHADOWS } from '@magmamath/react-native-ui'
4
- import { KeyboardKey, KeyboardKeyValue } from '../types/types'
1
+ import React, { useEffect, useMemo, useRef } from 'react'
2
+ import { Animated, StyleProp, StyleSheet, useWindowDimensions, ViewStyle } from 'react-native'
3
+ import { COLORS, IS_MOBILE, IS_WEB, SelectOptionColor, SHADOWS } from '@magmamath/react-native-ui'
4
+ import { KeyboardKey, KeyboardKeyValue } from '../types'
5
5
  import { Numpad } from './Numpad/Numpad'
6
+ import { MainLayout } from './MainLayout/MainLayout'
7
+ import {
8
+ getLayoutConfigStyles,
9
+ KEYBOARD_SLIDE_DISTANCE,
10
+ slideInAnimationSettings,
11
+ } from './MainLayout/constants'
6
12
  import { MOBILE_LAYOUT_WIDTH } from '../constants/constants'
7
- import { getLayoutConfigStyles } from './constants'
8
- import { MainLayout } from './MainLayout'
9
- import Animated, { SlideInDown } from 'react-native-reanimated'
10
13
 
11
14
  type KeyboardProps = {
12
15
  onKeyPress: (key: KeyboardKeyValue) => void
@@ -14,11 +17,19 @@ type KeyboardProps = {
14
17
  style?: StyleProp<ViewStyle>
15
18
  color?: SelectOptionColor
16
19
  isDisabled?: boolean
20
+ isMainLayoutDisabled?: boolean
17
21
  showUnderlinedKeys?: boolean
18
22
  disabledKeys?: KeyboardKey[]
19
23
  }
20
24
 
21
- export const Keyboard = ({ style, characterType, ...props }: KeyboardProps) => {
25
+ export const Keyboard = ({
26
+ style,
27
+ characterType,
28
+ isMainLayoutDisabled,
29
+ ...props
30
+ }: KeyboardProps) => {
31
+ const slideAnim = useRef(new Animated.Value(KEYBOARD_SLIDE_DISTANCE)).current
32
+
22
33
  const { width } = useWindowDimensions()
23
34
  const isMobile = width <= MOBILE_LAYOUT_WIDTH || IS_MOBILE
24
35
  const mobileStyles = useMemo(
@@ -26,12 +37,34 @@ export const Keyboard = ({ style, characterType, ...props }: KeyboardProps) => {
26
37
  [characterType, isMobile],
27
38
  )
28
39
 
40
+ useEffect(() => {
41
+ const anim = Animated.spring(slideAnim, {
42
+ ...slideInAnimationSettings,
43
+ mass: 1,
44
+ velocity: 0,
45
+ useNativeDriver: !IS_WEB,
46
+ })
47
+
48
+ anim.start()
49
+
50
+ return () => anim.stop()
51
+ }, [])
52
+
29
53
  return (
30
54
  <Animated.View
31
- style={[styles.container, style]}
32
- entering={SlideInDown.damping(40).stiffness(320)}
55
+ style={[
56
+ styles.container,
57
+ style,
58
+ {
59
+ transform: [{ translateY: slideAnim }],
60
+ },
61
+ ]}
33
62
  >
34
- <MainLayout {...props} characterType={characterType} />
63
+ <MainLayout
64
+ {...props}
65
+ isDisabled={isMainLayoutDisabled || props.isDisabled}
66
+ characterType={characterType}
67
+ />
35
68
  <Numpad {...props} style={mobileStyles} />
36
69
  </Animated.View>
37
70
  )
@@ -1,5 +1,5 @@
1
1
  import React, { useMemo } from 'react'
2
- import { StyleProp, StyleSheet, ViewStyle } from 'react-native'
2
+ import { StyleSheet } from 'react-native'
3
3
  import {
4
4
  ButtonStyle,
5
5
  SelectGroup,
@@ -1,10 +1,10 @@
1
1
  import React, { useEffect, useMemo, useRef, useState, useCallback } from 'react'
2
2
  import { Animated, StyleSheet, useWindowDimensions, View } from 'react-native'
3
3
  import { SelectOptionColor, IS_MOBILE, IS_WEB } from '@magmamath/react-native-ui'
4
- import { getLayoutByCharType } from '../constants/keyboardLayouts'
5
- import { KeyboardKey, KeyboardKeyValue } from '../types/types'
6
- import { UnderlinedLayout } from './UnderlinedLayout/UnderlinedLayout'
7
- import { MOBILE_LAYOUT_WIDTH } from '../constants/constants'
4
+ import { getLayoutByCharType, isBasicPlusPlusLayout } from '../../constants/keyboardLayouts'
5
+ import { KeyboardKey, KeyboardKeyValue } from '../../types/types'
6
+ import { UnderlinedLayout } from '../UnderlinedLayout/UnderlinedLayout'
7
+ import { MOBILE_LAYOUT_WIDTH } from '../../constants/constants'
8
8
 
9
9
  type LayoutProps = {
10
10
  onKeyPress: (key: KeyboardKeyValue) => void
@@ -60,11 +60,11 @@ export const MainLayout = ({
60
60
  }, [showUnderlinedKeys, animateFade])
61
61
 
62
62
  return (
63
- <View style={styles.container}>
63
+ <View style={[styles.container, IS_MOBILE && { flex: 1 }]}>
64
64
  <Layout {...props} onLayoutChange={setIsSecondaryLayoutSelected} />
65
65
  {isUnderlinedLayoutVisible && (
66
66
  <Animated.View style={{ opacity: fadeAnim }}>
67
- <UnderlinedLayout {...props} />
67
+ <UnderlinedLayout {...props} showSlashKey={!isBasicPlusPlusLayout(characterType)} />
68
68
  </Animated.View>
69
69
  )}
70
70
  </View>
@@ -74,6 +74,5 @@ export const MainLayout = ({
74
74
  const styles = StyleSheet.create({
75
75
  container: {
76
76
  flexDirection: 'row',
77
- flex: 1,
78
77
  },
79
78
  })
@@ -1,5 +1,5 @@
1
1
  import { COLORS, SPACING } from '@magmamath/react-native-ui'
2
- import { KEYBOARD_LAYOUTS } from '../constants/keyboardLayouts'
2
+ import { KEYBOARD_LAYOUTS } from '../../constants/keyboardLayouts'
3
3
 
4
4
  export const KEYBOARD_SLIDE_DISTANCE = 600
5
5
 
@@ -20,3 +20,8 @@ export const getLayoutConfigStyles = (characterType?: number, isMobile?: boolean
20
20
 
21
21
  return LAYOUT_STYLES_CONFIG.DEFAULT
22
22
  }
23
+ export const slideInAnimationSettings = {
24
+ toValue: 0,
25
+ stiffness: 320,
26
+ damping: 40,
27
+ }
@@ -4,9 +4,14 @@ import { KeyboardLayoutProps, KeyboardType } from '../../types/types'
4
4
  import { Locale, useText } from '../../../../shared/translation'
5
5
  import { getKeyboardGroup } from '../../helpers'
6
6
 
7
- export const UnderlinedLayout = (props: KeyboardLayoutProps) => {
7
+ type UnderlinedLayoutProps = {
8
+ showSlashKey?: boolean
9
+ } & KeyboardLayoutProps
10
+
11
+ export const UnderlinedLayout = (props: UnderlinedLayoutProps) => {
8
12
  const t = useText()
9
13
  const keysGroup = getKeyboardGroup(t('locale') as Locale, KeyboardType.Underlined)
14
+ const keys = props.showSlashKey ? keysGroup.keys : keysGroup.keys.slice(0, -1)
10
15
 
11
- return <KeysList keys={keysGroup.keys} numOfRows={keysGroup.keys.length} {...props} />
16
+ return <KeysList keys={keys} numOfRows={props.showSlashKey ? 2 : keys.length} {...props} />
12
17
  }
@@ -1,12 +1,14 @@
1
1
  import { KeyboardGroup } from '../../types/types'
2
2
  import { MathEntryKeyboardGroupId } from '../../types/keyboardGroupIds'
3
3
  import { MATH_BASIC_OPERATORS } from '../../types/MathKeysGroups/basicOperators'
4
+ import { MATH_SPECIAL_OPERATORS } from '../../types/MathKeysGroups/specialOperators'
4
5
 
5
6
  export const MATH_ENTRY_UNDERLINED_KEYBOARD_GROUP: KeyboardGroup = {
6
7
  id: MathEntryKeyboardGroupId.UNDERLINED,
7
8
  keys: [
8
- MATH_BASIC_OPERATORS.UNDERLINED_TEN,
9
- MATH_BASIC_OPERATORS.UNDERLINED_ONE,
10
- MATH_BASIC_OPERATORS.UNDERLINED_U,
9
+ MATH_SPECIAL_OPERATORS.UNDERLINED_TEN,
10
+ MATH_SPECIAL_OPERATORS.UNDERLINED_U,
11
+ MATH_SPECIAL_OPERATORS.UNDERLINED_ONE,
12
+ MATH_BASIC_OPERATORS.SLASH,
11
13
  ],
12
14
  }
@@ -62,6 +62,7 @@ const styles = StyleSheet.create({
62
62
  flexDirection: IS_MOBILE ? 'column' : 'row',
63
63
  gap: 16,
64
64
  paddingRight: 16,
65
+ flex: 1,
65
66
  },
66
67
  option: {
67
68
  flexBasis: 45,
@@ -50,3 +50,6 @@ export const getSelectOptions = ({
50
50
  ]
51
51
  }
52
52
  }
53
+
54
+ export const isKeyboardUnitsGroupType = (k: string): k is KeyboardUnitsGroupType =>
55
+ (Object.values(KeyboardUnitsGroupType) as string[]).includes(k)
@@ -1,32 +1,46 @@
1
1
  import { useText } from '../../../../../shared/translation'
2
2
  import { useMemo, useState } from 'react'
3
- import { TabOptionProps } from '@magmamath/react-native-ui'
4
-
5
- import { KeyboardUnitsGroupType } from '../types'
3
+ import { KeyboardUnitsGroupType, UnitTab } from '../types'
4
+ import { useWindowDimensions } from 'react-native'
5
+ import { IS_MOBILE, TabOptionProps } from '@magmamath/react-native-ui'
6
+ import { isKeyboardUnitsGroupType } from '../helpers'
6
7
 
7
8
  export const useUnitTabs = () => {
8
9
  const t = useText()
9
- const tabs = useMemo(
10
+ const { width } = useWindowDimensions()
11
+
12
+ const allTabs = useMemo<UnitTab[]>(
10
13
  () => [
11
- {
12
- title: t('keyboard.length'),
13
- key: KeyboardUnitsGroupType.LENGTH,
14
- },
15
- {
16
- title: t('keyboard.area'),
17
- key: KeyboardUnitsGroupType.AREA,
18
- },
19
- {
20
- title: t('keyboard.volume'),
21
- key: KeyboardUnitsGroupType.VOLUME,
22
- },
23
- {
24
- title: t('keyboard.weight'),
25
- key: KeyboardUnitsGroupType.WEIGHT,
26
- },
14
+ { title: t('keyboard.length'), key: KeyboardUnitsGroupType.LENGTH },
15
+ { title: t('keyboard.area'), key: KeyboardUnitsGroupType.AREA, minBreakpoint: 1005 },
16
+ { title: t('keyboard.volume'), key: KeyboardUnitsGroupType.VOLUME, minBreakpoint: 1060 },
17
+ { title: t('keyboard.weight'), key: KeyboardUnitsGroupType.WEIGHT, minBreakpoint: 1060 },
18
+ { title: t('keyboard.time'), key: KeyboardUnitsGroupType.TIME, minBreakpoint: 1125 },
27
19
  ],
28
20
  [t],
29
21
  )
30
- const [activeTab, setActiveTab] = useState<TabOptionProps>(tabs[0])
31
- return { tabs, activeTab, setActiveTab }
22
+
23
+ const tabs = useMemo(
24
+ () =>
25
+ allTabs.filter(
26
+ (tab) => IS_MOBILE || tab.minBreakpoint === undefined || width >= tab.minBreakpoint,
27
+ ),
28
+ [allTabs, width],
29
+ )
30
+
31
+ const [activeKey, setActiveKey] = useState<KeyboardUnitsGroupType | undefined>(() => tabs[0]?.key)
32
+
33
+ const activeTab = useMemo(() => {
34
+ return tabs.find((t) => t?.key && t.key === activeKey) ?? tabs[0]
35
+ }, [tabs, activeKey])
36
+
37
+ return {
38
+ tabs,
39
+ activeTab,
40
+ setActiveTab: (tab: TabOptionProps) => {
41
+ if (isKeyboardUnitsGroupType(tab.key)) {
42
+ setActiveKey(tab.key)
43
+ }
44
+ },
45
+ }
32
46
  }
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  MATH_AREA_UNITS,
3
3
  MATH_LENGTH_UNITS,
4
+ MATH_TIME_UNITS,
4
5
  MATH_VOLUME_UNITS,
5
6
  MATH_WEIGHT_UNITS,
6
7
  } from '../../types/MathKeysGroups/units'
@@ -10,6 +11,7 @@ import { VolumeIcon } from '../../../../shared/icons/VolumeIcon'
10
11
  import { WeightIcon } from '../../../../shared/icons/WeightIcon'
11
12
  import { KeyboardUnitsGroupType, UnitKeyboardGroups } from './types'
12
13
  import { MathEntryKeyboardGroupId } from '../../types/keyboardGroupIds'
14
+ import { TimeIcon } from '../../../../shared/icons/TimeIcon'
13
15
 
14
16
  export const MATH_ENTRY_LENGTH_UNITS_SW_KEYBOARD_GROUPS: UnitKeyboardGroups = {
15
17
  id: MathEntryKeyboardGroupId.LENGTH_UNITS_SW,
@@ -171,6 +173,11 @@ export const MATH_ENTRY_WEIGHT_UNITS_SW_KEYBOARD_GROUPS: UnitKeyboardGroups = {
171
173
  ],
172
174
  }
173
175
 
176
+ export const MATH_ENTRY_TIME_UNITS_SW_KEYBOARD_GROUPS: UnitKeyboardGroups = {
177
+ id: MathEntryKeyboardGroupId.TIME_SW,
178
+ keys: [[MATH_TIME_UNITS.S, MATH_TIME_UNITS.M, MATH_TIME_UNITS.H]],
179
+ }
180
+
174
181
  export const MATH_ENTRY_WEIGHT_UNITS_US_KEYBOARD_GROUPS: UnitKeyboardGroups = {
175
182
  id: MathEntryKeyboardGroupId.WEIGHT_UNITS_US,
176
183
  keys: [
@@ -199,4 +206,8 @@ export const UNITS_KEYBOARD_GROUPS = new Map([
199
206
  KeyboardUnitsGroupType.WEIGHT,
200
207
  { keys: MATH_ENTRY_WEIGHT_UNITS_SW_KEYBOARD_GROUPS.keys, icon: WeightIcon },
201
208
  ],
209
+ [
210
+ KeyboardUnitsGroupType.TIME,
211
+ { keys: MATH_ENTRY_TIME_UNITS_SW_KEYBOARD_GROUPS.keys, icon: TimeIcon },
212
+ ],
202
213
  ])
@@ -1,4 +1,5 @@
1
1
  import { KeyboardGroup, KeyboardKey } from '@magmamath/students-features'
2
+ import { TabOptionProps } from '@magmamath/react-native-ui'
2
3
 
3
4
  export enum SelectedLayout {
4
5
  ALGEBRA = 'algebra',
@@ -10,8 +11,14 @@ export enum KeyboardUnitsGroupType {
10
11
  AREA = 'area',
11
12
  VOLUME = 'volume',
12
13
  WEIGHT = 'weight',
14
+ TIME = 'time',
13
15
  }
14
16
 
15
17
  export type UnitKeyboardGroups = {
16
18
  keys: KeyboardKey[][]
17
19
  } & Omit<KeyboardGroup, 'keys'>
20
+
21
+ export type UnitTab = Omit<TabOptionProps, 'key'> & {
22
+ key: KeyboardUnitsGroupType
23
+ minBreakpoint?: number
24
+ }
@@ -1,5 +1,6 @@
1
1
  import { KeyboardGroup, KeyboardType } from '../types/types'
2
2
  import {
3
+ MATH_CURRENCY_DE_KEYBOARD_GROUP,
3
4
  MATH_CURRENCY_SW_KEYBOARD_GROUP,
4
5
  MATH_CURRENCY_UK_KEYBOARD_GROUP,
5
6
  MATH_CURRENCY_US_KEYBOARD_GROUP,
@@ -30,6 +31,7 @@ import {
30
31
  MATH_ENTRY_AREA_UNITS_US_KEYBOARD_GROUPS,
31
32
  MATH_ENTRY_LENGTH_UNITS_SW_KEYBOARD_GROUPS,
32
33
  MATH_ENTRY_LENGTH_UNITS_US_KEYBOARD_GROUPS,
34
+ MATH_ENTRY_TIME_UNITS_SW_KEYBOARD_GROUPS,
33
35
  MATH_ENTRY_VOLUME_UNITS_SW_KEYBOARD_GROUPS,
34
36
  MATH_ENTRY_VOLUME_UNITS_UK_KEYBOARD_GROUPS,
35
37
  MATH_ENTRY_VOLUME_UNITS_US_KEYBOARD_GROUPS,
@@ -69,6 +71,7 @@ function createKeyboardUnitsLocale(
69
71
  [KeyboardUnitsGroupType.AREA]: MATH_ENTRY_AREA_UNITS_US_KEYBOARD_GROUPS,
70
72
  [KeyboardUnitsGroupType.VOLUME]: MATH_ENTRY_VOLUME_UNITS_US_KEYBOARD_GROUPS,
71
73
  [KeyboardUnitsGroupType.WEIGHT]: MATH_ENTRY_WEIGHT_UNITS_US_KEYBOARD_GROUPS,
74
+ [KeyboardUnitsGroupType.TIME]: MATH_ENTRY_TIME_UNITS_SW_KEYBOARD_GROUPS,
72
75
  }
73
76
  return { ...base, ...overrides }
74
77
  }
@@ -98,6 +101,20 @@ export const KEYBOARD_GROUPS_BY_LOCALE: Record<Locale, Record<KeyboardType, Keyb
98
101
  [KeyboardType.BasicTime]: MATH_TIME_SW_KEYBOARD_GROUP,
99
102
  [KeyboardType.Numpad]: MATH_ENTRY_NUMBERS_SW_KEYBOARD_GROUP,
100
103
  }),
104
+ [Locale.DE]: createKeyboardLocale({
105
+ [KeyboardType.Basic]: MATH_ENTRY_BASIC_SW_KEYBOARD_GROUP,
106
+ [KeyboardType.BasicPlus]: MATH_ENTRY_BASIC_SW_PLUS,
107
+ [KeyboardType.BasicPlusMobile]: MATH_ENTRY_BASIC_PLUS_MOBILE_SW,
108
+ [KeyboardType.BasicPlusPlus]: MATH_ENTRY_BASIC_PLUS_PLUS_SW,
109
+ [KeyboardType.BasicPlusPlusMobile]: MATH_ENTRY_BASIC_PLUS_PLUS_MOBILE_SW,
110
+ [KeyboardType.BasicUnits]: {
111
+ ...MATH_ENTRY_LENGTH_UNITS_US_KEYBOARD_GROUPS,
112
+ keys: MATH_ENTRY_LENGTH_UNITS_US_KEYBOARD_GROUPS.keys[0],
113
+ },
114
+ [KeyboardType.BasicCurrency]: MATH_CURRENCY_DE_KEYBOARD_GROUP,
115
+ [KeyboardType.BasicTime]: MATH_TIME_SW_KEYBOARD_GROUP,
116
+ [KeyboardType.Numpad]: MATH_ENTRY_NUMBERS_SW_KEYBOARD_GROUP,
117
+ }),
101
118
  }
102
119
  export const KEYBOARD_UNITS_GROUPS_BY_LOCALE: Record<
103
120
  Locale,
@@ -119,4 +136,10 @@ export const KEYBOARD_UNITS_GROUPS_BY_LOCALE: Record<
119
136
  [KeyboardUnitsGroupType.VOLUME]: MATH_ENTRY_VOLUME_UNITS_SW_KEYBOARD_GROUPS,
120
137
  [KeyboardUnitsGroupType.WEIGHT]: MATH_ENTRY_WEIGHT_UNITS_SW_KEYBOARD_GROUPS,
121
138
  }),
139
+ [Locale.DE]: createKeyboardUnitsLocale({
140
+ [KeyboardUnitsGroupType.LENGTH]: MATH_ENTRY_LENGTH_UNITS_SW_KEYBOARD_GROUPS,
141
+ [KeyboardUnitsGroupType.AREA]: MATH_ENTRY_AREA_UNITS_SW_KEYBOARD_GROUPS,
142
+ [KeyboardUnitsGroupType.VOLUME]: MATH_ENTRY_VOLUME_UNITS_SW_KEYBOARD_GROUPS,
143
+ [KeyboardUnitsGroupType.WEIGHT]: MATH_ENTRY_WEIGHT_UNITS_SW_KEYBOARD_GROUPS,
144
+ }),
122
145
  }
@@ -71,3 +71,14 @@ export function getLayoutByCharType(charType?: number) {
71
71
  }
72
72
  return AlgebraLayout
73
73
  }
74
+
75
+ export function isBasicPlusPlusLayout(charType?: number) {
76
+ if (!charType) {
77
+ return true
78
+ }
79
+
80
+ return (
81
+ KEYBOARD_LAYOUTS[KeyboardType.BasicPlusPlus].characterTypes.includes(charType) ||
82
+ KEYBOARD_LAYOUTS[KeyboardType.AlgebraAdvanced].characterTypes.includes(charType)
83
+ )
84
+ }
@@ -42,9 +42,8 @@ import { EqualsIcon } from '../../../../shared/icons/keyboard/EqualsIcon/EqualsI
42
42
  import { AbsoluteValueIcon } from '../../../../shared/icons/keyboard/AbsoluteValueIcon/AbsoluteValueIcon'
43
43
  import { IntervalIcon } from '../../../../shared/icons/keyboard/IntervalIcon/IntervalIcon'
44
44
  import { createMathKeysGroup } from './helpers'
45
- import { UnderlinedTenIcon } from '../../../../shared/icons/keyboard/UnderlinedTenIcon/UnderlinedTenIcon'
46
- import { UnderlinedOneIcon } from '../../../../shared/icons/keyboard/UnderlinedOneIcon/UnderlinedOneIcon'
47
- import { UnderlinedUIcon } from '../../../../shared/icons/keyboard/UnderlinedUIcon/UnderlinedUIcon'
45
+ import { RoundBracketLeftIcon } from '../../../../shared/icons/keyboard/RoundBracketLeftIcon/RoundBracketLeftIcon'
46
+ import { RoundBracketRightIcon } from '../../../../shared/icons/keyboard/RoundBracketRightIcon/RoundBracketRightIcon'
48
47
 
49
48
  export const MATH_BASIC_OPERATORS = createMathKeysGroup({
50
49
  ADDITION: {
@@ -98,7 +97,7 @@ export const MATH_BASIC_OPERATORS = createMathKeysGroup({
98
97
  },
99
98
  NOT_EQUAL: {
100
99
  icon: <NotEqualIcon {...DEFAULT_KEY_ICON_PROPS} />,
101
- mathliveValue: '\\neq',
100
+ mathliveValue: '',
102
101
  katexValue: '≠',
103
102
  },
104
103
  APPROXIMATELY_EQUAL: {
@@ -122,7 +121,7 @@ export const MATH_BASIC_OPERATORS = createMathKeysGroup({
122
121
  katexValue: ':',
123
122
  },
124
123
  C_DOT: {
125
- icon: <CDotIcon {...DEFAULT_KEY_ICON_PROPS} />,
124
+ icon: <CDotIcon {...DEFAULT_KEY_ICON_PROPS} size={6} />,
126
125
  mathliveValue: '\\cdot',
127
126
  katexValue: '⋅',
128
127
  },
@@ -254,6 +253,16 @@ export const MATH_BASIC_OPERATORS = createMathKeysGroup({
254
253
  mathliveValue: '$\\left(#@\\right)$',
255
254
  katexValue: '( )',
256
255
  },
256
+ ROUND_BRACKET_RIGHT: {
257
+ icon: <RoundBracketRightIcon {...DEFAULT_KEY_ICON_PROPS} />,
258
+ mathliveValue: ')',
259
+ katexValue: ')',
260
+ },
261
+ ROUND_BRACKET_LEFT: {
262
+ icon: <RoundBracketLeftIcon {...DEFAULT_KEY_ICON_PROPS} />,
263
+ mathliveValue: '(',
264
+ katexValue: '(',
265
+ },
257
266
  ORDERED_PAIR: {
258
267
  icon: <OrderedPairIcon {...DEFAULT_KEY_ICON_PROPS} size={20} extraColor={COLORS.NEUTRAL_6} />,
259
268
  mathliveValue: '$\\left(\\placeholder{},\\placeholder{}\\right)$',
@@ -266,25 +275,7 @@ export const MATH_BASIC_OPERATORS = createMathKeysGroup({
266
275
  },
267
276
  INTERVAL: {
268
277
  icon: <IntervalIcon {...DEFAULT_KEY_ICON_PROPS} />,
269
- mathliveValue: '$\\left[, \\right]$',
278
+ mathliveValue: '$\\left[\\placeholder{},\\placeholder{}\\right]$',
270
279
  katexValue: '[ , ]',
271
280
  },
272
- UNDERLINED_TEN: {
273
- icon: <UnderlinedTenIcon {...DEFAULT_KEY_ICON_PROPS} />,
274
- mathliveValue: '\\underline{10}',
275
- katexValue: '10̲',
276
- spreadsheetValue: 'TEN',
277
- },
278
- UNDERLINED_ONE: {
279
- icon: <UnderlinedOneIcon {...DEFAULT_KEY_ICON_PROPS} />,
280
- mathliveValue: '\\underline{1}',
281
- katexValue: '1̲',
282
- spreadsheetValue: 'ONE_FOOT_NOTE',
283
- },
284
- UNDERLINED_U: {
285
- icon: <UnderlinedUIcon {...DEFAULT_KEY_ICON_PROPS} />,
286
- mathliveValue: '\\underline{u}',
287
- katexValue: 'U̲',
288
- spreadsheetValue: 'FRACTION',
289
- },
290
281
  })
@@ -2,6 +2,9 @@ import React from 'react'
2
2
  import { DEFAULT_KEY_ICON_PROPS } from '../../constants/constants'
3
3
  import { BackspaceIcon } from '../../../../shared/icons/keyboard/BackspaceIcon/BackspaceIcon'
4
4
  import { createMathKeysGroup } from './helpers'
5
+ import { UnderlinedTenIcon } from '../../../../shared/icons/keyboard/UnderlinedTenIcon/UnderlinedTenIcon'
6
+ import { UnderlinedOneIcon } from '../../../../shared/icons/keyboard/UnderlinedOneIcon/UnderlinedOneIcon'
7
+ import { UnderlinedUIcon } from '../../../../shared/icons/keyboard/UnderlinedUIcon/UnderlinedUIcon'
5
8
 
6
9
  export const MATH_SPECIAL_OPERATORS = createMathKeysGroup({
7
10
  LIM: {
@@ -49,4 +52,22 @@ export const MATH_SPECIAL_OPERATORS = createMathKeysGroup({
49
52
  mathliveValue: 'backspace',
50
53
  katexValue: 'backspace',
51
54
  },
55
+ UNDERLINED_TEN: {
56
+ icon: <UnderlinedTenIcon {...DEFAULT_KEY_ICON_PROPS} />,
57
+ mathliveValue: '\\underline{10}',
58
+ katexValue: '10̲',
59
+ spreadsheetValue: 'TEN',
60
+ },
61
+ UNDERLINED_ONE: {
62
+ icon: <UnderlinedOneIcon {...DEFAULT_KEY_ICON_PROPS} />,
63
+ mathliveValue: '\\underline{1}',
64
+ katexValue: '1̲',
65
+ spreadsheetValue: 'ONE_FOOT_NOTE',
66
+ },
67
+ UNDERLINED_U: {
68
+ icon: <UnderlinedUIcon {...DEFAULT_KEY_ICON_PROPS} />,
69
+ mathliveValue: '\\underline{u}',
70
+ katexValue: 'U̲',
71
+ spreadsheetValue: 'FRACTION',
72
+ },
52
73
  })
@@ -427,16 +427,19 @@ export const MATH_TIME_UNITS = createMathKeysGroup({
427
427
  label: 's',
428
428
  mathliveValue: '\\mathrm{s}',
429
429
  katexValue: 's',
430
+ style: STYLE_PRESETS.LARGE,
430
431
  },
431
432
  M: {
432
433
  label: 'min',
433
434
  mathliveValue: '$\\mathrm{min}',
434
435
  katexValue: 'min',
436
+ style: STYLE_PRESETS.LARGE,
435
437
  },
436
438
  H: {
437
439
  label: 'h',
438
440
  mathliveValue: '\\mathrm{h}',
439
441
  katexValue: 'h',
442
+ style: STYLE_PRESETS.LARGE,
440
443
  },
441
444
  DAY: {
442
445
  label: 'day',
@@ -27,5 +27,6 @@ export enum MathEntryKeyboardGroupId {
27
27
  CURRENCY_SW = 'math-entry-currency-sw',
28
28
  CURRENCY_UK = 'math-entry-currency-uk',
29
29
  CURRENCY_US = 'math-entry-currency-us',
30
+ CURRENCY_DE = 'math-entry-currency-de',
30
31
  UNDERLINED = 'math-entry-underlined',
31
32
  }
@@ -27,12 +27,27 @@ export const getRelativeTimeText = (date: Date) => {
27
27
  const years = getYears(days)
28
28
 
29
29
  if (seconds < 60) return getText('time.justNow')
30
- if (minutes < 60)
31
- return `${minutes} ${minutes === 1 ? getText('time.minuteAgo') : getText('time.minutesAgo')}`
32
- if (hours < 24)
33
- return `${hours} ${hours === 1 ? getText('time.hourAgo') : getText('time.hoursAgo')}`
34
- if (days < 30) return `${days} ${days === 1 ? getText('time.dayAgo') : getText('time.daysAgo')}`
35
- if (months < 12)
36
- return `${months} ${months === 1 ? getText('time.monthAgo') : getText('time.monthsAgo')}`
37
- return `${years} ${years === 1 ? getText('time.yearAgo') : getText('time.yearsAgo')}`
30
+
31
+ if (minutes < 60) {
32
+ if (minutes === 1) return `1 ${getText('time.minuteAgo')}`
33
+ return getText('time.minutesAgo', { count: minutes.toString() })
34
+ }
35
+
36
+ if (hours < 24) {
37
+ if (hours === 1) return `1 ${getText('time.hourAgo')}`
38
+ return getText('time.hoursAgo', { count: hours.toString() })
39
+ }
40
+
41
+ if (days < 30) {
42
+ if (days === 1) return `1 ${getText('time.dayAgo')}`
43
+ return getText('time.daysAgo', { count: days.toString() })
44
+ }
45
+
46
+ if (months < 12) {
47
+ if (months === 1) return `1 ${getText('time.monthAgo')}`
48
+ return getText('time.monthsAgo', { count: months.toString() })
49
+ }
50
+
51
+ if (years === 1) return `1 ${getText('time.yearAgo')}`
52
+ return getText('time.yearsAgo', { count: years.toString() })
38
53
  }
@@ -0,0 +1 @@
1
+ export type WithAbortSignal<T> = T & { signal?: AbortSignal }
@@ -0,0 +1,23 @@
1
+ import { COLORS } from '@magmamath/react-native-ui'
2
+ import { IconProps } from './icon.types'
3
+ import Svg, { Path } from 'react-native-svg'
4
+ import React from 'react'
5
+
6
+ export const TimeIcon = ({ size = 20, color = COLORS.NEUTRAL_9 }: IconProps) => {
7
+ return (
8
+ <Svg width={size} height={size} viewBox="0 0 17 17" fill="none">
9
+ <Path
10
+ fillRule="evenodd"
11
+ clipRule="evenodd"
12
+ d="M7.84 1.5C4.33851 1.5 1.5 4.33851 1.5 7.84C1.5 11.3415 4.33851 14.18 7.84 14.18C11.3415 14.18 14.18 11.3415 14.18 7.84C14.18 4.33851 11.3415 1.5 7.84 1.5ZM0 7.84C0 3.51009 3.51009 0 7.84 0C12.1699 0 15.68 3.51009 15.68 7.84C15.68 12.1699 12.1699 15.68 7.84 15.68C3.51009 15.68 0 12.1699 0 7.84Z"
13
+ fill={color}
14
+ />
15
+ <Path
16
+ fillRule="evenodd"
17
+ clipRule="evenodd"
18
+ d="M7.83999 3.0826C8.2542 3.0826 8.58999 3.41839 8.58999 3.8326V7.8033L10.4859 9.42838C10.8004 9.69794 10.8368 10.1714 10.5673 10.4859C10.2977 10.8004 9.82421 10.8368 9.50972 10.5673L7.57539 8.90926C7.2673 8.64519 7.08999 8.25967 7.08999 7.85389V3.8326C7.08999 3.41839 7.42578 3.0826 7.83999 3.0826Z"
19
+ fill={color}
20
+ />
21
+ </Svg>
22
+ )
23
+ }
@@ -4,8 +4,8 @@ import Svg, { Circle } from 'react-native-svg'
4
4
 
5
5
  export const CDotIcon = ({ size = 20, color }: IconProps) => {
6
6
  return (
7
- <Svg width={size} height={size} viewBox="0 0 16 16" fill="none">
8
- <Circle cx="8.00001" cy="8.00001" r="2.00001" fill={color} />
7
+ <Svg width={size} height={size} viewBox="0 0 6 6" fill="none">
8
+ <Circle cx="3.00001" cy="3.00001" r="3.00001" fill={color} />
9
9
  </Svg>
10
10
  )
11
11
  }
@@ -0,0 +1,18 @@
1
+ import React from 'react'
2
+ import { IconProps } from '../../icon.types'
3
+ import Svg, { Path } from 'react-native-svg'
4
+
5
+ const ASPECT_RATIO = 5 / 14
6
+
7
+ export const RoundBracketLeftIcon = ({ size = 20, color }: IconProps) => {
8
+ return (
9
+ <Svg width={size * ASPECT_RATIO} height={size} viewBox="0 0 5 14" fill="none">
10
+ <Path
11
+ fillRule="evenodd"
12
+ clipRule="evenodd"
13
+ d="M3.90533 0.21967C4.19823 0.512563 4.19823 0.987437 3.90533 1.28033C0.67361 4.51206 0.736927 10.001 3.8631 12.6806C4.17759 12.9501 4.21401 13.4236 3.94445 13.7381C3.67488 14.0526 3.20141 14.089 2.88691 13.8194C-0.986916 10.499 -0.923598 3.98794 2.84467 0.21967C3.13757 -0.0732233 3.61244 -0.0732233 3.90533 0.21967Z"
14
+ fill={color}
15
+ />
16
+ </Svg>
17
+ )
18
+ }
@@ -0,0 +1,18 @@
1
+ import React from 'react'
2
+ import { IconProps } from '../../icon.types'
3
+ import Svg, { Path } from 'react-native-svg'
4
+
5
+ const ASPECT_RATIO = 5 / 14
6
+
7
+ export const RoundBracketRightIcon = ({ size = 20, color }: IconProps) => {
8
+ return (
9
+ <Svg width={size * ASPECT_RATIO} height={size} viewBox="0 0 5 14" fill="none">
10
+ <Path
11
+ fillRule="evenodd"
12
+ clipRule="evenodd"
13
+ d="M0.219696 0.21967C-0.0731974 0.512563 -0.0731974 0.987437 0.219696 1.28033C3.45142 4.51206 3.3881 10.001 0.261932 12.6806C-0.0525622 12.9501 -0.0889835 13.4236 0.180583 13.7381C0.45015 14.0526 0.923625 14.089 1.23812 13.8194C5.11195 10.499 5.04863 3.98794 1.28036 0.21967C0.987463 -0.0732233 0.512589 -0.0732233 0.219696 0.21967Z"
14
+ fill={color}
15
+ />
16
+ </Svg>
17
+ )
18
+ }
@@ -4,6 +4,7 @@ import GB from './localization/gb.json'
4
4
  import SW from './localization/sw.json'
5
5
  import CA from './localization/ca.json'
6
6
  import SCT from './localization/sct.json'
7
+ import DE from './localization/de.json'
7
8
 
8
9
  export const LOCALIZATION_CONFIGS = {
9
10
  [Locale.EN]: EN,
@@ -11,4 +12,5 @@ export const LOCALIZATION_CONFIGS = {
11
12
  [Locale.SW]: SW,
12
13
  [Locale.CA]: CA,
13
14
  [Locale.SCT]: SCT,
15
+ [Locale.DE]: DE,
14
16
  }