@magmamath/students-features 1.7.7 → 1.7.8

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 (70) hide show
  1. package/dist/commonjs/features/keyboard/components/Keyboard.js +1 -1
  2. package/dist/commonjs/features/keyboard/components/Keyboard.js.map +1 -1
  3. package/dist/commonjs/features/keyboard/constants/groups/basic.constants.js +6 -6
  4. package/dist/commonjs/features/keyboard/constants/groups/basic.constants.js.map +1 -1
  5. package/dist/commonjs/features/keyboard/constants/groups/basicPlus.constants.js +13 -10
  6. package/dist/commonjs/features/keyboard/constants/groups/basicPlus.constants.js.map +1 -1
  7. package/dist/commonjs/features/keyboard/constants/groups/basicPlusPlus.constants.js +13 -10
  8. package/dist/commonjs/features/keyboard/constants/groups/basicPlusPlus.constants.js.map +1 -1
  9. package/dist/commonjs/features/keyboard/constants/groups/numpad.constants.js +44 -86
  10. package/dist/commonjs/features/keyboard/constants/groups/numpad.constants.js.map +1 -1
  11. package/dist/commonjs/features/keyboard/constants/keyboard.helpers.js +81 -60
  12. package/dist/commonjs/features/keyboard/constants/keyboard.helpers.js.map +1 -1
  13. package/dist/commonjs/features/keyboard/types/types.js +7 -1
  14. package/dist/commonjs/features/keyboard/types/types.js.map +1 -1
  15. package/dist/module/features/keyboard/components/Keyboard.js +1 -1
  16. package/dist/module/features/keyboard/components/Keyboard.js.map +1 -1
  17. package/dist/module/features/keyboard/constants/groups/basic.constants.js +6 -6
  18. package/dist/module/features/keyboard/constants/groups/basic.constants.js.map +1 -1
  19. package/dist/module/features/keyboard/constants/groups/basicPlus.constants.js +13 -10
  20. package/dist/module/features/keyboard/constants/groups/basicPlus.constants.js.map +1 -1
  21. package/dist/module/features/keyboard/constants/groups/basicPlusPlus.constants.js +13 -10
  22. package/dist/module/features/keyboard/constants/groups/basicPlusPlus.constants.js.map +1 -1
  23. package/dist/module/features/keyboard/constants/groups/numpad.constants.js +45 -87
  24. package/dist/module/features/keyboard/constants/groups/numpad.constants.js.map +1 -1
  25. package/dist/module/features/keyboard/constants/keyboard.helpers.js +62 -41
  26. package/dist/module/features/keyboard/constants/keyboard.helpers.js.map +1 -1
  27. package/dist/module/features/keyboard/types/types.js +6 -0
  28. package/dist/module/features/keyboard/types/types.js.map +1 -1
  29. package/dist/typescript/commonjs/features/keyboard/components/Keyboard.d.ts +2 -1
  30. package/dist/typescript/commonjs/features/keyboard/components/Keyboard.d.ts.map +1 -1
  31. package/dist/typescript/commonjs/features/keyboard/constants/__tests__/keyboard.characterization.test.d.ts +2 -0
  32. package/dist/typescript/commonjs/features/keyboard/constants/__tests__/keyboard.characterization.test.d.ts.map +1 -0
  33. package/dist/typescript/commonjs/features/keyboard/constants/groups/basic.constants.d.ts +2 -2
  34. package/dist/typescript/commonjs/features/keyboard/constants/groups/basic.constants.d.ts.map +1 -1
  35. package/dist/typescript/commonjs/features/keyboard/constants/groups/basicPlus.constants.d.ts +2 -2
  36. package/dist/typescript/commonjs/features/keyboard/constants/groups/basicPlus.constants.d.ts.map +1 -1
  37. package/dist/typescript/commonjs/features/keyboard/constants/groups/basicPlusPlus.constants.d.ts +2 -2
  38. package/dist/typescript/commonjs/features/keyboard/constants/groups/basicPlusPlus.constants.d.ts.map +1 -1
  39. package/dist/typescript/commonjs/features/keyboard/constants/groups/numpad.constants.d.ts +2 -2
  40. package/dist/typescript/commonjs/features/keyboard/constants/groups/numpad.constants.d.ts.map +1 -1
  41. package/dist/typescript/commonjs/features/keyboard/constants/keyboard.helpers.d.ts +2 -2
  42. package/dist/typescript/commonjs/features/keyboard/constants/keyboard.helpers.d.ts.map +1 -1
  43. package/dist/typescript/commonjs/features/keyboard/types/types.d.ts +14 -0
  44. package/dist/typescript/commonjs/features/keyboard/types/types.d.ts.map +1 -1
  45. package/dist/typescript/module/features/keyboard/components/Keyboard.d.ts +2 -1
  46. package/dist/typescript/module/features/keyboard/components/Keyboard.d.ts.map +1 -1
  47. package/dist/typescript/module/features/keyboard/constants/__tests__/keyboard.characterization.test.d.ts +2 -0
  48. package/dist/typescript/module/features/keyboard/constants/__tests__/keyboard.characterization.test.d.ts.map +1 -0
  49. package/dist/typescript/module/features/keyboard/constants/groups/basic.constants.d.ts +2 -2
  50. package/dist/typescript/module/features/keyboard/constants/groups/basic.constants.d.ts.map +1 -1
  51. package/dist/typescript/module/features/keyboard/constants/groups/basicPlus.constants.d.ts +2 -2
  52. package/dist/typescript/module/features/keyboard/constants/groups/basicPlus.constants.d.ts.map +1 -1
  53. package/dist/typescript/module/features/keyboard/constants/groups/basicPlusPlus.constants.d.ts +2 -2
  54. package/dist/typescript/module/features/keyboard/constants/groups/basicPlusPlus.constants.d.ts.map +1 -1
  55. package/dist/typescript/module/features/keyboard/constants/groups/numpad.constants.d.ts +2 -2
  56. package/dist/typescript/module/features/keyboard/constants/groups/numpad.constants.d.ts.map +1 -1
  57. package/dist/typescript/module/features/keyboard/constants/keyboard.helpers.d.ts +2 -2
  58. package/dist/typescript/module/features/keyboard/constants/keyboard.helpers.d.ts.map +1 -1
  59. package/dist/typescript/module/features/keyboard/types/types.d.ts +14 -0
  60. package/dist/typescript/module/features/keyboard/types/types.d.ts.map +1 -1
  61. package/package.json +8 -3
  62. package/src/features/keyboard/components/Keyboard.tsx +6 -2
  63. package/src/features/keyboard/constants/__tests__/__snapshots__/keyboard.characterization.test.ts.snap +17012 -0
  64. package/src/features/keyboard/constants/__tests__/keyboard.characterization.test.ts +50 -0
  65. package/src/features/keyboard/constants/groups/basic.constants.ts +10 -22
  66. package/src/features/keyboard/constants/groups/basicPlus.constants.ts +8 -51
  67. package/src/features/keyboard/constants/groups/basicPlusPlus.constants.ts +8 -63
  68. package/src/features/keyboard/constants/groups/numpad.constants.ts +17 -35
  69. package/src/features/keyboard/constants/keyboard.helpers.ts +83 -42
  70. package/src/features/keyboard/types/types.ts +17 -0
@@ -0,0 +1,50 @@
1
+ import {
2
+ KeyboardConfig,
3
+ KeyboardCurrencyVariant,
4
+ KeyboardPreset,
5
+ KeyboardTimeVariant,
6
+ MultiplicationSymbol,
7
+ } from '@magmamath/frontend-config'
8
+ import { resolveKeyboard } from '../keyboard.helpers'
9
+ import { KeyboardKey, ResolvedKeyboard } from '../../types/types'
10
+
11
+ const keyId = (key: KeyboardKey) => ({
12
+ m: key.mathliveValue,
13
+ k: key.katexValue,
14
+ l: key.label ?? null,
15
+ })
16
+
17
+ const serialize = (kb: ResolvedKeyboard) => ({
18
+ operators: Object.fromEntries(
19
+ Object.entries(kb.operators).map(([type, group]) => [type, group.keys.map(keyId)]),
20
+ ),
21
+ units: Object.fromEntries(
22
+ Object.entries(kb.units).map(([type, group]) => [type, group.keys.map((row) => row.map(keyId))]),
23
+ ),
24
+ })
25
+
26
+ const config = (overrides: Partial<KeyboardConfig> = {}): KeyboardConfig => ({
27
+ preset: KeyboardPreset.DOT_MIXED,
28
+ currencyVariant: KeyboardCurrencyVariant.DOLLAR_CENT,
29
+ timeVariant: KeyboardTimeVariant.H24,
30
+ ...overrides,
31
+ })
32
+
33
+ const PRESETS = Object.values(KeyboardPreset)
34
+ const MULTIPLICATION = [MultiplicationSymbol.TIMES, MultiplicationSymbol.CDOT, undefined] as const
35
+
36
+ describe('resolveKeyboard characterization', () => {
37
+ describe.each(PRESETS)('preset %s', (preset) => {
38
+ it.each(MULTIPLICATION)('multiplication %s', (symbol) => {
39
+ expect(serialize(resolveKeyboard(config({ preset }), symbol))).toMatchSnapshot()
40
+ })
41
+ })
42
+
43
+ it.each(Object.values(KeyboardCurrencyVariant))('currency variant %s', (currencyVariant) => {
44
+ expect(serialize(resolveKeyboard(config({ currencyVariant }), MultiplicationSymbol.TIMES))).toMatchSnapshot()
45
+ })
46
+
47
+ it.each(Object.values(KeyboardTimeVariant))('time variant %s', (timeVariant) => {
48
+ expect(serialize(resolveKeyboard(config({ timeVariant }), MultiplicationSymbol.TIMES))).toMatchSnapshot()
49
+ })
50
+ })
@@ -1,25 +1,13 @@
1
1
  import { MATH_BASIC_OPERATORS } from '../keys'
2
- import { KeyboardGroups } from '../../types/types'
2
+ import { KeySlot, LayoutGroup } from '../../types/types'
3
3
 
4
- export const KEYBOARD_BASIC: KeyboardGroups = {
5
- DOT: {
6
- keys: [
7
- MATH_BASIC_OPERATORS.ADDITION,
8
- MATH_BASIC_OPERATORS.SUBTRACTION,
9
- MATH_BASIC_OPERATORS.EQUALS,
10
- MATH_BASIC_OPERATORS.MULTIPLICATION,
11
- MATH_BASIC_OPERATORS.DIVISION,
12
- MATH_BASIC_OPERATORS.COMMA,
13
- ],
14
- },
15
- COMMA: {
16
- keys: [
17
- MATH_BASIC_OPERATORS.ADDITION,
18
- MATH_BASIC_OPERATORS.SUBTRACTION,
19
- MATH_BASIC_OPERATORS.EQUALS,
20
- MATH_BASIC_OPERATORS.C_DOT,
21
- MATH_BASIC_OPERATORS.DIVISION,
22
- MATH_BASIC_OPERATORS.DOT,
23
- ],
24
- },
4
+ export const KEYBOARD_BASIC: LayoutGroup = {
5
+ keys: [
6
+ MATH_BASIC_OPERATORS.ADDITION,
7
+ MATH_BASIC_OPERATORS.SUBTRACTION,
8
+ MATH_BASIC_OPERATORS.EQUALS,
9
+ { slot: KeySlot.MULTIPLICATION },
10
+ MATH_BASIC_OPERATORS.DIVISION,
11
+ { slot: KeySlot.LIST_SEPARATOR },
12
+ ],
25
13
  }
@@ -1,8 +1,8 @@
1
1
  import { MATH_BASIC_OPERATORS, MATH_TEXT_SYMBOLS } from '../keys'
2
- import { KeyboardGroups } from '../../types/types'
2
+ import { KeySlot, LayoutGroups } from '../../types/types'
3
3
 
4
- export const KEYBOARD_BASIC_PLUS: KeyboardGroups = {
5
- DOT: {
4
+ export const KEYBOARD_BASIC_PLUS: LayoutGroups = {
5
+ DESKTOP: {
6
6
  keys: [
7
7
  MATH_BASIC_OPERATORS.ADDITION,
8
8
  MATH_BASIC_OPERATORS.SUBTRACTION,
@@ -10,9 +10,9 @@ export const KEYBOARD_BASIC_PLUS: KeyboardGroups = {
10
10
  MATH_BASIC_OPERATORS.ROUND_BRACKET_LEFT,
11
11
  MATH_BASIC_OPERATORS.ROUND_BRACKET_RIGHT,
12
12
  MATH_BASIC_OPERATORS.FRACTION,
13
- MATH_BASIC_OPERATORS.MULTIPLICATION,
13
+ { slot: KeySlot.MULTIPLICATION },
14
14
  MATH_BASIC_OPERATORS.DIVISION,
15
- MATH_BASIC_OPERATORS.COMMA,
15
+ { slot: KeySlot.LIST_SEPARATOR },
16
16
  MATH_BASIC_OPERATORS.PERCENT,
17
17
  MATH_BASIC_OPERATORS.SQUARE_POWER,
18
18
  MATH_BASIC_OPERATORS.SQUARE_ROOT,
@@ -24,7 +24,7 @@ export const KEYBOARD_BASIC_PLUS: KeyboardGroups = {
24
24
  MATH_BASIC_OPERATORS.NTH_ROOT,
25
25
  ],
26
26
  },
27
- COMMA: {
27
+ MOBILE: {
28
28
  keys: [
29
29
  MATH_BASIC_OPERATORS.ADDITION,
30
30
  MATH_BASIC_OPERATORS.SUBTRACTION,
@@ -32,52 +32,9 @@ export const KEYBOARD_BASIC_PLUS: KeyboardGroups = {
32
32
  MATH_BASIC_OPERATORS.ROUND_BRACKET_LEFT,
33
33
  MATH_BASIC_OPERATORS.ROUND_BRACKET_RIGHT,
34
34
  MATH_BASIC_OPERATORS.FRACTION,
35
- MATH_BASIC_OPERATORS.C_DOT,
35
+ { slot: KeySlot.MULTIPLICATION },
36
36
  MATH_BASIC_OPERATORS.DIVISION,
37
- MATH_BASIC_OPERATORS.DOT,
38
- MATH_BASIC_OPERATORS.PERCENT,
39
- MATH_BASIC_OPERATORS.SQUARE_POWER,
40
- MATH_BASIC_OPERATORS.SQUARE_ROOT,
41
- MATH_TEXT_SYMBOLS.X,
42
- MATH_TEXT_SYMBOLS.Y,
43
- MATH_TEXT_SYMBOLS.Z,
44
- MATH_BASIC_OPERATORS.PERMILLE,
45
- MATH_BASIC_OPERATORS.NTH_POWER,
46
- MATH_BASIC_OPERATORS.NTH_ROOT,
47
- ],
48
- },
49
- MOBILE_DOT: {
50
- keys: [
51
- MATH_BASIC_OPERATORS.ADDITION,
52
- MATH_BASIC_OPERATORS.SUBTRACTION,
53
- MATH_BASIC_OPERATORS.EQUALS,
54
- MATH_BASIC_OPERATORS.ROUND_BRACKET_LEFT,
55
- MATH_BASIC_OPERATORS.ROUND_BRACKET_RIGHT,
56
- MATH_BASIC_OPERATORS.FRACTION,
57
- MATH_BASIC_OPERATORS.MULTIPLICATION,
58
- MATH_BASIC_OPERATORS.DIVISION,
59
- MATH_BASIC_OPERATORS.COMMA,
60
- MATH_BASIC_OPERATORS.PERCENT,
61
- MATH_BASIC_OPERATORS.SQUARE_POWER,
62
- MATH_BASIC_OPERATORS.SQUARE_ROOT,
63
- MATH_TEXT_SYMBOLS.X,
64
- MATH_TEXT_SYMBOLS.Y,
65
- MATH_TEXT_SYMBOLS.Z,
66
- MATH_BASIC_OPERATORS.PERMILLE,
67
- MATH_BASIC_OPERATORS.NTH_POWER,
68
- ],
69
- },
70
- MOBILE_COMMA: {
71
- keys: [
72
- MATH_BASIC_OPERATORS.ADDITION,
73
- MATH_BASIC_OPERATORS.SUBTRACTION,
74
- MATH_BASIC_OPERATORS.EQUALS,
75
- MATH_BASIC_OPERATORS.ROUND_BRACKET_LEFT,
76
- MATH_BASIC_OPERATORS.ROUND_BRACKET_RIGHT,
77
- MATH_BASIC_OPERATORS.FRACTION,
78
- MATH_BASIC_OPERATORS.C_DOT,
79
- MATH_BASIC_OPERATORS.DIVISION,
80
- MATH_BASIC_OPERATORS.DOT,
37
+ { slot: KeySlot.LIST_SEPARATOR },
81
38
  MATH_BASIC_OPERATORS.PERCENT,
82
39
  MATH_BASIC_OPERATORS.SQUARE_POWER,
83
40
  MATH_BASIC_OPERATORS.SQUARE_ROOT,
@@ -4,10 +4,10 @@ import {
4
4
  MATH_SYMBOLS,
5
5
  MATH_TEXT_SYMBOLS,
6
6
  } from '../keys'
7
- import { KeyboardGroups } from '../../types/types'
7
+ import { KeySlot, LayoutGroups } from '../../types/types'
8
8
 
9
- export const KEYBOARD_BASIC_PLUS_PLUS: KeyboardGroups = {
10
- DOT: {
9
+ export const KEYBOARD_BASIC_PLUS_PLUS: LayoutGroups = {
10
+ DESKTOP: {
11
11
  keys: [
12
12
  MATH_BASIC_OPERATORS.ADDITION,
13
13
  MATH_BASIC_OPERATORS.SUBTRACTION,
@@ -18,7 +18,7 @@ export const KEYBOARD_BASIC_PLUS_PLUS: KeyboardGroups = {
18
18
  MATH_BASIC_OPERATORS.SQUARE_ROOT,
19
19
  MATH_SYMBOLS.PI,
20
20
  MATH_GEOMETRY_SYMBOLS.RADIAN,
21
- MATH_BASIC_OPERATORS.MULTIPLICATION,
21
+ { slot: KeySlot.MULTIPLICATION },
22
22
  MATH_BASIC_OPERATORS.FRACTION,
23
23
  MATH_BASIC_OPERATORS.SLASH,
24
24
  MATH_BASIC_OPERATORS.PLUS_MINUS,
@@ -27,7 +27,7 @@ export const KEYBOARD_BASIC_PLUS_PLUS: KeyboardGroups = {
27
27
  MATH_BASIC_OPERATORS.NTH_ROOT,
28
28
  MATH_SYMBOLS.THETA,
29
29
  MATH_GEOMETRY_SYMBOLS.DEGREE,
30
- MATH_BASIC_OPERATORS.COMMA,
30
+ { slot: KeySlot.LIST_SEPARATOR },
31
31
  MATH_TEXT_SYMBOLS.X,
32
32
  MATH_TEXT_SYMBOLS.Y,
33
33
  MATH_TEXT_SYMBOLS.Z,
@@ -38,62 +38,7 @@ export const KEYBOARD_BASIC_PLUS_PLUS: KeyboardGroups = {
38
38
  MATH_BASIC_OPERATORS.GREATER_THAN,
39
39
  ],
40
40
  },
41
- COMMA: {
42
- keys: [
43
- MATH_BASIC_OPERATORS.ADDITION,
44
- MATH_BASIC_OPERATORS.SUBTRACTION,
45
- MATH_BASIC_OPERATORS.EQUALS,
46
- MATH_BASIC_OPERATORS.ROUND_BRACKET_LEFT,
47
- MATH_BASIC_OPERATORS.ROUND_BRACKET_RIGHT,
48
- MATH_BASIC_OPERATORS.SQUARE_POWER,
49
- MATH_BASIC_OPERATORS.SQUARE_ROOT,
50
- MATH_SYMBOLS.PI,
51
- MATH_GEOMETRY_SYMBOLS.RADIAN,
52
- MATH_BASIC_OPERATORS.C_DOT,
53
- MATH_BASIC_OPERATORS.FRACTION,
54
- MATH_BASIC_OPERATORS.SLASH,
55
- MATH_BASIC_OPERATORS.PLUS_MINUS,
56
- MATH_BASIC_OPERATORS.PERCENT,
57
- MATH_BASIC_OPERATORS.NTH_POWER,
58
- MATH_BASIC_OPERATORS.NTH_ROOT,
59
- MATH_SYMBOLS.THETA,
60
- MATH_GEOMETRY_SYMBOLS.DEGREE,
61
- MATH_BASIC_OPERATORS.DOT,
62
- MATH_TEXT_SYMBOLS.X,
63
- MATH_TEXT_SYMBOLS.Y,
64
- MATH_TEXT_SYMBOLS.Z,
65
- MATH_BASIC_OPERATORS.PERMILLE,
66
- MATH_BASIC_OPERATORS.LESS_THAN,
67
- MATH_BASIC_OPERATORS.LESS_THAN_OR_EQUAL,
68
- MATH_BASIC_OPERATORS.GREATER_THAN_OR_EQUAL,
69
- MATH_BASIC_OPERATORS.GREATER_THAN,
70
- ],
71
- },
72
- MOBILE_DOT: {
73
- keys: [
74
- MATH_BASIC_OPERATORS.ADDITION,
75
- MATH_BASIC_OPERATORS.SUBTRACTION,
76
- MATH_BASIC_OPERATORS.EQUALS,
77
- MATH_BASIC_OPERATORS.ROUND_BRACKET_LEFT,
78
- MATH_BASIC_OPERATORS.ROUND_BRACKET_RIGHT,
79
- MATH_SYMBOLS.PI,
80
- MATH_GEOMETRY_SYMBOLS.RADIAN,
81
- MATH_BASIC_OPERATORS.MULTIPLICATION,
82
- MATH_BASIC_OPERATORS.FRACTION,
83
- MATH_BASIC_OPERATORS.COMMA,
84
- MATH_BASIC_OPERATORS.SQUARE_POWER,
85
- MATH_BASIC_OPERATORS.SQUARE_ROOT,
86
- MATH_SYMBOLS.THETA,
87
- MATH_GEOMETRY_SYMBOLS.DEGREE,
88
- MATH_TEXT_SYMBOLS.X,
89
- MATH_TEXT_SYMBOLS.Y,
90
- MATH_TEXT_SYMBOLS.Z,
91
- MATH_BASIC_OPERATORS.NTH_POWER,
92
- MATH_BASIC_OPERATORS.LESS_THAN,
93
- MATH_BASIC_OPERATORS.GREATER_THAN,
94
- ],
95
- },
96
- MOBILE_COMMA: {
41
+ MOBILE: {
97
42
  keys: [
98
43
  MATH_BASIC_OPERATORS.ADDITION,
99
44
  MATH_BASIC_OPERATORS.SUBTRACTION,
@@ -102,9 +47,9 @@ export const KEYBOARD_BASIC_PLUS_PLUS: KeyboardGroups = {
102
47
  MATH_BASIC_OPERATORS.ROUND_BRACKET_RIGHT,
103
48
  MATH_SYMBOLS.PI,
104
49
  MATH_GEOMETRY_SYMBOLS.RADIAN,
105
- MATH_BASIC_OPERATORS.C_DOT,
50
+ { slot: KeySlot.MULTIPLICATION },
106
51
  MATH_BASIC_OPERATORS.FRACTION,
107
- MATH_BASIC_OPERATORS.DOT,
52
+ { slot: KeySlot.LIST_SEPARATOR },
108
53
  MATH_BASIC_OPERATORS.SQUARE_POWER,
109
54
  MATH_BASIC_OPERATORS.SQUARE_ROOT,
110
55
  MATH_SYMBOLS.THETA,
@@ -1,37 +1,19 @@
1
- import { MATH_BASIC_OPERATORS, MATH_SPECIAL_OPERATORS } from '../keys'
2
- import { KeyboardGroups } from '../../types/types'
1
+ import { MATH_SPECIAL_OPERATORS } from '../keys'
2
+ import { KeySlot, LayoutGroup } from '../../types/types'
3
3
 
4
- export const KEYBOARD_NUMPAD: KeyboardGroups = {
5
- DOT: {
6
- keys: [
7
- { label: '1', mathliveValue: '1', katexValue: '1' },
8
- { label: '2', mathliveValue: '2', katexValue: '2' },
9
- { label: '3', mathliveValue: '3', katexValue: '3' },
10
- MATH_SPECIAL_OPERATORS.BACKSPACE,
11
- { label: '4', mathliveValue: '4', katexValue: '4' },
12
- { label: '5', mathliveValue: '5', katexValue: '5' },
13
- { label: '6', mathliveValue: '6', katexValue: '6' },
14
- MATH_BASIC_OPERATORS.DOT,
15
- { label: '7', mathliveValue: '7', katexValue: '7' },
16
- { label: '8', mathliveValue: '8', katexValue: '8' },
17
- { label: '9', mathliveValue: '9', katexValue: '9' },
18
- { label: '0', mathliveValue: '0', katexValue: '0' },
19
- ],
20
- },
21
- COMMA: {
22
- keys: [
23
- { label: '1', mathliveValue: '1', katexValue: '1' },
24
- { label: '2', mathliveValue: '2', katexValue: '2' },
25
- { label: '3', mathliveValue: '3', katexValue: '3' },
26
- MATH_SPECIAL_OPERATORS.BACKSPACE,
27
- { label: '4', mathliveValue: '4', katexValue: '4' },
28
- { label: '5', mathliveValue: '5', katexValue: '5' },
29
- { label: '6', mathliveValue: '6', katexValue: '6' },
30
- MATH_BASIC_OPERATORS.COMMA,
31
- { label: '7', mathliveValue: '7', katexValue: '7' },
32
- { label: '8', mathliveValue: '8', katexValue: '8' },
33
- { label: '9', mathliveValue: '9', katexValue: '9' },
34
- { label: '0', mathliveValue: '0', katexValue: '0' },
35
- ],
36
- },
4
+ export const KEYBOARD_NUMPAD: LayoutGroup = {
5
+ keys: [
6
+ { label: '1', mathliveValue: '1', katexValue: '1' },
7
+ { label: '2', mathliveValue: '2', katexValue: '2' },
8
+ { label: '3', mathliveValue: '3', katexValue: '3' },
9
+ MATH_SPECIAL_OPERATORS.BACKSPACE,
10
+ { label: '4', mathliveValue: '4', katexValue: '4' },
11
+ { label: '5', mathliveValue: '5', katexValue: '5' },
12
+ { label: '6', mathliveValue: '6', katexValue: '6' },
13
+ { slot: KeySlot.DECIMAL_SEPARATOR },
14
+ { label: '7', mathliveValue: '7', katexValue: '7' },
15
+ { label: '8', mathliveValue: '8', katexValue: '8' },
16
+ { label: '9', mathliveValue: '9', katexValue: '9' },
17
+ { label: '0', mathliveValue: '0', katexValue: '0' },
18
+ ],
37
19
  }
@@ -3,14 +3,22 @@ import {
3
3
  KeyboardCurrencyVariant,
4
4
  KeyboardPreset,
5
5
  KeyboardTimeVariant,
6
+ MultiplicationSymbol,
7
+ NumberDecimalSeparator,
6
8
  } from '@magmamath/frontend-config'
7
9
  import {
8
10
  KeyboardGroup,
11
+ KeyboardKey,
9
12
  KeyboardRowsGroup,
10
13
  KeyboardType,
11
14
  KeyboardUnitsGroupType,
15
+ KeySlot,
16
+ KeySlotRef,
17
+ LayoutGroup,
18
+ LayoutKey,
12
19
  ResolvedKeyboard,
13
20
  } from '../types/types'
21
+ import { MATH_BASIC_OPERATORS } from './keys'
14
22
  import {
15
23
  KEYBOARD_ALGEBRA,
16
24
  KEYBOARD_AREA,
@@ -28,27 +36,57 @@ import {
28
36
  KEYBOARD_WEIGHT,
29
37
  } from './groups'
30
38
 
31
- type KeyboardPresetConfig = {
32
- operators: Record<
33
- Exclude<KeyboardType, KeyboardType.BasicTime | KeyboardType.BasicCurrency>,
34
- KeyboardGroup
35
- >
39
+ type SlotBinding = Record<KeySlot, KeyboardKey>
40
+
41
+ const PRESET_SEPARATOR: Record<KeyboardPreset, NumberDecimalSeparator> = {
42
+ [KeyboardPreset.DOT_MIXED]: NumberDecimalSeparator.DOT,
43
+ [KeyboardPreset.DOT_MIXED_ALT]: NumberDecimalSeparator.DOT,
44
+ [KeyboardPreset.COMMA_METRIC]: NumberDecimalSeparator.COMMA,
45
+ }
46
+
47
+ const MULTIPLICATION_KEYS: Record<MultiplicationSymbol, KeyboardKey> = {
48
+ [MultiplicationSymbol.TIMES]: MATH_BASIC_OPERATORS.MULTIPLICATION,
49
+ [MultiplicationSymbol.CDOT]: MATH_BASIC_OPERATORS.C_DOT,
50
+ }
51
+
52
+ const DEFAULT_MULTIPLICATION_SYMBOL: Record<NumberDecimalSeparator, MultiplicationSymbol> = {
53
+ [NumberDecimalSeparator.DOT]: MultiplicationSymbol.TIMES,
54
+ [NumberDecimalSeparator.COMMA]: MultiplicationSymbol.CDOT,
55
+ }
56
+
57
+ const DECIMAL_SEPARATOR_KEYS: Record<NumberDecimalSeparator, KeyboardKey> = {
58
+ [NumberDecimalSeparator.DOT]: MATH_BASIC_OPERATORS.DOT,
59
+ [NumberDecimalSeparator.COMMA]: MATH_BASIC_OPERATORS.COMMA,
60
+ }
61
+
62
+ const LIST_SEPARATOR_KEYS: Record<NumberDecimalSeparator, KeyboardKey> = {
63
+ [NumberDecimalSeparator.DOT]: MATH_BASIC_OPERATORS.COMMA,
64
+ [NumberDecimalSeparator.COMMA]: MATH_BASIC_OPERATORS.DOT,
65
+ }
66
+
67
+ const buildBinding = (
68
+ separator: NumberDecimalSeparator,
69
+ multiplicationSymbol?: MultiplicationSymbol,
70
+ ): SlotBinding => ({
71
+ [KeySlot.MULTIPLICATION]: MULTIPLICATION_KEYS[multiplicationSymbol ?? DEFAULT_MULTIPLICATION_SYMBOL[separator]],
72
+ [KeySlot.DECIMAL_SEPARATOR]: DECIMAL_SEPARATOR_KEYS[separator],
73
+ [KeySlot.LIST_SEPARATOR]: LIST_SEPARATOR_KEYS[separator],
74
+ })
75
+
76
+ const isSlot = (key: LayoutKey): key is KeySlotRef => 'slot' in key
77
+
78
+ const resolveGroup = (group: LayoutGroup, binding: SlotBinding): KeyboardGroup => ({
79
+ ...group,
80
+ keys: group.keys.map((key) => (isSlot(key) ? binding[key.slot] : key)),
81
+ })
82
+
83
+ type PresetUnits = {
84
+ basicUnits: KeyboardGroup
36
85
  units: Record<KeyboardUnitsGroupType, KeyboardRowsGroup>
37
86
  }
38
87
 
39
- const PRESET_DOT_MIXED: KeyboardPresetConfig = {
40
- operators: {
41
- [KeyboardType.Basic]: KEYBOARD_BASIC.DOT,
42
- [KeyboardType.BasicPlus]: KEYBOARD_BASIC_PLUS.DOT,
43
- [KeyboardType.BasicPlusMobile]: KEYBOARD_BASIC_PLUS.MOBILE_DOT,
44
- [KeyboardType.BasicPlusPlus]: KEYBOARD_BASIC_PLUS_PLUS.DOT,
45
- [KeyboardType.BasicPlusPlusMobile]: KEYBOARD_BASIC_PLUS_PLUS.MOBILE_DOT,
46
- [KeyboardType.BasicUnits]: { keys: KEYBOARD_LENGTH.MIXED.keys[0] },
47
- [KeyboardType.AlgebraAdvanced]: KEYBOARD_ALGEBRA,
48
- [KeyboardType.Geometry]: KEYBOARD_GEOMETRY,
49
- [KeyboardType.Numpad]: KEYBOARD_NUMPAD.DOT,
50
- [KeyboardType.Underlined]: KEYBOARD_UNDERLINED,
51
- },
88
+ const DOT_MIXED_UNITS: PresetUnits = {
89
+ basicUnits: { keys: KEYBOARD_LENGTH.MIXED.keys[0] },
52
90
  units: {
53
91
  [KeyboardUnitsGroupType.LENGTH]: KEYBOARD_LENGTH.MIXED,
54
92
  [KeyboardUnitsGroupType.AREA]: KEYBOARD_AREA.MIXED,
@@ -58,19 +96,8 @@ const PRESET_DOT_MIXED: KeyboardPresetConfig = {
58
96
  },
59
97
  }
60
98
 
61
- const PRESET_COMMA_METRIC: KeyboardPresetConfig = {
62
- operators: {
63
- [KeyboardType.Basic]: KEYBOARD_BASIC.COMMA,
64
- [KeyboardType.BasicPlus]: KEYBOARD_BASIC_PLUS.COMMA,
65
- [KeyboardType.BasicPlusMobile]: KEYBOARD_BASIC_PLUS.MOBILE_COMMA,
66
- [KeyboardType.BasicPlusPlus]: KEYBOARD_BASIC_PLUS_PLUS.COMMA,
67
- [KeyboardType.BasicPlusPlusMobile]: KEYBOARD_BASIC_PLUS_PLUS.MOBILE_COMMA,
68
- [KeyboardType.BasicUnits]: { keys: KEYBOARD_LENGTH.METRIC.keys[0] },
69
- [KeyboardType.AlgebraAdvanced]: KEYBOARD_ALGEBRA,
70
- [KeyboardType.Geometry]: KEYBOARD_GEOMETRY,
71
- [KeyboardType.Numpad]: KEYBOARD_NUMPAD.COMMA,
72
- [KeyboardType.Underlined]: KEYBOARD_UNDERLINED,
73
- },
99
+ const COMMA_METRIC_UNITS: PresetUnits = {
100
+ basicUnits: { keys: KEYBOARD_LENGTH.METRIC.keys[0] },
74
101
  units: {
75
102
  [KeyboardUnitsGroupType.LENGTH]: KEYBOARD_LENGTH.METRIC,
76
103
  [KeyboardUnitsGroupType.AREA]: KEYBOARD_AREA.METRIC,
@@ -80,18 +107,18 @@ const PRESET_COMMA_METRIC: KeyboardPresetConfig = {
80
107
  },
81
108
  }
82
109
 
83
- const PRESET_DOT_MIXED_ALT: KeyboardPresetConfig = {
84
- operators: PRESET_DOT_MIXED.operators,
110
+ const DOT_MIXED_ALT_UNITS: PresetUnits = {
111
+ basicUnits: DOT_MIXED_UNITS.basicUnits,
85
112
  units: {
86
- ...PRESET_DOT_MIXED.units,
113
+ ...DOT_MIXED_UNITS.units,
87
114
  [KeyboardUnitsGroupType.VOLUME]: KEYBOARD_VOLUME.MIXED_ALT,
88
115
  },
89
116
  }
90
117
 
91
- const PRESET_MAP: Record<KeyboardPreset, KeyboardPresetConfig> = {
92
- [KeyboardPreset.DOT_MIXED]: PRESET_DOT_MIXED,
93
- [KeyboardPreset.DOT_MIXED_ALT]: PRESET_DOT_MIXED_ALT,
94
- [KeyboardPreset.COMMA_METRIC]: PRESET_COMMA_METRIC,
118
+ const PRESET_UNITS_MAP: Record<KeyboardPreset, PresetUnits> = {
119
+ [KeyboardPreset.DOT_MIXED]: DOT_MIXED_UNITS,
120
+ [KeyboardPreset.DOT_MIXED_ALT]: DOT_MIXED_ALT_UNITS,
121
+ [KeyboardPreset.COMMA_METRIC]: COMMA_METRIC_UNITS,
95
122
  }
96
123
 
97
124
  const CURRENCY_MAP: Record<KeyboardCurrencyVariant, KeyboardGroup> = {
@@ -109,15 +136,29 @@ const TIME_MAP: Record<KeyboardTimeVariant, KeyboardGroup> = {
109
136
  [KeyboardTimeVariant.H24]: KEYBOARD_TIME.H24,
110
137
  }
111
138
 
112
- export const resolveKeyboard = (config: KeyboardConfig): ResolvedKeyboard => {
113
- const preset = PRESET_MAP[config.preset]
139
+ export const resolveKeyboard = (
140
+ config: KeyboardConfig,
141
+ multiplicationSymbol?: MultiplicationSymbol,
142
+ ): ResolvedKeyboard => {
143
+ const separator = PRESET_SEPARATOR[config.preset]
144
+ const binding = buildBinding(separator, multiplicationSymbol)
145
+ const presetUnits = PRESET_UNITS_MAP[config.preset]
114
146
 
115
147
  return {
116
148
  operators: {
117
- ...preset.operators,
149
+ [KeyboardType.Basic]: resolveGroup(KEYBOARD_BASIC, binding),
150
+ [KeyboardType.BasicPlus]: resolveGroup(KEYBOARD_BASIC_PLUS.DESKTOP, binding),
151
+ [KeyboardType.BasicPlusMobile]: resolveGroup(KEYBOARD_BASIC_PLUS.MOBILE, binding),
152
+ [KeyboardType.BasicPlusPlus]: resolveGroup(KEYBOARD_BASIC_PLUS_PLUS.DESKTOP, binding),
153
+ [KeyboardType.BasicPlusPlusMobile]: resolveGroup(KEYBOARD_BASIC_PLUS_PLUS.MOBILE, binding),
154
+ [KeyboardType.BasicUnits]: presetUnits.basicUnits,
155
+ [KeyboardType.AlgebraAdvanced]: resolveGroup(KEYBOARD_ALGEBRA, binding),
156
+ [KeyboardType.Geometry]: resolveGroup(KEYBOARD_GEOMETRY, binding),
157
+ [KeyboardType.Numpad]: resolveGroup(KEYBOARD_NUMPAD, binding),
158
+ [KeyboardType.Underlined]: resolveGroup(KEYBOARD_UNDERLINED, binding),
118
159
  [KeyboardType.BasicCurrency]: CURRENCY_MAP[config.currencyVariant],
119
160
  [KeyboardType.BasicTime]: TIME_MAP[config.timeVariant],
120
161
  },
121
- units: preset.units,
162
+ units: presetUnits.units,
122
163
  }
123
164
  }
@@ -38,6 +38,23 @@ export enum KeyboardUnitsGroupType {
38
38
 
39
39
  export type MathOperatorsGroup = Record<string, KeyboardKey>
40
40
 
41
+ export enum KeySlot {
42
+ MULTIPLICATION = 'MULTIPLICATION',
43
+ DECIMAL_SEPARATOR = 'DECIMAL_SEPARATOR',
44
+ LIST_SEPARATOR = 'LIST_SEPARATOR',
45
+ }
46
+
47
+ export type KeySlotRef = { slot: KeySlot }
48
+
49
+ export type LayoutKey = KeyboardKey | KeySlotRef
50
+
51
+ export type LayoutGroup = {
52
+ keys: LayoutKey[]
53
+ numOfRows?: number
54
+ }
55
+
56
+ export type LayoutGroups = Record<string, LayoutGroup>
57
+
41
58
  export type KeyboardGroup = {
42
59
  keys: KeyboardKey[]
43
60
  numOfRows?: number