@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
@@ -1,11 +1,20 @@
1
- import { Keys as Key } from "@khanacademy/math-input";
1
+ import { KeypadType } from "@khanacademy/math-input";
2
2
  import * as React from "react";
3
+ import { useDependencies } from "../dependencies";
3
4
  import type { PerseusExpressionWidgetOptions } from "../perseus-types";
4
5
  import type { PerseusScore, WidgetProps } from "../types";
6
+ import type { Keys as Key } from "@khanacademy/math-input";
5
7
  type InputPath = ReadonlyArray<string>;
6
8
  type Rubric = PerseusExpressionWidgetOptions;
9
+ type RenderProps = {
10
+ buttonSets: PerseusExpressionWidgetOptions["buttonSets"];
11
+ buttonsVisible?: PerseusExpressionWidgetOptions["buttonsVisible"];
12
+ functions: PerseusExpressionWidgetOptions["functions"];
13
+ times: PerseusExpressionWidgetOptions["times"];
14
+ keypadConfiguration: ReturnType<typeof keypadConfigurationForProps>;
15
+ };
7
16
  type ExternalProps = WidgetProps<RenderProps, Rubric>;
8
- export type Props = ExternalProps & {
17
+ export type Props = ExternalProps & ReturnType<typeof useDependencies> & {
9
18
  apiOptions: NonNullable<ExternalProps["apiOptions"]>;
10
19
  buttonSets: NonNullable<ExternalProps["buttonSets"]>;
11
20
  functions: NonNullable<ExternalProps["functions"]>;
@@ -56,22 +65,219 @@ export declare class Expression extends React.Component<Props, ExpressionState>
56
65
  getInputPaths: () => ReadonlyArray<ReadonlyArray<any>>;
57
66
  getGrammarTypeForPath: (inputPath: string) => string;
58
67
  setInputValue: (path: string, newValue: string, cb: () => void) => void;
68
+ sendExpressionEvaluatedEvent(result: "correct" | "incorrect" | "invalid"): void;
59
69
  render(): React.ReactNode | React.ReactElement<React.ComponentProps<"div">>;
60
70
  }
61
- type RenderProps = {
62
- buttonSets: any;
63
- buttonsVisible?: "always" | "focused" | "never";
64
- functions: ReadonlyArray<string>;
65
- keypadConfiguration: {
66
- extraKeys: ReadonlyArray<any | string>;
67
- keypadType: any;
68
- };
69
- times: boolean;
71
+ /**
72
+ * Determine the keypad configuration parameters for the input, based on the
73
+ * provided properties.
74
+ *
75
+ * There are two configuration parameters to be passed to the keypad:
76
+ * (1) The keypad type. For the Expression widget, we always use the
77
+ * Expression keypad.
78
+ * (2) The extra keys; namely, any variables or constants (like Pi) that need
79
+ * to be included as keys on the keypad. These are scraped from the answer
80
+ * forms.
81
+ */
82
+ declare const keypadConfigurationForProps: (widgetOptions: PerseusExpressionWidgetOptions) => {
83
+ keypadType: KeypadType;
84
+ extraKeys: string[];
70
85
  };
71
86
  declare const _default: Readonly<{
72
87
  name: string;
73
88
  displayName: string;
74
- getWidget?: (() => typeof Expression) | undefined;
89
+ getWidget?: (() => React.ForwardRefExoticComponent<Omit<Pick<RenderProps & {
90
+ widgetId: string;
91
+ alignment: string | null | undefined;
92
+ static: boolean | null | undefined;
93
+ problemNum: number | null | undefined;
94
+ apiOptions: Readonly<Readonly<{
95
+ isArticle?: boolean | undefined;
96
+ onInputError?: ((widgetId: any, value: string, message?: string | null | undefined) => unknown) | undefined;
97
+ onFocusChange?: ((newFocusPath: import("../types").FocusPath, oldFocusPath: import("../types").FocusPath, keypadElement?: HTMLElement | undefined, focusedElement?: HTMLElement | undefined) => unknown) | undefined;
98
+ GroupMetadataEditor?: React.ComponentType<any> | undefined;
99
+ showAlignmentOptions?: boolean | undefined;
100
+ readOnly?: boolean | undefined;
101
+ answerableCallback?: ((arg1: boolean) => unknown) | undefined;
102
+ getAnotherHint?: (() => unknown) | undefined;
103
+ interactionCallback?: (() => unknown) | undefined;
104
+ groupAnnotator?: ((groupNumber: number, widgetId: string) => React.ReactNode) | undefined;
105
+ imagePlaceholder?: React.ReactNode;
106
+ widgetPlaceholder?: React.ReactNode;
107
+ baseElements?: {
108
+ Link: React.ComponentType<any>;
109
+ } | undefined;
110
+ imagePreloader?: ((dimensions: import("../types").Dimensions) => React.ReactNode) | undefined;
111
+ trackInteraction?: ((args: {
112
+ type: string;
113
+ id: string;
114
+ correct?: boolean | undefined;
115
+ } & Partial<import("../types").TrackingGradedGroupExtraArguments> & Partial<import("../types").TrackingSequenceExtraArguments>) => void) | undefined;
116
+ customKeypad?: boolean | undefined;
117
+ useV2Keypad?: boolean | undefined;
118
+ nativeKeypadProxy?: ((blur: () => void) => import("@khanacademy/math-input").KeypadAPI) | undefined;
119
+ isMobile?: boolean | undefined;
120
+ setDrawingAreaAvailable?: ((arg1: boolean) => unknown) | undefined;
121
+ useDraftEditor?: boolean | undefined;
122
+ hintProgressColor?: string | undefined;
123
+ canScrollPage?: boolean | undefined;
124
+ inModal?: boolean | undefined;
125
+ crossOutEnabled?: boolean | undefined;
126
+ editorChangeDelay?: number | undefined;
127
+ }> & {
128
+ GroupMetadataEditor: NonNullable<React.ComponentType<any> | undefined>;
129
+ baseElements: {
130
+ Link: React.ComponentType<any>;
131
+ };
132
+ canScrollPage: NonNullable<boolean | undefined>;
133
+ crossOutEnabled: NonNullable<boolean | undefined>;
134
+ editorChangeDelay: number;
135
+ groupAnnotator: (groupNumber: number, widgetId: string) => React.ReactNode;
136
+ inModal: NonNullable<boolean | undefined>;
137
+ isArticle: NonNullable<boolean | undefined>;
138
+ isMobile: NonNullable<boolean | undefined>;
139
+ useV2Keypad: NonNullable<boolean | undefined>;
140
+ onFocusChange: (newFocusPath: import("../types").FocusPath, oldFocusPath: import("../types").FocusPath, keypadElement?: HTMLElement | undefined, focusedElement?: HTMLElement | undefined) => unknown;
141
+ onInputError: (widgetId: any, value: string, message?: string | null | undefined) => unknown;
142
+ readOnly: NonNullable<boolean | undefined>;
143
+ setDrawingAreaAvailable: (arg1: boolean) => unknown;
144
+ showAlignmentOptions: NonNullable<boolean | undefined>;
145
+ useDraftEditor: NonNullable<boolean | undefined>;
146
+ }>;
147
+ keypadElement?: any;
148
+ questionCompleted?: boolean | undefined;
149
+ onFocus: (blurPath: import("../types").FocusPath) => void;
150
+ onBlur: (blurPath: import("../types").FocusPath) => void;
151
+ findWidgets: (arg1: import("../types").FilterCriterion) => readonly any[];
152
+ reviewModeRubric: PerseusExpressionWidgetOptions;
153
+ onChange: import("../types").ChangeHandler;
154
+ trackInteraction: (extraData?: {} | undefined) => void;
155
+ isLastUsedWidget: boolean;
156
+ linterContext: import("../types").LinterContextProps;
157
+ containerSizeClass: import("../util/sizing-utils").SizeClass;
158
+ } & import("../types").PerseusDependenciesV2 & {
159
+ apiOptions: Readonly<Readonly<{
160
+ isArticle?: boolean | undefined;
161
+ onInputError?: ((widgetId: any, value: string, message?: string | null | undefined) => unknown) | undefined;
162
+ onFocusChange?: ((newFocusPath: import("../types").FocusPath, oldFocusPath: import("../types").FocusPath, keypadElement?: HTMLElement | undefined, focusedElement?: HTMLElement | undefined) => unknown) | undefined;
163
+ GroupMetadataEditor?: React.ComponentType<any> | undefined;
164
+ showAlignmentOptions?: boolean | undefined;
165
+ readOnly?: boolean | undefined;
166
+ answerableCallback?: ((arg1: boolean) => unknown) | undefined;
167
+ getAnotherHint?: (() => unknown) | undefined;
168
+ interactionCallback?: (() => unknown) | undefined;
169
+ groupAnnotator?: ((groupNumber: number, widgetId: string) => React.ReactNode) | undefined;
170
+ imagePlaceholder?: React.ReactNode;
171
+ widgetPlaceholder?: React.ReactNode;
172
+ baseElements?: {
173
+ Link: React.ComponentType<any>;
174
+ } | undefined;
175
+ imagePreloader?: ((dimensions: import("../types").Dimensions) => React.ReactNode) | undefined;
176
+ trackInteraction?: ((args: {
177
+ type: string;
178
+ id: string;
179
+ correct?: boolean | undefined;
180
+ } & Partial<import("../types").TrackingGradedGroupExtraArguments> & Partial<import("../types").TrackingSequenceExtraArguments>) => void) | undefined;
181
+ customKeypad?: boolean | undefined;
182
+ useV2Keypad?: boolean | undefined;
183
+ nativeKeypadProxy?: ((blur: () => void) => import("@khanacademy/math-input").KeypadAPI) | undefined;
184
+ isMobile?: boolean | undefined;
185
+ setDrawingAreaAvailable?: ((arg1: boolean) => unknown) | undefined;
186
+ useDraftEditor?: boolean | undefined;
187
+ hintProgressColor?: string | undefined;
188
+ canScrollPage?: boolean | undefined;
189
+ inModal?: boolean | undefined;
190
+ crossOutEnabled?: boolean | undefined;
191
+ editorChangeDelay?: number | undefined;
192
+ }> & {
193
+ GroupMetadataEditor: NonNullable<React.ComponentType<any> | undefined>;
194
+ baseElements: {
195
+ Link: React.ComponentType<any>;
196
+ };
197
+ canScrollPage: NonNullable<boolean | undefined>;
198
+ crossOutEnabled: NonNullable<boolean | undefined>;
199
+ editorChangeDelay: number;
200
+ groupAnnotator: (groupNumber: number, widgetId: string) => React.ReactNode;
201
+ inModal: NonNullable<boolean | undefined>;
202
+ isArticle: NonNullable<boolean | undefined>;
203
+ isMobile: NonNullable<boolean | undefined>;
204
+ useV2Keypad: NonNullable<boolean | undefined>;
205
+ onFocusChange: (newFocusPath: import("../types").FocusPath, oldFocusPath: import("../types").FocusPath, keypadElement?: HTMLElement | undefined, focusedElement?: HTMLElement | undefined) => unknown;
206
+ onInputError: (widgetId: any, value: string, message?: string | null | undefined) => unknown;
207
+ readOnly: NonNullable<boolean | undefined>;
208
+ setDrawingAreaAvailable: (arg1: boolean) => unknown;
209
+ showAlignmentOptions: NonNullable<boolean | undefined>;
210
+ useDraftEditor: NonNullable<boolean | undefined>;
211
+ }>;
212
+ buttonSets: readonly string[];
213
+ functions: readonly string[];
214
+ linterContext: import("../types").LinterContextProps;
215
+ onBlur: (blurPath: import("../types").FocusPath) => void;
216
+ onFocus: (blurPath: import("../types").FocusPath) => void;
217
+ times: boolean;
218
+ value: string;
219
+ }, "static" | "trackInteraction" | "onChange" | "problemNum" | "questionCompleted" | "keypadElement" | "alignment" | "findWidgets" | "buttonsVisible" | "containerSizeClass" | "widgetId" | "keypadConfiguration" | "reviewModeRubric" | "isLastUsedWidget" | "analytics"> & {
220
+ value?: string | undefined;
221
+ onFocus?: ((blurPath: import("../types").FocusPath) => void) | undefined;
222
+ onBlur?: ((blurPath: import("../types").FocusPath) => void) | undefined;
223
+ linterContext?: import("../types").LinterContextProps | undefined;
224
+ apiOptions?: Readonly<Readonly<{
225
+ isArticle?: boolean | undefined;
226
+ onInputError?: ((widgetId: any, value: string, message?: string | null | undefined) => unknown) | undefined;
227
+ onFocusChange?: ((newFocusPath: import("../types").FocusPath, oldFocusPath: import("../types").FocusPath, keypadElement?: HTMLElement | undefined, focusedElement?: HTMLElement | undefined) => unknown) | undefined;
228
+ GroupMetadataEditor?: React.ComponentType<any> | undefined;
229
+ showAlignmentOptions?: boolean | undefined;
230
+ readOnly?: boolean | undefined;
231
+ answerableCallback?: ((arg1: boolean) => unknown) | undefined;
232
+ getAnotherHint?: (() => unknown) | undefined;
233
+ interactionCallback?: (() => unknown) | undefined;
234
+ groupAnnotator?: ((groupNumber: number, widgetId: string) => React.ReactNode) | undefined;
235
+ imagePlaceholder?: React.ReactNode;
236
+ widgetPlaceholder?: React.ReactNode;
237
+ baseElements?: {
238
+ Link: React.ComponentType<any>;
239
+ } | undefined;
240
+ imagePreloader?: ((dimensions: import("../types").Dimensions) => React.ReactNode) | undefined;
241
+ trackInteraction?: ((args: {
242
+ type: string;
243
+ id: string;
244
+ correct?: boolean | undefined;
245
+ } & Partial<import("../types").TrackingGradedGroupExtraArguments> & Partial<import("../types").TrackingSequenceExtraArguments>) => void) | undefined;
246
+ customKeypad?: boolean | undefined;
247
+ useV2Keypad?: boolean | undefined;
248
+ nativeKeypadProxy?: ((blur: () => void) => import("@khanacademy/math-input").KeypadAPI) | undefined;
249
+ isMobile?: boolean | undefined;
250
+ setDrawingAreaAvailable?: ((arg1: boolean) => unknown) | undefined;
251
+ useDraftEditor?: boolean | undefined;
252
+ hintProgressColor?: string | undefined;
253
+ canScrollPage?: boolean | undefined;
254
+ inModal?: boolean | undefined;
255
+ crossOutEnabled?: boolean | undefined;
256
+ editorChangeDelay?: number | undefined;
257
+ }> & {
258
+ GroupMetadataEditor: NonNullable<React.ComponentType<any> | undefined>;
259
+ baseElements: {
260
+ Link: React.ComponentType<any>;
261
+ };
262
+ canScrollPage: NonNullable<boolean | undefined>;
263
+ crossOutEnabled: NonNullable<boolean | undefined>;
264
+ editorChangeDelay: number;
265
+ groupAnnotator: (groupNumber: number, widgetId: string) => React.ReactNode;
266
+ inModal: NonNullable<boolean | undefined>;
267
+ isArticle: NonNullable<boolean | undefined>;
268
+ isMobile: NonNullable<boolean | undefined>;
269
+ useV2Keypad: NonNullable<boolean | undefined>;
270
+ onFocusChange: (newFocusPath: import("../types").FocusPath, oldFocusPath: import("../types").FocusPath, keypadElement?: HTMLElement | undefined, focusedElement?: HTMLElement | undefined) => unknown;
271
+ onInputError: (widgetId: any, value: string, message?: string | null | undefined) => unknown;
272
+ readOnly: NonNullable<boolean | undefined>;
273
+ setDrawingAreaAvailable: (arg1: boolean) => unknown;
274
+ showAlignmentOptions: NonNullable<boolean | undefined>;
275
+ useDraftEditor: NonNullable<boolean | undefined>;
276
+ }> | undefined;
277
+ times?: boolean | undefined;
278
+ buttonSets?: readonly string[] | undefined;
279
+ functions?: readonly string[] | undefined;
280
+ } & {}, "analytics"> & React.RefAttributes<Expression>>) | undefined;
75
281
  accessible?: boolean | ((props: any) => boolean) | undefined;
76
282
  hidden?: boolean | undefined;
77
283
  version?: import("../types").Version | undefined;
@@ -86,6 +292,197 @@ declare const _default: Readonly<{
86
292
  propUpgrades?: {
87
293
  [key: string]: (arg1: any) => any;
88
294
  } | undefined;
89
- widget: typeof Expression;
295
+ widget: React.ForwardRefExoticComponent<Omit<Pick<RenderProps & {
296
+ widgetId: string;
297
+ alignment: string | null | undefined;
298
+ static: boolean | null | undefined;
299
+ problemNum: number | null | undefined;
300
+ apiOptions: Readonly<Readonly<{
301
+ isArticle?: boolean | undefined;
302
+ onInputError?: ((widgetId: any, value: string, message?: string | null | undefined) => unknown) | undefined;
303
+ onFocusChange?: ((newFocusPath: import("../types").FocusPath, oldFocusPath: import("../types").FocusPath, keypadElement?: HTMLElement | undefined, focusedElement?: HTMLElement | undefined) => unknown) | undefined;
304
+ GroupMetadataEditor?: React.ComponentType<any> | undefined;
305
+ showAlignmentOptions?: boolean | undefined;
306
+ readOnly?: boolean | undefined;
307
+ answerableCallback?: ((arg1: boolean) => unknown) | undefined;
308
+ getAnotherHint?: (() => unknown) | undefined;
309
+ interactionCallback?: (() => unknown) | undefined;
310
+ groupAnnotator?: ((groupNumber: number, widgetId: string) => React.ReactNode) | undefined;
311
+ imagePlaceholder?: React.ReactNode;
312
+ widgetPlaceholder?: React.ReactNode;
313
+ baseElements?: {
314
+ Link: React.ComponentType<any>;
315
+ } | undefined;
316
+ imagePreloader?: ((dimensions: import("../types").Dimensions) => React.ReactNode) | undefined;
317
+ trackInteraction?: ((args: {
318
+ type: string;
319
+ id: string;
320
+ correct?: boolean | undefined;
321
+ } & Partial<import("../types").TrackingGradedGroupExtraArguments> & Partial<import("../types").TrackingSequenceExtraArguments>) => void) | undefined;
322
+ customKeypad?: boolean | undefined;
323
+ useV2Keypad?: boolean | undefined;
324
+ nativeKeypadProxy?: ((blur: () => void) => import("@khanacademy/math-input").KeypadAPI) | undefined;
325
+ isMobile?: boolean | undefined;
326
+ setDrawingAreaAvailable?: ((arg1: boolean) => unknown) | undefined;
327
+ useDraftEditor?: boolean | undefined;
328
+ hintProgressColor?: string | undefined;
329
+ canScrollPage?: boolean | undefined;
330
+ inModal?: boolean | undefined;
331
+ crossOutEnabled?: boolean | undefined;
332
+ editorChangeDelay?: number | undefined;
333
+ }> & {
334
+ GroupMetadataEditor: NonNullable<React.ComponentType<any> | undefined>;
335
+ baseElements: {
336
+ Link: React.ComponentType<any>;
337
+ };
338
+ canScrollPage: NonNullable<boolean | undefined>;
339
+ crossOutEnabled: NonNullable<boolean | undefined>;
340
+ editorChangeDelay: number;
341
+ groupAnnotator: (groupNumber: number, widgetId: string) => React.ReactNode;
342
+ inModal: NonNullable<boolean | undefined>;
343
+ isArticle: NonNullable<boolean | undefined>;
344
+ isMobile: NonNullable<boolean | undefined>;
345
+ useV2Keypad: NonNullable<boolean | undefined>;
346
+ onFocusChange: (newFocusPath: import("../types").FocusPath, oldFocusPath: import("../types").FocusPath, keypadElement?: HTMLElement | undefined, focusedElement?: HTMLElement | undefined) => unknown;
347
+ onInputError: (widgetId: any, value: string, message?: string | null | undefined) => unknown;
348
+ readOnly: NonNullable<boolean | undefined>;
349
+ setDrawingAreaAvailable: (arg1: boolean) => unknown;
350
+ showAlignmentOptions: NonNullable<boolean | undefined>;
351
+ useDraftEditor: NonNullable<boolean | undefined>;
352
+ }>;
353
+ keypadElement?: any;
354
+ questionCompleted?: boolean | undefined;
355
+ onFocus: (blurPath: import("../types").FocusPath) => void;
356
+ onBlur: (blurPath: import("../types").FocusPath) => void;
357
+ findWidgets: (arg1: import("../types").FilterCriterion) => readonly any[];
358
+ reviewModeRubric: PerseusExpressionWidgetOptions;
359
+ onChange: import("../types").ChangeHandler;
360
+ trackInteraction: (extraData?: {} | undefined) => void;
361
+ isLastUsedWidget: boolean;
362
+ linterContext: import("../types").LinterContextProps;
363
+ containerSizeClass: import("../util/sizing-utils").SizeClass;
364
+ } & import("../types").PerseusDependenciesV2 & {
365
+ apiOptions: Readonly<Readonly<{
366
+ isArticle?: boolean | undefined;
367
+ onInputError?: ((widgetId: any, value: string, message?: string | null | undefined) => unknown) | undefined;
368
+ onFocusChange?: ((newFocusPath: import("../types").FocusPath, oldFocusPath: import("../types").FocusPath, keypadElement?: HTMLElement | undefined, focusedElement?: HTMLElement | undefined) => unknown) | undefined;
369
+ GroupMetadataEditor?: React.ComponentType<any> | undefined;
370
+ showAlignmentOptions?: boolean | undefined;
371
+ readOnly?: boolean | undefined;
372
+ answerableCallback?: ((arg1: boolean) => unknown) | undefined;
373
+ getAnotherHint?: (() => unknown) | undefined;
374
+ interactionCallback?: (() => unknown) | undefined;
375
+ groupAnnotator?: ((groupNumber: number, widgetId: string) => React.ReactNode) | undefined;
376
+ imagePlaceholder?: React.ReactNode;
377
+ widgetPlaceholder?: React.ReactNode;
378
+ baseElements?: {
379
+ Link: React.ComponentType<any>;
380
+ } | undefined;
381
+ imagePreloader?: ((dimensions: import("../types").Dimensions) => React.ReactNode) | undefined;
382
+ trackInteraction?: ((args: {
383
+ type: string;
384
+ id: string;
385
+ correct?: boolean | undefined;
386
+ } & Partial<import("../types").TrackingGradedGroupExtraArguments> & Partial<import("../types").TrackingSequenceExtraArguments>) => void) | undefined;
387
+ customKeypad?: boolean | undefined;
388
+ useV2Keypad?: boolean | undefined;
389
+ nativeKeypadProxy?: ((blur: () => void) => import("@khanacademy/math-input").KeypadAPI) | undefined;
390
+ isMobile?: boolean | undefined;
391
+ setDrawingAreaAvailable?: ((arg1: boolean) => unknown) | undefined;
392
+ useDraftEditor?: boolean | undefined;
393
+ hintProgressColor?: string | undefined;
394
+ canScrollPage?: boolean | undefined;
395
+ inModal?: boolean | undefined;
396
+ crossOutEnabled?: boolean | undefined;
397
+ editorChangeDelay?: number | undefined;
398
+ }> & {
399
+ GroupMetadataEditor: NonNullable<React.ComponentType<any> | undefined>;
400
+ baseElements: {
401
+ Link: React.ComponentType<any>;
402
+ };
403
+ canScrollPage: NonNullable<boolean | undefined>;
404
+ crossOutEnabled: NonNullable<boolean | undefined>;
405
+ editorChangeDelay: number;
406
+ groupAnnotator: (groupNumber: number, widgetId: string) => React.ReactNode;
407
+ inModal: NonNullable<boolean | undefined>;
408
+ isArticle: NonNullable<boolean | undefined>;
409
+ isMobile: NonNullable<boolean | undefined>;
410
+ useV2Keypad: NonNullable<boolean | undefined>;
411
+ onFocusChange: (newFocusPath: import("../types").FocusPath, oldFocusPath: import("../types").FocusPath, keypadElement?: HTMLElement | undefined, focusedElement?: HTMLElement | undefined) => unknown;
412
+ onInputError: (widgetId: any, value: string, message?: string | null | undefined) => unknown;
413
+ readOnly: NonNullable<boolean | undefined>;
414
+ setDrawingAreaAvailable: (arg1: boolean) => unknown;
415
+ showAlignmentOptions: NonNullable<boolean | undefined>;
416
+ useDraftEditor: NonNullable<boolean | undefined>;
417
+ }>;
418
+ buttonSets: readonly string[];
419
+ functions: readonly string[];
420
+ linterContext: import("../types").LinterContextProps;
421
+ onBlur: (blurPath: import("../types").FocusPath) => void;
422
+ onFocus: (blurPath: import("../types").FocusPath) => void;
423
+ times: boolean;
424
+ value: string;
425
+ }, "static" | "trackInteraction" | "onChange" | "problemNum" | "questionCompleted" | "keypadElement" | "alignment" | "findWidgets" | "buttonsVisible" | "containerSizeClass" | "widgetId" | "keypadConfiguration" | "reviewModeRubric" | "isLastUsedWidget" | "analytics"> & {
426
+ value?: string | undefined;
427
+ onFocus?: ((blurPath: import("../types").FocusPath) => void) | undefined;
428
+ onBlur?: ((blurPath: import("../types").FocusPath) => void) | undefined;
429
+ linterContext?: import("../types").LinterContextProps | undefined;
430
+ apiOptions?: Readonly<Readonly<{
431
+ isArticle?: boolean | undefined;
432
+ onInputError?: ((widgetId: any, value: string, message?: string | null | undefined) => unknown) | undefined;
433
+ onFocusChange?: ((newFocusPath: import("../types").FocusPath, oldFocusPath: import("../types").FocusPath, keypadElement?: HTMLElement | undefined, focusedElement?: HTMLElement | undefined) => unknown) | undefined;
434
+ GroupMetadataEditor?: React.ComponentType<any> | undefined;
435
+ showAlignmentOptions?: boolean | undefined;
436
+ readOnly?: boolean | undefined;
437
+ answerableCallback?: ((arg1: boolean) => unknown) | undefined;
438
+ getAnotherHint?: (() => unknown) | undefined;
439
+ interactionCallback?: (() => unknown) | undefined;
440
+ groupAnnotator?: ((groupNumber: number, widgetId: string) => React.ReactNode) | undefined;
441
+ imagePlaceholder?: React.ReactNode;
442
+ widgetPlaceholder?: React.ReactNode;
443
+ baseElements?: {
444
+ Link: React.ComponentType<any>;
445
+ } | undefined;
446
+ imagePreloader?: ((dimensions: import("../types").Dimensions) => React.ReactNode) | undefined;
447
+ trackInteraction?: ((args: {
448
+ type: string;
449
+ id: string;
450
+ correct?: boolean | undefined;
451
+ } & Partial<import("../types").TrackingGradedGroupExtraArguments> & Partial<import("../types").TrackingSequenceExtraArguments>) => void) | undefined;
452
+ customKeypad?: boolean | undefined;
453
+ useV2Keypad?: boolean | undefined;
454
+ nativeKeypadProxy?: ((blur: () => void) => import("@khanacademy/math-input").KeypadAPI) | undefined;
455
+ isMobile?: boolean | undefined;
456
+ setDrawingAreaAvailable?: ((arg1: boolean) => unknown) | undefined;
457
+ useDraftEditor?: boolean | undefined;
458
+ hintProgressColor?: string | undefined;
459
+ canScrollPage?: boolean | undefined;
460
+ inModal?: boolean | undefined;
461
+ crossOutEnabled?: boolean | undefined;
462
+ editorChangeDelay?: number | undefined;
463
+ }> & {
464
+ GroupMetadataEditor: NonNullable<React.ComponentType<any> | undefined>;
465
+ baseElements: {
466
+ Link: React.ComponentType<any>;
467
+ };
468
+ canScrollPage: NonNullable<boolean | undefined>;
469
+ crossOutEnabled: NonNullable<boolean | undefined>;
470
+ editorChangeDelay: number;
471
+ groupAnnotator: (groupNumber: number, widgetId: string) => React.ReactNode;
472
+ inModal: NonNullable<boolean | undefined>;
473
+ isArticle: NonNullable<boolean | undefined>;
474
+ isMobile: NonNullable<boolean | undefined>;
475
+ useV2Keypad: NonNullable<boolean | undefined>;
476
+ onFocusChange: (newFocusPath: import("../types").FocusPath, oldFocusPath: import("../types").FocusPath, keypadElement?: HTMLElement | undefined, focusedElement?: HTMLElement | undefined) => unknown;
477
+ onInputError: (widgetId: any, value: string, message?: string | null | undefined) => unknown;
478
+ readOnly: NonNullable<boolean | undefined>;
479
+ setDrawingAreaAvailable: (arg1: boolean) => unknown;
480
+ showAlignmentOptions: NonNullable<boolean | undefined>;
481
+ useDraftEditor: NonNullable<boolean | undefined>;
482
+ }> | undefined;
483
+ times?: boolean | undefined;
484
+ buttonSets?: readonly string[] | undefined;
485
+ functions?: readonly string[] | undefined;
486
+ } & {}, "analytics"> & React.RefAttributes<Expression>>;
90
487
  }>;
91
488
  export default _default;
@@ -1,7 +1,7 @@
1
1
  import * as React from "react";
2
- import { ANSWER_BAR_STATES } from "./graded-group-answer-bar";
3
2
  import type { PerseusGradedGroupWidgetOptions } from "../perseus-types";
4
- import type { WidgetProps } from "../types";
3
+ import type { TrackingGradedGroupExtraArguments, WidgetProps } from "../types";
4
+ import type { ANSWER_BAR_STATES } from "./graded-group-answer-bar";
5
5
  declare const GRADING_STATUSES: {
6
6
  readonly ungraded: "ungraded";
7
7
  readonly correct: "correct";
@@ -10,7 +10,7 @@ declare const GRADING_STATUSES: {
10
10
  };
11
11
  type Rubric = PerseusGradedGroupWidgetOptions;
12
12
  type RenderProps = PerseusGradedGroupWidgetOptions;
13
- type Props = WidgetProps<RenderProps, Rubric> & {
13
+ type Props = WidgetProps<RenderProps, Rubric, TrackingGradedGroupExtraArguments> & {
14
14
  inGradedGroupSet?: boolean;
15
15
  onNextQuestion?: () => unknown;
16
16
  };
@@ -1,8 +1,8 @@
1
1
  import * as React from "react";
2
- import { QuadraticCoefficient, SineCoefficient, Range } from "../util/geometry";
3
2
  import type { Coord } from "../interactive2/types";
4
3
  import type { PerseusGraphType, PerseusGraphTypeAngle, PerseusGraphTypePoint, PerseusGraphTypePolygon, PerseusGraphTypeSegment, PerseusInteractiveGraphWidgetOptions } from "../perseus-types";
5
4
  import type { PerseusScore, WidgetProps } from "../types";
5
+ import type { QuadraticCoefficient, SineCoefficient, Range } from "../util/geometry";
6
6
  type RenderProps = PerseusInteractiveGraphWidgetOptions;
7
7
  type Rubric = PerseusInteractiveGraphWidgetOptions;
8
8
  type Props = WidgetProps<RenderProps, Rubric>;
@@ -1,8 +1,8 @@
1
1
  import * as React from "react";
2
- import { PerseusSequenceWidgetOptions } from "../perseus-types";
3
- import type { WidgetProps } from "../types";
2
+ import type { PerseusSequenceWidgetOptions } from "../perseus-types";
3
+ import type { TrackingSequenceExtraArguments, WidgetProps } from "../types";
4
4
  type Rubric = PerseusSequenceWidgetOptions;
5
- type ExternalProps = WidgetProps<PerseusSequenceWidgetOptions, Rubric>;
5
+ type ExternalProps = WidgetProps<PerseusSequenceWidgetOptions, Rubric, TrackingSequenceExtraArguments>;
6
6
  type Props = ExternalProps;
7
7
  type DefaultProps = {
8
8
  json: Props["json"];
@@ -6,7 +6,14 @@ declare class Table extends React.Component<any> {
6
6
  editableHeaders: PropTypes.Requireable<boolean>;
7
7
  Editor: PropTypes.Requireable<(...args: any[]) => any>;
8
8
  headers: PropTypes.Requireable<(string | null | undefined)[]>;
9
- keypadElement: any;
9
+ keypadElement: PropTypes.Requireable<PropTypes.InferProps<{
10
+ activate: PropTypes.Validator<(...args: any[]) => any>;
11
+ dismiss: PropTypes.Validator<(...args: any[]) => any>;
12
+ configure: PropTypes.Validator<(...args: any[]) => any>;
13
+ setCursor: PropTypes.Validator<(...args: any[]) => any>;
14
+ setKeyHandler: PropTypes.Validator<(...args: any[]) => any>;
15
+ getDOMNode: PropTypes.Validator<(...args: any[]) => any>;
16
+ }>>;
10
17
  trackInteraction: PropTypes.Validator<(...args: any[]) => any>;
11
18
  linterContext: PropTypes.Requireable<PropTypes.InferProps<{
12
19
  contentType: PropTypes.Requireable<string>;
package/dist/widgets.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import * as React from "react";
2
1
  import type { Alignment, Tracking, Version, WidgetExports, WidgetInfo, WidgetTransform } from "./types";
2
+ import type * as React from "react";
3
3
  type Editor = any;
4
4
  export declare const registerWidget: (name: string, widget: WidgetExports) => void;
5
5
  export declare const registerWidgets: (widgets: ReadonlyArray<WidgetExports>) => void;
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "Core Perseus API (includes renderers and widgets)",
4
4
  "author": "Khan Academy",
5
5
  "license": "MIT",
6
- "version": "7.2.1",
6
+ "version": "9.0.0",
7
7
  "publishConfig": {
8
8
  "access": "public"
9
9
  },
@@ -22,30 +22,30 @@
22
22
  },
23
23
  "dependencies": {
24
24
  "@khanacademy/kas": "^0.3.1",
25
- "@khanacademy/kmath": "^0.1.1",
26
- "@khanacademy/math-input": "^8.1.2",
27
- "@khanacademy/perseus-core": "0.1.1",
28
- "@khanacademy/perseus-linter": "^0.3.1",
29
- "@khanacademy/pure-markdown": "^0.2.3",
30
- "@khanacademy/simple-markdown": "^0.9.3"
25
+ "@khanacademy/kmath": "^0.1.2",
26
+ "@khanacademy/math-input": "^10.0.0",
27
+ "@khanacademy/perseus-core": "0.2.0",
28
+ "@khanacademy/perseus-linter": "^0.3.2",
29
+ "@khanacademy/pure-markdown": "^0.2.4",
30
+ "@khanacademy/simple-markdown": "^0.10.0"
31
31
  },
32
32
  "devDependencies": {
33
- "@khanacademy/wonder-blocks-button": "^4.0.8",
34
- "@khanacademy/wonder-blocks-clickable": "^3.0.8",
33
+ "@khanacademy/wonder-blocks-button": "^4.1.3",
34
+ "@khanacademy/wonder-blocks-clickable": "^4.0.0",
35
35
  "@khanacademy/wonder-blocks-color": "^2.0.1",
36
- "@khanacademy/wonder-blocks-core": "^5.0.4",
37
- "@khanacademy/wonder-blocks-data": "^11.0.8",
38
- "@khanacademy/wonder-blocks-dropdown": "^3.0.8",
39
- "@khanacademy/wonder-blocks-form": "^4.0.8",
36
+ "@khanacademy/wonder-blocks-core": "^6.0.0",
37
+ "@khanacademy/wonder-blocks-data": "^12.0.0",
38
+ "@khanacademy/wonder-blocks-dropdown": "^3.0.21",
39
+ "@khanacademy/wonder-blocks-form": "^4.3.3",
40
40
  "@khanacademy/wonder-blocks-i18n": "^2.0.2",
41
- "@khanacademy/wonder-blocks-layout": "^2.0.8",
42
- "@khanacademy/wonder-blocks-link": "^4.0.8",
43
- "@khanacademy/wonder-blocks-modal": "^4.0.8",
44
- "@khanacademy/wonder-blocks-popover": "^2.0.8",
45
- "@khanacademy/wonder-blocks-progress-spinner": "^2.0.8",
41
+ "@khanacademy/wonder-blocks-layout": "^2.0.17",
42
+ "@khanacademy/wonder-blocks-link": "^5.0.0",
43
+ "@khanacademy/wonder-blocks-modal": "^4.0.19",
44
+ "@khanacademy/wonder-blocks-popover": "^3.0.0",
45
+ "@khanacademy/wonder-blocks-progress-spinner": "^2.0.17",
46
46
  "@khanacademy/wonder-blocks-spacing": "^3.0.5",
47
- "@khanacademy/wonder-blocks-tooltip": "^2.0.8",
48
- "@khanacademy/wonder-blocks-typography": "^2.0.5",
47
+ "@khanacademy/wonder-blocks-tooltip": "^2.1.2",
48
+ "@khanacademy/wonder-blocks-typography": "^2.1.3",
49
49
  "@khanacademy/wonder-stuff-core": "^1.2.2",
50
50
  "aphrodite": "^1.2.5",
51
51
  "classnames": "^1.1.4",
@@ -56,29 +56,29 @@
56
56
  "jquery": "^2.1.1",
57
57
  "katex": "^0.11.1",
58
58
  "lodash.debounce": "^4.0.8",
59
- "perseus-build-settings": "^0.1.0",
59
+ "perseus-build-settings": "^0.2.0",
60
60
  "prop-types": "^15.6.1",
61
61
  "react": "16.14.0",
62
62
  "react-dom": "16.14.0",
63
63
  "underscore": "^1.4.4"
64
64
  },
65
65
  "peerDependencies": {
66
- "@khanacademy/wonder-blocks-button": "^4.0.8",
67
- "@khanacademy/wonder-blocks-clickable": "^3.0.8",
66
+ "@khanacademy/wonder-blocks-button": "^4.1.3",
67
+ "@khanacademy/wonder-blocks-clickable": "^4.0.0",
68
68
  "@khanacademy/wonder-blocks-color": "^2.0.1",
69
- "@khanacademy/wonder-blocks-core": "^5.0.4",
70
- "@khanacademy/wonder-blocks-data": "^11.0.8",
71
- "@khanacademy/wonder-blocks-dropdown": "^3.0.8",
72
- "@khanacademy/wonder-blocks-form": "^4.0.8",
69
+ "@khanacademy/wonder-blocks-core": "^6.0.0",
70
+ "@khanacademy/wonder-blocks-data": "^12.0.0",
71
+ "@khanacademy/wonder-blocks-dropdown": "^3.0.21",
72
+ "@khanacademy/wonder-blocks-form": "^4.3.3",
73
73
  "@khanacademy/wonder-blocks-i18n": "^2.0.2",
74
- "@khanacademy/wonder-blocks-layout": "^2.0.8",
75
- "@khanacademy/wonder-blocks-link": "^4.0.8",
76
- "@khanacademy/wonder-blocks-modal": "^4.0.8",
77
- "@khanacademy/wonder-blocks-popover": "^2.0.8",
78
- "@khanacademy/wonder-blocks-progress-spinner": "^2.0.8",
74
+ "@khanacademy/wonder-blocks-layout": "^2.0.17",
75
+ "@khanacademy/wonder-blocks-link": "^5.0.0",
76
+ "@khanacademy/wonder-blocks-modal": "^4.0.19",
77
+ "@khanacademy/wonder-blocks-popover": "^3.0.0",
78
+ "@khanacademy/wonder-blocks-progress-spinner": "^2.0.17",
79
79
  "@khanacademy/wonder-blocks-spacing": "^3.0.5",
80
- "@khanacademy/wonder-blocks-tooltip": "^2.0.8",
81
- "@khanacademy/wonder-blocks-typography": "^2.0.5",
80
+ "@khanacademy/wonder-blocks-tooltip": "^2.1.2",
81
+ "@khanacademy/wonder-blocks-typography": "^2.1.3",
82
82
  "@khanacademy/wonder-stuff-core": "^1.2.2",
83
83
  "aphrodite": "^1.2.5",
84
84
  "classnames": "^1.1.4",