@khanacademy/perseus 63.0.0 → 63.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.
@@ -9,8 +9,7 @@ import * as React from "react";
9
9
  import { PerseusI18nContext } from "../../components/i18n-context";
10
10
  import Marker from "./marker";
11
11
  import type { DependencyProps } from "../../dependencies";
12
- import type { ChangeableProps } from "../../mixins/changeable";
13
- import type { APIOptions, Widget } from "../../types";
12
+ import type { Widget, WidgetProps } from "../../types";
14
13
  import type { LabelImagePromptJSON } from "../../widget-ai-utils/label-image/label-image-ai-utils";
15
14
  import type { InteractiveMarkerType, PerseusLabelImageWidgetOptions, PerseusLabelImageUserInput } from "@khanacademy/perseus-core";
16
15
  type PreferredPopoverDirection = "NONE" | "UP" | "DOWN" | "LEFT" | "RIGHT";
@@ -32,10 +31,13 @@ type Point = {
32
31
  x: number;
33
32
  y: number;
34
33
  };
35
- type LabelImageProps = ChangeableProps & DependencyProps & Omit<PerseusLabelImageWidgetOptions, "markers"> & {
36
- apiOptions: APIOptions;
37
- markers: ReadonlyArray<InteractiveMarkerType>;
38
- questionCompleted: boolean;
34
+ export type OptionalAnswersMarkerType = Omit<InteractiveMarkerType, "answers"> & {
35
+ answers?: string[];
36
+ };
37
+ type Options = Omit<PerseusLabelImageWidgetOptions, "markers"> & {
38
+ markers: ReadonlyArray<OptionalAnswersMarkerType>;
39
+ };
40
+ type Props = WidgetProps<Options> & DependencyProps & {
39
41
  preferredPopoverDirection?: PreferredPopoverDirection;
40
42
  };
41
43
  type LabelImageState = {
@@ -43,7 +45,7 @@ type LabelImageState = {
43
45
  markersInteracted: boolean;
44
46
  hideAnswers: boolean;
45
47
  };
46
- export declare class LabelImage extends React.Component<LabelImageProps, LabelImageState> implements Widget {
48
+ export declare class LabelImage extends React.Component<Props, LabelImageState> implements Widget {
47
49
  static contextType: React.Context<import("../../components/i18n-context").I18nContextType>;
48
50
  context: React.ContextType<typeof PerseusI18nContext>;
49
51
  _markers: Array<Marker | null | undefined>;
@@ -64,14 +66,18 @@ export declare class LabelImage extends React.Component<LabelImageProps, LabelIm
64
66
  * Given a cardinal navigation direction (in the x or y axis), return the
65
67
  * next marker index to visit.
66
68
  */
67
- static navigateToMarkerIndex(navigateDirection: Direction, markers: LabelImageProps["markers"], thisIndex: number): number;
68
- constructor(props: LabelImageProps);
69
+ static navigateToMarkerIndex(navigateDirection: Direction, markers: ReadonlyArray<{
70
+ x: number;
71
+ y: number;
72
+ showCorrectness?: "correct" | "incorrect";
73
+ }>, thisIndex: number): number;
74
+ constructor(props: Props);
69
75
  componentDidMount(): void;
70
76
  componentWillUnmount(): void;
71
77
  getUserInput(): PerseusLabelImageUserInput;
72
78
  getPromptJSON(): LabelImagePromptJSON;
73
79
  showRationalesForCurrentlySelectedChoices(): void;
74
- handleMarkerChange(index: number, marker: LabelImageProps["markers"][number]): void;
80
+ handleMarkerChange(index: number, marker: Props["markers"][number]): void;
75
81
  activateMarker(index: number, opened: boolean): void;
76
82
  handleMarkerKeyDown(index: number, e: React.KeyboardEvent): void;
77
83
  handleAnswerChoicesChangeForMarker(index: number, selection: ReadonlyArray<boolean>): void;
@@ -82,10 +88,9 @@ export declare class LabelImage extends React.Component<LabelImageProps, LabelIm
82
88
  declare const _default: {
83
89
  name: string;
84
90
  displayName: string;
85
- widget: React.ForwardRefExoticComponent<Omit<ChangeableProps & Partial<import("../..").PerseusDependenciesV2> & Omit<PerseusLabelImageWidgetOptions, "markers"> & {
86
- apiOptions: APIOptions;
87
- markers: ReadonlyArray<InteractiveMarkerType>;
88
- questionCompleted: boolean;
91
+ widget: React.ForwardRefExoticComponent<Omit<Omit<PerseusLabelImageWidgetOptions, "markers"> & {
92
+ markers: ReadonlyArray<OptionalAnswersMarkerType>;
93
+ } & import("../../types").UniversalWidgetProps<Empty, Empty> & Partial<import("../..").PerseusDependenciesV2> & {
89
94
  preferredPopoverDirection?: PreferredPopoverDirection;
90
95
  }, keyof import("../..").PerseusDependenciesV2> & React.RefAttributes<LabelImage>>;
91
96
  accessible: true;
@@ -5,17 +5,16 @@
5
5
  */
6
6
  import * as React from "react";
7
7
  import { PerseusI18nContext } from "../../components/i18n-context";
8
- import type { AnalyticsEventHandlerFn, InteractiveMarkerType } from "@khanacademy/perseus-core";
9
8
  import type { CSSProperties } from "aphrodite";
10
- type Props = InteractiveMarkerType & {
9
+ type Props = {
10
+ selected?: string[];
11
+ showCorrectness?: "correct" | "incorrect";
12
+ label: string;
11
13
  showSelected: boolean;
12
14
  showPulsate: boolean;
13
15
  answerSide: "top" | "bottom" | "left" | "right";
14
16
  answerStyles?: CSSProperties;
15
17
  showAnswer?: boolean;
16
- analytics?: {
17
- onAnalyticsEvent: AnalyticsEventHandlerFn;
18
- };
19
18
  focused: boolean;
20
19
  hovered: boolean;
21
20
  };
@@ -40,14 +40,12 @@ export declare const NumericInputComponent: React.ForwardRefExoticComponent<impo
40
40
  setDrawingAreaAvailable?: (arg1: boolean) => unknown;
41
41
  hintProgressColor?: string;
42
42
  canScrollPage?: boolean;
43
- crossOutEnabled?: boolean;
44
43
  editorChangeDelay?: number;
45
44
  flags?: Record<"new-radio-widget", boolean>;
46
45
  onWidgetStartProps?: (widgets: import("@khanacademy/perseus-core").PerseusWidgetsMap) => void;
47
46
  }> & {
48
47
  baseElements: NonNullable<import("../..").APIOptions["baseElements"]>;
49
48
  canScrollPage: NonNullable<import("../..").APIOptions["canScrollPage"]>;
50
- crossOutEnabled: NonNullable<import("../..").APIOptions["crossOutEnabled"]>;
51
49
  editorChangeDelay: NonNullable<import("../..").APIOptions["editorChangeDelay"]>;
52
50
  groupAnnotator: NonNullable<import("../..").APIOptions["groupAnnotator"]>;
53
51
  isArticle: NonNullable<import("../..").APIOptions["isArticle"]>;
@@ -3,7 +3,6 @@ import * as React from "react";
3
3
  import type { APIOptions } from "../../types";
4
4
  export type ChoiceType = {
5
5
  checked: boolean;
6
- crossedOut: boolean;
7
6
  content: React.ReactNode;
8
7
  rationale: React.ReactNode;
9
8
  hasRationale: boolean;
@@ -30,7 +29,6 @@ type Props = {
30
29
  reviewMode: boolean;
31
30
  onChange: (newValues: {
32
31
  checked: ReadonlyArray<boolean>;
33
- crossedOut: ReadonlyArray<boolean>;
34
32
  }) => void;
35
33
  registerFocusFunction?: (arg1: FocusFunction) => void;
36
34
  isLastUsedWidget?: boolean;
@@ -3,7 +3,6 @@ import * as React from "react";
3
3
  import type { APIOptions } from "../../types";
4
4
  export type ChoiceType = {
5
5
  checked: boolean;
6
- crossedOut: boolean;
7
6
  content: React.ReactNode;
8
7
  rationale: React.ReactNode;
9
8
  hasRationale: boolean;
@@ -29,7 +28,6 @@ type Props = {
29
28
  reviewMode: boolean;
30
29
  onChange: (newValues: {
31
30
  checked: ReadonlyArray<boolean>;
32
- crossedOut: ReadonlyArray<boolean>;
33
31
  }) => void;
34
32
  isLastUsedWidget?: boolean;
35
33
  };
@@ -1,3 +1,3 @@
1
1
  import type { PerseusStrings } from "../../strings";
2
- declare function getA11yText(letter: string, checked: boolean, correct: boolean, crossedOut: boolean, showCorrectness: boolean, strings: PerseusStrings): string;
2
+ declare function getA11yText(letter: string, checked: boolean, correct: boolean, showCorrectness: boolean, strings: PerseusStrings): string;
3
3
  export default getA11yText;
@@ -3,7 +3,7 @@ declare const styles: {
3
3
  readonly iconWrapper: {
4
4
  readonly display: "inline-block";
5
5
  readonly position: "relative";
6
- readonly backgroundColor: string;
6
+ readonly background: "linear-gradient(to right, white 10%, transparent)";
7
7
  };
8
8
  };
9
9
  export default styles;
@@ -2,7 +2,6 @@ import * as React from "react";
2
2
  type ChoiceIconProps = {
3
3
  pos: number;
4
4
  checked: boolean;
5
- crossedOut: boolean;
6
5
  focused: boolean;
7
6
  hovered: boolean;
8
7
  pressed: boolean;
@@ -2,7 +2,6 @@ import * as React from "react";
2
2
  type ChoiceIconProps = {
3
3
  pos: number;
4
4
  checked: boolean;
5
- crossedOut: boolean;
6
5
  focused: boolean;
7
6
  hovered: boolean;
8
7
  pressed: boolean;
@@ -12,11 +12,9 @@ export type ChoiceProps = {
12
12
  showRationale: boolean;
13
13
  showCorrectness: boolean;
14
14
  multipleSelect: boolean;
15
- crossedOut: boolean;
16
15
  previouslyAnswered?: boolean;
17
16
  onChange?: (newValues: {
18
17
  checked: boolean;
19
- crossedOut: boolean;
20
18
  }) => void;
21
19
  };
22
20
  declare const _default: React.ForwardRefExoticComponent<ChoiceProps & React.RefAttributes<HTMLButtonElement>>;
@@ -12,11 +12,9 @@ export type ChoiceProps = {
12
12
  showRationale: boolean;
13
13
  showCorrectness: boolean;
14
14
  multipleSelect: boolean;
15
- crossedOut: boolean;
16
15
  previouslyAnswered?: boolean;
17
16
  onChange?: (newValues: {
18
17
  checked: boolean;
19
- crossedOut: boolean;
20
18
  }) => void;
21
19
  };
22
20
  /**
@@ -9,7 +9,6 @@ import * as React from "react";
9
9
  type Props = {
10
10
  correct: boolean;
11
11
  checked: boolean;
12
- crossedOut: boolean;
13
12
  previouslyAnswered: boolean;
14
13
  reviewMode: boolean;
15
14
  };
@@ -9,7 +9,6 @@ import * as React from "react";
9
9
  type Props = {
10
10
  correct: boolean;
11
11
  checked: boolean;
12
- crossedOut: boolean;
13
12
  previouslyAnswered: boolean;
14
13
  reviewMode: boolean;
15
14
  };
@@ -20,5 +19,5 @@ type Props = {
20
19
  *
21
20
  * TODO(LEMS-2994): Clean up this file.
22
21
  */
23
- declare const OptionStatus: ({ checked, correct, crossedOut, previouslyAnswered, reviewMode, }: Props) => React.ReactElement | null;
22
+ declare const OptionStatus: ({ checked, correct, previouslyAnswered, reviewMode, }: Props) => React.ReactElement | null;
24
23
  export default OptionStatus;
@@ -34,7 +34,6 @@ declare class Radio extends React.Component<Props> implements Widget {
34
34
  registerFocusFunction(fun: FocusFunction): void;
35
35
  updateChoices: (newValueLists: Readonly<{
36
36
  checked: ReadonlyArray<boolean>;
37
- crossedOut: ReadonlyArray<boolean>;
38
37
  }>) => void;
39
38
  getUserInput(): PerseusRadioUserInput;
40
39
  getPromptJSON(): RadioPromptJSON;
@@ -14,7 +14,6 @@ export declare const getChoiceLetter: (pos: number, strings: PerseusStrings) =>
14
14
  interface GetOptionStatusTextProps {
15
15
  checked: boolean;
16
16
  correct: boolean;
17
- crossedOut: boolean;
18
17
  strings: PerseusStrings;
19
18
  }
20
19
  /**
@@ -22,11 +21,10 @@ interface GetOptionStatusTextProps {
22
21
  *
23
22
  * @param checked - Whether the option is checked.
24
23
  * @param correct - Whether the option is correct.
25
- * @param crossedOut - Whether the option is crossed out.
26
24
  * @param strings - The strings for the Radio widget.
27
25
  * @returns The appropriate string for the option status.
28
26
  */
29
- export declare const getOptionStatusText: ({ checked, correct, crossedOut, strings, }: GetOptionStatusTextProps) => string;
27
+ export declare const getOptionStatusText: ({ checked, correct, strings, }: GetOptionStatusTextProps) => string;
30
28
  interface GetInstructionsTextProps {
31
29
  multipleSelect: boolean;
32
30
  countChoices: boolean | null | undefined;
@@ -50,7 +48,6 @@ interface GetA11yTextProps {
50
48
  letter: string;
51
49
  checked: boolean;
52
50
  correct: boolean;
53
- crossedOut: boolean;
54
51
  showCorrectness: boolean;
55
52
  strings: PerseusStrings;
56
53
  }
@@ -68,5 +65,5 @@ interface GetA11yTextProps {
68
65
  * @param strings - The strings for the Radio widget.
69
66
  * @returns The a11y string for the Radio option.
70
67
  */
71
- export declare const getA11yText: ({ letter, checked, correct, crossedOut, showCorrectness, strings, }: GetA11yTextProps) => string;
68
+ export declare const getA11yText: ({ letter, checked, correct, showCorrectness, strings, }: GetA11yTextProps) => string;
72
69
  export {};
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": "63.0.0",
6
+ "version": "63.1.0",
7
7
  "publishConfig": {
8
8
  "access": "public"
9
9
  },
@@ -41,37 +41,37 @@
41
41
  "mafs": "0.19.0",
42
42
  "tiny-invariant": "^1.3.1",
43
43
  "uuid": "^10.0.0",
44
- "@khanacademy/kas": "2.0.4",
45
- "@khanacademy/keypad-context": "3.0.10",
46
- "@khanacademy/kmath": "2.0.10",
47
- "@khanacademy/math-input": "25.1.5",
48
- "@khanacademy/perseus-core": "12.0.0",
49
- "@khanacademy/perseus-linter": "3.0.10",
50
- "@khanacademy/perseus-score": "7.0.0",
51
- "@khanacademy/perseus-utils": "2.0.3",
52
- "@khanacademy/pure-markdown": "2.0.4",
53
- "@khanacademy/simple-markdown": "2.0.4"
44
+ "@khanacademy/kas": "2.0.5",
45
+ "@khanacademy/keypad-context": "3.0.11",
46
+ "@khanacademy/kmath": "2.0.11",
47
+ "@khanacademy/math-input": "26.0.0",
48
+ "@khanacademy/perseus-core": "12.1.0",
49
+ "@khanacademy/perseus-linter": "3.0.11",
50
+ "@khanacademy/perseus-score": "7.0.1",
51
+ "@khanacademy/perseus-utils": "2.0.4",
52
+ "@khanacademy/pure-markdown": "2.0.5",
53
+ "@khanacademy/simple-markdown": "2.0.5"
54
54
  },
55
55
  "devDependencies": {
56
- "@khanacademy/wonder-blocks-banner": "4.1.12",
57
- "@khanacademy/wonder-blocks-button": "9.0.0",
58
- "@khanacademy/wonder-blocks-clickable": "7.0.3",
56
+ "@khanacademy/wonder-blocks-banner": "4.1.16",
57
+ "@khanacademy/wonder-blocks-button": "10.0.1",
58
+ "@khanacademy/wonder-blocks-clickable": "7.1.2",
59
59
  "@khanacademy/wonder-blocks-core": "12.2.1",
60
60
  "@khanacademy/wonder-blocks-data": "14.1.3",
61
- "@khanacademy/wonder-blocks-dropdown": "10.0.4",
62
- "@khanacademy/wonder-blocks-form": "7.1.10",
63
- "@khanacademy/wonder-blocks-icon-button": "9.0.4",
61
+ "@khanacademy/wonder-blocks-dropdown": "10.1.1",
62
+ "@khanacademy/wonder-blocks-form": "7.1.14",
63
+ "@khanacademy/wonder-blocks-icon-button": "10.0.0",
64
64
  "@khanacademy/wonder-blocks-icon": "5.1.3",
65
- "@khanacademy/wonder-blocks-labeled-field": "3.0.6",
66
- "@khanacademy/wonder-blocks-layout": "3.1.9",
67
- "@khanacademy/wonder-blocks-link": "9.0.3",
68
- "@khanacademy/wonder-blocks-pill": "3.1.10",
69
- "@khanacademy/wonder-blocks-popover": "6.0.7",
70
- "@khanacademy/wonder-blocks-progress-spinner": "3.1.9",
71
- "@khanacademy/wonder-blocks-switch": "3.2.2",
72
- "@khanacademy/wonder-blocks-tokens": "9.0.0",
73
- "@khanacademy/wonder-blocks-tooltip": "4.1.12",
74
- "@khanacademy/wonder-blocks-typography": "3.1.3",
65
+ "@khanacademy/wonder-blocks-labeled-field": "3.0.9",
66
+ "@khanacademy/wonder-blocks-layout": "3.1.13",
67
+ "@khanacademy/wonder-blocks-link": "9.1.2",
68
+ "@khanacademy/wonder-blocks-pill": "3.1.14",
69
+ "@khanacademy/wonder-blocks-popover": "6.1.2",
70
+ "@khanacademy/wonder-blocks-progress-spinner": "3.1.13",
71
+ "@khanacademy/wonder-blocks-switch": "3.2.6",
72
+ "@khanacademy/wonder-blocks-tokens": "10.2.0",
73
+ "@khanacademy/wonder-blocks-tooltip": "4.1.16",
74
+ "@khanacademy/wonder-blocks-typography": "3.2.3",
75
75
  "@khanacademy/wonder-stuff-core": "1.5.4",
76
76
  "@phosphor-icons/core": "^2.0.2",
77
77
  "@popperjs/core": "^2.10.2",
@@ -86,29 +86,29 @@
86
86
  "react-dom": "^18.2.0",
87
87
  "react-popper": "^2.2.5",
88
88
  "underscore": "^1.4.4",
89
- "perseus-build-settings": "0.6.1",
90
- "raphael": "1.5.3"
89
+ "perseus-build-settings": "0.6.2",
90
+ "raphael": "1.5.4"
91
91
  },
92
92
  "peerDependencies": {
93
- "@khanacademy/wonder-blocks-banner": "4.1.12",
94
- "@khanacademy/wonder-blocks-button": "9.0.0",
95
- "@khanacademy/wonder-blocks-clickable": "7.0.3",
93
+ "@khanacademy/wonder-blocks-banner": "4.1.16",
94
+ "@khanacademy/wonder-blocks-button": "10.0.1",
95
+ "@khanacademy/wonder-blocks-clickable": "7.1.2",
96
96
  "@khanacademy/wonder-blocks-core": "12.2.1",
97
97
  "@khanacademy/wonder-blocks-data": "14.1.3",
98
- "@khanacademy/wonder-blocks-dropdown": "10.0.4",
99
- "@khanacademy/wonder-blocks-form": "7.1.10",
98
+ "@khanacademy/wonder-blocks-dropdown": "10.1.1",
99
+ "@khanacademy/wonder-blocks-form": "7.1.14",
100
100
  "@khanacademy/wonder-blocks-icon": "5.1.3",
101
- "@khanacademy/wonder-blocks-icon-button": "9.0.4",
102
- "@khanacademy/wonder-blocks-labeled-field": "3.0.6",
103
- "@khanacademy/wonder-blocks-layout": "3.1.9",
104
- "@khanacademy/wonder-blocks-link": "9.0.3",
105
- "@khanacademy/wonder-blocks-pill": "3.1.10",
106
- "@khanacademy/wonder-blocks-popover": "6.0.7",
107
- "@khanacademy/wonder-blocks-progress-spinner": "3.1.9",
108
- "@khanacademy/wonder-blocks-switch": "3.2.2",
109
- "@khanacademy/wonder-blocks-tokens": "9.0.0",
110
- "@khanacademy/wonder-blocks-tooltip": "4.1.12",
111
- "@khanacademy/wonder-blocks-typography": "3.1.3",
101
+ "@khanacademy/wonder-blocks-icon-button": "10.0.0",
102
+ "@khanacademy/wonder-blocks-labeled-field": "3.0.9",
103
+ "@khanacademy/wonder-blocks-layout": "3.1.13",
104
+ "@khanacademy/wonder-blocks-link": "9.1.2",
105
+ "@khanacademy/wonder-blocks-pill": "3.1.14",
106
+ "@khanacademy/wonder-blocks-popover": "6.1.2",
107
+ "@khanacademy/wonder-blocks-progress-spinner": "3.1.13",
108
+ "@khanacademy/wonder-blocks-switch": "3.2.6",
109
+ "@khanacademy/wonder-blocks-tokens": "10.2.0",
110
+ "@khanacademy/wonder-blocks-tooltip": "4.1.16",
111
+ "@khanacademy/wonder-blocks-typography": "3.2.3",
112
112
  "@khanacademy/wonder-stuff-core": "1.5.4",
113
113
  "@phosphor-icons/core": "^2.0.2",
114
114
  "@popperjs/core": "^2.10.2",
@@ -1,9 +0,0 @@
1
- import * as React from "react";
2
- /**
3
- * The "cross-out line" that appears over the icon when the choice has been
4
- * `crossedOut`.
5
- */
6
- declare const CrossOutLine: (props: {
7
- color: string;
8
- }) => React.ReactElement;
9
- export default CrossOutLine;