@khanacademy/perseus 7.2.0 → 8.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 (409) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/dist/article-renderer.d.ts +26 -40
  3. package/dist/components/math-input.d.ts +1 -1
  4. package/dist/components/sortable.d.ts +1 -1
  5. package/dist/components/tex-buttons.d.ts +1 -1
  6. package/dist/es/index.css +61 -61
  7. package/dist/es/index.js +1189 -1308
  8. package/dist/es/index.js.map +1 -1
  9. package/dist/hints-renderer.d.ts +1 -1
  10. package/dist/index.css +61 -61
  11. package/dist/index.js +1180 -1269
  12. package/dist/index.js.map +1 -1
  13. package/dist/mixins/provide-keypad.d.ts +15 -12
  14. package/dist/perseus-api.d.ts +1 -1
  15. package/dist/types.d.ts +3 -2
  16. package/dist/widgets/expression.d.ts +1 -1
  17. package/dist/widgets/graded-group.d.ts +1 -1
  18. package/dist/widgets/interactive-graph.d.ts +1 -1
  19. package/dist/widgets/plotter.d.ts +47 -13
  20. package/dist/widgets/sequence.d.ts +1 -1
  21. package/dist/widgets/table.d.ts +8 -1
  22. package/dist/widgets.d.ts +1 -1
  23. package/package.json +33 -33
  24. package/src/__testdata__/article-renderer.testdata.ts +3 -1
  25. package/src/__testdata__/item-renderer.testdata.ts +1 -1
  26. package/src/__testdata__/renderer.testdata.ts +1 -1
  27. package/src/__tests__/item-renderer.test.tsx +2 -2
  28. package/src/__tests__/mock-asset-loading-widget.tsx +1 -1
  29. package/src/__tests__/perseus-markdown.test.ts +17 -17
  30. package/src/__tests__/renderer-api.test.tsx +21 -21
  31. package/src/__tests__/renderer.test.tsx +13 -13
  32. package/src/__tests__/server-item-renderer.test.tsx +3 -3
  33. package/src/__tests__/tex-wrangler.test.ts +1 -1
  34. package/src/article-renderer.tsx +39 -38
  35. package/src/components/__stories__/image-loader.stories.tsx +1 -0
  36. package/src/components/__tests__/number-input.test.tsx +4 -4
  37. package/src/components/__tests__/sortable.test.tsx +2 -2
  38. package/src/components/fixed-to-responsive.tsx +1 -1
  39. package/src/components/graph.tsx +12 -11
  40. package/src/components/graphie-classes.ts +7 -7
  41. package/src/components/graphie.tsx +14 -14
  42. package/src/components/highlighting/highlightable-content.tsx +1 -1
  43. package/src/components/highlighting/ui/highlight-renderer.tsx +1 -1
  44. package/src/components/highlighting/ui/util.ts +2 -2
  45. package/src/components/highlighting/word-indexer.tsx +4 -4
  46. package/src/components/icon.tsx +2 -1
  47. package/src/components/image-loader.tsx +5 -4
  48. package/src/components/input-with-examples.tsx +2 -2
  49. package/src/components/lint.tsx +1 -1
  50. package/src/components/math-input.tsx +5 -5
  51. package/src/components/math-output.tsx +1 -1
  52. package/src/components/multi-button-group.tsx +1 -1
  53. package/src/components/number-input.tsx +11 -10
  54. package/src/components/prop-check-box.tsx +1 -1
  55. package/src/components/simple-keypad-input.tsx +4 -4
  56. package/src/components/sortable.tsx +43 -41
  57. package/src/components/svg-image.tsx +13 -12
  58. package/src/components/tex-buttons.tsx +5 -3
  59. package/src/components/text-input.tsx +9 -8
  60. package/src/components/text-list-editor.tsx +12 -11
  61. package/src/components/visibility-observer/create-visibility-observer.ts +1 -1
  62. package/src/components/visibility-observer/visibility-observer.tsx +2 -2
  63. package/src/components/zoomable-tex.tsx +3 -3
  64. package/src/components/zoomable.tsx +9 -8
  65. package/src/hint-renderer.tsx +3 -3
  66. package/src/hints-renderer.tsx +12 -11
  67. package/src/index.ts +1 -0
  68. package/src/init.ts +1 -1
  69. package/src/interaction-tracker.ts +4 -4
  70. package/src/interactive2/__tests__/movable-point.test.ts +1 -1
  71. package/src/interactive2/interactive-util.ts +6 -6
  72. package/src/interactive2/movable-helper-methods.ts +2 -2
  73. package/src/interactive2/movable-line-options.ts +37 -37
  74. package/src/interactive2/movable-line.ts +2 -2
  75. package/src/interactive2/movable-point-options.ts +29 -29
  76. package/src/interactive2/movable-point.tsx +2 -2
  77. package/src/interactive2/movable-polygon-options.ts +45 -45
  78. package/src/interactive2/movable-polygon.ts +2 -2
  79. package/src/interactive2/movable.ts +2 -2
  80. package/src/interactive2/objective_.ts +1 -1
  81. package/src/interactive2/wrapped-defaults.ts +2 -2
  82. package/src/interactive2/wrapped-ellipse.ts +9 -9
  83. package/src/interactive2/wrapped-line.ts +8 -8
  84. package/src/interactive2/wrapped-path.ts +5 -5
  85. package/src/item-renderer.tsx +6 -5
  86. package/src/mixins/changeable.ts +2 -2
  87. package/src/mixins/editor-jsonify.ts +1 -1
  88. package/src/mixins/provide-keypad.tsx +24 -37
  89. package/src/mixins/widget-jsonify-deprecated.ts +1 -1
  90. package/src/multi-items/__tests__/items.test.ts +1 -1
  91. package/src/multi-items/__tests__/multi-renderer.test.tsx +7 -7
  92. package/src/multi-items/__tests__/trees.test.ts +12 -12
  93. package/src/multi-items/item-types.ts +2 -2
  94. package/src/multi-items/items.ts +1 -1
  95. package/src/multi-items/multi-renderer.tsx +15 -14
  96. package/src/multi-items/prop-type-builders.ts +2 -2
  97. package/src/multi-items/tree-types.ts +4 -4
  98. package/src/multi-items/trees.ts +16 -16
  99. package/src/perseus-env.ts +2 -2
  100. package/src/perseus-markdown.tsx +5 -5
  101. package/src/renderer.tsx +39 -38
  102. package/src/server-item-renderer.tsx +6 -5
  103. package/src/sigfigs.ts +1 -1
  104. package/src/styles/articles.less +8 -4
  105. package/src/styles/perseus-renderer.less +47 -38
  106. package/src/styles/util.less +1 -1
  107. package/src/styles/variables.boostrap.less +158 -182
  108. package/src/styles/variables.less +20 -20
  109. package/src/styles/variables.shared.less +162 -168
  110. package/src/styles/widgets/categorizer.less +1 -2
  111. package/src/styles/widgets/expression.less +7 -4
  112. package/src/styles/widgets/grapher.less +2 -1
  113. package/src/styles/widgets/image.less +3 -2
  114. package/src/styles/widgets/interactive-graph.less +4 -2
  115. package/src/styles/widgets/label-image.less +2 -1
  116. package/src/styles/widgets/matrix.less +11 -7
  117. package/src/styles/widgets/orderer.less +2 -1
  118. package/src/styles/widgets/passage.less +2 -1
  119. package/src/styles/widgets/plotter.less +4 -3
  120. package/src/styles/widgets/radio.less +4 -2
  121. package/src/styles/widgets/sortable.less +1 -1
  122. package/src/styles/widgets/table.less +2 -1
  123. package/src/styles/widgets/transformer.less +2 -1
  124. package/src/styles/widgets/unit.less +2 -1
  125. package/src/traversal.ts +1 -1
  126. package/src/types.ts +3 -3
  127. package/src/util/answer-types.ts +14 -14
  128. package/src/util/geometry.ts +7 -7
  129. package/src/util/graphie.ts +32 -32
  130. package/src/util/interactive.ts +118 -118
  131. package/src/util/math.ts +4 -4
  132. package/src/util/react-render.tsx +1 -1
  133. package/src/util/scroll-utils.ts +2 -2
  134. package/src/util/tex.ts +3 -3
  135. package/src/util.ts +15 -15
  136. package/src/widget-container.tsx +1 -1
  137. package/src/widgets/__stories__/plotter.stories.tsx +27 -0
  138. package/src/widgets/__stories__/test-keypad-context-wrapper.tsx +3 -3
  139. package/src/widgets/__testdata__/numeric-input.testdata.ts +1 -1
  140. package/src/widgets/__testdata__/plotter.testdata.ts +36 -0
  141. package/src/widgets/__tests__/__snapshots__/plotter.test.tsx.snap +863 -0
  142. package/src/widgets/__tests__/__snapshots__/video.test.ts.snap +2 -2
  143. package/src/widgets/__tests__/expression.test.ts +4 -3
  144. package/src/widgets/__tests__/grapher.cypress.ts +32 -32
  145. package/src/widgets/__tests__/group.test.tsx +1 -1
  146. package/src/widgets/__tests__/interactive-graph.cypress.ts +40 -40
  147. package/src/widgets/__tests__/interactive-graph.test.ts +1 -1
  148. package/src/widgets/__tests__/numeric-input.test.ts +1 -1
  149. package/src/widgets/__tests__/passage.test.tsx +2 -2
  150. package/src/widgets/__tests__/plotter.test.tsx +66 -0
  151. package/src/widgets/__tests__/radio/base-radio.test.tsx +7 -7
  152. package/src/widgets/__tests__/renderQuestion.tsx +3 -3
  153. package/src/widgets/categorizer.tsx +5 -4
  154. package/src/widgets/cs-program.tsx +2 -2
  155. package/src/widgets/dropdown.tsx +1 -1
  156. package/src/widgets/expression.tsx +10 -9
  157. package/src/widgets/graded-group-set.tsx +6 -5
  158. package/src/widgets/graded-group.tsx +19 -19
  159. package/src/widgets/grapher/util.tsx +6 -6
  160. package/src/widgets/grapher.tsx +10 -10
  161. package/src/widgets/group.tsx +3 -3
  162. package/src/widgets/iframe.tsx +2 -2
  163. package/src/widgets/image.tsx +1 -1
  164. package/src/widgets/input-number.tsx +4 -4
  165. package/src/widgets/interaction.tsx +78 -77
  166. package/src/widgets/interactive-graph.tsx +109 -107
  167. package/src/widgets/label-image/marker.tsx +3 -2
  168. package/src/widgets/label-image.test.ts +1 -1
  169. package/src/widgets/label-image.tsx +7 -7
  170. package/src/widgets/lights-puzzle.tsx +2 -2
  171. package/src/widgets/matcher.tsx +7 -6
  172. package/src/widgets/matrix.tsx +20 -20
  173. package/src/widgets/measurer.tsx +3 -3
  174. package/src/widgets/molecule/__tests__/layout.test.ts +4 -4
  175. package/src/widgets/molecule/__tests__/parser.test.ts +14 -14
  176. package/src/widgets/molecule/smiles-parser.ts +3 -3
  177. package/src/widgets/molecule.tsx +4 -4
  178. package/src/widgets/number-line.tsx +11 -11
  179. package/src/widgets/numeric-input.tsx +11 -11
  180. package/src/widgets/orderer.tsx +39 -38
  181. package/src/widgets/passage/__tests__/passage-markdown.test.ts +1 -1
  182. package/src/widgets/passage/passage-markdown.tsx +4 -4
  183. package/src/widgets/passage-ref-target.tsx +2 -1
  184. package/src/widgets/passage-ref.tsx +4 -6
  185. package/src/widgets/passage.tsx +11 -11
  186. package/src/widgets/plotter.tsx +117 -107
  187. package/src/widgets/radio/base-radio.tsx +12 -11
  188. package/src/widgets/radio/choice-icon/choice-icon.tsx +3 -2
  189. package/src/widgets/radio/choice.tsx +1 -1
  190. package/src/widgets/radio/option-status.tsx +1 -1
  191. package/src/widgets/radio/widget.tsx +6 -6
  192. package/src/widgets/radio.ts +1 -1
  193. package/src/widgets/reaction-diagram.tsx +8 -8
  194. package/src/widgets/sequence.tsx +2 -2
  195. package/src/widgets/simulator.tsx +14 -14
  196. package/src/widgets/sorter.tsx +5 -4
  197. package/src/widgets/table.tsx +8 -8
  198. package/src/widgets/transformer.tsx +93 -92
  199. package/src/widgets/unit.tsx +17 -17
  200. package/src/widgets/video-transcript-link.test.tsx +3 -3
  201. package/src/widgets/video-transcript-link.tsx +1 -1
  202. package/src/widgets/video.tsx +1 -1
  203. package/src/widgets.ts +5 -5
  204. package/src/zoom.ts +22 -22
  205. package/tsconfig-build.tsbuildinfo +1 -1
  206. package/dist/a11y.js.flow +0 -11
  207. package/dist/all-widgets.js.flow +0 -33
  208. package/dist/article-renderer.js.flow +0 -73
  209. package/dist/asset-context.js.flow +0 -15
  210. package/dist/basic-widgets.js.flow +0 -33
  211. package/dist/components/button-group.js.flow +0 -33
  212. package/dist/components/constants.js.flow +0 -13
  213. package/dist/components/fixed-to-responsive.js.flow +0 -34
  214. package/dist/components/graph.js.flow +0 -66
  215. package/dist/components/graphie-classes.js.flow +0 -19
  216. package/dist/components/graphie-movables.js.flow +0 -22
  217. package/dist/components/graphie.js.flow +0 -69
  218. package/dist/components/highlighting/highlightable-content.js.flow +0 -56
  219. package/dist/components/highlighting/highlights.js.flow +0 -54
  220. package/dist/components/highlighting/ranges.js.flow +0 -60
  221. package/dist/components/highlighting/types.js.flow +0 -70
  222. package/dist/components/highlighting/ui/highlight-renderer.js.flow +0 -43
  223. package/dist/components/highlighting/ui/highlight-set-renderer.js.flow +0 -41
  224. package/dist/components/highlighting/ui/highlight-tooltip.js.flow +0 -22
  225. package/dist/components/highlighting/ui/highlighting-ui.js.flow +0 -30
  226. package/dist/components/highlighting/ui/selection-tracker.js.flow +0 -54
  227. package/dist/components/highlighting/ui/types.js.flow +0 -22
  228. package/dist/components/highlighting/ui/util.js.flow +0 -42
  229. package/dist/components/highlighting/word-indexer.js.flow +0 -21
  230. package/dist/components/hud.js.flow +0 -14
  231. package/dist/components/icon.js.flow +0 -31
  232. package/dist/components/image-loader.js.flow +0 -49
  233. package/dist/components/info-tip/info-tip.js.flow +0 -20
  234. package/dist/components/info-tip.js.flow +0 -18
  235. package/dist/components/inline-icon.js.flow +0 -39
  236. package/dist/components/input-with-examples.js.flow +0 -58
  237. package/dist/components/lint.js.flow +0 -58
  238. package/dist/components/math-input.js.flow +0 -49
  239. package/dist/components/math-output.js.flow +0 -33
  240. package/dist/components/multi-button-group.js.flow +0 -35
  241. package/dist/components/number-input.js.flow +0 -42
  242. package/dist/components/prop-check-box.js.flow +0 -8
  243. package/dist/components/range-input.js.flow +0 -20
  244. package/dist/components/simple-keypad-input.js.flow +0 -16
  245. package/dist/components/sortable.js.flow +0 -91
  246. package/dist/components/stub-tag-editor.js.flow +0 -18
  247. package/dist/components/svg-image.js.flow +0 -85
  248. package/dist/components/tex-buttons.js.flow +0 -26
  249. package/dist/components/tex.js.flow +0 -25
  250. package/dist/components/text-input.js.flow +0 -39
  251. package/dist/components/text-list-editor.js.flow +0 -22
  252. package/dist/components/tooltip.js.flow +0 -51
  253. package/dist/components/visibility-observer/create-visibility-observer.js.flow +0 -23
  254. package/dist/components/visibility-observer/get-scroll-parent.js.flow +0 -7
  255. package/dist/components/visibility-observer/visibility-observer.js.flow +0 -36
  256. package/dist/components/zoomable-tex.js.flow +0 -18
  257. package/dist/components/zoomable.js.flow +0 -70
  258. package/dist/components.js.flow +0 -22
  259. package/dist/definition-context.js.flow +0 -25
  260. package/dist/dependencies.js.flow +0 -9
  261. package/dist/error-boundary.js.flow +0 -19
  262. package/dist/extra-widgets.js.flow +0 -33
  263. package/dist/hint-renderer.js.flow +0 -32
  264. package/dist/hints-renderer.js.flow +0 -41
  265. package/dist/icon-paths.js.flow +0 -123
  266. package/dist/index.js.flow +0 -134
  267. package/dist/init.js.flow +0 -20
  268. package/dist/interaction-tracker.js.flow +0 -35
  269. package/dist/interactive2/interactive-util.js.flow +0 -50
  270. package/dist/interactive2/movable-helper-methods.js.flow +0 -15
  271. package/dist/interactive2/movable-line-options.js.flow +0 -44
  272. package/dist/interactive2/movable-line.js.flow +0 -8
  273. package/dist/interactive2/movable-point-options.js.flow +0 -44
  274. package/dist/interactive2/movable-point.js.flow +0 -8
  275. package/dist/interactive2/movable-polygon-options.js.flow +0 -47
  276. package/dist/interactive2/movable-polygon.js.flow +0 -8
  277. package/dist/interactive2/movable.js.flow +0 -8
  278. package/dist/interactive2/objective_.js.flow +0 -25
  279. package/dist/interactive2/types.js.flow +0 -8
  280. package/dist/interactive2/wrapped-defaults.js.flow +0 -11
  281. package/dist/interactive2/wrapped-ellipse.js.flow +0 -14
  282. package/dist/interactive2/wrapped-line.js.flow +0 -14
  283. package/dist/interactive2/wrapped-path.js.flow +0 -13
  284. package/dist/interactive2.js.flow +0 -16
  285. package/dist/item-renderer.js.flow +0 -132
  286. package/dist/item-version.js.flow +0 -11
  287. package/dist/jipt-paragraphs.js.flow +0 -14
  288. package/dist/loading-context.js.flow +0 -12
  289. package/dist/logging/log.js.flow +0 -62
  290. package/dist/mixins/changeable.js.flow +0 -33
  291. package/dist/mixins/editor-jsonify.js.flow +0 -10
  292. package/dist/mixins/provide-keypad.js.flow +0 -33
  293. package/dist/mixins/widget-jsonify-deprecated.js.flow +0 -11
  294. package/dist/mixins/widget-prop-denylist.js.flow +0 -20
  295. package/dist/multi-items/item-types.js.flow +0 -55
  296. package/dist/multi-items/items.js.flow +0 -66
  297. package/dist/multi-items/multi-renderer.js.flow +0 -213
  298. package/dist/multi-items/prop-type-builders.js.flow +0 -22
  299. package/dist/multi-items/shape-types.js.flow +0 -60
  300. package/dist/multi-items/shapes.js.flow +0 -25
  301. package/dist/multi-items/tree-types.js.flow +0 -45
  302. package/dist/multi-items/trees.js.flow +0 -147
  303. package/dist/multi-items.js.flow +0 -36
  304. package/dist/perseus-api.js.flow +0 -151
  305. package/dist/perseus-env.js.flow +0 -6
  306. package/dist/perseus-error.js.flow +0 -16
  307. package/dist/perseus-markdown.js.flow +0 -20
  308. package/dist/perseus-types.js.flow +0 -1041
  309. package/dist/question-paragraph.js.flow +0 -17
  310. package/dist/renderability.js.flow +0 -19
  311. package/dist/renderer.js.flow +0 -325
  312. package/dist/server-item-renderer.js.flow +0 -132
  313. package/dist/sigfigs.js.flow +0 -41
  314. package/dist/styles/constants.js.flow +0 -62
  315. package/dist/styles/global-constants.js.flow +0 -348
  316. package/dist/styles/global-styles.js.flow +0 -53
  317. package/dist/styles/media-queries.js.flow +0 -35
  318. package/dist/styles/shared.js.flow +0 -8
  319. package/dist/tex-wrangler.js.flow +0 -13
  320. package/dist/translation-linter.js.flow +0 -32
  321. package/dist/traversal.js.flow +0 -26
  322. package/dist/types.js.flow +0 -318
  323. package/dist/util/a11y.js.flow +0 -8
  324. package/dist/util/answer-types.js.flow +0 -49
  325. package/dist/util/colors.js.flow +0 -95
  326. package/dist/util/fix-passage-refs.js.flow +0 -8
  327. package/dist/util/geometry.js.flow +0 -37
  328. package/dist/util/graph-utils.js.flow +0 -9
  329. package/dist/util/graphie.js.flow +0 -8
  330. package/dist/util/interactive.js.flow +0 -11
  331. package/dist/util/katex-preprocess.js.flow +0 -12
  332. package/dist/util/math.js.flow +0 -62
  333. package/dist/util/mobile-native-utils.js.flow +0 -12
  334. package/dist/util/react-render.js.flow +0 -12
  335. package/dist/util/register-all-widgets-for-testing.js.flow +0 -7
  336. package/dist/util/scroll-utils.js.flow +0 -19
  337. package/dist/util/sizing-utils.js.flow +0 -20
  338. package/dist/util/tex.js.flow +0 -17
  339. package/dist/util/url-utils.js.flow +0 -11
  340. package/dist/util.graphie.js.flow +0 -14
  341. package/dist/util.js.flow +0 -319
  342. package/dist/version.js.flow +0 -17
  343. package/dist/widget-container.js.flow +0 -33
  344. package/dist/widgets/categorizer.js.flow +0 -70
  345. package/dist/widgets/cs-program.js.flow +0 -54
  346. package/dist/widgets/definition.js.flow +0 -57
  347. package/dist/widgets/dropdown.js.flow +0 -63
  348. package/dist/widgets/explanation.js.flow +0 -58
  349. package/dist/widgets/expression.js.flow +0 -116
  350. package/dist/widgets/graded-group-answer-bar.js.flow +0 -24
  351. package/dist/widgets/graded-group-set.js.flow +0 -65
  352. package/dist/widgets/graded-group.js.flow +0 -78
  353. package/dist/widgets/grapher/util.js.flow +0 -38
  354. package/dist/widgets/grapher.js.flow +0 -102
  355. package/dist/widgets/group.js.flow +0 -60
  356. package/dist/widgets/iframe.js.flow +0 -53
  357. package/dist/widgets/image.js.flow +0 -73
  358. package/dist/widgets/input-number.js.flow +0 -94
  359. package/dist/widgets/interaction/arrow-picker.js.flow +0 -21
  360. package/dist/widgets/interaction/color-picker.js.flow +0 -23
  361. package/dist/widgets/interaction/dash-picker.js.flow +0 -21
  362. package/dist/widgets/interaction/element-container.js.flow +0 -28
  363. package/dist/widgets/interaction.js.flow +0 -60
  364. package/dist/widgets/interactive-graph.js.flow +0 -239
  365. package/dist/widgets/label-image/answer-choices.js.flow +0 -55
  366. package/dist/widgets/label-image/marker.js.flow +0 -31
  367. package/dist/widgets/label-image/types.js.flow +0 -23
  368. package/dist/widgets/label-image.js.flow +0 -142
  369. package/dist/widgets/lights-puzzle.js.flow +0 -58
  370. package/dist/widgets/matcher.js.flow +0 -106
  371. package/dist/widgets/matrix.js.flow +0 -80
  372. package/dist/widgets/measurer.js.flow +0 -30
  373. package/dist/widgets/molecule/molecule-drawing.js.flow +0 -11
  374. package/dist/widgets/molecule/molecule-layout.js.flow +0 -96
  375. package/dist/widgets/molecule/smiles-parser.js.flow +0 -26
  376. package/dist/widgets/molecule.js.flow +0 -60
  377. package/dist/widgets/number-line.js.flow +0 -102
  378. package/dist/widgets/numeric-input.js.flow +0 -105
  379. package/dist/widgets/orderer.js.flow +0 -81
  380. package/dist/widgets/passage/passage-markdown.js.flow +0 -33
  381. package/dist/widgets/passage-ref-target.js.flow +0 -52
  382. package/dist/widgets/passage-ref.js.flow +0 -85
  383. package/dist/widgets/passage.js.flow +0 -157
  384. package/dist/widgets/plotter.js.flow +0 -78
  385. package/dist/widgets/radio/base-radio.js.flow +0 -50
  386. package/dist/widgets/radio/choice-a11y-text.js.flow +0 -14
  387. package/dist/widgets/radio/choice-icon/choice-icon.js.flow +0 -22
  388. package/dist/widgets/radio/choice-icon/cross-out-line.js.flow +0 -16
  389. package/dist/widgets/radio/choice-icon/shared-styles.js.flow +0 -11
  390. package/dist/widgets/radio/choice-none-above.js.flow +0 -16
  391. package/dist/widgets/radio/choice.js.flow +0 -29
  392. package/dist/widgets/radio/choice.jsx.fixture.js.flow +0 -7
  393. package/dist/widgets/radio/focus-ring.js.flow +0 -22
  394. package/dist/widgets/radio/option-status.js.flow +0 -16
  395. package/dist/widgets/radio/util.js.flow +0 -12
  396. package/dist/widgets/radio/widget.js.flow +0 -80
  397. package/dist/widgets/radio.js.flow +0 -31
  398. package/dist/widgets/reaction-diagram.js.flow +0 -46
  399. package/dist/widgets/sequence.js.flow +0 -53
  400. package/dist/widgets/simulator.js.flow +0 -107
  401. package/dist/widgets/sorter.js.flow +0 -102
  402. package/dist/widgets/table.js.flow +0 -67
  403. package/dist/widgets/transformer.js.flow +0 -127
  404. package/dist/widgets/unit.js.flow +0 -93
  405. package/dist/widgets/video-transcript-link.js.flow +0 -15
  406. package/dist/widgets/video.js.flow +0 -57
  407. package/dist/widgets.js.flow +0 -108
  408. package/dist/zoom.js.flow +0 -7
  409. package/src/multi-items/item-types.js.flow +0 -55
@@ -56,7 +56,7 @@ describe("Perseus API", function () {
56
56
 
57
57
  describe("setInputValue", function () {
58
58
  it("should be able to produce a correctly graded value", function () {
59
- // @ts-expect-error [FEI-5003] - TS2554 - Expected 2 arguments, but got 1.
59
+ // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
60
60
  const renderer = renderQuestionArea(inputNumber1Item);
61
61
  renderer.setInputValue(["input-number 1"], "5");
62
62
  const score = renderer.guessAndScore()[1];
@@ -65,7 +65,7 @@ describe("Perseus API", function () {
65
65
  });
66
66
 
67
67
  it("should be able to produce a wrong value", function () {
68
- // @ts-expect-error [FEI-5003] - TS2554 - Expected 2 arguments, but got 1.
68
+ // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
69
69
  const renderer = renderQuestionArea(inputNumber1Item);
70
70
  renderer.setInputValue(["input-number 1"], "3", () => {});
71
71
  const score = renderer.guessAndScore()[1];
@@ -74,7 +74,7 @@ describe("Perseus API", function () {
74
74
  });
75
75
 
76
76
  it("should be able to produce an empty score", function () {
77
- // @ts-expect-error [FEI-5003] - TS2554 - Expected 2 arguments, but got 1.
77
+ // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
78
78
  const renderer = renderQuestionArea(inputNumber1Item);
79
79
  renderer.setInputValue(["input-number 1"], "3");
80
80
  let score = renderer.guessAndScore()[1];
@@ -86,7 +86,7 @@ describe("Perseus API", function () {
86
86
  });
87
87
 
88
88
  it("should be able to accept a callback", function (done) {
89
- // @ts-expect-error [FEI-5003] - TS2554 - Expected 2 arguments, but got 1.
89
+ // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
90
90
  const renderer = renderQuestionArea(inputNumber1Item);
91
91
  renderer.setInputValue(["input-number 1"], "3", function () {
92
92
  const guess = renderer.getUserInput()[0];
@@ -99,14 +99,14 @@ describe("Perseus API", function () {
99
99
 
100
100
  describe("getInputPaths", function () {
101
101
  it("should be able to find all the input widgets", function () {
102
- // @ts-expect-error [FEI-5003] - TS2554 - Expected 2 arguments, but got 1.
102
+ // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
103
103
  const renderer = renderQuestionArea(inputNumber2Item);
104
104
  const numPaths = renderer.getInputPaths().length;
105
105
  expect(numPaths).toBe(2);
106
106
  });
107
107
 
108
108
  it("should be able to find all inputs within widgets", function () {
109
- // @ts-expect-error [FEI-5003] - TS2554 - Expected 2 arguments, but got 1.
109
+ // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
110
110
  const renderer = renderQuestionArea(tableItem);
111
111
  const numPaths = renderer.getInputPaths().length;
112
112
  expect(numPaths).toBe(8);
@@ -115,7 +115,7 @@ describe("Perseus API", function () {
115
115
 
116
116
  describe("getDOMNodeForPath", function () {
117
117
  it("should find one DOM node per <input>", function () {
118
- // @ts-expect-error [FEI-5003] - TS2554 - Expected 2 arguments, but got 1.
118
+ // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
119
119
  const renderer = renderQuestionArea(inputNumber2Item);
120
120
  const inputPaths = renderer.getInputPaths();
121
121
  const allInputs = TestUtils.scryRenderedDOMComponentsWithTag(
@@ -126,7 +126,7 @@ describe("Perseus API", function () {
126
126
  });
127
127
 
128
128
  it("should find the right DOM nodes for the <input>s", function () {
129
- // @ts-expect-error [FEI-5003] - TS2554 - Expected 2 arguments, but got 1.
129
+ // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
130
130
  const renderer = renderQuestionArea(inputNumber2Item);
131
131
  const inputPaths = renderer.getInputPaths();
132
132
  const allInputs = TestUtils.scryRenderedDOMComponentsWithTag(
@@ -135,9 +135,9 @@ describe("Perseus API", function () {
135
135
  );
136
136
  _.each(inputPaths, (inputPath, i) => {
137
137
  const $node = $(renderer.getDOMNodeForPath(inputPath));
138
- // @ts-expect-error [FEI-5003] - TS2769 - No overload matches this call.
138
+ // @ts-expect-error - TS2769 - No overload matches this call.
139
139
  const $input = $(ReactDOM.findDOMNode(allInputs[i]));
140
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'closest' does not exist on type 'JQueryStatic'.
140
+ // @ts-expect-error - TS2339 - Property 'closest' does not exist on type 'JQueryStatic'.
141
141
  expect($input.closest($node).length).toBeTruthy();
142
142
  });
143
143
  });
@@ -172,18 +172,18 @@ describe("Perseus API", function () {
172
172
  });
173
173
 
174
174
  const input =
175
- // @ts-expect-error [FEI-5003] - TS2531 - Object is possibly 'null'. | TS2339 - Property 'querySelector' does not exist on type 'Element | Text'.
175
+ // @ts-expect-error - TS2531 - Object is possibly 'null'. | TS2339 - Property 'querySelector' does not exist on type 'Element | Text'.
176
176
  ReactDOM.findDOMNode(renderer).querySelector("input");
177
177
 
178
- // @ts-expect-error [FEI-5003] - TS2532 - Object is possibly 'undefined'.
178
+ // @ts-expect-error - TS2532 - Object is possibly 'undefined'.
179
179
  expect($(input).attr("class").includes("focused")).toBe(false);
180
180
 
181
181
  TestUtils.Simulate.focus(input);
182
- // @ts-expect-error [FEI-5003] - TS2532 - Object is possibly 'undefined'.
182
+ // @ts-expect-error - TS2532 - Object is possibly 'undefined'.
183
183
  expect($(input).attr("class").includes("focused")).toBe(true);
184
184
 
185
185
  TestUtils.Simulate.blur(input);
186
- // @ts-expect-error [FEI-5003] - TS2532 - Object is possibly 'undefined'.
186
+ // @ts-expect-error - TS2532 - Object is possibly 'undefined'.
187
187
  expect($(input).attr("class").includes("focused")).toBe(false);
188
188
  });
189
189
  });
@@ -204,7 +204,7 @@ describe("Perseus API", function () {
204
204
  },
205
205
  });
206
206
 
207
- // @ts-expect-error [FEI-5003] - TS2531 - Object is possibly 'null'. | TS2339 - Property 'querySelector' does not exist on type 'Element | Text'.
207
+ // @ts-expect-error - TS2531 - Object is possibly 'null'. | TS2339 - Property 'querySelector' does not exist on type 'Element | Text'.
208
208
  const input = ReactDOM.findDOMNode(renderer).querySelector("input");
209
209
 
210
210
  callCount = 0;
@@ -215,7 +215,7 @@ describe("Perseus API", function () {
215
215
  // result here. This also means that this test should
216
216
  // continue to pass if we decide it makes more sense for
217
217
  // this callback to be async, which could reasonably happen
218
- // @ts-expect-error [FEI-5003] - TS2554 - Expected 1 arguments, but got 0.
218
+ // @ts-expect-error - TS2554 - Expected 1 arguments, but got 0.
219
219
  return delayedPromise()
220
220
  .then(() => {
221
221
  expect(callCount).toBe(1);
@@ -224,7 +224,7 @@ describe("Perseus API", function () {
224
224
 
225
225
  callCount = 0;
226
226
  TestUtils.Simulate.blur(input);
227
- // @ts-expect-error [FEI-5003] - TS2554 - Expected 1 arguments, but got 0.
227
+ // @ts-expect-error - TS2554 - Expected 1 arguments, but got 0.
228
228
  return delayedPromise();
229
229
  })
230
230
  .then(() => {
@@ -249,7 +249,7 @@ describe("Perseus API", function () {
249
249
  });
250
250
 
251
251
  const inputs =
252
- // @ts-expect-error [FEI-5003] - TS2531 - Object is possibly 'null'. | TS2339 - Property 'querySelectorAll' does not exist on type 'Element | Text'.
252
+ // @ts-expect-error - TS2531 - Object is possibly 'null'. | TS2339 - Property 'querySelectorAll' does not exist on type 'Element | Text'.
253
253
  ReactDOM.findDOMNode(renderer).querySelectorAll("input");
254
254
  const input1 = inputs[0];
255
255
  const input2 = inputs[1];
@@ -263,7 +263,7 @@ describe("Perseus API", function () {
263
263
  // result here. This also means that this test should
264
264
  // continue to pass if we decide it makes more sense for
265
265
  // this callback to be async, which could reasonably happen
266
- // @ts-expect-error [FEI-5003] - TS2554 - Expected 1 arguments, but got 0.
266
+ // @ts-expect-error - TS2554 - Expected 1 arguments, but got 0.
267
267
  return delayedPromise().then(() => {
268
268
  expect(callCount).toBe(1);
269
269
  expect(oldFocusResult).toEqual(["input-number 1"]);
@@ -289,7 +289,7 @@ describe("Perseus API", function () {
289
289
  );
290
290
 
291
291
  const spans = TestUtils.scryRenderedDOMComponentsWithTag(
292
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'void' is not assignable to parameter of type 'Component<any, {}, any>'.
292
+ // @ts-expect-error - TS2345 - Argument of type 'void' is not assignable to parameter of type 'Component<any, {}, any>'.
293
293
  renderer,
294
294
  "span",
295
295
  );
@@ -313,7 +313,7 @@ describe("Perseus API", function () {
313
313
  );
314
314
 
315
315
  const spans = TestUtils.scryRenderedDOMComponentsWithTag(
316
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'void' is not assignable to parameter of type 'Component<any, {}, any>'.
316
+ // @ts-expect-error - TS2345 - Argument of type 'void' is not assignable to parameter of type 'Component<any, {}, any>'.
317
317
  renderer,
318
318
  "span",
319
319
  );
@@ -149,7 +149,7 @@ describe("renderer", () => {
149
149
  mockRunLinter.mockClear();
150
150
 
151
151
  // Act
152
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type '{ problemNum: number; linterContext: { readonly contentType: "exercise"; readonly highlightLint: true; readonly paths: readonly []; readonly stack: readonly []; }; }' is not assignable to parameter of type 'Pick<{}, never> & InexactPartial<Pick<{}, never>> & InexactPartial<Pick<DefaultProps, keyof DefaultProps>>'.
152
+ // @ts-expect-error - TS2345 - Argument of type '{ problemNum: number; linterContext: { readonly contentType: "exercise"; readonly highlightLint: true; readonly paths: readonly []; readonly stack: readonly []; }; }' is not assignable to parameter of type 'Pick<{}, never> & InexactPartial<Pick<{}, never>> & InexactPartial<Pick<DefaultProps, keyof DefaultProps>>'.
153
153
  rerender(question1, {...extraProps, problemNum: 1});
154
154
 
155
155
  // Assert
@@ -192,7 +192,7 @@ describe("renderer", () => {
192
192
  ...question1.widgets,
193
193
  // $FlowIgnore[prop-missing]
194
194
  // $FlowIgnore[incompatible-cast]
195
- // @ts-expect-error [FEI-5003] - TS2352 - Conversion of type '{ type: undefined; static?: boolean | undefined; graded?: boolean | undefined; alignment?: string | undefined; options: PerseusCategorizerWidgetOptions | null | undefined; key?: number | undefined; version?: Version | undefined; } | ... 38 more ... | { ...; }' to type 'DropdownWidget' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.
195
+ // @ts-expect-error - TS2352 - Conversion of type '{ type: undefined; static?: boolean | undefined; graded?: boolean | undefined; alignment?: string | undefined; options: PerseusCategorizerWidgetOptions | null | undefined; key?: number | undefined; version?: Version | undefined; } | ... 38 more ... | { ...; }' to type 'DropdownWidget' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.
196
196
  "dropdown 1": {
197
197
  ...question1.widgets["dropdown 1"],
198
198
  // $FlowIgnore[incompatible-cast]
@@ -298,7 +298,7 @@ describe("renderer", () => {
298
298
  originalImage = window.Image;
299
299
  // Mock HTML Image so we can trigger onLoad callbacks and see full
300
300
  // image rendering.
301
- // @ts-expect-error [FEI-5003] - TS2322 - Type 'Mock<Record<string, any>, [], any>' is not assignable to type 'new (width?: number | undefined, height?: number | undefined) => HTMLImageElement'.
301
+ // @ts-expect-error - TS2322 - Type 'Mock<Record<string, any>, [], any>' is not assignable to type 'new (width?: number | undefined, height?: number | undefined) => HTMLImageElement'.
302
302
  window.Image = jest.fn(() => {
303
303
  const img: Record<string, any> = {};
304
304
  images.push(img);
@@ -426,7 +426,7 @@ describe("renderer", () => {
426
426
 
427
427
  const wrapperStyle = getComputedStyle(
428
428
  // $FlowIgnore[incompatible-call]
429
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'HTMLElement | null' is not assignable to parameter of type 'Element'.
429
+ // @ts-expect-error - TS2345 - Argument of type 'HTMLElement | null' is not assignable to parameter of type 'Element'.
430
430
  screen.getByAltText("This image has dimensions").parentElement, // eslint-disable-line testing-library/no-node-access
431
431
  );
432
432
  expect(wrapperStyle.maxWidth).toBe("420px");
@@ -452,7 +452,7 @@ describe("renderer", () => {
452
452
 
453
453
  const wrapperStyle = getComputedStyle(
454
454
  // $FlowIgnore[incompatible-call]
455
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'HTMLElement | null' is not assignable to parameter of type 'Element'.
455
+ // @ts-expect-error - TS2345 - Argument of type 'HTMLElement | null' is not assignable to parameter of type 'Element'.
456
456
  screen.getByAltText("This image doesn't").parentElement, // eslint-disable-line testing-library/no-node-access
457
457
  );
458
458
  expect(wrapperStyle.maxWidth).toBe("");
@@ -683,11 +683,11 @@ describe("renderer", () => {
683
683
  );
684
684
  expect(zoomable).not.toBeUndefined();
685
685
  expect(zoomable).not.toBeNull();
686
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'style' does not exist on type 'Element'.
686
+ // @ts-expect-error - TS2339 - Property 'style' does not exist on type 'Element'.
687
687
  expect(zoomable.style.transform).not.toBe("");
688
688
 
689
689
  /* eslint-disable testing-library/no-node-access */
690
- // @ts-expect-error [FEI-5003] - TS2531 - Object is possibly 'null'.
690
+ // @ts-expect-error - TS2531 - Object is possibly 'null'.
691
691
  expect(zoomable.parentElement.style.transform).not.toBe("");
692
692
  /* eslint-enable testing-library/no-node-access */
693
693
  });
@@ -1139,7 +1139,7 @@ describe("renderer", () => {
1139
1139
 
1140
1140
  const {renderer} = renderQuestion(mockedItem);
1141
1141
  const [widget1, widget2, widget3] = renderer.findWidgets(
1142
- // @ts-expect-error [FEI-5003] - TS2367 - This condition will always return 'false' since the types '"video" | "image" | "iframe" | "table" | "radio" | "definition" | "group" | "matrix" | "categorizer" | "cs-program" | "dropdown" | "example-graphie-widget" | "example-widget" | ... 26 more ... | "unit-input"' and '"mock-widget"' have no overlap.
1142
+ // @ts-expect-error - TS2367 - This condition will always return 'false' since the types '"video" | "image" | "iframe" | "table" | "radio" | "definition" | "group" | "matrix" | "categorizer" | "cs-program" | "dropdown" | "example-graphie-widget" | "example-widget" | ... 26 more ... | "unit-input"' and '"mock-widget"' have no overlap.
1143
1143
  (_, info) => info.type === "mock-widget",
1144
1144
  );
1145
1145
  widget1.restoreSerializedState = makeRestoreSerializedStateMock;
@@ -1311,7 +1311,7 @@ describe("renderer", () => {
1311
1311
  break;
1312
1312
  }
1313
1313
  // eslint-disable-next-line testing-library/no-node-access
1314
- // @ts-expect-error [FEI-5003] - TS2322 - Type 'HTMLElement | null' is not assignable to type 'HTMLElement'.
1314
+ // @ts-expect-error - TS2322 - Type 'HTMLElement | null' is not assignable to type 'HTMLElement'.
1315
1315
  // eslint-disable-next-line testing-library/no-node-access
1316
1316
  el = el.parentElement;
1317
1317
  }
@@ -1334,7 +1334,7 @@ describe("renderer", () => {
1334
1334
  },
1335
1335
  },
1336
1336
  {},
1337
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type '{ problemNum: number; }' is not assignable to parameter of type 'Pick<{}, never> & InexactPartial<Pick<{}, never>> & InexactPartial<Pick<DefaultProps, keyof DefaultProps>>'.
1337
+ // @ts-expect-error - TS2345 - Argument of type '{ problemNum: number; }' is not assignable to parameter of type 'Pick<{}, never> & InexactPartial<Pick<{}, never>> & InexactPartial<Pick<DefaultProps, keyof DefaultProps>>'.
1338
1338
  {problemNum: 1},
1339
1339
  );
1340
1340
 
@@ -1349,7 +1349,7 @@ describe("renderer", () => {
1349
1349
  // Arrange
1350
1350
  const {renderer} = renderQuestion(mockedItem);
1351
1351
  const widgets = renderer.findWidgets(
1352
- // @ts-expect-error [FEI-5003] - TS2367 - This condition will always return 'false' since the types '"video" | "image" | "iframe" | "table" | "radio" | "definition" | "group" | "matrix" | "categorizer" | "cs-program" | "dropdown" | "example-graphie-widget" | "example-widget" | ... 26 more ... | "unit-input"' and '"mock-widget"' have no overlap.
1352
+ // @ts-expect-error - TS2367 - This condition will always return 'false' since the types '"video" | "image" | "iframe" | "table" | "radio" | "definition" | "group" | "matrix" | "categorizer" | "cs-program" | "dropdown" | "example-graphie-widget" | "example-widget" | ... 26 more ... | "unit-input"' and '"mock-widget"' have no overlap.
1353
1353
  (_, info) => info.type === "mock-widget",
1354
1354
  );
1355
1355
  widgets.forEach(
@@ -1376,7 +1376,7 @@ describe("renderer", () => {
1376
1376
  // Arrange
1377
1377
  const {renderer} = renderQuestion(mockedItem);
1378
1378
  const widgets = renderer.findWidgets(
1379
- // @ts-expect-error [FEI-5003] - TS2367 - This condition will always return 'false' since the types '"video" | "image" | "iframe" | "table" | "radio" | "definition" | "group" | "matrix" | "categorizer" | "cs-program" | "dropdown" | "example-graphie-widget" | "example-widget" | ... 26 more ... | "unit-input"' and '"mock-widget"' have no overlap.
1379
+ // @ts-expect-error - TS2367 - This condition will always return 'false' since the types '"video" | "image" | "iframe" | "table" | "radio" | "definition" | "group" | "matrix" | "categorizer" | "cs-program" | "dropdown" | "example-graphie-widget" | "example-widget" | ... 26 more ... | "unit-input"' and '"mock-widget"' have no overlap.
1380
1380
  (_, info) => info.type === "mock-widget",
1381
1381
  );
1382
1382
  widgets.forEach(
@@ -1489,7 +1489,7 @@ describe("renderer", () => {
1489
1489
 
1490
1490
  // Assert
1491
1491
  // "button" role is the WB dropdown's "opener" element
1492
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'Element | Text | null | undefined' is not assignable to parameter of type 'HTMLElement'.
1492
+ // @ts-expect-error - TS2345 - Argument of type 'Element | Text | null | undefined' is not assignable to parameter of type 'HTMLElement'.
1493
1493
  expect(within(node).queryAllByRole("button")).toHaveLength(1);
1494
1494
  });
1495
1495
 
@@ -18,13 +18,13 @@ import InputNumberExport from "../widgets/input-number";
18
18
  import RadioWidgetExport from "../widgets/radio";
19
19
 
20
20
  import MockAssetLoadingWidgetExport, {
21
- MockAssetLoadingWidget,
22
21
  mockedAssetItem,
23
22
  } from "./mock-asset-loading-widget";
24
23
  import MockWidgetExport from "./mock-widget";
25
24
 
26
25
  import type {PerseusItem} from "../perseus-types";
27
26
  import type {APIOptions} from "../types";
27
+ import type {MockAssetLoadingWidget} from "./mock-asset-loading-widget";
28
28
 
29
29
  // This looks alot like `widgets/__tests__/renderQuestion.jsx', except we use
30
30
  // the ServerItemRenderer instead of Renderer
@@ -167,7 +167,7 @@ describe("server item renderer", () => {
167
167
  const node = renderer.getDOMNodeForPath(["input-number 1"]);
168
168
 
169
169
  // Assert
170
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'Element | Text | null | undefined' is not assignable to parameter of type 'HTMLElement'.
170
+ // @ts-expect-error - TS2345 - Argument of type 'Element | Text | null | undefined' is not assignable to parameter of type 'HTMLElement'.
171
171
  expect(await within(node).findAllByRole("textbox")).toHaveLength(1);
172
172
  });
173
173
 
@@ -300,7 +300,7 @@ describe("server item renderer", () => {
300
300
  // Act
301
301
  // setAssetStatus() is not part of the Widget interface, it's specific
302
302
  // this test.
303
- // @ts-expect-error [FEI-5003] - TS2352 - Conversion of type 'Widget' to type 'MockAssetLoadingWidget' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.
303
+ // @ts-expect-error - TS2352 - Conversion of type 'Widget' to type 'MockAssetLoadingWidget' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.
304
304
  const widget = mockedWidget as MockAssetLoadingWidget;
305
305
  widget.setAssetStatus("ABC", true);
306
306
 
@@ -13,7 +13,7 @@ const assertWrangled = (toWrangle: string, check: string) => {
13
13
 
14
14
  const assertParsed = (toParse: undefined | string, check: string) => {
15
15
  // We ignore whitespace when comparing
16
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'string | undefined' is not assignable to parameter of type 'string'.
16
+ // @ts-expect-error - TS2345 - Argument of type 'string | undefined' is not assignable to parameter of type 'string'.
17
17
  const parsed = parseTex(toParse).replace(whitespaceRegex, "");
18
18
  const checkNoSpace = check.replace(whitespaceRegex, "");
19
19
  expect(parsed).toBe(checkNoSpace);
@@ -5,7 +5,6 @@
5
5
 
6
6
  import * as PerseusLinter from "@khanacademy/perseus-linter";
7
7
  import classNames from "classnames";
8
- import PropTypes from "prop-types";
9
8
  import * as React from "react";
10
9
 
11
10
  import ProvideKeypad from "./mixins/provide-keypad";
@@ -13,42 +12,44 @@ import {ClassNames as ApiClassNames, ApiOptions} from "./perseus-api";
13
12
  import Renderer from "./renderer";
14
13
  import Util from "./util";
15
14
 
16
- const rendererProps = PropTypes.shape({
17
- content: PropTypes.string,
18
- widgets: PropTypes.objectOf(PropTypes.any),
19
- images: PropTypes.objectOf(PropTypes.any),
20
- });
21
-
22
- class ArticleRenderer extends React.Component<any, any> {
15
+ import type {KeypadProps} from "./mixins/provide-keypad";
16
+ import type {PerseusRenderer} from "./perseus-types";
17
+ import type {APIOptions} from "./types";
18
+ import type {LinterContextProps} from "@khanacademy/perseus-linter";
19
+
20
+ type Props = {
21
+ apiOptions: APIOptions;
22
+ json: PerseusRenderer | ReadonlyArray<PerseusRenderer>;
23
+
24
+ // Whether to use the new Bibliotron styles for articles
25
+ /**
26
+ * @deprecated Does nothing
27
+ */
28
+ useNewStyles: boolean;
29
+ linterContext: LinterContextProps;
30
+ legacyPerseusLint?: ReadonlyArray<string>;
31
+ } & KeypadProps;
32
+
33
+ type DefaultProps = {
34
+ apiOptions: Props["apiOptions"];
35
+ useNewStyles: Props["useNewStyles"];
36
+ linterContext: Props["linterContext"];
37
+ };
38
+
39
+ type State = {
40
+ keypadElement: any | null;
41
+ };
42
+
43
+ class ArticleRenderer extends React.Component<Props, State> {
23
44
  _currentFocus: any;
24
45
 
25
- static propTypes = {
26
- ...ProvideKeypad.propTypes,
27
- apiOptions: PropTypes.shape({
28
- onFocusChange: PropTypes.func,
29
- isMobile: PropTypes.bool,
30
- }),
31
- json: PropTypes.oneOfType([
32
- rendererProps,
33
- PropTypes.arrayOf(rendererProps),
34
- ]).isRequired,
35
-
36
- // Whether to use the new Bibliotron styles for articles
37
- /**
38
- * @deprecated Does nothing
39
- */
40
- useNewStyles: PropTypes.bool,
41
- linterContext: PerseusLinter.linterContextProps,
42
- legacyPerseusLint: PropTypes.arrayOf(PropTypes.string),
43
- };
44
-
45
- static defaultProps: any = {
46
- apiOptions: {},
46
+ static defaultProps: DefaultProps = {
47
+ apiOptions: ApiOptions.defaults,
47
48
  useNewStyles: false,
48
49
  linterContext: PerseusLinter.linterContextDefault,
49
50
  };
50
51
 
51
- constructor(props: any) {
52
+ constructor(props: Props) {
52
53
  super(props);
53
54
  this.state = ProvideKeypad.getInitialState.call(this);
54
55
  }
@@ -58,7 +59,7 @@ class ArticleRenderer extends React.Component<any, any> {
58
59
  this._currentFocus = null;
59
60
  }
60
61
 
61
- shouldComponentUpdate(nextProps: any, nextState: any): any {
62
+ shouldComponentUpdate(nextProps: Props, nextState: State): boolean {
62
63
  return nextProps !== this.props || nextState !== this.state;
63
64
  }
64
65
 
@@ -96,7 +97,7 @@ class ArticleRenderer extends React.Component<any, any> {
96
97
  if (this._currentFocus) {
97
98
  const [sectionRef, ...focusPath] = this._currentFocus;
98
99
  // eslint-disable-next-line react/no-string-refs
99
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'getInputPaths' does not exist on type 'ReactInstance'.
100
+ // @ts-expect-error - TS2339 - Property 'getInputPaths' does not exist on type 'ReactInstance'.
100
101
  const inputPaths = this.refs[sectionRef].getInputPaths();
101
102
  didFocusInput = inputPaths.some((inputPath) => {
102
103
  return Util.inputPathsEqual(inputPath, focusPath);
@@ -107,18 +108,18 @@ class ArticleRenderer extends React.Component<any, any> {
107
108
  this.props.apiOptions.onFocusChange(
108
109
  this._currentFocus,
109
110
  prevFocusPath,
110
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'getDOMNode' does not exist on type 'never'.
111
+ // @ts-expect-error - TS2339 - Property 'getDOMNode' does not exist on type 'never'.
111
112
  didFocusInput && keypadElement && keypadElement.getDOMNode(),
112
113
  );
113
114
  }
114
115
 
115
- // @ts-expect-error [FEI-5003] - TS1345 - An expression of type 'void' cannot be tested for truthiness.
116
+ // @ts-expect-error - TS1345 - An expression of type 'void' cannot be tested for truthiness.
116
117
  if (keypadElement) {
117
118
  if (didFocusInput) {
118
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'activate' does not exist on type 'never'.
119
+ // @ts-expect-error - TS2339 - Property 'activate' does not exist on type 'never'.
119
120
  keypadElement.activate();
120
121
  } else {
121
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'dismiss' does not exist on type 'never'.
122
+ // @ts-expect-error - TS2339 - Property 'dismiss' does not exist on type 'never'.
122
123
  keypadElement.dismiss();
123
124
  }
124
125
  }
@@ -149,7 +150,7 @@ class ArticleRenderer extends React.Component<any, any> {
149
150
  if (this._currentFocus) {
150
151
  const [sectionRef, ...inputPath] = this._currentFocus;
151
152
  // eslint-disable-next-line react/no-string-refs
152
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'blurPath' does not exist on type 'ReactInstance'.
153
+ // @ts-expect-error - TS2339 - Property 'blurPath' does not exist on type 'ReactInstance'.
153
154
  this.refs[sectionRef].blurPath(inputPath);
154
155
  }
155
156
  };
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @khanacademy/ts-no-error-suppressions */
1
2
  import * as React from "react";
2
3
 
3
4
  type StoryArgs = Record<any, any>;
@@ -31,7 +31,7 @@ describe("NumberInput", function () {
31
31
  );
32
32
 
33
33
  const node = TestUtils.renderIntoDocument(<NumberInput {...props} />);
34
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'Element | Text | null' is not assignable to parameter of type 'Element | Component<any, {}, any>'. | TS2345 - Argument of type 'void' is not assignable to parameter of type 'ReactInstance | null | undefined'.
34
+ // @ts-expect-error - TS2345 - Argument of type 'Element | Text | null' is not assignable to parameter of type 'Element | Component<any, {}, any>'. | TS2345 - Argument of type 'void' is not assignable to parameter of type 'ReactInstance | null | undefined'.
35
35
  TestUtils.Simulate.change(ReactDOM.findDOMNode(node), {
36
36
  target: {value: input},
37
37
  });
@@ -39,12 +39,12 @@ describe("NumberInput", function () {
39
39
  };
40
40
 
41
41
  it("basic input", function () {
42
- // @ts-expect-error [FEI-5003] - TS2554 - Expected 3 arguments, but got 2.
42
+ // @ts-expect-error - TS2554 - Expected 3 arguments, but got 2.
43
43
  testInputResult("42", 42);
44
44
  });
45
45
 
46
46
  it("invalid input does not change", function () {
47
- // @ts-expect-error [FEI-5003] - TS2554 - Expected 3 arguments, but got 2.
47
+ // @ts-expect-error - TS2554 - Expected 3 arguments, but got 2.
48
48
  testInputResult("asdf", STARTING_VALUE);
49
49
  });
50
50
 
@@ -78,7 +78,7 @@ describe("NumberInput", function () {
78
78
  useArrowKeys={keysEnabled}
79
79
  />,
80
80
  );
81
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'Element | Text | null' is not assignable to parameter of type 'Element | Component<any, {}, any>'. | TS2345 - Argument of type 'void' is not assignable to parameter of type 'ReactInstance | null | undefined'.
81
+ // @ts-expect-error - TS2345 - Argument of type 'Element | Text | null' is not assignable to parameter of type 'Element | Component<any, {}, any>'. | TS2345 - Argument of type 'void' is not assignable to parameter of type 'ReactInstance | null | undefined'.
82
82
  TestUtils.Simulate.keyDown(ReactDOM.findDOMNode(node), {key: key});
83
83
  expect(newVal).toEqual(endingValue);
84
84
  };
@@ -89,10 +89,10 @@ describe("moveOptionToIndex", () => {
89
89
  throw new Error("Failed to render");
90
90
  }
91
91
 
92
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'moveOptionToIndex' does not exist on type 'never'.
92
+ // @ts-expect-error - TS2339 - Property 'moveOptionToIndex' does not exist on type 'never'.
93
93
  sortable.moveOptionToIndex("a", 1);
94
94
 
95
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'getOptions' does not exist on type 'never'.
95
+ // @ts-expect-error - TS2339 - Property 'getOptions' does not exist on type 'never'.
96
96
  expect(sortable?.getOptions()).toStrictEqual(["b", "a", "c"]);
97
97
  });
98
98
 
@@ -108,7 +108,7 @@ class FixedToResponsive extends React.Component<Props, State> {
108
108
  const spacer = (
109
109
  <div
110
110
  style={{
111
- // @ts-expect-error [FEI-5003] - TS2362 - The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.
111
+ // @ts-expect-error - TS2362 - The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.
112
112
  paddingBottom: (1 / aspectRatio).toFixed(4) * 100 + "%",
113
113
  }}
114
114
  />
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @khanacademy/ts-no-error-suppressions */
1
2
  /* eslint-disable react/no-unsafe */
2
3
  import $ from "jquery";
3
4
  import * as React from "react";
@@ -83,9 +84,9 @@ class Graph extends React.Component<Props> {
83
84
  protractor: any;
84
85
  ruler: any;
85
86
  _graphie: any;
86
- // @ts-expect-error [FEI-5003] - TS2564 - Property '_hasSetupGraphieThisUpdate' has no initializer and is not definitely assigned in the constructor.
87
+ // @ts-expect-error - TS2564 - Property '_hasSetupGraphieThisUpdate' has no initializer and is not definitely assigned in the constructor.
87
88
  _hasSetupGraphieThisUpdate: boolean;
88
- // @ts-expect-error [FEI-5003] - TS2564 - Property '_shouldSetupGraphie' has no initializer and is not definitely assigned in the constructor.
89
+ // @ts-expect-error - TS2564 - Property '_shouldSetupGraphie' has no initializer and is not definitely assigned in the constructor.
89
90
  _shouldSetupGraphie: boolean;
90
91
 
91
92
  static defaultProps: DefaultProps = {
@@ -186,7 +187,7 @@ class Graph extends React.Component<Props> {
186
187
 
187
188
  // eslint-disable-next-line react/no-string-refs
188
189
  const graphieDiv = ReactDOM.findDOMNode(this.refs.graphieDiv);
189
- // @ts-expect-error [FEI-5003] - TS2769 - No overload matches this call. | TS2339 - Property 'empty' does not exist on type 'JQueryStatic'.
190
+ // @ts-expect-error - TS2769 - No overload matches this call. | TS2339 - Property 'empty' does not exist on type 'JQueryStatic'.
190
191
  $(graphieDiv).empty();
191
192
 
192
193
  // Content creators may need to explicitly add the dollar signs so the
@@ -265,7 +266,7 @@ class Graph extends React.Component<Props> {
265
266
  });
266
267
 
267
268
  $instructionsWrapper.append($instructions);
268
- // @ts-expect-error [FEI-5003] - TS2769 - No overload matches this call. | TS2339 - Property 'append' does not exist on type 'JQueryStatic'.
269
+ // @ts-expect-error - TS2769 - No overload matches this call. | TS2339 - Property 'append' does not exist on type 'JQueryStatic'.
269
270
  $(graphieDiv).append($instructionsWrapper);
270
271
  } else {
271
272
  $instructionsWrapper = undefined;
@@ -280,7 +281,7 @@ class Graph extends React.Component<Props> {
280
281
  $instructionsWrapper = null;
281
282
  }
282
283
  // eslint-disable-next-line @babel/no-invalid-this
283
- // @ts-expect-error [FEI-5003] - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
284
+ // @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
284
285
  // eslint-disable-next-line @babel/no-invalid-this
285
286
  this.props.onMouseDown(coord);
286
287
  }, this)
@@ -345,7 +346,7 @@ class Graph extends React.Component<Props> {
345
346
  }
346
347
 
347
348
  if (this.props.showProtractor) {
348
- // @ts-expect-error [FEI-5003] - TS2554 - Expected 2 arguments, but got 1.
349
+ // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
349
350
  const coord = this.pointsFromNormalized([[0.5, 0.05]])[0];
350
351
  this.protractor = this._graphie.protractor(coord);
351
352
  }
@@ -357,7 +358,7 @@ class Graph extends React.Component<Props> {
357
358
  }
358
359
 
359
360
  if (this.props.showRuler) {
360
- // @ts-expect-error [FEI-5003] - TS2554 - Expected 2 arguments, but got 1.
361
+ // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
361
362
  const coord = this.pointsFromNormalized([[0.5, 0.25]])[0];
362
363
  const extent =
363
364
  this._graphie.range[0][1] - this._graphie.range[0][0];
@@ -394,7 +395,7 @@ class Graph extends React.Component<Props> {
394
395
  if (imageData.url) {
395
396
  const scale = this.props.box[0] / interactiveSizes.defaultBoxSize;
396
397
  image = (
397
- // @ts-expect-error [FEI-5003] - TS2741 - Property 'alt' is missing in type '{ src: any; width: any; height: any; scale: number; responsive: false; }' but required in type 'Pick<Readonly<Props> & Readonly<{ children?: ReactNode; }>, "children" | "height" | "width" | "title" | "alt" | "trackInteraction" | "preloader" | "allowFullBleed" | "extraGraphie" | "overrideAriaHidden">'.
398
+ // @ts-expect-error - TS2741 - Property 'alt' is missing in type '{ src: any; width: any; height: any; scale: number; responsive: false; }' but required in type 'Pick<Readonly<Props> & Readonly<{ children?: ReactNode; }>, "children" | "height" | "width" | "title" | "alt" | "trackInteraction" | "preloader" | "allowFullBleed" | "extraGraphie" | "overrideAriaHidden">'.
398
399
  <SvgImage
399
400
  src={imageData.url}
400
401
  width={imageData.width}
@@ -414,11 +415,11 @@ class Graph extends React.Component<Props> {
414
415
  width: this.props.box[0],
415
416
  height: this.props.box[1],
416
417
  }}
417
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'onMouseOut' does not exist on type 'Graph'.
418
+ // @ts-expect-error - TS2339 - Property 'onMouseOut' does not exist on type 'Graph'.
418
419
  onMouseOut={this.onMouseOut}
419
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'onMouseOver' does not exist on type 'Graph'.
420
+ // @ts-expect-error - TS2339 - Property 'onMouseOver' does not exist on type 'Graph'.
420
421
  onMouseOver={this.onMouseOver}
421
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'onClick' does not exist on type 'Graph'.
422
+ // @ts-expect-error - TS2339 - Property 'onClick' does not exist on type 'Graph'.
422
423
  onClick={this.onClick}
423
424
  >
424
425
  {image}