@khanacademy/math-input 1.0.1 → 3.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.
Files changed (246) hide show
  1. package/CHANGELOG.md +25 -1
  2. package/dist/components/input/cursor-contexts.d.ts +10 -9
  3. package/dist/components/input/cursor-contexts.js.flow +11 -16
  4. package/dist/components/input/math-input.d.ts +1 -1
  5. package/dist/components/input/math-input.js.flow +1 -1
  6. package/dist/components/input/math-wrapper.d.ts +3 -2
  7. package/dist/components/input/math-wrapper.js.flow +3 -16
  8. package/dist/components/keypad/button.d.ts +1 -2
  9. package/dist/components/keypad/button.js.flow +1 -1
  10. package/dist/components/keypad/{pre-algebra-page.d.ts → geometry-page/index.d.ts} +1 -1
  11. package/dist/components/keypad/{pre-algebra-page.js.flow → geometry-page/index.js.flow} +1 -1
  12. package/dist/components/keypad/index.d.ts +5 -4
  13. package/dist/components/keypad/index.js.flow +9 -4
  14. package/dist/components/keypad/keypad-page-items.d.ts +8 -2
  15. package/dist/components/keypad/keypad-page-items.js.flow +8 -2
  16. package/dist/components/keypad/{numeric-input-page.d.ts → numbers-page/index.d.ts} +3 -2
  17. package/dist/components/keypad/numbers-page/index.js.flow +17 -0
  18. package/dist/components/keypad/numbers-page/types.d.ts +4 -0
  19. package/dist/components/keypad/numbers-page/types.js.flow +10 -0
  20. package/dist/components/keypad/operators-page/advanced-relations-buttons.d.ts +7 -0
  21. package/dist/components/keypad/{numeric-input-page.js.flow → operators-page/advanced-relations-buttons.js.flow} +3 -4
  22. package/dist/components/keypad/operators-page/basic-relations-buttons.d.ts +7 -0
  23. package/dist/components/keypad/{trigonometry-page.js.flow → operators-page/basic-relations-buttons.js.flow} +3 -6
  24. package/dist/components/keypad/operators-page/index.d.ts +9 -0
  25. package/dist/components/keypad/operators-page/index.js.flow +17 -0
  26. package/dist/components/keypad/operators-page/logarithms-buttons.d.ts +7 -0
  27. package/dist/components/keypad/operators-page/logarithms-buttons.js.flow +12 -0
  28. package/dist/components/keypad/operators-page/pre-algebra-buttons.d.ts +7 -0
  29. package/dist/components/keypad/operators-page/pre-algebra-buttons.js.flow +12 -0
  30. package/dist/components/keypad/operators-page/types.d.ts +6 -0
  31. package/dist/components/keypad/operators-page/types.js.flow +12 -0
  32. package/dist/components/{compute-layout-parameters.d.ts → keypad-legacy/compute-layout-parameters.d.ts} +2 -1
  33. package/dist/components/keypad-legacy/compute-layout-parameters.js.flow +30 -0
  34. package/dist/components/{echo-manager.d.ts → keypad-legacy/echo-manager.d.ts} +2 -11
  35. package/dist/components/{echo-manager.js.flow → keypad-legacy/echo-manager.js.flow} +2 -11
  36. package/dist/components/{expression-keypad.d.ts → keypad-legacy/expression-keypad.d.ts} +3 -4
  37. package/dist/components/{expression-keypad.js.flow → keypad-legacy/expression-keypad.js.flow} +3 -4
  38. package/dist/components/{fraction-keypad.d.ts → keypad-legacy/fraction-keypad.d.ts} +2 -2
  39. package/dist/components/{fraction-keypad.js.flow → keypad-legacy/fraction-keypad.js.flow} +2 -2
  40. package/dist/components/{gesture-manager.d.ts → keypad-legacy/gesture-manager.d.ts} +1 -1
  41. package/dist/components/{gesture-manager.js.flow → keypad-legacy/gesture-manager.js.flow} +1 -1
  42. package/dist/components/{gesture-state-machine.d.ts → keypad-legacy/gesture-state-machine.d.ts} +7 -7
  43. package/dist/components/{gesture-state-machine.js.flow → keypad-legacy/gesture-state-machine.js.flow} +8 -8
  44. package/dist/components/{icon.d.ts → keypad-legacy/icon.d.ts} +2 -2
  45. package/dist/components/{icon.js.flow → keypad-legacy/icon.js.flow} +2 -2
  46. package/dist/components/{keypad-button.d.ts → keypad-legacy/keypad-button.d.ts} +10 -10
  47. package/dist/components/{keypad-button.js.flow → keypad-legacy/keypad-button.js.flow} +12 -11
  48. package/dist/components/{keypad-container.d.ts → keypad-legacy/keypad-container.d.ts} +3 -4
  49. package/dist/components/{keypad-container.js.flow → keypad-legacy/keypad-container.js.flow} +4 -5
  50. package/dist/components/{keypad.d.ts → keypad-legacy/keypad.d.ts} +3 -3
  51. package/dist/components/{keypad.js.flow → keypad-legacy/keypad.js.flow} +3 -3
  52. package/dist/components/{multi-symbol-grid.d.ts → keypad-legacy/multi-symbol-grid.d.ts} +2 -2
  53. package/dist/components/{multi-symbol-grid.js.flow → keypad-legacy/multi-symbol-grid.js.flow} +2 -2
  54. package/dist/components/{multi-symbol-popover.d.ts → keypad-legacy/multi-symbol-popover.d.ts} +1 -1
  55. package/dist/components/{multi-symbol-popover.js.flow → keypad-legacy/multi-symbol-popover.js.flow} +1 -1
  56. package/dist/components/{node-manager.d.ts → keypad-legacy/node-manager.d.ts} +3 -4
  57. package/dist/components/{node-manager.js.flow → keypad-legacy/node-manager.js.flow} +3 -5
  58. package/dist/components/{popover-manager.d.ts → keypad-legacy/popover-manager.d.ts} +1 -1
  59. package/dist/components/{popover-manager.js.flow → keypad-legacy/popover-manager.js.flow} +1 -1
  60. package/dist/components/{popover-state-machine.d.ts → keypad-legacy/popover-state-machine.d.ts} +1 -1
  61. package/dist/components/{popover-state-machine.js.flow → keypad-legacy/popover-state-machine.js.flow} +1 -1
  62. package/dist/components/{provided-keypad.d.ts → keypad-legacy/provided-keypad.d.ts} +1 -1
  63. package/dist/components/{provided-keypad.js.flow → keypad-legacy/provided-keypad.js.flow} +1 -1
  64. package/dist/{store → components/keypad-legacy/store}/actions.d.ts +5 -6
  65. package/dist/{store → components/keypad-legacy/store}/actions.js.flow +7 -9
  66. package/dist/{store → components/keypad-legacy/store}/index.d.ts +0 -1
  67. package/dist/{store → components/keypad-legacy/store}/index.js.flow +0 -1
  68. package/dist/components/keypad-legacy/store/shared.d.ts +7 -0
  69. package/dist/components/keypad-legacy/store/shared.js.flow +14 -0
  70. package/dist/{store → components/keypad-legacy/store}/types.d.ts +6 -17
  71. package/dist/{store → components/keypad-legacy/store}/types.js.flow +6 -17
  72. package/dist/components/keypad-legacy/styles.d.ts +5 -0
  73. package/dist/components/{styles.js.flow → keypad-legacy/styles.js.flow} +1 -3
  74. package/dist/components/keypad-legacy/touchable-keypad-button.d.ts +37 -0
  75. package/dist/components/keypad-legacy/touchable-keypad-button.js.flow +64 -0
  76. package/dist/components/{two-page-keypad.d.ts → keypad-legacy/two-page-keypad.d.ts} +0 -1
  77. package/dist/components/{two-page-keypad.js.flow → keypad-legacy/two-page-keypad.js.flow} +0 -1
  78. package/dist/data/key-configs.d.ts +3 -1
  79. package/dist/data/key-configs.js.flow +3 -1
  80. package/dist/data/keys.d.ts +49 -52
  81. package/dist/data/keys.js.flow +48 -99
  82. package/dist/enums.d.ts +49 -0
  83. package/dist/enums.js.flow +63 -0
  84. package/dist/es/index.js +5033 -4370
  85. package/dist/es/index.js.map +1 -1
  86. package/dist/fake-react-native-web/view.d.ts +1 -2
  87. package/dist/fake-react-native-web/view.js.flow +1 -2
  88. package/dist/index.d.ts +5 -7
  89. package/dist/index.js +5398 -4714
  90. package/dist/index.js.flow +5 -7
  91. package/dist/index.js.map +1 -1
  92. package/dist/types.d.ts +26 -23
  93. package/dist/types.js.flow +37 -33
  94. package/package.json +1 -1
  95. package/src/components/input/__tests__/context-tracking.test.ts +20 -20
  96. package/src/components/input/cursor-contexts.ts +22 -29
  97. package/src/components/input/math-input.tsx +1 -1
  98. package/src/components/input/math-wrapper.ts +75 -67
  99. package/src/components/keypad/button-assets.tsx +65 -40
  100. package/src/components/keypad/button.stories.tsx +61 -13
  101. package/src/components/keypad/button.tsx +1 -1
  102. package/src/components/keypad/{trigonometry-page.tsx → geometry-page/index.tsx} +3 -4
  103. package/src/components/keypad/index.tsx +19 -14
  104. package/src/components/keypad/keypad-page-items.tsx +34 -21
  105. package/src/components/keypad/keypad-pages.stories.tsx +5 -5
  106. package/src/components/keypad/keypad.stories.tsx +75 -17
  107. package/src/components/keypad/{numeric-input-page.tsx → numbers-page/index.tsx} +47 -11
  108. package/src/components/keypad/numbers-page/types.ts +4 -0
  109. package/src/components/keypad/operators-page/advanced-relations-buttons.tsx +32 -0
  110. package/src/components/keypad/operators-page/basic-relations-buttons.tsx +32 -0
  111. package/src/components/keypad/{pre-algebra-page.tsx → operators-page/index.tsx} +25 -29
  112. package/src/components/keypad/operators-page/logarithms-buttons.tsx +32 -0
  113. package/src/components/keypad/operators-page/pre-algebra-buttons.tsx +36 -0
  114. package/src/components/keypad/operators-page/types.ts +6 -0
  115. package/src/components/{__tests__ → keypad-legacy/__tests__}/two-page-keypad.test.tsx +0 -2
  116. package/src/components/{compute-layout-parameters.ts → keypad-legacy/compute-layout-parameters.ts} +7 -8
  117. package/src/components/{corner-decal.tsx → keypad-legacy/corner-decal.tsx} +2 -3
  118. package/src/components/{echo-manager.tsx → keypad-legacy/echo-manager.tsx} +12 -25
  119. package/src/components/{empty-keypad-button.tsx → keypad-legacy/empty-keypad-button.tsx} +2 -2
  120. package/src/components/{expression-keypad.tsx → keypad-legacy/expression-keypad.tsx} +15 -25
  121. package/src/components/{fraction-keypad.tsx → keypad-legacy/fraction-keypad.tsx} +15 -16
  122. package/src/components/{gesture-manager.ts → keypad-legacy/gesture-manager.ts} +2 -2
  123. package/src/components/{gesture-state-machine.ts → keypad-legacy/gesture-state-machine.ts} +8 -8
  124. package/src/components/{icon.tsx → keypad-legacy/icon.tsx} +7 -7
  125. package/src/components/{keypad-button.tsx → keypad-legacy/keypad-button.tsx} +30 -28
  126. package/src/components/{keypad-container.tsx → keypad-legacy/keypad-container.tsx} +13 -14
  127. package/src/components/{keypad.tsx → keypad-legacy/keypad.tsx} +5 -5
  128. package/src/components/{many-keypad-button.tsx → keypad-legacy/many-keypad-button.tsx} +6 -6
  129. package/src/components/{math-icon.tsx → keypad-legacy/math-icon.tsx} +2 -2
  130. package/src/components/{multi-symbol-grid.tsx → keypad-legacy/multi-symbol-grid.tsx} +6 -7
  131. package/src/components/{multi-symbol-popover.tsx → keypad-legacy/multi-symbol-popover.tsx} +3 -4
  132. package/src/components/{navigation-pad.tsx → keypad-legacy/navigation-pad.tsx} +5 -5
  133. package/src/components/{node-manager.ts → keypad-legacy/node-manager.ts} +2 -10
  134. package/src/components/{popover-manager.tsx → keypad-legacy/popover-manager.tsx} +2 -2
  135. package/src/components/{popover-state-machine.ts → keypad-legacy/popover-state-machine.ts} +1 -1
  136. package/src/components/{provided-keypad.tsx → keypad-legacy/provided-keypad.tsx} +4 -5
  137. package/src/{store → components/keypad-legacy/store}/actions.ts +8 -10
  138. package/src/{store → components/keypad-legacy/store}/echo-reducer.ts +6 -7
  139. package/src/{store → components/keypad-legacy/store}/index.ts +5 -13
  140. package/src/{store → components/keypad-legacy/store}/input-reducer.ts +6 -6
  141. package/src/{store → components/keypad-legacy/store}/keypad-reducer.ts +2 -2
  142. package/src/{store → components/keypad-legacy/store}/layout-reducer.ts +11 -11
  143. package/src/components/keypad-legacy/store/shared.ts +12 -0
  144. package/src/{store → components/keypad-legacy/store}/types.ts +16 -21
  145. package/src/components/{styles.ts → keypad-legacy/styles.ts} +1 -1
  146. package/src/components/{text-icon.tsx → keypad-legacy/text-icon.tsx} +2 -2
  147. package/src/components/{touchable-keypad-button.tsx → keypad-legacy/touchable-keypad-button.tsx} +40 -21
  148. package/src/components/{two-page-keypad.tsx → keypad-legacy/two-page-keypad.tsx} +5 -6
  149. package/src/data/key-configs.ts +67 -72
  150. package/src/data/keys.ts +50 -107
  151. package/src/enums.ts +74 -0
  152. package/src/index.ts +5 -9
  153. package/src/math-input.stories.tsx +9 -9
  154. package/src/types.ts +33 -26
  155. package/src/utils.ts +3 -3
  156. package/tsconfig-build.tsbuildinfo +1 -0
  157. package/dist/components/compute-layout-parameters.js.flow +0 -49
  158. package/dist/components/keypad/trigonometry-page.d.ts +0 -8
  159. package/dist/components/styles.d.ts +0 -6
  160. package/dist/components/touchable-keypad-button.d.ts +0 -30
  161. package/dist/components/touchable-keypad-button.js.flow +0 -35
  162. package/dist/components/velocity-tracker.d.ts +0 -48
  163. package/dist/components/velocity-tracker.js.flow +0 -54
  164. package/dist/consts.d.ts +0 -51
  165. package/dist/consts.js.flow +0 -66
  166. package/dist/store/pager-reducer.d.ts +0 -4
  167. package/dist/store/pager-reducer.js.flow +0 -13
  168. package/dist/store/shared.d.ts +0 -6
  169. package/dist/store/shared.js.flow +0 -13
  170. package/src/components/velocity-tracker.ts +0 -86
  171. package/src/consts.ts +0 -91
  172. package/src/store/pager-reducer.ts +0 -125
  173. package/src/store/shared.ts +0 -12
  174. package/tsconfig.tsbuildinfo +0 -1
  175. /package/dist/components/{corner-decal.d.ts → keypad-legacy/corner-decal.d.ts} +0 -0
  176. /package/dist/components/{corner-decal.js.flow → keypad-legacy/corner-decal.js.flow} +0 -0
  177. /package/dist/components/{empty-keypad-button.d.ts → keypad-legacy/empty-keypad-button.d.ts} +0 -0
  178. /package/dist/components/{empty-keypad-button.js.flow → keypad-legacy/empty-keypad-button.js.flow} +0 -0
  179. /package/dist/components/{many-keypad-button.d.ts → keypad-legacy/many-keypad-button.d.ts} +0 -0
  180. /package/dist/components/{many-keypad-button.js.flow → keypad-legacy/many-keypad-button.js.flow} +0 -0
  181. /package/dist/components/{math-icon.d.ts → keypad-legacy/math-icon.d.ts} +0 -0
  182. /package/dist/components/{math-icon.js.flow → keypad-legacy/math-icon.js.flow} +0 -0
  183. /package/dist/components/{navigation-pad.d.ts → keypad-legacy/navigation-pad.d.ts} +0 -0
  184. /package/dist/components/{navigation-pad.js.flow → keypad-legacy/navigation-pad.js.flow} +0 -0
  185. /package/dist/{store → components/keypad-legacy/store}/echo-reducer.d.ts +0 -0
  186. /package/dist/{store → components/keypad-legacy/store}/echo-reducer.js.flow +0 -0
  187. /package/dist/{store → components/keypad-legacy/store}/input-reducer.d.ts +0 -0
  188. /package/dist/{store → components/keypad-legacy/store}/input-reducer.js.flow +0 -0
  189. /package/dist/{store → components/keypad-legacy/store}/keypad-reducer.d.ts +0 -0
  190. /package/dist/{store → components/keypad-legacy/store}/keypad-reducer.js.flow +0 -0
  191. /package/dist/{store → components/keypad-legacy/store}/layout-reducer.d.ts +0 -0
  192. /package/dist/{store → components/keypad-legacy/store}/layout-reducer.js.flow +0 -0
  193. /package/dist/components/{svg-icon.d.ts → keypad-legacy/svg-icon.d.ts} +0 -0
  194. /package/dist/components/{svg-icon.js.flow → keypad-legacy/svg-icon.js.flow} +0 -0
  195. /package/dist/components/{text-icon.d.ts → keypad-legacy/text-icon.d.ts} +0 -0
  196. /package/dist/components/{text-icon.js.flow → keypad-legacy/text-icon.js.flow} +0 -0
  197. /package/dist/components/{z-indexes.d.ts → keypad-legacy/z-indexes.d.ts} +0 -0
  198. /package/dist/components/{z-indexes.js.flow → keypad-legacy/z-indexes.js.flow} +0 -0
  199. /package/src/components/{__tests__ → keypad-legacy/__tests__}/gesture-state-machine.test.ts +0 -0
  200. /package/src/components/{__tests__ → keypad-legacy/__tests__}/node-manager.test.ts +0 -0
  201. /package/src/components/{iconography → keypad-legacy/iconography}/arrow.js +0 -0
  202. /package/src/components/{iconography → keypad-legacy/iconography}/backspace.js +0 -0
  203. /package/src/components/{iconography → keypad-legacy/iconography}/cdot.js +0 -0
  204. /package/src/components/{iconography → keypad-legacy/iconography}/cos.js +0 -0
  205. /package/src/components/{iconography → keypad-legacy/iconography}/cube-root.js +0 -0
  206. /package/src/components/{iconography → keypad-legacy/iconography}/dismiss.js +0 -0
  207. /package/src/components/{iconography → keypad-legacy/iconography}/divide.js +0 -0
  208. /package/src/components/{iconography → keypad-legacy/iconography}/down.js +0 -0
  209. /package/src/components/{iconography → keypad-legacy/iconography}/equal.js +0 -0
  210. /package/src/components/{iconography → keypad-legacy/iconography}/exp-2.js +0 -0
  211. /package/src/components/{iconography → keypad-legacy/iconography}/exp-3.js +0 -0
  212. /package/src/components/{iconography → keypad-legacy/iconography}/exp.js +0 -0
  213. /package/src/components/{iconography → keypad-legacy/iconography}/frac.js +0 -0
  214. /package/src/components/{iconography → keypad-legacy/iconography}/geq.js +0 -0
  215. /package/src/components/{iconography → keypad-legacy/iconography}/gt.js +0 -0
  216. /package/src/components/{iconography → keypad-legacy/iconography}/index.js +0 -0
  217. /package/src/components/{iconography → keypad-legacy/iconography}/jump-into-numerator.js +0 -0
  218. /package/src/components/{iconography → keypad-legacy/iconography}/jump-out-base.js +0 -0
  219. /package/src/components/{iconography → keypad-legacy/iconography}/jump-out-denominator.js +0 -0
  220. /package/src/components/{iconography → keypad-legacy/iconography}/jump-out-exponent.js +0 -0
  221. /package/src/components/{iconography → keypad-legacy/iconography}/jump-out-numerator.js +0 -0
  222. /package/src/components/{iconography → keypad-legacy/iconography}/jump-out-parentheses.js +0 -0
  223. /package/src/components/{iconography → keypad-legacy/iconography}/left-paren.js +0 -0
  224. /package/src/components/{iconography → keypad-legacy/iconography}/left.js +0 -0
  225. /package/src/components/{iconography → keypad-legacy/iconography}/leq.js +0 -0
  226. /package/src/components/{iconography → keypad-legacy/iconography}/ln.js +0 -0
  227. /package/src/components/{iconography → keypad-legacy/iconography}/log-n.js +0 -0
  228. /package/src/components/{iconography → keypad-legacy/iconography}/log.js +0 -0
  229. /package/src/components/{iconography → keypad-legacy/iconography}/lt.js +0 -0
  230. /package/src/components/{iconography → keypad-legacy/iconography}/minus.js +0 -0
  231. /package/src/components/{iconography → keypad-legacy/iconography}/neq.js +0 -0
  232. /package/src/components/{iconography → keypad-legacy/iconography}/parens.js +0 -0
  233. /package/src/components/{iconography → keypad-legacy/iconography}/percent.js +0 -0
  234. /package/src/components/{iconography → keypad-legacy/iconography}/period.js +0 -0
  235. /package/src/components/{iconography → keypad-legacy/iconography}/plus.js +0 -0
  236. /package/src/components/{iconography → keypad-legacy/iconography}/radical.js +0 -0
  237. /package/src/components/{iconography → keypad-legacy/iconography}/right-paren.js +0 -0
  238. /package/src/components/{iconography → keypad-legacy/iconography}/right.js +0 -0
  239. /package/src/components/{iconography → keypad-legacy/iconography}/sin.js +0 -0
  240. /package/src/components/{iconography → keypad-legacy/iconography}/sqrt.js +0 -0
  241. /package/src/components/{iconography → keypad-legacy/iconography}/tan.js +0 -0
  242. /package/src/components/{iconography → keypad-legacy/iconography}/times.js +0 -0
  243. /package/src/components/{iconography → keypad-legacy/iconography}/up.js +0 -0
  244. /package/src/components/{svg-icon.tsx → keypad-legacy/svg-icon.tsx} +0 -0
  245. /package/src/components/{z-indexes.ts → keypad-legacy/z-indexes.ts} +0 -0
  246. /package/{tsconfig.json → tsconfig-build.json} +0 -0
@@ -7,14 +7,14 @@ import * as React from "react";
7
7
  import ReactDOM from "react-dom";
8
8
  import {connect} from "react-redux";
9
9
 
10
- import {View} from "../fake-react-native-web/index";
11
- import {removeEcho} from "../store/actions";
10
+ import {View} from "../../fake-react-native-web/index";
12
11
 
13
12
  import EchoManager from "./echo-manager";
14
13
  import PopoverManager from "./popover-manager";
14
+ import {removeEcho} from "./store/actions";
15
15
 
16
- import type {State} from "../store/types";
17
- import type {Popover, Echo} from "../types";
16
+ import type {Bound, Popover, Echo} from "../../types";
17
+ import type {State} from "./store/types";
18
18
  import type {StyleType} from "@khanacademy/wonder-blocks-core";
19
19
 
20
20
  interface ReduxProps {
@@ -33,7 +33,7 @@ interface Props extends ReduxProps {
33
33
  class Keypad extends React.Component<Props> {
34
34
  _isMounted: boolean | undefined;
35
35
  _resizeTimeout: number | null | undefined;
36
- _container: DOMRect | null | undefined;
36
+ _container: Bound | null | undefined;
37
37
 
38
38
  componentDidMount() {
39
39
  this._isMounted = true;
@@ -5,9 +5,9 @@
5
5
 
6
6
  import * as React from "react";
7
7
 
8
- import {KeyTypes} from "../consts";
9
- import KeyConfigs from "../data/key-configs";
10
- import Keys from "../data/keys";
8
+ import KeyConfigs from "../../data/key-configs";
9
+ import {KeyType} from "../../enums";
10
+ import {KeyConfig} from "../../types";
11
11
 
12
12
  import EmptyKeypadButton from "./empty-keypad-button";
13
13
  import TouchableKeypadButton from "./touchable-keypad-button";
@@ -33,9 +33,9 @@ class ManyKeypadButton extends React.Component<Props> {
33
33
  const keyConfig = KeyConfigs[keys[0]];
34
34
  return <TouchableKeypadButton keyConfig={keyConfig} {...rest} />;
35
35
  } else {
36
- const keyConfig = {
37
- id: Keys.MANY,
38
- type: KeyTypes.MANY,
36
+ const keyConfig: KeyConfig = {
37
+ id: "MANY",
38
+ type: KeyType.MANY,
39
39
  childKeyIds: keys,
40
40
  };
41
41
  return <TouchableKeypadButton keyConfig={keyConfig} {...rest} />;
@@ -7,9 +7,9 @@ import katex from "katex";
7
7
  import * as React from "react";
8
8
  import ReactDOM from "react-dom";
9
9
 
10
- import {View} from "../fake-react-native-web/index";
10
+ import {View} from "../../fake-react-native-web/index";
11
+ import {iconSizeHeightPx, iconSizeWidthPx} from "../common-style";
11
12
 
12
- import {iconSizeHeightPx, iconSizeWidthPx} from "./common-style";
13
13
  import Styles from "./styles";
14
14
 
15
15
  import type {StyleType} from "@khanacademy/wonder-blocks-core";
@@ -6,20 +6,19 @@
6
6
  import {StyleSheet} from "aphrodite";
7
7
  import * as React from "react";
8
8
 
9
- import {IconTypes} from "../consts";
10
- import {View} from "../fake-react-native-web/index";
9
+ import {IconType} from "../../enums";
10
+ import {View} from "../../fake-react-native-web/index";
11
+ import {IconConfig} from "../../types";
12
+ import {iconSizeHeightPx, iconSizeWidthPx} from "../common-style";
11
13
 
12
- import {iconSizeHeightPx, iconSizeWidthPx} from "./common-style";
13
14
  import Icon from "./icon";
14
15
  import Styles from "./styles";
15
16
 
16
- import type {Icon as IconType} from "../types";
17
-
18
17
  const {row, column, centered, fullWidth} = Styles;
19
18
 
20
19
  type Props = {
21
20
  focused: boolean;
22
- icons: ReadonlyArray<IconType>;
21
+ icons: ReadonlyArray<IconConfig>;
23
22
  };
24
23
 
25
24
  class MultiSymbolGrid extends React.Component<Props> {
@@ -32,7 +31,7 @@ class MultiSymbolGrid extends React.Component<Props> {
32
31
  // Supporting other types of icons is possible but would require
33
32
  // some styles coercion and doesn't seem worthwhile right now.
34
33
  icons.forEach((icon) => {
35
- if (icon.type !== IconTypes.MATH) {
34
+ if (icon.type !== IconType.MATH) {
36
35
  throw new Error(
37
36
  `Received invalid icon: type=${icon.type}, ` +
38
37
  `data=${icon.data}`,
@@ -5,9 +5,9 @@
5
5
  import {StyleSheet} from "aphrodite";
6
6
  import * as React from "react";
7
7
 
8
- import {BorderStyles} from "../consts";
9
- import {View} from "../fake-react-native-web/index";
10
- import {KeyConfig} from "../types";
8
+ import {BorderStyles} from "../../enums";
9
+ import {View} from "../../fake-react-native-web/index";
10
+ import {KeyConfig} from "../../types";
11
11
 
12
12
  import TouchableKeypadButton from "./touchable-keypad-button";
13
13
  import * as zIndexes from "./z-indexes";
@@ -27,7 +27,6 @@ class MultiSymbolPopover extends React.Component<Prop> {
27
27
  {keys.map((key) => {
28
28
  return (
29
29
  <TouchableKeypadButton
30
- key={key.id}
31
30
  keyConfig={key}
32
31
  borders={BorderStyles.NONE}
33
32
  />
@@ -6,16 +6,16 @@
6
6
  import {StyleSheet} from "aphrodite";
7
7
  import * as React from "react";
8
8
 
9
- import {BorderStyles} from "../consts";
10
- import KeyConfigs from "../data/key-configs";
11
- import {View} from "../fake-react-native-web/index";
12
-
9
+ import KeyConfigs from "../../data/key-configs";
10
+ import {BorderStyles} from "../../enums";
11
+ import {View} from "../../fake-react-native-web/index";
13
12
  import {
14
13
  navigationPadWidthPx,
15
14
  controlGrey,
16
15
  valueGrey,
17
16
  offBlack16,
18
- } from "./common-style";
17
+ } from "../common-style";
18
+
19
19
  import Styles from "./styles";
20
20
  import TouchableKeypadButton from "./touchable-keypad-button";
21
21
 
@@ -1,4 +1,4 @@
1
- import type {Border, LayoutProps} from "../types";
1
+ import {LayoutProps, Bound} from "../../types";
2
2
  /**
3
3
  * A manager for our node-to-ID system. In particular, this class is
4
4
  * responsible for maintaing a mapping between DOM nodes and node IDs, and
@@ -9,18 +9,13 @@ import type {Border, LayoutProps} from "../types";
9
9
 
10
10
  class NodeManager {
11
11
  _nodesById: Record<string, HTMLElement>;
12
- _bordersById: Record<string, Border>;
13
12
  _orderedIds: ReadonlyArray<string>;
14
- _cachedBoundingBoxesById: Record<string, DOMRect>;
13
+ _cachedBoundingBoxesById: Record<string, Bound>;
15
14
 
16
15
  constructor() {
17
16
  // A mapping from IDs to DOM nodes.
18
17
  this._nodesById = {};
19
18
 
20
- // A mapping from IDs to the borders around the DOM nodes, which can be
21
- // useful for layout purposes.
22
- this._bordersById = {};
23
-
24
19
  // An ordered list of IDs, where DOM nodes that are "higher" on the
25
20
  // page come earlier in the list. Note that an ID may be present in
26
21
  // this ordered list but not be registered to a DOM node (i.e., if it
@@ -53,10 +48,8 @@ class NodeManager {
53
48
  id: string,
54
49
  domNode: HTMLElement,
55
50
  childIds: ReadonlyArray<string>,
56
- borders: Border,
57
51
  ) {
58
52
  this._nodesById[id] = domNode;
59
- this._bordersById[id] = borders;
60
53
 
61
54
  // Make sure that any children appear first.
62
55
  // TODO(charlie): This is a very simplistic system that wouldn't
@@ -133,7 +126,6 @@ class NodeManager {
133
126
 
134
127
  return {
135
128
  initialBounds: this._cachedBoundingBoxesById[id],
136
- borders: this._bordersById[id],
137
129
  };
138
130
  }
139
131
  }
@@ -6,11 +6,11 @@
6
6
  import * as React from "react";
7
7
  import {CSSTransition} from "react-transition-group";
8
8
 
9
- import KeyConfigs from "../data/key-configs";
9
+ import KeyConfigs from "../../data/key-configs";
10
10
 
11
11
  import MultiSymbolPopover from "./multi-symbol-popover";
12
12
 
13
- import type {Popover, KeyConfig} from "../types";
13
+ import type {Popover, KeyConfig} from "../../types";
14
14
 
15
15
  // NOTE(charlie): These must be kept in sync with the transition durations and
16
16
  // classnames specified in popover.less.
@@ -1,4 +1,4 @@
1
- import type {ActiveNodesObj} from "../types";
1
+ import type {ActiveNodesObj} from "../../types";
2
2
 
3
3
  /**
4
4
  * A state machine for the popover state. In particular, this class manages the
@@ -2,18 +2,17 @@ import * as React from "react";
2
2
  import ReactDOM from "react-dom";
3
3
  import {Provider} from "react-redux";
4
4
 
5
+ import KeypadContainer from "./keypad-container";
5
6
  import {
6
7
  activateKeypad,
7
8
  dismissKeypad,
8
9
  configureKeypad,
9
10
  setCursor,
10
11
  setKeyHandler,
11
- } from "../store/actions";
12
- import {createStore} from "../store/index";
13
-
14
- import KeypadContainer from "./keypad-container";
12
+ } from "./store/actions";
13
+ import {createStore} from "./store/index";
15
14
 
16
- import type {Cursor, KeypadConfiguration, KeyHandler} from "../types";
15
+ import type {Cursor, KeypadConfiguration, KeyHandler} from "../../types";
17
16
  import type {StyleType} from "@khanacademy/wonder-blocks-core";
18
17
 
19
18
  type Props = {
@@ -1,11 +1,12 @@
1
- import type {Key} from "../data/keys";
1
+ import Keys from "../../../data/keys";
2
+
2
3
  import type {
4
+ Bound,
3
5
  KeypadConfiguration,
4
6
  KeyHandler,
5
7
  Cursor,
6
8
  ActiveNodesObj,
7
- Border,
8
- } from "../types";
9
+ } from "../../../types";
9
10
 
10
11
  // naming convention: verb + noun
11
12
  // the noun should be one of the other properties in the object that's
@@ -143,22 +144,19 @@ export const setActiveNodes = (
143
144
 
144
145
  type PressKeyAction = {
145
146
  type: "PressKey";
146
- key: Key;
147
- borders: Border;
148
- initialBounds: DOMRect;
147
+ key: Keys;
148
+ initialBounds: Bound;
149
149
  inPopover: boolean;
150
150
  };
151
151
 
152
152
  export const pressKey = (
153
- key: Key,
154
- borders: Border,
155
- initialBounds: DOMRect,
153
+ key: Keys,
154
+ initialBounds: Bound,
156
155
  inPopover: any,
157
156
  ): PressKeyAction => {
158
157
  return {
159
158
  type: "PressKey",
160
159
  key,
161
- borders,
162
160
  initialBounds,
163
161
  inPopover,
164
162
  };
@@ -1,5 +1,5 @@
1
- import {EchoAnimationTypes, KeyTypes} from "../consts";
2
- import KeyConfigs from "../data/key-configs";
1
+ import KeyConfigs from "../../../data/key-configs";
2
+ import {EchoAnimationType, KeyType} from "../../../enums";
3
3
 
4
4
  import type {Action} from "./actions";
5
5
  import type {EchoState} from "./types";
@@ -23,8 +23,8 @@ const echoReducer = function (
23
23
  // Add in the echo animation if the user performs a math
24
24
  // operation.
25
25
  if (
26
- keyConfig.type === KeyTypes.VALUE ||
27
- keyConfig.type === KeyTypes.OPERATOR
26
+ keyConfig.type === KeyType.VALUE ||
27
+ keyConfig.type === KeyType.OPERATOR
28
28
  ) {
29
29
  return {
30
30
  ...state,
@@ -33,9 +33,8 @@ const echoReducer = function (
33
33
  {
34
34
  animationId: "" + _lastAnimationId++,
35
35
  animationType: action.inPopover
36
- ? EchoAnimationTypes.LONG_FADE_ONLY
37
- : EchoAnimationTypes.FADE_ONLY,
38
- borders: action.borders,
36
+ ? EchoAnimationType.LONG_FADE_ONLY
37
+ : EchoAnimationType.FADE_ONLY,
39
38
  id: keyConfig.id,
40
39
  initialBounds: action.initialBounds,
41
40
  },
@@ -1,18 +1,16 @@
1
1
  import * as Redux from "redux";
2
2
 
3
- import GestureManager from "../components/gesture-manager";
4
- import Keys from "../data/keys";
3
+ import Keys from "../../../data/keys";
4
+ import GestureManager from "../gesture-manager";
5
5
 
6
6
  import {onSwipeChange, onSwipeEnd, setActiveNodes, pressKey} from "./actions";
7
7
  import echoReducer from "./echo-reducer";
8
8
  import inputReducer from "./input-reducer";
9
9
  import keypadReducer from "./keypad-reducer";
10
10
  import layoutReducer from "./layout-reducer";
11
- import pagerReducer from "./pager-reducer";
12
11
  import {defaultKeypadType, keypadForType} from "./shared";
13
12
 
14
- import type {Key} from "../data/keys";
15
- import type {LayoutProps, ActiveNodesObj} from "../types";
13
+ import type {LayoutProps, ActiveNodesObj} from "../../../types";
16
14
  import type {Action} from "./actions";
17
15
  import type {GestureState} from "./types";
18
16
 
@@ -35,17 +33,12 @@ export const createStore = () => {
35
33
  store.dispatch(setActiveNodes(activeNodes));
36
34
  },
37
35
  onClick: (
38
- key: Key,
36
+ key: Keys,
39
37
  layoutProps: LayoutProps,
40
38
  inPopover: boolean,
41
39
  ) => {
42
40
  store.dispatch(
43
- pressKey(
44
- key,
45
- layoutProps.borders,
46
- layoutProps.initialBounds,
47
- inPopover,
48
- ),
41
+ pressKey(key, layoutProps.initialBounds, inPopover),
49
42
  );
50
43
  },
51
44
  },
@@ -108,7 +101,6 @@ export const createStore = () => {
108
101
  const reducer = Redux.combineReducers({
109
102
  input: inputReducer,
110
103
  keypad: keypadReducer,
111
- pager: pagerReducer,
112
104
  gestures: gestureReducer,
113
105
  echoes: echoReducer,
114
106
  layout: layoutReducer,
@@ -1,8 +1,8 @@
1
- import * as CursorContexts from "../components/input/cursor-contexts";
2
- import {KeyTypes} from "../consts";
3
- import KeyConfigs from "../data/key-configs";
1
+ import KeyConfigs from "../../../data/key-configs";
2
+ import {KeyType} from "../../../enums";
3
+ import {CursorContext} from "../../input/cursor-contexts";
4
4
 
5
- import type {Cursor, KeyHandler} from "../types";
5
+ import type {Cursor, KeyHandler} from "../../../types";
6
6
  import type {Action} from "./actions";
7
7
  import type {InputState} from "./types";
8
8
 
@@ -12,7 +12,7 @@ const initialInputState: {
12
12
  } = {
13
13
  keyHandler: null,
14
14
  cursor: {
15
- context: CursorContexts.NONE,
15
+ context: CursorContext.NONE,
16
16
  },
17
17
  };
18
18
 
@@ -29,7 +29,7 @@ const inputReducer = function (
29
29
 
30
30
  case "PressKey":
31
31
  const keyConfig = KeyConfigs[action.key];
32
- if (keyConfig.type !== KeyTypes.KEYPAD_NAVIGATION) {
32
+ if (keyConfig.type !== KeyType.KEYPAD_NAVIGATION) {
33
33
  // This is probably an anti-pattern but it works for the
34
34
  // case where we don't actually control the state but we
35
35
  // still want to communicate with the other object
@@ -1,5 +1,5 @@
1
- import KeyConfigs from "../data/key-configs";
2
- import Keys from "../data/keys";
1
+ import KeyConfigs from "../../../data/key-configs";
2
+ import Keys from "../../../data/keys";
3
3
 
4
4
  import {defaultKeypadType} from "./shared";
5
5
 
@@ -1,6 +1,6 @@
1
- import {tabletCutoffPx} from "../components/common-style";
2
- import {computeLayoutParameters} from "../components/compute-layout-parameters";
3
- import {DeviceOrientations, DeviceTypes, LayoutModes} from "../consts";
1
+ import {DeviceOrientation, DeviceType, LayoutMode} from "../../../enums";
2
+ import {tabletCutoffPx} from "../../common-style";
3
+ import {computeLayoutParameters} from "../compute-layout-parameters";
4
4
 
5
5
  import {defaultKeypadType, keypadForType} from "./shared";
6
6
 
@@ -22,7 +22,7 @@ const initialLayoutState = {
22
22
  pageWidthPx: 0,
23
23
  pageHeightPx: 0,
24
24
  },
25
- layoutMode: LayoutModes.FULLSCREEN,
25
+ layoutMode: LayoutMode.FULLSCREEN,
26
26
  paginationEnabled: false,
27
27
  navigationPadEnabled: false,
28
28
  } as const;
@@ -48,19 +48,19 @@ const layoutParametersForDimensions = (
48
48
  // Determine the device type and orientation.
49
49
  const deviceOrientation =
50
50
  pageWidthPx > pageHeightPx
51
- ? DeviceOrientations.LANDSCAPE
52
- : DeviceOrientations.PORTRAIT;
51
+ ? DeviceOrientation.LANDSCAPE
52
+ : DeviceOrientation.PORTRAIT;
53
53
  const deviceType =
54
54
  Math.min(pageWidthPx, pageHeightPx) > tabletCutoffPx
55
- ? DeviceTypes.TABLET
56
- : DeviceTypes.PHONE;
55
+ ? DeviceType.TABLET
56
+ : DeviceType.PHONE;
57
57
 
58
58
  // Using that information, make some decisions (or assumptions)
59
59
  // about the resulting layout.
60
- const navigationPadEnabled = deviceType === DeviceTypes.TABLET;
60
+ const navigationPadEnabled = deviceType === DeviceType.TABLET;
61
61
  const paginationEnabled =
62
- deviceType === DeviceTypes.PHONE &&
63
- deviceOrientation === DeviceOrientations.PORTRAIT;
62
+ deviceType === DeviceType.PHONE &&
63
+ deviceOrientation === DeviceOrientation.PORTRAIT;
64
64
 
65
65
  const deviceInfo = {deviceOrientation, deviceType} as const;
66
66
  const layoutOptions = {
@@ -0,0 +1,12 @@
1
+ import {KeypadType} from "../../../enums";
2
+ import {expressionKeypadLayout} from "../expression-keypad";
3
+ import {fractionKeypadLayout} from "../fraction-keypad";
4
+
5
+ const defaultKeypadType = KeypadType.EXPRESSION;
6
+
7
+ const keypadForType = {
8
+ [KeypadType.FRACTION]: fractionKeypadLayout,
9
+ [KeypadType.EXPRESSION]: expressionKeypadLayout,
10
+ } as const;
11
+
12
+ export {keypadForType, defaultKeypadType};
@@ -1,10 +1,8 @@
1
- import GestureManager from "../components/gesture-manager";
2
- import VelocityTracker from "../components/velocity-tracker";
3
- import {LayoutModes} from "../consts";
1
+ import Keys from "../../../data/keys";
2
+ import {LayoutMode, KeypadType} from "../../../enums";
3
+ import GestureManager from "../gesture-manager";
4
4
 
5
- import type {KeypadType} from "../consts";
6
- import type {Key} from "../data/keys";
7
- import type {Cursor, KeyHandler, Popover, Echo} from "../types";
5
+ import type {Cursor, KeyHandler, Popover, Echo} from "../../../types";
8
6
 
9
7
  // Interaction between keypad and input
10
8
  export interface InputState {
@@ -30,28 +28,26 @@ export interface KeypadState {
30
28
  active: boolean;
31
29
  }
32
30
 
33
- // Pagination for keypad types with multiple pages
34
- export interface PagerState {
35
- animateToPosition: boolean;
36
- // On keypad types with multiple pages
37
- // which page we are on
38
- currentPage: number;
39
- dx: number;
40
- numPages: number;
41
- pageWidthPx: number;
42
- velocityTracker: VelocityTracker;
43
- }
44
-
31
+ // Handles things like:
32
+ // long-press: to open multikey popover
33
+ // swipe: for pagination
34
+ // press: regular pushing of a button
45
35
  export interface GestureState {
36
+ // The current multikey popover?
46
37
  popover: Popover | null;
47
- focus: Key | null;
38
+ // ?? Maybe which key is currently focused?
39
+ focus: Keys | null;
40
+ // Complex object that interprets touches as actions
48
41
  gestureManager: GestureManager;
49
42
  }
50
43
 
44
+ // Manages the animations for pressing keys
51
45
  export interface EchoState {
46
+ // Which echoes are in the process of animating
52
47
  echoes: ReadonlyArray<Echo>;
53
48
  }
54
49
 
50
+ // Layout (size, where to put buttons, etc)
55
51
  export interface LayoutState {
56
52
  gridDimensions: {
57
53
  numRows: number;
@@ -67,7 +63,7 @@ export interface LayoutState {
67
63
  pageWidthPx: number;
68
64
  pageHeightPx: number;
69
65
  };
70
- layoutMode: keyof typeof LayoutModes;
66
+ layoutMode: LayoutMode;
71
67
  paginationEnabled: boolean;
72
68
  navigationPadEnabled: boolean;
73
69
  }
@@ -75,7 +71,6 @@ export interface LayoutState {
75
71
  export interface State {
76
72
  input: InputState;
77
73
  keypad: KeypadState;
78
- pager: PagerState;
79
74
  gestures: GestureState;
80
75
  echoes: EchoState;
81
76
  layout: LayoutState;
@@ -4,7 +4,7 @@
4
4
 
5
5
  import {StyleSheet} from "aphrodite";
6
6
 
7
- import {compactKeypadBorderRadiusPx} from "./common-style";
7
+ import {compactKeypadBorderRadiusPx} from "../common-style";
8
8
 
9
9
  export default StyleSheet.create({
10
10
  row: {
@@ -5,9 +5,9 @@
5
5
  import {StyleSheet} from "aphrodite";
6
6
  import * as React from "react";
7
7
 
8
- import {View, Text} from "../fake-react-native-web/index";
8
+ import {View, Text} from "../../fake-react-native-web/index";
9
+ import {iconSizeHeightPx, iconSizeWidthPx} from "../common-style";
9
10
 
10
- import {iconSizeHeightPx, iconSizeWidthPx} from "./common-style";
11
11
  import Styles from "./styles";
12
12
 
13
13
  import type {StyleType} from "@khanacademy/wonder-blocks-core";