@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
@@ -1,7 +1,6 @@
1
- /* eslint-disable @babel/no-invalid-this, @typescript-eslint/no-unused-vars, one-var, react/no-unsafe, react/sort-comp */
1
+ /* eslint-disable react/no-unsafe */
2
2
  import * as i18n from "@khanacademy/wonder-blocks-i18n";
3
3
  import $ from "jquery";
4
- import PropTypes from "prop-types";
5
4
  import * as React from "react";
6
5
  import ReactDOM from "react-dom";
7
6
  import _ from "underscore";
@@ -14,53 +13,68 @@ import KhanColors from "../util/colors";
14
13
  import GraphUtils from "../util/graph-utils";
15
14
  import KhanMath from "../util/math";
16
15
 
17
- import type {WidgetExports} from "../types";
16
+ import type {APIOptions, WidgetExports} from "../types";
18
17
 
19
18
  const {deepEq} = Util;
20
19
 
21
- const BAR = "bar",
22
- LINE = "line",
23
- PIC = "pic",
24
- HISTOGRAM = "histogram",
25
- DOTPLOT = "dotplot";
26
-
27
- const widgetPropTypes = {
28
- type: PropTypes.oneOf([BAR, LINE, PIC, HISTOGRAM, DOTPLOT]),
29
- labels: PropTypes.arrayOf(PropTypes.string),
30
- categories: PropTypes.arrayOf(
31
- PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
32
- ),
33
-
34
- scaleY: PropTypes.number,
35
- maxY: PropTypes.number,
36
- snapsPerLine: PropTypes.number,
37
-
38
- picSize: PropTypes.number,
39
- pixBoxHeight: PropTypes.number,
40
- picUrl: PropTypes.string,
41
-
42
- plotDimensions: PropTypes.arrayOf(PropTypes.number),
43
- labelInterval: PropTypes.number,
44
- starting: PropTypes.arrayOf(PropTypes.number),
45
- static: PropTypes.bool,
46
- } as const;
47
-
48
- class Plotter extends React.Component<any, any> {
49
- // @ts-expect-error [FEI-5003] - TS2564 - Property 'shouldSetupGraphie' has no initializer and is not definitely assigned in the constructor.
20
+ const BAR = "bar";
21
+ const LINE = "line";
22
+ const PIC = "pic";
23
+ const HISTOGRAM = "histogram";
24
+ const DOTPLOT = "dotplot";
25
+
26
+ const plotTypes = [BAR, LINE, PIC, HISTOGRAM, DOTPLOT];
27
+ type PlotType = typeof plotTypes[number];
28
+
29
+ type Props = {
30
+ type: PlotType;
31
+ labels: ReadonlyArray<string>;
32
+ categories: ReadonlyArray<string | number>;
33
+ scaleY: number;
34
+ maxY: number;
35
+ snapsPerLine: number;
36
+ picSize: number;
37
+ picBoxHeight: number;
38
+ picUrl: string;
39
+ plotDimensions: ReadonlyArray<number>;
40
+ labelInterval: number;
41
+
42
+ starting: Array<number>;
43
+ static: boolean;
44
+ markings: any;
45
+ onChange: any;
46
+ trackInteraction: () => void;
47
+ apiOptions: APIOptions;
48
+ };
49
+
50
+ type DefaultProps = {
51
+ type: Props["type"];
52
+ labels: Props["labels"];
53
+ categories: Props["categories"];
54
+ scaleY: Props["scaleY"];
55
+ maxY: Props["maxY"];
56
+ snapsPerLine: Props["snapsPerLine"];
57
+ picSize: Props["picSize"];
58
+ picBoxHeight: Props["picBoxHeight"];
59
+ picUrl: Props["picUrl"];
60
+ plotDimensions: Props["plotDimensions"];
61
+ labelInterval: Props["labelInterval"];
62
+ };
63
+
64
+ type State = {
65
+ values: Array<number>;
66
+ categoryHeights: Record<string, number>;
67
+ };
68
+
69
+ export class Plotter extends React.Component<Props, State> {
70
+ // @ts-expect-error - TS2564 - Property 'shouldSetupGraphie' has no initializer and is not definitely assigned in the constructor.
50
71
  shouldSetupGraphie: boolean;
51
72
  _isMounted = false;
52
73
  horizHairline: any;
53
74
  hairlineRange: any;
54
75
  graphie: any;
55
76
 
56
- static propTypes = {
57
- onChange: PropTypes.func.isRequired,
58
- trackInteraction: PropTypes.func.isRequired,
59
- // TODO(alex): Figure out why lint chokes on this line
60
- // ...widgetPropTypes,
61
- };
62
-
63
- static defaultProps: any = {
77
+ static defaultProps: DefaultProps = {
64
78
  type: BAR,
65
79
  labels: ["", ""],
66
80
  categories: [""],
@@ -77,7 +91,7 @@ class Plotter extends React.Component<any, any> {
77
91
  labelInterval: 1,
78
92
  };
79
93
 
80
- state: any = {
94
+ state: State = {
81
95
  values: this.props.starting || [1],
82
96
 
83
97
  // The measured rendered height of category strings. Used to calculate
@@ -86,57 +100,13 @@ class Plotter extends React.Component<any, any> {
86
100
  categoryHeights: {},
87
101
  };
88
102
 
89
- DOT_PLOT_POINT_SIZE: () => number = () => {
90
- return this.props.apiOptions.isMobile ? 6 : 4;
91
- };
92
-
93
- DOT_PLOT_POINT_PADDING: () => number = () => {
94
- return 8;
95
- };
96
-
97
- DOT_TICK_POINT_SIZE: () => number = () => {
98
- return 2;
99
- };
100
-
101
- render(): React.ReactNode {
102
- // TODO(kevinb) actually compute the size of the graphie correctly and
103
- // make it that size so we don't have to add extra padding. The value
104
- // was determined by eye-balling the layout. :(
105
- const paddingForBottomLabel = 75;
106
- const style = {
107
- marginBottom: this.props.labels[0] ? paddingForBottomLabel : 0,
108
- } as const;
109
-
110
- return (
111
- <div
112
- className={
113
- "perseus-widget-plotter graphie " +
114
- ApiClassNames.INTERACTIVE
115
- }
116
- // eslint-disable-next-line react/no-string-refs
117
- ref="graphieDiv"
118
- style={style}
119
- />
120
- );
121
- }
122
-
123
- componentDidUpdate(prevProps: any, prevState: any) {
124
- this.shouldSetupGraphie =
125
- this.shouldSetupGraphie ||
126
- !_.isEqual(this.state.categoryHeights, prevState.categoryHeights);
127
-
128
- if (this.shouldSetupGraphie) {
129
- this.setupGraphie(prevState);
130
- }
131
- }
132
-
133
103
  componentDidMount() {
134
104
  this._isMounted = true;
135
105
 
136
106
  this.setupGraphie(this.state);
137
107
  }
138
108
 
139
- UNSAFE_componentWillReceiveProps(nextProps: any) {
109
+ UNSAFE_componentWillReceiveProps(nextProps: Props) {
140
110
  const props = [
141
111
  "type",
142
112
  "labels",
@@ -151,10 +121,7 @@ class Plotter extends React.Component<any, any> {
151
121
 
152
122
  this.shouldSetupGraphie = _.any(
153
123
  props,
154
- function (prop) {
155
- // @ts-expect-error [FEI-5003] - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
156
- return !_.isEqual(this.props[prop], nextProps[prop]);
157
- },
124
+ (prop) => !_.isEqual(this.props[prop], nextProps[prop]),
158
125
  this,
159
126
  );
160
127
 
@@ -167,15 +134,37 @@ class Plotter extends React.Component<any, any> {
167
134
  }
168
135
  }
169
136
 
137
+ componentDidUpdate(prevProps: Props, prevState: State) {
138
+ this.shouldSetupGraphie =
139
+ this.shouldSetupGraphie ||
140
+ !_.isEqual(this.state.categoryHeights, prevState.categoryHeights);
141
+
142
+ if (this.shouldSetupGraphie) {
143
+ this.setupGraphie(prevState);
144
+ }
145
+ }
146
+
170
147
  componentWillUnmount() {
171
148
  this._isMounted = false;
172
149
  }
173
150
 
151
+ DOT_PLOT_POINT_SIZE: () => number = () => {
152
+ return this.props.apiOptions.isMobile ? 6 : 4;
153
+ };
154
+
155
+ DOT_PLOT_POINT_PADDING: () => number = () => {
156
+ return 8;
157
+ };
158
+
159
+ DOT_TICK_POINT_SIZE: () => number = () => {
160
+ return 2;
161
+ };
162
+
174
163
  setupGraphie: (arg1: any) => void = (prevState) => {
175
164
  const self = this;
176
165
  self.shouldSetupGraphie = false;
177
166
  const graphieDiv = ReactDOM.findDOMNode(self.refs.graphieDiv);
178
- // @ts-expect-error [FEI-5003] - TS2769 - No overload matches this call. | TS2339 - Property 'empty' does not exist on type 'JQueryStatic'.
167
+ // @ts-expect-error - TS2769 - No overload matches this call. | TS2339 - Property 'empty' does not exist on type 'JQueryStatic'.
179
168
  $(graphieDiv).empty();
180
169
  const graphie = GraphUtils.createGraphie(graphieDiv);
181
170
 
@@ -186,11 +175,11 @@ class Plotter extends React.Component<any, any> {
186
175
  self.graphie.pics = [];
187
176
  self.graphie.dotTicks = [];
188
177
 
189
- const isBar = self.props.type === BAR,
190
- isLine = self.props.type === LINE,
191
- isPic = self.props.type === PIC,
192
- isHistogram = self.props.type === HISTOGRAM,
193
- isDotplot = self.props.type === DOTPLOT;
178
+ const isBar = self.props.type === BAR;
179
+ const isLine = self.props.type === LINE;
180
+ const isPic = self.props.type === PIC;
181
+ const isHistogram = self.props.type === HISTOGRAM;
182
+ const isDotplot = self.props.type === DOTPLOT;
194
183
 
195
184
  const isTiledPlot = isPic || isDotplot;
196
185
 
@@ -264,7 +253,6 @@ class Plotter extends React.Component<any, any> {
264
253
  if (isMobile && (isBar || isTiledPlot)) {
265
254
  const maxCategoryHeight = Math.max(
266
255
  0,
267
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'unknown' is not assignable to parameter of type 'number'.
268
256
  ...Object.values(self.state.categoryHeights),
269
257
  );
270
258
 
@@ -340,7 +328,7 @@ class Plotter extends React.Component<any, any> {
340
328
  }
341
329
  }
342
330
 
343
- if ((isBar || isLine) && isMobile) {
331
+ if ((isBar || isLine) && isMobile && !this.props.static) {
344
332
  self.graphie.dragPrompt = graphie
345
333
  .label(
346
334
  [c.dimX / 2, c.dimY / 2],
@@ -573,7 +561,7 @@ class Plotter extends React.Component<any, any> {
573
561
  _.each(self.props.categories, function (category, i) {
574
562
  const x = 0.5 + i * c.barWidth;
575
563
 
576
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'Promise<any>' is not assignable to parameter of type 'never'.
564
+ // @ts-expect-error - TS2345 - Argument of type 'Promise<any>' is not assignable to parameter of type 'never'.
577
565
  categoryHeightPromises.push(self.labelCategory(x, category));
578
566
  const tickHeight = 6 / c.scale[1];
579
567
  graphie.style(
@@ -623,7 +611,7 @@ class Plotter extends React.Component<any, any> {
623
611
  i === self.props.categories.length - 1
624
612
  ) {
625
613
  categoryHeightPromises.push(
626
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'Promise<any>' is not assignable to parameter of type 'never'.
614
+ // @ts-expect-error - TS2345 - Argument of type 'Promise<any>' is not assignable to parameter of type 'never'.
627
615
  self.labelCategory(x, category),
628
616
  );
629
617
  tickStart *= 1.5;
@@ -631,7 +619,7 @@ class Plotter extends React.Component<any, any> {
631
619
  }
632
620
  } else {
633
621
  categoryHeightPromises.push(
634
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'Promise<any>' is not assignable to parameter of type 'never'.
622
+ // @ts-expect-error - TS2345 - Argument of type 'Promise<any>' is not assignable to parameter of type 'never'.
635
623
  self.labelCategory(x, category),
636
624
  );
637
625
  }
@@ -721,8 +709,8 @@ class Plotter extends React.Component<any, any> {
721
709
 
722
710
  if (isHistogram) {
723
711
  // Scale dividers between buckets
724
- const leftDivider = config.graph.dividers[i - 1],
725
- rightDivider = config.graph.dividers[i];
712
+ const leftDivider = config.graph.dividers[i - 1];
713
+ const rightDivider = config.graph.dividers[i];
726
714
 
727
715
  if (leftDivider) {
728
716
  const divHeight = Math.min(
@@ -927,7 +915,7 @@ class Plotter extends React.Component<any, any> {
927
915
  if (i > 0) {
928
916
  c.graph.lines[i] = Interactive2.addMovableLine(graphie, {
929
917
  points: [c.graph.points[i - 1], c.graph.points[i]],
930
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'constraints' does not exist on type '(graphie: any, movable: any, options: any) => void'.
918
+ // @ts-expect-error - TS2339 - Property 'constraints' does not exist on type '(graphie: any, movable: any, options: any) => void'.
931
919
  constraints: Interactive2.MovablePoint.constraints.fixed(),
932
920
  normalStyle: {
933
921
  stroke: KhanColors.BLUE_C,
@@ -1051,7 +1039,7 @@ class Plotter extends React.Component<any, any> {
1051
1039
  .css({fill: "#000", opacity: 0.0, cursor: "pointer"})
1052
1040
  .on("vmousedown", function (e) {
1053
1041
  e.preventDefault();
1054
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'whichPicClicked' does not exist on type 'Plotter'.
1042
+ // @ts-expect-error - TS2339 - Property 'whichPicClicked' does not exist on type 'Plotter'.
1055
1043
  self.whichPicClicked = i;
1056
1044
  self.setPicHeight(i, topY);
1057
1045
 
@@ -1081,7 +1069,7 @@ class Plotter extends React.Component<any, any> {
1081
1069
  newMidY + 0.5 * c.scaleY,
1082
1070
  c.dimY,
1083
1071
  );
1084
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'whichPicClicked' does not exist on type 'Plotter'.
1072
+ // @ts-expect-error - TS2339 - Property 'whichPicClicked' does not exist on type 'Plotter'.
1085
1073
  self.setPicHeight(self.whichPicClicked, newTopY);
1086
1074
  });
1087
1075
  });
@@ -1170,9 +1158,31 @@ class Plotter extends React.Component<any, any> {
1170
1158
  };
1171
1159
 
1172
1160
  simpleValidate: (arg1: any) => any = (rubric) => {
1173
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'validate' does not exist on type 'typeof Plotter'.
1161
+ // @ts-expect-error - TS2339 - Property 'validate' does not exist on type 'typeof Plotter'.
1174
1162
  return Plotter.validate(this.getUserInput(), rubric);
1175
1163
  };
1164
+
1165
+ render(): React.ReactNode {
1166
+ // TODO(kevinb) actually compute the size of the graphie correctly and
1167
+ // make it that size so we don't have to add extra padding. The value
1168
+ // was determined by eye-balling the layout. :(
1169
+ const paddingForBottomLabel = 75;
1170
+ const style = {
1171
+ marginBottom: this.props.labels[0] ? paddingForBottomLabel : 0,
1172
+ } as const;
1173
+
1174
+ return (
1175
+ <div
1176
+ className={
1177
+ "perseus-widget-plotter graphie " +
1178
+ ApiClassNames.INTERACTIVE
1179
+ }
1180
+ // eslint-disable-next-line react/no-string-refs
1181
+ ref="graphieDiv"
1182
+ style={style}
1183
+ />
1184
+ );
1185
+ }
1176
1186
  }
1177
1187
 
1178
1188
  _.extend(Plotter, {
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @khanacademy/ts-no-error-suppressions */
1
2
  import * as i18n from "@khanacademy/wonder-blocks-i18n";
2
3
  import {StyleSheet, css} from "aphrodite";
3
4
  import classNames from "classnames";
@@ -130,7 +131,7 @@ const BaseRadio = function (props: Props): React.ReactElement {
130
131
  // note(matthew): we know this is only getting passed
131
132
  // to a WB Clickable button, so we force it to be of
132
133
  // type HTMLButtonElement
133
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'current' does not exist on type 'never'.
134
+ // @ts-expect-error - TS2339 - Property 'current' does not exist on type 'never'.
134
135
  const anyNode = ReactDOM.findDOMNode(ref.current) as any;
135
136
  const buttonNode = anyNode as
136
137
  | HTMLButtonElement
@@ -142,7 +143,7 @@ const BaseRadio = function (props: Props): React.ReactElement {
142
143
  }
143
144
  }
144
145
 
145
- // @ts-expect-error [FEI-5003] - TS2322 - Type 'PerseusRadioWidgetOptions | undefined' is not assignable to type 'undefined'.
146
+ // @ts-expect-error - TS2322 - Type 'PerseusRadioWidgetOptions | undefined' is not assignable to type 'undefined'.
146
147
  prevReviewModeRubric.current = reviewModeRubric;
147
148
  }, [apiOptions, choices, isLastUsedWidget, reviewModeRubric]);
148
149
 
@@ -199,7 +200,7 @@ const BaseRadio = function (props: Props): React.ReactElement {
199
200
  // note(matthew): we know this is only getting passed
200
201
  // to a WB Clickable button, so we force it to be of
201
202
  // type HTMLButtonElement
202
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'current' does not exist on type 'never'.
203
+ // @ts-expect-error - TS2339 - Property 'current' does not exist on type 'never'.
203
204
  const anyNode = ReactDOM.findDOMNode(ref.current) as any;
204
205
  const buttonNode = anyNode as HTMLButtonElement | null | undefined;
205
206
 
@@ -249,16 +250,16 @@ const BaseRadio = function (props: Props): React.ReactElement {
249
250
  className={`perseus-widget-radio-fieldset ${responsiveClassName}`}
250
251
  >
251
252
  <legend className="perseus-sr-only">{instructions}</legend>
252
- {/* @ts-expect-error [FEI-5003] - TS2322 - Type 'readonly string[]' is not assignable to type 'string'. */}
253
+ {/* @ts-expect-error - TS2322 - Type 'readonly string[]' is not assignable to type 'string'. */}
253
254
  <div className={instructionsClassName} aria-hidden="true">
254
255
  {instructions}
255
256
  </div>
256
- {/* @ts-expect-error [FEI-5003] - TS2322 - Type 'readonly string[]' is not assignable to type 'string'. */}
257
+ {/* @ts-expect-error - TS2322 - Type 'readonly string[]' is not assignable to type 'string'. */}
257
258
  <ul className={className} style={{listStyle: "none"}}>
258
259
  {choices.map((choice, i) => {
259
260
  let Element = Choice;
260
261
  const ref = React.createRef<any>();
261
- // @ts-expect-error [FEI-5003] - TS2322 - Type 'RefObject<unknown>' is not assignable to type 'never'.
262
+ // @ts-expect-error - TS2322 - Type 'RefObject<unknown>' is not assignable to type 'never'.
262
263
  choiceRefs.current[i] = ref;
263
264
  const elementProps = {
264
265
  apiOptions: apiOptions,
@@ -348,7 +349,7 @@ const BaseRadio = function (props: Props): React.ReactElement {
348
349
  let listElem = null;
349
350
  let clickHandler = null;
350
351
  if (editMode) {
351
- // @ts-expect-error [FEI-5003] - TS2322 - Type '(e: any) => void' is not assignable to type 'null'.
352
+ // @ts-expect-error - TS2322 - Type '(e: any) => void' is not assignable to type 'null'.
352
353
  clickHandler = (e: any) => {
353
354
  // Traverse the parent nodes of the clicked
354
355
  // element.
@@ -377,13 +378,13 @@ const BaseRadio = function (props: Props): React.ReactElement {
377
378
  return (
378
379
  <li
379
380
  key={i}
380
- // @ts-expect-error [FEI-5003] - TS2322 - Type 'HTMLLIElement | null' is not assignable to type 'null'.
381
+ // @ts-expect-error - TS2322 - Type 'HTMLLIElement | null' is not assignable to type 'null'.
381
382
  ref={(e) => (listElem = e)}
382
- // @ts-expect-error [FEI-5003] - TS2322 - Type 'readonly string[]' is not assignable to type 'string'.
383
+ // @ts-expect-error - TS2322 - Type 'readonly string[]' is not assignable to type 'string'.
383
384
  className={className}
384
- // @ts-expect-error [FEI-5003] - TS2322 - Type 'null' is not assignable to type 'MouseEventHandler<HTMLLIElement> | undefined'.
385
+ // @ts-expect-error - TS2322 - Type 'null' is not assignable to type 'MouseEventHandler<HTMLLIElement> | undefined'.
385
386
  onClick={clickHandler}
386
- // @ts-expect-error [FEI-5003] - TS2322 - Type '((e: TouchEvent) => void) | null' is not assignable to type 'TouchEventHandler<HTMLLIElement> | undefined'.
387
+ // @ts-expect-error - TS2322 - Type '((e: TouchEvent) => void) | null' is not assignable to type 'TouchEventHandler<HTMLLIElement> | undefined'.
387
388
  onTouchStart={
388
389
  !labelWrap ? null : captureScratchpadTouchStart
389
390
  }
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @khanacademy/ts-no-error-suppressions */
1
2
  /* Component for rendering a letter icon in a library radio choice */
2
3
 
3
4
  import Color from "@khanacademy/wonder-blocks-color";
@@ -128,7 +129,7 @@ const ChoiceIcon = function (props: ChoiceIconProps): React.ReactElement {
128
129
  multipleSelect={multipleSelect}
129
130
  >
130
131
  <div
131
- // @ts-expect-error [FEI-5003] - TS2322 - Type '{ backgroundColor: string | null | undefined; borderColor: string; color: string; borderRadius: number; }' is not assignable to type 'Properties<string | number, string & {}>'.
132
+ // @ts-expect-error - TS2322 - Type '{ backgroundColor: string | null | undefined; borderColor: string; color: string; borderRadius: number; }' is not assignable to type 'Properties<string | number, string & {}>'.
132
133
  style={dynamicStyles}
133
134
  data-test-id="choice-icon__library-choice-icon"
134
135
  className={css(
@@ -145,7 +146,7 @@ const ChoiceIcon = function (props: ChoiceIconProps): React.ReactElement {
145
146
  data-is-radio-icon={true}
146
147
  >
147
148
  <div className={css(styles.innerWrapper)}>
148
- {/* @ts-expect-error [FEI-5003] - TS2786 - 'ChoiceInner' cannot be used as a JSX component. */}
149
+ {/* @ts-expect-error - TS2786 - 'ChoiceInner' cannot be used as a JSX component. */}
149
150
  <ChoiceInner
150
151
  pos={pos}
151
152
  showCorrectness={showCorrectness}
@@ -148,7 +148,7 @@ const Choice = function (props: ChoicePropsWithForwardRef): React.ReactElement {
148
148
  return (
149
149
  <div
150
150
  style={{
151
- // @ts-expect-error [FEI-5003] - TS2322 - Type '{ dispay: string; flexDirection: "column"; color: string; }' is not assignable to type 'Properties<string | number, string & {}>'.
151
+ // @ts-expect-error - TS2322 - Type '{ dispay: string; flexDirection: "column"; color: string; }' is not assignable to type 'Properties<string | number, string & {}>'.
152
152
  dispay: "flex",
153
153
  flexDirection: "column",
154
154
  color: Color.offBlack,
@@ -54,7 +54,7 @@ const OptionStatus = function (props: Props): React.ReactElement {
54
54
  // Option status is shown only in review mode, or for incorrectly
55
55
  // answered items.
56
56
  if (!reviewMode && !previouslyAnswered) {
57
- // @ts-expect-error [FEI-5003] - TS2322 - Type 'null' is not assignable to type 'ReactElement<any, string | JSXElementConstructor<any>>'.
57
+ // @ts-expect-error - TS2322 - Type 'null' is not assignable to type 'ReactElement<any, string | JSXElementConstructor<any>>'.
58
58
  return null;
59
59
  }
60
60
 
@@ -54,7 +54,7 @@ export type RadioChoiceWithMetadata = PerseusRadioChoice & {
54
54
  };
55
55
 
56
56
  class Radio extends React.Component<Props> {
57
- // @ts-expect-error [FEI-5003] - TS2564 - Property 'focusFunction' has no initializer and is not definitely assigned in the constructor.
57
+ // @ts-expect-error - TS2564 - Property 'focusFunction' has no initializer and is not definitely assigned in the constructor.
58
58
  focusFunction: FocusFunction;
59
59
 
60
60
  static defaultProps: DefaultProps = {
@@ -140,7 +140,7 @@ class Radio extends React.Component<Props> {
140
140
  choicesSelected[index] = choiceStates[i].selected;
141
141
 
142
142
  if (props.choices[i].isNoneOfTheAbove) {
143
- // @ts-expect-error [FEI-5003] - TS2322 - Type 'number' is not assignable to type 'null'.
143
+ // @ts-expect-error - TS2322 - Type 'number' is not assignable to type 'null'.
144
144
  noneOfTheAboveIndex = index;
145
145
 
146
146
  if (choicesSelected[i]) {
@@ -174,7 +174,7 @@ class Radio extends React.Component<Props> {
174
174
  choicesSelected[index] = values[i];
175
175
 
176
176
  if (props.choices[i].isNoneOfTheAbove) {
177
- // @ts-expect-error [FEI-5003] - TS2322 - Type 'number' is not assignable to type 'null'.
177
+ // @ts-expect-error - TS2322 - Type 'number' is not assignable to type 'null'.
178
178
  noneOfTheAboveIndex = index;
179
179
  if (choicesSelected[i]) {
180
180
  noneOfTheAboveSelected = true;
@@ -246,7 +246,7 @@ class Radio extends React.Component<Props> {
246
246
  alwaysUpdate={true}
247
247
  linterContext={{
248
248
  ...this.props.linterContext,
249
- // @ts-expect-error [FEI-5003] - TS2322 - Type '{ blockHighlight: true; contentType: string; highlightLint: boolean; paths: readonly string[]; stack: readonly string[]; }' is not assignable to type 'LinterContextProps'.
249
+ // @ts-expect-error - TS2322 - Type '{ blockHighlight: true; contentType: string; highlightLint: boolean; paths: readonly string[]; stack: readonly string[]; }' is not assignable to type 'LinterContextProps'.
250
250
  blockHighlight: true,
251
251
  }}
252
252
  />
@@ -370,7 +370,7 @@ class Radio extends React.Component<Props> {
370
370
  {
371
371
  choiceStates: newStates,
372
372
  },
373
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'null' is not assignable to parameter of type '(() => unknown) | undefined'.
373
+ // @ts-expect-error - TS2345 - Argument of type 'null' is not assignable to parameter of type '(() => unknown) | undefined'.
374
374
  null, // cb
375
375
  true, // silent
376
376
  );
@@ -396,7 +396,7 @@ class Radio extends React.Component<Props> {
396
396
  {
397
397
  choiceStates: newStates,
398
398
  },
399
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'null' is not assignable to parameter of type '(() => unknown) | undefined'.
399
+ // @ts-expect-error - TS2345 - Argument of type 'null' is not assignable to parameter of type '(() => unknown) | undefined'.
400
400
  null, // cb
401
401
  false, // silent
402
402
  );
@@ -47,7 +47,7 @@ const _choiceTransform = (
47
47
 
48
48
  const newChoices = choices.filter((choice, index) => {
49
49
  if (choice.isNoneOfTheAbove) {
50
- // @ts-expect-error [FEI-5003] - TS2322 - Type 'RadioChoiceWithMetadata' is not assignable to type 'null'.
50
+ // @ts-expect-error - TS2322 - Type 'RadioChoiceWithMetadata' is not assignable to type 'null'.
51
51
  noneOfTheAbove = choice;
52
52
  return false;
53
53
  }
@@ -26,26 +26,26 @@ class Separator extends React.Component<any> {
26
26
  drawArrow = () => {
27
27
  // eslint-disable-next-line react/no-string-refs
28
28
  const canvas = this.refs["arrowCanvas" + this.props.index];
29
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'getContext' does not exist on type 'ReactInstance'.
29
+ // @ts-expect-error - TS2339 - Property 'getContext' does not exist on type 'ReactInstance'.
30
30
  const ctx = canvas.getContext("2d");
31
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'width' does not exist on type 'ReactInstance'. | TS2339 - Property 'height' does not exist on type 'ReactInstance'.
31
+ // @ts-expect-error - TS2339 - Property 'width' does not exist on type 'ReactInstance'. | TS2339 - Property 'height' does not exist on type 'ReactInstance'.
32
32
  ctx.clearRect(0, 0, canvas.width, canvas.height);
33
33
  const path = new Path2D();
34
34
  ctx.strokeStyle = "rgb(0,0,0)";
35
35
  ctx.lineWidth = 1.2;
36
36
  ctx.lineCap = "round";
37
37
  const offset = 5;
38
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'height' does not exist on type 'ReactInstance'.
38
+ // @ts-expect-error - TS2339 - Property 'height' does not exist on type 'ReactInstance'.
39
39
  path.moveTo(offset, canvas.height / 2);
40
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'width' does not exist on type 'ReactInstance'. | TS2339 - Property 'height' does not exist on type 'ReactInstance'.
40
+ // @ts-expect-error - TS2339 - Property 'width' does not exist on type 'ReactInstance'. | TS2339 - Property 'height' does not exist on type 'ReactInstance'.
41
41
  path.lineTo(canvas.width - offset, canvas.height / 2);
42
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'width' does not exist on type 'ReactInstance'. | TS2339 - Property 'height' does not exist on type 'ReactInstance'.
42
+ // @ts-expect-error - TS2339 - Property 'width' does not exist on type 'ReactInstance'. | TS2339 - Property 'height' does not exist on type 'ReactInstance'.
43
43
  path.moveTo(canvas.width - 2 * offset, canvas.height / 2 - offset);
44
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'width' does not exist on type 'ReactInstance'. | TS2339 - Property 'height' does not exist on type 'ReactInstance'.
44
+ // @ts-expect-error - TS2339 - Property 'width' does not exist on type 'ReactInstance'. | TS2339 - Property 'height' does not exist on type 'ReactInstance'.
45
45
  path.lineTo(canvas.width - offset, canvas.height / 2);
46
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'width' does not exist on type 'ReactInstance'. | TS2339 - Property 'height' does not exist on type 'ReactInstance'.
46
+ // @ts-expect-error - TS2339 - Property 'width' does not exist on type 'ReactInstance'. | TS2339 - Property 'height' does not exist on type 'ReactInstance'.
47
47
  path.moveTo(canvas.width - 2 * offset, canvas.height / 2 + offset);
48
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'width' does not exist on type 'ReactInstance'. | TS2339 - Property 'height' does not exist on type 'ReactInstance'.
48
+ // @ts-expect-error - TS2339 - Property 'width' does not exist on type 'ReactInstance'. | TS2339 - Property 'height' does not exist on type 'ReactInstance'.
49
49
  path.lineTo(canvas.width - offset, canvas.height / 2);
50
50
  ctx.stroke(path);
51
51
  };
@@ -5,10 +5,10 @@ import _ from "underscore";
5
5
  import InlineIcon from "../components/inline-icon";
6
6
  import {iconOk} from "../icon-paths";
7
7
  import * as Changeable from "../mixins/changeable";
8
- import {PerseusSequenceWidgetOptions} from "../perseus-types";
9
8
  import Renderer from "../renderer";
10
9
  import Util from "../util";
11
10
 
11
+ import type {PerseusSequenceWidgetOptions} from "../perseus-types";
12
12
  import type {WidgetExports, WidgetProps} from "../types";
13
13
 
14
14
  type Rubric = PerseusSequenceWidgetOptions;
@@ -54,7 +54,7 @@ class Sequence extends React.Component<Props, State> {
54
54
  const step = parseInt(groupWidgetId.split(" ")[1]);
55
55
  if (step === this.state.visible - 1) {
56
56
  // eslint-disable-next-line react/no-string-refs
57
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'getWidgetInstance' does not exist on type 'ReactInstance'.
57
+ // @ts-expect-error - TS2339 - Property 'getWidgetInstance' does not exist on type 'ReactInstance'.
58
58
  const widget = this.refs.renderer.getWidgetInstance(
59
59
  "group " + step,
60
60
  );