@khanacademy/math-input 3.0.0 → 4.0.0
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.
- package/CHANGELOG.md +35 -0
- package/dist/components/input/__tests__/test-math-wrapper.d.ts +1 -1
- package/dist/components/input/__tests__/test-math-wrapper.js.flow +1 -1
- package/dist/components/input/key-handlers/handle-arrow.d.ts +3 -0
- package/dist/components/input/key-handlers/handle-arrow.js.flow +12 -0
- package/dist/components/input/key-handlers/handle-backspace.d.ts +7 -0
- package/dist/components/input/key-handlers/handle-backspace.js.flow +14 -0
- package/dist/components/input/key-handlers/handle-exponent.d.ts +3 -0
- package/dist/components/input/key-handlers/handle-exponent.js.flow +12 -0
- package/dist/components/input/key-handlers/handle-jump-out.d.ts +7 -0
- package/dist/components/input/key-handlers/handle-jump-out.js.flow +14 -0
- package/dist/components/input/math-wrapper.d.ts +7 -78
- package/dist/components/input/math-wrapper.js.flow +16 -78
- package/dist/components/input/mathquill-helpers.d.ts +46 -0
- package/dist/components/input/mathquill-helpers.js.flow +56 -0
- package/dist/components/input/mathquill-instance.d.ts +3 -0
- package/dist/components/input/mathquill-instance.js.flow +9 -0
- package/dist/components/input/mathquill-types.d.ts +25 -0
- package/dist/components/input/mathquill-types.js.flow +34 -0
- package/dist/components/key-translator.d.ts +4 -0
- package/dist/components/key-translator.js.flow +10 -0
- package/dist/components/keypad/button-assets.d.ts +2 -2
- package/dist/components/keypad/button-assets.js.flow +2 -2
- package/dist/components/keypad/keypad-page-items.d.ts +1 -1
- package/dist/components/keypad/keypad-page-items.js.flow +1 -1
- package/dist/components/keypad-legacy/gesture-manager.d.ts +21 -9
- package/dist/components/keypad-legacy/gesture-manager.js.flow +27 -12
- package/dist/components/keypad-legacy/gesture-state-machine.d.ts +9 -9
- package/dist/components/keypad-legacy/gesture-state-machine.js.flow +10 -10
- package/dist/components/keypad-legacy/keypad-button.d.ts +2 -2
- package/dist/components/keypad-legacy/keypad-button.js.flow +3 -3
- package/dist/components/keypad-legacy/store/actions.d.ts +4 -14
- package/dist/components/keypad-legacy/store/actions.js.flow +3 -15
- package/dist/components/keypad-legacy/store/types.d.ts +2 -2
- package/dist/components/keypad-legacy/store/types.js.flow +2 -2
- package/dist/components/keypad-legacy/touchable-keypad-button.d.ts +6 -6
- package/dist/components/keypad-legacy/touchable-keypad-button.js.flow +9 -14
- package/dist/data/key-configs.d.ts +3 -6
- package/dist/data/key-configs.js.flow +3 -8
- package/dist/data/keys.d.ts +2 -54
- package/dist/data/keys.js.flow +116 -55
- package/dist/enums.d.ts +2 -9
- package/dist/enums.js.flow +2 -11
- package/dist/es/index.js +1781 -1196
- package/dist/es/index.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.js +2069 -1242
- package/dist/index.js.flow +4 -2
- package/dist/index.js.map +1 -1
- package/dist/strings.js +26 -10
- package/dist/types.d.ts +10 -12
- package/dist/types.js.flow +13 -12
- package/package.json +1 -1
- package/src/components/input/__tests__/context-tracking.test.ts +43 -44
- package/src/components/input/__tests__/mathquill.test.ts +133 -135
- package/src/components/input/key-handlers/handle-arrow.ts +70 -0
- package/src/components/input/key-handlers/handle-backspace.ts +275 -0
- package/src/components/input/key-handlers/handle-exponent.ts +52 -0
- package/src/components/input/key-handlers/handle-jump-out.ts +103 -0
- package/src/components/input/math-input.tsx +11 -12
- package/src/components/input/math-wrapper.ts +88 -837
- package/src/components/input/mathquill-helpers.ts +268 -0
- package/src/components/input/mathquill-instance.ts +5 -0
- package/src/components/input/mathquill-types.ts +55 -0
- package/src/components/key-translator.ts +209 -0
- package/src/components/keypad/button-assets.tsx +411 -100
- package/src/components/keypad/geometry-page/index.tsx +1 -1
- package/src/components/keypad/keypad-mathquill.stories.tsx +69 -0
- package/src/components/keypad/keypad-page-items.tsx +2 -1
- package/src/components/keypad/operators-page/index.tsx +1 -1
- package/src/components/keypad-legacy/echo-manager.tsx +4 -4
- package/src/components/keypad-legacy/empty-keypad-button.tsx +6 -4
- package/src/components/keypad-legacy/gesture-manager.ts +32 -9
- package/src/components/keypad-legacy/gesture-state-machine.ts +14 -14
- package/src/components/keypad-legacy/keypad-button.tsx +15 -18
- package/src/components/keypad-legacy/many-keypad-button.tsx +9 -2
- package/src/components/keypad-legacy/store/actions.ts +3 -29
- package/src/components/keypad-legacy/store/echo-reducer.ts +2 -5
- package/src/components/keypad-legacy/store/index.ts +4 -10
- package/src/components/keypad-legacy/store/input-reducer.ts +1 -2
- package/src/components/keypad-legacy/store/keypad-reducer.ts +2 -3
- package/src/components/keypad-legacy/store/types.ts +2 -2
- package/src/components/keypad-legacy/touchable-keypad-button.tsx +8 -13
- package/src/components/tabbar/icons.tsx +0 -2
- package/src/data/key-configs.ts +751 -304
- package/src/data/keys.ts +118 -65
- package/src/enums.ts +10 -9
- package/src/index.ts +3 -2
- package/src/math-input.stories.tsx +1 -1
- package/src/types.ts +10 -12
- package/tsconfig-build.tsbuildinfo +1 -1
package/src/data/key-configs.ts
CHANGED
|
@@ -4,50 +4,113 @@
|
|
|
4
4
|
import * as i18n from "@khanacademy/wonder-blocks-i18n";
|
|
5
5
|
|
|
6
6
|
import {DecimalSeparator, IconType, KeyType} from "../enums";
|
|
7
|
+
import {KeyConfig} from "../types";
|
|
7
8
|
import {decimalSeparator} from "../utils";
|
|
8
9
|
|
|
9
|
-
import
|
|
10
|
+
import Key from "./keys";
|
|
10
11
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
type KeyConfigMapper = (args: {
|
|
13
|
+
key: Key;
|
|
14
|
+
keyType?: KeyType;
|
|
15
|
+
iconType?: IconType;
|
|
16
|
+
ariaLabel?: string;
|
|
17
|
+
data?: string;
|
|
18
|
+
}) => KeyConfig;
|
|
19
|
+
|
|
20
|
+
const getDefaultOperatorFields: KeyConfigMapper = ({
|
|
21
|
+
key,
|
|
22
|
+
keyType = "OPERATOR",
|
|
23
|
+
iconType = IconType.SVG,
|
|
24
|
+
ariaLabel = key,
|
|
25
|
+
data = key,
|
|
26
|
+
}) => ({
|
|
27
|
+
id: key,
|
|
28
|
+
type: keyType,
|
|
29
|
+
ariaLabel,
|
|
30
|
+
icon: {
|
|
31
|
+
type: iconType,
|
|
32
|
+
data,
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
const getDefaultValueFields: KeyConfigMapper = ({
|
|
37
|
+
key,
|
|
38
|
+
keyType = "VALUE",
|
|
39
|
+
iconType = IconType.MATH,
|
|
40
|
+
ariaLabel = key,
|
|
41
|
+
data = key,
|
|
42
|
+
}) => ({
|
|
43
|
+
id: key,
|
|
44
|
+
type: keyType,
|
|
45
|
+
ariaLabel,
|
|
46
|
+
icon: {
|
|
47
|
+
type: iconType,
|
|
48
|
+
data,
|
|
49
|
+
},
|
|
50
|
+
});
|
|
16
51
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
type:
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
52
|
+
const getDefaultNumberFields: KeyConfigMapper = ({
|
|
53
|
+
key,
|
|
54
|
+
data = key.replace("NUM_", ""),
|
|
55
|
+
keyType = "VALUE",
|
|
56
|
+
iconType = IconType.TEXT,
|
|
57
|
+
ariaLabel = data,
|
|
58
|
+
}) => ({
|
|
59
|
+
id: key,
|
|
60
|
+
type: keyType,
|
|
61
|
+
ariaLabel,
|
|
62
|
+
icon: {
|
|
63
|
+
type: iconType,
|
|
64
|
+
data,
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
const KeyConfigs: {
|
|
69
|
+
[key in Key]: KeyConfig;
|
|
70
|
+
} = {
|
|
71
|
+
// Basic math
|
|
72
|
+
PLUS: {
|
|
73
|
+
...getDefaultOperatorFields({
|
|
74
|
+
key: "PLUS",
|
|
75
|
+
// I18N: A label for a 'plus' sign.
|
|
76
|
+
ariaLabel: i18n._("Plus"),
|
|
77
|
+
}),
|
|
78
|
+
},
|
|
79
|
+
MINUS: {
|
|
80
|
+
...getDefaultOperatorFields({
|
|
81
|
+
key: "MINUS",
|
|
82
|
+
// I18N: A label for a 'minus' sign.
|
|
83
|
+
ariaLabel: i18n._("Minus"),
|
|
84
|
+
}),
|
|
85
|
+
},
|
|
86
|
+
NEGATIVE: {
|
|
87
|
+
...getDefaultOperatorFields({
|
|
88
|
+
key: "NEGATIVE",
|
|
89
|
+
// I18N: A label for a 'negative' sign.
|
|
90
|
+
ariaLabel: i18n._("Negative"),
|
|
91
|
+
}),
|
|
92
|
+
},
|
|
93
|
+
TIMES: {
|
|
94
|
+
...getDefaultOperatorFields({
|
|
95
|
+
key: "TIMES",
|
|
96
|
+
// I18N: A label for a 'multiply' sign.
|
|
97
|
+
ariaLabel: i18n._("Multiply"),
|
|
98
|
+
}),
|
|
99
|
+
},
|
|
100
|
+
DIVIDE: {
|
|
101
|
+
...getDefaultOperatorFields({
|
|
102
|
+
key: "DIVIDE",
|
|
103
|
+
// I18N: A label for a 'divide' sign.
|
|
104
|
+
ariaLabel: i18n._("Divide"),
|
|
105
|
+
}),
|
|
106
|
+
},
|
|
107
|
+
DECIMAL: {
|
|
108
|
+
...getDefaultOperatorFields({
|
|
109
|
+
key: "DECIMAL",
|
|
110
|
+
keyType: "VALUE",
|
|
111
|
+
// I18N: A label for a 'decimal' sign (represented as '.' or ',').
|
|
112
|
+
ariaLabel: i18n._("Decimal"),
|
|
113
|
+
}),
|
|
51
114
|
icon:
|
|
52
115
|
decimalSeparator === DecimalSeparator.COMMA
|
|
53
116
|
? {
|
|
@@ -58,287 +121,671 @@ const KeyConfigs: {[key: string]: any} = {
|
|
|
58
121
|
}
|
|
59
122
|
: {
|
|
60
123
|
type: IconType.SVG,
|
|
61
|
-
data:
|
|
124
|
+
data: "PERIOD",
|
|
62
125
|
},
|
|
63
126
|
},
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
},
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
},
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
127
|
+
PERIOD: {
|
|
128
|
+
...getDefaultOperatorFields({
|
|
129
|
+
key: "PERIOD",
|
|
130
|
+
keyType: "VALUE",
|
|
131
|
+
ariaLabel: ".",
|
|
132
|
+
}),
|
|
133
|
+
},
|
|
134
|
+
PERCENT: {
|
|
135
|
+
...getDefaultOperatorFields({
|
|
136
|
+
key: "PERCENT",
|
|
137
|
+
// I18N: A label for a 'percent' sign (represented as '%').
|
|
138
|
+
ariaLabel: i18n._("Percent"),
|
|
139
|
+
}),
|
|
140
|
+
},
|
|
141
|
+
CDOT: {
|
|
142
|
+
...getDefaultOperatorFields({
|
|
143
|
+
key: "CDOT",
|
|
144
|
+
// I18N: A label for a 'centered dot' multiplication sign (represented as '⋅').
|
|
145
|
+
ariaLabel: i18n._("Multiply"),
|
|
146
|
+
}),
|
|
147
|
+
},
|
|
148
|
+
EQUAL: {
|
|
149
|
+
...getDefaultOperatorFields({
|
|
150
|
+
key: "EQUAL",
|
|
151
|
+
// I18N: A label for an 'equals' sign (represented as '=').
|
|
152
|
+
ariaLabel: i18n._("Equals sign"),
|
|
153
|
+
}),
|
|
154
|
+
},
|
|
155
|
+
NEQ: {
|
|
156
|
+
...getDefaultOperatorFields({
|
|
157
|
+
key: "NEQ",
|
|
158
|
+
// I18N: A label for a 'not-equals' sign (represented as '≠').
|
|
159
|
+
ariaLabel: i18n._("Not-equals sign"),
|
|
160
|
+
}),
|
|
161
|
+
},
|
|
162
|
+
GT: {
|
|
163
|
+
...getDefaultOperatorFields({
|
|
164
|
+
key: "GT",
|
|
165
|
+
// I18N: A label for a 'greater than' sign (represented as '>').
|
|
166
|
+
ariaLabel: i18n._("Greater than sign"),
|
|
167
|
+
}),
|
|
168
|
+
},
|
|
169
|
+
LT: {
|
|
170
|
+
...getDefaultOperatorFields({
|
|
171
|
+
key: "LT",
|
|
172
|
+
// I18N: A label for a 'less than' sign (represented as '<').
|
|
173
|
+
ariaLabel: i18n._("Less than sign"),
|
|
174
|
+
}),
|
|
175
|
+
},
|
|
176
|
+
GEQ: {
|
|
177
|
+
...getDefaultOperatorFields({
|
|
178
|
+
key: "GEQ",
|
|
179
|
+
// I18N: A label for a 'greater than or equal to' sign (represented as '≥').
|
|
180
|
+
ariaLabel: i18n._("Greater than or equal to sign"),
|
|
181
|
+
}),
|
|
182
|
+
},
|
|
183
|
+
LEQ: {
|
|
184
|
+
...getDefaultOperatorFields({
|
|
185
|
+
key: "LEQ",
|
|
186
|
+
// I18N: A label for a 'less than or equal to' sign (represented as '≤').
|
|
187
|
+
ariaLabel: i18n._("Less than or equal to sign"),
|
|
188
|
+
}),
|
|
99
189
|
},
|
|
100
190
|
// mobile native
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
191
|
+
FRAC_INCLUSIVE: {
|
|
192
|
+
...getDefaultOperatorFields({
|
|
193
|
+
key: "FRAC_INCLUSIVE",
|
|
194
|
+
// I18N: A label for a button that creates a new fraction and puts the
|
|
195
|
+
// current expression in the numerator of that fraction.
|
|
196
|
+
ariaLabel: i18n._("Fraction, with current expression in numerator"),
|
|
197
|
+
}),
|
|
106
198
|
},
|
|
107
199
|
// mobile native
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
200
|
+
FRAC_EXCLUSIVE: {
|
|
201
|
+
...getDefaultOperatorFields({
|
|
202
|
+
key: "FRAC_EXCLUSIVE",
|
|
203
|
+
// I18N: A label for a button that creates a new fraction next to the
|
|
204
|
+
// cursor.
|
|
205
|
+
ariaLabel: i18n._("Fraction, excluding the current expression"),
|
|
206
|
+
}),
|
|
113
207
|
},
|
|
114
208
|
// mobile web
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
},
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
},
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
},
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
},
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
},
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
},
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
209
|
+
FRAC: {
|
|
210
|
+
...getDefaultOperatorFields({
|
|
211
|
+
key: "FRAC",
|
|
212
|
+
// I18N: A label for a button that creates a new fraction next to the
|
|
213
|
+
// cursor.
|
|
214
|
+
ariaLabel: i18n._("Fraction, excluding the current expression"),
|
|
215
|
+
}),
|
|
216
|
+
},
|
|
217
|
+
EXP: {
|
|
218
|
+
...getDefaultOperatorFields({
|
|
219
|
+
key: "EXP",
|
|
220
|
+
// I18N: A label for a button that will allow the user to input a
|
|
221
|
+
// custom exponent.
|
|
222
|
+
ariaLabel: i18n._("Custom exponent"),
|
|
223
|
+
}),
|
|
224
|
+
},
|
|
225
|
+
EXP_2: {
|
|
226
|
+
...getDefaultOperatorFields({
|
|
227
|
+
key: "EXP_2",
|
|
228
|
+
// I18N: A label for a button that will square (take to the second
|
|
229
|
+
// power) some math.
|
|
230
|
+
ariaLabel: i18n._("Square"),
|
|
231
|
+
}),
|
|
232
|
+
},
|
|
233
|
+
EXP_3: {
|
|
234
|
+
...getDefaultOperatorFields({
|
|
235
|
+
key: "EXP_3",
|
|
236
|
+
// I18N: A label for a button that will cube (take to the third power)
|
|
237
|
+
// some math.
|
|
238
|
+
ariaLabel: i18n._("Cube"),
|
|
239
|
+
}),
|
|
240
|
+
},
|
|
241
|
+
SQRT: {
|
|
242
|
+
...getDefaultOperatorFields({
|
|
243
|
+
key: "SQRT",
|
|
244
|
+
// I18N: A label for a button that will allow the user to input a
|
|
245
|
+
// square root.
|
|
246
|
+
ariaLabel: i18n._("Square root"),
|
|
247
|
+
}),
|
|
248
|
+
},
|
|
249
|
+
CUBE_ROOT: {
|
|
250
|
+
...getDefaultOperatorFields({
|
|
251
|
+
key: "CUBE_ROOT",
|
|
252
|
+
// I18N: A label for a button that will allow the user to input a
|
|
253
|
+
// cube root.
|
|
254
|
+
ariaLabel: i18n._("Cube root"),
|
|
255
|
+
}),
|
|
256
|
+
},
|
|
257
|
+
RADICAL: {
|
|
258
|
+
...getDefaultOperatorFields({
|
|
259
|
+
key: "RADICAL",
|
|
260
|
+
// I18N: A label for a button that will allow the user to input a
|
|
261
|
+
// radical with a custom root.
|
|
262
|
+
ariaLabel: i18n._("Radical with custom root"),
|
|
263
|
+
}),
|
|
264
|
+
},
|
|
265
|
+
LEFT_PAREN: {
|
|
266
|
+
...getDefaultOperatorFields({
|
|
267
|
+
key: "LEFT_PAREN",
|
|
268
|
+
// I18N: A label for a button that will allow the user to input a
|
|
269
|
+
// left parenthesis (i.e. '(')
|
|
270
|
+
ariaLabel: i18n._("Left parenthesis"),
|
|
271
|
+
}),
|
|
272
|
+
},
|
|
273
|
+
RIGHT_PAREN: {
|
|
274
|
+
...getDefaultOperatorFields({
|
|
275
|
+
key: "RIGHT_PAREN",
|
|
276
|
+
// I18N: A label for a button that will allow the user to input a
|
|
277
|
+
// right parenthesis (i.e. ')')
|
|
278
|
+
ariaLabel: i18n._("Right parenthesis"),
|
|
279
|
+
}),
|
|
280
|
+
},
|
|
281
|
+
LN: {
|
|
282
|
+
...getDefaultOperatorFields({
|
|
283
|
+
key: "LN",
|
|
284
|
+
// I18N: A label for a button that will allow the user to input a
|
|
285
|
+
// natural logarithm.
|
|
286
|
+
ariaLabel: i18n._("Natural logarithm"),
|
|
287
|
+
}),
|
|
288
|
+
},
|
|
289
|
+
LOG: {
|
|
290
|
+
...getDefaultOperatorFields({
|
|
291
|
+
key: "LOG",
|
|
292
|
+
// I18N: A label for a button that will allow the user to input a
|
|
293
|
+
// logarithm with base 10.
|
|
294
|
+
ariaLabel: i18n._("Logarithm with base 10"),
|
|
295
|
+
}),
|
|
296
|
+
},
|
|
297
|
+
LOG_N: {
|
|
298
|
+
...getDefaultOperatorFields({
|
|
299
|
+
key: "LOG_N",
|
|
300
|
+
// I18N: A label for a button that will allow the user to input a
|
|
301
|
+
// logarithm with a custom base.
|
|
302
|
+
ariaLabel: i18n._("Logarithm with custom base"),
|
|
303
|
+
}),
|
|
304
|
+
},
|
|
305
|
+
SIN: {
|
|
306
|
+
...getDefaultOperatorFields({
|
|
307
|
+
key: "SIN",
|
|
308
|
+
// I18N: A label for a button that will allow the user to input a
|
|
309
|
+
// sine function.
|
|
310
|
+
ariaLabel: i18n._("Sine"),
|
|
311
|
+
}),
|
|
312
|
+
},
|
|
313
|
+
COS: {
|
|
314
|
+
...getDefaultOperatorFields({
|
|
315
|
+
key: "COS",
|
|
316
|
+
// I18N: A label for a button that will allow the user to input a
|
|
317
|
+
// cosine function.
|
|
318
|
+
ariaLabel: i18n._("Cosine"),
|
|
319
|
+
}),
|
|
320
|
+
},
|
|
321
|
+
TAN: {
|
|
322
|
+
...getDefaultOperatorFields({
|
|
323
|
+
key: "TAN",
|
|
324
|
+
// I18N: A label for a button that will allow the user to input a
|
|
325
|
+
// tangent function.
|
|
326
|
+
ariaLabel: i18n._("Tangent"),
|
|
327
|
+
}),
|
|
328
|
+
},
|
|
329
|
+
PI: {
|
|
330
|
+
...getDefaultValueFields({
|
|
331
|
+
key: "PI",
|
|
188
332
|
data: "\\pi",
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
333
|
+
// I18N: A label for a button that will allow the user to input the
|
|
334
|
+
// mathematical constant pi (i.e., π)
|
|
335
|
+
ariaLabel: i18n._("Pi"),
|
|
336
|
+
}),
|
|
337
|
+
},
|
|
338
|
+
THETA: {
|
|
339
|
+
...getDefaultValueFields({
|
|
340
|
+
key: "THETA",
|
|
196
341
|
data: "\\theta",
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
342
|
+
// I18N: A label for a button that will allow the user to input the
|
|
343
|
+
// mathematical constant theta (i.e., θ)
|
|
344
|
+
ariaLabel: i18n._("Theta"),
|
|
345
|
+
}),
|
|
346
|
+
},
|
|
347
|
+
NOOP: {
|
|
348
|
+
...getDefaultOperatorFields({
|
|
349
|
+
key: "NOOP",
|
|
350
|
+
keyType: "EMPTY",
|
|
351
|
+
}),
|
|
352
|
+
},
|
|
353
|
+
// Input navigation
|
|
354
|
+
UP: {
|
|
355
|
+
...getDefaultOperatorFields({
|
|
356
|
+
key: "UP",
|
|
357
|
+
keyType: "INPUT_NAVIGATION",
|
|
358
|
+
ariaLabel: i18n._("Up arrow"),
|
|
359
|
+
}),
|
|
360
|
+
},
|
|
361
|
+
RIGHT: {
|
|
362
|
+
...getDefaultOperatorFields({
|
|
363
|
+
key: "RIGHT",
|
|
364
|
+
keyType: "INPUT_NAVIGATION",
|
|
365
|
+
ariaLabel: i18n._("Right arrow"),
|
|
366
|
+
}),
|
|
367
|
+
},
|
|
368
|
+
DOWN: {
|
|
369
|
+
...getDefaultOperatorFields({
|
|
370
|
+
key: "DOWN",
|
|
371
|
+
keyType: "INPUT_NAVIGATION",
|
|
372
|
+
ariaLabel: i18n._("Down arrow"),
|
|
373
|
+
}),
|
|
374
|
+
},
|
|
375
|
+
LEFT: {
|
|
376
|
+
...getDefaultOperatorFields({
|
|
377
|
+
key: "LEFT",
|
|
378
|
+
keyType: "INPUT_NAVIGATION",
|
|
379
|
+
ariaLabel: i18n._("Left arrow"),
|
|
380
|
+
}),
|
|
381
|
+
},
|
|
382
|
+
JUMP_OUT_PARENTHESES: {
|
|
383
|
+
...getDefaultOperatorFields({
|
|
384
|
+
key: "JUMP_OUT_PARENTHESES",
|
|
385
|
+
keyType: "INPUT_NAVIGATION",
|
|
386
|
+
ariaLabel: i18n._("Navigate right out of a set of parentheses"),
|
|
387
|
+
}),
|
|
388
|
+
},
|
|
389
|
+
JUMP_OUT_EXPONENT: {
|
|
390
|
+
...getDefaultOperatorFields({
|
|
391
|
+
key: "JUMP_OUT_EXPONENT",
|
|
392
|
+
keyType: "INPUT_NAVIGATION",
|
|
393
|
+
ariaLabel: i18n._("Navigate right out of an exponent"),
|
|
394
|
+
}),
|
|
395
|
+
},
|
|
396
|
+
JUMP_OUT_BASE: {
|
|
397
|
+
...getDefaultOperatorFields({
|
|
398
|
+
key: "JUMP_OUT_BASE",
|
|
399
|
+
keyType: "INPUT_NAVIGATION",
|
|
400
|
+
ariaLabel: i18n._("Navigate right out of a base"),
|
|
401
|
+
}),
|
|
402
|
+
},
|
|
403
|
+
JUMP_INTO_NUMERATOR: {
|
|
404
|
+
...getDefaultOperatorFields({
|
|
405
|
+
key: "JUMP_INTO_NUMERATOR",
|
|
406
|
+
keyType: "INPUT_NAVIGATION",
|
|
407
|
+
ariaLabel: i18n._(
|
|
408
|
+
"Navigate right into the numerator of a fraction",
|
|
409
|
+
),
|
|
410
|
+
}),
|
|
411
|
+
},
|
|
412
|
+
JUMP_OUT_NUMERATOR: {
|
|
413
|
+
...getDefaultOperatorFields({
|
|
414
|
+
key: "JUMP_OUT_NUMERATOR",
|
|
415
|
+
keyType: "INPUT_NAVIGATION",
|
|
416
|
+
ariaLabel: i18n._(
|
|
417
|
+
"Navigate right out of the numerator and into the denominator",
|
|
418
|
+
),
|
|
419
|
+
}),
|
|
420
|
+
},
|
|
421
|
+
JUMP_OUT_DENOMINATOR: {
|
|
422
|
+
...getDefaultOperatorFields({
|
|
423
|
+
key: "JUMP_OUT_DENOMINATOR",
|
|
424
|
+
keyType: "INPUT_NAVIGATION",
|
|
425
|
+
ariaLabel: i18n._(
|
|
426
|
+
"Navigate right out of the denominator of a fraction",
|
|
427
|
+
),
|
|
428
|
+
}),
|
|
429
|
+
},
|
|
430
|
+
BACKSPACE: {
|
|
431
|
+
...getDefaultOperatorFields({
|
|
432
|
+
key: "BACKSPACE",
|
|
433
|
+
keyType: "INPUT_NAVIGATION",
|
|
434
|
+
ariaLabel: i18n._("Delete"),
|
|
435
|
+
}),
|
|
201
436
|
},
|
|
202
437
|
|
|
203
|
-
//
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
},
|
|
212
|
-
[Keys.DOWN]: {
|
|
213
|
-
type: KeyType.INPUT_NAVIGATION,
|
|
214
|
-
ariaLabel: i18n._("Down arrow"),
|
|
215
|
-
},
|
|
216
|
-
[Keys.LEFT]: {
|
|
217
|
-
type: KeyType.INPUT_NAVIGATION,
|
|
218
|
-
ariaLabel: i18n._("Left arrow"),
|
|
219
|
-
},
|
|
220
|
-
[Keys.JUMP_OUT_PARENTHESES]: {
|
|
221
|
-
type: KeyType.INPUT_NAVIGATION,
|
|
222
|
-
ariaLabel: i18n._("Navigate right out of a set of parentheses"),
|
|
223
|
-
},
|
|
224
|
-
[Keys.JUMP_OUT_EXPONENT]: {
|
|
225
|
-
type: KeyType.INPUT_NAVIGATION,
|
|
226
|
-
ariaLabel: i18n._("Navigate right out of an exponent"),
|
|
227
|
-
},
|
|
228
|
-
[Keys.JUMP_OUT_BASE]: {
|
|
229
|
-
type: KeyType.INPUT_NAVIGATION,
|
|
230
|
-
ariaLabel: i18n._("Navigate right out of a base"),
|
|
231
|
-
},
|
|
232
|
-
[Keys.JUMP_INTO_NUMERATOR]: {
|
|
233
|
-
type: KeyType.INPUT_NAVIGATION,
|
|
234
|
-
ariaLabel: i18n._("Navigate right into the numerator of a fraction"),
|
|
235
|
-
},
|
|
236
|
-
[Keys.JUMP_OUT_NUMERATOR]: {
|
|
237
|
-
type: KeyType.INPUT_NAVIGATION,
|
|
238
|
-
ariaLabel: i18n._(
|
|
239
|
-
"Navigate right out of the numerator and into the denominator",
|
|
240
|
-
),
|
|
241
|
-
},
|
|
242
|
-
[Keys.JUMP_OUT_DENOMINATOR]: {
|
|
243
|
-
type: KeyType.INPUT_NAVIGATION,
|
|
244
|
-
ariaLabel: i18n._(
|
|
245
|
-
"Navigate right out of the denominator of a fraction",
|
|
246
|
-
),
|
|
247
|
-
},
|
|
248
|
-
[Keys.BACKSPACE]: {
|
|
249
|
-
type: KeyType.INPUT_NAVIGATION,
|
|
250
|
-
// I18N: A label for a button that will delete some input.
|
|
251
|
-
ariaLabel: i18n._("Delete"),
|
|
438
|
+
// Keypad navigation
|
|
439
|
+
DISMISS: {
|
|
440
|
+
...getDefaultOperatorFields({
|
|
441
|
+
key: "DISMISS",
|
|
442
|
+
keyType: "KEYPAD_NAVIGATION",
|
|
443
|
+
// I18N: A label for a button that will dismiss/hide a keypad.
|
|
444
|
+
ariaLabel: i18n._("Dismiss"),
|
|
445
|
+
}),
|
|
252
446
|
},
|
|
253
447
|
|
|
254
|
-
//
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
448
|
+
// TODO(charlie): Use the numeral color for the 'Many' key.
|
|
449
|
+
MANY: {
|
|
450
|
+
...getDefaultOperatorFields({
|
|
451
|
+
key: "MANY",
|
|
452
|
+
keyType: "MANY",
|
|
453
|
+
}),
|
|
259
454
|
},
|
|
260
455
|
|
|
261
|
-
//
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
456
|
+
// NUMBERS
|
|
457
|
+
NUM_0: {
|
|
458
|
+
...getDefaultNumberFields({
|
|
459
|
+
key: "NUM_0",
|
|
460
|
+
}),
|
|
461
|
+
},
|
|
462
|
+
NUM_1: {
|
|
463
|
+
...getDefaultNumberFields({
|
|
464
|
+
key: "NUM_1",
|
|
465
|
+
}),
|
|
466
|
+
},
|
|
467
|
+
NUM_2: {
|
|
468
|
+
...getDefaultNumberFields({
|
|
469
|
+
key: "NUM_2",
|
|
470
|
+
}),
|
|
471
|
+
},
|
|
472
|
+
NUM_3: {
|
|
473
|
+
...getDefaultNumberFields({
|
|
474
|
+
key: "NUM_3",
|
|
475
|
+
}),
|
|
476
|
+
},
|
|
477
|
+
NUM_4: {
|
|
478
|
+
...getDefaultNumberFields({
|
|
479
|
+
key: "NUM_4",
|
|
480
|
+
}),
|
|
481
|
+
},
|
|
482
|
+
NUM_5: {
|
|
483
|
+
...getDefaultNumberFields({
|
|
484
|
+
key: "NUM_5",
|
|
485
|
+
}),
|
|
486
|
+
},
|
|
487
|
+
NUM_6: {
|
|
488
|
+
...getDefaultNumberFields({
|
|
489
|
+
key: "NUM_6",
|
|
490
|
+
}),
|
|
491
|
+
},
|
|
492
|
+
NUM_7: {
|
|
493
|
+
...getDefaultNumberFields({
|
|
494
|
+
key: "NUM_7",
|
|
495
|
+
}),
|
|
496
|
+
},
|
|
497
|
+
NUM_8: {
|
|
498
|
+
...getDefaultNumberFields({
|
|
499
|
+
key: "NUM_8",
|
|
500
|
+
}),
|
|
501
|
+
},
|
|
502
|
+
NUM_9: {
|
|
503
|
+
...getDefaultNumberFields({
|
|
504
|
+
key: "NUM_9",
|
|
505
|
+
}),
|
|
506
|
+
},
|
|
266
507
|
|
|
267
|
-
|
|
508
|
+
// LETTERS
|
|
509
|
+
A: {
|
|
510
|
+
...getDefaultValueFields({
|
|
511
|
+
key: "A",
|
|
512
|
+
}),
|
|
513
|
+
},
|
|
514
|
+
B: {
|
|
515
|
+
...getDefaultValueFields({
|
|
516
|
+
key: "B",
|
|
517
|
+
}),
|
|
518
|
+
},
|
|
519
|
+
C: {
|
|
520
|
+
...getDefaultValueFields({
|
|
521
|
+
key: "C",
|
|
522
|
+
}),
|
|
523
|
+
},
|
|
524
|
+
D: {
|
|
525
|
+
...getDefaultValueFields({
|
|
526
|
+
key: "D",
|
|
527
|
+
}),
|
|
528
|
+
},
|
|
529
|
+
E: {
|
|
530
|
+
...getDefaultValueFields({
|
|
531
|
+
key: "E",
|
|
532
|
+
}),
|
|
533
|
+
},
|
|
534
|
+
F: {
|
|
535
|
+
...getDefaultValueFields({
|
|
536
|
+
key: "F",
|
|
537
|
+
}),
|
|
538
|
+
},
|
|
539
|
+
G: {
|
|
540
|
+
...getDefaultValueFields({
|
|
541
|
+
key: "G",
|
|
542
|
+
}),
|
|
543
|
+
},
|
|
544
|
+
H: {
|
|
545
|
+
...getDefaultValueFields({
|
|
546
|
+
key: "H",
|
|
547
|
+
}),
|
|
548
|
+
},
|
|
549
|
+
I: {
|
|
550
|
+
...getDefaultValueFields({
|
|
551
|
+
key: "I",
|
|
552
|
+
}),
|
|
553
|
+
},
|
|
554
|
+
J: {
|
|
555
|
+
...getDefaultValueFields({
|
|
556
|
+
key: "J",
|
|
557
|
+
}),
|
|
558
|
+
},
|
|
559
|
+
K: {
|
|
560
|
+
...getDefaultValueFields({
|
|
561
|
+
key: "K",
|
|
562
|
+
}),
|
|
563
|
+
},
|
|
564
|
+
L: {
|
|
565
|
+
...getDefaultValueFields({
|
|
566
|
+
key: "L",
|
|
567
|
+
}),
|
|
568
|
+
},
|
|
569
|
+
M: {
|
|
570
|
+
...getDefaultValueFields({
|
|
571
|
+
key: "M",
|
|
572
|
+
}),
|
|
573
|
+
},
|
|
574
|
+
N: {
|
|
575
|
+
...getDefaultValueFields({
|
|
576
|
+
key: "N",
|
|
577
|
+
}),
|
|
578
|
+
},
|
|
579
|
+
O: {
|
|
580
|
+
...getDefaultValueFields({
|
|
581
|
+
key: "O",
|
|
582
|
+
}),
|
|
583
|
+
},
|
|
584
|
+
P: {
|
|
585
|
+
...getDefaultValueFields({
|
|
586
|
+
key: "P",
|
|
587
|
+
}),
|
|
588
|
+
},
|
|
589
|
+
Q: {
|
|
590
|
+
...getDefaultValueFields({
|
|
591
|
+
key: "Q",
|
|
592
|
+
}),
|
|
593
|
+
},
|
|
594
|
+
R: {
|
|
595
|
+
...getDefaultValueFields({
|
|
596
|
+
key: "R",
|
|
597
|
+
}),
|
|
598
|
+
},
|
|
599
|
+
S: {
|
|
600
|
+
...getDefaultValueFields({
|
|
601
|
+
key: "S",
|
|
602
|
+
}),
|
|
603
|
+
},
|
|
604
|
+
T: {
|
|
605
|
+
...getDefaultValueFields({
|
|
606
|
+
key: "T",
|
|
607
|
+
}),
|
|
608
|
+
},
|
|
609
|
+
U: {
|
|
610
|
+
...getDefaultValueFields({
|
|
611
|
+
key: "U",
|
|
612
|
+
}),
|
|
613
|
+
},
|
|
614
|
+
V: {
|
|
615
|
+
...getDefaultValueFields({
|
|
616
|
+
key: "V",
|
|
617
|
+
}),
|
|
618
|
+
},
|
|
619
|
+
W: {
|
|
620
|
+
...getDefaultValueFields({
|
|
621
|
+
key: "W",
|
|
622
|
+
}),
|
|
623
|
+
},
|
|
624
|
+
X: {
|
|
625
|
+
...getDefaultValueFields({
|
|
626
|
+
key: "X",
|
|
627
|
+
}),
|
|
628
|
+
},
|
|
629
|
+
Y: {
|
|
630
|
+
...getDefaultValueFields({
|
|
631
|
+
key: "Y",
|
|
632
|
+
}),
|
|
633
|
+
},
|
|
634
|
+
Z: {
|
|
635
|
+
...getDefaultValueFields({
|
|
636
|
+
key: "Z",
|
|
637
|
+
}),
|
|
638
|
+
},
|
|
639
|
+
a: {
|
|
640
|
+
...getDefaultValueFields({
|
|
641
|
+
key: "a",
|
|
642
|
+
}),
|
|
643
|
+
},
|
|
644
|
+
b: {
|
|
645
|
+
...getDefaultValueFields({
|
|
646
|
+
key: "b",
|
|
647
|
+
}),
|
|
648
|
+
},
|
|
649
|
+
c: {
|
|
650
|
+
...getDefaultValueFields({
|
|
651
|
+
key: "c",
|
|
652
|
+
}),
|
|
653
|
+
},
|
|
654
|
+
d: {
|
|
655
|
+
...getDefaultValueFields({
|
|
656
|
+
key: "d",
|
|
657
|
+
}),
|
|
658
|
+
},
|
|
659
|
+
e: {
|
|
660
|
+
...getDefaultValueFields({
|
|
661
|
+
key: "e",
|
|
662
|
+
}),
|
|
663
|
+
},
|
|
664
|
+
f: {
|
|
665
|
+
...getDefaultValueFields({
|
|
666
|
+
key: "f",
|
|
667
|
+
}),
|
|
668
|
+
},
|
|
669
|
+
g: {
|
|
670
|
+
...getDefaultValueFields({
|
|
671
|
+
key: "g",
|
|
672
|
+
}),
|
|
673
|
+
},
|
|
674
|
+
h: {
|
|
675
|
+
...getDefaultValueFields({
|
|
676
|
+
key: "h",
|
|
677
|
+
}),
|
|
678
|
+
},
|
|
679
|
+
i: {
|
|
680
|
+
...getDefaultValueFields({
|
|
681
|
+
key: "i",
|
|
682
|
+
}),
|
|
683
|
+
},
|
|
684
|
+
j: {
|
|
685
|
+
...getDefaultValueFields({
|
|
686
|
+
key: "j",
|
|
687
|
+
}),
|
|
688
|
+
},
|
|
689
|
+
k: {
|
|
690
|
+
...getDefaultValueFields({
|
|
691
|
+
key: "k",
|
|
692
|
+
}),
|
|
693
|
+
},
|
|
694
|
+
l: {
|
|
695
|
+
...getDefaultValueFields({
|
|
696
|
+
key: "l",
|
|
697
|
+
}),
|
|
698
|
+
},
|
|
699
|
+
m: {
|
|
700
|
+
...getDefaultValueFields({
|
|
701
|
+
key: "m",
|
|
702
|
+
}),
|
|
703
|
+
},
|
|
704
|
+
n: {
|
|
705
|
+
...getDefaultValueFields({
|
|
706
|
+
key: "n",
|
|
707
|
+
}),
|
|
708
|
+
},
|
|
709
|
+
o: {
|
|
710
|
+
...getDefaultValueFields({
|
|
711
|
+
key: "o",
|
|
712
|
+
}),
|
|
713
|
+
},
|
|
714
|
+
p: {
|
|
715
|
+
...getDefaultValueFields({
|
|
716
|
+
key: "p",
|
|
717
|
+
}),
|
|
718
|
+
},
|
|
719
|
+
q: {
|
|
720
|
+
...getDefaultValueFields({
|
|
721
|
+
key: "q",
|
|
722
|
+
}),
|
|
723
|
+
},
|
|
724
|
+
r: {
|
|
725
|
+
...getDefaultValueFields({
|
|
726
|
+
key: "r",
|
|
727
|
+
}),
|
|
728
|
+
},
|
|
729
|
+
s: {
|
|
730
|
+
...getDefaultValueFields({
|
|
731
|
+
key: "s",
|
|
732
|
+
}),
|
|
733
|
+
},
|
|
734
|
+
t: {
|
|
735
|
+
...getDefaultValueFields({
|
|
736
|
+
key: "t",
|
|
737
|
+
}),
|
|
738
|
+
},
|
|
739
|
+
u: {
|
|
740
|
+
...getDefaultValueFields({
|
|
741
|
+
key: "u",
|
|
742
|
+
}),
|
|
743
|
+
},
|
|
744
|
+
v: {
|
|
745
|
+
...getDefaultValueFields({
|
|
746
|
+
key: "v",
|
|
747
|
+
}),
|
|
748
|
+
},
|
|
749
|
+
w: {
|
|
750
|
+
...getDefaultValueFields({
|
|
751
|
+
key: "w",
|
|
752
|
+
}),
|
|
753
|
+
},
|
|
754
|
+
x: {
|
|
755
|
+
...getDefaultValueFields({
|
|
756
|
+
key: "x",
|
|
757
|
+
}),
|
|
758
|
+
},
|
|
759
|
+
y: {
|
|
760
|
+
...getDefaultValueFields({
|
|
761
|
+
key: "y",
|
|
762
|
+
}),
|
|
763
|
+
},
|
|
764
|
+
z: {
|
|
765
|
+
...getDefaultValueFields({
|
|
766
|
+
key: "z",
|
|
767
|
+
}),
|
|
768
|
+
},
|
|
769
|
+
PHI: {
|
|
770
|
+
...getDefaultValueFields({
|
|
771
|
+
key: "PHI",
|
|
772
|
+
}),
|
|
773
|
+
},
|
|
774
|
+
NTHROOT3: {
|
|
775
|
+
...getDefaultValueFields({
|
|
776
|
+
key: "NTHROOT3",
|
|
777
|
+
}),
|
|
778
|
+
},
|
|
779
|
+
POW: {
|
|
780
|
+
...getDefaultValueFields({
|
|
781
|
+
key: "POW",
|
|
782
|
+
}),
|
|
783
|
+
},
|
|
784
|
+
LOG_B: {
|
|
785
|
+
...getDefaultValueFields({
|
|
786
|
+
key: "LOG_B",
|
|
787
|
+
}),
|
|
788
|
+
},
|
|
268
789
|
};
|
|
269
790
|
|
|
270
|
-
// Add in every numeral.
|
|
271
|
-
const NUMBERS = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
|
|
272
|
-
for (const num of NUMBERS) {
|
|
273
|
-
// TODO(charlie): Consider removing the SVG icons that we have for the
|
|
274
|
-
// numeral keys. They can be rendered just as easily with text (though that
|
|
275
|
-
// would mean that we'd be using text beyond the variable key).
|
|
276
|
-
const textRepresentation = `${num}`;
|
|
277
|
-
KeyConfigs[`NUM_${num}`] = {
|
|
278
|
-
type: KeyType.VALUE,
|
|
279
|
-
ariaLabel: textRepresentation,
|
|
280
|
-
icon: {
|
|
281
|
-
type: IconType.TEXT,
|
|
282
|
-
data: textRepresentation,
|
|
283
|
-
},
|
|
284
|
-
};
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
// Add in every variable.
|
|
288
|
-
const LETTERS = [
|
|
289
|
-
"A",
|
|
290
|
-
"B",
|
|
291
|
-
"C",
|
|
292
|
-
"D",
|
|
293
|
-
"E",
|
|
294
|
-
"F",
|
|
295
|
-
"G",
|
|
296
|
-
"H",
|
|
297
|
-
"I",
|
|
298
|
-
"J",
|
|
299
|
-
"K",
|
|
300
|
-
"L",
|
|
301
|
-
"M",
|
|
302
|
-
"N",
|
|
303
|
-
"O",
|
|
304
|
-
"P",
|
|
305
|
-
"Q",
|
|
306
|
-
"R",
|
|
307
|
-
"S",
|
|
308
|
-
"T",
|
|
309
|
-
"U",
|
|
310
|
-
"V",
|
|
311
|
-
"W",
|
|
312
|
-
"X",
|
|
313
|
-
"Y",
|
|
314
|
-
"Z",
|
|
315
|
-
];
|
|
316
|
-
for (const letter of LETTERS) {
|
|
317
|
-
const lowerCaseVariable = letter.toLowerCase();
|
|
318
|
-
const upperCaseVariable = letter.toUpperCase();
|
|
319
|
-
|
|
320
|
-
for (const textRepresentation of [lowerCaseVariable, upperCaseVariable]) {
|
|
321
|
-
KeyConfigs[textRepresentation] = {
|
|
322
|
-
type: KeyType.VALUE,
|
|
323
|
-
ariaLabel: textRepresentation,
|
|
324
|
-
icon: {
|
|
325
|
-
type: IconType.MATH,
|
|
326
|
-
data: textRepresentation,
|
|
327
|
-
},
|
|
328
|
-
};
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
for (const key of Object.keys(KeyConfigs)) {
|
|
333
|
-
KeyConfigs[key] = {
|
|
334
|
-
id: key,
|
|
335
|
-
// Default to an SVG icon indexed by the key name.
|
|
336
|
-
icon: {
|
|
337
|
-
type: IconType.SVG,
|
|
338
|
-
data: key,
|
|
339
|
-
},
|
|
340
|
-
...KeyConfigs[key],
|
|
341
|
-
};
|
|
342
|
-
}
|
|
343
|
-
|
|
344
791
|
export default KeyConfigs;
|