@khanacademy/perseus 7.2.1 → 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 (380) hide show
  1. package/CHANGELOG.md +26 -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.js +1139 -1189
  7. package/dist/es/index.js.map +1 -1
  8. package/dist/hints-renderer.d.ts +1 -1
  9. package/dist/index.js +1141 -1192
  10. package/dist/index.js.map +1 -1
  11. package/dist/mixins/provide-keypad.d.ts +15 -12
  12. package/dist/perseus-api.d.ts +1 -1
  13. package/dist/types.d.ts +3 -2
  14. package/dist/widgets/expression.d.ts +1 -1
  15. package/dist/widgets/graded-group.d.ts +1 -1
  16. package/dist/widgets/interactive-graph.d.ts +1 -1
  17. package/dist/widgets/sequence.d.ts +1 -1
  18. package/dist/widgets/table.d.ts +8 -1
  19. package/dist/widgets.d.ts +1 -1
  20. package/package.json +33 -33
  21. package/src/__testdata__/article-renderer.testdata.ts +3 -1
  22. package/src/__testdata__/item-renderer.testdata.ts +1 -1
  23. package/src/__testdata__/renderer.testdata.ts +1 -1
  24. package/src/__tests__/item-renderer.test.tsx +1 -1
  25. package/src/__tests__/mock-asset-loading-widget.tsx +1 -1
  26. package/src/__tests__/perseus-markdown.test.ts +17 -17
  27. package/src/__tests__/renderer-api.test.tsx +21 -21
  28. package/src/__tests__/renderer.test.tsx +13 -13
  29. package/src/__tests__/server-item-renderer.test.tsx +3 -3
  30. package/src/__tests__/tex-wrangler.test.ts +1 -1
  31. package/src/article-renderer.tsx +39 -38
  32. package/src/components/__tests__/number-input.test.tsx +4 -4
  33. package/src/components/__tests__/sortable.test.tsx +2 -2
  34. package/src/components/fixed-to-responsive.tsx +1 -1
  35. package/src/components/graph.tsx +11 -11
  36. package/src/components/graphie-classes.ts +7 -7
  37. package/src/components/graphie.tsx +14 -14
  38. package/src/components/highlighting/highlightable-content.tsx +1 -1
  39. package/src/components/highlighting/ui/highlight-renderer.tsx +1 -1
  40. package/src/components/highlighting/ui/util.ts +2 -2
  41. package/src/components/highlighting/word-indexer.tsx +4 -4
  42. package/src/components/icon.tsx +1 -1
  43. package/src/components/image-loader.tsx +4 -4
  44. package/src/components/input-with-examples.tsx +2 -2
  45. package/src/components/lint.tsx +1 -1
  46. package/src/components/math-input.tsx +5 -5
  47. package/src/components/math-output.tsx +1 -1
  48. package/src/components/multi-button-group.tsx +1 -1
  49. package/src/components/number-input.tsx +10 -10
  50. package/src/components/prop-check-box.tsx +1 -1
  51. package/src/components/simple-keypad-input.tsx +4 -4
  52. package/src/components/sortable.tsx +42 -41
  53. package/src/components/svg-image.tsx +12 -12
  54. package/src/components/tex-buttons.tsx +4 -3
  55. package/src/components/text-input.tsx +8 -8
  56. package/src/components/text-list-editor.tsx +11 -11
  57. package/src/components/visibility-observer/create-visibility-observer.ts +1 -1
  58. package/src/components/visibility-observer/visibility-observer.tsx +2 -2
  59. package/src/components/zoomable-tex.tsx +3 -3
  60. package/src/components/zoomable.tsx +8 -8
  61. package/src/hint-renderer.tsx +3 -3
  62. package/src/hints-renderer.tsx +11 -11
  63. package/src/init.ts +1 -1
  64. package/src/interaction-tracker.ts +4 -4
  65. package/src/interactive2/__tests__/movable-point.test.ts +1 -1
  66. package/src/interactive2/interactive-util.ts +6 -6
  67. package/src/interactive2/movable-helper-methods.ts +2 -2
  68. package/src/interactive2/movable-line-options.ts +37 -37
  69. package/src/interactive2/movable-line.ts +2 -2
  70. package/src/interactive2/movable-point-options.ts +29 -29
  71. package/src/interactive2/movable-point.tsx +2 -2
  72. package/src/interactive2/movable-polygon-options.ts +45 -45
  73. package/src/interactive2/movable-polygon.ts +2 -2
  74. package/src/interactive2/movable.ts +2 -2
  75. package/src/interactive2/objective_.ts +1 -1
  76. package/src/interactive2/wrapped-defaults.ts +2 -2
  77. package/src/interactive2/wrapped-ellipse.ts +9 -9
  78. package/src/interactive2/wrapped-line.ts +8 -8
  79. package/src/interactive2/wrapped-path.ts +5 -5
  80. package/src/item-renderer.tsx +5 -5
  81. package/src/mixins/changeable.ts +2 -2
  82. package/src/mixins/editor-jsonify.ts +1 -1
  83. package/src/mixins/provide-keypad.tsx +23 -37
  84. package/src/mixins/widget-jsonify-deprecated.ts +1 -1
  85. package/src/multi-items/__tests__/items.test.ts +1 -1
  86. package/src/multi-items/__tests__/multi-renderer.test.tsx +7 -7
  87. package/src/multi-items/__tests__/trees.test.ts +12 -12
  88. package/src/multi-items/item-types.ts +2 -2
  89. package/src/multi-items/items.ts +1 -1
  90. package/src/multi-items/multi-renderer.tsx +14 -14
  91. package/src/multi-items/prop-type-builders.ts +2 -2
  92. package/src/multi-items/tree-types.ts +4 -4
  93. package/src/multi-items/trees.ts +16 -16
  94. package/src/perseus-env.ts +2 -2
  95. package/src/perseus-markdown.tsx +5 -5
  96. package/src/renderer.tsx +38 -38
  97. package/src/server-item-renderer.tsx +5 -5
  98. package/src/sigfigs.ts +1 -1
  99. package/src/traversal.ts +1 -1
  100. package/src/types.ts +3 -3
  101. package/src/util/answer-types.ts +14 -14
  102. package/src/util/geometry.ts +7 -7
  103. package/src/util/graphie.ts +32 -32
  104. package/src/util/interactive.ts +118 -118
  105. package/src/util/math.ts +4 -4
  106. package/src/util/react-render.tsx +1 -1
  107. package/src/util/scroll-utils.ts +2 -2
  108. package/src/util/tex.ts +3 -3
  109. package/src/util.ts +15 -15
  110. package/src/widget-container.tsx +1 -1
  111. package/src/widgets/__stories__/test-keypad-context-wrapper.tsx +3 -3
  112. package/src/widgets/__testdata__/numeric-input.testdata.ts +1 -1
  113. package/src/widgets/__tests__/__snapshots__/video.test.ts.snap +2 -2
  114. package/src/widgets/__tests__/expression.test.ts +4 -3
  115. package/src/widgets/__tests__/grapher.cypress.ts +32 -32
  116. package/src/widgets/__tests__/group.test.tsx +1 -1
  117. package/src/widgets/__tests__/interactive-graph.cypress.ts +40 -40
  118. package/src/widgets/__tests__/interactive-graph.test.ts +1 -1
  119. package/src/widgets/__tests__/numeric-input.test.ts +1 -1
  120. package/src/widgets/__tests__/passage.test.tsx +2 -2
  121. package/src/widgets/__tests__/plotter.test.tsx +2 -1
  122. package/src/widgets/__tests__/radio/base-radio.test.tsx +7 -7
  123. package/src/widgets/__tests__/renderQuestion.tsx +3 -3
  124. package/src/widgets/categorizer.tsx +4 -4
  125. package/src/widgets/cs-program.tsx +2 -2
  126. package/src/widgets/dropdown.tsx +1 -1
  127. package/src/widgets/expression.tsx +10 -9
  128. package/src/widgets/graded-group-set.tsx +5 -5
  129. package/src/widgets/graded-group.tsx +18 -19
  130. package/src/widgets/grapher/util.tsx +6 -6
  131. package/src/widgets/grapher.tsx +10 -10
  132. package/src/widgets/group.tsx +3 -3
  133. package/src/widgets/iframe.tsx +2 -2
  134. package/src/widgets/image.tsx +1 -1
  135. package/src/widgets/input-number.tsx +4 -4
  136. package/src/widgets/interaction.tsx +77 -77
  137. package/src/widgets/interactive-graph.tsx +109 -107
  138. package/src/widgets/label-image/marker.tsx +2 -2
  139. package/src/widgets/label-image.test.ts +1 -1
  140. package/src/widgets/label-image.tsx +7 -7
  141. package/src/widgets/lights-puzzle.tsx +2 -2
  142. package/src/widgets/matcher.tsx +6 -6
  143. package/src/widgets/matrix.tsx +20 -20
  144. package/src/widgets/measurer.tsx +3 -3
  145. package/src/widgets/molecule/__tests__/layout.test.ts +4 -4
  146. package/src/widgets/molecule/__tests__/parser.test.ts +14 -14
  147. package/src/widgets/molecule/smiles-parser.ts +3 -3
  148. package/src/widgets/molecule.tsx +4 -4
  149. package/src/widgets/number-line.tsx +11 -11
  150. package/src/widgets/numeric-input.tsx +11 -11
  151. package/src/widgets/orderer.tsx +38 -38
  152. package/src/widgets/passage/__tests__/passage-markdown.test.ts +1 -1
  153. package/src/widgets/passage/passage-markdown.tsx +4 -4
  154. package/src/widgets/passage-ref-target.tsx +1 -1
  155. package/src/widgets/passage-ref.tsx +4 -6
  156. package/src/widgets/passage.tsx +11 -11
  157. package/src/widgets/plotter.tsx +9 -9
  158. package/src/widgets/radio/base-radio.tsx +11 -11
  159. package/src/widgets/radio/choice-icon/choice-icon.tsx +2 -2
  160. package/src/widgets/radio/choice.tsx +1 -1
  161. package/src/widgets/radio/option-status.tsx +1 -1
  162. package/src/widgets/radio/widget.tsx +6 -6
  163. package/src/widgets/radio.ts +1 -1
  164. package/src/widgets/reaction-diagram.tsx +8 -8
  165. package/src/widgets/sequence.tsx +2 -2
  166. package/src/widgets/simulator.tsx +14 -14
  167. package/src/widgets/sorter.tsx +4 -4
  168. package/src/widgets/table.tsx +8 -8
  169. package/src/widgets/transformer.tsx +92 -92
  170. package/src/widgets/unit.tsx +17 -17
  171. package/src/widgets/video-transcript-link.test.tsx +3 -3
  172. package/src/widgets/video-transcript-link.tsx +1 -1
  173. package/src/widgets/video.tsx +1 -1
  174. package/src/widgets.ts +5 -5
  175. package/src/zoom.ts +22 -22
  176. package/tsconfig-build.tsbuildinfo +1 -1
  177. package/dist/a11y.js.flow +0 -11
  178. package/dist/all-widgets.js.flow +0 -33
  179. package/dist/article-renderer.js.flow +0 -73
  180. package/dist/asset-context.js.flow +0 -15
  181. package/dist/basic-widgets.js.flow +0 -33
  182. package/dist/components/button-group.js.flow +0 -33
  183. package/dist/components/constants.js.flow +0 -13
  184. package/dist/components/fixed-to-responsive.js.flow +0 -34
  185. package/dist/components/graph.js.flow +0 -66
  186. package/dist/components/graphie-classes.js.flow +0 -19
  187. package/dist/components/graphie-movables.js.flow +0 -22
  188. package/dist/components/graphie.js.flow +0 -69
  189. package/dist/components/highlighting/highlightable-content.js.flow +0 -56
  190. package/dist/components/highlighting/highlights.js.flow +0 -54
  191. package/dist/components/highlighting/ranges.js.flow +0 -60
  192. package/dist/components/highlighting/types.js.flow +0 -70
  193. package/dist/components/highlighting/ui/highlight-renderer.js.flow +0 -43
  194. package/dist/components/highlighting/ui/highlight-set-renderer.js.flow +0 -41
  195. package/dist/components/highlighting/ui/highlight-tooltip.js.flow +0 -22
  196. package/dist/components/highlighting/ui/highlighting-ui.js.flow +0 -30
  197. package/dist/components/highlighting/ui/selection-tracker.js.flow +0 -54
  198. package/dist/components/highlighting/ui/types.js.flow +0 -22
  199. package/dist/components/highlighting/ui/util.js.flow +0 -42
  200. package/dist/components/highlighting/word-indexer.js.flow +0 -21
  201. package/dist/components/hud.js.flow +0 -14
  202. package/dist/components/icon.js.flow +0 -31
  203. package/dist/components/image-loader.js.flow +0 -49
  204. package/dist/components/info-tip/info-tip.js.flow +0 -20
  205. package/dist/components/info-tip.js.flow +0 -18
  206. package/dist/components/inline-icon.js.flow +0 -39
  207. package/dist/components/input-with-examples.js.flow +0 -58
  208. package/dist/components/lint.js.flow +0 -58
  209. package/dist/components/math-input.js.flow +0 -49
  210. package/dist/components/math-output.js.flow +0 -33
  211. package/dist/components/multi-button-group.js.flow +0 -35
  212. package/dist/components/number-input.js.flow +0 -42
  213. package/dist/components/prop-check-box.js.flow +0 -8
  214. package/dist/components/range-input.js.flow +0 -20
  215. package/dist/components/simple-keypad-input.js.flow +0 -16
  216. package/dist/components/sortable.js.flow +0 -91
  217. package/dist/components/stub-tag-editor.js.flow +0 -18
  218. package/dist/components/svg-image.js.flow +0 -85
  219. package/dist/components/tex-buttons.js.flow +0 -26
  220. package/dist/components/tex.js.flow +0 -25
  221. package/dist/components/text-input.js.flow +0 -39
  222. package/dist/components/text-list-editor.js.flow +0 -22
  223. package/dist/components/tooltip.js.flow +0 -51
  224. package/dist/components/visibility-observer/create-visibility-observer.js.flow +0 -23
  225. package/dist/components/visibility-observer/get-scroll-parent.js.flow +0 -7
  226. package/dist/components/visibility-observer/visibility-observer.js.flow +0 -36
  227. package/dist/components/zoomable-tex.js.flow +0 -18
  228. package/dist/components/zoomable.js.flow +0 -70
  229. package/dist/components.js.flow +0 -22
  230. package/dist/definition-context.js.flow +0 -25
  231. package/dist/dependencies.js.flow +0 -9
  232. package/dist/error-boundary.js.flow +0 -19
  233. package/dist/extra-widgets.js.flow +0 -33
  234. package/dist/hint-renderer.js.flow +0 -32
  235. package/dist/hints-renderer.js.flow +0 -41
  236. package/dist/icon-paths.js.flow +0 -123
  237. package/dist/index.js.flow +0 -134
  238. package/dist/init.js.flow +0 -20
  239. package/dist/interaction-tracker.js.flow +0 -35
  240. package/dist/interactive2/interactive-util.js.flow +0 -50
  241. package/dist/interactive2/movable-helper-methods.js.flow +0 -15
  242. package/dist/interactive2/movable-line-options.js.flow +0 -44
  243. package/dist/interactive2/movable-line.js.flow +0 -8
  244. package/dist/interactive2/movable-point-options.js.flow +0 -44
  245. package/dist/interactive2/movable-point.js.flow +0 -8
  246. package/dist/interactive2/movable-polygon-options.js.flow +0 -47
  247. package/dist/interactive2/movable-polygon.js.flow +0 -8
  248. package/dist/interactive2/movable.js.flow +0 -8
  249. package/dist/interactive2/objective_.js.flow +0 -25
  250. package/dist/interactive2/types.js.flow +0 -8
  251. package/dist/interactive2/wrapped-defaults.js.flow +0 -11
  252. package/dist/interactive2/wrapped-ellipse.js.flow +0 -14
  253. package/dist/interactive2/wrapped-line.js.flow +0 -14
  254. package/dist/interactive2/wrapped-path.js.flow +0 -13
  255. package/dist/interactive2.js.flow +0 -16
  256. package/dist/item-renderer.js.flow +0 -132
  257. package/dist/item-version.js.flow +0 -11
  258. package/dist/jipt-paragraphs.js.flow +0 -14
  259. package/dist/loading-context.js.flow +0 -12
  260. package/dist/logging/log.js.flow +0 -62
  261. package/dist/mixins/changeable.js.flow +0 -33
  262. package/dist/mixins/editor-jsonify.js.flow +0 -10
  263. package/dist/mixins/provide-keypad.js.flow +0 -33
  264. package/dist/mixins/widget-jsonify-deprecated.js.flow +0 -11
  265. package/dist/mixins/widget-prop-denylist.js.flow +0 -20
  266. package/dist/multi-items/item-types.js.flow +0 -55
  267. package/dist/multi-items/items.js.flow +0 -66
  268. package/dist/multi-items/multi-renderer.js.flow +0 -213
  269. package/dist/multi-items/prop-type-builders.js.flow +0 -22
  270. package/dist/multi-items/shape-types.js.flow +0 -60
  271. package/dist/multi-items/shapes.js.flow +0 -25
  272. package/dist/multi-items/tree-types.js.flow +0 -45
  273. package/dist/multi-items/trees.js.flow +0 -147
  274. package/dist/multi-items.js.flow +0 -36
  275. package/dist/perseus-api.js.flow +0 -151
  276. package/dist/perseus-env.js.flow +0 -6
  277. package/dist/perseus-error.js.flow +0 -16
  278. package/dist/perseus-markdown.js.flow +0 -20
  279. package/dist/perseus-types.js.flow +0 -1041
  280. package/dist/question-paragraph.js.flow +0 -17
  281. package/dist/renderability.js.flow +0 -19
  282. package/dist/renderer.js.flow +0 -325
  283. package/dist/server-item-renderer.js.flow +0 -132
  284. package/dist/sigfigs.js.flow +0 -41
  285. package/dist/styles/constants.js.flow +0 -62
  286. package/dist/styles/global-constants.js.flow +0 -348
  287. package/dist/styles/global-styles.js.flow +0 -53
  288. package/dist/styles/media-queries.js.flow +0 -35
  289. package/dist/styles/shared.js.flow +0 -8
  290. package/dist/tex-wrangler.js.flow +0 -13
  291. package/dist/translation-linter.js.flow +0 -32
  292. package/dist/traversal.js.flow +0 -26
  293. package/dist/types.js.flow +0 -318
  294. package/dist/util/a11y.js.flow +0 -8
  295. package/dist/util/answer-types.js.flow +0 -49
  296. package/dist/util/colors.js.flow +0 -95
  297. package/dist/util/fix-passage-refs.js.flow +0 -8
  298. package/dist/util/geometry.js.flow +0 -37
  299. package/dist/util/graph-utils.js.flow +0 -9
  300. package/dist/util/graphie.js.flow +0 -8
  301. package/dist/util/interactive.js.flow +0 -11
  302. package/dist/util/katex-preprocess.js.flow +0 -12
  303. package/dist/util/math.js.flow +0 -62
  304. package/dist/util/mobile-native-utils.js.flow +0 -12
  305. package/dist/util/react-render.js.flow +0 -12
  306. package/dist/util/register-all-widgets-for-testing.js.flow +0 -7
  307. package/dist/util/scroll-utils.js.flow +0 -19
  308. package/dist/util/sizing-utils.js.flow +0 -20
  309. package/dist/util/tex.js.flow +0 -17
  310. package/dist/util/url-utils.js.flow +0 -11
  311. package/dist/util.graphie.js.flow +0 -14
  312. package/dist/util.js.flow +0 -319
  313. package/dist/version.js.flow +0 -17
  314. package/dist/widget-container.js.flow +0 -33
  315. package/dist/widgets/categorizer.js.flow +0 -70
  316. package/dist/widgets/cs-program.js.flow +0 -54
  317. package/dist/widgets/definition.js.flow +0 -57
  318. package/dist/widgets/dropdown.js.flow +0 -63
  319. package/dist/widgets/explanation.js.flow +0 -58
  320. package/dist/widgets/expression.js.flow +0 -116
  321. package/dist/widgets/graded-group-answer-bar.js.flow +0 -24
  322. package/dist/widgets/graded-group-set.js.flow +0 -65
  323. package/dist/widgets/graded-group.js.flow +0 -78
  324. package/dist/widgets/grapher/util.js.flow +0 -38
  325. package/dist/widgets/grapher.js.flow +0 -102
  326. package/dist/widgets/group.js.flow +0 -60
  327. package/dist/widgets/iframe.js.flow +0 -53
  328. package/dist/widgets/image.js.flow +0 -73
  329. package/dist/widgets/input-number.js.flow +0 -94
  330. package/dist/widgets/interaction/arrow-picker.js.flow +0 -21
  331. package/dist/widgets/interaction/color-picker.js.flow +0 -23
  332. package/dist/widgets/interaction/dash-picker.js.flow +0 -21
  333. package/dist/widgets/interaction/element-container.js.flow +0 -28
  334. package/dist/widgets/interaction.js.flow +0 -60
  335. package/dist/widgets/interactive-graph.js.flow +0 -239
  336. package/dist/widgets/label-image/answer-choices.js.flow +0 -55
  337. package/dist/widgets/label-image/marker.js.flow +0 -31
  338. package/dist/widgets/label-image/types.js.flow +0 -23
  339. package/dist/widgets/label-image.js.flow +0 -142
  340. package/dist/widgets/lights-puzzle.js.flow +0 -58
  341. package/dist/widgets/matcher.js.flow +0 -106
  342. package/dist/widgets/matrix.js.flow +0 -80
  343. package/dist/widgets/measurer.js.flow +0 -30
  344. package/dist/widgets/molecule/molecule-drawing.js.flow +0 -11
  345. package/dist/widgets/molecule/molecule-layout.js.flow +0 -96
  346. package/dist/widgets/molecule/smiles-parser.js.flow +0 -26
  347. package/dist/widgets/molecule.js.flow +0 -60
  348. package/dist/widgets/number-line.js.flow +0 -102
  349. package/dist/widgets/numeric-input.js.flow +0 -105
  350. package/dist/widgets/orderer.js.flow +0 -81
  351. package/dist/widgets/passage/passage-markdown.js.flow +0 -33
  352. package/dist/widgets/passage-ref-target.js.flow +0 -52
  353. package/dist/widgets/passage-ref.js.flow +0 -85
  354. package/dist/widgets/passage.js.flow +0 -157
  355. package/dist/widgets/plotter.js.flow +0 -112
  356. package/dist/widgets/radio/base-radio.js.flow +0 -50
  357. package/dist/widgets/radio/choice-a11y-text.js.flow +0 -14
  358. package/dist/widgets/radio/choice-icon/choice-icon.js.flow +0 -22
  359. package/dist/widgets/radio/choice-icon/cross-out-line.js.flow +0 -16
  360. package/dist/widgets/radio/choice-icon/shared-styles.js.flow +0 -11
  361. package/dist/widgets/radio/choice-none-above.js.flow +0 -16
  362. package/dist/widgets/radio/choice.js.flow +0 -29
  363. package/dist/widgets/radio/choice.jsx.fixture.js.flow +0 -7
  364. package/dist/widgets/radio/focus-ring.js.flow +0 -22
  365. package/dist/widgets/radio/option-status.js.flow +0 -16
  366. package/dist/widgets/radio/util.js.flow +0 -12
  367. package/dist/widgets/radio/widget.js.flow +0 -80
  368. package/dist/widgets/radio.js.flow +0 -31
  369. package/dist/widgets/reaction-diagram.js.flow +0 -46
  370. package/dist/widgets/sequence.js.flow +0 -53
  371. package/dist/widgets/simulator.js.flow +0 -107
  372. package/dist/widgets/sorter.js.flow +0 -102
  373. package/dist/widgets/table.js.flow +0 -67
  374. package/dist/widgets/transformer.js.flow +0 -127
  375. package/dist/widgets/unit.js.flow +0 -93
  376. package/dist/widgets/video-transcript-link.js.flow +0 -15
  377. package/dist/widgets/video.js.flow +0 -57
  378. package/dist/widgets.js.flow +0 -108
  379. package/dist/zoom.js.flow +0 -7
  380. package/src/multi-items/item-types.js.flow +0 -55
@@ -2,7 +2,7 @@
2
2
  * Sets up the basic environment for running Perseus in.
3
3
  */
4
4
 
5
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'KhanUtil' does not exist on type 'Window & typeof globalThis'.
5
+ // @ts-expect-error - TS2339 - Property 'KhanUtil' does not exist on type 'Window & typeof globalThis'.
6
6
  window.KhanUtil = {
7
7
  debugLog: function () {},
8
8
  localeToFixed: function (num, precision) {
@@ -10,7 +10,7 @@ window.KhanUtil = {
10
10
  },
11
11
  };
12
12
 
13
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'Exercises' does not exist on type 'Window & typeof globalThis'.
13
+ // @ts-expect-error - TS2339 - Property 'Exercises' does not exist on type 'Window & typeof globalThis'.
14
14
  window.Exercises = {
15
15
  localMode: true,
16
16
 
@@ -128,7 +128,7 @@ const rules = {
128
128
 
129
129
  // Splice the caption into the table's children with the
130
130
  // caption as the first child.
131
- // @ts-expect-error [FEI-5003] - TS2769 - No overload matches this call.
131
+ // @ts-expect-error - TS2769 - No overload matches this call.
132
132
  contents = React.cloneElement(tableOutput, null, [
133
133
  caption,
134
134
  ...tableOutput.props.children,
@@ -156,7 +156,7 @@ const rules = {
156
156
  // just a stub for testing.
157
157
  return (
158
158
  <em key={state.key}>
159
- {/* @ts-expect-error [FEI-5003] - TS2554 - Expected 1-2 arguments, but got 3. */}
159
+ {/* @ts-expect-error - TS2554 - Expected 1-2 arguments, but got 3. */}
160
160
  {i18n.doNotTranslate("[Widget: ", node.id, "]")}
161
161
  </em>
162
162
  );
@@ -211,7 +211,7 @@ const rules = {
211
211
  : false;
212
212
  if (!isKAUrl) {
213
213
  // Prevents "reverse tabnabbing" phishing attacks
214
- // @ts-expect-error [FEI-5003] - TS2322 - Type '"noopener noreferrer"' is not assignable to type 'null'.
214
+ // @ts-expect-error - TS2322 - Type '"noopener noreferrer"' is not assignable to type 'null'.
215
215
  rel = "noopener noreferrer";
216
216
  }
217
217
 
@@ -293,7 +293,7 @@ const inlineNodeTypes = {
293
293
  code: true,
294
294
  } as const;
295
295
 
296
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type '{ readonly columns: { readonly react: (node: any, output: any, state: any) => Element; readonly order: -2; readonly match: any; readonly parse: (capture: any, parse: any, state: any) => any; }; ... 35 more ...; readonly text: TextInOutRule; }' is not assignable to parameter of type 'ParserRules'.
296
+ // @ts-expect-error - TS2345 - Argument of type '{ readonly columns: { readonly react: (node: any, output: any, state: any) => Element; readonly order: -2; readonly match: any; readonly parse: (capture: any, parse: any, state: any) => any; }; ... 35 more ...; readonly text: TextInOutRule; }' is not assignable to parameter of type 'ParserRules'.
297
297
  const builtParser = SimpleMarkdown.parserFor(rules);
298
298
  const parse = (source: string, state: any): any => {
299
299
  const paragraphedSource = source + "\n\n";
@@ -385,7 +385,7 @@ const getContent = (ast: any) => {
385
385
  * Markdown markup and widget references are ignored.
386
386
  */
387
387
  const characterCount = (source: string): number => {
388
- // @ts-expect-error [FEI-5003] - TS2554 - Expected 2 arguments, but got 1.
388
+ // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
389
389
  const ast = parse(source);
390
390
  const content = getContent(ast).join("");
391
391
  return content.length;
package/src/renderer.tsx CHANGED
@@ -66,7 +66,7 @@ const isIdPathPrefix = function (
66
66
  return prefixArray === wholeArray;
67
67
  }
68
68
 
69
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'readonly string[] | undefined' is not assignable to parameter of type 'Collection<any>'.
69
+ // @ts-expect-error - TS2345 - Argument of type 'readonly string[] | undefined' is not assignable to parameter of type 'Collection<any>'.
70
70
  return _.every(prefixArray, (elem: string, i: number) => {
71
71
  if (wholeArray != null) {
72
72
  return _.isEqual(elem, wholeArray[i]);
@@ -209,26 +209,26 @@ type DefaultProps = {
209
209
 
210
210
  class Renderer extends React.Component<Props, State> {
211
211
  _currentFocus: FocusPath | null | undefined;
212
- // @ts-expect-error [FEI-5003] - TS2564 - Property '_foundTextNodes' has no initializer and is not definitely assigned in the constructor.
212
+ // @ts-expect-error - TS2564 - Property '_foundTextNodes' has no initializer and is not definitely assigned in the constructor.
213
213
  _foundTextNodes: boolean;
214
- // @ts-expect-error [FEI-5003] - TS2564 - Property '_interactionTrackers' has no initializer and is not definitely assigned in the constructor.
214
+ // @ts-expect-error - TS2564 - Property '_interactionTrackers' has no initializer and is not definitely assigned in the constructor.
215
215
  _interactionTrackers: {
216
216
  [id: string]: InteractionTracker;
217
217
  };
218
- // @ts-expect-error [FEI-5003] - TS2564 - Property '_isMounted' has no initializer and is not definitely assigned in the constructor.
218
+ // @ts-expect-error - TS2564 - Property '_isMounted' has no initializer and is not definitely assigned in the constructor.
219
219
  _isMounted: boolean;
220
- // @ts-expect-error [FEI-5003] - TS2564 - Property '_isTwoColumn' has no initializer and is not definitely assigned in the constructor.
220
+ // @ts-expect-error - TS2564 - Property '_isTwoColumn' has no initializer and is not definitely assigned in the constructor.
221
221
  _isTwoColumn: boolean;
222
222
 
223
223
  // The i18n linter.
224
224
  _translationLinter: TranslationLinter;
225
225
 
226
226
  lastRenderedMarkdown: React.ReactNode;
227
- // @ts-expect-error [FEI-5003] - TS2564 - Property 'reuseMarkdown' has no initializer and is not definitely assigned in the constructor.
227
+ // @ts-expect-error - TS2564 - Property 'reuseMarkdown' has no initializer and is not definitely assigned in the constructor.
228
228
  reuseMarkdown: boolean;
229
- // @ts-expect-error [FEI-5003] - TS2564 - Property 'translationIndex' has no initializer and is not definitely assigned in the constructor.
229
+ // @ts-expect-error - TS2564 - Property 'translationIndex' has no initializer and is not definitely assigned in the constructor.
230
230
  translationIndex: number;
231
- // @ts-expect-error [FEI-5003] - TS2564 - Property 'widgetIds' has no initializer and is not definitely assigned in the constructor.
231
+ // @ts-expect-error - TS2564 - Property 'widgetIds' has no initializer and is not definitely assigned in the constructor.
232
232
  widgetIds: Array<string>;
233
233
 
234
234
  static defaultProps: DefaultProps = {
@@ -275,7 +275,7 @@ class Renderer extends React.Component<Props, State> {
275
275
  this._isMounted = true;
276
276
 
277
277
  // figure out why we're passing an empty object
278
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type '{}' is not assignable to parameter of type 'Props'.
278
+ // @ts-expect-error - TS2345 - Argument of type '{}' is not assignable to parameter of type 'Props'.
279
279
  this.handleRender({});
280
280
  this._currentFocus = null;
281
281
 
@@ -392,7 +392,7 @@ class Renderer extends React.Component<Props, State> {
392
392
  _.each(this.widgetIds, (id) => {
393
393
  // eslint-disable-next-line react/no-string-refs
394
394
  const container = this.refs["container:" + id];
395
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'replaceWidgetProps' does not exist on type 'ReactInstance'.
395
+ // @ts-expect-error - TS2339 - Property 'replaceWidgetProps' does not exist on type 'ReactInstance'.
396
396
  container && container.replaceWidgetProps(this.getWidgetProps(id));
397
397
  });
398
398
 
@@ -454,11 +454,11 @@ class Renderer extends React.Component<Props, State> {
454
454
  };
455
455
  };
456
456
 
457
- // @ts-expect-error [FEI-5003] - TS2322 - Type '(props: Props) => Partial<Record<string, CategorizerWidget | CSProgramWidget | DefinitionWidget | DropdownWidget | ... 35 more ... | VideoWidget>>' is not assignable to type '(props: Props) => { [key: string]: PerseusWidget; }'.
457
+ // @ts-expect-error - TS2322 - Type '(props: Props) => Partial<Record<string, CategorizerWidget | CSProgramWidget | DefinitionWidget | DropdownWidget | ... 35 more ... | VideoWidget>>' is not assignable to type '(props: Props) => { [key: string]: PerseusWidget; }'.
458
458
  _getAllWidgetsInfo: (props: Props) => {
459
459
  [key: string]: WidgetInfo;
460
460
  } = (props: Props) => {
461
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type '{ [key: string]: PerseusWidget; }' is not assignable to parameter of type 'Partial<Record<string, CategorizerWidget>>'.
461
+ // @ts-expect-error - TS2345 - Argument of type '{ [key: string]: PerseusWidget; }' is not assignable to parameter of type 'Partial<Record<string, CategorizerWidget>>'.
462
462
  return mapObject(props.widgets, (widgetInfo, widgetId) => {
463
463
  if (!widgetInfo.type || !widgetInfo.alignment) {
464
464
  const newValues: Record<string, any> = {};
@@ -482,7 +482,7 @@ class Renderer extends React.Component<Props, State> {
482
482
  },
483
483
  props: Props,
484
484
  ) => any = (allWidgetInfo, props) => {
485
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type '{ [key: string]: PerseusWidget; }' is not assignable to parameter of type 'Partial<Record<string, CategorizerWidget>>'.
485
+ // @ts-expect-error - TS2345 - Argument of type '{ [key: string]: PerseusWidget; }' is not assignable to parameter of type 'Partial<Record<string, CategorizerWidget>>'.
486
486
  return mapObject(allWidgetInfo, (widgetInfo) => {
487
487
  return Widgets.getRendererPropsForWidgetInfo(
488
488
  widgetInfo,
@@ -541,7 +541,7 @@ class Renderer extends React.Component<Props, State> {
541
541
  if (widgetInfo) {
542
542
  const type = (widgetInfo && widgetInfo.type) || impliedType;
543
543
  const shouldHighlight = _.contains(
544
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'readonly any[] | undefined' is not assignable to parameter of type 'Collection<any>'.
544
+ // @ts-expect-error - TS2345 - Argument of type 'readonly any[] | undefined' is not assignable to parameter of type 'Collection<any>'.
545
545
  this.props.highlightedWidgets,
546
546
  id,
547
547
  );
@@ -590,10 +590,10 @@ class Renderer extends React.Component<Props, State> {
590
590
  interactionTracker = this._interactionTrackers[id] =
591
591
  new InteractionTracker(
592
592
  apiOptions.trackInteraction,
593
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'string | null | undefined' is not assignable to parameter of type 'string'.
593
+ // @ts-expect-error - TS2345 - Argument of type 'string | null | undefined' is not assignable to parameter of type 'string'.
594
594
  widgetInfo && widgetInfo.type,
595
595
  id,
596
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'string | null | undefined' is not assignable to parameter of type 'string'.
596
+ // @ts-expect-error - TS2345 - Argument of type 'string | null | undefined' is not assignable to parameter of type 'string'.
597
597
  Widgets.getTracking(widgetInfo && widgetInfo.type),
598
598
  );
599
599
  }
@@ -858,7 +858,7 @@ class Renderer extends React.Component<Props, State> {
858
858
  if (!ref) {
859
859
  return null;
860
860
  }
861
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'getWidget' does not exist on type 'ReactInstance'.
861
+ // @ts-expect-error - TS2339 - Property 'getWidget' does not exist on type 'ReactInstance'.
862
862
  return ref.getWidget();
863
863
  };
864
864
 
@@ -885,7 +885,7 @@ class Renderer extends React.Component<Props, State> {
885
885
 
886
886
  // Failsafe: abort if ID is different, because focus probably happened
887
887
  // before blur
888
- // @ts-expect-error [FEI-5003] - TS2769 - No overload matches this call.
888
+ // @ts-expect-error - TS2769 - No overload matches this call.
889
889
  const fullPath = [id].concat(blurPath);
890
890
  if (!_.isEqual(fullPath, blurringFocusPath)) {
891
891
  return;
@@ -978,7 +978,7 @@ class Renderer extends React.Component<Props, State> {
978
978
 
979
979
  // wrap top-level elements in a QuestionParagraph, mostly
980
980
  // for appropriate spacing and other css
981
- // @ts-expect-error [FEI-5003] - TS2322 - Type '(ast: any, state: WidgetState) => never[] | JSX.Element' is not assignable to type '(ast: any, state: WidgetState) => ReactElement<any, string | JSXElementConstructor<any>>'.
981
+ // @ts-expect-error - TS2322 - Type '(ast: any, state: WidgetState) => never[] | JSX.Element' is not assignable to type '(ast: any, state: WidgetState) => ReactElement<any, string | JSXElementConstructor<any>>'.
982
982
  outputMarkdown: (ast: any, state: WidgetState) => React.ReactElement = (
983
983
  ast: any,
984
984
  state: WidgetState,
@@ -1004,10 +1004,10 @@ class Renderer extends React.Component<Props, State> {
1004
1004
  // now.
1005
1005
  /* c8 ignore if */
1006
1006
  if (typeof nodeOut === "string" && lastWasString) {
1007
- // @ts-expect-error [FEI-5003] - TS2322 - Type 'number' is not assignable to type 'never'.
1007
+ // @ts-expect-error - TS2322 - Type 'number' is not assignable to type 'never'.
1008
1008
  result[result.length - 1] += nodeOut;
1009
1009
  } else {
1010
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'ReactElement<any, string | JSXElementConstructor<any>>' is not assignable to parameter of type 'never'.
1010
+ // @ts-expect-error - TS2345 - Argument of type 'ReactElement<any, string | JSXElementConstructor<any>>' is not assignable to parameter of type 'never'.
1011
1011
  result.push(nodeOut);
1012
1012
  }
1013
1013
  lastWasString = isString;
@@ -1303,7 +1303,7 @@ class Renderer extends React.Component<Props, State> {
1303
1303
  {({setAssetStatus}) => (
1304
1304
  <SvgImage
1305
1305
  setAssetStatus={setAssetStatus}
1306
- // @ts-expect-error [FEI-5003] - TS2322 - Type 'string | null | undefined' is not assignable to type 'string | undefined'.
1306
+ // @ts-expect-error - TS2322 - Type 'string | null | undefined' is not assignable to type 'string | undefined'.
1307
1307
  src={PerseusMarkdown.sanitizeUrl(node.target)}
1308
1308
  alt={node.alt}
1309
1309
  title={node.title}
@@ -1397,7 +1397,7 @@ class Renderer extends React.Component<Props, State> {
1397
1397
 
1398
1398
  // In the common case of no callback specified, avoid this work.
1399
1399
  if (onRender !== noopOnRender || oldOnRender !== noopOnRender) {
1400
- // @ts-expect-error [FEI-5003] - TS2769 - No overload matches this call. | TS2339 - Property 'find' does not exist on type 'JQueryStatic'.
1400
+ // @ts-expect-error - TS2769 - No overload matches this call. | TS2339 - Property 'find' does not exist on type 'JQueryStatic'.
1401
1401
  const $images = $(ReactDOM.findDOMNode(this)).find("img");
1402
1402
 
1403
1403
  // Fire callback on image load...
@@ -1490,9 +1490,9 @@ class Renderer extends React.Component<Props, State> {
1490
1490
 
1491
1491
  getDOMNodeForPath: (path: FocusPath) => Element | Text | null | undefined =
1492
1492
  (path: FocusPath) => {
1493
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'FocusPath' is not assignable to parameter of type 'List<any>'.
1493
+ // @ts-expect-error - TS2345 - Argument of type 'FocusPath' is not assignable to parameter of type 'List<any>'.
1494
1494
  const widgetId = _.first(path);
1495
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'FocusPath' is not assignable to parameter of type 'List<any>'.
1495
+ // @ts-expect-error - TS2345 - Argument of type 'FocusPath' is not assignable to parameter of type 'List<any>'.
1496
1496
  const interWidgetPath = _.rest(path);
1497
1497
 
1498
1498
  // Widget handles parsing of the interWidgetPath. If the path is empty
@@ -1504,7 +1504,7 @@ class Renderer extends React.Component<Props, State> {
1504
1504
  return getNode(interWidgetPath);
1505
1505
  }
1506
1506
  if (interWidgetPath.length === 0) {
1507
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'Widget | null | undefined' is not assignable to parameter of type 'ReactInstance | null | undefined'.
1507
+ // @ts-expect-error - TS2345 - Argument of type 'Widget | null | undefined' is not assignable to parameter of type 'ReactInstance | null | undefined'.
1508
1508
  return ReactDOM.findDOMNode(widget);
1509
1509
  }
1510
1510
  };
@@ -1512,9 +1512,9 @@ class Renderer extends React.Component<Props, State> {
1512
1512
  getGrammarTypeForPath: (path: FocusPath) => string | null | undefined = (
1513
1513
  path: FocusPath,
1514
1514
  ) => {
1515
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'FocusPath' is not assignable to parameter of type 'List<any>'.
1515
+ // @ts-expect-error - TS2345 - Argument of type 'FocusPath' is not assignable to parameter of type 'List<any>'.
1516
1516
  const widgetId = _.first(path);
1517
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'FocusPath' is not assignable to parameter of type 'List<any>'.
1517
+ // @ts-expect-error - TS2345 - Argument of type 'FocusPath' is not assignable to parameter of type 'List<any>'.
1518
1518
  const interWidgetPath = _.rest(path);
1519
1519
 
1520
1520
  const widget = this.getWidgetInstance(widgetId);
@@ -1532,7 +1532,7 @@ class Renderer extends React.Component<Props, State> {
1532
1532
  const widgetInputPaths = widget.getInputPaths();
1533
1533
  // Prefix paths with their widgetID and add to collective
1534
1534
  // list of paths.
1535
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type '(inputPath: string) => void' is not assignable to parameter of type 'CollectionIterator<FocusPath, void, readonly FocusPath[]>'.
1535
+ // @ts-expect-error - TS2345 - Argument of type '(inputPath: string) => void' is not assignable to parameter of type 'CollectionIterator<FocusPath, void, readonly FocusPath[]>'.
1536
1536
  _.each(widgetInputPaths, (inputPath: string) => {
1537
1537
  const relativeInputPath = [widgetId].concat(inputPath);
1538
1538
  inputPaths.push(relativeInputPath);
@@ -1553,9 +1553,9 @@ class Renderer extends React.Component<Props, State> {
1553
1553
  this.blurPath(this._currentFocus);
1554
1554
  }
1555
1555
 
1556
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'FocusPath' is not assignable to parameter of type 'List<any>'.
1556
+ // @ts-expect-error - TS2345 - Argument of type 'FocusPath' is not assignable to parameter of type 'List<any>'.
1557
1557
  const widgetId = _.first(path);
1558
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'FocusPath' is not assignable to parameter of type 'List<any>'.
1558
+ // @ts-expect-error - TS2345 - Argument of type 'FocusPath' is not assignable to parameter of type 'List<any>'.
1559
1559
  const interWidgetPath = _.rest(path);
1560
1560
 
1561
1561
  // Widget handles parsing of the interWidgetPath
@@ -1571,9 +1571,9 @@ class Renderer extends React.Component<Props, State> {
1571
1571
  return;
1572
1572
  }
1573
1573
 
1574
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'FocusPath' is not assignable to parameter of type 'List<any>'.
1574
+ // @ts-expect-error - TS2345 - Argument of type 'FocusPath' is not assignable to parameter of type 'List<any>'.
1575
1575
  const widgetId = _.first(path);
1576
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'FocusPath' is not assignable to parameter of type 'List<any>'.
1576
+ // @ts-expect-error - TS2345 - Argument of type 'FocusPath' is not assignable to parameter of type 'List<any>'.
1577
1577
  const interWidgetPath = _.rest(path);
1578
1578
  const widget = this.getWidgetInstance(widgetId);
1579
1579
  // We might be in the editor and blurring a widget that no
@@ -1600,7 +1600,7 @@ class Renderer extends React.Component<Props, State> {
1600
1600
  this.state.widgetInfo,
1601
1601
  function (info, id) {
1602
1602
  // eslint-disable-next-line @babel/no-invalid-this
1603
- // @ts-expect-error [FEI-5003] - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
1603
+ // @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
1604
1604
  // eslint-disable-next-line @babel/no-invalid-this
1605
1605
  const widget = this.getWidgetInstance(id);
1606
1606
  const s = widget.serialize();
@@ -1614,7 +1614,7 @@ class Renderer extends React.Component<Props, State> {
1614
1614
  };
1615
1615
 
1616
1616
  emptyWidgets: () => any = () => {
1617
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type '(id: string) => boolean | undefined' is not assignable to parameter of type 'Iteratee<string[], boolean, string>'.
1617
+ // @ts-expect-error - TS2345 - Argument of type '(id: string) => boolean | undefined' is not assignable to parameter of type 'Iteratee<string[], boolean, string>'.
1618
1618
  return _.filter(this.widgetIds, (id) => {
1619
1619
  const widgetInfo = this._getWidgetInfo(id);
1620
1620
  if (widgetInfo.static) {
@@ -1625,7 +1625,7 @@ class Renderer extends React.Component<Props, State> {
1625
1625
  if (widget && widget.simpleValidate) {
1626
1626
  const score: PerseusScore = widget.simpleValidate(
1627
1627
  widgetInfo.options,
1628
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'null' is not assignable to parameter of type '((widgetId: any, value: string, message?: string | null | undefined) => unknown) | undefined'.
1628
+ // @ts-expect-error - TS2345 - Argument of type 'null' is not assignable to parameter of type '((widgetId: any, value: string, message?: string | null | undefined) => unknown) | undefined'.
1629
1629
  null,
1630
1630
  );
1631
1631
  return Util.scoreIsEmpty(score);
@@ -1698,9 +1698,9 @@ class Renderer extends React.Component<Props, State> {
1698
1698
  newValue: string,
1699
1699
  focus: () => unknown,
1700
1700
  ) => void = (path, newValue, focus) => {
1701
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'FocusPath' is not assignable to parameter of type 'List<any>'.
1701
+ // @ts-expect-error - TS2345 - Argument of type 'FocusPath' is not assignable to parameter of type 'List<any>'.
1702
1702
  const widgetId = _.first(path);
1703
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'FocusPath' is not assignable to parameter of type 'List<any>'.
1703
+ // @ts-expect-error - TS2345 - Argument of type 'FocusPath' is not assignable to parameter of type 'List<any>'.
1704
1704
  const interWidgetPath = _.rest(path);
1705
1705
  const widget = this.getWidgetInstance(widgetId);
1706
1706
 
@@ -70,7 +70,7 @@ export class ServerItemRenderer
70
70
  extends React.Component<Props, State>
71
71
  implements RendererInterface
72
72
  {
73
- // @ts-expect-error [FEI-5003] - TS2564 - Property 'questionRenderer' has no initializer and is not definitely assigned in the constructor.
73
+ // @ts-expect-error - TS2564 - Property 'questionRenderer' has no initializer and is not definitely assigned in the constructor.
74
74
  questionRenderer: Renderer;
75
75
  hintsRenderer: any;
76
76
  _currentFocus: FocusPath;
@@ -174,7 +174,7 @@ export class ServerItemRenderer
174
174
  this._currentFocus,
175
175
  prevFocus,
176
176
  didFocusInput && keypadElement && keypadElement.getDOMNode(),
177
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'false | Element | Text | null | undefined' is not assignable to parameter of type 'HTMLElement | undefined'.
177
+ // @ts-expect-error - TS2345 - Argument of type 'false | Element | Text | null | undefined' is not assignable to parameter of type 'HTMLElement | undefined'.
178
178
  didFocusInput &&
179
179
  this.questionRenderer.getDOMNodeForPath(newFocus),
180
180
  );
@@ -205,7 +205,7 @@ export class ServerItemRenderer
205
205
  // this callback is executed
206
206
  // TODO(jeff, CP-3128): Use Wonder Blocks Timing API.
207
207
  // eslint-disable-next-line no-restricted-syntax
208
- // @ts-expect-error [FEI-5003] - TS2322 - Type 'Timeout' is not assignable to type 'number'.
208
+ // @ts-expect-error - TS2322 - Type 'Timeout' is not assignable to type 'number'.
209
209
  this.blurTimeoutID = setTimeout(() => {
210
210
  if (_.isEqual(this._currentFocus, blurringFocusPath)) {
211
211
  this._setCurrentFocus(null);
@@ -324,7 +324,7 @@ export class ServerItemRenderer
324
324
  const qScore = this.questionRenderer.scoreWidgets();
325
325
  const qGuess = this.questionRenderer.getUserInputForWidgets();
326
326
  const state = this.questionRenderer.getSerializedState();
327
- // @ts-expect-error [FEI-5003] - TS2322 - Type 'Partial<Record<string, KEScore>>' is not assignable to type '{ [key: string]: KEScore; }'. | TS2345 - Argument of type '{ [widgetId: string]: PerseusScore; }' is not assignable to parameter of type 'Partial<Record<string, { type: "invalid"; message?: string | null | undefined; suppressAlmostThere?: boolean | null | undefined; }>>'.
327
+ // @ts-expect-error - TS2322 - Type 'Partial<Record<string, KEScore>>' is not assignable to type '{ [key: string]: KEScore; }'. | TS2345 - Argument of type '{ [widgetId: string]: PerseusScore; }' is not assignable to parameter of type 'Partial<Record<string, { type: "invalid"; message?: string | null | undefined; suppressAlmostThere?: boolean | null | undefined; }>>'.
328
328
  return mapObject(qScore, (score, id) => {
329
329
  return Util.keScoreFromPerseusScore(score, qGuess[id], state);
330
330
  });
@@ -418,7 +418,7 @@ export class ServerItemRenderer
418
418
  <HintsRenderer
419
419
  hints={this.props.item.hints}
420
420
  hintsVisible={this.props.hintsVisible}
421
- // @ts-expect-error [FEI-5003] - TS2769 - No overload matches this call.
421
+ // @ts-expect-error - TS2769 - No overload matches this call.
422
422
  apiOptions={apiOptions}
423
423
  ref={(elem) => (this.hintsRenderer = elem)}
424
424
  />
package/src/sigfigs.ts CHANGED
@@ -434,7 +434,7 @@ function round(mantissa: string, digits: number): string {
434
434
  roundUp = true;
435
435
  }
436
436
  }
437
- // @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.
437
+ // @ts-expect-error - TS2362 - The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.
438
438
  if (lastChar % 2 == 1) {
439
439
  roundUp = true;
440
440
  }
package/src/traversal.ts CHANGED
@@ -100,7 +100,7 @@ const traverseRenderer = function (
100
100
  // should always be renderable. It's also annoying to write
101
101
  // checks for this everywhere, so we just filter them out once and
102
102
  // for all!
103
- // @ts-expect-error [FEI-5003] - TS2571 - Object is of type 'unknown'.
103
+ // @ts-expect-error - TS2571 - Object is of type 'unknown'.
104
104
  if (widgetInfo == null || widgetInfo.type == null) {
105
105
  return widgetInfo;
106
106
  }
package/src/types.ts CHANGED
@@ -1,12 +1,12 @@
1
- import * as React from "react";
2
-
3
1
  import type {SerializedHighlightSet} from "./components/highlighting/types";
4
2
  import type {ILogger} from "./logging/log";
5
3
  import type {Item} from "./multi-items/item-types";
6
4
  import type {PerseusWidget} from "./perseus-types";
7
5
  import type {SizeClass} from "./util/sizing-utils";
6
+ import type {KeypadAPI} from "@khanacademy/math-input";
8
7
  import type {SendEventFn} from "@khanacademy/perseus-core";
9
8
  import type {Result} from "@khanacademy/wonder-blocks-data";
9
+ import type * as React from "react";
10
10
 
11
11
  export type FocusPath = ReadonlyArray<string> | null | undefined;
12
12
 
@@ -187,7 +187,7 @@ export type APIOptions = Readonly<{
187
187
  // It is called with an function that, when called, blurs the input,
188
188
  // and is expected to return an object of the shape
189
189
  // keypadElementPropType from math-input/src/prop-types.js.
190
- nativeKeypadProxy?: () => unknown;
190
+ nativeKeypadProxy?: (blur: () => void) => KeypadAPI;
191
191
  // Indicates whether or not to use mobile styling.
192
192
  isMobile?: boolean;
193
193
  // A function, called with a bool indicating whether use of the
@@ -457,10 +457,10 @@ const KhanAnswerTypes = {
457
457
  text = text.replace(/[ \(\)]/g, "");
458
458
 
459
459
  if ((match = text.match(/^log\s*(\S+)\s*$/i))) {
460
- // @ts-expect-error [FEI-5003] - TS2322 - Type '{ value: number | undefined; exact: boolean; }[]' is not assignable to type 'never[]'.
460
+ // @ts-expect-error - TS2322 - Type '{ value: number | undefined; exact: boolean; }[]' is not assignable to type 'never[]'.
461
461
  possibilities = forms.decimal(match[1]);
462
462
  } else if (text === "0") {
463
- // @ts-expect-error [FEI-5003] - TS2322 - Type 'number' is not assignable to type 'never'. | TS2322 - Type 'boolean' is not assignable to type 'never'.
463
+ // @ts-expect-error - TS2322 - Type 'number' is not assignable to type 'never'. | TS2322 - Type 'boolean' is not assignable to type 'never'.
464
464
  possibilities = [{value: 0, exact: true}];
465
465
  }
466
466
  return possibilities;
@@ -480,7 +480,7 @@ const KhanAnswerTypes = {
480
480
  const transformed = forms.decimal(text);
481
481
  $.each(transformed, function (ix, t) {
482
482
  t.exact = hasPercentSign;
483
- // @ts-expect-error [FEI-5003] - TS2532 - Object is possibly 'undefined'.
483
+ // @ts-expect-error - TS2532 - Object is possibly 'undefined'.
484
484
  t.value = t.value / 100;
485
485
  });
486
486
  return transformed;
@@ -674,7 +674,7 @@ const KhanAnswerTypes = {
674
674
  options: any,
675
675
  ): (arg1: Guess) => Score {
676
676
  return KhanAnswerTypes.predicate.createValidatorFunctional(
677
- // @ts-expect-error [FEI-5003] - TS2556 - A spread argument must either have a tuple type or be passed to a rest parameter.
677
+ // @ts-expect-error - TS2556 - A spread argument must either have a tuple type or be passed to a rest parameter.
678
678
  ...KhanAnswerTypes.number.convertToPredicate(
679
679
  correctAnswer,
680
680
  options,
@@ -778,7 +778,7 @@ const KhanAnswerTypes = {
778
778
 
779
779
  // Don't bother parsing an empty input
780
780
  if (!guess) {
781
- // @ts-expect-error [FEI-5003] - TS2540 - Cannot assign to 'empty' because it is a read-only property.
781
+ // @ts-expect-error - TS2540 - Cannot assign to 'empty' because it is a read-only property.
782
782
  score.empty = true;
783
783
  return score;
784
784
  }
@@ -787,7 +787,7 @@ const KhanAnswerTypes = {
787
787
 
788
788
  // An unsuccessful parse doesn't count as wrong
789
789
  if (!answer.parsed) {
790
- // @ts-expect-error [FEI-5003] - TS2540 - Cannot assign to 'empty' because it is a read-only property.
790
+ // @ts-expect-error - TS2540 - Cannot assign to 'empty' because it is a read-only property.
791
791
  score.empty = true;
792
792
  return score;
793
793
  }
@@ -805,7 +805,7 @@ const KhanAnswerTypes = {
805
805
 
806
806
  if (result.equal) {
807
807
  // Correct answer
808
- // @ts-expect-error [FEI-5003] - TS2540 - Cannot assign to 'correct' because it is a read-only property.
808
+ // @ts-expect-error - TS2540 - Cannot assign to 'correct' because it is a read-only property.
809
809
  score.correct = true;
810
810
  } else if (
811
811
  result.wrongVariableNames ||
@@ -816,20 +816,20 @@ const KhanAnswerTypes = {
816
816
  // TODO(aasmund): This should ideally have been handled
817
817
  // under the `result.message` condition, but the
818
818
  // KAS messages currently aren't translatable.
819
- // @ts-expect-error [FEI-5003] - TS2540 - Cannot assign to 'ungraded' because it is a read-only property.
819
+ // @ts-expect-error - TS2540 - Cannot assign to 'ungraded' because it is a read-only property.
820
820
  score.ungraded = true;
821
- // @ts-expect-error [FEI-5003] - TS2540 - Cannot assign to 'message' because it is a read-only property.
821
+ // @ts-expect-error - TS2540 - Cannot assign to 'message' because it is a read-only property.
822
822
  score.message = result.wrongVariableCase
823
823
  ? errors.WRONG_CASE_ERROR
824
824
  : errors.WRONG_LETTER_ERROR;
825
825
  // Don't tell the use they're "almost there" in this case, that may not be true and isn't helpful.
826
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'suppressAlmostThere' does not exist on type '{ readonly empty: false; readonly correct: false; readonly message: string | null | undefined; readonly guess: any; readonly ungraded: false; }'.
826
+ // @ts-expect-error - TS2339 - Property 'suppressAlmostThere' does not exist on type '{ readonly empty: false; readonly correct: false; readonly message: string | null | undefined; readonly guess: any; readonly ungraded: false; }'.
827
827
  score.suppressAlmostThere = true;
828
828
  } else if (result.message) {
829
829
  // Nearly correct answer
830
830
  // TODO(aasmund): This message also isn't translatable;
831
831
  // need to fix that in KAS
832
- // @ts-expect-error [FEI-5003] - TS2540 - Cannot assign to 'message' because it is a read-only property.
832
+ // @ts-expect-error - TS2540 - Cannot assign to 'message' because it is a read-only property.
833
833
  score.message = result.message;
834
834
  } else {
835
835
  // Replace x with * and see if it would have been correct
@@ -851,13 +851,13 @@ const KhanAnswerTypes = {
851
851
  options,
852
852
  );
853
853
  if (resultX.equal) {
854
- // @ts-expect-error [FEI-5003] - TS2540 - Cannot assign to 'ungraded' because it is a read-only property.
854
+ // @ts-expect-error - TS2540 - Cannot assign to 'ungraded' because it is a read-only property.
855
855
  score.ungraded = true;
856
- // @ts-expect-error [FEI-5003] - TS2540 - Cannot assign to 'message' because it is a read-only property.
856
+ // @ts-expect-error - TS2540 - Cannot assign to 'message' because it is a read-only property.
857
857
  score.message = errors.MULTIPLICATION_SIGN_ERROR;
858
858
  } else if (resultX.message) {
859
859
  // TODO(aasmund): I18nize `score.message`
860
- // @ts-expect-error [FEI-5003] - TS2540 - Cannot assign to 'message' because it is a read-only property.
860
+ // @ts-expect-error - TS2540 - Cannot assign to 'message' because it is a read-only property.
861
861
  score.message =
862
862
  resultX.message +
863
863
  " Also, I'm a computer. I only understand " +
@@ -88,7 +88,7 @@ export function magnitude(v: ReadonlyArray<Coord>): number {
88
88
  _.reduce(
89
89
  v,
90
90
  function (memo, el) {
91
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'Coord' is not assignable to parameter of type 'number'.
91
+ // @ts-expect-error - TS2345 - Argument of type 'Coord' is not assignable to parameter of type 'number'.
92
92
  return memo + Math.pow(el, 2);
93
93
  },
94
94
  0,
@@ -109,7 +109,7 @@ function dotProduct(a: Coord, b: Coord): number {
109
109
  function sideLengths(coords: ReadonlyArray<Coord>): ReadonlyArray<number> {
110
110
  const segments = _.zip(coords, rotate(coords));
111
111
  return segments.map(function (segment) {
112
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'number[]' is not assignable to parameter of type 'readonly Coord[]'. | TS2556 - A spread argument must either have a tuple type or be passed to a rest parameter.
112
+ // @ts-expect-error - TS2345 - Argument of type 'number[]' is not assignable to parameter of type 'readonly Coord[]'. | TS2556 - A spread argument must either have a tuple type or be passed to a rest parameter.
113
113
  return magnitude(vector(...segment));
114
114
  });
115
115
  }
@@ -123,9 +123,9 @@ export function angleMeasures(
123
123
  const offsets = _.map(triplets, function (triplet) {
124
124
  const p = vector(triplet[1], triplet[0]);
125
125
  const q = vector(triplet[2], triplet[1]);
126
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'number[]' is not assignable to parameter of type 'Coord'. | TS2345 - Argument of type 'number[]' is not assignable to parameter of type 'readonly Coord[]'. | TS2345 - Argument of type 'number[]' is not assignable to parameter of type 'readonly Coord[]'.
126
+ // @ts-expect-error - TS2345 - Argument of type 'number[]' is not assignable to parameter of type 'Coord'. | TS2345 - Argument of type 'number[]' is not assignable to parameter of type 'readonly Coord[]'. | TS2345 - Argument of type 'number[]' is not assignable to parameter of type 'readonly Coord[]'.
127
127
  const raw = Math.acos(dotProduct(p, q) / (magnitude(p) * magnitude(q)));
128
- // @ts-expect-error [FEI-5003] - TS2556 - A spread argument must either have a tuple type or be passed to a rest parameter.
128
+ // @ts-expect-error - TS2556 - A spread argument must either have a tuple type or be passed to a rest parameter.
129
129
  return sign(ccw(...triplet)) > 0 ? raw : -raw;
130
130
  });
131
131
 
@@ -170,13 +170,13 @@ export function similar(
170
170
  sides.reverse();
171
171
  // Since sides are calculated from two coordinates,
172
172
  // simply reversing results in an off by one error
173
- // @ts-expect-error [FEI-5003] - TS4104 - The type 'readonly number[]' is 'readonly' and cannot be assigned to the mutable type 'number[]'.
173
+ // @ts-expect-error - TS4104 - The type 'readonly number[]' is 'readonly' and cannot be assigned to the mutable type 'number[]'.
174
174
  sides = rotate(sides, 1);
175
175
  }
176
176
 
177
- // @ts-expect-error [FEI-5003] - TS4104 - The type 'readonly number[]' is 'readonly' and cannot be assigned to the mutable type 'number[]'.
177
+ // @ts-expect-error - TS4104 - The type 'readonly number[]' is 'readonly' and cannot be assigned to the mutable type 'number[]'.
178
178
  angles = rotate(angles, i);
179
- // @ts-expect-error [FEI-5003] - TS4104 - The type 'readonly number[]' is 'readonly' and cannot be assigned to the mutable type 'number[]'.
179
+ // @ts-expect-error - TS4104 - The type 'readonly number[]' is 'readonly' and cannot be assigned to the mutable type 'number[]'.
180
180
  sides = rotate(sides, i);
181
181
 
182
182
  if (deepEq(angles1, angles)) {