@khanacademy/perseus 19.1.6 → 19.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,196 @@
1
- declare const MovablePoint: (graphie: any, movable: any, options: any) => void;
1
+ import type { Movable } from "./movable";
2
+ import type { Constraint, ConstraintCallbacks } from "./types";
3
+ import type { Graphie } from "../util/graphie";
4
+ import type { Coord } from "@khanacademy/perseus";
5
+ type State = {
6
+ add: unknown[];
7
+ added: boolean;
8
+ constraints: Constraint[];
9
+ coord: Coord;
10
+ cursor: "move";
11
+ draw: ((state: State, prevState: State) => void)[];
12
+ hasMoved: boolean;
13
+ id: string;
14
+ modify: unknown[];
15
+ onClick: unknown[];
16
+ onMove: ((coord: Coord, prevCoord: Coord) => void)[];
17
+ onMoveEnd: unknown[];
18
+ onMoveStart: unknown[];
19
+ onRemove?: () => void;
20
+ outOfBounds: boolean;
21
+ pointSize: number;
22
+ remove: (() => void)[];
23
+ shadow: boolean;
24
+ static: boolean;
25
+ tooltip: boolean;
26
+ touchOffset: null | Coord;
27
+ mouseTarget: unknown;
28
+ visibleShape: {
29
+ wrapper: HTMLElement;
30
+ toBack(): void;
31
+ toFront(): void;
32
+ };
33
+ normalStyle: Record<string, any>;
34
+ highlightStyle: Record<string, any>;
35
+ };
36
+ export declare class MovablePoint {
37
+ graphie: Graphie;
38
+ movable: Movable<Record<string, never>>;
39
+ state: State;
40
+ prevState: State;
41
+ _tooltip?: HTMLElement;
42
+ _listenerMap: Record<string, number>;
43
+ constructor(graphie: Graphie, movable: Movable<Record<string, never>>, options: Partial<State>);
44
+ modify(options: any): void;
45
+ _createDefaultState(): {
46
+ coord: readonly [0, 0];
47
+ pointSize: 4;
48
+ static: false;
49
+ cursor: "move";
50
+ normalStyle: null;
51
+ highlightStyle: null;
52
+ shadow: false;
53
+ tooltip: false;
54
+ id: string;
55
+ };
56
+ cloneState(): {
57
+ add: unknown[];
58
+ added: boolean;
59
+ constraints: Constraint[];
60
+ coord: Coord;
61
+ cursor: "move";
62
+ draw: ((state: State, prevState: State) => void)[];
63
+ hasMoved: boolean;
64
+ id: string;
65
+ modify: unknown[];
66
+ onClick: unknown[];
67
+ onMove: ((coord: Coord, prevCoord: Coord) => void)[];
68
+ onMoveEnd: unknown[];
69
+ onMoveStart: unknown[];
70
+ onRemove?: (() => void) | undefined;
71
+ outOfBounds: boolean;
72
+ pointSize: number;
73
+ remove: (() => void)[];
74
+ shadow: boolean;
75
+ static: boolean;
76
+ tooltip: boolean;
77
+ touchOffset: Coord | null;
78
+ mouseTarget: unknown;
79
+ visibleShape: {
80
+ wrapper: HTMLElement;
81
+ toBack(): void;
82
+ toFront(): void;
83
+ };
84
+ normalStyle: Record<string, any>;
85
+ highlightStyle: Record<string, any>;
86
+ isHovering?: boolean | undefined;
87
+ isMouseOver?: boolean | undefined;
88
+ isDragging?: boolean | undefined;
89
+ };
90
+ update(options: Partial<State>): void;
91
+ draw(): void;
92
+ constrain(): boolean;
93
+ /**
94
+ * Fire an onSomething type event to all functions in listeners
95
+ */
96
+ _fireEvent<F extends (...args: any[]) => any>(listeners: F[], ...args: Parameters<F>): void;
97
+ /**
98
+ * Combine the array of constraints functions
99
+ * Returns either an [x, y] coordinate or false
100
+ */
101
+ _applyConstraints(current: Coord, previous: Coord, extraOptions?: ConstraintCallbacks): Coord | false;
102
+ /**
103
+ * Displays a tooltip above the point, replacing any previous contents. If
104
+ * there is no tooltip initialized, adds the tooltip.
105
+ *
106
+ * If the type of contents is string, the contents will be rendered with
107
+ * KaTeX. Otherwise, the content will be assumed to be a DOM node and will
108
+ * be appended inside the tooltip.
109
+ */
110
+ _showTooltip(contents: any): void;
111
+ _hideTooltip(): void;
112
+ coord(): Coord;
113
+ setCoord(coord: Coord): void;
114
+ setCoordConstrained(coord: any): void;
115
+ /**
116
+ * Add a listener to any event: startMove, constraints, onMove, onMoveEnd,
117
+ * etc. If a listener is already bound to the given eventName and id, then
118
+ * it is overwritten by func.
119
+ *
120
+ * eventName: the string name of the event to listen to. one of:
121
+ * "onMoveStart", "onMove", "onMoveEnd", "draw", "remove"
122
+ *
123
+ * id: a string id that can be used to remove this event at a later time
124
+ * note: adding multiple listeners with the same id is undefined behavior
125
+ *
126
+ * func: the function to call when the event happens, which is called
127
+ * with the event's standard parameters [usually (coord, prevCoord) or
128
+ * (state, prevState)]
129
+ */
130
+ listen(eventName: string, id: string, func: () => unknown): void;
131
+ /**
132
+ * Remove a previously added listener, by the id specified in the
133
+ * corresponding listen() call
134
+ *
135
+ * If the given id has not been registered already, this is a no-op
136
+ */
137
+ unlisten(eventName: any, id: any): void;
138
+ grab(coord: Coord): void;
139
+ moveTo(coord: Coord): void;
140
+ remove(): void;
141
+ pointSize(): number;
142
+ static(): boolean;
143
+ cursor(): "move";
144
+ normalStyle(): Record<string, any>;
145
+ highlightStyle(): Record<string, any>;
146
+ shadow(): boolean;
147
+ tooltip(): boolean;
148
+ added(): boolean;
149
+ hasMoved(): boolean;
150
+ visibleShape(): {
151
+ wrapper: HTMLElement;
152
+ toBack(): void;
153
+ toFront(): void;
154
+ };
155
+ outOfBounds(): boolean;
156
+ mouseTarget(): unknown;
157
+ touchOffset(): Coord | null;
158
+ /**
159
+ * Forwarding methods to this.movable:
160
+ */
161
+ isHovering(): boolean | undefined;
162
+ isDragging(): boolean | undefined;
163
+ toBack(): void;
164
+ toFront(): void;
165
+ static add: {
166
+ readonly constrain: () => void;
167
+ };
168
+ static modify: {
169
+ readonly draw: () => void;
170
+ };
171
+ static draw: {
172
+ readonly basic: (state: any, prevState: any) => void;
173
+ readonly highlight: (state: any, prevState: any) => void;
174
+ };
175
+ static remove: {
176
+ readonly basic: () => void;
177
+ };
178
+ static onMoveStart: {
179
+ standard: null;
180
+ };
181
+ static constraints: {
182
+ readonly fixed: () => Constraint;
183
+ readonly snap: (snap?: number | null | undefined) => Constraint;
184
+ readonly bound: (range?: [import("../util/interval").Interval, import("../util/interval").Interval] | undefined, snap?: number | Coord | undefined, optionalPaddingPx?: number | undefined) => Constraint;
185
+ };
186
+ static onMove: {
187
+ standard: null;
188
+ };
189
+ static onMoveEnd: {
190
+ standard: null;
191
+ };
192
+ static onClick: {
193
+ standard: null;
194
+ };
195
+ }
2
196
  export default MovablePoint;
@@ -57,7 +57,7 @@ export declare class Movable<Options extends Record<string, any>> {
57
57
  * Simulates a mouse grab event on the movable object.
58
58
  */
59
59
  grab(coord: Coord): void;
60
- _applyConstraints(current: Coord, previous: Coord, extraOptions?: ConstraintCallbacks): any;
60
+ _applyConstraints(current: Coord, previous: Coord, extraOptions?: ConstraintCallbacks): false | [number, number];
61
61
  toBack(): void;
62
62
  toFront(): void;
63
63
  /**
@@ -1,7 +1,9 @@
1
- import type { Movable } from "./movable";
1
+ import type { Graphie } from "../util/graphie";
2
2
  export type Coord = [number, number];
3
3
  export type Line = [Coord, Coord];
4
- export type Constraint = (this: Movable<any>, current: Coord | boolean, previous: Coord, options: ConstraintCallbacks) => Coord | boolean | undefined;
4
+ export type Constraint = (this: {
5
+ graphie: Graphie;
6
+ }, current: Coord | boolean, previous: Coord, options: ConstraintCallbacks) => Coord | boolean | undefined;
5
7
  export type ConstraintCallbacks = {
6
8
  onSkipRemaining(): void;
7
9
  onOutOfBounds?: () => void;
@@ -1,5 +1,6 @@
1
+ import { MovablePoint } from "./interactive2/movable-point";
1
2
  declare const Interactive2: {
2
- readonly MovablePoint: (graphie: any, movable: any, options: any) => void;
3
+ readonly MovablePoint: typeof MovablePoint;
3
4
  readonly addMovablePoint: (graphie: any, options: any) => any;
4
5
  readonly MovableLine: (graphie: any, movable: any, options: any) => void;
5
6
  readonly addMovableLine: (graphie: any, options: any) => any;
@@ -102,8 +102,7 @@ export declare class ServerItemRenderer extends React.Component<Props, State> im
102
102
  setAssetStatus: (assetKey: string, status: boolean) => void;
103
103
  render(): React.ReactNode;
104
104
  }
105
- declare const ref: React.ForwardRefExoticComponent<Omit<Pick<OwnProps & HOCProps, "item" | "problemNum" | "reviewMode" | "keypadElement" | "hintsVisible" | "dependencies"> & {
106
- linterContext?: PerseusLinter.LinterContextProps | undefined;
105
+ declare const ref: React.ForwardRefExoticComponent<Omit<Pick<OwnProps & HOCProps, "item" | "problemNum" | "keypadElement" | "reviewMode" | "dependencies" | "hintsVisible"> & {
107
106
  apiOptions?: Readonly<{
108
107
  isArticle?: boolean | undefined;
109
108
  onInputError?: ((widgetId: any, value: string, message?: string | null | undefined) => unknown) | undefined;
@@ -138,6 +137,7 @@ declare const ref: React.ForwardRefExoticComponent<Omit<Pick<OwnProps & HOCProps
138
137
  editorChangeDelay?: number | undefined;
139
138
  onWidgetStartProps?: ((widgets: import("./types").PerseusWidgetMap) => import("./types").PerseusWidgetMap) | undefined;
140
139
  }> | undefined;
140
+ linterContext?: PerseusLinter.LinterContextProps | undefined;
141
141
  onRendered?: ((isRendered: boolean) => void) | undefined;
142
142
  } & {}, "onRendered"> & React.RefAttributes<ServerItemRenderer>>;
143
143
  export default ref;
@@ -1,3 +1,4 @@
1
+ import type { MouseHandler } from "./interactive";
1
2
  import type { Interval } from "./interval";
2
3
  import type { Coord } from "../interactive2/types";
3
4
  export declare function polar(r: number | Coord, th: number): Coord;
@@ -100,13 +101,22 @@ export declare class Graphie {
100
101
  private addArrowheads;
101
102
  scalePoint: (point: number | Coord) => Coord;
102
103
  scaleVector: (point: number | Coord) => any;
103
- unscalePoint: (point: Coord) => any;
104
- unscaleVector: (point: Coord) => any;
104
+ unscalePoint: (point: number | Coord) => any;
105
+ unscaleVector: (point: number | Coord) => any;
105
106
  private processAttributes;
106
107
  getMouseCoord(event: Readonly<{
107
108
  pageX?: number;
108
109
  pageY?: number;
109
110
  }>): Coord;
111
+ addMouseLayer(options: {
112
+ onClick?: MouseHandler;
113
+ onMouseMove?: MouseHandler;
114
+ onMouseDown?: MouseHandler;
115
+ onMouseOver?: MouseHandler;
116
+ onMouseOut?: MouseHandler;
117
+ allowScratchpad?: boolean;
118
+ setDrawingAreaAvailable?: (available: boolean) => void;
119
+ }): void;
110
120
  }
111
121
  type RangeSpecifier = [Interval, Interval] | Coord | number;
112
122
  export declare function normalizeRange(range: RangeSpecifier): [Interval, Interval];
@@ -212,11 +212,11 @@ declare const _default: Readonly<{
212
212
  onFocus: (blurPath: import("../types").FocusPath) => void;
213
213
  times: boolean;
214
214
  value: string;
215
- }, "onChange" | "trackInteraction" | "static" | "analytics" | "problemNum" | "questionCompleted" | "keypadElement" | "alignment" | "buttonsVisible" | "containerSizeClass" | "widgetId" | "findWidgets" | "keypadConfiguration" | "reviewModeRubric" | "isLastUsedWidget"> & {
215
+ }, "onChange" | "trackInteraction" | "static" | "analytics" | "buttonsVisible" | "containerSizeClass" | "widgetId" | "problemNum" | "questionCompleted" | "findWidgets" | "keypadElement" | "keypadConfiguration" | "alignment" | "reviewModeRubric" | "isLastUsedWidget"> & {
216
216
  onFocus?: ((blurPath: import("../types").FocusPath) => void) | undefined;
217
217
  onBlur?: ((blurPath: import("../types").FocusPath) => void) | undefined;
218
218
  value?: string | undefined;
219
- linterContext?: import("@khanacademy/perseus-linter").LinterContextProps | undefined;
219
+ buttonSets?: import("../perseus-types").LegacyButtonSets | undefined;
220
220
  apiOptions?: Readonly<Readonly<{
221
221
  isArticle?: boolean | undefined;
222
222
  onInputError?: ((widgetId: any, value: string, message?: string | null | undefined) => unknown) | undefined;
@@ -269,9 +269,9 @@ declare const _default: Readonly<{
269
269
  showAlignmentOptions: NonNullable<boolean | undefined>;
270
270
  useDraftEditor: NonNullable<boolean | undefined>;
271
271
  }> | undefined;
272
- buttonSets?: import("../perseus-types").LegacyButtonSets | undefined;
273
272
  functions?: readonly string[] | undefined;
274
273
  times?: boolean | undefined;
274
+ linterContext?: import("@khanacademy/perseus-linter").LinterContextProps | undefined;
275
275
  } & {}, "analytics"> & React.RefAttributes<Expression>>) | undefined;
276
276
  widget: React.ForwardRefExoticComponent<Omit<Pick<RenderProps & {
277
277
  widgetId: string;
@@ -401,11 +401,11 @@ declare const _default: Readonly<{
401
401
  onFocus: (blurPath: import("../types").FocusPath) => void;
402
402
  times: boolean;
403
403
  value: string;
404
- }, "onChange" | "trackInteraction" | "static" | "analytics" | "problemNum" | "questionCompleted" | "keypadElement" | "alignment" | "buttonsVisible" | "containerSizeClass" | "widgetId" | "findWidgets" | "keypadConfiguration" | "reviewModeRubric" | "isLastUsedWidget"> & {
404
+ }, "onChange" | "trackInteraction" | "static" | "analytics" | "buttonsVisible" | "containerSizeClass" | "widgetId" | "problemNum" | "questionCompleted" | "findWidgets" | "keypadElement" | "keypadConfiguration" | "alignment" | "reviewModeRubric" | "isLastUsedWidget"> & {
405
405
  onFocus?: ((blurPath: import("../types").FocusPath) => void) | undefined;
406
406
  onBlur?: ((blurPath: import("../types").FocusPath) => void) | undefined;
407
407
  value?: string | undefined;
408
- linterContext?: import("@khanacademy/perseus-linter").LinterContextProps | undefined;
408
+ buttonSets?: import("../perseus-types").LegacyButtonSets | undefined;
409
409
  apiOptions?: Readonly<Readonly<{
410
410
  isArticle?: boolean | undefined;
411
411
  onInputError?: ((widgetId: any, value: string, message?: string | null | undefined) => unknown) | undefined;
@@ -458,9 +458,9 @@ declare const _default: Readonly<{
458
458
  showAlignmentOptions: NonNullable<boolean | undefined>;
459
459
  useDraftEditor: NonNullable<boolean | undefined>;
460
460
  }> | undefined;
461
- buttonSets?: import("../perseus-types").LegacyButtonSets | undefined;
462
461
  functions?: readonly string[] | undefined;
463
462
  times?: boolean | undefined;
463
+ linterContext?: import("@khanacademy/perseus-linter").LinterContextProps | undefined;
464
464
  } & {}, "analytics"> & React.RefAttributes<Expression>>;
465
465
  accessible?: boolean | ((props: any) => boolean) | undefined;
466
466
  hidden?: boolean | undefined;
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "Core Perseus API (includes renderers and widgets)",
4
4
  "author": "Khan Academy",
5
5
  "license": "MIT",
6
- "version": "19.1.6",
6
+ "version": "19.1.8",
7
7
  "publishConfig": {
8
8
  "access": "public"
9
9
  },
@@ -27,7 +27,7 @@
27
27
  "dependencies": {
28
28
  "@khanacademy/kas": "^0.3.8",
29
29
  "@khanacademy/kmath": "^0.1.12",
30
- "@khanacademy/math-input": "^17.0.5",
30
+ "@khanacademy/math-input": "^17.0.7",
31
31
  "@khanacademy/perseus-core": "1.4.2",
32
32
  "@khanacademy/perseus-linter": "^0.3.11",
33
33
  "@khanacademy/pure-markdown": "^0.2.14",
@@ -35,7 +35,7 @@
35
35
  "@khanacademy/wonder-blocks-banner": "^3.0.33"
36
36
  },
37
37
  "devDependencies": {
38
- "@khanacademy/mathjax-renderer": "git+ssh://git@github.com:Khan/mathjax-renderer.git#v1.5.1",
38
+ "@khanacademy/mathjax-renderer": "git+ssh://git@github.com:Khan/mathjax-renderer.git#v1.6.2",
39
39
  "@khanacademy/wonder-blocks-button": "^6.2.5",
40
40
  "@khanacademy/wonder-blocks-clickable": "^4.0.12",
41
41
  "@khanacademy/wonder-blocks-color": "^3.0.0",