@khanacademy/perseus 22.7.0 → 23.1.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.
@@ -54,10 +54,8 @@ export declare const ApiOptions: {
54
54
  nativeKeypadProxy: PropTypes.Requireable<(...args: any[]) => any>;
55
55
  isMobile: PropTypes.Requireable<boolean>;
56
56
  setDrawingAreaAvailable: PropTypes.Requireable<(...args: any[]) => any>;
57
- useDraftEditor: PropTypes.Requireable<boolean>;
58
57
  hintProgressColor: PropTypes.Requireable<string>;
59
58
  canScrollPage: PropTypes.Requireable<boolean>;
60
- inModal: PropTypes.Requireable<boolean>;
61
59
  crossOutEnabled: PropTypes.Requireable<boolean>;
62
60
  editorChangeDelay: PropTypes.Requireable<number>;
63
61
  }>>>;
@@ -89,10 +87,8 @@ export declare const ApiOptions: {
89
87
  nativeKeypadProxy?: ((blur: () => void) => import("@khanacademy/math-input").KeypadAPI) | undefined;
90
88
  isMobile?: boolean | undefined;
91
89
  setDrawingAreaAvailable?: ((arg1: boolean) => unknown) | undefined;
92
- useDraftEditor?: boolean | undefined;
93
90
  hintProgressColor?: string | undefined;
94
91
  canScrollPage?: boolean | undefined;
95
- inModal?: boolean | undefined;
96
92
  crossOutEnabled?: boolean | undefined;
97
93
  editorChangeDelay?: number | undefined;
98
94
  flags?: {
@@ -100,11 +96,14 @@ export declare const ApiOptions: {
100
96
  circle?: boolean | undefined;
101
97
  polygon?: boolean | undefined;
102
98
  linear?: boolean | undefined;
99
+ quadratic?: boolean | undefined;
100
+ sinusoid?: boolean | undefined;
103
101
  segment?: boolean | undefined;
104
102
  "linear-system"?: boolean | undefined;
105
103
  ray?: boolean | undefined;
106
104
  } & {
107
105
  "interactive-graph-locked-features-m1"?: boolean | undefined;
106
+ "interactive-graph-locked-features-m2"?: boolean | undefined;
108
107
  }) | undefined;
109
108
  } | undefined;
110
109
  onWidgetStartProps?: ((widgets: import("./perseus-types").PerseusWidgetsMap) => void) | undefined;
@@ -117,7 +116,6 @@ export declare const ApiOptions: {
117
116
  crossOutEnabled: NonNullable<boolean | undefined>;
118
117
  editorChangeDelay: number;
119
118
  groupAnnotator: (groupNumber: number, widgetId: string) => React.ReactNode;
120
- inModal: NonNullable<boolean | undefined>;
121
119
  isArticle: NonNullable<boolean | undefined>;
122
120
  isMobile: NonNullable<boolean | undefined>;
123
121
  onFocusChange: (newFocusPath: import("./types").FocusPath, oldFocusPath: import("./types").FocusPath, keypadHeight?: number | undefined, focusedElement?: HTMLElement | undefined) => unknown;
@@ -125,7 +123,6 @@ export declare const ApiOptions: {
125
123
  readOnly: NonNullable<boolean | undefined>;
126
124
  setDrawingAreaAvailable: (arg1: boolean) => unknown;
127
125
  showAlignmentOptions: NonNullable<boolean | undefined>;
128
- useDraftEditor: NonNullable<boolean | undefined>;
129
126
  }>;
130
127
  };
131
128
  export declare const ClassNames: {
@@ -4,7 +4,6 @@ export type Range = Interval;
4
4
  export type Size = [number, number];
5
5
  export type CollinearTuple = readonly [vec.Vector2, vec.Vector2];
6
6
  export type ShowSolutions = "all" | "selected" | "none";
7
- type Empty = Record<never, never>;
8
7
  export type PerseusWidgetsMap = {
9
8
  [key in `categorizer ${number}`]: CategorizerWidget;
10
9
  } & {
@@ -350,7 +349,7 @@ export type PerseusInteractiveGraphWidgetOptions = {
350
349
  declare const lockedFigureColorNames: readonly ["green", "grayH", "purple", "pink", "red"];
351
350
  export type LockedFigureColor = (typeof lockedFigureColorNames)[number];
352
351
  export declare const lockedFigureColors: Record<LockedFigureColor, string>;
353
- export type LockedFigure = LockedPointType | LockedLineType;
352
+ export type LockedFigure = LockedPointType | LockedLineType | LockedCircleType;
354
353
  export type LockedFigureType = LockedFigure["type"];
355
354
  export type LockedPointType = {
356
355
  type: "point";
@@ -367,6 +366,14 @@ export type LockedLineType = {
367
366
  showPoint1: boolean;
368
367
  showPoint2: boolean;
369
368
  };
369
+ export type LockedCircleType = {
370
+ type: "circle";
371
+ center: Coord;
372
+ radius: number;
373
+ color: LockedFigureColor;
374
+ fillStyle: "none" | "solid" | "translucent";
375
+ strokeStyle: "solid" | "dashed";
376
+ };
370
377
  export type PerseusGraphType = PerseusGraphTypeAngle | PerseusGraphTypeCircle | PerseusGraphTypeLinear | PerseusGraphTypeLinearSystem | PerseusGraphTypePoint | PerseusGraphTypePolygon | PerseusGraphTypeQuadratic | PerseusGraphTypeRay | PerseusGraphTypeSegment | PerseusGraphTypeSinusoid;
371
378
  export type PerseusGraphTypeCommon = {
372
379
  coord?: Coord;
@@ -409,7 +416,7 @@ export type PerseusGraphTypePolygon = {
409
416
  } & PerseusGraphTypeCommon;
410
417
  export type PerseusGraphTypeQuadratic = {
411
418
  type: "quadratic";
412
- coords?: ReadonlyArray<Coord>;
419
+ coords?: [Coord, Coord, Coord];
413
420
  } & PerseusGraphTypeCommon;
414
421
  export type PerseusGraphTypeSegment = {
415
422
  type: "segment";
@@ -134,10 +134,8 @@ declare const ref: React.ForwardRefExoticComponent<Omit<Pick<OwnProps & HOCProps
134
134
  nativeKeypadProxy?: ((blur: () => void) => KeypadAPI) | undefined;
135
135
  isMobile?: boolean | undefined;
136
136
  setDrawingAreaAvailable?: ((arg1: boolean) => unknown) | undefined;
137
- useDraftEditor?: boolean | undefined;
138
137
  hintProgressColor?: string | undefined;
139
138
  canScrollPage?: boolean | undefined;
140
- inModal?: boolean | undefined;
141
139
  crossOutEnabled?: boolean | undefined;
142
140
  editorChangeDelay?: number | undefined;
143
141
  flags?: {
@@ -145,11 +143,14 @@ declare const ref: React.ForwardRefExoticComponent<Omit<Pick<OwnProps & HOCProps
145
143
  circle?: boolean | undefined;
146
144
  polygon?: boolean | undefined;
147
145
  linear?: boolean | undefined;
146
+ quadratic?: boolean | undefined;
147
+ sinusoid?: boolean | undefined;
148
148
  segment?: boolean | undefined;
149
149
  "linear-system"?: boolean | undefined;
150
150
  ray?: boolean | undefined;
151
151
  } & {
152
152
  "interactive-graph-locked-features-m1"?: boolean | undefined;
153
+ "interactive-graph-locked-features-m2"?: boolean | undefined;
153
154
  }) | undefined;
154
155
  } | undefined;
155
156
  onWidgetStartProps?: ((widgets: import("./perseus-types").PerseusWidgetsMap) => void) | undefined;
package/dist/types.d.ts CHANGED
@@ -10,7 +10,6 @@ import type { LinterContextProps } from "@khanacademy/perseus-linter";
10
10
  import type { Result } from "@khanacademy/wonder-blocks-data";
11
11
  import type * as React from "react";
12
12
  export type FocusPath = ReadonlyArray<string> | null | undefined;
13
- type Empty = Record<never, never>;
14
13
  export type Dimensions = {
15
14
  width?: number;
16
15
  height?: number;
@@ -78,8 +77,8 @@ type TrackInteractionArgs = {
78
77
  id: string;
79
78
  correct?: boolean;
80
79
  } & Partial<TrackingGradedGroupExtraArguments> & Partial<TrackingSequenceExtraArguments>;
81
- export declare const MafsGraphTypeFlags: readonly ["segment", "linear", "linear-system", "ray", "polygon", "circle"];
82
- export declare const InteractiveGraphLockedFeaturesFlags: readonly ["interactive-graph-locked-features-m1"];
80
+ export declare const MafsGraphTypeFlags: readonly ["segment", "linear", "linear-system", "ray", "polygon", "circle", "quadratic", "sinusoid"];
81
+ export declare const InteractiveGraphLockedFeaturesFlags: readonly ["interactive-graph-locked-features-m1", "interactive-graph-locked-features-m2"];
83
82
  /**
84
83
  * APIOptions provides different ways to customize the behaviour of Perseus.
85
84
  *
@@ -164,8 +163,6 @@ export type APIOptions = Readonly<{
164
163
  * Previously handled by `Khan.scratchpad.enable/disable`
165
164
  */
166
165
  setDrawingAreaAvailable?: (arg1: boolean) => unknown;
167
- /** Whether to use the Draft.js editor or the legacy textarea */
168
- useDraftEditor?: boolean;
169
166
  /** The color used for the hint progress indicator (eg. 1 / 3) */
170
167
  hintProgressColor?: string;
171
168
  /**
@@ -177,8 +174,6 @@ export type APIOptions = Readonly<{
177
174
  * Defaults to `false`.
178
175
  */
179
176
  canScrollPage?: boolean;
180
- /** Whether or not we are rendering content inside of a modal. */
181
- inModal?: boolean;
182
177
  /**
183
178
  * Whether to enable the cross-out feature on multiple-choice radio
184
179
  * widgets. This allows users to note which answers they believe to
@@ -306,7 +301,6 @@ export type APIOptionsWithDefaults = Readonly<APIOptions & {
306
301
  crossOutEnabled: NonNullable<APIOptions["crossOutEnabled"]>;
307
302
  editorChangeDelay: NonNullable<APIOptions["editorChangeDelay"]>;
308
303
  groupAnnotator: NonNullable<APIOptions["groupAnnotator"]>;
309
- inModal: NonNullable<APIOptions["inModal"]>;
310
304
  isArticle: NonNullable<APIOptions["isArticle"]>;
311
305
  isMobile: NonNullable<APIOptions["isMobile"]>;
312
306
  onFocusChange: NonNullable<APIOptions["onFocusChange"]>;
@@ -314,7 +308,6 @@ export type APIOptionsWithDefaults = Readonly<APIOptions & {
314
308
  readOnly: NonNullable<APIOptions["readOnly"]>;
315
309
  setDrawingAreaAvailable: NonNullable<APIOptions["setDrawingAreaAvailable"]>;
316
310
  showAlignmentOptions: NonNullable<APIOptions["showAlignmentOptions"]>;
317
- useDraftEditor: NonNullable<APIOptions["useDraftEditor"]>;
318
311
  }>;
319
312
  export type Tracking = "" | "all";
320
313
  export type TrackingGradedGroupExtraArguments = {
@@ -2,7 +2,6 @@ import * as React from "react";
2
2
  import { PerseusI18nContext } from "../components/i18n-context";
3
3
  import type { PerseusRenderer, PerseusDefinitionWidgetOptions } from "../perseus-types";
4
4
  import type { PerseusScore, WidgetProps } from "../types";
5
- type Empty = Record<never, never>;
6
5
  type RenderProps = PerseusDefinitionWidgetOptions;
7
6
  type Rubric = PerseusDefinitionWidgetOptions;
8
7
  type UserInput = Empty;
@@ -2,7 +2,6 @@ import * as React from "react";
2
2
  import { PerseusI18nContext } from "../components/i18n-context";
3
3
  import type { PerseusExplanationWidgetOptions } from "../perseus-types";
4
4
  import type { PerseusScore, WidgetProps } from "../types";
5
- type Empty = Record<never, never>;
6
5
  type RenderProps = PerseusExplanationWidgetOptions;
7
6
  type Rubric = PerseusExplanationWidgetOptions;
8
7
  type UserInput = Empty;
@@ -128,10 +128,8 @@ declare const _default: Readonly<{
128
128
  nativeKeypadProxy?: ((blur: () => void) => import("@khanacademy/math-input").KeypadAPI) | undefined;
129
129
  isMobile?: boolean | undefined;
130
130
  setDrawingAreaAvailable?: ((arg1: boolean) => unknown) | undefined;
131
- useDraftEditor?: boolean | undefined;
132
131
  hintProgressColor?: string | undefined;
133
132
  canScrollPage?: boolean | undefined;
134
- inModal?: boolean | undefined;
135
133
  crossOutEnabled?: boolean | undefined;
136
134
  editorChangeDelay?: number | undefined;
137
135
  flags?: {
@@ -139,11 +137,14 @@ declare const _default: Readonly<{
139
137
  circle?: boolean | undefined;
140
138
  polygon?: boolean | undefined;
141
139
  linear?: boolean | undefined;
140
+ quadratic?: boolean | undefined;
141
+ sinusoid?: boolean | undefined;
142
142
  segment?: boolean | undefined;
143
143
  "linear-system"?: boolean | undefined;
144
144
  ray?: boolean | undefined;
145
145
  } & {
146
146
  "interactive-graph-locked-features-m1"?: boolean | undefined;
147
+ "interactive-graph-locked-features-m2"?: boolean | undefined;
147
148
  }) | undefined;
148
149
  } | undefined;
149
150
  onWidgetStartProps?: ((widgets: import("../perseus-types").PerseusWidgetsMap) => void) | undefined;
@@ -156,7 +157,6 @@ declare const _default: Readonly<{
156
157
  crossOutEnabled: NonNullable<boolean | undefined>;
157
158
  editorChangeDelay: number;
158
159
  groupAnnotator: (groupNumber: number, widgetId: string) => React.ReactNode;
159
- inModal: NonNullable<boolean | undefined>;
160
160
  isArticle: NonNullable<boolean | undefined>;
161
161
  isMobile: NonNullable<boolean | undefined>;
162
162
  onFocusChange: (newFocusPath: import("../types").FocusPath, oldFocusPath: import("../types").FocusPath, keypadHeight?: number | undefined, focusedElement?: HTMLElement | undefined) => unknown;
@@ -164,7 +164,6 @@ declare const _default: Readonly<{
164
164
  readOnly: NonNullable<boolean | undefined>;
165
165
  setDrawingAreaAvailable: (arg1: boolean) => unknown;
166
166
  showAlignmentOptions: NonNullable<boolean | undefined>;
167
- useDraftEditor: NonNullable<boolean | undefined>;
168
167
  }>;
169
168
  keypadElement?: any;
170
169
  questionCompleted?: boolean | undefined;
@@ -173,7 +172,7 @@ declare const _default: Readonly<{
173
172
  findWidgets: (arg1: import("../types").FilterCriterion) => readonly any[];
174
173
  reviewModeRubric: PerseusExpressionWidgetOptions;
175
174
  onChange: import("../types").ChangeHandler;
176
- trackInteraction: (extraData?: {} | undefined) => void;
175
+ trackInteraction: (extraData?: Empty | undefined) => void;
177
176
  isLastUsedWidget: boolean;
178
177
  linterContext: import("@khanacademy/perseus-linter").LinterContextProps;
179
178
  containerSizeClass: import("../util/sizing-utils").SizeClass;
@@ -206,10 +205,8 @@ declare const _default: Readonly<{
206
205
  nativeKeypadProxy?: ((blur: () => void) => import("@khanacademy/math-input").KeypadAPI) | undefined;
207
206
  isMobile?: boolean | undefined;
208
207
  setDrawingAreaAvailable?: ((arg1: boolean) => unknown) | undefined;
209
- useDraftEditor?: boolean | undefined;
210
208
  hintProgressColor?: string | undefined;
211
209
  canScrollPage?: boolean | undefined;
212
- inModal?: boolean | undefined;
213
210
  crossOutEnabled?: boolean | undefined;
214
211
  editorChangeDelay?: number | undefined;
215
212
  flags?: {
@@ -217,11 +214,14 @@ declare const _default: Readonly<{
217
214
  circle?: boolean | undefined;
218
215
  polygon?: boolean | undefined;
219
216
  linear?: boolean | undefined;
217
+ quadratic?: boolean | undefined;
218
+ sinusoid?: boolean | undefined;
220
219
  segment?: boolean | undefined;
221
220
  "linear-system"?: boolean | undefined;
222
221
  ray?: boolean | undefined;
223
222
  } & {
224
223
  "interactive-graph-locked-features-m1"?: boolean | undefined;
224
+ "interactive-graph-locked-features-m2"?: boolean | undefined;
225
225
  }) | undefined;
226
226
  } | undefined;
227
227
  onWidgetStartProps?: ((widgets: import("../perseus-types").PerseusWidgetsMap) => void) | undefined;
@@ -234,7 +234,6 @@ declare const _default: Readonly<{
234
234
  crossOutEnabled: NonNullable<boolean | undefined>;
235
235
  editorChangeDelay: number;
236
236
  groupAnnotator: (groupNumber: number, widgetId: string) => React.ReactNode;
237
- inModal: NonNullable<boolean | undefined>;
238
237
  isArticle: NonNullable<boolean | undefined>;
239
238
  isMobile: NonNullable<boolean | undefined>;
240
239
  onFocusChange: (newFocusPath: import("../types").FocusPath, oldFocusPath: import("../types").FocusPath, keypadHeight?: number | undefined, focusedElement?: HTMLElement | undefined) => unknown;
@@ -242,7 +241,6 @@ declare const _default: Readonly<{
242
241
  readOnly: NonNullable<boolean | undefined>;
243
242
  setDrawingAreaAvailable: (arg1: boolean) => unknown;
244
243
  showAlignmentOptions: NonNullable<boolean | undefined>;
245
- useDraftEditor: NonNullable<boolean | undefined>;
246
244
  }>;
247
245
  buttonSets: import("../perseus-types").LegacyButtonSets;
248
246
  functions: readonly string[];
@@ -284,10 +282,8 @@ declare const _default: Readonly<{
284
282
  nativeKeypadProxy?: ((blur: () => void) => import("@khanacademy/math-input").KeypadAPI) | undefined;
285
283
  isMobile?: boolean | undefined;
286
284
  setDrawingAreaAvailable?: ((arg1: boolean) => unknown) | undefined;
287
- useDraftEditor?: boolean | undefined;
288
285
  hintProgressColor?: string | undefined;
289
286
  canScrollPage?: boolean | undefined;
290
- inModal?: boolean | undefined;
291
287
  crossOutEnabled?: boolean | undefined;
292
288
  editorChangeDelay?: number | undefined;
293
289
  flags?: {
@@ -295,11 +291,14 @@ declare const _default: Readonly<{
295
291
  circle?: boolean | undefined;
296
292
  polygon?: boolean | undefined;
297
293
  linear?: boolean | undefined;
294
+ quadratic?: boolean | undefined;
295
+ sinusoid?: boolean | undefined;
298
296
  segment?: boolean | undefined;
299
297
  "linear-system"?: boolean | undefined;
300
298
  ray?: boolean | undefined;
301
299
  } & {
302
300
  "interactive-graph-locked-features-m1"?: boolean | undefined;
301
+ "interactive-graph-locked-features-m2"?: boolean | undefined;
303
302
  }) | undefined;
304
303
  } | undefined;
305
304
  onWidgetStartProps?: ((widgets: import("../perseus-types").PerseusWidgetsMap) => void) | undefined;
@@ -312,7 +311,6 @@ declare const _default: Readonly<{
312
311
  crossOutEnabled: NonNullable<boolean | undefined>;
313
312
  editorChangeDelay: number;
314
313
  groupAnnotator: (groupNumber: number, widgetId: string) => React.ReactNode;
315
- inModal: NonNullable<boolean | undefined>;
316
314
  isArticle: NonNullable<boolean | undefined>;
317
315
  isMobile: NonNullable<boolean | undefined>;
318
316
  onFocusChange: (newFocusPath: import("../types").FocusPath, oldFocusPath: import("../types").FocusPath, keypadHeight?: number | undefined, focusedElement?: HTMLElement | undefined) => unknown;
@@ -320,7 +318,6 @@ declare const _default: Readonly<{
320
318
  readOnly: NonNullable<boolean | undefined>;
321
319
  setDrawingAreaAvailable: (arg1: boolean) => unknown;
322
320
  showAlignmentOptions: NonNullable<boolean | undefined>;
323
- useDraftEditor: NonNullable<boolean | undefined>;
324
321
  }> | undefined;
325
322
  functions?: readonly string[] | undefined;
326
323
  times?: boolean | undefined;
@@ -359,10 +356,8 @@ declare const _default: Readonly<{
359
356
  nativeKeypadProxy?: ((blur: () => void) => import("@khanacademy/math-input").KeypadAPI) | undefined;
360
357
  isMobile?: boolean | undefined;
361
358
  setDrawingAreaAvailable?: ((arg1: boolean) => unknown) | undefined;
362
- useDraftEditor?: boolean | undefined;
363
359
  hintProgressColor?: string | undefined;
364
360
  canScrollPage?: boolean | undefined;
365
- inModal?: boolean | undefined;
366
361
  crossOutEnabled?: boolean | undefined;
367
362
  editorChangeDelay?: number | undefined;
368
363
  flags?: {
@@ -370,11 +365,14 @@ declare const _default: Readonly<{
370
365
  circle?: boolean | undefined;
371
366
  polygon?: boolean | undefined;
372
367
  linear?: boolean | undefined;
368
+ quadratic?: boolean | undefined;
369
+ sinusoid?: boolean | undefined;
373
370
  segment?: boolean | undefined;
374
371
  "linear-system"?: boolean | undefined;
375
372
  ray?: boolean | undefined;
376
373
  } & {
377
374
  "interactive-graph-locked-features-m1"?: boolean | undefined;
375
+ "interactive-graph-locked-features-m2"?: boolean | undefined;
378
376
  }) | undefined;
379
377
  } | undefined;
380
378
  onWidgetStartProps?: ((widgets: import("../perseus-types").PerseusWidgetsMap) => void) | undefined;
@@ -387,7 +385,6 @@ declare const _default: Readonly<{
387
385
  crossOutEnabled: NonNullable<boolean | undefined>;
388
386
  editorChangeDelay: number;
389
387
  groupAnnotator: (groupNumber: number, widgetId: string) => React.ReactNode;
390
- inModal: NonNullable<boolean | undefined>;
391
388
  isArticle: NonNullable<boolean | undefined>;
392
389
  isMobile: NonNullable<boolean | undefined>;
393
390
  onFocusChange: (newFocusPath: import("../types").FocusPath, oldFocusPath: import("../types").FocusPath, keypadHeight?: number | undefined, focusedElement?: HTMLElement | undefined) => unknown;
@@ -395,7 +392,6 @@ declare const _default: Readonly<{
395
392
  readOnly: NonNullable<boolean | undefined>;
396
393
  setDrawingAreaAvailable: (arg1: boolean) => unknown;
397
394
  showAlignmentOptions: NonNullable<boolean | undefined>;
398
- useDraftEditor: NonNullable<boolean | undefined>;
399
395
  }>;
400
396
  keypadElement?: any;
401
397
  questionCompleted?: boolean | undefined;
@@ -404,7 +400,7 @@ declare const _default: Readonly<{
404
400
  findWidgets: (arg1: import("../types").FilterCriterion) => readonly any[];
405
401
  reviewModeRubric: PerseusExpressionWidgetOptions;
406
402
  onChange: import("../types").ChangeHandler;
407
- trackInteraction: (extraData?: {} | undefined) => void;
403
+ trackInteraction: (extraData?: Empty | undefined) => void;
408
404
  isLastUsedWidget: boolean;
409
405
  linterContext: import("@khanacademy/perseus-linter").LinterContextProps;
410
406
  containerSizeClass: import("../util/sizing-utils").SizeClass;
@@ -437,10 +433,8 @@ declare const _default: Readonly<{
437
433
  nativeKeypadProxy?: ((blur: () => void) => import("@khanacademy/math-input").KeypadAPI) | undefined;
438
434
  isMobile?: boolean | undefined;
439
435
  setDrawingAreaAvailable?: ((arg1: boolean) => unknown) | undefined;
440
- useDraftEditor?: boolean | undefined;
441
436
  hintProgressColor?: string | undefined;
442
437
  canScrollPage?: boolean | undefined;
443
- inModal?: boolean | undefined;
444
438
  crossOutEnabled?: boolean | undefined;
445
439
  editorChangeDelay?: number | undefined;
446
440
  flags?: {
@@ -448,11 +442,14 @@ declare const _default: Readonly<{
448
442
  circle?: boolean | undefined;
449
443
  polygon?: boolean | undefined;
450
444
  linear?: boolean | undefined;
445
+ quadratic?: boolean | undefined;
446
+ sinusoid?: boolean | undefined;
451
447
  segment?: boolean | undefined;
452
448
  "linear-system"?: boolean | undefined;
453
449
  ray?: boolean | undefined;
454
450
  } & {
455
451
  "interactive-graph-locked-features-m1"?: boolean | undefined;
452
+ "interactive-graph-locked-features-m2"?: boolean | undefined;
456
453
  }) | undefined;
457
454
  } | undefined;
458
455
  onWidgetStartProps?: ((widgets: import("../perseus-types").PerseusWidgetsMap) => void) | undefined;
@@ -465,7 +462,6 @@ declare const _default: Readonly<{
465
462
  crossOutEnabled: NonNullable<boolean | undefined>;
466
463
  editorChangeDelay: number;
467
464
  groupAnnotator: (groupNumber: number, widgetId: string) => React.ReactNode;
468
- inModal: NonNullable<boolean | undefined>;
469
465
  isArticle: NonNullable<boolean | undefined>;
470
466
  isMobile: NonNullable<boolean | undefined>;
471
467
  onFocusChange: (newFocusPath: import("../types").FocusPath, oldFocusPath: import("../types").FocusPath, keypadHeight?: number | undefined, focusedElement?: HTMLElement | undefined) => unknown;
@@ -473,7 +469,6 @@ declare const _default: Readonly<{
473
469
  readOnly: NonNullable<boolean | undefined>;
474
470
  setDrawingAreaAvailable: (arg1: boolean) => unknown;
475
471
  showAlignmentOptions: NonNullable<boolean | undefined>;
476
- useDraftEditor: NonNullable<boolean | undefined>;
477
472
  }>;
478
473
  buttonSets: import("../perseus-types").LegacyButtonSets;
479
474
  functions: readonly string[];
@@ -515,10 +510,8 @@ declare const _default: Readonly<{
515
510
  nativeKeypadProxy?: ((blur: () => void) => import("@khanacademy/math-input").KeypadAPI) | undefined;
516
511
  isMobile?: boolean | undefined;
517
512
  setDrawingAreaAvailable?: ((arg1: boolean) => unknown) | undefined;
518
- useDraftEditor?: boolean | undefined;
519
513
  hintProgressColor?: string | undefined;
520
514
  canScrollPage?: boolean | undefined;
521
- inModal?: boolean | undefined;
522
515
  crossOutEnabled?: boolean | undefined;
523
516
  editorChangeDelay?: number | undefined;
524
517
  flags?: {
@@ -526,11 +519,14 @@ declare const _default: Readonly<{
526
519
  circle?: boolean | undefined;
527
520
  polygon?: boolean | undefined;
528
521
  linear?: boolean | undefined;
522
+ quadratic?: boolean | undefined;
523
+ sinusoid?: boolean | undefined;
529
524
  segment?: boolean | undefined;
530
525
  "linear-system"?: boolean | undefined;
531
526
  ray?: boolean | undefined;
532
527
  } & {
533
528
  "interactive-graph-locked-features-m1"?: boolean | undefined;
529
+ "interactive-graph-locked-features-m2"?: boolean | undefined;
534
530
  }) | undefined;
535
531
  } | undefined;
536
532
  onWidgetStartProps?: ((widgets: import("../perseus-types").PerseusWidgetsMap) => void) | undefined;
@@ -543,7 +539,6 @@ declare const _default: Readonly<{
543
539
  crossOutEnabled: NonNullable<boolean | undefined>;
544
540
  editorChangeDelay: number;
545
541
  groupAnnotator: (groupNumber: number, widgetId: string) => React.ReactNode;
546
- inModal: NonNullable<boolean | undefined>;
547
542
  isArticle: NonNullable<boolean | undefined>;
548
543
  isMobile: NonNullable<boolean | undefined>;
549
544
  onFocusChange: (newFocusPath: import("../types").FocusPath, oldFocusPath: import("../types").FocusPath, keypadHeight?: number | undefined, focusedElement?: HTMLElement | undefined) => unknown;
@@ -551,7 +546,6 @@ declare const _default: Readonly<{
551
546
  readOnly: NonNullable<boolean | undefined>;
552
547
  setDrawingAreaAvailable: (arg1: boolean) => unknown;
553
548
  showAlignmentOptions: NonNullable<boolean | undefined>;
554
- useDraftEditor: NonNullable<boolean | undefined>;
555
549
  }> | undefined;
556
550
  functions?: readonly string[] | undefined;
557
551
  times?: boolean | undefined;
@@ -1,5 +1,6 @@
1
1
  import * as React from "react";
2
2
  import { PerseusI18nContext } from "../components/i18n-context";
3
+ import type { QuadraticGraphState } from "./interactive-graphs/types";
3
4
  import type { Coord } from "../interactive2/types";
4
5
  import type { PerseusGraphType, PerseusGraphTypeAngle, PerseusGraphTypePoint, PerseusGraphTypePolygon, PerseusGraphTypeSegment, PerseusInteractiveGraphWidgetOptions } from "../perseus-types";
5
6
  import type { Widget } from "../renderer";
@@ -152,7 +153,7 @@ declare class InteractiveGraph extends React.Component<Props, State> {
152
153
  static pointsFromNormalized(props: Props, coordsList: ReadonlyArray<Coord>, noSnap?: boolean): ReadonlyArray<Coord>;
153
154
  static getLinearEquationString(props: Props): string;
154
155
  static getCurrentQuadraticCoefficients(props: Props): QuadraticCoefficient;
155
- static defaultQuadraticCoords(props: Props): ReadonlyArray<Coord>;
156
+ static defaultQuadraticCoords(props: Props): QuadraticGraphState["coords"];
156
157
  static getQuadraticEquationString(props: Props): string;
157
158
  static getCurrentSinusoidCoefficients(props: Props): SineCoefficient;
158
159
  static defaultSinusoidCoords(props: Props): ReadonlyArray<Coord>;
@@ -3,3 +3,5 @@ export { LinearGraph } from "./linear";
3
3
  export { RayGraph } from "./ray";
4
4
  export { PolygonGraph } from "./polygon";
5
5
  export { CircleGraph } from "./circle";
6
+ export { QuadraticGraph } from "./quadratic";
7
+ export { SinusoidGraph } from "./sinusoid";
@@ -0,0 +1,9 @@
1
+ /// <reference types="react" />
2
+ import type { QuadraticGraphState, MafsGraphProps } from "../types";
3
+ import type { vec } from "mafs";
4
+ type QuadraticGraphProps = MafsGraphProps<QuadraticGraphState>;
5
+ type QuadraticCoefficient = [number, number, number];
6
+ export declare function QuadraticGraph(props: QuadraticGraphProps): JSX.Element;
7
+ export declare const isValidDestination: (destination: vec.Vector2, elementId: number, coords: [import("../../..").Coord, import("../../..").Coord, import("../../..").Coord]) => boolean;
8
+ export declare const getQuadraticCoefficients: (coords: [import("../../..").Coord, import("../../..").Coord, import("../../..").Coord]) => QuadraticCoefficient | undefined;
9
+ export {};
@@ -0,0 +1,14 @@
1
+ /// <reference types="react" />
2
+ import type { Coord } from "../../../interactive2/types";
3
+ import type { SinusoidGraphState, MafsGraphProps } from "../types";
4
+ type SinusoidGraphProps = MafsGraphProps<SinusoidGraphState>;
5
+ export type SineCoefficient = {
6
+ amplitude: number;
7
+ angularFrequency: number;
8
+ phase: number;
9
+ verticalOffset: number;
10
+ };
11
+ export declare function SinusoidGraph(props: SinusoidGraphProps): JSX.Element;
12
+ export declare const computeSine: (x: number, sinusoidCoefficients: SineCoefficient) => number;
13
+ export declare const getSinusoidCoefficients: (coords: ReadonlyArray<Coord>) => SineCoefficient;
14
+ export {};
@@ -1,4 +1,4 @@
1
- import type { PerseusRenderer } from "../../perseus-types";
1
+ import type { LockedFigureColor, PerseusRenderer } from "../../perseus-types";
2
2
  import type { vec } from "mafs";
3
3
  export declare function interactiveGraphQuestionBuilder(): InteractiveGraphQuestionBuilder;
4
4
  declare class InteractiveGraphQuestionBuilder {
@@ -23,6 +23,11 @@ declare class InteractiveGraphQuestionBuilder {
23
23
  withCircle(): InteractiveGraphQuestionBuilder;
24
24
  addLockedPointAt(x: number, y: number): InteractiveGraphQuestionBuilder;
25
25
  addLockedLine(point1: vec.Vector2, point2: vec.Vector2): InteractiveGraphQuestionBuilder;
26
+ addLockedCircle(center: vec.Vector2, radius: number, options?: {
27
+ color?: LockedFigureColor;
28
+ fillStyle?: "none" | "solid" | "translucent";
29
+ strokeStyle?: "solid" | "dashed";
30
+ }): InteractiveGraphQuestionBuilder;
26
31
  private createLockedPoint;
27
32
  private addLockedFigure;
28
33
  }
@@ -0,0 +1,4 @@
1
+ /// <reference types="react" />
2
+ import { type LockedCircleType } from "../../perseus-types";
3
+ declare const LockedCircle: (props: LockedCircleType) => JSX.Element;
4
+ export default LockedCircle;
@@ -1,3 +1,3 @@
1
- export declare const mafsSupportedGraphTypes: readonly ["segment", "linear", "linear-system", "ray", "polygon", "point", "circle"];
1
+ export declare const mafsSupportedGraphTypes: readonly ["segment", "linear", "linear-system", "ray", "polygon", "point", "circle", "quadratic", "sinusoid"];
2
2
  export type MafsSupportedGraphType = (typeof mafsSupportedGraphTypes)[number];
3
3
  export declare const trueForAllMafsSupportedGraphTypes: Record<MafsSupportedGraphType, true>;
@@ -13,7 +13,7 @@ export interface InitializeGraphStateParams<T extends PerseusGraphType> {
13
13
  range: [Interval, Interval];
14
14
  step: vec.Vector2;
15
15
  }
16
- export type InteractiveGraphState = SegmentGraphState | LinearGraphState | RayGraphState | PolygonGraphState | PointGraphState | CircleGraphState;
16
+ export type InteractiveGraphState = SegmentGraphState | LinearGraphState | RayGraphState | PolygonGraphState | PointGraphState | CircleGraphState | QuadraticGraphState | SinusoidGraphState;
17
17
  export interface InteractiveGraphStateCommon {
18
18
  hasBeenInteractedWith: boolean;
19
19
  range: [xRange: Interval, yRange: Interval];
@@ -46,6 +46,14 @@ export interface CircleGraphState extends InteractiveGraphStateCommon {
46
46
  center: Coord;
47
47
  radiusPoint: Coord;
48
48
  }
49
+ export interface QuadraticGraphState extends InteractiveGraphStateCommon {
50
+ type: "quadratic";
51
+ coords: [Coord, Coord, Coord];
52
+ }
53
+ export interface SinusoidGraphState extends InteractiveGraphStateCommon {
54
+ type: "sinusoid";
55
+ coords: [vec.Vector2, vec.Vector2];
56
+ }
49
57
  export type PairOfPoints = [Coord, Coord];
50
58
  export type GraphDimensions = {
51
59
  range: [Interval, Interval];
@@ -122,10 +122,8 @@ declare const _default: Readonly<{
122
122
  nativeKeypadProxy?: ((blur: () => void) => import("@khanacademy/math-input").KeypadAPI) | undefined;
123
123
  isMobile?: boolean | undefined;
124
124
  setDrawingAreaAvailable?: ((arg1: boolean) => unknown) | undefined;
125
- useDraftEditor?: boolean | undefined;
126
125
  hintProgressColor?: string | undefined;
127
126
  canScrollPage?: boolean | undefined;
128
- inModal?: boolean | undefined;
129
127
  crossOutEnabled?: boolean | undefined;
130
128
  editorChangeDelay?: number | undefined;
131
129
  flags?: {
@@ -133,11 +131,14 @@ declare const _default: Readonly<{
133
131
  circle?: boolean | undefined;
134
132
  polygon?: boolean | undefined;
135
133
  linear?: boolean | undefined;
134
+ quadratic?: boolean | undefined;
135
+ sinusoid?: boolean | undefined;
136
136
  segment?: boolean | undefined;
137
137
  "linear-system"?: boolean | undefined;
138
138
  ray?: boolean | undefined;
139
139
  } & {
140
140
  "interactive-graph-locked-features-m1"?: boolean | undefined;
141
+ "interactive-graph-locked-features-m2"?: boolean | undefined;
141
142
  }) | undefined;
142
143
  } | undefined;
143
144
  onWidgetStartProps?: ((widgets: import("..").PerseusWidgetsMap) => void) | undefined;
@@ -182,10 +183,8 @@ declare const _default: Readonly<{
182
183
  nativeKeypadProxy?: ((blur: () => void) => import("@khanacademy/math-input").KeypadAPI) | undefined;
183
184
  isMobile?: boolean | undefined;
184
185
  setDrawingAreaAvailable?: ((arg1: boolean) => unknown) | undefined;
185
- useDraftEditor?: boolean | undefined;
186
186
  hintProgressColor?: string | undefined;
187
187
  canScrollPage?: boolean | undefined;
188
- inModal?: boolean | undefined;
189
188
  crossOutEnabled?: boolean | undefined;
190
189
  editorChangeDelay?: number | undefined;
191
190
  flags?: {
@@ -193,11 +192,14 @@ declare const _default: Readonly<{
193
192
  circle?: boolean | undefined;
194
193
  polygon?: boolean | undefined;
195
194
  linear?: boolean | undefined;
195
+ quadratic?: boolean | undefined;
196
+ sinusoid?: boolean | undefined;
196
197
  segment?: boolean | undefined;
197
198
  "linear-system"?: boolean | undefined;
198
199
  ray?: boolean | undefined;
199
200
  } & {
200
201
  "interactive-graph-locked-features-m1"?: boolean | undefined;
202
+ "interactive-graph-locked-features-m2"?: boolean | undefined;
201
203
  }) | undefined;
202
204
  } | undefined;
203
205
  onWidgetStartProps?: ((widgets: import("..").PerseusWidgetsMap) => void) | undefined;
@@ -36,10 +36,8 @@ export declare class Matcher extends React.Component<any, any> {
36
36
  nativeKeypadProxy: PropTypes.Requireable<(...args: any[]) => any>;
37
37
  isMobile: PropTypes.Requireable<boolean>;
38
38
  setDrawingAreaAvailable: PropTypes.Requireable<(...args: any[]) => any>;
39
- useDraftEditor: PropTypes.Requireable<boolean>;
40
39
  hintProgressColor: PropTypes.Requireable<string>;
41
40
  canScrollPage: PropTypes.Requireable<boolean>;
42
- inModal: PropTypes.Requireable<boolean>;
43
41
  crossOutEnabled: PropTypes.Requireable<boolean>;
44
42
  editorChangeDelay: PropTypes.Requireable<number>;
45
43
  }>>>;
@@ -26,10 +26,8 @@ declare class Sorter extends React.Component<any, any> {
26
26
  nativeKeypadProxy: PropTypes.Requireable<(...args: any[]) => any>;
27
27
  isMobile: PropTypes.Requireable<boolean>;
28
28
  setDrawingAreaAvailable: PropTypes.Requireable<(...args: any[]) => any>;
29
- useDraftEditor: PropTypes.Requireable<boolean>;
30
29
  hintProgressColor: PropTypes.Requireable<string>;
31
30
  canScrollPage: PropTypes.Requireable<boolean>;
32
- inModal: PropTypes.Requireable<boolean>;
33
31
  crossOutEnabled: PropTypes.Requireable<boolean>;
34
32
  editorChangeDelay: PropTypes.Requireable<number>;
35
33
  }>>>;