@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
@@ -32,6 +32,9 @@ type DefaultProps = {
32
32
  };
33
33
  interface Movable {
34
34
  remove(): void;
35
+ props: unknown;
36
+ modify(graphie: GraphieDrawingContext): "reordered" | undefined;
37
+ toFront(): void;
35
38
  }
36
39
  declare class Graphie extends React.Component<Props> {
37
40
  graphieDivRef: React.RefObject<HTMLDivElement>;
@@ -56,7 +59,12 @@ declare class Graphie extends React.Component<Props> {
56
59
  _scale: () => Coord;
57
60
  _setupGraphie: () => void;
58
61
  _removeMovables: () => void;
59
- _renderMovables: (children: ReadonlyArray<any>, arg2: any) => React.ReactElement;
62
+ _renderMovables: (children: ReadonlyArray<any>, arg2: {
63
+ nextKey: number;
64
+ graphie: GraphieDrawingContext;
65
+ oldMovables: Record<string, Movable>;
66
+ newMovables: Record<string, Movable>;
67
+ }) => React.ReactElement;
60
68
  _updateMovables: () => void;
61
69
  render(): React.ReactNode;
62
70
  }
package/dist/es/index.js CHANGED
@@ -3975,10 +3975,10 @@ FixedToResponsive.defaultProps = {
3975
3975
 
3976
3976
  /* Local helper methods. */
3977
3977
 
3978
- function getKey(eventName, id) {
3978
+ function getKey$1(eventName, id) {
3979
3979
  return eventName + ":" + id;
3980
3980
  }
3981
- function getEventName(key) {
3981
+ function getEventName$1(key) {
3982
3982
  return key.split(":")[0];
3983
3983
  }
3984
3984
  const MovableHelperMethods = {
@@ -4055,7 +4055,7 @@ const MovableHelperMethods = {
4055
4055
 
4056
4056
  // If there's an existing handler, replace it by using its index in
4057
4057
  // `this.state[eventName]`; otherwise, add this handler to the end
4058
- const key = getKey(eventName, id);
4058
+ const key = getKey$1(eventName, id);
4059
4059
  const index = this._listenerMap[key] = this._listenerMap[key] || this.state[eventName].length;
4060
4060
  this.state[eventName][index] = func;
4061
4061
  },
@@ -4067,7 +4067,7 @@ const MovableHelperMethods = {
4067
4067
  */
4068
4068
  unlisten: function (eventName, id) {
4069
4069
  this._listenerMap = this._listenerMap || {};
4070
- const key = getKey(eventName, id);
4070
+ const key = getKey$1(eventName, id);
4071
4071
  const index = this._listenerMap[key];
4072
4072
  if (index !== undefined) {
4073
4073
  // Remove handler from list of event handlers and listenerMap
@@ -4077,7 +4077,7 @@ const MovableHelperMethods = {
4077
4077
  // Re-index existing events: if they occur after `index`, decrement
4078
4078
  const keys = _.keys(this._listenerMap);
4079
4079
  _.each(keys, function (key) {
4080
- if (getEventName(key) === eventName &&
4080
+ if (getEventName$1(key) === eventName &&
4081
4081
  // @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
4082
4082
  this._listenerMap[key] > index) {
4083
4083
  // @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
@@ -8705,6 +8705,10 @@ class Graphie$1 {
8705
8705
  // Refactor to accessor methods that look at this.dimensions.
8706
8706
  this.xpixels = void 0;
8707
8707
  this.ypixels = void 0;
8708
+ // set by Movables
8709
+ // TODO(benchristel): consider putting this state on the Movable instead of
8710
+ // on the Graphie
8711
+ this.isDragging = void 0;
8708
8712
  this.label = (point, text, direction, arg4, arg5) => {
8709
8713
  const style = typeof arg4 === "object" ? arg4 : arg5;
8710
8714
  const latex = typeof arg4 === "boolean" ? arg4 : true;
@@ -9526,6 +9530,11 @@ class Graphie$1 {
9526
9530
  });
9527
9531
  return processed;
9528
9532
  }
9533
+
9534
+ // This is a stub that's overridden in interactive.ts
9535
+ getMouseCoord(event) {
9536
+ throw new Error("getMouseCoord is a stub, and is not implemented");
9537
+ }
9529
9538
  }
9530
9539
  const labelDirections = {
9531
9540
  center: [-0.5, -0.5],
@@ -13722,8 +13731,7 @@ var GraphieClasses = {
13722
13731
  const normalizeOptions$3 = InteractiveUtil.normalizeOptions;
13723
13732
  const assert$8 = InteractiveUtil.assert;
13724
13733
 
13725
- // Default "props" and "state". Both are added to this.state and
13726
- // receive magic getter methods (this.isHovering() etc).
13734
+ // Default "props" and "state". Both are added to this.state.
13727
13735
  // However, properties in DEFAULT_PROPS are updated on `modify()`,
13728
13736
  // while those in DEFAULT_STATE persist and are not updated.
13729
13737
  // Things that the user might want to change should be on "props",
@@ -13738,27 +13746,23 @@ const DEFAULT_STATE$3 = {
13738
13746
  isDragging: false,
13739
13747
  mouseTarget: null
13740
13748
  };
13741
- const Movable = function Movable(graphie, options) {
13742
- // @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
13743
- _.extend(this, {
13744
- graphie,
13745
- state: {
13746
- // Set here because this must be unique for each instance
13749
+ class Movable {
13750
+ constructor(graphie, options) {
13751
+ this.graphie = void 0;
13752
+ this.state = void 0;
13753
+ this.prevState = void 0;
13754
+ // TODO(benchristel): delete _listenerMap; it's unused
13755
+ this._listenerMap = {};
13756
+ this.graphie = graphie;
13757
+ this.state = {
13747
13758
  id: _.uniqueId("movable")
13748
- }
13749
- });
13750
-
13751
- // We only set DEFAULT_STATE once, here
13752
- // @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
13753
- this.modify(_.extend({}, DEFAULT_STATE$3, options));
13754
- };
13755
- InteractiveUtil.createGettersFor(Movable, _.extend({}, DEFAULT_PROPS$3, DEFAULT_STATE$3));
13756
- InteractiveUtil.addMovableHelperMethodsTo(Movable);
13757
- _.extend(Movable.prototype, {
13758
- cloneState: function () {
13759
- return _extends({}, this.state);
13760
- },
13761
- _createDefaultState: function () {
13759
+ };
13760
+ this.modify(_extends({}, DEFAULT_STATE$3, options));
13761
+ }
13762
+ modify(options) {
13763
+ this.update(_extends({}, this._createDefaultState(), options));
13764
+ }
13765
+ _createDefaultState() {
13762
13766
  return _extends({
13763
13767
  id: this.state.id,
13764
13768
  add: [],
@@ -13770,63 +13774,11 @@ _.extend(Movable.prototype, {
13770
13774
  onMoveEnd: [],
13771
13775
  onClick: []
13772
13776
  }, DEFAULT_PROPS$3);
13773
- },
13774
- /**
13775
- * Resets the object to its state as if it were constructed with
13776
- * `options` originally. The only state maintained is `state.id`
13777
- *
13778
- * Analogous to React.js's replaceProps
13779
- */
13780
- modify: function (options) {
13781
- this.update(_extends({}, this._createDefaultState(), options));
13782
- },
13783
- /**
13784
- * Simulates a mouse grab event on the movable object.
13785
- */
13786
- grab: function (coord) {
13787
- assert$8(point.is(coord));
13788
- const self = this;
13789
- const graphie = self.graphie;
13790
- const state = self.state;
13791
- state.isHovering = true;
13792
- state.isDragging = true;
13793
- graphie.isDragging = true;
13794
- const startMouseCoord = coord;
13795
- let prevMouseCoord = startMouseCoord;
13796
- self._fireEvent(state.onMoveStart, startMouseCoord, startMouseCoord);
13797
- const moveHandler = function moveHandler(e) {
13798
- e.preventDefault();
13799
- const mouseCoord = graphie.getMouseCoord(e);
13800
- self._fireEvent(state.onMove, mouseCoord, prevMouseCoord);
13801
- self.draw();
13802
- prevMouseCoord = mouseCoord;
13803
- };
13804
- const upHandler = function upHandler(e) {
13805
- $(document).unbind("vmousemove", moveHandler);
13806
- $(document).unbind("vmouseup", upHandler);
13807
- if (state.isHovering) {
13808
- self._fireEvent(state.onClick, prevMouseCoord, startMouseCoord);
13809
- }
13810
- state.isHovering = self.state.isMouseOver;
13811
- state.isDragging = false;
13812
- graphie.isDragging = false;
13813
- self._fireEvent(state.onMoveEnd, prevMouseCoord, startMouseCoord);
13814
- self.draw();
13815
- };
13816
- $(document).bind("vmousemove", moveHandler);
13817
- $(document).bind("vmouseup", upHandler);
13818
- },
13819
- /**
13820
- * Adjusts constructor parameters without changing previous settings
13821
- * for any option not specified
13822
- *
13823
- * Analogous to React.js's setProps
13824
- */
13825
- update: function (options) {
13826
- const self = this;
13827
- const graphie = self.graphie;
13828
- const prevState = self.cloneState();
13829
- const state = _.extend(self.state, normalizeOptions$3(options));
13777
+ }
13778
+ update(options) {
13779
+ const graphie = this.graphie;
13780
+ const prevState = this.cloneState();
13781
+ const state = Object.assign(this.state, normalizeOptions$3(options));
13830
13782
 
13831
13783
  // the invisible shape in front of the point that gets mouse events
13832
13784
  if (state.mouseTarget && !prevState.mouseTarget) {
@@ -13838,24 +13790,24 @@ _.extend(Movable.prototype, {
13838
13790
  }
13839
13791
  const isMouse = !("ontouchstart" in window);
13840
13792
  if (isMouse) {
13841
- $mouseTarget.on("vmouseover", function () {
13793
+ $mouseTarget.on("vmouseover", () => {
13842
13794
  state.isMouseOver = true;
13843
13795
  if (!graphie.isDragging) {
13844
13796
  state.isHovering = true;
13845
13797
  }
13846
- if (self.state.added) {
13798
+ if (this.state.added) {
13847
13799
  // Avoid drawing if the point has been removed
13848
- self.draw();
13800
+ this.draw();
13849
13801
  }
13850
13802
  });
13851
- $mouseTarget.on("vmouseout", function () {
13803
+ $mouseTarget.on("vmouseout", () => {
13852
13804
  state.isMouseOver = false;
13853
13805
  if (!state.isDragging) {
13854
13806
  state.isHovering = false;
13855
13807
  }
13856
- if (self.state.added) {
13808
+ if (this.state.added) {
13857
13809
  // Avoid drawing if the point has been removed
13858
- self.draw();
13810
+ this.draw();
13859
13811
  }
13860
13812
  });
13861
13813
  }
@@ -13867,13 +13819,13 @@ _.extend(Movable.prototype, {
13867
13819
  }, {
13868
13820
  passive: false
13869
13821
  });
13870
- $mouseTarget.on("vmousedown", function (e) {
13822
+ $mouseTarget.on("vmousedown", e => {
13871
13823
  if (e.which !== 0 && e.which !== 1) {
13872
13824
  return;
13873
13825
  }
13874
13826
  e.preventDefault();
13875
13827
  const mouseCoord = graphie.getMouseCoord(e);
13876
- self.grab(mouseCoord);
13828
+ this.grab(mouseCoord);
13877
13829
  });
13878
13830
  }
13879
13831
  if (state.mouseTarget && state.cursor !== undefined) {
@@ -13890,39 +13842,212 @@ _.extend(Movable.prototype, {
13890
13842
 
13891
13843
  // Trigger an add event if this hasn't been added before
13892
13844
  if (!state.added) {
13893
- self._fireEvent(state.modify, self.cloneState(), {});
13845
+ // TODO(benchristel): No one seems to handle the modify event. Can
13846
+ // we delete this?
13847
+ // @ts-expect-error - TS2345: Argument of type '{}' is not assignable to parameter of type 'State'.
13848
+ this._fireEvent(state.modify, this.cloneState(), {});
13894
13849
  state.added = true;
13895
13850
 
13896
13851
  // Update the state for `added` and in case the add event
13897
13852
  // changed it
13898
- self.prevState = self.cloneState();
13853
+ this.prevState = this.cloneState();
13899
13854
  }
13900
13855
 
13901
13856
  // Trigger a modify event
13902
- self._fireEvent(state.modify, self.cloneState(), self.prevState);
13903
- },
13904
- remove: function () {
13905
- this.state.added = false;
13906
- this._fireEvent(this.state.remove);
13907
- if (this.state.mouseTarget) {
13908
- $(this.state.mouseTarget).off();
13909
- this.state.mouseTarget.remove();
13910
- this.state.mouseTarget = null;
13857
+ this._fireEvent(state.modify, this.cloneState(), this.prevState);
13858
+ }
13859
+ cloneState() {
13860
+ return _extends({}, this.state);
13861
+ }
13862
+
13863
+ /**
13864
+ * Fire an onSomething type event to all functions in listeners
13865
+ */
13866
+ _fireEvent(listeners, ...args) {
13867
+ if (listeners == null) {
13868
+ return;
13911
13869
  }
13912
- },
13870
+ for (const listener of listeners) {
13871
+ listener.call(this, ...args);
13872
+ }
13873
+ }
13874
+
13875
+ /**
13876
+ * Call all draw functions, and update our prevState for the next
13877
+ * draw function
13878
+ */
13879
+ draw() {
13880
+ const currState = this.cloneState();
13881
+ this._fireEvent(this.state.draw, currState, this.prevState);
13882
+ this.prevState = currState;
13883
+ }
13884
+
13885
+ /**
13886
+ * Simulates a mouse grab event on the movable object.
13887
+ */
13888
+ grab(coord) {
13889
+ assert$8(point.is(coord));
13890
+ const graphie = this.graphie;
13891
+ const state = this.state;
13892
+ state.isHovering = true;
13893
+ state.isDragging = true;
13894
+ graphie.isDragging = true;
13895
+ const startMouseCoord = coord;
13896
+ let prevMouseCoord = startMouseCoord;
13897
+ this._fireEvent(state.onMoveStart, startMouseCoord, startMouseCoord);
13898
+ const moveHandler = e => {
13899
+ e.preventDefault();
13900
+ const mouseCoord = graphie.getMouseCoord(e);
13901
+ this._fireEvent(state.onMove, mouseCoord, prevMouseCoord);
13902
+ this.draw();
13903
+ prevMouseCoord = mouseCoord;
13904
+ };
13905
+ const upHandler = () => {
13906
+ $(document).unbind("vmousemove", moveHandler);
13907
+ $(document).unbind("vmouseup", upHandler);
13908
+ if (state.isHovering) {
13909
+ this._fireEvent(state.onClick, prevMouseCoord, startMouseCoord);
13910
+ }
13911
+ state.isHovering = this.state.isMouseOver;
13912
+ state.isDragging = false;
13913
+ graphie.isDragging = false;
13914
+ this._fireEvent(state.onMoveEnd, prevMouseCoord, startMouseCoord);
13915
+ this.draw();
13916
+ };
13917
+ $(document).bind("vmousemove", moveHandler);
13918
+ $(document).bind("vmouseup", upHandler);
13919
+ }
13920
+ _applyConstraints(current, previous, extraOptions) {
13921
+ var _this$state$constrain;
13922
+ let skipRemaining = false;
13923
+ return ((_this$state$constrain = this.state.constraints) != null ? _this$state$constrain : []).reduce((memo, constraint) => {
13924
+ // A move that has been cancelled won't be propagated to later
13925
+ // constraints calls
13926
+ if (memo === false) {
13927
+ return false;
13928
+ }
13929
+ if (skipRemaining) {
13930
+ return memo;
13931
+ }
13932
+ const result = constraint.call(this, memo, previous, _extends({
13933
+ onSkipRemaining: () => {
13934
+ skipRemaining = true;
13935
+ }
13936
+ }, extraOptions));
13937
+ if (result === false) {
13938
+ // Returning false cancels the move
13939
+ return false;
13940
+ }
13941
+ if (point.is(result, 2)) {
13942
+ // Returning a coord from constraints overrides the move
13943
+ return result;
13944
+ }
13945
+ if (result === true || result == null) {
13946
+ // Returning true or undefined allow the move to occur
13947
+ return memo;
13948
+ }
13949
+ // Anything else is an error
13950
+ throw new PerseusError("Constraint returned invalid result: " + result, Errors.Internal);
13951
+ }, current);
13952
+ }
13953
+
13913
13954
  // Change z-order to back
13914
- toBack: function () {
13955
+ toBack() {
13915
13956
  if (this.state.mouseTarget) {
13916
13957
  this.state.mouseTarget.toBack();
13917
13958
  }
13918
- },
13959
+ }
13960
+
13919
13961
  // Change z-order to front
13920
- toFront: function () {
13962
+ toFront() {
13921
13963
  if (this.state.mouseTarget) {
13922
13964
  this.state.mouseTarget.toFront();
13923
13965
  }
13924
13966
  }
13925
- });
13967
+
13968
+ /**
13969
+ * Add a listener to any event: startMove, constraints, onMove, onMoveEnd,
13970
+ * etc. If a listener is already bound to the given eventName and id, then
13971
+ * it is overwritten by func.
13972
+ *
13973
+ * eventName: the string name of the event to listen to. one of:
13974
+ * "onMoveStart", "onMove", "onMoveEnd", "draw", "remove"
13975
+ *
13976
+ * id: a string id that can be used to remove this event at a later time
13977
+ * note: adding multiple listeners with the same id is undefined behavior
13978
+ *
13979
+ * func: the function to call when the event happens, which is called
13980
+ * with the event's standard parameters [usually (coord, prevCoord) or
13981
+ * (state, prevState)]
13982
+ */
13983
+ listen(eventName, id, func) {
13984
+ this._listenerMap = this._listenerMap || {};
13985
+
13986
+ // If there's an existing handler, replace it by using its index in
13987
+ // `this.state[eventName]`; otherwise, add this handler to the end
13988
+ const key = getKey(eventName, id);
13989
+ const index = this._listenerMap[key] = this._listenerMap[key] || this.state[eventName].length;
13990
+ this.state[eventName][index] = func;
13991
+ }
13992
+
13993
+ /**
13994
+ * Remove a previously added listener, by the id specified in the
13995
+ * corresponding listen() call
13996
+ *
13997
+ * If the given id has not been registered already, this is a no-op
13998
+ */
13999
+ unlisten(eventName, id) {
14000
+ this._listenerMap = this._listenerMap || {};
14001
+ const key = getKey(eventName, id);
14002
+ const index = this._listenerMap[key];
14003
+ if (index !== undefined) {
14004
+ // Remove handler from list of event handlers and listenerMap
14005
+ this.state[eventName].splice(index, 1);
14006
+ delete this._listenerMap[key];
14007
+
14008
+ // Re-index existing events: if they occur after `index`, decrement
14009
+ const keys = _.keys(this._listenerMap);
14010
+ keys.forEach(key => {
14011
+ if (getEventName(key) === eventName && this._listenerMap[key] > index) {
14012
+ this._listenerMap[key]--;
14013
+ }
14014
+ });
14015
+ }
14016
+ }
14017
+ remove() {
14018
+ this.state.added = false;
14019
+ this._fireEvent(this.state.remove);
14020
+ if (this.state.mouseTarget) {
14021
+ $(this.state.mouseTarget).off();
14022
+ this.state.mouseTarget.remove();
14023
+ this.state.mouseTarget = null;
14024
+ }
14025
+ }
14026
+ cursor() {
14027
+ return this.state.cursor;
14028
+ }
14029
+ added() {
14030
+ return this.state.added;
14031
+ }
14032
+ isHovering() {
14033
+ return this.state.isHovering;
14034
+ }
14035
+ isMouseOver() {
14036
+ return this.state.isMouseOver;
14037
+ }
14038
+ isDragging() {
14039
+ return this.state.isDragging;
14040
+ }
14041
+ mouseTarget() {
14042
+ return this.state.mouseTarget;
14043
+ }
14044
+ }
14045
+ function getKey(eventName, id) {
14046
+ return eventName + ":" + id;
14047
+ }
14048
+ function getEventName(key) {
14049
+ return key.split(":")[0];
14050
+ }
13926
14051
 
13927
14052
  /* eslint-disable @babel/no-invalid-this */
13928
14053
  /**
@@ -14764,31 +14889,39 @@ const constraints$1 = {
14764
14889
  snap: function (snap) {
14765
14890
  return function (coord) {
14766
14891
  if (snap === null) {
14767
- // NOTE(kevinb): this should probably return the original point
14892
+ // TODO(benchristel), NOTE(kevinb): this should probably return
14893
+ // the original point
14768
14894
  return true;
14769
14895
  }
14770
- // @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
14771
- snap = snap || this.graphie.snap;
14772
- return point.roundTo(coord, snap);
14896
+ // @ts-expect-error - TS2339: Property 'snap' does not exist on type 'Graphie'.
14897
+ return point.roundTo(coord, snap || this.graphie.snap);
14773
14898
  };
14774
14899
  },
14775
- bound: function (range, snap, paddingPx) {
14776
- if (paddingPx === undefined) {
14777
- if (range === undefined) {
14778
- paddingPx = 10;
14900
+ bound: function (range, snap, optionalPaddingPx) {
14901
+ const paddingPx = (() => {
14902
+ if (optionalPaddingPx === undefined) {
14903
+ if (range === undefined) {
14904
+ return 10;
14905
+ } else {
14906
+ return 0;
14907
+ }
14779
14908
  } else {
14780
- paddingPx = 0;
14909
+ return optionalPaddingPx;
14781
14910
  }
14782
- }
14911
+ })();
14783
14912
  return function (coord, prev, options) {
14784
- // @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
14785
14913
  const graphie = this.graphie;
14786
14914
  range = range || graphie.range;
14787
14915
  if (snap === undefined) {
14916
+ // @ts-expect-error - Property 'snap' does not exist on type 'Graphie'.
14788
14917
  snap = graphie.snap;
14789
14918
  }
14790
- let lower = graphie.unscalePoint([paddingPx, graphie.ypixels - paddingPx]);
14791
- let upper = graphie.unscalePoint([graphie.xpixels - paddingPx, paddingPx]);
14919
+ let lower = graphie.unscalePoint([paddingPx,
14920
+ // @ts-expect-error - 'graphie.ypixels' is possibly 'undefined'.
14921
+ graphie.ypixels - paddingPx]);
14922
+ let upper = graphie.unscalePoint([
14923
+ // @ts-expect-error - 'graphie.ypixels' is possibly 'undefined'.
14924
+ graphie.xpixels - paddingPx, paddingPx]);
14792
14925
  if (snap) {
14793
14926
  lower = point.ceilTo(lower, snap);
14794
14927
  upper = point.floorTo(upper, snap);
@@ -41467,7 +41600,7 @@ const init = function init(options) {
41467
41600
 
41468
41601
  // This file is processed by a Rollup plugin (replace) to inject the production
41469
41602
  const libName = "@khanacademy/perseus";
41470
- const libVersion = "19.1.4";
41603
+ const libVersion = "19.1.6";
41471
41604
  addLibraryVersionToPerseusDebug(libName, libVersion);
41472
41605
 
41473
41606
  const apiVersion = {