@khanacademy/perseus 65.3.7 → 65.5.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.
Files changed (59) hide show
  1. package/dist/es/index.js +62 -60
  2. package/dist/es/index.js.map +1 -1
  3. package/dist/hint-renderer.d.ts +6 -0
  4. package/dist/hints-renderer.d.ts +6 -0
  5. package/dist/index.d.ts +2 -2
  6. package/dist/index.js +61 -59
  7. package/dist/index.js.map +1 -1
  8. package/dist/mixins/changeable.d.ts +14 -0
  9. package/dist/mixins/widget-prop-denylist.d.ts +5 -0
  10. package/dist/renderer.d.ts +23 -11
  11. package/dist/server-item-renderer.d.ts +10 -0
  12. package/dist/types.d.ts +47 -13
  13. package/dist/widget-ai-utils/number-line/number-line-ai-utils.d.ts +1 -1
  14. package/dist/widget-type-utils.d.ts +1 -1
  15. package/dist/widgets/categorizer/categorizer.d.ts +28 -10
  16. package/dist/widgets/cs-program/cs-program.d.ts +9 -5
  17. package/dist/widgets/definition/definition.d.ts +0 -1
  18. package/dist/widgets/dropdown/dropdown.d.ts +22 -9
  19. package/dist/widgets/explanation/explanation.d.ts +0 -1
  20. package/dist/widgets/expression/expression.d.ts +107 -11
  21. package/dist/widgets/free-response/free-response.d.ts +9 -7
  22. package/dist/widgets/graded-group-set/graded-group-set.d.ts +1 -3
  23. package/dist/widgets/grapher/grapher.d.ts +139 -14
  24. package/dist/widgets/grapher/util.d.ts +2 -2
  25. package/dist/widgets/group/group.d.ts +6 -0
  26. package/dist/widgets/iframe/iframe.d.ts +10 -8
  27. package/dist/widgets/image/image.d.ts +1 -2
  28. package/dist/widgets/input-number/input-number.d.ts +17 -6
  29. package/dist/widgets/interaction/interaction.d.ts +0 -2
  30. package/dist/widgets/interactive-graph.d.ts +101 -4
  31. package/dist/widgets/interactive-graphs/backgrounds/axis-labels.d.ts +0 -10
  32. package/dist/widgets/interactive-graphs/backgrounds/axis-ticks.d.ts +0 -5
  33. package/dist/widgets/interactive-graphs/backgrounds/utils.d.ts +20 -0
  34. package/dist/widgets/interactive-graphs/mafs-graph.d.ts +0 -5
  35. package/dist/widgets/interactive-graphs/stateful-mafs-graph.d.ts +1 -1
  36. package/dist/widgets/interactive-graphs/types.d.ts +2 -2
  37. package/dist/widgets/interactive-graphs/utils.d.ts +4 -0
  38. package/dist/widgets/label-image/label-image.d.ts +28 -8
  39. package/dist/widgets/matcher/matcher.d.ts +19 -7
  40. package/dist/widgets/matrix/matrix.d.ts +30 -18
  41. package/dist/widgets/mock-widgets/mock-widget.d.ts +89 -8
  42. package/dist/widgets/number-line/number-line.d.ts +108 -13
  43. package/dist/widgets/numeric-input/numeric-input.class.d.ts +93 -4
  44. package/dist/widgets/numeric-input/numeric-input.d.ts +1 -2
  45. package/dist/widgets/orderer/orderer.d.ts +15 -8
  46. package/dist/widgets/passage-ref/passage-ref.d.ts +1 -2
  47. package/dist/widgets/passage-ref-target/passage-ref-target.d.ts +1 -3
  48. package/dist/widgets/phet-simulation/phet-simulation.d.ts +1 -2
  49. package/dist/widgets/plotter/plotter.d.ts +105 -6
  50. package/dist/widgets/radio/radio-component.d.ts +5 -2
  51. package/dist/widgets/radio/radio.class.new.d.ts +5 -2
  52. package/dist/widgets/radio/radio.d.ts +8 -1
  53. package/dist/widgets/radio/radio.ff.d.ts +93 -3
  54. package/dist/widgets/radio/radio.new.d.ts +2 -2
  55. package/dist/widgets/radio/util.d.ts +3 -0
  56. package/dist/widgets/sorter/sorter.d.ts +26 -9
  57. package/dist/widgets/table/table.d.ts +88 -5
  58. package/dist/widgets/video/video.d.ts +0 -1
  59. package/package.json +45 -45
@@ -1,9 +1,13 @@
1
+ import { type PerseusRadioRubric, type PerseusRadioUserInput } from "@khanacademy/perseus-core";
1
2
  import * as React from "react";
2
3
  import RadioOld from "./radio-component";
3
4
  import type { RenderProps } from "./radio-component";
4
- import type { WidgetProps } from "../../types";
5
- import type { PerseusRadioRubric } from "@khanacademy/perseus-core";
6
- type Props = WidgetProps<RenderProps, PerseusRadioRubric>;
5
+ import type { ChoiceState, WidgetProps } from "../../types";
6
+ type Props = WidgetProps<RenderProps, PerseusRadioUserInput, PerseusRadioRubric>;
7
+ type ChoiceStateWithoutSelected = Omit<ChoiceState, "selected">;
8
+ type State = {
9
+ choiceStates: ChoiceStateWithoutSelected[];
10
+ };
7
11
  /**
8
12
  * This is a wrapper around the old radio widget that allows us to
9
13
  * conditionally render the new radio widget when the feature flag is on.
@@ -16,7 +20,93 @@ type Props = WidgetProps<RenderProps, PerseusRadioRubric>;
16
20
  declare class Radio extends RadioOld {
17
21
  ffIsOn: boolean;
18
22
  radioRef: React.RefObject<RadioOld>;
23
+ state: State;
19
24
  constructor(props: Props);
25
+ /**
26
+ * @deprecated and likely very broken API
27
+ * [LEMS-3185] do not trust serializedState/restoreSerializedState
28
+ */
29
+ getSerializedState(): {
30
+ numCorrect: number;
31
+ hasNoneOfTheAbove?: boolean;
32
+ multipleSelect?: boolean;
33
+ countChoices?: boolean;
34
+ deselectEnabled?: boolean;
35
+ choices: import("./radio-component").RadioChoiceWithMetadata[];
36
+ selectedChoices: import("@khanacademy/perseus-core").PerseusRadioChoice["correct"][];
37
+ showSolutions?: import("@khanacademy/perseus-core").ShowSolutions;
38
+ choiceStates?: ChoiceState[];
39
+ values?: boolean[];
40
+ reviewModeRubric?: PerseusRadioRubric | null | undefined;
41
+ trackInteraction: (extraData?: Empty | undefined) => void;
42
+ widgetId: string;
43
+ alignment: string | null | undefined;
44
+ static: boolean | null | undefined;
45
+ problemNum: number | null | undefined;
46
+ apiOptions: Readonly<Readonly<{
47
+ isArticle?: boolean;
48
+ onFocusChange?: (newFocusPath: import("../..").FocusPath, oldFocusPath: import("../..").FocusPath, keypadHeight?: number, focusedElement?: HTMLElement) => unknown;
49
+ GroupMetadataEditor?: React.ComponentType<any>;
50
+ showAlignmentOptions?: boolean;
51
+ readOnly?: boolean;
52
+ answerableCallback?: (arg1: boolean) => unknown;
53
+ getAnotherHint?: () => unknown;
54
+ interactionCallback?: (widgetData: {
55
+ [widgetId: string]: any;
56
+ }) => void;
57
+ groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode;
58
+ imagePlaceholder?: React.ReactNode;
59
+ widgetPlaceholder?: React.ReactNode;
60
+ baseElements?: {
61
+ Link: React.ComponentType<any>;
62
+ };
63
+ imagePreloader?: (dimensions: import("../../types").Dimensions) => React.ReactNode;
64
+ trackInteraction?: (args: {
65
+ type: string;
66
+ id: string;
67
+ correct?: boolean;
68
+ } & Partial<import("../../types").TrackingGradedGroupExtraArguments> & Partial<{
69
+ visible: number;
70
+ }>) => void;
71
+ customKeypad?: boolean;
72
+ nativeKeypadProxy?: (blur: () => void) => import("@khanacademy/math-input").KeypadAPI;
73
+ isMobile?: boolean;
74
+ isMobileApp?: boolean;
75
+ setDrawingAreaAvailable?: (arg1: boolean) => unknown;
76
+ hintProgressColor?: string;
77
+ canScrollPage?: boolean;
78
+ editorChangeDelay?: number;
79
+ flags?: Record<"new-radio-widget", boolean>;
80
+ onWidgetStartProps?: (widgets: import("@khanacademy/perseus-core").PerseusWidgetsMap) => void;
81
+ }> & {
82
+ baseElements: NonNullable<import("../..").APIOptions["baseElements"]>;
83
+ canScrollPage: NonNullable<import("../..").APIOptions["canScrollPage"]>;
84
+ editorChangeDelay: NonNullable<import("../..").APIOptions["editorChangeDelay"]>;
85
+ groupAnnotator: NonNullable<import("../..").APIOptions["groupAnnotator"]>;
86
+ isArticle: NonNullable<import("../..").APIOptions["isArticle"]>;
87
+ isMobile: NonNullable<import("../..").APIOptions["isMobile"]>;
88
+ isMobileApp: NonNullable<import("../..").APIOptions["isMobileApp"]>;
89
+ onFocusChange: NonNullable<import("../..").APIOptions["onFocusChange"]>;
90
+ readOnly: NonNullable<import("../..").APIOptions["readOnly"]>;
91
+ setDrawingAreaAvailable: NonNullable<import("../..").APIOptions["setDrawingAreaAvailable"]>;
92
+ showAlignmentOptions: NonNullable<import("../..").APIOptions["showAlignmentOptions"]>;
93
+ }>;
94
+ keypadElement?: any;
95
+ questionCompleted?: boolean;
96
+ onFocus: (blurPath: import("../..").FocusPath) => void;
97
+ onBlur: (blurPath: import("../..").FocusPath) => void;
98
+ findWidgets: (criterion: import("../../types").FilterCriterion) => ReadonlyArray<import("../../types").Widget>;
99
+ reviewMode: boolean;
100
+ onChange: import("../..").ChangeHandler;
101
+ handleUserInput: (newUserInput: PerseusRadioUserInput, cb?: () => void, silent?: boolean) => void;
102
+ isLastUsedWidget: boolean;
103
+ linterContext: import("@khanacademy/perseus-linter").LinterContextProps;
104
+ containerSizeClass: import("../../util/sizing-utils").SizeClass;
105
+ };
106
+ _handleChange(arg: {
107
+ choiceStates?: ChoiceState[];
108
+ }): void;
109
+ _mergePropsAndState(): Props;
20
110
  focus(choiceIndex?: number | null): boolean;
21
111
  render(): React.ReactNode;
22
112
  }
@@ -1,6 +1,6 @@
1
1
  import * as React from "react";
2
2
  import type { WidgetProps, ChoiceState } from "../../types";
3
- import type { PerseusRadioChoice, ShowSolutions, PerseusRadioRubric } from "@khanacademy/perseus-core";
3
+ import type { PerseusRadioChoice, ShowSolutions, PerseusRadioRubric, PerseusRadioUserInput } from "@khanacademy/perseus-core";
4
4
  export interface RadioChoiceWithMetadata extends PerseusRadioChoice {
5
5
  originalIndex: number;
6
6
  correct?: boolean;
@@ -17,7 +17,7 @@ export interface RenderProps {
17
17
  choiceStates?: ReadonlyArray<ChoiceState>;
18
18
  values?: ReadonlyArray<boolean>;
19
19
  }
20
- type RadioComponentProps = WidgetProps<RenderProps, PerseusRadioRubric>;
20
+ type RadioComponentProps = WidgetProps<RenderProps, PerseusRadioUserInput, PerseusRadioRubric>;
21
21
  /**
22
22
  * This component is a duplicate of the Radio component in radio.tsx
23
23
  * for the Radio Revitalization Project. (LEMS-2933)
@@ -1,7 +1,10 @@
1
+ import type { Props } from "./radio-component";
1
2
  import type { PerseusStrings } from "../../strings";
3
+ import type { PerseusRadioUserInput } from "@khanacademy/perseus-core";
2
4
  /**
3
5
  * Given a choice's position in the radio widget, return the corresponding
4
6
  * "choice letter". (For example, in English, `getChoiceLetter(0)` is "A",
5
7
  * `getChoiceLetter(1)` is "B", etc.)
6
8
  */
7
9
  export declare function getChoiceLetter(pos: number, strings: PerseusStrings): string;
10
+ export declare function getUserInputFromSerializedState(props: Props, unshuffle?: boolean): PerseusRadioUserInput;
@@ -2,36 +2,53 @@ import * as React from "react";
2
2
  import type { SortableOption } from "../../components/sortable";
3
3
  import type { Widget, WidgetProps } from "../../types";
4
4
  import type { SorterPromptJSON } from "../../widget-ai-utils/sorter/sorter-ai-utils";
5
- import type { PerseusSorterWidgetOptions, PerseusSorterUserInput } from "@khanacademy/perseus-core";
6
- type RenderProps = PerseusSorterWidgetOptions;
7
- type Props = WidgetProps<RenderProps>;
5
+ import type { PerseusSorterWidgetOptions, PerseusSorterUserInput, SorterPublicWidgetOptions } from "@khanacademy/perseus-core";
6
+ type Props = WidgetProps<PerseusSorterWidgetOptions, PerseusSorterUserInput>;
8
7
  type DefaultProps = {
9
8
  correct: Props["correct"];
10
9
  layout: Props["layout"];
11
10
  padding: Props["padding"];
12
11
  problemNum: Props["problemNum"];
13
- onChange: Props["onChange"];
14
12
  linterContext: Props["linterContext"];
15
13
  };
16
- type State = {
17
- changed: boolean;
18
- };
19
- declare class Sorter extends React.Component<Props, State> implements Widget {
14
+ declare class Sorter extends React.Component<Props> implements Widget {
20
15
  _isMounted: boolean;
21
16
  static defaultProps: DefaultProps;
22
- state: State;
23
17
  componentDidMount(): void;
24
18
  componentWillUnmount(): void;
25
19
  handleChange: (arg1: React.ChangeEvent<HTMLInputElement>) => void;
20
+ /**
21
+ * TODO: remove this when everything is pulling from Renderer state
22
+ * @deprecated get user input from Renderer state
23
+ */
26
24
  getUserInput(): PerseusSorterUserInput;
25
+ /**
26
+ * This is kind of a problem. Sortable maintains an internal state
27
+ * but we also want the user input state to include the same state.
28
+ * This is to help keep the two in sync for now.
29
+ */
30
+ _getOptionsFromSortable(): string[];
27
31
  getPromptJSON(): SorterPromptJSON;
28
32
  moveOptionToIndex: (option: SortableOption, index: number) => void;
33
+ /**
34
+ * @deprecated and likely very broken API
35
+ * [LEMS-3185] do not trust serializedState/restoreSerializedState
36
+ */
37
+ getSerializedState(): any;
29
38
  render(): React.ReactNode;
30
39
  }
40
+ declare function getStartUserInput(options: SorterPublicWidgetOptions, problemNum: number): PerseusSorterUserInput;
41
+ /**
42
+ * @deprecated and likely a very broken API
43
+ * [LEMS-3185] do not trust serializedState/restoreSerializedState
44
+ */
45
+ declare function getUserInputFromSerializedState(serializedState: any): PerseusSorterUserInput;
31
46
  declare const _default: {
32
47
  name: string;
33
48
  displayName: string;
34
49
  widget: typeof Sorter;
35
50
  isLintable: true;
51
+ getStartUserInput: typeof getStartUserInput;
52
+ getUserInputFromSerializedState: typeof getUserInputFromSerializedState;
36
53
  };
37
54
  export default _default;
@@ -8,15 +8,14 @@ type EditorProps = {
8
8
  editableHeaders: boolean;
9
9
  Editor: any;
10
10
  };
11
- type RenderProps = PerseusTableWidgetOptions & EditorProps;
12
- type Props = WidgetProps<PerseusTableWidgetOptions> & ChangeableProps & EditorProps;
11
+ type RenderProps = Omit<PerseusTableWidgetOptions, "answers">;
12
+ type Props = WidgetProps<RenderProps, PerseusTableUserInput> & ChangeableProps & EditorProps;
13
13
  type DefaultProps = {
14
14
  apiOptions: Props["apiOptions"];
15
15
  headers: Props["headers"];
16
16
  editableHeaders: Props["editableHeaders"];
17
17
  rows: Props["rows"];
18
18
  columns: Props["columns"];
19
- answers: Props["answers"];
20
19
  linterContext: Props["linterContext"];
21
20
  };
22
21
  declare class Table extends React.Component<Props> implements Widget {
@@ -39,15 +38,99 @@ declare class Table extends React.Component<Props> implements Widget {
39
38
  getDOMNodeForPath(path: FocusPath): ReturnType<typeof ReactDOM.findDOMNode>;
40
39
  getInputPaths(): string[][];
41
40
  setInputValue(path: FocusPath, newValue: string, cb: any): void;
41
+ /**
42
+ * @deprecated and likely very broken API
43
+ * [LEMS-3185] do not trust serializedState/restoreSerializedState
44
+ */
45
+ getSerializedState(): {
46
+ answers: PerseusTableUserInput;
47
+ columns: number;
48
+ rows: number;
49
+ headers: string[];
50
+ reviewModeRubric?: Empty | null | undefined;
51
+ trackInteraction: (extraData?: Empty | undefined) => void;
52
+ widgetId: string;
53
+ alignment: string | null | undefined;
54
+ static: boolean | null | undefined;
55
+ problemNum: number | null | undefined;
56
+ apiOptions: Readonly<Readonly<{
57
+ isArticle?: boolean;
58
+ onFocusChange?: (newFocusPath: FocusPath, oldFocusPath: FocusPath, keypadHeight?: number, focusedElement?: HTMLElement) => unknown;
59
+ GroupMetadataEditor?: React.ComponentType<any>;
60
+ showAlignmentOptions?: boolean;
61
+ readOnly?: boolean;
62
+ answerableCallback?: (arg1: boolean) => unknown;
63
+ getAnotherHint?: () => unknown;
64
+ interactionCallback?: (widgetData: {
65
+ [widgetId: string]: any;
66
+ }) => void;
67
+ groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode;
68
+ imagePlaceholder?: React.ReactNode;
69
+ widgetPlaceholder?: React.ReactNode;
70
+ baseElements?: {
71
+ Link: React.ComponentType<any>;
72
+ };
73
+ imagePreloader?: (dimensions: import("../../types").Dimensions) => React.ReactNode;
74
+ trackInteraction?: (args: {
75
+ type: string;
76
+ id: string;
77
+ correct?: boolean;
78
+ } & Partial<import("../../types").TrackingGradedGroupExtraArguments> & Partial<{
79
+ visible: number;
80
+ }>) => void;
81
+ customKeypad?: boolean;
82
+ nativeKeypadProxy?: (blur: () => void) => import("@khanacademy/math-input").KeypadAPI;
83
+ isMobile?: boolean;
84
+ isMobileApp?: boolean;
85
+ setDrawingAreaAvailable?: (arg1: boolean) => unknown;
86
+ hintProgressColor?: string;
87
+ canScrollPage?: boolean;
88
+ editorChangeDelay?: number;
89
+ flags?: Record<"new-radio-widget", boolean>;
90
+ onWidgetStartProps?: (widgets: import("@khanacademy/perseus-core").PerseusWidgetsMap) => void;
91
+ }> & {
92
+ baseElements: NonNullable<import("../..").APIOptions["baseElements"]>;
93
+ canScrollPage: NonNullable<import("../..").APIOptions["canScrollPage"]>;
94
+ editorChangeDelay: NonNullable<import("../..").APIOptions["editorChangeDelay"]>;
95
+ groupAnnotator: NonNullable<import("../..").APIOptions["groupAnnotator"]>;
96
+ isArticle: NonNullable<import("../..").APIOptions["isArticle"]>;
97
+ isMobile: NonNullable<import("../..").APIOptions["isMobile"]>;
98
+ isMobileApp: NonNullable<import("../..").APIOptions["isMobileApp"]>;
99
+ onFocusChange: NonNullable<import("../..").APIOptions["onFocusChange"]>;
100
+ readOnly: NonNullable<import("../..").APIOptions["readOnly"]>;
101
+ setDrawingAreaAvailable: NonNullable<import("../..").APIOptions["setDrawingAreaAvailable"]>;
102
+ showAlignmentOptions: NonNullable<import("../..").APIOptions["showAlignmentOptions"]>;
103
+ }>;
104
+ keypadElement?: any;
105
+ questionCompleted?: boolean;
106
+ onFocus: (blurPath: FocusPath) => void;
107
+ onBlur: (blurPath: FocusPath) => void;
108
+ findWidgets: (criterion: import("../../types").FilterCriterion) => ReadonlyArray<Widget>;
109
+ reviewMode: boolean;
110
+ showSolutions?: import("@khanacademy/perseus-core").ShowSolutions;
111
+ onChange: import("../..").ChangeHandler & ((values: {
112
+ [key: string]: any;
113
+ }, callback?: (() => unknown) | null | undefined, silent?: boolean) => unknown);
114
+ handleUserInput: (newUserInput: PerseusTableUserInput, cb?: () => void, silent?: boolean) => void;
115
+ isLastUsedWidget: boolean;
116
+ linterContext: import("@khanacademy/perseus-linter").LinterContextProps;
117
+ containerSizeClass: import("../../util/sizing-utils").SizeClass;
118
+ Editor: any;
119
+ };
42
120
  render(): React.ReactNode;
43
121
  }
44
- declare function propTransform(options: Props): RenderProps;
122
+ declare function getStartUserInput(options: PerseusTableWidgetOptions): PerseusTableUserInput;
123
+ /**
124
+ * @deprecated - do not use in new code.
125
+ */
126
+ declare function getUserInputFromSerializedState(serializedState: any): PerseusTableUserInput;
45
127
  declare const _default: {
46
128
  name: string;
47
129
  displayName: string;
48
130
  widget: typeof Table;
49
- transform: typeof propTransform;
50
131
  hidden: true;
51
132
  isLintable: true;
133
+ getStartUserInput: typeof getStartUserInput;
134
+ getUserInputFromSerializedState: typeof getUserInputFromSerializedState;
52
135
  };
53
136
  export default _default;
@@ -17,7 +17,6 @@ declare class Video extends React.Component<Props> implements Widget {
17
17
  static contextType: React.Context<import("../../components/i18n-context").I18nContextType>;
18
18
  context: React.ContextType<typeof PerseusI18nContext>;
19
19
  isWidget: true;
20
- change: (...args: ReadonlyArray<unknown>) => any;
21
20
  getPromptJSON(): UnsupportedWidgetPromptJSON;
22
21
  render(): React.ReactNode;
23
22
  }
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": "65.3.7",
6
+ "version": "65.5.0",
7
7
  "publishConfig": {
8
8
  "access": "public"
9
9
  },
@@ -42,37 +42,37 @@
42
42
  "tiny-invariant": "1.3.1",
43
43
  "uuid": "^10.0.0",
44
44
  "@khanacademy/kas": "2.0.9",
45
- "@khanacademy/keypad-context": "3.0.22",
46
- "@khanacademy/kmath": "2.0.22",
47
- "@khanacademy/math-input": "26.0.11",
48
- "@khanacademy/perseus-core": "16.1.0",
49
- "@khanacademy/perseus-linter": "4.0.9",
50
- "@khanacademy/perseus-score": "7.1.9",
45
+ "@khanacademy/keypad-context": "3.0.24",
46
+ "@khanacademy/kmath": "2.0.24",
47
+ "@khanacademy/math-input": "26.0.13",
48
+ "@khanacademy/perseus-core": "17.0.0",
49
+ "@khanacademy/perseus-linter": "4.0.11",
50
+ "@khanacademy/perseus-score": "7.1.11",
51
51
  "@khanacademy/perseus-utils": "2.0.5",
52
- "@khanacademy/pure-markdown": "2.0.9",
53
- "@khanacademy/simple-markdown": "2.0.9"
52
+ "@khanacademy/pure-markdown": "2.0.10",
53
+ "@khanacademy/simple-markdown": "2.0.10"
54
54
  },
55
55
  "devDependencies": {
56
- "@khanacademy/wonder-blocks-banner": "4.2.0",
57
- "@khanacademy/wonder-blocks-button": "10.2.4",
58
- "@khanacademy/wonder-blocks-clickable": "7.1.9",
56
+ "@khanacademy/wonder-blocks-banner": "4.2.4",
57
+ "@khanacademy/wonder-blocks-button": "10.2.8",
58
+ "@khanacademy/wonder-blocks-clickable": "7.1.12",
59
59
  "@khanacademy/wonder-blocks-core": "12.3.0",
60
60
  "@khanacademy/wonder-blocks-data": "14.1.4",
61
- "@khanacademy/wonder-blocks-dropdown": "10.1.10",
62
- "@khanacademy/wonder-blocks-form": "7.1.22",
63
- "@khanacademy/wonder-blocks-icon-button": "10.3.3",
64
- "@khanacademy/wonder-blocks-icon": "5.2.3",
65
- "@khanacademy/wonder-blocks-labeled-field": "3.0.17",
66
- "@khanacademy/wonder-blocks-layout": "3.1.20",
67
- "@khanacademy/wonder-blocks-link": "9.1.9",
68
- "@khanacademy/wonder-blocks-pill": "3.1.22",
69
- "@khanacademy/wonder-blocks-popover": "6.1.11",
70
- "@khanacademy/wonder-blocks-progress-spinner": "3.1.20",
71
- "@khanacademy/wonder-blocks-switch": "3.3.2",
72
- "@khanacademy/wonder-blocks-tokens": "11.1.0",
73
- "@khanacademy/wonder-blocks-tooltip": "4.1.25",
74
- "@khanacademy/wonder-blocks-typography": "4.2.4",
75
- "@khanacademy/wonder-stuff-core": "1.5.4",
61
+ "@khanacademy/wonder-blocks-dropdown": "10.2.2",
62
+ "@khanacademy/wonder-blocks-form": "7.1.26",
63
+ "@khanacademy/wonder-blocks-icon-button": "10.3.7",
64
+ "@khanacademy/wonder-blocks-icon": "5.2.6",
65
+ "@khanacademy/wonder-blocks-labeled-field": "3.0.21",
66
+ "@khanacademy/wonder-blocks-layout": "3.1.23",
67
+ "@khanacademy/wonder-blocks-link": "9.1.12",
68
+ "@khanacademy/wonder-blocks-pill": "3.1.27",
69
+ "@khanacademy/wonder-blocks-popover": "6.1.15",
70
+ "@khanacademy/wonder-blocks-progress-spinner": "3.1.23",
71
+ "@khanacademy/wonder-blocks-switch": "3.3.5",
72
+ "@khanacademy/wonder-blocks-tokens": "11.2.1",
73
+ "@khanacademy/wonder-blocks-tooltip": "4.1.29",
74
+ "@khanacademy/wonder-blocks-typography": "4.2.8",
75
+ "@khanacademy/wonder-stuff-core": "1.5.5",
76
76
  "@phosphor-icons/core": "2.0.2",
77
77
  "@popperjs/core": "2.10.2",
78
78
  "aphrodite": "1.2.5",
@@ -90,26 +90,26 @@
90
90
  "raphael": "1.5.4"
91
91
  },
92
92
  "peerDependencies": {
93
- "@khanacademy/wonder-blocks-banner": "^4.2.0",
94
- "@khanacademy/wonder-blocks-button": "^10.2.4",
95
- "@khanacademy/wonder-blocks-clickable": "^7.1.9",
93
+ "@khanacademy/wonder-blocks-banner": "^4.2.4",
94
+ "@khanacademy/wonder-blocks-button": "^10.2.8",
95
+ "@khanacademy/wonder-blocks-clickable": "^7.1.12",
96
96
  "@khanacademy/wonder-blocks-core": "^12.3.0",
97
97
  "@khanacademy/wonder-blocks-data": "^14.1.4",
98
- "@khanacademy/wonder-blocks-dropdown": "^10.1.10",
99
- "@khanacademy/wonder-blocks-form": "^7.1.22",
100
- "@khanacademy/wonder-blocks-icon": "^5.2.3",
101
- "@khanacademy/wonder-blocks-icon-button": "^10.3.3",
102
- "@khanacademy/wonder-blocks-labeled-field": "^3.0.17",
103
- "@khanacademy/wonder-blocks-layout": "^3.1.20",
104
- "@khanacademy/wonder-blocks-link": "^9.1.9",
105
- "@khanacademy/wonder-blocks-pill": "^3.1.22",
106
- "@khanacademy/wonder-blocks-popover": "^6.1.11",
107
- "@khanacademy/wonder-blocks-progress-spinner": "^3.1.20",
108
- "@khanacademy/wonder-blocks-switch": "^3.3.2",
109
- "@khanacademy/wonder-blocks-tokens": "^11.1.0",
110
- "@khanacademy/wonder-blocks-tooltip": "^4.1.25",
111
- "@khanacademy/wonder-blocks-typography": "^4.2.4",
112
- "@khanacademy/wonder-stuff-core": "^1.5.4",
98
+ "@khanacademy/wonder-blocks-dropdown": "^10.2.2",
99
+ "@khanacademy/wonder-blocks-form": "^7.1.26",
100
+ "@khanacademy/wonder-blocks-icon": "^5.2.6",
101
+ "@khanacademy/wonder-blocks-icon-button": "^10.3.7",
102
+ "@khanacademy/wonder-blocks-labeled-field": "^3.0.21",
103
+ "@khanacademy/wonder-blocks-layout": "^3.1.23",
104
+ "@khanacademy/wonder-blocks-link": "^9.1.12",
105
+ "@khanacademy/wonder-blocks-pill": "^3.1.27",
106
+ "@khanacademy/wonder-blocks-popover": "^6.1.15",
107
+ "@khanacademy/wonder-blocks-progress-spinner": "^3.1.23",
108
+ "@khanacademy/wonder-blocks-switch": "^3.3.5",
109
+ "@khanacademy/wonder-blocks-tokens": "^11.2.1",
110
+ "@khanacademy/wonder-blocks-tooltip": "^4.1.29",
111
+ "@khanacademy/wonder-blocks-typography": "^4.2.8",
112
+ "@khanacademy/wonder-stuff-core": "^1.5.5",
113
113
  "@phosphor-icons/core": "^2.0.2",
114
114
  "@popperjs/core": "^2.10.2",
115
115
  "aphrodite": "^1.2.5",