@khanacademy/perseus 7.2.1 → 9.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 (390) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/dist/article-renderer.d.ts +27 -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/dependencies.d.ts +7 -1
  7. package/dist/es/index.js +1205 -1218
  8. package/dist/es/index.js.map +1 -1
  9. package/dist/hints-renderer.d.ts +1 -1
  10. package/dist/index.js +1207 -1221
  11. package/dist/index.js.map +1 -1
  12. package/dist/interaction-tracker.d.ts +3 -3
  13. package/dist/item-renderer.d.ts +2 -1
  14. package/dist/mixins/provide-keypad.d.ts +15 -12
  15. package/dist/multi-items/multi-renderer.d.ts +2 -1
  16. package/dist/perseus-api.d.ts +2 -2
  17. package/dist/renderer.d.ts +1 -1
  18. package/dist/server-item-renderer.d.ts +3 -1
  19. package/dist/types.d.ts +32 -11
  20. package/dist/widgets/expression.d.ts +410 -13
  21. package/dist/widgets/graded-group.d.ts +3 -3
  22. package/dist/widgets/interactive-graph.d.ts +1 -1
  23. package/dist/widgets/sequence.d.ts +3 -3
  24. package/dist/widgets/table.d.ts +8 -1
  25. package/dist/widgets.d.ts +1 -1
  26. package/package.json +34 -34
  27. package/src/__stories__/article-renderer.stories.tsx +35 -2
  28. package/src/__testdata__/article-renderer.testdata.ts +74 -1
  29. package/src/__testdata__/item-renderer.testdata.ts +1 -1
  30. package/src/__testdata__/renderer.testdata.ts +1 -1
  31. package/src/__tests__/item-renderer.test.tsx +13 -2
  32. package/src/__tests__/mock-asset-loading-widget.tsx +1 -1
  33. package/src/__tests__/perseus-markdown.test.ts +17 -17
  34. package/src/__tests__/renderer-api.test.tsx +21 -21
  35. package/src/__tests__/renderer.test.tsx +13 -13
  36. package/src/__tests__/server-item-renderer.test.tsx +12 -4
  37. package/src/__tests__/tex-wrangler.test.ts +1 -1
  38. package/src/article-renderer.tsx +75 -66
  39. package/src/components/__tests__/number-input.test.tsx +4 -4
  40. package/src/components/__tests__/sortable.test.tsx +2 -2
  41. package/src/components/fixed-to-responsive.tsx +1 -1
  42. package/src/components/graph.tsx +11 -11
  43. package/src/components/graphie-classes.ts +7 -7
  44. package/src/components/graphie.tsx +14 -14
  45. package/src/components/highlighting/highlightable-content.tsx +1 -1
  46. package/src/components/highlighting/ui/highlight-renderer.tsx +1 -1
  47. package/src/components/highlighting/ui/util.ts +2 -2
  48. package/src/components/highlighting/word-indexer.tsx +4 -4
  49. package/src/components/icon.tsx +1 -1
  50. package/src/components/image-loader.tsx +4 -4
  51. package/src/components/input-with-examples.tsx +2 -2
  52. package/src/components/lint.tsx +1 -1
  53. package/src/components/math-input.tsx +5 -5
  54. package/src/components/math-output.tsx +1 -1
  55. package/src/components/multi-button-group.tsx +1 -1
  56. package/src/components/number-input.tsx +10 -10
  57. package/src/components/prop-check-box.tsx +1 -1
  58. package/src/components/simple-keypad-input.tsx +4 -4
  59. package/src/components/sortable.tsx +42 -41
  60. package/src/components/svg-image.tsx +12 -12
  61. package/src/components/tex-buttons.tsx +4 -3
  62. package/src/components/text-input.tsx +8 -8
  63. package/src/components/text-list-editor.tsx +11 -11
  64. package/src/components/visibility-observer/create-visibility-observer.ts +1 -1
  65. package/src/components/visibility-observer/visibility-observer.tsx +2 -2
  66. package/src/components/zoomable-tex.tsx +3 -3
  67. package/src/components/zoomable.tsx +8 -8
  68. package/src/dependencies.ts +16 -1
  69. package/src/hint-renderer.tsx +3 -3
  70. package/src/hints-renderer.tsx +11 -11
  71. package/src/init.ts +1 -1
  72. package/src/interaction-tracker.ts +7 -7
  73. package/src/interactive2/__tests__/movable-point.test.ts +1 -1
  74. package/src/interactive2/interactive-util.ts +6 -6
  75. package/src/interactive2/movable-helper-methods.ts +2 -2
  76. package/src/interactive2/movable-line-options.ts +37 -37
  77. package/src/interactive2/movable-line.ts +2 -2
  78. package/src/interactive2/movable-point-options.ts +29 -29
  79. package/src/interactive2/movable-point.tsx +2 -2
  80. package/src/interactive2/movable-polygon-options.ts +45 -45
  81. package/src/interactive2/movable-polygon.ts +2 -2
  82. package/src/interactive2/movable.ts +2 -2
  83. package/src/interactive2/objective_.ts +1 -1
  84. package/src/interactive2/wrapped-defaults.ts +2 -2
  85. package/src/interactive2/wrapped-ellipse.ts +9 -9
  86. package/src/interactive2/wrapped-line.ts +8 -8
  87. package/src/interactive2/wrapped-path.ts +5 -5
  88. package/src/item-renderer.tsx +66 -48
  89. package/src/mixins/changeable.ts +2 -2
  90. package/src/mixins/editor-jsonify.ts +1 -1
  91. package/src/mixins/provide-keypad.tsx +23 -37
  92. package/src/mixins/widget-jsonify-deprecated.ts +1 -1
  93. package/src/multi-items/__tests__/items.test.ts +1 -1
  94. package/src/multi-items/__tests__/multi-renderer.test.tsx +13 -8
  95. package/src/multi-items/__tests__/trees.test.ts +12 -12
  96. package/src/multi-items/item-types.ts +2 -2
  97. package/src/multi-items/items.ts +1 -1
  98. package/src/multi-items/multi-renderer.tsx +30 -18
  99. package/src/multi-items/prop-type-builders.ts +2 -2
  100. package/src/multi-items/tree-types.ts +4 -4
  101. package/src/multi-items/trees.ts +16 -16
  102. package/src/perseus-env.ts +2 -2
  103. package/src/perseus-markdown.tsx +5 -5
  104. package/src/renderer.tsx +39 -39
  105. package/src/server-item-renderer.tsx +26 -21
  106. package/src/sigfigs.ts +1 -1
  107. package/src/traversal.ts +1 -1
  108. package/src/types.ts +52 -16
  109. package/src/util/answer-types.ts +14 -14
  110. package/src/util/geometry.ts +7 -7
  111. package/src/util/graphie.ts +32 -32
  112. package/src/util/interactive.ts +118 -118
  113. package/src/util/math.ts +4 -4
  114. package/src/util/react-render.tsx +1 -1
  115. package/src/util/scroll-utils.ts +2 -2
  116. package/src/util/tex.ts +3 -3
  117. package/src/util.ts +15 -15
  118. package/src/widget-container.tsx +1 -1
  119. package/src/widgets/__stories__/definition.stories.tsx +8 -1
  120. package/src/widgets/__stories__/expression.stories.tsx +2 -2
  121. package/src/widgets/__stories__/test-keypad-context-wrapper.tsx +3 -3
  122. package/src/widgets/__testdata__/numeric-input.testdata.ts +1 -1
  123. package/src/widgets/__tests__/__snapshots__/video.test.ts.snap +2 -2
  124. package/src/widgets/__tests__/{expression.test.ts → expression.test.tsx} +77 -11
  125. package/src/widgets/__tests__/grapher.cypress.ts +32 -32
  126. package/src/widgets/__tests__/group.test.tsx +1 -1
  127. package/src/widgets/__tests__/interactive-graph.cypress.ts +40 -40
  128. package/src/widgets/__tests__/interactive-graph.test.ts +1 -1
  129. package/src/widgets/__tests__/numeric-input.test.ts +1 -1
  130. package/src/widgets/__tests__/passage.test.tsx +2 -2
  131. package/src/widgets/__tests__/plotter.test.tsx +2 -1
  132. package/src/widgets/__tests__/radio/base-radio.test.tsx +7 -7
  133. package/src/widgets/__tests__/renderQuestion.tsx +29 -21
  134. package/src/widgets/categorizer.tsx +4 -4
  135. package/src/widgets/cs-program.tsx +2 -2
  136. package/src/widgets/dropdown.tsx +1 -1
  137. package/src/widgets/expression.tsx +92 -57
  138. package/src/widgets/graded-group-set.tsx +5 -5
  139. package/src/widgets/graded-group.tsx +29 -21
  140. package/src/widgets/grapher/util.tsx +6 -6
  141. package/src/widgets/grapher.tsx +10 -10
  142. package/src/widgets/group.tsx +3 -3
  143. package/src/widgets/iframe.tsx +2 -2
  144. package/src/widgets/image.tsx +1 -1
  145. package/src/widgets/input-number.tsx +4 -4
  146. package/src/widgets/interaction.tsx +77 -77
  147. package/src/widgets/interactive-graph.tsx +109 -107
  148. package/src/widgets/label-image/marker.tsx +2 -2
  149. package/src/widgets/label-image.test.ts +1 -1
  150. package/src/widgets/label-image.tsx +7 -7
  151. package/src/widgets/lights-puzzle.tsx +2 -2
  152. package/src/widgets/matcher.tsx +6 -6
  153. package/src/widgets/matrix.tsx +20 -20
  154. package/src/widgets/measurer.tsx +3 -3
  155. package/src/widgets/molecule/__tests__/layout.test.ts +4 -4
  156. package/src/widgets/molecule/__tests__/parser.test.ts +14 -14
  157. package/src/widgets/molecule/smiles-parser.ts +3 -3
  158. package/src/widgets/molecule.tsx +4 -4
  159. package/src/widgets/number-line.tsx +11 -11
  160. package/src/widgets/numeric-input.tsx +11 -11
  161. package/src/widgets/orderer.tsx +38 -38
  162. package/src/widgets/passage/__tests__/passage-markdown.test.ts +1 -1
  163. package/src/widgets/passage/passage-markdown.tsx +4 -4
  164. package/src/widgets/passage-ref-target.tsx +1 -1
  165. package/src/widgets/passage-ref.tsx +4 -6
  166. package/src/widgets/passage.tsx +11 -11
  167. package/src/widgets/plotter.tsx +9 -9
  168. package/src/widgets/radio/base-radio.tsx +11 -11
  169. package/src/widgets/radio/choice-icon/choice-icon.tsx +2 -2
  170. package/src/widgets/radio/choice.tsx +1 -1
  171. package/src/widgets/radio/option-status.tsx +1 -1
  172. package/src/widgets/radio/widget.tsx +6 -6
  173. package/src/widgets/radio.ts +1 -1
  174. package/src/widgets/reaction-diagram.tsx +8 -8
  175. package/src/widgets/sequence.tsx +12 -4
  176. package/src/widgets/simulator.tsx +14 -14
  177. package/src/widgets/sorter.tsx +4 -4
  178. package/src/widgets/table.tsx +8 -8
  179. package/src/widgets/transformer.tsx +92 -92
  180. package/src/widgets/unit.tsx +17 -17
  181. package/src/widgets/video-transcript-link.test.tsx +3 -3
  182. package/src/widgets/video-transcript-link.tsx +1 -1
  183. package/src/widgets/video.tsx +1 -1
  184. package/src/widgets.ts +5 -5
  185. package/src/zoom.ts +22 -22
  186. package/tsconfig-build.tsbuildinfo +1 -1
  187. package/dist/a11y.js.flow +0 -11
  188. package/dist/all-widgets.js.flow +0 -33
  189. package/dist/article-renderer.js.flow +0 -73
  190. package/dist/asset-context.js.flow +0 -15
  191. package/dist/basic-widgets.js.flow +0 -33
  192. package/dist/components/button-group.js.flow +0 -33
  193. package/dist/components/constants.js.flow +0 -13
  194. package/dist/components/fixed-to-responsive.js.flow +0 -34
  195. package/dist/components/graph.js.flow +0 -66
  196. package/dist/components/graphie-classes.js.flow +0 -19
  197. package/dist/components/graphie-movables.js.flow +0 -22
  198. package/dist/components/graphie.js.flow +0 -69
  199. package/dist/components/highlighting/highlightable-content.js.flow +0 -56
  200. package/dist/components/highlighting/highlights.js.flow +0 -54
  201. package/dist/components/highlighting/ranges.js.flow +0 -60
  202. package/dist/components/highlighting/types.js.flow +0 -70
  203. package/dist/components/highlighting/ui/highlight-renderer.js.flow +0 -43
  204. package/dist/components/highlighting/ui/highlight-set-renderer.js.flow +0 -41
  205. package/dist/components/highlighting/ui/highlight-tooltip.js.flow +0 -22
  206. package/dist/components/highlighting/ui/highlighting-ui.js.flow +0 -30
  207. package/dist/components/highlighting/ui/selection-tracker.js.flow +0 -54
  208. package/dist/components/highlighting/ui/types.js.flow +0 -22
  209. package/dist/components/highlighting/ui/util.js.flow +0 -42
  210. package/dist/components/highlighting/word-indexer.js.flow +0 -21
  211. package/dist/components/hud.js.flow +0 -14
  212. package/dist/components/icon.js.flow +0 -31
  213. package/dist/components/image-loader.js.flow +0 -49
  214. package/dist/components/info-tip/info-tip.js.flow +0 -20
  215. package/dist/components/info-tip.js.flow +0 -18
  216. package/dist/components/inline-icon.js.flow +0 -39
  217. package/dist/components/input-with-examples.js.flow +0 -58
  218. package/dist/components/lint.js.flow +0 -58
  219. package/dist/components/math-input.js.flow +0 -49
  220. package/dist/components/math-output.js.flow +0 -33
  221. package/dist/components/multi-button-group.js.flow +0 -35
  222. package/dist/components/number-input.js.flow +0 -42
  223. package/dist/components/prop-check-box.js.flow +0 -8
  224. package/dist/components/range-input.js.flow +0 -20
  225. package/dist/components/simple-keypad-input.js.flow +0 -16
  226. package/dist/components/sortable.js.flow +0 -91
  227. package/dist/components/stub-tag-editor.js.flow +0 -18
  228. package/dist/components/svg-image.js.flow +0 -85
  229. package/dist/components/tex-buttons.js.flow +0 -26
  230. package/dist/components/tex.js.flow +0 -25
  231. package/dist/components/text-input.js.flow +0 -39
  232. package/dist/components/text-list-editor.js.flow +0 -22
  233. package/dist/components/tooltip.js.flow +0 -51
  234. package/dist/components/visibility-observer/create-visibility-observer.js.flow +0 -23
  235. package/dist/components/visibility-observer/get-scroll-parent.js.flow +0 -7
  236. package/dist/components/visibility-observer/visibility-observer.js.flow +0 -36
  237. package/dist/components/zoomable-tex.js.flow +0 -18
  238. package/dist/components/zoomable.js.flow +0 -70
  239. package/dist/components.js.flow +0 -22
  240. package/dist/definition-context.js.flow +0 -25
  241. package/dist/dependencies.js.flow +0 -9
  242. package/dist/error-boundary.js.flow +0 -19
  243. package/dist/extra-widgets.js.flow +0 -33
  244. package/dist/hint-renderer.js.flow +0 -32
  245. package/dist/hints-renderer.js.flow +0 -41
  246. package/dist/icon-paths.js.flow +0 -123
  247. package/dist/index.js.flow +0 -134
  248. package/dist/init.js.flow +0 -20
  249. package/dist/interaction-tracker.js.flow +0 -35
  250. package/dist/interactive2/interactive-util.js.flow +0 -50
  251. package/dist/interactive2/movable-helper-methods.js.flow +0 -15
  252. package/dist/interactive2/movable-line-options.js.flow +0 -44
  253. package/dist/interactive2/movable-line.js.flow +0 -8
  254. package/dist/interactive2/movable-point-options.js.flow +0 -44
  255. package/dist/interactive2/movable-point.js.flow +0 -8
  256. package/dist/interactive2/movable-polygon-options.js.flow +0 -47
  257. package/dist/interactive2/movable-polygon.js.flow +0 -8
  258. package/dist/interactive2/movable.js.flow +0 -8
  259. package/dist/interactive2/objective_.js.flow +0 -25
  260. package/dist/interactive2/types.js.flow +0 -8
  261. package/dist/interactive2/wrapped-defaults.js.flow +0 -11
  262. package/dist/interactive2/wrapped-ellipse.js.flow +0 -14
  263. package/dist/interactive2/wrapped-line.js.flow +0 -14
  264. package/dist/interactive2/wrapped-path.js.flow +0 -13
  265. package/dist/interactive2.js.flow +0 -16
  266. package/dist/item-renderer.js.flow +0 -132
  267. package/dist/item-version.js.flow +0 -11
  268. package/dist/jipt-paragraphs.js.flow +0 -14
  269. package/dist/loading-context.js.flow +0 -12
  270. package/dist/logging/log.js.flow +0 -62
  271. package/dist/mixins/changeable.js.flow +0 -33
  272. package/dist/mixins/editor-jsonify.js.flow +0 -10
  273. package/dist/mixins/provide-keypad.js.flow +0 -33
  274. package/dist/mixins/widget-jsonify-deprecated.js.flow +0 -11
  275. package/dist/mixins/widget-prop-denylist.js.flow +0 -20
  276. package/dist/multi-items/item-types.js.flow +0 -55
  277. package/dist/multi-items/items.js.flow +0 -66
  278. package/dist/multi-items/multi-renderer.js.flow +0 -213
  279. package/dist/multi-items/prop-type-builders.js.flow +0 -22
  280. package/dist/multi-items/shape-types.js.flow +0 -60
  281. package/dist/multi-items/shapes.js.flow +0 -25
  282. package/dist/multi-items/tree-types.js.flow +0 -45
  283. package/dist/multi-items/trees.js.flow +0 -147
  284. package/dist/multi-items.js.flow +0 -36
  285. package/dist/perseus-api.js.flow +0 -151
  286. package/dist/perseus-env.js.flow +0 -6
  287. package/dist/perseus-error.js.flow +0 -16
  288. package/dist/perseus-markdown.js.flow +0 -20
  289. package/dist/perseus-types.js.flow +0 -1041
  290. package/dist/question-paragraph.js.flow +0 -17
  291. package/dist/renderability.js.flow +0 -19
  292. package/dist/renderer.js.flow +0 -325
  293. package/dist/server-item-renderer.js.flow +0 -132
  294. package/dist/sigfigs.js.flow +0 -41
  295. package/dist/styles/constants.js.flow +0 -62
  296. package/dist/styles/global-constants.js.flow +0 -348
  297. package/dist/styles/global-styles.js.flow +0 -53
  298. package/dist/styles/media-queries.js.flow +0 -35
  299. package/dist/styles/shared.js.flow +0 -8
  300. package/dist/tex-wrangler.js.flow +0 -13
  301. package/dist/translation-linter.js.flow +0 -32
  302. package/dist/traversal.js.flow +0 -26
  303. package/dist/types.js.flow +0 -318
  304. package/dist/util/a11y.js.flow +0 -8
  305. package/dist/util/answer-types.js.flow +0 -49
  306. package/dist/util/colors.js.flow +0 -95
  307. package/dist/util/fix-passage-refs.js.flow +0 -8
  308. package/dist/util/geometry.js.flow +0 -37
  309. package/dist/util/graph-utils.js.flow +0 -9
  310. package/dist/util/graphie.js.flow +0 -8
  311. package/dist/util/interactive.js.flow +0 -11
  312. package/dist/util/katex-preprocess.js.flow +0 -12
  313. package/dist/util/math.js.flow +0 -62
  314. package/dist/util/mobile-native-utils.js.flow +0 -12
  315. package/dist/util/react-render.js.flow +0 -12
  316. package/dist/util/register-all-widgets-for-testing.js.flow +0 -7
  317. package/dist/util/scroll-utils.js.flow +0 -19
  318. package/dist/util/sizing-utils.js.flow +0 -20
  319. package/dist/util/tex.js.flow +0 -17
  320. package/dist/util/url-utils.js.flow +0 -11
  321. package/dist/util.graphie.js.flow +0 -14
  322. package/dist/util.js.flow +0 -319
  323. package/dist/version.js.flow +0 -17
  324. package/dist/widget-container.js.flow +0 -33
  325. package/dist/widgets/categorizer.js.flow +0 -70
  326. package/dist/widgets/cs-program.js.flow +0 -54
  327. package/dist/widgets/definition.js.flow +0 -57
  328. package/dist/widgets/dropdown.js.flow +0 -63
  329. package/dist/widgets/explanation.js.flow +0 -58
  330. package/dist/widgets/expression.js.flow +0 -116
  331. package/dist/widgets/graded-group-answer-bar.js.flow +0 -24
  332. package/dist/widgets/graded-group-set.js.flow +0 -65
  333. package/dist/widgets/graded-group.js.flow +0 -78
  334. package/dist/widgets/grapher/util.js.flow +0 -38
  335. package/dist/widgets/grapher.js.flow +0 -102
  336. package/dist/widgets/group.js.flow +0 -60
  337. package/dist/widgets/iframe.js.flow +0 -53
  338. package/dist/widgets/image.js.flow +0 -73
  339. package/dist/widgets/input-number.js.flow +0 -94
  340. package/dist/widgets/interaction/arrow-picker.js.flow +0 -21
  341. package/dist/widgets/interaction/color-picker.js.flow +0 -23
  342. package/dist/widgets/interaction/dash-picker.js.flow +0 -21
  343. package/dist/widgets/interaction/element-container.js.flow +0 -28
  344. package/dist/widgets/interaction.js.flow +0 -60
  345. package/dist/widgets/interactive-graph.js.flow +0 -239
  346. package/dist/widgets/label-image/answer-choices.js.flow +0 -55
  347. package/dist/widgets/label-image/marker.js.flow +0 -31
  348. package/dist/widgets/label-image/types.js.flow +0 -23
  349. package/dist/widgets/label-image.js.flow +0 -142
  350. package/dist/widgets/lights-puzzle.js.flow +0 -58
  351. package/dist/widgets/matcher.js.flow +0 -106
  352. package/dist/widgets/matrix.js.flow +0 -80
  353. package/dist/widgets/measurer.js.flow +0 -30
  354. package/dist/widgets/molecule/molecule-drawing.js.flow +0 -11
  355. package/dist/widgets/molecule/molecule-layout.js.flow +0 -96
  356. package/dist/widgets/molecule/smiles-parser.js.flow +0 -26
  357. package/dist/widgets/molecule.js.flow +0 -60
  358. package/dist/widgets/number-line.js.flow +0 -102
  359. package/dist/widgets/numeric-input.js.flow +0 -105
  360. package/dist/widgets/orderer.js.flow +0 -81
  361. package/dist/widgets/passage/passage-markdown.js.flow +0 -33
  362. package/dist/widgets/passage-ref-target.js.flow +0 -52
  363. package/dist/widgets/passage-ref.js.flow +0 -85
  364. package/dist/widgets/passage.js.flow +0 -157
  365. package/dist/widgets/plotter.js.flow +0 -112
  366. package/dist/widgets/radio/base-radio.js.flow +0 -50
  367. package/dist/widgets/radio/choice-a11y-text.js.flow +0 -14
  368. package/dist/widgets/radio/choice-icon/choice-icon.js.flow +0 -22
  369. package/dist/widgets/radio/choice-icon/cross-out-line.js.flow +0 -16
  370. package/dist/widgets/radio/choice-icon/shared-styles.js.flow +0 -11
  371. package/dist/widgets/radio/choice-none-above.js.flow +0 -16
  372. package/dist/widgets/radio/choice.js.flow +0 -29
  373. package/dist/widgets/radio/choice.jsx.fixture.js.flow +0 -7
  374. package/dist/widgets/radio/focus-ring.js.flow +0 -22
  375. package/dist/widgets/radio/option-status.js.flow +0 -16
  376. package/dist/widgets/radio/util.js.flow +0 -12
  377. package/dist/widgets/radio/widget.js.flow +0 -80
  378. package/dist/widgets/radio.js.flow +0 -31
  379. package/dist/widgets/reaction-diagram.js.flow +0 -46
  380. package/dist/widgets/sequence.js.flow +0 -53
  381. package/dist/widgets/simulator.js.flow +0 -107
  382. package/dist/widgets/sorter.js.flow +0 -102
  383. package/dist/widgets/table.js.flow +0 -67
  384. package/dist/widgets/transformer.js.flow +0 -127
  385. package/dist/widgets/unit.js.flow +0 -93
  386. package/dist/widgets/video-transcript-link.js.flow +0 -15
  387. package/dist/widgets/video.js.flow +0 -57
  388. package/dist/widgets.js.flow +0 -108
  389. package/dist/zoom.js.flow +0 -7
  390. package/src/multi-items/item-types.js.flow +0 -55
@@ -6,6 +6,7 @@ import * as React from "react";
6
6
  import * as ReactDOM from "react-dom";
7
7
  import _ from "underscore";
8
8
 
9
+ import {DependenciesContext} from "./dependencies";
9
10
  import HintsRenderer from "./hints-renderer";
10
11
  import Objective from "./interactive2/objective_";
11
12
  import ProvideKeypad from "./mixins/provide-keypad";
@@ -16,7 +17,12 @@ import reactRender from "./util/react-render";
16
17
 
17
18
  import type {KeypadProps} from "./mixins/provide-keypad";
18
19
  import type {PerseusItem} from "./perseus-types";
19
- import type {APIOptions, FocusPath, LinterContextProps} from "./types";
20
+ import type {
21
+ APIOptions,
22
+ FocusPath,
23
+ LinterContextProps,
24
+ PerseusDependenciesV2,
25
+ } from "./types";
20
26
  import type {KEScore} from "@khanacademy/perseus-core";
21
27
 
22
28
  const {mapObject} = Objective;
@@ -46,6 +52,8 @@ type Props = // These props are used by the ProvideKeypad mixin.
46
52
  savedState: any;
47
53
  linterContext: LinterContextProps;
48
54
  legacyPerseusLint?: ReadonlyArray<string>;
55
+
56
+ dependencies: PerseusDependenciesV2;
49
57
  };
50
58
 
51
59
  type DefaultProps = {
@@ -73,7 +81,7 @@ type SerializedState = {
73
81
  };
74
82
 
75
83
  class ItemRenderer extends React.Component<Props, State> {
76
- // @ts-expect-error [FEI-5003] - TS2564 - Property 'questionRenderer' has no initializer and is not definitely assigned in the constructor.
84
+ // @ts-expect-error - TS2564 - Property 'questionRenderer' has no initializer and is not definitely assigned in the constructor.
77
85
  questionRenderer: Renderer;
78
86
  hintsRenderer: React.ElementRef<typeof HintsRenderer> | null | undefined;
79
87
  _currentFocus: FocusPath;
@@ -176,54 +184,60 @@ class ItemRenderer extends React.Component<Props, State> {
176
184
  // strangeness instead of relying on React's normal render() method.
177
185
  // TODO(alpert): Figure out how to clean this up somehow
178
186
  reactRender(
179
- <Renderer
180
- ref={(node) => {
181
- if (!node) {
182
- return;
183
- }
184
- this.questionRenderer = node;
185
-
186
- // NOTE(jeremy): Why don't we just pass this into the
187
- // renderer as a prop?
188
- const {answerableCallback} = apiOptions;
189
- if (answerableCallback) {
190
- const isAnswerable =
191
- this.questionRenderer.emptyWidgets().length === 0;
192
- answerableCallback(isAnswerable);
193
- }
194
- }}
195
- keypadElement={this.keypadElement()}
196
- problemNum={this.props.problemNum}
197
- onInteractWithWidget={this.handleInteractWithWidget}
198
- highlightedWidgets={this.state.questionHighlightedWidgets}
199
- apiOptions={apiOptions}
200
- questionCompleted={this.state.questionCompleted}
201
- reviewMode={this.props.reviewMode}
202
- savedState={this.props.savedState}
203
- linterContext={PerseusLinter.pushContextStack(
204
- this.props.linterContext,
205
- "question",
206
- )}
207
- {...this.props.item.question}
208
- legacyPerseusLint={this.props.legacyPerseusLint}
209
- />,
210
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'Element' is not assignable to parameter of type 'HTMLElement'.
187
+ <DependenciesContext.Provider value={this.props.dependencies}>
188
+ <Renderer
189
+ ref={(node) => {
190
+ if (!node) {
191
+ return;
192
+ }
193
+ this.questionRenderer = node;
194
+
195
+ // NOTE(jeremy): Why don't we just pass this into the
196
+ // renderer as a prop?
197
+ const {answerableCallback} = apiOptions;
198
+ if (answerableCallback) {
199
+ const isAnswerable =
200
+ this.questionRenderer.emptyWidgets().length ===
201
+ 0;
202
+ answerableCallback(isAnswerable);
203
+ }
204
+ }}
205
+ keypadElement={this.keypadElement()}
206
+ problemNum={this.props.problemNum}
207
+ onInteractWithWidget={this.handleInteractWithWidget}
208
+ highlightedWidgets={this.state.questionHighlightedWidgets}
209
+ apiOptions={apiOptions}
210
+ questionCompleted={this.state.questionCompleted}
211
+ reviewMode={this.props.reviewMode}
212
+ savedState={this.props.savedState}
213
+ linterContext={PerseusLinter.pushContextStack(
214
+ this.props.linterContext,
215
+ "question",
216
+ )}
217
+ {...this.props.item.question}
218
+ legacyPerseusLint={this.props.legacyPerseusLint}
219
+ />
220
+ </DependenciesContext.Provider>,
221
+ // @ts-expect-error - TS2345 - Argument of type 'Element' is not assignable to parameter of type 'HTMLElement'.
211
222
  workArea,
212
223
  );
213
224
 
214
225
  reactRender(
215
- <HintsRenderer
216
- ref={(node) => (this.hintsRenderer = node)}
217
- hints={this.props.item.hints}
218
- hintsVisible={this.state.hintsVisible}
219
- // @ts-expect-error [FEI-5003] - TS2769 - No overload matches this call.
220
- apiOptions={apiOptions}
221
- linterContext={PerseusLinter.pushContextStack(
222
- this.props.linterContext,
223
- "hints",
224
- )}
225
- />,
226
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'Element' is not assignable to parameter of type 'HTMLElement'.
226
+ <DependenciesContext.Provider value={this.props.dependencies}>
227
+ <HintsRenderer
228
+ ref={(node) => (this.hintsRenderer = node)}
229
+ hints={this.props.item.hints}
230
+ hintsVisible={this.state.hintsVisible}
231
+ // @ts-expect-error - TS2769 - No overload matches this call.
232
+ apiOptions={apiOptions}
233
+ linterContext={PerseusLinter.pushContextStack(
234
+ this.props.linterContext,
235
+ "hints",
236
+ )}
237
+ />
238
+ </DependenciesContext.Provider>,
239
+
240
+ // @ts-expect-error - TS2345 - Argument of type 'Element' is not assignable to parameter of type 'HTMLElement'.
227
241
  hintsArea,
228
242
  );
229
243
 
@@ -460,7 +474,7 @@ class ItemRenderer extends React.Component<Props, State> {
460
474
  const qScore = this.questionRenderer.scoreWidgets();
461
475
  const qGuess = this.questionRenderer.getUserInputForWidgets();
462
476
  const state = this.questionRenderer.getSerializedState();
463
- // @ts-expect-error [FEI-5003] - TS2322 - Type 'Partial<Record<string, KEScore>>' is not assignable to type '{ [id: 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; }>>'.
477
+ // @ts-expect-error - TS2322 - Type 'Partial<Record<string, KEScore>>' is not assignable to type '{ [id: 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; }>>'.
464
478
  return mapObject(qScore, (score, id) => {
465
479
  return Util.keScoreFromPerseusScore(score, qGuess[id], state[id]);
466
480
  });
@@ -504,7 +518,11 @@ class ItemRenderer extends React.Component<Props, State> {
504
518
  }
505
519
 
506
520
  render(): React.ReactNode {
507
- return <div />;
521
+ return (
522
+ <DependenciesContext.Provider value={this.props.dependencies}>
523
+ <div />
524
+ </DependenciesContext.Provider>
525
+ );
508
526
  }
509
527
  }
510
528
 
@@ -92,7 +92,7 @@ export const change: ChangeFn = function (
92
92
  // Called with an object of multiple props to change
93
93
  callback = propValue;
94
94
  return _changeMultiple(
95
- // @ts-expect-error [FEI-5003] - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
95
+ // @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
96
96
  this,
97
97
  newPropsOrSinglePropName, // object newProps
98
98
  callback,
@@ -101,7 +101,7 @@ export const change: ChangeFn = function (
101
101
  if (typeof newPropsOrSinglePropName === "string") {
102
102
  // Called with a string propName of a single prop to change
103
103
  return _changeSingle(
104
- // @ts-expect-error [FEI-5003] - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
104
+ // @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
105
105
  this,
106
106
  newPropsOrSinglePropName, // string propName
107
107
  propValue,
@@ -5,7 +5,7 @@ import WIDGET_PROP_DENYLIST from "./widget-prop-denylist";
5
5
  const EditorJsonify = {
6
6
  serialize: function (): any {
7
7
  // Omit props that get passed to all widgets
8
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'props' does not exist on type '{ readonly serialize: () => any; }'.
8
+ // @ts-expect-error - TS2339 - Property 'props' does not exist on type '{ readonly serialize: () => any; }'.
9
9
  return _.omit(this.props, WIDGET_PROP_DENYLIST);
10
10
  },
11
11
  } as const;
@@ -12,13 +12,13 @@
12
12
  */
13
13
 
14
14
  import {MobileKeypad} from "@khanacademy/math-input";
15
- import PropTypes from "prop-types";
16
15
  import * as React from "react";
17
16
  import ReactDOM from "react-dom";
18
17
 
19
18
  import reactRender from "../util/react-render";
20
19
 
21
20
  import type {APIOptions} from "../types";
21
+ import type {KeypadAPI} from "@khanacademy/math-input";
22
22
  import type {CSSProperties} from "aphrodite";
23
23
 
24
24
  export type KeypadProps = {
@@ -34,48 +34,44 @@ export type KeypadApiOptions = {
34
34
  nativeKeypadProxy: any;
35
35
  };
36
36
 
37
+ // This represents the shape of any component that uses this ProvideKeypad
38
+ // mixin.
39
+ type KeypadMixinHostComponent = {
40
+ _keypadContainer?: HTMLDivElement | null;
41
+ props: {
42
+ apiOptions: APIOptions;
43
+ blur?: () => void;
44
+ };
45
+ state: {
46
+ keypadElement: any | null;
47
+ };
48
+ };
49
+
37
50
  // NOTE: This is not a real component. It's a collection of methods used to
38
51
  // create and manage a Keypad instances.
39
52
  // TODO(LP-10789): replace this with a React Context object to pass information
40
53
  // between Perseus and the Keypad.
41
54
  const ProvideKeypad = {
42
- propTypes: {
43
- apiOptions: PropTypes.shape({
44
- customKeypad: PropTypes.bool,
45
- nativeKeypadProxy: PropTypes.func,
46
- }),
47
- // An Aphrodite style object, to be applied to the keypad container.
48
- // Note that, given our awkward structure of injecting the keypad, this
49
- // style won't be applied or updated dynamically. Rather, it will only
50
- // be applied in `componentDidMount`.
51
- keypadStyle: PropTypes.any,
52
- },
53
-
54
- getInitialState(): {
55
+ getInitialState(this: KeypadMixinHostComponent): {
55
56
  keypadElement: any | null;
56
57
  } {
57
58
  const _this = this;
58
- let keypadElement = null;
59
+ let keypadElement: KeypadAPI | null = null;
59
60
  if (
60
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'props' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
61
61
  _this.props.apiOptions &&
62
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'props' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
63
62
  _this.props.apiOptions.customKeypad &&
64
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'props' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
65
63
  _this.props.apiOptions.nativeKeypadProxy
66
64
  ) {
67
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'props' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
68
65
  keypadElement = _this.props.apiOptions.nativeKeypadProxy(
69
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'blur' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'. | TS2339 - Property 'blur' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
66
+ // @ts-expect-error - TS2339 - Property 'blur' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'. | TS2339 - Property 'blur' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
70
67
  () => _this.blur && _this.blur(),
71
68
  );
72
69
  }
73
70
  return {keypadElement};
74
71
  },
75
72
 
76
- componentDidMount() {
73
+ componentDidMount(this: KeypadMixinHostComponent) {
77
74
  const _this = this;
78
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'props' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
79
75
  const apiOptions: APIOptions = _this.props.apiOptions;
80
76
 
81
77
  if (
@@ -86,9 +82,7 @@ const ProvideKeypad = {
86
82
  // TODO(charlie): Render this and the wrapped component in the same
87
83
  // React tree. We may also want to add this keypad asynchronously
88
84
  // or on-demand in the future.
89
- // @ts-expect-error [FEI-5003] - TS2339 - Property '_keypadContainer' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
90
85
  _this._keypadContainer = document.createElement("div");
91
- // @ts-expect-error [FEI-5003] - TS2339 - Property '_keypadContainer' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
92
86
  document.body?.appendChild(_this._keypadContainer);
93
87
 
94
88
  reactRender(
@@ -97,49 +91,41 @@ const ProvideKeypad = {
97
91
  // NOTE(kevinb): The reason why this setState works is
98
92
  // b/c we're calling it manually from item-renderer.jsx
99
93
  // and we're manually setting the 'this' by using 'call'
100
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'setState' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
94
+ // @ts-expect-error - TS2339 - Property 'setState' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
101
95
  _this.setState({
102
96
  keypadElement: element,
103
97
  });
104
98
  }}
105
99
  onDismiss={() => {
106
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'blur' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'. | TS2339 - Property 'blur' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
100
+ // @ts-expect-error - TS2339 - Property 'blur' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'. | TS2339 - Property 'blur' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
107
101
  _this.blur && _this.blur();
108
102
  }}
109
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'props' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
103
+ // @ts-expect-error - TS2339 - Property 'props' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
110
104
  style={_this.props.keypadStyle}
111
105
  useV2Keypad={apiOptions.useV2Keypad}
112
106
  />,
113
- // @ts-expect-error [FEI-5003] - TS2339 - Property '_keypadContainer' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
114
107
  _this._keypadContainer,
115
108
  );
116
109
  }
117
110
  },
118
111
 
119
- componentWillUnmount() {
112
+ componentWillUnmount(this: KeypadMixinHostComponent) {
120
113
  const _this = this;
121
- // @ts-expect-error [FEI-5003] - TS2339 - Property '_keypadContainer' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
122
114
  if (_this._keypadContainer) {
123
- // @ts-expect-error [FEI-5003] - TS2339 - Property '_keypadContainer' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
124
115
  ReactDOM.unmountComponentAtNode(_this._keypadContainer);
125
- // @ts-expect-error [FEI-5003] - TS2339 - Property '_keypadContainer' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
126
116
  if (_this._keypadContainer.parentNode) {
127
117
  // Note ChildNode.remove() isn't available in older Android
128
118
  // webviews.
129
- // @ts-expect-error [FEI-5003] - TS2339 - Property '_keypadContainer' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
130
119
  _this._keypadContainer.parentNode.removeChild(
131
- // @ts-expect-error [FEI-5003] - TS2339 - Property '_keypadContainer' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
132
120
  _this._keypadContainer,
133
121
  );
134
122
  }
135
- // @ts-expect-error [FEI-5003] - TS2339 - Property '_keypadContainer' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
136
123
  _this._keypadContainer = null;
137
124
  }
138
125
  },
139
126
 
140
- keypadElement(): any {
127
+ keypadElement(this: KeypadMixinHostComponent): any {
141
128
  const _this = this;
142
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'state' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
143
129
  return _this.state.keypadElement;
144
130
  },
145
131
  } as const;
@@ -9,7 +9,7 @@ import WIDGET_PROP_DENYLIST from "./widget-prop-denylist";
9
9
  const WidgetJsonifyDeprecated = {
10
10
  getUserInput: function (): any {
11
11
  // Omit props that get passed to all widgets
12
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'props' does not exist on type '{ readonly getUserInput: () => any; readonly getUserInputFromProps: (props: any) => any; }'.
12
+ // @ts-expect-error - TS2339 - Property 'props' does not exist on type '{ readonly getUserInput: () => any; readonly getUserInputFromProps: (props: any) => any; }'.
13
13
  return _.omit(this.props, WIDGET_PROP_DENYLIST);
14
14
  },
15
15
 
@@ -217,7 +217,7 @@ const item: Item = treeToItem({
217
217
  describe("findContentNodesInItem", () => {
218
218
  it("calls the callback for each content node in the item", () => {
219
219
  const contents = [];
220
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'ContentNode' is not assignable to parameter of type 'never'.
220
+ // @ts-expect-error - TS2345 - Argument of type 'ContentNode' is not assignable to parameter of type 'never'.
221
221
  findContentNodesInItem(item, shape, (c) => contents.push(c));
222
222
  contents.sort();
223
223
  expect([
@@ -4,7 +4,10 @@ import userEvent from "@testing-library/user-event";
4
4
  import * as React from "react";
5
5
  import "@testing-library/jest-dom"; // Imports custom mathers
6
6
 
7
- import {testDependencies} from "../../../../../testing/test-dependencies";
7
+ import {
8
+ testDependencies,
9
+ testDependenciesV2,
10
+ } from "../../../../../testing/test-dependencies";
8
11
  import MockWidgetExport from "../../__tests__/mock-widget";
9
12
  import * as Dependencies from "../../dependencies";
10
13
  import {registerAllWidgetsForTesting} from "../../util/register-all-widgets-for-testing";
@@ -50,6 +53,7 @@ const renderSimpleQuestion = (question: Item) => {
50
53
  item={question}
51
54
  shape={simpleQuestionShape}
52
55
  ref={(r) => (renderer = r)}
56
+ dependencies={testDependenciesV2}
53
57
  >
54
58
  {({renderers}) => <SimpleLayout renderers={renderers} />}
55
59
  </MultiRenderer>
@@ -69,7 +73,7 @@ const renderSimpleQuestion = (question: Item) => {
69
73
  const _findWidgets = (
70
74
  renderer: MultiRenderer,
71
75
  filterCriterion: FilterCriterion,
72
- // @ts-expect-error [FEI-5003] - TS2315 - Type 'Tree' is not generic.
76
+ // @ts-expect-error - TS2315 - Type 'Tree' is not generic.
73
77
  ): Tree<
74
78
  ReadonlyArray<Widget | null | undefined>,
75
79
  ReadonlyArray<Widget | null | undefined>,
@@ -119,6 +123,7 @@ describe("multi-item renderer", () => {
119
123
  <MultiRenderer
120
124
  item={question1}
121
125
  shape={shapes.shape({broken: shapes.content})}
126
+ dependencies={testDependenciesV2}
122
127
  >
123
128
  {({renderers}) => {
124
129
  return <div />;
@@ -144,7 +149,7 @@ describe("multi-item renderer", () => {
144
149
  userEvent.paste(screen.getByRole("textbox"), "+42"); // Correct
145
150
 
146
151
  // Act
147
- // @ts-expect-error [FEI-5003] - TS2339 - Property '_getSerializedState' does not exist on type 'never'.
152
+ // @ts-expect-error - TS2339 - Property '_getSerializedState' does not exist on type 'never'.
148
153
  const state = renderer._getSerializedState(null);
149
154
 
150
155
  // Assert
@@ -277,7 +282,7 @@ describe("multi-item renderer", () => {
277
282
  userEvent.paste(screen.getByRole("textbox"), "99");
278
283
 
279
284
  // Act
280
- // @ts-expect-error [FEI-5003] - TS2339 - Property '_getSerializedState' does not exist on type 'never'.
285
+ // @ts-expect-error - TS2339 - Property '_getSerializedState' does not exist on type 'never'.
281
286
  const state = renderer._getSerializedState({
282
287
  blurb: "last blurb",
283
288
  hints: ["uno", "dos" /* intentionally not passing a third */],
@@ -528,7 +533,7 @@ describe("multi-item renderer", () => {
528
533
  } as const;
529
534
 
530
535
  // Act
531
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'restoreSerializedState' does not exist on type 'never'.
536
+ // @ts-expect-error - TS2339 - Property 'restoreSerializedState' does not exist on type 'never'.
532
537
  renderer.restoreSerializedState(state);
533
538
 
534
539
  // Assert
@@ -546,7 +551,7 @@ describe("multi-item renderer", () => {
546
551
  const callback = jest.fn();
547
552
 
548
553
  // Act
549
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'restoreSerializedState' does not exist on type 'never'.
554
+ // @ts-expect-error - TS2339 - Property 'restoreSerializedState' does not exist on type 'never'.
550
555
  renderer.restoreSerializedState(
551
556
  {
552
557
  blurb: {"mock-widget 1": 1},
@@ -594,7 +599,7 @@ describe("multi-item renderer", () => {
594
599
  userEvent.paste(screen.getByRole("textbox"), "-42"); // Correct
595
600
 
596
601
  // Act
597
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'getScores' does not exist on type 'never'.
602
+ // @ts-expect-error - TS2339 - Property 'getScores' does not exist on type 'never'.
598
603
  const score = renderer.getScores();
599
604
 
600
605
  // Assert
@@ -756,7 +761,7 @@ describe("multi-item renderer", () => {
756
761
  userEvent.paste(screen.getByRole("textbox"), "-42"); // Correct
757
762
 
758
763
  // Act
759
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'score' does not exist on type 'never'.
764
+ // @ts-expect-error - TS2339 - Property 'score' does not exist on type 'never'.
760
765
  const score = renderer.score();
761
766
 
762
767
  // Assert
@@ -66,7 +66,7 @@ describe("buildMapper", () => {
66
66
  it("calls the content mapper for each of the content nodes", () => {
67
67
  const calledWith = [];
68
68
  buildMapper()
69
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'unknown' is not assignable to parameter of type 'never'.
69
+ // @ts-expect-error - TS2345 - Argument of type 'unknown' is not assignable to parameter of type 'never'.
70
70
  .setContentMapper((c) => calledWith.push(c))
71
71
  .mapTree(tree, shape);
72
72
  calledWith.sort();
@@ -83,7 +83,7 @@ describe("buildMapper", () => {
83
83
  it("calls the hint mapper for each of the hint nodes", () => {
84
84
  const calledWith = [];
85
85
  buildMapper()
86
- // @ts-expect-error [FEI-5003] - TS2345 - Argument of type 'unknown' is not assignable to parameter of type 'never'.
86
+ // @ts-expect-error - TS2345 - Argument of type 'unknown' is not assignable to parameter of type 'never'.
87
87
  .setHintMapper((h) => calledWith.push(h))
88
88
  .mapTree(tree, shape);
89
89
  calledWith.sort();
@@ -110,9 +110,9 @@ describe("buildMapper", () => {
110
110
  TagsNode,
111
111
  string
112
112
  > = buildMapper()
113
- // @ts-expect-error [FEI-5003] - TS2571 - Object is of type 'unknown'.
113
+ // @ts-expect-error - TS2571 - Object is of type 'unknown'.
114
114
  .setContentMapper((c) => `mapped content: ${c.content || "<none>"}`)
115
- // @ts-expect-error [FEI-5003] - TS2571 - Object is of type 'unknown'.
115
+ // @ts-expect-error - TS2571 - Object is of type 'unknown'.
116
116
  .setHintMapper((h) => `mapped hint: ${h.content || "<none>"}`)
117
117
  .setTagsMapper((t) => `mapped tags: ${t.join(", ")}`);
118
118
  const result = mapper.mapTree(tree, shape);
@@ -188,7 +188,7 @@ describe("buildMapper", () => {
188
188
 
189
189
  const tree = {a: {b: {c: content(1)}}} as const;
190
190
 
191
- // @ts-expect-error [FEI-5003] - TS2322 - Type 'TreeMapperJustForLeaves<ContentNode, string | null | undefined, unknown, unknown, unknown, unknown>' is not assignable to type 'TreeMapper<ContentNode, string | null | undefined, HintNode, HintNode, TagsNode, TagsNode>'.
191
+ // @ts-expect-error - TS2322 - Type 'TreeMapperJustForLeaves<ContentNode, string | null | undefined, unknown, unknown, unknown, unknown>' is not assignable to type 'TreeMapper<ContentNode, string | null | undefined, HintNode, HintNode, TagsNode, TagsNode>'.
192
192
  const mapper: TreeMapper<
193
193
  ContentNode,
194
194
  string | null | undefined,
@@ -212,7 +212,7 @@ describe("buildMapper", () => {
212
212
  array(array(content(2)), array(content(3), content(4))),
213
213
  );
214
214
 
215
- // @ts-expect-error [FEI-5003] - TS2322 - Type 'TreeMapperJustForLeaves<ContentNode, string | null | undefined, unknown, unknown, unknown, unknown>' is not assignable to type 'TreeMapper<ContentNode, string | null | undefined, HintNode, HintNode, TagsNode, TagsNode>'.
215
+ // @ts-expect-error - TS2322 - Type 'TreeMapperJustForLeaves<ContentNode, string | null | undefined, unknown, unknown, unknown, unknown>' is not assignable to type 'TreeMapper<ContentNode, string | null | undefined, HintNode, HintNode, TagsNode, TagsNode>'.
216
216
  const mapper: TreeMapper<
217
217
  ContentNode,
218
218
  string | null | undefined,
@@ -234,7 +234,7 @@ describe("buildMapper", () => {
234
234
 
235
235
  const tree = array(array(), array(content(1)), array());
236
236
 
237
- // @ts-expect-error [FEI-5003] - TS2322 - Type 'TreeMapperJustForLeaves<ContentNode, string | null | undefined, unknown, unknown, unknown, unknown>' is not assignable to type 'TreeMapper<ContentNode, string | null | undefined, HintNode, HintNode, TagsNode, TagsNode>'.
237
+ // @ts-expect-error - TS2322 - Type 'TreeMapperJustForLeaves<ContentNode, string | null | undefined, unknown, unknown, unknown, unknown>' is not assignable to type 'TreeMapper<ContentNode, string | null | undefined, HintNode, HintNode, TagsNode, TagsNode>'.
238
238
  const mapper: TreeMapper<
239
239
  ContentNode,
240
240
  string | null | undefined,
@@ -258,7 +258,7 @@ describe("buildMapper", () => {
258
258
 
259
259
  let wasCalled = false;
260
260
  let callArgs: Record<string, any> = {};
261
- // @ts-expect-error [FEI-5003] - TS2322 - Type 'TreeMapperForLeavesAndCollections<unknown, any, unknown, unknown, unknown, unknown>' is not assignable to type 'TreeMapper<ContentNode, string | null | undefined, HintNode, HintNode, TagsNode, TagsNode>'.
261
+ // @ts-expect-error - TS2322 - Type 'TreeMapperForLeavesAndCollections<unknown, any, unknown, unknown, unknown, unknown>' is not assignable to type 'TreeMapper<ContentNode, string | null | undefined, HintNode, HintNode, TagsNode, TagsNode>'.
262
262
  const mapper: TreeMapper<
263
263
  ContentNode,
264
264
  string | null | undefined,
@@ -267,7 +267,7 @@ describe("buildMapper", () => {
267
267
  TagsNode,
268
268
  TagsNode
269
269
  > = buildMapper()
270
- // @ts-expect-error [FEI-5003] - TS2571 - Object is of type 'unknown'.
270
+ // @ts-expect-error - TS2571 - Object is of type 'unknown'.
271
271
  .setContentMapper((c) => c.content)
272
272
  .setArrayMapper((mappedArray, originalArray, shape, path) => {
273
273
  wasCalled = true;
@@ -288,11 +288,11 @@ describe("buildMapper", () => {
288
288
 
289
289
  it("uses the array mapper return value to construct the new tree", () => {
290
290
  const mapper = buildMapper()
291
- // @ts-expect-error [FEI-5003] - TS2571 - Object is of type 'unknown'.
291
+ // @ts-expect-error - TS2571 - Object is of type 'unknown'.
292
292
  .setContentMapper((c) => c.content)
293
- // @ts-expect-error [FEI-5003] - TS2571 - Object is of type 'unknown'.
293
+ // @ts-expect-error - TS2571 - Object is of type 'unknown'.
294
294
  .setHintMapper((h) => h.content)
295
- // @ts-expect-error [FEI-5003] - TS2571 - Object is of type 'unknown'.
295
+ // @ts-expect-error - TS2571 - Object is of type 'unknown'.
296
296
  .setTagsMapper((t) => t.join(", "))
297
297
  .setArrayMapper((mappedArray, originalArray, shape, path) => {
298
298
  return mappedArray.map((child) => `${String(child)} in array`);
@@ -37,10 +37,10 @@ export type HintNode = {
37
37
  };
38
38
  export type TagsNode = ReadonlyArray<string>;
39
39
 
40
- // @ts-expect-error [FEI-5003] - TS2315 - Type 'ArrayNode' is not generic.
40
+ // @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic.
41
41
  export type ItemArrayNode = ArrayNode<ContentNode, HintNode, TagsNode>;
42
42
  export type ItemObjectNode = ObjectNode<ContentNode, HintNode, TagsNode>;
43
- // @ts-expect-error [FEI-5003] - TS2315 - Type 'Tree' is not generic.
43
+ // @ts-expect-error - TS2315 - Type 'Tree' is not generic.
44
44
  export type ItemTree = Tree<ContentNode, HintNode, TagsNode>;
45
45
 
46
46
  // TODO(jeremy): I think we could refine this root type for multi items. Right
@@ -66,7 +66,7 @@ export function buildEmptyItemTreeForShape(shape: Shape): ItemTree {
66
66
  return object;
67
67
  }
68
68
  throw new PerseusError(
69
- // @ts-expect-error [FEI-5003] - TS2339 - Property 'type' does not exist on type 'never'.
69
+ // @ts-expect-error - TS2339 - Property 'type' does not exist on type 'never'.
70
70
  `unexpected shape type ${shape.type}`,
71
71
  Errors.InvalidInput,
72
72
  );