@khanacademy/perseus 19.1.4 → 19.1.6

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 (487) hide show
  1. package/dist/components/graphie.d.ts +9 -1
  2. package/dist/es/index.js +255 -122
  3. package/dist/es/index.js.map +1 -1
  4. package/dist/index.js +261 -126
  5. package/dist/index.js.map +1 -1
  6. package/dist/interactive2/interactive-util.d.ts +1 -1
  7. package/dist/interactive2/movable-point-options.d.ts +5 -4
  8. package/dist/interactive2/movable.d.ts +90 -13
  9. package/dist/interactive2/types.d.ts +6 -0
  10. package/dist/util/graphie.d.ts +5 -0
  11. package/dist/widgets/expression.d.ts +4 -4
  12. package/package.json +11 -8
  13. package/.babelrc.js +0 -8
  14. package/.eslintrc.js +0 -12
  15. package/CHANGELOG.md +0 -1422
  16. package/src/__stories__/article-renderer.stories.tsx +0 -100
  17. package/src/__stories__/hints-renderer.stories.tsx +0 -55
  18. package/src/__stories__/server-item-renderer.stories.tsx +0 -44
  19. package/src/__testdata__/article-renderer.testdata.ts +0 -212
  20. package/src/__testdata__/graphie.testdata.ts +0 -51
  21. package/src/__testdata__/renderer.testdata.ts +0 -274
  22. package/src/__testdata__/server-item-renderer.testdata.ts +0 -171
  23. package/src/__tests__/__snapshots__/perseus-markdown.test.ts.snap +0 -507
  24. package/src/__tests__/__snapshots__/renderer.test.tsx.snap +0 -525
  25. package/src/__tests__/__snapshots__/server-item-renderer.test.tsx.snap +0 -285
  26. package/src/__tests__/a11y.test.ts +0 -303
  27. package/src/__tests__/article-renderer.test.tsx +0 -130
  28. package/src/__tests__/error-boundary.test.tsx +0 -76
  29. package/src/__tests__/extract-perseus-data.test.ts +0 -1027
  30. package/src/__tests__/init.test.ts +0 -10
  31. package/src/__tests__/jipt-paragraphs.test.ts +0 -32
  32. package/src/__tests__/mock-asset-loading-widget.tsx +0 -53
  33. package/src/__tests__/mock-widget.tsx +0 -33
  34. package/src/__tests__/perseus-markdown.test.ts +0 -764
  35. package/src/__tests__/renderability.test.ts +0 -480
  36. package/src/__tests__/renderer-api.test.tsx +0 -302
  37. package/src/__tests__/renderer.test.tsx +0 -1816
  38. package/src/__tests__/server-item-renderer.test.tsx +0 -582
  39. package/src/__tests__/test-items/image-item.ts +0 -24
  40. package/src/__tests__/test-items/input-number-1-item.ts +0 -26
  41. package/src/__tests__/test-items/input-number-2-item.ts +0 -38
  42. package/src/__tests__/test-items/table-item.ts +0 -29
  43. package/src/__tests__/tex-wrangler.test.ts +0 -82
  44. package/src/__tests__/util.test.ts +0 -40
  45. package/src/__tests__/widget-container.test.tsx +0 -126
  46. package/src/__tests__/widgets.test.ts +0 -91
  47. package/src/a11y.ts +0 -45
  48. package/src/all-widgets.ts +0 -9
  49. package/src/article-renderer.tsx +0 -237
  50. package/src/asset-context.ts +0 -30
  51. package/src/basic-widgets.ts +0 -16
  52. package/src/components/__stories__/button-group.stories.tsx +0 -55
  53. package/src/components/__stories__/fixed-to-responsive.stories.tsx +0 -141
  54. package/src/components/__stories__/graph.stories.tsx +0 -28
  55. package/src/components/__stories__/graphie.stories.tsx +0 -33
  56. package/src/components/__stories__/hud.stories.tsx +0 -35
  57. package/src/components/__stories__/icon.stories.tsx +0 -63
  58. package/src/components/__stories__/image-loader.stories.tsx +0 -63
  59. package/src/components/__stories__/info-tip.stories.tsx +0 -31
  60. package/src/components/__stories__/inline-icon.stories.tsx +0 -40
  61. package/src/components/__stories__/input-with-examples.stories.tsx +0 -53
  62. package/src/components/__stories__/lint.stories.tsx +0 -86
  63. package/src/components/__stories__/math-input.stories.tsx +0 -43
  64. package/src/components/__stories__/math-output.stories.tsx +0 -23
  65. package/src/components/__stories__/multi-button-group.stories.tsx +0 -66
  66. package/src/components/__stories__/number-input.stories.tsx +0 -41
  67. package/src/components/__stories__/prop-check-box.stories.tsx +0 -65
  68. package/src/components/__stories__/range-input.stories.tsx +0 -29
  69. package/src/components/__stories__/simple-keypad-input.stories.tsx +0 -27
  70. package/src/components/__stories__/sortable.stories.tsx +0 -77
  71. package/src/components/__stories__/stub-tag-editor.stories.tsx +0 -45
  72. package/src/components/__stories__/svg-image.stories.tsx +0 -74
  73. package/src/components/__stories__/tex.stories.tsx +0 -23
  74. package/src/components/__stories__/text-input.stories.tsx +0 -33
  75. package/src/components/__stories__/text-list-editor.stories.tsx +0 -32
  76. package/src/components/__stories__/tooltip.stories.tsx +0 -52
  77. package/src/components/__stories__/zoomable-tex.stories.tsx +0 -41
  78. package/src/components/__stories__/zoomable.stories.tsx +0 -49
  79. package/src/components/__testdata__/sorter.testdata.ts +0 -19
  80. package/src/components/__tests__/__snapshots__/sortable.test.tsx.snap +0 -163
  81. package/src/components/__tests__/__snapshots__/sorter.test.tsx.snap +0 -265
  82. package/src/components/__tests__/math-input.test.tsx +0 -147
  83. package/src/components/__tests__/number-input.test.tsx +0 -128
  84. package/src/components/__tests__/sortable.test.tsx +0 -269
  85. package/src/components/__tests__/sorter.test.tsx +0 -114
  86. package/src/components/__tests__/zoomable.test.tsx +0 -399
  87. package/src/components/button-group.tsx +0 -130
  88. package/src/components/constants.ts +0 -14
  89. package/src/components/fixed-to-responsive.tsx +0 -169
  90. package/src/components/graph.tsx +0 -444
  91. package/src/components/graphie-classes.ts +0 -153
  92. package/src/components/graphie-movables.ts +0 -338
  93. package/src/components/graphie.tsx +0 -392
  94. package/src/components/highlighting/highlightable-content.tsx +0 -240
  95. package/src/components/highlighting/highlights.ts +0 -207
  96. package/src/components/highlighting/ranges.ts +0 -304
  97. package/src/components/highlighting/types.ts +0 -73
  98. package/src/components/highlighting/ui/highlight-renderer.tsx +0 -172
  99. package/src/components/highlighting/ui/highlight-set-renderer.tsx +0 -185
  100. package/src/components/highlighting/ui/highlight-tooltip.tsx +0 -141
  101. package/src/components/highlighting/ui/highlighting-ui.tsx +0 -143
  102. package/src/components/highlighting/ui/selection-tracker.tsx +0 -186
  103. package/src/components/highlighting/ui/types.ts +0 -21
  104. package/src/components/highlighting/ui/util.ts +0 -165
  105. package/src/components/highlighting/word-indexer.tsx +0 -152
  106. package/src/components/hud.tsx +0 -167
  107. package/src/components/icon.tsx +0 -141
  108. package/src/components/image-loader.tsx +0 -177
  109. package/src/components/info-tip/info-tip.tsx +0 -144
  110. package/src/components/info-tip.tsx +0 -39
  111. package/src/components/inline-icon.tsx +0 -60
  112. package/src/components/input-with-examples.tsx +0 -249
  113. package/src/components/lint.tsx +0 -459
  114. package/src/components/math-input.tsx +0 -474
  115. package/src/components/math-output.tsx +0 -134
  116. package/src/components/multi-button-group.tsx +0 -135
  117. package/src/components/number-input.tsx +0 -249
  118. package/src/components/prop-check-box.tsx +0 -79
  119. package/src/components/range-input.tsx +0 -60
  120. package/src/components/simple-keypad-input.tsx +0 -88
  121. package/src/components/sortable.tsx +0 -958
  122. package/src/components/stub-tag-editor.tsx +0 -53
  123. package/src/components/svg-image.tsx +0 -779
  124. package/src/components/tex.tsx +0 -67
  125. package/src/components/text-input.tsx +0 -129
  126. package/src/components/text-list-editor.tsx +0 -166
  127. package/src/components/tooltip.tsx +0 -410
  128. package/src/components/visibility-observer/__stories__/visibility-observer.stories.tsx +0 -141
  129. package/src/components/visibility-observer/create-visibility-observer.ts +0 -108
  130. package/src/components/visibility-observer/get-scroll-parent.ts +0 -46
  131. package/src/components/visibility-observer/visibility-observer.tsx +0 -124
  132. package/src/components/zoomable-tex.tsx +0 -78
  133. package/src/components/zoomable.tsx +0 -304
  134. package/src/components.ts +0 -15
  135. package/src/definition-context.tsx +0 -59
  136. package/src/dependencies.ts +0 -40
  137. package/src/error-boundary.tsx +0 -70
  138. package/src/extra-widgets.ts +0 -75
  139. package/src/hint-renderer.tsx +0 -151
  140. package/src/hints-renderer.tsx +0 -372
  141. package/src/icon-paths.ts +0 -119
  142. package/src/index.ts +0 -171
  143. package/src/init.ts +0 -56
  144. package/src/interaction-tracker.ts +0 -62
  145. package/src/interactive2/__tests__/movable-mock.ts +0 -43
  146. package/src/interactive2/__tests__/movable-point.test.ts +0 -144
  147. package/src/interactive2/__tests__/movable.test.ts +0 -157
  148. package/src/interactive2/interactive-util.test.ts +0 -93
  149. package/src/interactive2/interactive-util.ts +0 -159
  150. package/src/interactive2/movable-helper-methods.ts +0 -166
  151. package/src/interactive2/movable-line-options.ts +0 -419
  152. package/src/interactive2/movable-line.ts +0 -307
  153. package/src/interactive2/movable-point-options.ts +0 -212
  154. package/src/interactive2/movable-point.tsx +0 -585
  155. package/src/interactive2/movable-polygon-options.ts +0 -389
  156. package/src/interactive2/movable-polygon.ts +0 -360
  157. package/src/interactive2/movable.ts +0 -279
  158. package/src/interactive2/objective_.ts +0 -79
  159. package/src/interactive2/types.ts +0 -2
  160. package/src/interactive2/wrapped-defaults.ts +0 -87
  161. package/src/interactive2/wrapped-ellipse.ts +0 -94
  162. package/src/interactive2/wrapped-line.ts +0 -116
  163. package/src/interactive2/wrapped-path.ts +0 -51
  164. package/src/interactive2.ts +0 -70
  165. package/src/item-version.ts +0 -10
  166. package/src/jipt-paragraphs.ts +0 -49
  167. package/src/jquery.mobile.vmouse.js +0 -545
  168. package/src/loading-context.ts +0 -21
  169. package/src/logging/log.test.ts +0 -39
  170. package/src/logging/log.ts +0 -97
  171. package/src/mixins/__tests__/widget-prop-denylist.test.ts +0 -21
  172. package/src/mixins/changeable.ts +0 -133
  173. package/src/mixins/editor-jsonify.ts +0 -13
  174. package/src/mixins/widget-jsonify-deprecated.ts +0 -23
  175. package/src/mixins/widget-prop-denylist.ts +0 -48
  176. package/src/multi-items/__stories__/multi-renderer.stories.tsx +0 -83
  177. package/src/multi-items/__testdata__/multi-renderer.testdata.ts +0 -172
  178. package/src/multi-items/__tests__/__snapshots__/multi-renderer.test.tsx.snap +0 -1164
  179. package/src/multi-items/__tests__/items.test.ts +0 -240
  180. package/src/multi-items/__tests__/multi-renderer.test.tsx +0 -914
  181. package/src/multi-items/__tests__/prop-type-builders.test.ts +0 -133
  182. package/src/multi-items/__tests__/shapes.test.ts +0 -43
  183. package/src/multi-items/__tests__/trees.test.ts +0 -317
  184. package/src/multi-items/item-types.ts +0 -56
  185. package/src/multi-items/items.ts +0 -176
  186. package/src/multi-items/multi-renderer.tsx +0 -569
  187. package/src/multi-items/prop-type-builders.ts +0 -106
  188. package/src/multi-items/shape-types.ts +0 -52
  189. package/src/multi-items/shapes.ts +0 -52
  190. package/src/multi-items/tree-types.ts +0 -47
  191. package/src/multi-items/trees.ts +0 -360
  192. package/src/multi-items.ts +0 -75
  193. package/src/perseus-api.tsx +0 -188
  194. package/src/perseus-env.ts +0 -27
  195. package/src/perseus-error.ts +0 -17
  196. package/src/perseus-markdown.tsx +0 -405
  197. package/src/perseus-types.ts +0 -1366
  198. package/src/perseus-version.ts +0 -9
  199. package/src/question-paragraph.tsx +0 -34
  200. package/src/renderability.ts +0 -109
  201. package/src/renderer.tsx +0 -2000
  202. package/src/server-item-renderer.tsx +0 -495
  203. package/src/sigfigs.ts +0 -490
  204. package/src/styles/articles.less +0 -749
  205. package/src/styles/constants.ts +0 -94
  206. package/src/styles/global-constants.ts +0 -343
  207. package/src/styles/global-styles.ts +0 -306
  208. package/src/styles/khan-exercise.css +0 -1468
  209. package/src/styles/media-queries.ts +0 -47
  210. package/src/styles/perseus-renderer.less +0 -732
  211. package/src/styles/shared.ts +0 -130
  212. package/src/styles/util.less +0 -47
  213. package/src/styles/variables.boostrap.less +0 -277
  214. package/src/styles/variables.less +0 -56
  215. package/src/styles/variables.shared.less +0 -340
  216. package/src/styles/widgets/categorizer.less +0 -38
  217. package/src/styles/widgets/dropdown.less +0 -3
  218. package/src/styles/widgets/expression.less +0 -65
  219. package/src/styles/widgets/graded-group.less +0 -36
  220. package/src/styles/widgets/grapher.less +0 -12
  221. package/src/styles/widgets/group.less +0 -19
  222. package/src/styles/widgets/image.less +0 -54
  223. package/src/styles/widgets/interactive-graph.less +0 -64
  224. package/src/styles/widgets/label-image.less +0 -57
  225. package/src/styles/widgets/matcher.less +0 -8
  226. package/src/styles/widgets/matrix.less +0 -126
  227. package/src/styles/widgets/measurer.less +0 -20
  228. package/src/styles/widgets/orderer.less +0 -98
  229. package/src/styles/widgets/passage.less +0 -154
  230. package/src/styles/widgets/plotter.less +0 -31
  231. package/src/styles/widgets/radio.less +0 -58
  232. package/src/styles/widgets/reaction-diagram.less +0 -35
  233. package/src/styles/widgets/sequence.less +0 -5
  234. package/src/styles/widgets/sortable.less +0 -113
  235. package/src/styles/widgets/table.less +0 -57
  236. package/src/styles/widgets/unit.less +0 -15
  237. package/src/tex-wrangler.ts +0 -182
  238. package/src/translation-linter.ts +0 -126
  239. package/src/traversal.ts +0 -138
  240. package/src/types.ts +0 -513
  241. package/src/util/a11y.ts +0 -23
  242. package/src/util/answer-types.test.ts +0 -114
  243. package/src/util/answer-types.ts +0 -876
  244. package/src/util/colors.ts +0 -93
  245. package/src/util/drawing-transform.test.ts +0 -67
  246. package/src/util/drawing-transform.ts +0 -102
  247. package/src/util/extract-perseus-data.ts +0 -539
  248. package/src/util/fix-passage-refs.ts +0 -121
  249. package/src/util/geometry.test.ts +0 -75
  250. package/src/util/geometry.ts +0 -312
  251. package/src/util/graph-bounds.ts +0 -23
  252. package/src/util/graph-utils.ts +0 -15
  253. package/src/util/graphie.test.ts +0 -1277
  254. package/src/util/graphie.ts +0 -1566
  255. package/src/util/interactive.ts +0 -4172
  256. package/src/util/interval.ts +0 -4
  257. package/src/util/katex-preprocess.ts +0 -14
  258. package/src/util/math.test.ts +0 -11
  259. package/src/util/math.ts +0 -294
  260. package/src/util/mobile-native-utils.test.ts +0 -22
  261. package/src/util/mobile-native-utils.ts +0 -12
  262. package/src/util/parse-perseus-json.test.ts +0 -10
  263. package/src/util/parse-perseus-json.ts +0 -13
  264. package/src/util/react-render.tsx +0 -27
  265. package/src/util/register-all-widgets-for-testing.ts +0 -13
  266. package/src/util/scroll-utils.ts +0 -155
  267. package/src/util/sizing-utils.ts +0 -46
  268. package/src/util/tex.ts +0 -73
  269. package/src/util/url-utils.ts +0 -34
  270. package/src/util.graphie.test.ts +0 -45
  271. package/src/util.graphie.ts +0 -59
  272. package/src/util.ts +0 -966
  273. package/src/version.ts +0 -10
  274. package/src/widget-container.tsx +0 -199
  275. package/src/widgets/__stories__/categorizer.stories.tsx +0 -14
  276. package/src/widgets/__stories__/cs-program.stories.tsx +0 -14
  277. package/src/widgets/__stories__/definition.stories.tsx +0 -114
  278. package/src/widgets/__stories__/dropdown.stories.tsx +0 -14
  279. package/src/widgets/__stories__/explanation.stories.tsx +0 -18
  280. package/src/widgets/__stories__/expression.stories.tsx +0 -145
  281. package/src/widgets/__stories__/graded-group-set.stories.tsx +0 -31
  282. package/src/widgets/__stories__/graded-group.stories.tsx +0 -31
  283. package/src/widgets/__stories__/grapher.stories.tsx +0 -46
  284. package/src/widgets/__stories__/group.stories.tsx +0 -14
  285. package/src/widgets/__stories__/iframe.stories.tsx +0 -14
  286. package/src/widgets/__stories__/image.stories.tsx +0 -85
  287. package/src/widgets/__stories__/input-number.stories.tsx +0 -101
  288. package/src/widgets/__stories__/interaction.stories.tsx +0 -14
  289. package/src/widgets/__stories__/interactive-graph.stories.tsx +0 -60
  290. package/src/widgets/__stories__/label-image.stories.tsx +0 -130
  291. package/src/widgets/__stories__/matcher.stories.tsx +0 -14
  292. package/src/widgets/__stories__/matrix.stories.tsx +0 -14
  293. package/src/widgets/__stories__/number-line.stories.tsx +0 -14
  294. package/src/widgets/__stories__/numeric-input.stories.tsx +0 -105
  295. package/src/widgets/__stories__/orderer.stories.tsx +0 -18
  296. package/src/widgets/__stories__/passage-ref.stories.tsx +0 -33
  297. package/src/widgets/__stories__/passage.stories.tsx +0 -39
  298. package/src/widgets/__stories__/plotter.stories.tsx +0 -27
  299. package/src/widgets/__stories__/radio.stories.tsx +0 -86
  300. package/src/widgets/__stories__/random-widgets.stories.tsx +0 -59
  301. package/src/widgets/__stories__/sorter.stories.tsx +0 -14
  302. package/src/widgets/__stories__/test-keypad-context-wrapper.tsx +0 -66
  303. package/src/widgets/__stories__/unit.stories.tsx +0 -28
  304. package/src/widgets/__stories__/video-transcript-link.stories.tsx +0 -23
  305. package/src/widgets/__stories__/video.stories.tsx +0 -22
  306. package/src/widgets/__testdata__/base-radio.testdata.ts +0 -21
  307. package/src/widgets/__testdata__/categorizer.testdata.ts +0 -89
  308. package/src/widgets/__testdata__/cs-program.testdata.ts +0 -27
  309. package/src/widgets/__testdata__/dropdown.testdata.ts +0 -71
  310. package/src/widgets/__testdata__/explanation.testdata.ts +0 -85
  311. package/src/widgets/__testdata__/expression.testdata.ts +0 -198
  312. package/src/widgets/__testdata__/graded-group-set.testdata.ts +0 -356
  313. package/src/widgets/__testdata__/graded-group.testdata.ts +0 -77
  314. package/src/widgets/__testdata__/grapher.testdata.ts +0 -374
  315. package/src/widgets/__testdata__/group.testdata.ts +0 -153
  316. package/src/widgets/__testdata__/iframe.testdata.ts +0 -35
  317. package/src/widgets/__testdata__/image.testdata.ts +0 -36
  318. package/src/widgets/__testdata__/input-number.testdata.ts +0 -72
  319. package/src/widgets/__testdata__/interaction.testdata.ts +0 -262
  320. package/src/widgets/__testdata__/interactive-graph-random.testdata.ts +0 -269
  321. package/src/widgets/__testdata__/interactive-graph.testdata.ts +0 -644
  322. package/src/widgets/__testdata__/label-image.testdata.ts +0 -308
  323. package/src/widgets/__testdata__/matcher.testdata.ts +0 -33
  324. package/src/widgets/__testdata__/matrix.testdata.ts +0 -28
  325. package/src/widgets/__testdata__/number-line.testdata.ts +0 -30
  326. package/src/widgets/__testdata__/numeric-input.testdata.ts +0 -265
  327. package/src/widgets/__testdata__/orderer.testdata.ts +0 -123
  328. package/src/widgets/__testdata__/passage-ref.testdata.ts +0 -101
  329. package/src/widgets/__testdata__/passage.testdata.ts +0 -95
  330. package/src/widgets/__testdata__/plotter.testdata.ts +0 -36
  331. package/src/widgets/__testdata__/radio.testdata.ts +0 -324
  332. package/src/widgets/__testdata__/randomizers.ts +0 -51
  333. package/src/widgets/__testdata__/sorter.testdata.ts +0 -19
  334. package/src/widgets/__testdata__/video.testdata.ts +0 -61
  335. package/src/widgets/__tests__/__snapshots__/categorizer.test.ts.snap +0 -940
  336. package/src/widgets/__tests__/__snapshots__/cs-program.test.ts.snap +0 -67
  337. package/src/widgets/__tests__/__snapshots__/definition.test.ts.snap +0 -97
  338. package/src/widgets/__tests__/__snapshots__/dropdown.test.ts.snap +0 -133
  339. package/src/widgets/__tests__/__snapshots__/explanation.test.ts.snap +0 -425
  340. package/src/widgets/__tests__/__snapshots__/graded-group-set-jipt.test.ts.snap +0 -729
  341. package/src/widgets/__tests__/__snapshots__/graded-group-set.test.ts.snap +0 -339
  342. package/src/widgets/__tests__/__snapshots__/graded-group.test.ts.snap +0 -801
  343. package/src/widgets/__tests__/__snapshots__/grapher.test.ts.snap +0 -2673
  344. package/src/widgets/__tests__/__snapshots__/group.test.tsx.snap +0 -1211
  345. package/src/widgets/__tests__/__snapshots__/iframe.test.ts.snap +0 -61
  346. package/src/widgets/__tests__/__snapshots__/image.test.ts.snap +0 -378
  347. package/src/widgets/__tests__/__snapshots__/input-number.test.ts.snap +0 -495
  348. package/src/widgets/__tests__/__snapshots__/interaction.test.ts.snap +0 -292
  349. package/src/widgets/__tests__/__snapshots__/interactive-graph.test.ts.snap +0 -2889
  350. package/src/widgets/__tests__/__snapshots__/matcher.test.tsx.snap +0 -883
  351. package/src/widgets/__tests__/__snapshots__/matrix.test.ts.snap +0 -514
  352. package/src/widgets/__tests__/__snapshots__/number-line.test.ts.snap +0 -814
  353. package/src/widgets/__tests__/__snapshots__/numeric-input.test.ts.snap +0 -470
  354. package/src/widgets/__tests__/__snapshots__/orderer.test.ts.snap +0 -243
  355. package/src/widgets/__tests__/__snapshots__/passage-ref.test.ts.snap +0 -434
  356. package/src/widgets/__tests__/__snapshots__/passage.test.tsx.snap +0 -1956
  357. package/src/widgets/__tests__/__snapshots__/plotter.test.tsx.snap +0 -827
  358. package/src/widgets/__tests__/__snapshots__/radio.test.ts.snap +0 -4237
  359. package/src/widgets/__tests__/__snapshots__/unit.test.tsx.snap +0 -20
  360. package/src/widgets/__tests__/__snapshots__/video.test.ts.snap +0 -153
  361. package/src/widgets/__tests__/categorizer.test.ts +0 -203
  362. package/src/widgets/__tests__/cs-program.test.ts +0 -43
  363. package/src/widgets/__tests__/definition.test.ts +0 -136
  364. package/src/widgets/__tests__/dropdown.test.ts +0 -105
  365. package/src/widgets/__tests__/explanation.test.ts +0 -198
  366. package/src/widgets/__tests__/expression-mobile.test.tsx +0 -363
  367. package/src/widgets/__tests__/expression.test.tsx +0 -484
  368. package/src/widgets/__tests__/graded-group-set-jipt.test.ts +0 -30
  369. package/src/widgets/__tests__/graded-group-set.test.ts +0 -288
  370. package/src/widgets/__tests__/graded-group.test.ts +0 -232
  371. package/src/widgets/__tests__/grapher.cypress.ts +0 -576
  372. package/src/widgets/__tests__/grapher.test.ts +0 -33
  373. package/src/widgets/__tests__/group.test.tsx +0 -510
  374. package/src/widgets/__tests__/iframe.test.ts +0 -45
  375. package/src/widgets/__tests__/image.test.ts +0 -62
  376. package/src/widgets/__tests__/input-number.test.ts +0 -354
  377. package/src/widgets/__tests__/interaction.test.ts +0 -31
  378. package/src/widgets/__tests__/interactive-graph.cypress.ts +0 -815
  379. package/src/widgets/__tests__/interactive-graph.test.ts +0 -106
  380. package/src/widgets/__tests__/matcher.test.tsx +0 -176
  381. package/src/widgets/__tests__/matrix.test.ts +0 -82
  382. package/src/widgets/__tests__/number-line.test.ts +0 -79
  383. package/src/widgets/__tests__/numeric-input.test.ts +0 -575
  384. package/src/widgets/__tests__/orderer.test.ts +0 -73
  385. package/src/widgets/__tests__/passage-ref.test.ts +0 -168
  386. package/src/widgets/__tests__/passage.test.tsx +0 -224
  387. package/src/widgets/__tests__/plotter.test.tsx +0 -69
  388. package/src/widgets/__tests__/radio/base-radio.test.tsx +0 -470
  389. package/src/widgets/__tests__/radio/choice-icon.test.tsx +0 -90
  390. package/src/widgets/__tests__/radio/choice.test.tsx +0 -310
  391. package/src/widgets/__tests__/radio/focus-ring.test.tsx +0 -22
  392. package/src/widgets/__tests__/radio/option-status.test.tsx +0 -77
  393. package/src/widgets/__tests__/radio.test.ts +0 -807
  394. package/src/widgets/__tests__/randomizers.test.ts +0 -53
  395. package/src/widgets/__tests__/renderQuestion.tsx +0 -101
  396. package/src/widgets/__tests__/unit.test.tsx +0 -168
  397. package/src/widgets/__tests__/video.test.ts +0 -69
  398. package/src/widgets/categorizer.tsx +0 -344
  399. package/src/widgets/cs-program.tsx +0 -227
  400. package/src/widgets/definition.tsx +0 -121
  401. package/src/widgets/deprecated-standin/__stories__/deprecated-standin.stories.tsx +0 -30
  402. package/src/widgets/deprecated-standin/__tests__/__snapshots__/deprecated-standin.test.ts.snap +0 -70
  403. package/src/widgets/deprecated-standin/__tests__/deprecated-standin.test.ts +0 -93
  404. package/src/widgets/deprecated-standin/index.tsx +0 -58
  405. package/src/widgets/dropdown.tsx +0 -142
  406. package/src/widgets/explanation.tsx +0 -317
  407. package/src/widgets/expression.tsx +0 -707
  408. package/src/widgets/graded-group-answer-bar.tsx +0 -142
  409. package/src/widgets/graded-group-set.tsx +0 -338
  410. package/src/widgets/graded-group.tsx +0 -471
  411. package/src/widgets/grapher/util.tsx +0 -799
  412. package/src/widgets/grapher.tsx +0 -660
  413. package/src/widgets/group.tsx +0 -195
  414. package/src/widgets/iframe.tsx +0 -195
  415. package/src/widgets/image.tsx +0 -312
  416. package/src/widgets/input-number.tsx +0 -412
  417. package/src/widgets/interaction/arrow-picker.tsx +0 -38
  418. package/src/widgets/interaction/color-picker.tsx +0 -69
  419. package/src/widgets/interaction/dash-picker.tsx +0 -45
  420. package/src/widgets/interaction/element-container.tsx +0 -100
  421. package/src/widgets/interaction.tsx +0 -826
  422. package/src/widgets/interactive-graph.tsx +0 -2597
  423. package/src/widgets/label-image/__stories__/answer-choices.stories.tsx +0 -91
  424. package/src/widgets/label-image/__stories__/answer-pill.stories.tsx +0 -62
  425. package/src/widgets/label-image/__stories__/marker.stories.tsx +0 -171
  426. package/src/widgets/label-image/__tests__/answer-pill.test.tsx +0 -75
  427. package/src/widgets/label-image/__tests__/hide-answers-toggle.test.tsx +0 -39
  428. package/src/widgets/label-image/answer-choices.tsx +0 -88
  429. package/src/widgets/label-image/answer-pill.tsx +0 -103
  430. package/src/widgets/label-image/hide-answers-toggle.tsx +0 -40
  431. package/src/widgets/label-image/marker.tsx +0 -268
  432. package/src/widgets/label-image/strings.ts +0 -5
  433. package/src/widgets/label-image/types.ts +0 -27
  434. package/src/widgets/label-image.test.ts +0 -928
  435. package/src/widgets/label-image.tsx +0 -819
  436. package/src/widgets/lights-puzzle.tsx +0 -359
  437. package/src/widgets/matcher.tsx +0 -298
  438. package/src/widgets/matrix.tsx +0 -634
  439. package/src/widgets/measurer.tsx +0 -222
  440. package/src/widgets/molecule/__tests__/layout.test.ts +0 -162
  441. package/src/widgets/molecule/__tests__/parser.test.ts +0 -155
  442. package/src/widgets/molecule/molecule-drawing.ts +0 -173
  443. package/src/widgets/molecule/molecule-layout.ts +0 -362
  444. package/src/widgets/molecule/smiles-parser.ts +0 -296
  445. package/src/widgets/molecule.tsx +0 -172
  446. package/src/widgets/number-line.tsx +0 -862
  447. package/src/widgets/numeric-input.tsx +0 -576
  448. package/src/widgets/orderer.tsx +0 -786
  449. package/src/widgets/passage/__tests__/passage-markdown.test.ts +0 -376
  450. package/src/widgets/passage/passage-markdown.tsx +0 -475
  451. package/src/widgets/passage-ref-target.tsx +0 -76
  452. package/src/widgets/passage-ref.tsx +0 -213
  453. package/src/widgets/passage.tsx +0 -582
  454. package/src/widgets/plotter.tsx +0 -1194
  455. package/src/widgets/radio/__stories__/base-radio.stories.tsx +0 -196
  456. package/src/widgets/radio/__stories__/choice-icon.stories.tsx +0 -166
  457. package/src/widgets/radio/__stories__/choice-none-above.stories.tsx +0 -40
  458. package/src/widgets/radio/__stories__/choice.stories.tsx +0 -137
  459. package/src/widgets/radio/__stories__/focus-ring.stories.tsx +0 -43
  460. package/src/widgets/radio/__stories__/option-status.stories.tsx +0 -103
  461. package/src/widgets/radio/base-radio.tsx +0 -511
  462. package/src/widgets/radio/choice-a11y-text.ts +0 -61
  463. package/src/widgets/radio/choice-icon/choice-icon.tsx +0 -218
  464. package/src/widgets/radio/choice-icon/cross-out-line.tsx +0 -51
  465. package/src/widgets/radio/choice-icon/shared-styles.ts +0 -15
  466. package/src/widgets/radio/choice-none-above.tsx +0 -56
  467. package/src/widgets/radio/choice.jsx.fixture.ts +0 -45
  468. package/src/widgets/radio/choice.tsx +0 -359
  469. package/src/widgets/radio/focus-ring.tsx +0 -57
  470. package/src/widgets/radio/option-status.tsx +0 -98
  471. package/src/widgets/radio/util.test.ts +0 -18
  472. package/src/widgets/radio/util.ts +0 -31
  473. package/src/widgets/radio/widget.tsx +0 -520
  474. package/src/widgets/radio.ts +0 -157
  475. package/src/widgets/reaction-diagram.tsx +0 -144
  476. package/src/widgets/sequence.tsx +0 -142
  477. package/src/widgets/simulator.tsx +0 -829
  478. package/src/widgets/sorter.tsx +0 -155
  479. package/src/widgets/table.tsx +0 -393
  480. package/src/widgets/unit.tsx +0 -374
  481. package/src/widgets/video-transcript-link.test.tsx +0 -213
  482. package/src/widgets/video-transcript-link.tsx +0 -84
  483. package/src/widgets/video.tsx +0 -135
  484. package/src/widgets.ts +0 -489
  485. package/src/zoom.ts +0 -555
  486. package/tsconfig-build.json +0 -26
  487. package/tsconfig-build.tsbuildinfo +0 -1
package/dist/index.js CHANGED
@@ -3999,10 +3999,10 @@ class FixedToResponsive extends React__namespace.Component {
3999
3999
 
4000
4000
  /* Local helper methods. */
4001
4001
 
4002
- function getKey(eventName, id) {
4002
+ function getKey$1(eventName, id) {
4003
4003
  return eventName + ":" + id;
4004
4004
  }
4005
- function getEventName(key) {
4005
+ function getEventName$1(key) {
4006
4006
  return key.split(":")[0];
4007
4007
  }
4008
4008
  const MovableHelperMethods = {
@@ -4083,7 +4083,7 @@ const MovableHelperMethods = {
4083
4083
 
4084
4084
  // If there's an existing handler, replace it by using its index in
4085
4085
  // `this.state[eventName]`; otherwise, add this handler to the end
4086
- const key = getKey(eventName, id);
4086
+ const key = getKey$1(eventName, id);
4087
4087
  const index = this._listenerMap[key] = this._listenerMap[key] || this.state[eventName].length;
4088
4088
  this.state[eventName][index] = func;
4089
4089
  },
@@ -4095,7 +4095,7 @@ const MovableHelperMethods = {
4095
4095
  */
4096
4096
  unlisten: function (eventName, id) {
4097
4097
  this._listenerMap = this._listenerMap || {};
4098
- const key = getKey(eventName, id);
4098
+ const key = getKey$1(eventName, id);
4099
4099
  const index = this._listenerMap[key];
4100
4100
  if (index !== undefined) {
4101
4101
  // Remove handler from list of event handlers and listenerMap
@@ -4105,7 +4105,7 @@ const MovableHelperMethods = {
4105
4105
  // Re-index existing events: if they occur after `index`, decrement
4106
4106
  const keys = ___default["default"].keys(this._listenerMap);
4107
4107
  ___default["default"].each(keys, function (key) {
4108
- if (getEventName(key) === eventName &&
4108
+ if (getEventName$1(key) === eventName &&
4109
4109
  // @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
4110
4110
  this._listenerMap[key] > index) {
4111
4111
  // @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
@@ -8707,6 +8707,9 @@ class Graphie$1 {
8707
8707
  // TODO(benchristel): xpixels and ypixels are never used by this class, but
8708
8708
  // other code reaches in to access them :(
8709
8709
  // Refactor to accessor methods that look at this.dimensions.
8710
+ // set by Movables
8711
+ // TODO(benchristel): consider putting this state on the Movable instead of
8712
+ // on the Graphie
8710
8713
  constructor(el) {
8711
8714
  this.el = el;
8712
8715
  $__default["default"](el).css("position", "relative");
@@ -9538,6 +9541,11 @@ class Graphie$1 {
9538
9541
  });
9539
9542
  return processed;
9540
9543
  }
9544
+
9545
+ // This is a stub that's overridden in interactive.ts
9546
+ getMouseCoord(event) {
9547
+ throw new Error("getMouseCoord is a stub, and is not implemented");
9548
+ }
9541
9549
  }
9542
9550
  const labelDirections = {
9543
9551
  center: [-0.5, -0.5],
@@ -13746,8 +13754,7 @@ var GraphieClasses = {
13746
13754
  const normalizeOptions$3 = InteractiveUtil.normalizeOptions;
13747
13755
  const assert$8 = InteractiveUtil.assert;
13748
13756
 
13749
- // Default "props" and "state". Both are added to this.state and
13750
- // receive magic getter methods (this.isHovering() etc).
13757
+ // Default "props" and "state". Both are added to this.state.
13751
13758
  // However, properties in DEFAULT_PROPS are updated on `modify()`,
13752
13759
  // while those in DEFAULT_STATE persist and are not updated.
13753
13760
  // Things that the user might want to change should be on "props",
@@ -13762,29 +13769,26 @@ const DEFAULT_STATE$3 = {
13762
13769
  isDragging: false,
13763
13770
  mouseTarget: null
13764
13771
  };
13765
- const Movable = function (graphie, options) {
13766
- // @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
13767
- ___default["default"].extend(this, {
13768
- graphie,
13769
- state: {
13770
- // Set here because this must be unique for each instance
13772
+ class Movable {
13773
+ // TODO(benchristel): delete _listenerMap; it's unused
13774
+ _listenerMap = {};
13775
+ constructor(graphie, options) {
13776
+ this.graphie = graphie;
13777
+ this.state = {
13771
13778
  id: ___default["default"].uniqueId("movable")
13772
- }
13773
- });
13774
-
13775
- // We only set DEFAULT_STATE once, here
13776
- // @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
13777
- this.modify(___default["default"].extend({}, DEFAULT_STATE$3, options));
13778
- };
13779
- InteractiveUtil.createGettersFor(Movable, ___default["default"].extend({}, DEFAULT_PROPS$3, DEFAULT_STATE$3));
13780
- InteractiveUtil.addMovableHelperMethodsTo(Movable);
13781
- ___default["default"].extend(Movable.prototype, {
13782
- cloneState: function () {
13783
- return {
13784
- ...this.state
13785
13779
  };
13786
- },
13787
- _createDefaultState: function () {
13780
+ this.modify({
13781
+ ...DEFAULT_STATE$3,
13782
+ ...options
13783
+ });
13784
+ }
13785
+ modify(options) {
13786
+ this.update({
13787
+ ...this._createDefaultState(),
13788
+ ...options
13789
+ });
13790
+ }
13791
+ _createDefaultState() {
13788
13792
  return {
13789
13793
  id: this.state.id,
13790
13794
  add: [],
@@ -13799,66 +13803,11 @@ ___default["default"].extend(Movable.prototype, {
13799
13803
  // be persistent, and updated appropriately in modify()
13800
13804
  ...DEFAULT_PROPS$3
13801
13805
  };
13802
- },
13803
- /**
13804
- * Resets the object to its state as if it were constructed with
13805
- * `options` originally. The only state maintained is `state.id`
13806
- *
13807
- * Analogous to React.js's replaceProps
13808
- */
13809
- modify: function (options) {
13810
- this.update({
13811
- ...this._createDefaultState(),
13812
- ...options
13813
- });
13814
- },
13815
- /**
13816
- * Simulates a mouse grab event on the movable object.
13817
- */
13818
- grab: function (coord) {
13819
- assert$8(kmath.point.is(coord));
13820
- const self = this;
13821
- const graphie = self.graphie;
13822
- const state = self.state;
13823
- state.isHovering = true;
13824
- state.isDragging = true;
13825
- graphie.isDragging = true;
13826
- const startMouseCoord = coord;
13827
- let prevMouseCoord = startMouseCoord;
13828
- self._fireEvent(state.onMoveStart, startMouseCoord, startMouseCoord);
13829
- const moveHandler = function (e) {
13830
- e.preventDefault();
13831
- const mouseCoord = graphie.getMouseCoord(e);
13832
- self._fireEvent(state.onMove, mouseCoord, prevMouseCoord);
13833
- self.draw();
13834
- prevMouseCoord = mouseCoord;
13835
- };
13836
- const upHandler = function (e) {
13837
- $__default["default"](document).unbind("vmousemove", moveHandler);
13838
- $__default["default"](document).unbind("vmouseup", upHandler);
13839
- if (state.isHovering) {
13840
- self._fireEvent(state.onClick, prevMouseCoord, startMouseCoord);
13841
- }
13842
- state.isHovering = self.state.isMouseOver;
13843
- state.isDragging = false;
13844
- graphie.isDragging = false;
13845
- self._fireEvent(state.onMoveEnd, prevMouseCoord, startMouseCoord);
13846
- self.draw();
13847
- };
13848
- $__default["default"](document).bind("vmousemove", moveHandler);
13849
- $__default["default"](document).bind("vmouseup", upHandler);
13850
- },
13851
- /**
13852
- * Adjusts constructor parameters without changing previous settings
13853
- * for any option not specified
13854
- *
13855
- * Analogous to React.js's setProps
13856
- */
13857
- update: function (options) {
13858
- const self = this;
13859
- const graphie = self.graphie;
13860
- const prevState = self.cloneState();
13861
- const state = ___default["default"].extend(self.state, normalizeOptions$3(options));
13806
+ }
13807
+ update(options) {
13808
+ const graphie = this.graphie;
13809
+ const prevState = this.cloneState();
13810
+ const state = Object.assign(this.state, normalizeOptions$3(options));
13862
13811
 
13863
13812
  // the invisible shape in front of the point that gets mouse events
13864
13813
  if (state.mouseTarget && !prevState.mouseTarget) {
@@ -13870,24 +13819,24 @@ ___default["default"].extend(Movable.prototype, {
13870
13819
  }
13871
13820
  const isMouse = !("ontouchstart" in window);
13872
13821
  if (isMouse) {
13873
- $mouseTarget.on("vmouseover", function () {
13822
+ $mouseTarget.on("vmouseover", () => {
13874
13823
  state.isMouseOver = true;
13875
13824
  if (!graphie.isDragging) {
13876
13825
  state.isHovering = true;
13877
13826
  }
13878
- if (self.state.added) {
13827
+ if (this.state.added) {
13879
13828
  // Avoid drawing if the point has been removed
13880
- self.draw();
13829
+ this.draw();
13881
13830
  }
13882
13831
  });
13883
- $mouseTarget.on("vmouseout", function () {
13832
+ $mouseTarget.on("vmouseout", () => {
13884
13833
  state.isMouseOver = false;
13885
13834
  if (!state.isDragging) {
13886
13835
  state.isHovering = false;
13887
13836
  }
13888
- if (self.state.added) {
13837
+ if (this.state.added) {
13889
13838
  // Avoid drawing if the point has been removed
13890
- self.draw();
13839
+ this.draw();
13891
13840
  }
13892
13841
  });
13893
13842
  }
@@ -13899,13 +13848,13 @@ ___default["default"].extend(Movable.prototype, {
13899
13848
  }, {
13900
13849
  passive: false
13901
13850
  });
13902
- $mouseTarget.on("vmousedown", function (e) {
13851
+ $mouseTarget.on("vmousedown", e => {
13903
13852
  if (e.which !== 0 && e.which !== 1) {
13904
13853
  return;
13905
13854
  }
13906
13855
  e.preventDefault();
13907
13856
  const mouseCoord = graphie.getMouseCoord(e);
13908
- self.grab(mouseCoord);
13857
+ this.grab(mouseCoord);
13909
13858
  });
13910
13859
  }
13911
13860
  if (state.mouseTarget && state.cursor !== undefined) {
@@ -13922,39 +13871,217 @@ ___default["default"].extend(Movable.prototype, {
13922
13871
 
13923
13872
  // Trigger an add event if this hasn't been added before
13924
13873
  if (!state.added) {
13925
- self._fireEvent(state.modify, self.cloneState(), {});
13874
+ // TODO(benchristel): No one seems to handle the modify event. Can
13875
+ // we delete this?
13876
+ // @ts-expect-error - TS2345: Argument of type '{}' is not assignable to parameter of type 'State'.
13877
+ this._fireEvent(state.modify, this.cloneState(), {});
13926
13878
  state.added = true;
13927
13879
 
13928
13880
  // Update the state for `added` and in case the add event
13929
13881
  // changed it
13930
- self.prevState = self.cloneState();
13882
+ this.prevState = this.cloneState();
13931
13883
  }
13932
13884
 
13933
13885
  // Trigger a modify event
13934
- self._fireEvent(state.modify, self.cloneState(), self.prevState);
13935
- },
13936
- remove: function () {
13937
- this.state.added = false;
13938
- this._fireEvent(this.state.remove);
13939
- if (this.state.mouseTarget) {
13940
- $__default["default"](this.state.mouseTarget).off();
13941
- this.state.mouseTarget.remove();
13942
- this.state.mouseTarget = null;
13886
+ this._fireEvent(state.modify, this.cloneState(), this.prevState);
13887
+ }
13888
+ cloneState() {
13889
+ return {
13890
+ ...this.state
13891
+ };
13892
+ }
13893
+
13894
+ /**
13895
+ * Fire an onSomething type event to all functions in listeners
13896
+ */
13897
+ _fireEvent(listeners) {
13898
+ for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
13899
+ args[_key - 1] = arguments[_key];
13943
13900
  }
13944
- },
13901
+ if (listeners == null) {
13902
+ return;
13903
+ }
13904
+ for (const listener of listeners) {
13905
+ listener.call(this, ...args);
13906
+ }
13907
+ }
13908
+
13909
+ /**
13910
+ * Call all draw functions, and update our prevState for the next
13911
+ * draw function
13912
+ */
13913
+ draw() {
13914
+ const currState = this.cloneState();
13915
+ this._fireEvent(this.state.draw, currState, this.prevState);
13916
+ this.prevState = currState;
13917
+ }
13918
+
13919
+ /**
13920
+ * Simulates a mouse grab event on the movable object.
13921
+ */
13922
+ grab(coord) {
13923
+ assert$8(kmath.point.is(coord));
13924
+ const graphie = this.graphie;
13925
+ const state = this.state;
13926
+ state.isHovering = true;
13927
+ state.isDragging = true;
13928
+ graphie.isDragging = true;
13929
+ const startMouseCoord = coord;
13930
+ let prevMouseCoord = startMouseCoord;
13931
+ this._fireEvent(state.onMoveStart, startMouseCoord, startMouseCoord);
13932
+ const moveHandler = e => {
13933
+ e.preventDefault();
13934
+ const mouseCoord = graphie.getMouseCoord(e);
13935
+ this._fireEvent(state.onMove, mouseCoord, prevMouseCoord);
13936
+ this.draw();
13937
+ prevMouseCoord = mouseCoord;
13938
+ };
13939
+ const upHandler = () => {
13940
+ $__default["default"](document).unbind("vmousemove", moveHandler);
13941
+ $__default["default"](document).unbind("vmouseup", upHandler);
13942
+ if (state.isHovering) {
13943
+ this._fireEvent(state.onClick, prevMouseCoord, startMouseCoord);
13944
+ }
13945
+ state.isHovering = this.state.isMouseOver;
13946
+ state.isDragging = false;
13947
+ graphie.isDragging = false;
13948
+ this._fireEvent(state.onMoveEnd, prevMouseCoord, startMouseCoord);
13949
+ this.draw();
13950
+ };
13951
+ $__default["default"](document).bind("vmousemove", moveHandler);
13952
+ $__default["default"](document).bind("vmouseup", upHandler);
13953
+ }
13954
+ _applyConstraints(current, previous, extraOptions) {
13955
+ let skipRemaining = false;
13956
+ return (this.state.constraints ?? []).reduce((memo, constraint) => {
13957
+ // A move that has been cancelled won't be propagated to later
13958
+ // constraints calls
13959
+ if (memo === false) {
13960
+ return false;
13961
+ }
13962
+ if (skipRemaining) {
13963
+ return memo;
13964
+ }
13965
+ const result = constraint.call(this, memo, previous, {
13966
+ onSkipRemaining: () => {
13967
+ skipRemaining = true;
13968
+ },
13969
+ ...extraOptions
13970
+ });
13971
+ if (result === false) {
13972
+ // Returning false cancels the move
13973
+ return false;
13974
+ }
13975
+ if (kmath.point.is(result, 2)) {
13976
+ // Returning a coord from constraints overrides the move
13977
+ return result;
13978
+ }
13979
+ if (result === true || result == null) {
13980
+ // Returning true or undefined allow the move to occur
13981
+ return memo;
13982
+ }
13983
+ // Anything else is an error
13984
+ throw new PerseusError("Constraint returned invalid result: " + result, Errors.Internal);
13985
+ }, current);
13986
+ }
13987
+
13945
13988
  // Change z-order to back
13946
- toBack: function () {
13989
+ toBack() {
13947
13990
  if (this.state.mouseTarget) {
13948
13991
  this.state.mouseTarget.toBack();
13949
13992
  }
13950
- },
13993
+ }
13994
+
13951
13995
  // Change z-order to front
13952
- toFront: function () {
13996
+ toFront() {
13953
13997
  if (this.state.mouseTarget) {
13954
13998
  this.state.mouseTarget.toFront();
13955
13999
  }
13956
14000
  }
13957
- });
14001
+
14002
+ /**
14003
+ * Add a listener to any event: startMove, constraints, onMove, onMoveEnd,
14004
+ * etc. If a listener is already bound to the given eventName and id, then
14005
+ * it is overwritten by func.
14006
+ *
14007
+ * eventName: the string name of the event to listen to. one of:
14008
+ * "onMoveStart", "onMove", "onMoveEnd", "draw", "remove"
14009
+ *
14010
+ * id: a string id that can be used to remove this event at a later time
14011
+ * note: adding multiple listeners with the same id is undefined behavior
14012
+ *
14013
+ * func: the function to call when the event happens, which is called
14014
+ * with the event's standard parameters [usually (coord, prevCoord) or
14015
+ * (state, prevState)]
14016
+ */
14017
+ listen(eventName, id, func) {
14018
+ this._listenerMap = this._listenerMap || {};
14019
+
14020
+ // If there's an existing handler, replace it by using its index in
14021
+ // `this.state[eventName]`; otherwise, add this handler to the end
14022
+ const key = getKey(eventName, id);
14023
+ const index = this._listenerMap[key] = this._listenerMap[key] || this.state[eventName].length;
14024
+ this.state[eventName][index] = func;
14025
+ }
14026
+
14027
+ /**
14028
+ * Remove a previously added listener, by the id specified in the
14029
+ * corresponding listen() call
14030
+ *
14031
+ * If the given id has not been registered already, this is a no-op
14032
+ */
14033
+ unlisten(eventName, id) {
14034
+ this._listenerMap = this._listenerMap || {};
14035
+ const key = getKey(eventName, id);
14036
+ const index = this._listenerMap[key];
14037
+ if (index !== undefined) {
14038
+ // Remove handler from list of event handlers and listenerMap
14039
+ this.state[eventName].splice(index, 1);
14040
+ delete this._listenerMap[key];
14041
+
14042
+ // Re-index existing events: if they occur after `index`, decrement
14043
+ const keys = ___default["default"].keys(this._listenerMap);
14044
+ keys.forEach(key => {
14045
+ if (getEventName(key) === eventName && this._listenerMap[key] > index) {
14046
+ this._listenerMap[key]--;
14047
+ }
14048
+ });
14049
+ }
14050
+ }
14051
+ remove() {
14052
+ this.state.added = false;
14053
+ this._fireEvent(this.state.remove);
14054
+ if (this.state.mouseTarget) {
14055
+ $__default["default"](this.state.mouseTarget).off();
14056
+ this.state.mouseTarget.remove();
14057
+ this.state.mouseTarget = null;
14058
+ }
14059
+ }
14060
+ cursor() {
14061
+ return this.state.cursor;
14062
+ }
14063
+ added() {
14064
+ return this.state.added;
14065
+ }
14066
+ isHovering() {
14067
+ return this.state.isHovering;
14068
+ }
14069
+ isMouseOver() {
14070
+ return this.state.isMouseOver;
14071
+ }
14072
+ isDragging() {
14073
+ return this.state.isDragging;
14074
+ }
14075
+ mouseTarget() {
14076
+ return this.state.mouseTarget;
14077
+ }
14078
+ }
14079
+ function getKey(eventName, id) {
14080
+ return eventName + ":" + id;
14081
+ }
14082
+ function getEventName(key) {
14083
+ return key.split(":")[0];
14084
+ }
13958
14085
 
13959
14086
  /* eslint-disable @babel/no-invalid-this */
13960
14087
  /**
@@ -14800,31 +14927,39 @@ const constraints$1 = {
14800
14927
  snap: function (snap) {
14801
14928
  return function (coord) {
14802
14929
  if (snap === null) {
14803
- // NOTE(kevinb): this should probably return the original point
14930
+ // TODO(benchristel), NOTE(kevinb): this should probably return
14931
+ // the original point
14804
14932
  return true;
14805
14933
  }
14806
- // @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
14807
- snap = snap || this.graphie.snap;
14808
- return kmath.point.roundTo(coord, snap);
14934
+ // @ts-expect-error - TS2339: Property 'snap' does not exist on type 'Graphie'.
14935
+ return kmath.point.roundTo(coord, snap || this.graphie.snap);
14809
14936
  };
14810
14937
  },
14811
- bound: function (range, snap, paddingPx) {
14812
- if (paddingPx === undefined) {
14813
- if (range === undefined) {
14814
- paddingPx = 10;
14938
+ bound: function (range, snap, optionalPaddingPx) {
14939
+ const paddingPx = (() => {
14940
+ if (optionalPaddingPx === undefined) {
14941
+ if (range === undefined) {
14942
+ return 10;
14943
+ } else {
14944
+ return 0;
14945
+ }
14815
14946
  } else {
14816
- paddingPx = 0;
14947
+ return optionalPaddingPx;
14817
14948
  }
14818
- }
14949
+ })();
14819
14950
  return function (coord, prev, options) {
14820
- // @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
14821
14951
  const graphie = this.graphie;
14822
14952
  range = range || graphie.range;
14823
14953
  if (snap === undefined) {
14954
+ // @ts-expect-error - Property 'snap' does not exist on type 'Graphie'.
14824
14955
  snap = graphie.snap;
14825
14956
  }
14826
- let lower = graphie.unscalePoint([paddingPx, graphie.ypixels - paddingPx]);
14827
- let upper = graphie.unscalePoint([graphie.xpixels - paddingPx, paddingPx]);
14957
+ let lower = graphie.unscalePoint([paddingPx,
14958
+ // @ts-expect-error - 'graphie.ypixels' is possibly 'undefined'.
14959
+ graphie.ypixels - paddingPx]);
14960
+ let upper = graphie.unscalePoint([
14961
+ // @ts-expect-error - 'graphie.ypixels' is possibly 'undefined'.
14962
+ graphie.xpixels - paddingPx, paddingPx]);
14828
14963
  if (snap) {
14829
14964
  lower = kmath.point.ceilTo(lower, snap);
14830
14965
  upper = kmath.point.floorTo(upper, snap);
@@ -41611,7 +41746,7 @@ const init = function (options) {
41611
41746
 
41612
41747
  // This file is processed by a Rollup plugin (replace) to inject the production
41613
41748
  const libName = "@khanacademy/perseus";
41614
- const libVersion = "19.1.4";
41749
+ const libVersion = "19.1.6";
41615
41750
  perseusCore.addLibraryVersionToPerseusDebug(libName, libVersion);
41616
41751
 
41617
41752
  const apiVersion = {