@khanacademy/perseus 4.0.2 → 5.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.
Files changed (153) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/components/highlighting/highlightable-content.d.ts +4 -4
  3. package/dist/components/highlighting/highlightable-content.js.flow +4 -7
  4. package/dist/components/highlighting/ui/highlight-renderer.d.ts +6 -6
  5. package/dist/components/highlighting/ui/highlight-renderer.js.flow +6 -8
  6. package/dist/components/highlighting/ui/highlight-set-renderer.d.ts +5 -5
  7. package/dist/components/highlighting/ui/highlight-set-renderer.js.flow +5 -8
  8. package/dist/components/highlighting/ui/highlight-tooltip.d.ts +2 -2
  9. package/dist/components/highlighting/ui/highlight-tooltip.js.flow +2 -4
  10. package/dist/components/highlighting/ui/highlighting-ui.d.ts +2 -2
  11. package/dist/components/highlighting/ui/highlighting-ui.js.flow +2 -2
  12. package/dist/components/highlighting/ui/selection-tracker.d.ts +5 -5
  13. package/dist/components/highlighting/ui/selection-tracker.js.flow +5 -7
  14. package/dist/components/highlighting/word-indexer.d.ts +2 -2
  15. package/dist/components/highlighting/word-indexer.js.flow +2 -2
  16. package/dist/components/inline-icon.d.ts +35 -1
  17. package/dist/components/inline-icon.js.flow +11 -1
  18. package/dist/components/simple-keypad-input.d.ts +1 -1
  19. package/dist/components/simple-keypad-input.js.flow +1 -1
  20. package/dist/components/tex-buttons.d.ts +2 -2
  21. package/dist/components/tex-buttons.js.flow +2 -2
  22. package/dist/error-boundary.d.ts +4 -4
  23. package/dist/error-boundary.js.flow +4 -6
  24. package/dist/es/index.js +7 -10
  25. package/dist/es/index.js.map +1 -1
  26. package/dist/index.js +7 -10
  27. package/dist/index.js.map +1 -1
  28. package/dist/perseus-types.d.ts +0 -1
  29. package/dist/perseus-types.js.flow +0 -1
  30. package/dist/widgets/__stories__/test-keypad-context-wrapper.d.ts +2 -2
  31. package/dist/widgets/__stories__/test-keypad-context-wrapper.js.flow +2 -4
  32. package/dist/widgets/expression.d.ts +2 -2
  33. package/dist/widgets/expression.js.flow +2 -2
  34. package/dist/widgets/interaction/element-container.d.ts +5 -4
  35. package/dist/widgets/interaction/element-container.js.flow +6 -11
  36. package/dist/widgets/label-image/marker.d.ts +4 -4
  37. package/dist/widgets/label-image/marker.js.flow +4 -6
  38. package/dist/widgets/numeric-input.d.ts +0 -2
  39. package/dist/widgets/numeric-input.js.flow +0 -4
  40. package/dist/widgets/radio/base-radio.d.ts +7 -1
  41. package/dist/widgets/radio/base-radio.js.flow +7 -1
  42. package/dist/widgets/radio/choice-icon/choice-icon.d.ts +1 -1
  43. package/dist/widgets/radio/choice-icon/choice-icon.js.flow +1 -1
  44. package/dist/widgets/radio/choice-icon/cross-out-line.d.ts +2 -2
  45. package/dist/widgets/radio/choice-icon/cross-out-line.js.flow +2 -2
  46. package/dist/widgets/radio/focus-ring.d.ts +8 -1
  47. package/dist/widgets/radio/focus-ring.js.flow +8 -1
  48. package/dist/widgets/radio/option-status.d.ts +2 -2
  49. package/dist/widgets/radio/option-status.js.flow +2 -2
  50. package/dist/widgets/video-transcript-link.d.ts +1 -1
  51. package/dist/widgets/video-transcript-link.js.flow +1 -1
  52. package/package.json +4 -4
  53. package/src/__stories__/item-renderer.stories.tsx +2 -6
  54. package/src/__stories__/server-item-renderer.stories.tsx +2 -6
  55. package/src/components/__stories__/button-group.stories.tsx +2 -6
  56. package/src/components/__stories__/fixed-to-responsive.stories.tsx +14 -16
  57. package/src/components/__stories__/graph.stories.tsx +3 -5
  58. package/src/components/__stories__/graphie.stories.tsx +3 -5
  59. package/src/components/__stories__/hud.stories.tsx +2 -6
  60. package/src/components/__stories__/icon.stories.tsx +1 -1
  61. package/src/components/__stories__/image-loader.stories.tsx +4 -4
  62. package/src/components/__stories__/info-tip.stories.tsx +2 -6
  63. package/src/components/__stories__/inline-icon.stories.tsx +4 -8
  64. package/src/components/__stories__/input-with-examples.stories.tsx +6 -10
  65. package/src/components/__stories__/lint.stories.tsx +12 -12
  66. package/src/components/__stories__/math-input.stories.tsx +4 -8
  67. package/src/components/__stories__/math-output.stories.tsx +3 -5
  68. package/src/components/__stories__/multi-button-group.stories.tsx +2 -6
  69. package/src/components/__stories__/number-input.stories.tsx +6 -8
  70. package/src/components/__stories__/prop-check-box.stories.tsx +9 -9
  71. package/src/components/__stories__/range-input.stories.tsx +4 -6
  72. package/src/components/__stories__/simple-keypad-input.stories.tsx +2 -4
  73. package/src/components/__stories__/sortable.stories.tsx +15 -15
  74. package/src/components/__stories__/stub-tag-editor.stories.tsx +5 -9
  75. package/src/components/__stories__/svg-image.stories.tsx +10 -18
  76. package/src/components/__stories__/tex.stories.tsx +1 -3
  77. package/src/components/__stories__/text-buttons.stories.tsx +10 -22
  78. package/src/components/__stories__/text-input.stories.tsx +4 -10
  79. package/src/components/__stories__/text-list-editor.stories.tsx +1 -3
  80. package/src/components/__stories__/zoomable-tex.stories.tsx +6 -4
  81. package/src/components/__stories__/zoomable.stories.tsx +1 -3
  82. package/src/components/highlighting/highlightable-content.tsx +4 -7
  83. package/src/components/highlighting/ui/highlight-renderer.tsx +6 -9
  84. package/src/components/highlighting/ui/highlight-set-renderer.tsx +5 -8
  85. package/src/components/highlighting/ui/highlight-tooltip.tsx +2 -2
  86. package/src/components/highlighting/ui/highlighting-ui.tsx +2 -2
  87. package/src/components/highlighting/ui/selection-tracker.tsx +5 -8
  88. package/src/components/highlighting/word-indexer.tsx +2 -2
  89. package/src/components/inline-icon.tsx +2 -2
  90. package/src/components/simple-keypad-input.tsx +2 -2
  91. package/src/components/tex-buttons.tsx +2 -2
  92. package/src/components/visibility-observer/__stories__/visibility-observer.stories.tsx +1 -3
  93. package/src/error-boundary.tsx +4 -7
  94. package/src/multi-items/__stories__/multi-renderer.stories.tsx +1 -1
  95. package/src/multi-items/__tests__/multi-renderer.test.tsx +2 -3
  96. package/src/perseus-types.ts +0 -3
  97. package/src/util/graphie.ts +3 -3
  98. package/src/widgets/__stories__/categorizer.stories.tsx +1 -1
  99. package/src/widgets/__stories__/cs-program.stories.tsx +1 -1
  100. package/src/widgets/__stories__/definition.stories.tsx +3 -7
  101. package/src/widgets/__stories__/dropdown.stories.tsx +1 -1
  102. package/src/widgets/__stories__/explanation.stories.tsx +2 -2
  103. package/src/widgets/__stories__/expression.stories.tsx +5 -11
  104. package/src/widgets/__stories__/graded-group-set.stories.tsx +1 -1
  105. package/src/widgets/__stories__/graded-group.stories.tsx +1 -1
  106. package/src/widgets/__stories__/grapher.stories.tsx +7 -21
  107. package/src/widgets/__stories__/group.stories.tsx +1 -1
  108. package/src/widgets/__stories__/iframe.stories.tsx +1 -1
  109. package/src/widgets/__stories__/image.stories.tsx +1 -1
  110. package/src/widgets/__stories__/input-number.stories.tsx +3 -12
  111. package/src/widgets/__stories__/interaction.stories.tsx +1 -1
  112. package/src/widgets/__stories__/interactive-graph.stories.tsx +9 -9
  113. package/src/widgets/__stories__/matcher.stories.tsx +1 -1
  114. package/src/widgets/__stories__/matrix.stories.tsx +1 -1
  115. package/src/widgets/__stories__/number-line.stories.tsx +1 -1
  116. package/src/widgets/__stories__/numeric-input.stories.tsx +3 -5
  117. package/src/widgets/__stories__/orderer.stories.tsx +1 -1
  118. package/src/widgets/__stories__/passage-ref.stories.tsx +2 -2
  119. package/src/widgets/__stories__/passage.stories.tsx +3 -9
  120. package/src/widgets/__stories__/radio.stories.tsx +3 -5
  121. package/src/widgets/__stories__/sorter.stories.tsx +1 -1
  122. package/src/widgets/__stories__/test-keypad-context-wrapper.tsx +2 -4
  123. package/src/widgets/__stories__/transformer.stories.tsx +1 -1
  124. package/src/widgets/__stories__/unit.stories.tsx +1 -3
  125. package/src/widgets/__stories__/video-transcript-link.stories.tsx +2 -6
  126. package/src/widgets/__stories__/video.stories.tsx +1 -1
  127. package/src/widgets/__testdata__/group.testdata.ts +0 -2
  128. package/src/widgets/__tests__/group.test.tsx +0 -2
  129. package/src/widgets/__tests__/radio/focus-ring.test.tsx +0 -1
  130. package/src/widgets/expression.tsx +3 -3
  131. package/src/widgets/interaction/element-container.tsx +7 -8
  132. package/src/widgets/label-image/__stories__/answer-choices.stories.tsx +2 -4
  133. package/src/widgets/label-image/__stories__/marker.stories.tsx +9 -19
  134. package/src/widgets/label-image/marker.tsx +4 -4
  135. package/src/widgets/numeric-input.tsx +0 -3
  136. package/src/widgets/passage/passage-markdown.tsx +2 -2
  137. package/src/widgets/radio/__stories__/base-radio.stories.tsx +11 -19
  138. package/src/widgets/radio/__stories__/choice-icon.stories.tsx +9 -11
  139. package/src/widgets/radio/__stories__/choice-none-above.stories.tsx +1 -1
  140. package/src/widgets/radio/__stories__/choice.stories.tsx +4 -4
  141. package/src/widgets/radio/__stories__/focus-ring.stories.tsx +1 -1
  142. package/src/widgets/radio/__stories__/option-status.stories.tsx +2 -4
  143. package/src/widgets/radio/base-radio.tsx +1 -1
  144. package/src/widgets/radio/choice-icon/choice-icon.tsx +5 -5
  145. package/src/widgets/radio/choice-icon/cross-out-line.tsx +1 -3
  146. package/src/widgets/radio/choice-none-above.tsx +2 -2
  147. package/src/widgets/radio/choice.tsx +1 -3
  148. package/src/widgets/radio/focus-ring.tsx +1 -1
  149. package/src/widgets/radio/option-status.tsx +2 -4
  150. package/src/widgets/radio/widget.tsx +0 -1
  151. package/src/widgets/reaction-diagram.tsx +2 -2
  152. package/src/widgets/video-transcript-link.tsx +1 -1
  153. package/tsconfig.tsbuildinfo +1 -1
@@ -40,13 +40,11 @@ export default {
40
40
  args: defaultProps,
41
41
  };
42
42
 
43
- const Panel: React.FC<{
44
- children: React.ReactNode;
45
- }> = (props): React.ReactElement => {
43
+ const Panel = (props: {children: React.ReactNode}): React.ReactElement => {
46
44
  return <div style={{padding: "10px"}}>{props.children}</div>;
47
45
  };
48
46
 
49
- export const Interactive: React.FC<StoryArgs> = (args): React.ReactElement => {
47
+ export const Interactive = (args: StoryArgs): React.ReactElement => {
50
48
  return (
51
49
  <Panel>
52
50
  <ChoiceIcon {...args} />
@@ -54,7 +52,7 @@ export const Interactive: React.FC<StoryArgs> = (args): React.ReactElement => {
54
52
  );
55
53
  };
56
54
 
57
- export const Default: React.FC<StoryArgs> = (args): React.ReactElement => {
55
+ export const Default = (args: StoryArgs): React.ReactElement => {
58
56
  return (
59
57
  <Panel>
60
58
  <ChoiceIcon {...defaultProps} />
@@ -63,7 +61,7 @@ export const Default: React.FC<StoryArgs> = (args): React.ReactElement => {
63
61
  );
64
62
  };
65
63
 
66
- export const Focused: React.FC<StoryArgs> = (args): React.ReactElement => {
64
+ export const Focused = (args: StoryArgs): React.ReactElement => {
67
65
  return (
68
66
  <Panel>
69
67
  <ChoiceIcon {...defaultProps} focused={true} />
@@ -76,7 +74,7 @@ export const Focused: React.FC<StoryArgs> = (args): React.ReactElement => {
76
74
  );
77
75
  };
78
76
 
79
- export const Checked: React.FC<StoryArgs> = (args): React.ReactElement => {
77
+ export const Checked = (args: StoryArgs): React.ReactElement => {
80
78
  return (
81
79
  <Panel>
82
80
  <ChoiceIcon {...defaultProps} checked={true} />
@@ -89,7 +87,7 @@ export const Checked: React.FC<StoryArgs> = (args): React.ReactElement => {
89
87
  );
90
88
  };
91
89
 
92
- export const CrossedOut: React.FC<StoryArgs> = (args): React.ReactElement => {
90
+ export const CrossedOut = (args: StoryArgs): React.ReactElement => {
93
91
  return (
94
92
  <Panel>
95
93
  <ChoiceIcon {...defaultProps} crossedOut={true} />
@@ -102,7 +100,7 @@ export const CrossedOut: React.FC<StoryArgs> = (args): React.ReactElement => {
102
100
  );
103
101
  };
104
102
 
105
- export const Correct: React.FC<StoryArgs> = (args): React.ReactElement => {
103
+ export const Correct = (args: StoryArgs): React.ReactElement => {
106
104
  return (
107
105
  <Panel>
108
106
  <ChoiceIcon
@@ -124,7 +122,7 @@ export const Correct: React.FC<StoryArgs> = (args): React.ReactElement => {
124
122
  );
125
123
  };
126
124
 
127
- export const Incorrect: React.FC<StoryArgs> = (args): React.ReactElement => {
125
+ export const Incorrect = (args: StoryArgs): React.ReactElement => {
128
126
  return (
129
127
  <Panel>
130
128
  <ChoiceIcon
@@ -146,7 +144,7 @@ export const Incorrect: React.FC<StoryArgs> = (args): React.ReactElement => {
146
144
  );
147
145
  };
148
146
 
149
- export const AllPositions: React.FC<StoryArgs> = (args): React.ReactElement => {
147
+ export const AllPositions = (args: StoryArgs): React.ReactElement => {
150
148
  // @ts-expect-error [FEI-5003] - TS2554 - Expected 1-3 arguments, but got 0.
151
149
  const allLetters = Array(26).fill();
152
150
  return (
@@ -34,7 +34,7 @@ const ChoiceDefaults = {
34
34
  onChange: action("changed"),
35
35
  } as const;
36
36
 
37
- export const Example: React.FC<StoryArgs> = (args): React.ReactElement => {
37
+ export const Example = (args: StoryArgs): React.ReactElement => {
38
38
  const combineProps = {...ChoiceDefaults, ...args} as const;
39
39
  return <ChoiceNoneAbove {...combineProps} />;
40
40
  };
@@ -45,11 +45,11 @@ export default {
45
45
  args: defaultProps,
46
46
  } as Story;
47
47
 
48
- export const Interactive: React.FC<StoryArgs> = (args): React.ReactElement => {
48
+ export const Interactive = (args: StoryArgs): React.ReactElement => {
49
49
  return <Choice {...args} />;
50
50
  };
51
51
 
52
- export const Checked: React.FC<StoryArgs> = (args): React.ReactElement => {
52
+ export const Checked = (args: StoryArgs): React.ReactElement => {
53
53
  const sharedProps = {
54
54
  ...defaultProps,
55
55
  checked: true,
@@ -73,7 +73,7 @@ export const Checked: React.FC<StoryArgs> = (args): React.ReactElement => {
73
73
  );
74
74
  };
75
75
 
76
- export const ReviewMode: React.FC<StoryArgs> = (args): React.ReactElement => {
76
+ export const ReviewMode = (args: StoryArgs): React.ReactElement => {
77
77
  const sharedProps = {
78
78
  ...defaultProps,
79
79
  showCorrectness: true,
@@ -108,7 +108,7 @@ export const ReviewMode: React.FC<StoryArgs> = (args): React.ReactElement => {
108
108
  );
109
109
  };
110
110
 
111
- export const Rationale: React.FC<StoryArgs> = (args): React.ReactElement => {
111
+ export const Rationale = (args: StoryArgs): React.ReactElement => {
112
112
  const sharedProps = {
113
113
  ...defaultProps,
114
114
  checked: true,
@@ -25,7 +25,7 @@ export default {
25
25
  },
26
26
  } as Story;
27
27
 
28
- export const Interactive: React.FC<StoryArgs> = (args): React.ReactElement => {
28
+ export const Interactive = (args: StoryArgs): React.ReactElement => {
29
29
  // faux choice is just for demonstration
30
30
  const fauxChoiceStyles = {
31
31
  height: "20px",
@@ -26,13 +26,11 @@ export default {
26
26
  },
27
27
  } as Story;
28
28
 
29
- export const Interactive: React.FC<StoryArgs> = (args): React.ReactElement => {
29
+ export const Interactive = (args: StoryArgs): React.ReactElement => {
30
30
  return <OptionStatus {...args} />;
31
31
  };
32
32
 
33
- export const AllPossibleOutputs: React.FC<StoryArgs> = (
34
- args,
35
- ): React.ReactElement => {
33
+ export const AllPossibleOutputs = (args: StoryArgs): React.ReactElement => {
36
34
  return (
37
35
  <>
38
36
  <div>
@@ -86,7 +86,7 @@ function getInstructionsText(
86
86
  return i18n._("Choose 1 answer:");
87
87
  }
88
88
 
89
- const BaseRadio: React.FC<Props> = function (props): React.ReactElement {
89
+ const BaseRadio = function (props: Props): React.ReactElement {
90
90
  const {
91
91
  apiOptions,
92
92
  reviewModeRubric,
@@ -27,11 +27,13 @@ type ChoiceIconProps = {
27
27
  previouslyAnswered: boolean;
28
28
  };
29
29
 
30
- function ChoiceInner(props: {
30
+ type ChoiceInnerProps = {
31
31
  pos: number;
32
32
  showCorrectness: boolean;
33
33
  correct: boolean | null | undefined;
34
- }) {
34
+ };
35
+
36
+ function ChoiceInner(props: ChoiceInnerProps) {
35
37
  const {pos, showCorrectness, correct} = props;
36
38
  const letter = getChoiceLetter(pos);
37
39
 
@@ -96,9 +98,7 @@ function getDynamicStyles(
96
98
  return {backgroundColor, borderColor, color, borderRadius};
97
99
  }
98
100
 
99
- const ChoiceIcon: React.FC<ChoiceIconProps> = function (
100
- props,
101
- ): React.ReactElement {
101
+ const ChoiceIcon = function (props: ChoiceIconProps): React.ReactElement {
102
102
  const {
103
103
  checked,
104
104
  crossedOut,
@@ -14,9 +14,7 @@ const CROSS_OUT_LINE_SIZE = CHOICE_ICON_SIZE + CROSS_OUT_LINE_PADDING * 2;
14
14
  * The "cross-out line" that appears over the icon when the choice has been
15
15
  * `crossedOut`.
16
16
  */
17
- const CrossOutLine: React.FC<{
18
- color: string;
19
- }> = function (props): React.ReactElement {
17
+ const CrossOutLine = function (props: {color: string}): React.ReactElement {
20
18
  return (
21
19
  <svg
22
20
  width={CROSS_OUT_LINE_SIZE}
@@ -17,8 +17,8 @@ type WithForwardRef = {
17
17
 
18
18
  type PropsWithForwardRef = Props & WithForwardRef;
19
19
 
20
- const ChoiceNoneAbove: React.FC<PropsWithForwardRef> = function (
21
- props,
20
+ const ChoiceNoneAbove = function (
21
+ props: PropsWithForwardRef,
22
22
  ): React.ReactElement {
23
23
  const {showContent, content, forwardedRef, ...rest} = props;
24
24
 
@@ -78,9 +78,7 @@ function uniqueId() {
78
78
  return `choice-${id++}`;
79
79
  }
80
80
 
81
- const Choice: React.FC<ChoicePropsWithForwardRef> = function (
82
- props,
83
- ): React.ReactElement {
81
+ const Choice = function (props: ChoicePropsWithForwardRef): React.ReactElement {
84
82
  const {
85
83
  disabled = false,
86
84
  checked = false,
@@ -18,7 +18,7 @@ type Props = {
18
18
  multipleSelect: boolean;
19
19
  };
20
20
 
21
- const FocusRing: React.FC<Props> = function (props): React.ReactElement {
21
+ const FocusRing = function (props: Props): React.ReactElement {
22
22
  const {visible, color, children, multipleSelect} = props;
23
23
 
24
24
  const borderColor = visible ? color : "transparent";
@@ -11,7 +11,7 @@ import * as i18n from "@khanacademy/wonder-blocks-i18n";
11
11
  import {StyleSheet, css} from "aphrodite";
12
12
  import * as React from "react";
13
13
 
14
- type OptionStatusProps = {
14
+ type Props = {
15
15
  // Was this option the correct answer?
16
16
  correct: boolean;
17
17
  // Did the user select this option as the answer?
@@ -47,9 +47,7 @@ function renderText(
47
47
  return i18n._("Incorrect");
48
48
  }
49
49
 
50
- const OptionStatus: React.FC<OptionStatusProps> = function (
51
- props,
52
- ): React.ReactElement {
50
+ const OptionStatus = function (props: Props): React.ReactElement {
53
51
  const {checked, correct, crossedOut, previouslyAnswered, reviewMode} =
54
52
  props;
55
53
 
@@ -502,7 +502,6 @@ class Radio extends React.Component<Props> {
502
502
  return (
503
503
  <BaseRadio
504
504
  labelWrap={true}
505
- // @ts-expect-error [FEI-5003] - TS2322 - Type 'boolean | undefined' is not assignable to type 'boolean'.
506
505
  multipleSelect={this.props.multipleSelect}
507
506
  countChoices={this.props.countChoices}
508
507
  numCorrect={this.props.numCorrect}
@@ -7,6 +7,8 @@ import {Molecule} from "./molecule";
7
7
  import type {WidgetExports} from "../types";
8
8
 
9
9
  class Separator extends React.Component<any> {
10
+ arrowLength = 100;
11
+
10
12
  static propTypes = {
11
13
  // TODO(colin): figure out and add shape.
12
14
  data: PropTypes.any,
@@ -21,8 +23,6 @@ class Separator extends React.Component<any> {
21
23
  this.drawArrow();
22
24
  }
23
25
 
24
- arrowLength = 100;
25
-
26
26
  drawArrow = () => {
27
27
  // eslint-disable-next-line react/no-string-refs
28
28
  const canvas = this.refs["arrowCanvas" + this.props.index];
@@ -31,7 +31,7 @@ type Props = {
31
31
  /**
32
32
  * Video Transcript Link Component.
33
33
  */
34
- const VideoTranscriptLink: React.FC<Props> = (props): React.ReactElement => {
34
+ const VideoTranscriptLink = (props: Props): React.ReactElement => {
35
35
  const {location} = props;
36
36
  const {useVideo} = getDependencies();
37
37
  const [id, kind] = IS_URL.test(location)