@khanacademy/perseus-editor 29.0.3 → 30.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.
@@ -53,9 +53,9 @@ declare class ItemEditor extends React.Component<Props, State> {
53
53
  handleEditorChange: ChangeHandler;
54
54
  handleItemExtrasChange: (newProps: Partial<PerseusAnswerArea>) => void;
55
55
  getSaveWarnings: () => any;
56
- serialize: (options?: any) => {
57
- answerArea: PerseusAnswerArea | undefined;
58
- question: any;
56
+ serialize(): {
57
+ answerArea: PerseusAnswerArea;
58
+ question: PerseusRenderer;
59
59
  };
60
60
  render(): React.ReactNode;
61
61
  }
@@ -7,7 +7,7 @@ type Props = PerseusAnswerArea & {
7
7
  declare class ItemExtrasEditor extends React.Component<Props> {
8
8
  static defaultProps: PerseusAnswerArea;
9
9
  shouldShowFinancialCalculatorOptions(): boolean;
10
- serialize: () => PerseusAnswerArea;
10
+ serialize(): PerseusAnswerArea;
11
11
  render(): React.ReactNode;
12
12
  }
13
13
  export default ItemExtrasEditor;
@@ -1,6 +1,6 @@
1
- import { type GroupDefaultWidgetOptions } from "@khanacademy/perseus-core";
2
1
  import * as React from "react";
3
2
  import Editor from "../editor";
3
+ import type { GroupDefaultWidgetOptions, PerseusRenderer } from "@khanacademy/perseus-core";
4
4
  type Props = any;
5
5
  declare class GroupEditor extends React.Component<Props> {
6
6
  static propTypes: {
@@ -13,7 +13,7 @@ declare class GroupEditor extends React.Component<Props> {
13
13
  static defaultProps: GroupDefaultWidgetOptions;
14
14
  editor: React.RefObject<Editor>;
15
15
  getSaveWarnings: () => ReadonlyArray<any>;
16
- serialize: () => any;
16
+ serialize(): PerseusRenderer;
17
17
  render(): React.ReactNode;
18
18
  }
19
19
  export default GroupEditor;
@@ -1,7 +1,9 @@
1
1
  import * as React from "react";
2
+ import type { APIOptionsWithDefaults } from "@khanacademy/perseus";
2
3
  type GraphTypeSelectorProps = {
3
4
  graphType: string;
4
5
  onChange: (newGraphType: string) => void;
6
+ apiOptions: APIOptionsWithDefaults;
5
7
  };
6
8
  declare const GraphTypeSelector: (props: GraphTypeSelectorProps) => React.JSX.Element;
7
9
  export default GraphTypeSelector;
@@ -3784,6 +3784,516 @@ declare const InteractiveGraph: {
3784
3784
  linterContext: import("@khanacademy/perseus-linter").LinterContextProps;
3785
3785
  containerSizeClass: import("../../../../perseus/src/util/sizing-utils").SizeClass;
3786
3786
  }): string;
3787
+ defaultExponentialCoords(props: {
3788
+ step: [number, number];
3789
+ gridStep?: [x: number, y: number];
3790
+ snapStep?: [x: number, y: number];
3791
+ backgroundImage?: PerseusImageBackground;
3792
+ markings: MarkingsType;
3793
+ labels: string[];
3794
+ labelLocation: AxisLabelLocation;
3795
+ showProtractor: boolean;
3796
+ showRuler?: boolean;
3797
+ showTooltips?: boolean;
3798
+ rulerLabel?: string;
3799
+ rulerTicks?: number;
3800
+ range: import("@khanacademy/perseus-core").GraphRange;
3801
+ showAxisArrows: ShowAxisArrows;
3802
+ graph: PerseusGraphType;
3803
+ correct?: PerseusGraphType;
3804
+ lockedFigures: LockedFigure[];
3805
+ fullGraphAriaLabel?: string;
3806
+ fullGraphAriaDescription?: string;
3807
+ } & {
3808
+ trackInteraction: (extraData?: Empty | undefined) => void;
3809
+ widgetId: string;
3810
+ widgetIndex: number;
3811
+ alignment: string | null | undefined;
3812
+ static: boolean | null | undefined;
3813
+ problemNum: number | null | undefined;
3814
+ apiOptions: Readonly<Readonly<{
3815
+ isArticle?: boolean;
3816
+ onFocusChange?: (newFocusPath: import("@khanacademy/perseus").FocusPath, oldFocusPath: import("@khanacademy/perseus").FocusPath, keypadHeight?: number, focusedElement?: HTMLElement) => unknown;
3817
+ showAlignmentOptions?: boolean;
3818
+ readOnly?: boolean;
3819
+ editingDisabled?: boolean;
3820
+ answerableCallback?: (arg1: boolean) => unknown;
3821
+ getAnotherHint?: () => unknown;
3822
+ interactionCallback?: (widgetData: {
3823
+ [widgetId: string]: any;
3824
+ }) => void;
3825
+ imagePlaceholder?: React.ReactNode;
3826
+ widgetPlaceholder?: React.ReactNode;
3827
+ baseElements?: {
3828
+ Link: React.ComponentType<any>;
3829
+ };
3830
+ imagePreloader?: (dimensions: import("../../../../perseus/src/types").Dimensions) => React.ReactNode;
3831
+ trackInteraction?: (args: {
3832
+ type: string;
3833
+ id: string;
3834
+ correct?: boolean;
3835
+ } & Partial<import("../../../../perseus/src/types").TrackingGradedGroupExtraArguments> & Partial<{
3836
+ visible: number;
3837
+ }>) => void;
3838
+ customKeypad?: boolean;
3839
+ nativeKeypadProxy?: (blur: () => void) => import("@khanacademy/math-input").KeypadAPI;
3840
+ isMobile?: boolean;
3841
+ isMobileApp?: boolean;
3842
+ setDrawingAreaAvailable?: (arg1: boolean) => unknown;
3843
+ hintProgressColor?: string;
3844
+ canScrollPage?: boolean;
3845
+ editorChangeDelay?: number;
3846
+ flags?: Record<"new-radio-widget" | "image-widget-upgrade-gif-controls" | "image-widget-upgrade-scale" | "interactive-graph-absolute-value" | "interactive-graph-tangent" | "interactive-graph-logarithm" | "interactive-graph-exponent" | "interactive-graph-vector", boolean>;
3847
+ }> & {
3848
+ baseElements: NonNullable<import("@khanacademy/perseus").APIOptions["baseElements"]>;
3849
+ canScrollPage: NonNullable<import("@khanacademy/perseus").APIOptions["canScrollPage"]>;
3850
+ editorChangeDelay: NonNullable<import("@khanacademy/perseus").APIOptions["editorChangeDelay"]>;
3851
+ isArticle: NonNullable<import("@khanacademy/perseus").APIOptions["isArticle"]>;
3852
+ isMobile: NonNullable<import("@khanacademy/perseus").APIOptions["isMobile"]>;
3853
+ isMobileApp: NonNullable<import("@khanacademy/perseus").APIOptions["isMobileApp"]>;
3854
+ editingDisabled: NonNullable<import("@khanacademy/perseus").APIOptions["editingDisabled"]>;
3855
+ onFocusChange: NonNullable<import("@khanacademy/perseus").APIOptions["onFocusChange"]>;
3856
+ readOnly: NonNullable<import("@khanacademy/perseus").APIOptions["readOnly"]>;
3857
+ setDrawingAreaAvailable: NonNullable<import("@khanacademy/perseus").APIOptions["setDrawingAreaAvailable"]>;
3858
+ showAlignmentOptions: NonNullable<import("@khanacademy/perseus").APIOptions["showAlignmentOptions"]>;
3859
+ }>;
3860
+ keypadElement?: any;
3861
+ questionCompleted?: boolean;
3862
+ onFocus: (blurPath: import("@khanacademy/perseus").FocusPath) => void;
3863
+ onBlur: (blurPath: import("@khanacademy/perseus").FocusPath) => void;
3864
+ findWidgets: (criterion: import("../../../../perseus/src/types").FilterCriterion) => ReadonlyArray<import("../../../../perseus/src/types").Widget>;
3865
+ reviewMode: boolean;
3866
+ showSolutions?: import("@khanacademy/perseus-core").ShowSolutions;
3867
+ handleUserInput: (newUserInput: PerseusGraphType, cb?: () => void, silent?: boolean) => void;
3868
+ userInput: PerseusGraphType;
3869
+ linterContext: import("@khanacademy/perseus-linter").LinterContextProps;
3870
+ containerSizeClass: import("../../../../perseus/src/util/sizing-utils").SizeClass;
3871
+ }): import("@khanacademy/perseus").Coord[];
3872
+ getExponentialEquationString(props: {
3873
+ step: [number, number];
3874
+ gridStep?: [x: number, y: number];
3875
+ snapStep?: [x: number, y: number];
3876
+ backgroundImage?: PerseusImageBackground;
3877
+ markings: MarkingsType;
3878
+ labels: string[];
3879
+ labelLocation: AxisLabelLocation;
3880
+ showProtractor: boolean;
3881
+ showRuler?: boolean;
3882
+ showTooltips?: boolean;
3883
+ rulerLabel?: string;
3884
+ rulerTicks?: number;
3885
+ range: import("@khanacademy/perseus-core").GraphRange;
3886
+ showAxisArrows: ShowAxisArrows;
3887
+ graph: PerseusGraphType;
3888
+ correct?: PerseusGraphType;
3889
+ lockedFigures: LockedFigure[];
3890
+ fullGraphAriaLabel?: string;
3891
+ fullGraphAriaDescription?: string;
3892
+ } & {
3893
+ trackInteraction: (extraData?: Empty | undefined) => void;
3894
+ widgetId: string;
3895
+ widgetIndex: number;
3896
+ alignment: string | null | undefined;
3897
+ static: boolean | null | undefined;
3898
+ problemNum: number | null | undefined;
3899
+ apiOptions: Readonly<Readonly<{
3900
+ isArticle?: boolean;
3901
+ onFocusChange?: (newFocusPath: import("@khanacademy/perseus").FocusPath, oldFocusPath: import("@khanacademy/perseus").FocusPath, keypadHeight?: number, focusedElement?: HTMLElement) => unknown;
3902
+ showAlignmentOptions?: boolean;
3903
+ readOnly?: boolean;
3904
+ editingDisabled?: boolean;
3905
+ answerableCallback?: (arg1: boolean) => unknown;
3906
+ getAnotherHint?: () => unknown;
3907
+ interactionCallback?: (widgetData: {
3908
+ [widgetId: string]: any;
3909
+ }) => void;
3910
+ imagePlaceholder?: React.ReactNode;
3911
+ widgetPlaceholder?: React.ReactNode;
3912
+ baseElements?: {
3913
+ Link: React.ComponentType<any>;
3914
+ };
3915
+ imagePreloader?: (dimensions: import("../../../../perseus/src/types").Dimensions) => React.ReactNode;
3916
+ trackInteraction?: (args: {
3917
+ type: string;
3918
+ id: string;
3919
+ correct?: boolean;
3920
+ } & Partial<import("../../../../perseus/src/types").TrackingGradedGroupExtraArguments> & Partial<{
3921
+ visible: number;
3922
+ }>) => void;
3923
+ customKeypad?: boolean;
3924
+ nativeKeypadProxy?: (blur: () => void) => import("@khanacademy/math-input").KeypadAPI;
3925
+ isMobile?: boolean;
3926
+ isMobileApp?: boolean;
3927
+ setDrawingAreaAvailable?: (arg1: boolean) => unknown;
3928
+ hintProgressColor?: string;
3929
+ canScrollPage?: boolean;
3930
+ editorChangeDelay?: number;
3931
+ flags?: Record<"new-radio-widget" | "image-widget-upgrade-gif-controls" | "image-widget-upgrade-scale" | "interactive-graph-absolute-value" | "interactive-graph-tangent" | "interactive-graph-logarithm" | "interactive-graph-exponent" | "interactive-graph-vector", boolean>;
3932
+ }> & {
3933
+ baseElements: NonNullable<import("@khanacademy/perseus").APIOptions["baseElements"]>;
3934
+ canScrollPage: NonNullable<import("@khanacademy/perseus").APIOptions["canScrollPage"]>;
3935
+ editorChangeDelay: NonNullable<import("@khanacademy/perseus").APIOptions["editorChangeDelay"]>;
3936
+ isArticle: NonNullable<import("@khanacademy/perseus").APIOptions["isArticle"]>;
3937
+ isMobile: NonNullable<import("@khanacademy/perseus").APIOptions["isMobile"]>;
3938
+ isMobileApp: NonNullable<import("@khanacademy/perseus").APIOptions["isMobileApp"]>;
3939
+ editingDisabled: NonNullable<import("@khanacademy/perseus").APIOptions["editingDisabled"]>;
3940
+ onFocusChange: NonNullable<import("@khanacademy/perseus").APIOptions["onFocusChange"]>;
3941
+ readOnly: NonNullable<import("@khanacademy/perseus").APIOptions["readOnly"]>;
3942
+ setDrawingAreaAvailable: NonNullable<import("@khanacademy/perseus").APIOptions["setDrawingAreaAvailable"]>;
3943
+ showAlignmentOptions: NonNullable<import("@khanacademy/perseus").APIOptions["showAlignmentOptions"]>;
3944
+ }>;
3945
+ keypadElement?: any;
3946
+ questionCompleted?: boolean;
3947
+ onFocus: (blurPath: import("@khanacademy/perseus").FocusPath) => void;
3948
+ onBlur: (blurPath: import("@khanacademy/perseus").FocusPath) => void;
3949
+ findWidgets: (criterion: import("../../../../perseus/src/types").FilterCriterion) => ReadonlyArray<import("../../../../perseus/src/types").Widget>;
3950
+ reviewMode: boolean;
3951
+ showSolutions?: import("@khanacademy/perseus-core").ShowSolutions;
3952
+ handleUserInput: (newUserInput: PerseusGraphType, cb?: () => void, silent?: boolean) => void;
3953
+ userInput: PerseusGraphType;
3954
+ linterContext: import("@khanacademy/perseus-linter").LinterContextProps;
3955
+ containerSizeClass: import("../../../../perseus/src/util/sizing-utils").SizeClass;
3956
+ }): string;
3957
+ getAbsoluteValueEquationString(props: {
3958
+ step: [number, number];
3959
+ gridStep?: [x: number, y: number];
3960
+ snapStep?: [x: number, y: number];
3961
+ backgroundImage?: PerseusImageBackground;
3962
+ markings: MarkingsType;
3963
+ labels: string[];
3964
+ labelLocation: AxisLabelLocation;
3965
+ showProtractor: boolean;
3966
+ showRuler?: boolean;
3967
+ showTooltips?: boolean;
3968
+ rulerLabel?: string;
3969
+ rulerTicks?: number;
3970
+ range: import("@khanacademy/perseus-core").GraphRange;
3971
+ showAxisArrows: ShowAxisArrows;
3972
+ graph: PerseusGraphType;
3973
+ correct?: PerseusGraphType;
3974
+ lockedFigures: LockedFigure[];
3975
+ fullGraphAriaLabel?: string;
3976
+ fullGraphAriaDescription?: string;
3977
+ } & {
3978
+ trackInteraction: (extraData?: Empty | undefined) => void;
3979
+ widgetId: string;
3980
+ widgetIndex: number;
3981
+ alignment: string | null | undefined;
3982
+ static: boolean | null | undefined;
3983
+ problemNum: number | null | undefined;
3984
+ apiOptions: Readonly<Readonly<{
3985
+ isArticle?: boolean;
3986
+ onFocusChange?: (newFocusPath: import("@khanacademy/perseus").FocusPath, oldFocusPath: import("@khanacademy/perseus").FocusPath, keypadHeight?: number, focusedElement?: HTMLElement) => unknown;
3987
+ showAlignmentOptions?: boolean;
3988
+ readOnly?: boolean;
3989
+ editingDisabled?: boolean;
3990
+ answerableCallback?: (arg1: boolean) => unknown;
3991
+ getAnotherHint?: () => unknown;
3992
+ interactionCallback?: (widgetData: {
3993
+ [widgetId: string]: any;
3994
+ }) => void;
3995
+ imagePlaceholder?: React.ReactNode;
3996
+ widgetPlaceholder?: React.ReactNode;
3997
+ baseElements?: {
3998
+ Link: React.ComponentType<any>;
3999
+ };
4000
+ imagePreloader?: (dimensions: import("../../../../perseus/src/types").Dimensions) => React.ReactNode;
4001
+ trackInteraction?: (args: {
4002
+ type: string;
4003
+ id: string;
4004
+ correct?: boolean;
4005
+ } & Partial<import("../../../../perseus/src/types").TrackingGradedGroupExtraArguments> & Partial<{
4006
+ visible: number;
4007
+ }>) => void;
4008
+ customKeypad?: boolean;
4009
+ nativeKeypadProxy?: (blur: () => void) => import("@khanacademy/math-input").KeypadAPI;
4010
+ isMobile?: boolean;
4011
+ isMobileApp?: boolean;
4012
+ setDrawingAreaAvailable?: (arg1: boolean) => unknown;
4013
+ hintProgressColor?: string;
4014
+ canScrollPage?: boolean;
4015
+ editorChangeDelay?: number;
4016
+ flags?: Record<"new-radio-widget" | "image-widget-upgrade-gif-controls" | "image-widget-upgrade-scale" | "interactive-graph-absolute-value" | "interactive-graph-tangent" | "interactive-graph-logarithm" | "interactive-graph-exponent" | "interactive-graph-vector", boolean>;
4017
+ }> & {
4018
+ baseElements: NonNullable<import("@khanacademy/perseus").APIOptions["baseElements"]>;
4019
+ canScrollPage: NonNullable<import("@khanacademy/perseus").APIOptions["canScrollPage"]>;
4020
+ editorChangeDelay: NonNullable<import("@khanacademy/perseus").APIOptions["editorChangeDelay"]>;
4021
+ isArticle: NonNullable<import("@khanacademy/perseus").APIOptions["isArticle"]>;
4022
+ isMobile: NonNullable<import("@khanacademy/perseus").APIOptions["isMobile"]>;
4023
+ isMobileApp: NonNullable<import("@khanacademy/perseus").APIOptions["isMobileApp"]>;
4024
+ editingDisabled: NonNullable<import("@khanacademy/perseus").APIOptions["editingDisabled"]>;
4025
+ onFocusChange: NonNullable<import("@khanacademy/perseus").APIOptions["onFocusChange"]>;
4026
+ readOnly: NonNullable<import("@khanacademy/perseus").APIOptions["readOnly"]>;
4027
+ setDrawingAreaAvailable: NonNullable<import("@khanacademy/perseus").APIOptions["setDrawingAreaAvailable"]>;
4028
+ showAlignmentOptions: NonNullable<import("@khanacademy/perseus").APIOptions["showAlignmentOptions"]>;
4029
+ }>;
4030
+ keypadElement?: any;
4031
+ questionCompleted?: boolean;
4032
+ onFocus: (blurPath: import("@khanacademy/perseus").FocusPath) => void;
4033
+ onBlur: (blurPath: import("@khanacademy/perseus").FocusPath) => void;
4034
+ findWidgets: (criterion: import("../../../../perseus/src/types").FilterCriterion) => ReadonlyArray<import("../../../../perseus/src/types").Widget>;
4035
+ reviewMode: boolean;
4036
+ showSolutions?: import("@khanacademy/perseus-core").ShowSolutions;
4037
+ handleUserInput: (newUserInput: PerseusGraphType, cb?: () => void, silent?: boolean) => void;
4038
+ userInput: PerseusGraphType;
4039
+ linterContext: import("@khanacademy/perseus-linter").LinterContextProps;
4040
+ containerSizeClass: import("../../../../perseus/src/util/sizing-utils").SizeClass;
4041
+ }): string;
4042
+ getCurrentTangentCoefficients(props: {
4043
+ step: [number, number];
4044
+ gridStep?: [x: number, y: number];
4045
+ snapStep?: [x: number, y: number];
4046
+ backgroundImage?: PerseusImageBackground;
4047
+ markings: MarkingsType;
4048
+ labels: string[];
4049
+ labelLocation: AxisLabelLocation;
4050
+ showProtractor: boolean;
4051
+ showRuler?: boolean;
4052
+ showTooltips?: boolean;
4053
+ rulerLabel?: string;
4054
+ rulerTicks?: number;
4055
+ range: import("@khanacademy/perseus-core").GraphRange;
4056
+ showAxisArrows: ShowAxisArrows;
4057
+ graph: PerseusGraphType;
4058
+ correct?: PerseusGraphType;
4059
+ lockedFigures: LockedFigure[];
4060
+ fullGraphAriaLabel?: string;
4061
+ fullGraphAriaDescription?: string;
4062
+ } & {
4063
+ trackInteraction: (extraData?: Empty | undefined) => void;
4064
+ widgetId: string;
4065
+ widgetIndex: number;
4066
+ alignment: string | null | undefined;
4067
+ static: boolean | null | undefined;
4068
+ problemNum: number | null | undefined;
4069
+ apiOptions: Readonly<Readonly<{
4070
+ isArticle?: boolean;
4071
+ onFocusChange?: (newFocusPath: import("@khanacademy/perseus").FocusPath, oldFocusPath: import("@khanacademy/perseus").FocusPath, keypadHeight?: number, focusedElement?: HTMLElement) => unknown;
4072
+ showAlignmentOptions?: boolean;
4073
+ readOnly?: boolean;
4074
+ editingDisabled?: boolean;
4075
+ answerableCallback?: (arg1: boolean) => unknown;
4076
+ getAnotherHint?: () => unknown;
4077
+ interactionCallback?: (widgetData: {
4078
+ [widgetId: string]: any;
4079
+ }) => void;
4080
+ imagePlaceholder?: React.ReactNode;
4081
+ widgetPlaceholder?: React.ReactNode;
4082
+ baseElements?: {
4083
+ Link: React.ComponentType<any>;
4084
+ };
4085
+ imagePreloader?: (dimensions: import("../../../../perseus/src/types").Dimensions) => React.ReactNode;
4086
+ trackInteraction?: (args: {
4087
+ type: string;
4088
+ id: string;
4089
+ correct?: boolean;
4090
+ } & Partial<import("../../../../perseus/src/types").TrackingGradedGroupExtraArguments> & Partial<{
4091
+ visible: number;
4092
+ }>) => void;
4093
+ customKeypad?: boolean;
4094
+ nativeKeypadProxy?: (blur: () => void) => import("@khanacademy/math-input").KeypadAPI;
4095
+ isMobile?: boolean;
4096
+ isMobileApp?: boolean;
4097
+ setDrawingAreaAvailable?: (arg1: boolean) => unknown;
4098
+ hintProgressColor?: string;
4099
+ canScrollPage?: boolean;
4100
+ editorChangeDelay?: number;
4101
+ flags?: Record<"new-radio-widget" | "image-widget-upgrade-gif-controls" | "image-widget-upgrade-scale" | "interactive-graph-absolute-value" | "interactive-graph-tangent" | "interactive-graph-logarithm" | "interactive-graph-exponent" | "interactive-graph-vector", boolean>;
4102
+ }> & {
4103
+ baseElements: NonNullable<import("@khanacademy/perseus").APIOptions["baseElements"]>;
4104
+ canScrollPage: NonNullable<import("@khanacademy/perseus").APIOptions["canScrollPage"]>;
4105
+ editorChangeDelay: NonNullable<import("@khanacademy/perseus").APIOptions["editorChangeDelay"]>;
4106
+ isArticle: NonNullable<import("@khanacademy/perseus").APIOptions["isArticle"]>;
4107
+ isMobile: NonNullable<import("@khanacademy/perseus").APIOptions["isMobile"]>;
4108
+ isMobileApp: NonNullable<import("@khanacademy/perseus").APIOptions["isMobileApp"]>;
4109
+ editingDisabled: NonNullable<import("@khanacademy/perseus").APIOptions["editingDisabled"]>;
4110
+ onFocusChange: NonNullable<import("@khanacademy/perseus").APIOptions["onFocusChange"]>;
4111
+ readOnly: NonNullable<import("@khanacademy/perseus").APIOptions["readOnly"]>;
4112
+ setDrawingAreaAvailable: NonNullable<import("@khanacademy/perseus").APIOptions["setDrawingAreaAvailable"]>;
4113
+ showAlignmentOptions: NonNullable<import("@khanacademy/perseus").APIOptions["showAlignmentOptions"]>;
4114
+ }>;
4115
+ keypadElement?: any;
4116
+ questionCompleted?: boolean;
4117
+ onFocus: (blurPath: import("@khanacademy/perseus").FocusPath) => void;
4118
+ onBlur: (blurPath: import("@khanacademy/perseus").FocusPath) => void;
4119
+ findWidgets: (criterion: import("../../../../perseus/src/types").FilterCriterion) => ReadonlyArray<import("../../../../perseus/src/types").Widget>;
4120
+ reviewMode: boolean;
4121
+ showSolutions?: import("@khanacademy/perseus-core").ShowSolutions;
4122
+ handleUserInput: (newUserInput: PerseusGraphType, cb?: () => void, silent?: boolean) => void;
4123
+ userInput: PerseusGraphType;
4124
+ linterContext: import("@khanacademy/perseus-linter").LinterContextProps;
4125
+ containerSizeClass: import("../../../../perseus/src/util/sizing-utils").SizeClass;
4126
+ }): import("@khanacademy/kmath").TangentCoefficient;
4127
+ defaultTangentCoords(props: {
4128
+ step: [number, number];
4129
+ gridStep?: [x: number, y: number];
4130
+ snapStep?: [x: number, y: number];
4131
+ backgroundImage?: PerseusImageBackground;
4132
+ markings: MarkingsType;
4133
+ labels: string[];
4134
+ labelLocation: AxisLabelLocation;
4135
+ showProtractor: boolean;
4136
+ showRuler?: boolean;
4137
+ showTooltips?: boolean;
4138
+ rulerLabel?: string;
4139
+ rulerTicks?: number;
4140
+ range: import("@khanacademy/perseus-core").GraphRange;
4141
+ showAxisArrows: ShowAxisArrows;
4142
+ graph: PerseusGraphType;
4143
+ correct?: PerseusGraphType;
4144
+ lockedFigures: LockedFigure[];
4145
+ fullGraphAriaLabel?: string;
4146
+ fullGraphAriaDescription?: string;
4147
+ } & {
4148
+ trackInteraction: (extraData?: Empty | undefined) => void;
4149
+ widgetId: string;
4150
+ widgetIndex: number;
4151
+ alignment: string | null | undefined;
4152
+ static: boolean | null | undefined;
4153
+ problemNum: number | null | undefined;
4154
+ apiOptions: Readonly<Readonly<{
4155
+ isArticle?: boolean;
4156
+ onFocusChange?: (newFocusPath: import("@khanacademy/perseus").FocusPath, oldFocusPath: import("@khanacademy/perseus").FocusPath, keypadHeight?: number, focusedElement?: HTMLElement) => unknown;
4157
+ showAlignmentOptions?: boolean;
4158
+ readOnly?: boolean;
4159
+ editingDisabled?: boolean;
4160
+ answerableCallback?: (arg1: boolean) => unknown;
4161
+ getAnotherHint?: () => unknown;
4162
+ interactionCallback?: (widgetData: {
4163
+ [widgetId: string]: any;
4164
+ }) => void;
4165
+ imagePlaceholder?: React.ReactNode;
4166
+ widgetPlaceholder?: React.ReactNode;
4167
+ baseElements?: {
4168
+ Link: React.ComponentType<any>;
4169
+ };
4170
+ imagePreloader?: (dimensions: import("../../../../perseus/src/types").Dimensions) => React.ReactNode;
4171
+ trackInteraction?: (args: {
4172
+ type: string;
4173
+ id: string;
4174
+ correct?: boolean;
4175
+ } & Partial<import("../../../../perseus/src/types").TrackingGradedGroupExtraArguments> & Partial<{
4176
+ visible: number;
4177
+ }>) => void;
4178
+ customKeypad?: boolean;
4179
+ nativeKeypadProxy?: (blur: () => void) => import("@khanacademy/math-input").KeypadAPI;
4180
+ isMobile?: boolean;
4181
+ isMobileApp?: boolean;
4182
+ setDrawingAreaAvailable?: (arg1: boolean) => unknown;
4183
+ hintProgressColor?: string;
4184
+ canScrollPage?: boolean;
4185
+ editorChangeDelay?: number;
4186
+ flags?: Record<"new-radio-widget" | "image-widget-upgrade-gif-controls" | "image-widget-upgrade-scale" | "interactive-graph-absolute-value" | "interactive-graph-tangent" | "interactive-graph-logarithm" | "interactive-graph-exponent" | "interactive-graph-vector", boolean>;
4187
+ }> & {
4188
+ baseElements: NonNullable<import("@khanacademy/perseus").APIOptions["baseElements"]>;
4189
+ canScrollPage: NonNullable<import("@khanacademy/perseus").APIOptions["canScrollPage"]>;
4190
+ editorChangeDelay: NonNullable<import("@khanacademy/perseus").APIOptions["editorChangeDelay"]>;
4191
+ isArticle: NonNullable<import("@khanacademy/perseus").APIOptions["isArticle"]>;
4192
+ isMobile: NonNullable<import("@khanacademy/perseus").APIOptions["isMobile"]>;
4193
+ isMobileApp: NonNullable<import("@khanacademy/perseus").APIOptions["isMobileApp"]>;
4194
+ editingDisabled: NonNullable<import("@khanacademy/perseus").APIOptions["editingDisabled"]>;
4195
+ onFocusChange: NonNullable<import("@khanacademy/perseus").APIOptions["onFocusChange"]>;
4196
+ readOnly: NonNullable<import("@khanacademy/perseus").APIOptions["readOnly"]>;
4197
+ setDrawingAreaAvailable: NonNullable<import("@khanacademy/perseus").APIOptions["setDrawingAreaAvailable"]>;
4198
+ showAlignmentOptions: NonNullable<import("@khanacademy/perseus").APIOptions["showAlignmentOptions"]>;
4199
+ }>;
4200
+ keypadElement?: any;
4201
+ questionCompleted?: boolean;
4202
+ onFocus: (blurPath: import("@khanacademy/perseus").FocusPath) => void;
4203
+ onBlur: (blurPath: import("@khanacademy/perseus").FocusPath) => void;
4204
+ findWidgets: (criterion: import("../../../../perseus/src/types").FilterCriterion) => ReadonlyArray<import("../../../../perseus/src/types").Widget>;
4205
+ reviewMode: boolean;
4206
+ showSolutions?: import("@khanacademy/perseus-core").ShowSolutions;
4207
+ handleUserInput: (newUserInput: PerseusGraphType, cb?: () => void, silent?: boolean) => void;
4208
+ userInput: PerseusGraphType;
4209
+ linterContext: import("@khanacademy/perseus-linter").LinterContextProps;
4210
+ containerSizeClass: import("../../../../perseus/src/util/sizing-utils").SizeClass;
4211
+ }): import("@khanacademy/perseus").Coord[];
4212
+ getTangentEquationString(props: {
4213
+ step: [number, number];
4214
+ gridStep?: [x: number, y: number];
4215
+ snapStep?: [x: number, y: number];
4216
+ backgroundImage?: PerseusImageBackground;
4217
+ markings: MarkingsType;
4218
+ labels: string[];
4219
+ labelLocation: AxisLabelLocation;
4220
+ showProtractor: boolean;
4221
+ showRuler?: boolean;
4222
+ showTooltips?: boolean;
4223
+ rulerLabel?: string;
4224
+ rulerTicks?: number;
4225
+ range: import("@khanacademy/perseus-core").GraphRange;
4226
+ showAxisArrows: ShowAxisArrows;
4227
+ graph: PerseusGraphType;
4228
+ correct?: PerseusGraphType;
4229
+ lockedFigures: LockedFigure[];
4230
+ fullGraphAriaLabel?: string;
4231
+ fullGraphAriaDescription?: string;
4232
+ } & {
4233
+ trackInteraction: (extraData?: Empty | undefined) => void;
4234
+ widgetId: string;
4235
+ widgetIndex: number;
4236
+ alignment: string | null | undefined;
4237
+ static: boolean | null | undefined;
4238
+ problemNum: number | null | undefined;
4239
+ apiOptions: Readonly<Readonly<{
4240
+ isArticle?: boolean;
4241
+ onFocusChange?: (newFocusPath: import("@khanacademy/perseus").FocusPath, oldFocusPath: import("@khanacademy/perseus").FocusPath, keypadHeight?: number, focusedElement?: HTMLElement) => unknown;
4242
+ showAlignmentOptions?: boolean;
4243
+ readOnly?: boolean;
4244
+ editingDisabled?: boolean;
4245
+ answerableCallback?: (arg1: boolean) => unknown;
4246
+ getAnotherHint?: () => unknown;
4247
+ interactionCallback?: (widgetData: {
4248
+ [widgetId: string]: any;
4249
+ }) => void;
4250
+ imagePlaceholder?: React.ReactNode;
4251
+ widgetPlaceholder?: React.ReactNode;
4252
+ baseElements?: {
4253
+ Link: React.ComponentType<any>;
4254
+ };
4255
+ imagePreloader?: (dimensions: import("../../../../perseus/src/types").Dimensions) => React.ReactNode;
4256
+ trackInteraction?: (args: {
4257
+ type: string;
4258
+ id: string;
4259
+ correct?: boolean;
4260
+ } & Partial<import("../../../../perseus/src/types").TrackingGradedGroupExtraArguments> & Partial<{
4261
+ visible: number;
4262
+ }>) => void;
4263
+ customKeypad?: boolean;
4264
+ nativeKeypadProxy?: (blur: () => void) => import("@khanacademy/math-input").KeypadAPI;
4265
+ isMobile?: boolean;
4266
+ isMobileApp?: boolean;
4267
+ setDrawingAreaAvailable?: (arg1: boolean) => unknown;
4268
+ hintProgressColor?: string;
4269
+ canScrollPage?: boolean;
4270
+ editorChangeDelay?: number;
4271
+ flags?: Record<"new-radio-widget" | "image-widget-upgrade-gif-controls" | "image-widget-upgrade-scale" | "interactive-graph-absolute-value" | "interactive-graph-tangent" | "interactive-graph-logarithm" | "interactive-graph-exponent" | "interactive-graph-vector", boolean>;
4272
+ }> & {
4273
+ baseElements: NonNullable<import("@khanacademy/perseus").APIOptions["baseElements"]>;
4274
+ canScrollPage: NonNullable<import("@khanacademy/perseus").APIOptions["canScrollPage"]>;
4275
+ editorChangeDelay: NonNullable<import("@khanacademy/perseus").APIOptions["editorChangeDelay"]>;
4276
+ isArticle: NonNullable<import("@khanacademy/perseus").APIOptions["isArticle"]>;
4277
+ isMobile: NonNullable<import("@khanacademy/perseus").APIOptions["isMobile"]>;
4278
+ isMobileApp: NonNullable<import("@khanacademy/perseus").APIOptions["isMobileApp"]>;
4279
+ editingDisabled: NonNullable<import("@khanacademy/perseus").APIOptions["editingDisabled"]>;
4280
+ onFocusChange: NonNullable<import("@khanacademy/perseus").APIOptions["onFocusChange"]>;
4281
+ readOnly: NonNullable<import("@khanacademy/perseus").APIOptions["readOnly"]>;
4282
+ setDrawingAreaAvailable: NonNullable<import("@khanacademy/perseus").APIOptions["setDrawingAreaAvailable"]>;
4283
+ showAlignmentOptions: NonNullable<import("@khanacademy/perseus").APIOptions["showAlignmentOptions"]>;
4284
+ }>;
4285
+ keypadElement?: any;
4286
+ questionCompleted?: boolean;
4287
+ onFocus: (blurPath: import("@khanacademy/perseus").FocusPath) => void;
4288
+ onBlur: (blurPath: import("@khanacademy/perseus").FocusPath) => void;
4289
+ findWidgets: (criterion: import("../../../../perseus/src/types").FilterCriterion) => ReadonlyArray<import("../../../../perseus/src/types").Widget>;
4290
+ reviewMode: boolean;
4291
+ showSolutions?: import("@khanacademy/perseus-core").ShowSolutions;
4292
+ handleUserInput: (newUserInput: PerseusGraphType, cb?: () => void, silent?: boolean) => void;
4293
+ userInput: PerseusGraphType;
4294
+ linterContext: import("@khanacademy/perseus-linter").LinterContextProps;
4295
+ containerSizeClass: import("../../../../perseus/src/util/sizing-utils").SizeClass;
4296
+ }): string;
3787
4297
  getCircleEquationString(props: {
3788
4298
  step: [number, number];
3789
4299
  gridStep?: [x: number, y: number];
@@ -0,0 +1,12 @@
1
+ import * as React from "react";
2
+ import type { Coord } from "@khanacademy/perseus";
3
+ type ExponentialStartCoords = {
4
+ coords: [Coord, Coord];
5
+ asymptote: number;
6
+ };
7
+ type Props = {
8
+ startCoords: ExponentialStartCoords;
9
+ onChange: (startCoords: ExponentialStartCoords) => void;
10
+ };
11
+ declare const StartCoordsExponential: (props: Props) => React.JSX.Element;
12
+ export default StartCoordsExponential;
@@ -0,0 +1,9 @@
1
+ import * as React from "react";
2
+ import type { Coord } from "@khanacademy/perseus";
3
+ type TangentCoords = [Coord, Coord];
4
+ type Props = {
5
+ startCoords: TangentCoords;
6
+ onChange: (startCoords: TangentCoords) => void;
7
+ };
8
+ declare const StartCoordsTangent: (props: Props) => React.JSX.Element;
9
+ export default StartCoordsTangent;
@@ -1,5 +1,7 @@
1
1
  import type { PerseusGraphType } from "@khanacademy/perseus-core";
2
2
  type GraphTypesThatHaveStartCoords = {
3
+ type: "absolute-value";
4
+ } | {
3
5
  type: "angle";
4
6
  } | {
5
7
  type: "circle";
@@ -19,6 +21,10 @@ type GraphTypesThatHaveStartCoords = {
19
21
  type: "segment";
20
22
  } | {
21
23
  type: "sinusoid";
24
+ } | {
25
+ type: "exponential";
26
+ } | {
27
+ type: "tangent";
22
28
  };
23
29
  export type StartCoords = Extract<PerseusGraphType, GraphTypesThatHaveStartCoords>["startCoords"];
24
30
  export {};
@@ -3,6 +3,7 @@ import type { Range, PerseusGraphType, Coord } from "@khanacademy/perseus-core";
3
3
  export declare function getStartCoords(graph: PerseusGraphType): StartCoords;
4
4
  export declare function getDefaultGraphStartCoords(graph: PerseusGraphType, range: [x: Range, y: Range], step: [x: number, y: number]): StartCoords;
5
5
  export declare const getSinusoidEquation: (startCoords: [Coord, Coord]) => string;
6
+ export declare const getTangentEquation: (startCoords: [Coord, Coord]) => string;
6
7
  export declare const getQuadraticEquation: (startCoords: [Coord, Coord, Coord]) => string;
7
8
  export declare const getAngleEquation: (startCoords: [Coord, Coord, Coord], allowReflexAngles?: boolean) => string;
8
9
  export declare const shouldShowStartCoordsUI: (graph: PerseusGraphType, isStatic?: boolean) => boolean;
@@ -1,5 +1,4 @@
1
1
  import * as React from "react";
2
- import QuestionMarkers from "./question-markers";
3
2
  import type { PreferredPopoverDirection } from "./behavior";
4
3
  import type { APIOptions } from "@khanacademy/perseus";
5
4
  import type { PerseusLabelImageWidgetOptions, LabelImageDefaultWidgetOptions } from "@khanacademy/perseus-core";
@@ -24,7 +23,7 @@ type Props = {
24
23
  * knowledge by directly interacting with the image.
25
24
  */
26
25
  declare class LabelImageEditor extends React.Component<Props> {
27
- _questionMarkers: QuestionMarkers | null | undefined;
26
+ private _questionMarkers;
28
27
  static defaultProps: LabelImageDefaultWidgetOptions;
29
28
  static widgetName: "label-image";
30
29
  componentDidUpdate(prevProps: Props): void;