@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.
- package/CHANGELOG.md +25 -1
- package/dist/components/input/cursor-contexts.d.ts +10 -9
- package/dist/components/input/cursor-contexts.js.flow +11 -16
- package/dist/components/input/math-input.d.ts +1 -1
- package/dist/components/input/math-input.js.flow +1 -1
- package/dist/components/input/math-wrapper.d.ts +3 -2
- package/dist/components/input/math-wrapper.js.flow +3 -16
- package/dist/components/keypad/button.d.ts +1 -2
- package/dist/components/keypad/button.js.flow +1 -1
- package/dist/components/keypad/{pre-algebra-page.d.ts → geometry-page/index.d.ts} +1 -1
- package/dist/components/keypad/{pre-algebra-page.js.flow → geometry-page/index.js.flow} +1 -1
- package/dist/components/keypad/index.d.ts +5 -4
- package/dist/components/keypad/index.js.flow +9 -4
- package/dist/components/keypad/keypad-page-items.d.ts +8 -2
- package/dist/components/keypad/keypad-page-items.js.flow +8 -2
- package/dist/components/keypad/{numeric-input-page.d.ts → numbers-page/index.d.ts} +3 -2
- package/dist/components/keypad/numbers-page/index.js.flow +17 -0
- package/dist/components/keypad/numbers-page/types.d.ts +4 -0
- package/dist/components/keypad/numbers-page/types.js.flow +10 -0
- package/dist/components/keypad/operators-page/advanced-relations-buttons.d.ts +7 -0
- package/dist/components/keypad/{numeric-input-page.js.flow → operators-page/advanced-relations-buttons.js.flow} +3 -4
- package/dist/components/keypad/operators-page/basic-relations-buttons.d.ts +7 -0
- package/dist/components/keypad/{trigonometry-page.js.flow → operators-page/basic-relations-buttons.js.flow} +3 -6
- package/dist/components/keypad/operators-page/index.d.ts +9 -0
- package/dist/components/keypad/operators-page/index.js.flow +17 -0
- package/dist/components/keypad/operators-page/logarithms-buttons.d.ts +7 -0
- package/dist/components/keypad/operators-page/logarithms-buttons.js.flow +12 -0
- package/dist/components/keypad/operators-page/pre-algebra-buttons.d.ts +7 -0
- package/dist/components/keypad/operators-page/pre-algebra-buttons.js.flow +12 -0
- package/dist/components/keypad/operators-page/types.d.ts +6 -0
- package/dist/components/keypad/operators-page/types.js.flow +12 -0
- package/dist/components/{compute-layout-parameters.d.ts → keypad-legacy/compute-layout-parameters.d.ts} +2 -1
- package/dist/components/keypad-legacy/compute-layout-parameters.js.flow +30 -0
- package/dist/components/{echo-manager.d.ts → keypad-legacy/echo-manager.d.ts} +2 -11
- package/dist/components/{echo-manager.js.flow → keypad-legacy/echo-manager.js.flow} +2 -11
- package/dist/components/{expression-keypad.d.ts → keypad-legacy/expression-keypad.d.ts} +3 -4
- package/dist/components/{expression-keypad.js.flow → keypad-legacy/expression-keypad.js.flow} +3 -4
- package/dist/components/{fraction-keypad.d.ts → keypad-legacy/fraction-keypad.d.ts} +2 -2
- package/dist/components/{fraction-keypad.js.flow → keypad-legacy/fraction-keypad.js.flow} +2 -2
- package/dist/components/{gesture-manager.d.ts → keypad-legacy/gesture-manager.d.ts} +1 -1
- package/dist/components/{gesture-manager.js.flow → keypad-legacy/gesture-manager.js.flow} +1 -1
- package/dist/components/{gesture-state-machine.d.ts → keypad-legacy/gesture-state-machine.d.ts} +7 -7
- package/dist/components/{gesture-state-machine.js.flow → keypad-legacy/gesture-state-machine.js.flow} +8 -8
- package/dist/components/{icon.d.ts → keypad-legacy/icon.d.ts} +2 -2
- package/dist/components/{icon.js.flow → keypad-legacy/icon.js.flow} +2 -2
- package/dist/components/{keypad-button.d.ts → keypad-legacy/keypad-button.d.ts} +10 -10
- package/dist/components/{keypad-button.js.flow → keypad-legacy/keypad-button.js.flow} +12 -11
- package/dist/components/{keypad-container.d.ts → keypad-legacy/keypad-container.d.ts} +3 -4
- package/dist/components/{keypad-container.js.flow → keypad-legacy/keypad-container.js.flow} +4 -5
- package/dist/components/{keypad.d.ts → keypad-legacy/keypad.d.ts} +3 -3
- package/dist/components/{keypad.js.flow → keypad-legacy/keypad.js.flow} +3 -3
- package/dist/components/{multi-symbol-grid.d.ts → keypad-legacy/multi-symbol-grid.d.ts} +2 -2
- package/dist/components/{multi-symbol-grid.js.flow → keypad-legacy/multi-symbol-grid.js.flow} +2 -2
- package/dist/components/{multi-symbol-popover.d.ts → keypad-legacy/multi-symbol-popover.d.ts} +1 -1
- package/dist/components/{multi-symbol-popover.js.flow → keypad-legacy/multi-symbol-popover.js.flow} +1 -1
- package/dist/components/{node-manager.d.ts → keypad-legacy/node-manager.d.ts} +3 -4
- package/dist/components/{node-manager.js.flow → keypad-legacy/node-manager.js.flow} +3 -5
- package/dist/components/{popover-manager.d.ts → keypad-legacy/popover-manager.d.ts} +1 -1
- package/dist/components/{popover-manager.js.flow → keypad-legacy/popover-manager.js.flow} +1 -1
- package/dist/components/{popover-state-machine.d.ts → keypad-legacy/popover-state-machine.d.ts} +1 -1
- package/dist/components/{popover-state-machine.js.flow → keypad-legacy/popover-state-machine.js.flow} +1 -1
- package/dist/components/{provided-keypad.d.ts → keypad-legacy/provided-keypad.d.ts} +1 -1
- package/dist/components/{provided-keypad.js.flow → keypad-legacy/provided-keypad.js.flow} +1 -1
- package/dist/{store → components/keypad-legacy/store}/actions.d.ts +5 -6
- package/dist/{store → components/keypad-legacy/store}/actions.js.flow +7 -9
- package/dist/{store → components/keypad-legacy/store}/index.d.ts +0 -1
- package/dist/{store → components/keypad-legacy/store}/index.js.flow +0 -1
- package/dist/components/keypad-legacy/store/shared.d.ts +7 -0
- package/dist/components/keypad-legacy/store/shared.js.flow +14 -0
- package/dist/{store → components/keypad-legacy/store}/types.d.ts +6 -17
- package/dist/{store → components/keypad-legacy/store}/types.js.flow +6 -17
- package/dist/components/keypad-legacy/styles.d.ts +5 -0
- package/dist/components/{styles.js.flow → keypad-legacy/styles.js.flow} +1 -3
- package/dist/components/keypad-legacy/touchable-keypad-button.d.ts +37 -0
- package/dist/components/keypad-legacy/touchable-keypad-button.js.flow +64 -0
- package/dist/components/{two-page-keypad.d.ts → keypad-legacy/two-page-keypad.d.ts} +0 -1
- package/dist/components/{two-page-keypad.js.flow → keypad-legacy/two-page-keypad.js.flow} +0 -1
- package/dist/data/key-configs.d.ts +3 -1
- package/dist/data/key-configs.js.flow +3 -1
- package/dist/data/keys.d.ts +49 -52
- package/dist/data/keys.js.flow +48 -99
- package/dist/enums.d.ts +49 -0
- package/dist/enums.js.flow +63 -0
- package/dist/es/index.js +5033 -4370
- package/dist/es/index.js.map +1 -1
- package/dist/fake-react-native-web/view.d.ts +1 -2
- package/dist/fake-react-native-web/view.js.flow +1 -2
- package/dist/index.d.ts +5 -7
- package/dist/index.js +5398 -4714
- package/dist/index.js.flow +5 -7
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +26 -23
- package/dist/types.js.flow +37 -33
- package/package.json +1 -1
- package/src/components/input/__tests__/context-tracking.test.ts +20 -20
- package/src/components/input/cursor-contexts.ts +22 -29
- package/src/components/input/math-input.tsx +1 -1
- package/src/components/input/math-wrapper.ts +75 -67
- package/src/components/keypad/button-assets.tsx +65 -40
- package/src/components/keypad/button.stories.tsx +61 -13
- package/src/components/keypad/button.tsx +1 -1
- package/src/components/keypad/{trigonometry-page.tsx → geometry-page/index.tsx} +3 -4
- package/src/components/keypad/index.tsx +19 -14
- package/src/components/keypad/keypad-page-items.tsx +34 -21
- package/src/components/keypad/keypad-pages.stories.tsx +5 -5
- package/src/components/keypad/keypad.stories.tsx +75 -17
- package/src/components/keypad/{numeric-input-page.tsx → numbers-page/index.tsx} +47 -11
- package/src/components/keypad/numbers-page/types.ts +4 -0
- package/src/components/keypad/operators-page/advanced-relations-buttons.tsx +32 -0
- package/src/components/keypad/operators-page/basic-relations-buttons.tsx +32 -0
- package/src/components/keypad/{pre-algebra-page.tsx → operators-page/index.tsx} +25 -29
- package/src/components/keypad/operators-page/logarithms-buttons.tsx +32 -0
- package/src/components/keypad/operators-page/pre-algebra-buttons.tsx +36 -0
- package/src/components/keypad/operators-page/types.ts +6 -0
- package/src/components/{__tests__ → keypad-legacy/__tests__}/two-page-keypad.test.tsx +0 -2
- package/src/components/{compute-layout-parameters.ts → keypad-legacy/compute-layout-parameters.ts} +7 -8
- package/src/components/{corner-decal.tsx → keypad-legacy/corner-decal.tsx} +2 -3
- package/src/components/{echo-manager.tsx → keypad-legacy/echo-manager.tsx} +12 -25
- package/src/components/{empty-keypad-button.tsx → keypad-legacy/empty-keypad-button.tsx} +2 -2
- package/src/components/{expression-keypad.tsx → keypad-legacy/expression-keypad.tsx} +15 -25
- package/src/components/{fraction-keypad.tsx → keypad-legacy/fraction-keypad.tsx} +15 -16
- package/src/components/{gesture-manager.ts → keypad-legacy/gesture-manager.ts} +2 -2
- package/src/components/{gesture-state-machine.ts → keypad-legacy/gesture-state-machine.ts} +8 -8
- package/src/components/{icon.tsx → keypad-legacy/icon.tsx} +7 -7
- package/src/components/{keypad-button.tsx → keypad-legacy/keypad-button.tsx} +30 -28
- package/src/components/{keypad-container.tsx → keypad-legacy/keypad-container.tsx} +13 -14
- package/src/components/{keypad.tsx → keypad-legacy/keypad.tsx} +5 -5
- package/src/components/{many-keypad-button.tsx → keypad-legacy/many-keypad-button.tsx} +6 -6
- package/src/components/{math-icon.tsx → keypad-legacy/math-icon.tsx} +2 -2
- package/src/components/{multi-symbol-grid.tsx → keypad-legacy/multi-symbol-grid.tsx} +6 -7
- package/src/components/{multi-symbol-popover.tsx → keypad-legacy/multi-symbol-popover.tsx} +3 -4
- package/src/components/{navigation-pad.tsx → keypad-legacy/navigation-pad.tsx} +5 -5
- package/src/components/{node-manager.ts → keypad-legacy/node-manager.ts} +2 -10
- package/src/components/{popover-manager.tsx → keypad-legacy/popover-manager.tsx} +2 -2
- package/src/components/{popover-state-machine.ts → keypad-legacy/popover-state-machine.ts} +1 -1
- package/src/components/{provided-keypad.tsx → keypad-legacy/provided-keypad.tsx} +4 -5
- package/src/{store → components/keypad-legacy/store}/actions.ts +8 -10
- package/src/{store → components/keypad-legacy/store}/echo-reducer.ts +6 -7
- package/src/{store → components/keypad-legacy/store}/index.ts +5 -13
- package/src/{store → components/keypad-legacy/store}/input-reducer.ts +6 -6
- package/src/{store → components/keypad-legacy/store}/keypad-reducer.ts +2 -2
- package/src/{store → components/keypad-legacy/store}/layout-reducer.ts +11 -11
- package/src/components/keypad-legacy/store/shared.ts +12 -0
- package/src/{store → components/keypad-legacy/store}/types.ts +16 -21
- package/src/components/{styles.ts → keypad-legacy/styles.ts} +1 -1
- package/src/components/{text-icon.tsx → keypad-legacy/text-icon.tsx} +2 -2
- package/src/components/{touchable-keypad-button.tsx → keypad-legacy/touchable-keypad-button.tsx} +40 -21
- package/src/components/{two-page-keypad.tsx → keypad-legacy/two-page-keypad.tsx} +5 -6
- package/src/data/key-configs.ts +67 -72
- package/src/data/keys.ts +50 -107
- package/src/enums.ts +74 -0
- package/src/index.ts +5 -9
- package/src/math-input.stories.tsx +9 -9
- package/src/types.ts +33 -26
- package/src/utils.ts +3 -3
- package/tsconfig-build.tsbuildinfo +1 -0
- package/dist/components/compute-layout-parameters.js.flow +0 -49
- package/dist/components/keypad/trigonometry-page.d.ts +0 -8
- package/dist/components/styles.d.ts +0 -6
- package/dist/components/touchable-keypad-button.d.ts +0 -30
- package/dist/components/touchable-keypad-button.js.flow +0 -35
- package/dist/components/velocity-tracker.d.ts +0 -48
- package/dist/components/velocity-tracker.js.flow +0 -54
- package/dist/consts.d.ts +0 -51
- package/dist/consts.js.flow +0 -66
- package/dist/store/pager-reducer.d.ts +0 -4
- package/dist/store/pager-reducer.js.flow +0 -13
- package/dist/store/shared.d.ts +0 -6
- package/dist/store/shared.js.flow +0 -13
- package/src/components/velocity-tracker.ts +0 -86
- package/src/consts.ts +0 -91
- package/src/store/pager-reducer.ts +0 -125
- package/src/store/shared.ts +0 -12
- package/tsconfig.tsbuildinfo +0 -1
- /package/dist/components/{corner-decal.d.ts → keypad-legacy/corner-decal.d.ts} +0 -0
- /package/dist/components/{corner-decal.js.flow → keypad-legacy/corner-decal.js.flow} +0 -0
- /package/dist/components/{empty-keypad-button.d.ts → keypad-legacy/empty-keypad-button.d.ts} +0 -0
- /package/dist/components/{empty-keypad-button.js.flow → keypad-legacy/empty-keypad-button.js.flow} +0 -0
- /package/dist/components/{many-keypad-button.d.ts → keypad-legacy/many-keypad-button.d.ts} +0 -0
- /package/dist/components/{many-keypad-button.js.flow → keypad-legacy/many-keypad-button.js.flow} +0 -0
- /package/dist/components/{math-icon.d.ts → keypad-legacy/math-icon.d.ts} +0 -0
- /package/dist/components/{math-icon.js.flow → keypad-legacy/math-icon.js.flow} +0 -0
- /package/dist/components/{navigation-pad.d.ts → keypad-legacy/navigation-pad.d.ts} +0 -0
- /package/dist/components/{navigation-pad.js.flow → keypad-legacy/navigation-pad.js.flow} +0 -0
- /package/dist/{store → components/keypad-legacy/store}/echo-reducer.d.ts +0 -0
- /package/dist/{store → components/keypad-legacy/store}/echo-reducer.js.flow +0 -0
- /package/dist/{store → components/keypad-legacy/store}/input-reducer.d.ts +0 -0
- /package/dist/{store → components/keypad-legacy/store}/input-reducer.js.flow +0 -0
- /package/dist/{store → components/keypad-legacy/store}/keypad-reducer.d.ts +0 -0
- /package/dist/{store → components/keypad-legacy/store}/keypad-reducer.js.flow +0 -0
- /package/dist/{store → components/keypad-legacy/store}/layout-reducer.d.ts +0 -0
- /package/dist/{store → components/keypad-legacy/store}/layout-reducer.js.flow +0 -0
- /package/dist/components/{svg-icon.d.ts → keypad-legacy/svg-icon.d.ts} +0 -0
- /package/dist/components/{svg-icon.js.flow → keypad-legacy/svg-icon.js.flow} +0 -0
- /package/dist/components/{text-icon.d.ts → keypad-legacy/text-icon.d.ts} +0 -0
- /package/dist/components/{text-icon.js.flow → keypad-legacy/text-icon.js.flow} +0 -0
- /package/dist/components/{z-indexes.d.ts → keypad-legacy/z-indexes.d.ts} +0 -0
- /package/dist/components/{z-indexes.js.flow → keypad-legacy/z-indexes.js.flow} +0 -0
- /package/src/components/{__tests__ → keypad-legacy/__tests__}/gesture-state-machine.test.ts +0 -0
- /package/src/components/{__tests__ → keypad-legacy/__tests__}/node-manager.test.ts +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/arrow.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/backspace.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/cdot.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/cos.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/cube-root.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/dismiss.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/divide.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/down.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/equal.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/exp-2.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/exp-3.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/exp.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/frac.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/geq.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/gt.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/index.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/jump-into-numerator.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/jump-out-base.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/jump-out-denominator.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/jump-out-exponent.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/jump-out-numerator.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/jump-out-parentheses.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/left-paren.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/left.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/leq.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/ln.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/log-n.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/log.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/lt.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/minus.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/neq.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/parens.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/percent.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/period.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/plus.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/radical.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/right-paren.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/right.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/sin.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/sqrt.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/tan.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/times.js +0 -0
- /package/src/components/{iconography → keypad-legacy/iconography}/up.js +0 -0
- /package/src/components/{svg-icon.tsx → keypad-legacy/svg-icon.tsx} +0 -0
- /package/src/components/{z-indexes.ts → keypad-legacy/z-indexes.ts} +0 -0
- /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 "
|
|
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 {
|
|
17
|
-
import type {
|
|
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:
|
|
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
|
|
9
|
-
import
|
|
10
|
-
import
|
|
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:
|
|
38
|
-
type:
|
|
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 "
|
|
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 {
|
|
10
|
-
import {View} from "
|
|
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<
|
|
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 !==
|
|
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 "
|
|
9
|
-
import {View} from "
|
|
10
|
-
import {KeyConfig} from "
|
|
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
|
|
10
|
-
import
|
|
11
|
-
import {View} from "
|
|
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 "
|
|
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
|
|
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,
|
|
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 "
|
|
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 "
|
|
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.
|
|
@@ -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 "
|
|
12
|
-
import {createStore} from "
|
|
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 "
|
|
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
|
|
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
|
-
|
|
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:
|
|
147
|
-
|
|
148
|
-
initialBounds: DOMRect;
|
|
147
|
+
key: Keys;
|
|
148
|
+
initialBounds: Bound;
|
|
149
149
|
inPopover: boolean;
|
|
150
150
|
};
|
|
151
151
|
|
|
152
152
|
export const pressKey = (
|
|
153
|
-
key:
|
|
154
|
-
|
|
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
|
|
2
|
-
import
|
|
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 ===
|
|
27
|
-
keyConfig.type ===
|
|
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
|
-
?
|
|
37
|
-
:
|
|
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
|
|
4
|
-
import
|
|
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 {
|
|
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:
|
|
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
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
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 "
|
|
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:
|
|
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 !==
|
|
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,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
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:
|
|
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
|
-
?
|
|
52
|
-
:
|
|
51
|
+
? DeviceOrientation.LANDSCAPE
|
|
52
|
+
: DeviceOrientation.PORTRAIT;
|
|
53
53
|
const deviceType =
|
|
54
54
|
Math.min(pageWidthPx, pageHeightPx) > tabletCutoffPx
|
|
55
|
-
?
|
|
56
|
-
:
|
|
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 ===
|
|
60
|
+
const navigationPadEnabled = deviceType === DeviceType.TABLET;
|
|
61
61
|
const paginationEnabled =
|
|
62
|
-
deviceType ===
|
|
63
|
-
deviceOrientation ===
|
|
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
|
|
2
|
-
import
|
|
3
|
-
import
|
|
1
|
+
import Keys from "../../../data/keys";
|
|
2
|
+
import {LayoutMode, KeypadType} from "../../../enums";
|
|
3
|
+
import GestureManager from "../gesture-manager";
|
|
4
4
|
|
|
5
|
-
import type {
|
|
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
|
-
//
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
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
|
-
|
|
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:
|
|
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;
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
import {StyleSheet} from "aphrodite";
|
|
6
6
|
import * as React from "react";
|
|
7
7
|
|
|
8
|
-
import {View, Text} from "
|
|
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";
|