@khanacademy/perseus 19.1.5 → 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 (478) hide show
  1. package/dist/es/index.js +1 -1
  2. package/dist/index.js +1 -1
  3. package/package.json +11 -8
  4. package/.babelrc.js +0 -8
  5. package/.eslintrc.js +0 -12
  6. package/CHANGELOG.md +0 -1432
  7. package/src/__stories__/article-renderer.stories.tsx +0 -100
  8. package/src/__stories__/hints-renderer.stories.tsx +0 -55
  9. package/src/__stories__/server-item-renderer.stories.tsx +0 -44
  10. package/src/__testdata__/article-renderer.testdata.ts +0 -212
  11. package/src/__testdata__/graphie.testdata.ts +0 -51
  12. package/src/__testdata__/renderer.testdata.ts +0 -274
  13. package/src/__testdata__/server-item-renderer.testdata.ts +0 -171
  14. package/src/__tests__/__snapshots__/perseus-markdown.test.ts.snap +0 -507
  15. package/src/__tests__/__snapshots__/renderer.test.tsx.snap +0 -525
  16. package/src/__tests__/__snapshots__/server-item-renderer.test.tsx.snap +0 -285
  17. package/src/__tests__/a11y.test.ts +0 -303
  18. package/src/__tests__/article-renderer.test.tsx +0 -130
  19. package/src/__tests__/error-boundary.test.tsx +0 -76
  20. package/src/__tests__/extract-perseus-data.test.ts +0 -1027
  21. package/src/__tests__/init.test.ts +0 -10
  22. package/src/__tests__/jipt-paragraphs.test.ts +0 -32
  23. package/src/__tests__/mock-asset-loading-widget.tsx +0 -53
  24. package/src/__tests__/mock-widget.tsx +0 -33
  25. package/src/__tests__/perseus-markdown.test.ts +0 -764
  26. package/src/__tests__/renderability.test.ts +0 -480
  27. package/src/__tests__/renderer-api.test.tsx +0 -302
  28. package/src/__tests__/renderer.test.tsx +0 -1816
  29. package/src/__tests__/server-item-renderer.test.tsx +0 -582
  30. package/src/__tests__/test-items/image-item.ts +0 -24
  31. package/src/__tests__/test-items/input-number-1-item.ts +0 -26
  32. package/src/__tests__/test-items/input-number-2-item.ts +0 -38
  33. package/src/__tests__/test-items/table-item.ts +0 -29
  34. package/src/__tests__/tex-wrangler.test.ts +0 -82
  35. package/src/__tests__/util.test.ts +0 -40
  36. package/src/__tests__/widget-container.test.tsx +0 -126
  37. package/src/__tests__/widgets.test.ts +0 -91
  38. package/src/a11y.ts +0 -45
  39. package/src/all-widgets.ts +0 -9
  40. package/src/article-renderer.tsx +0 -237
  41. package/src/asset-context.ts +0 -30
  42. package/src/basic-widgets.ts +0 -16
  43. package/src/components/__stories__/button-group.stories.tsx +0 -55
  44. package/src/components/__stories__/fixed-to-responsive.stories.tsx +0 -141
  45. package/src/components/__stories__/graph.stories.tsx +0 -28
  46. package/src/components/__stories__/graphie.stories.tsx +0 -33
  47. package/src/components/__stories__/hud.stories.tsx +0 -35
  48. package/src/components/__stories__/icon.stories.tsx +0 -63
  49. package/src/components/__stories__/image-loader.stories.tsx +0 -63
  50. package/src/components/__stories__/info-tip.stories.tsx +0 -31
  51. package/src/components/__stories__/inline-icon.stories.tsx +0 -40
  52. package/src/components/__stories__/input-with-examples.stories.tsx +0 -53
  53. package/src/components/__stories__/lint.stories.tsx +0 -86
  54. package/src/components/__stories__/math-input.stories.tsx +0 -43
  55. package/src/components/__stories__/math-output.stories.tsx +0 -23
  56. package/src/components/__stories__/multi-button-group.stories.tsx +0 -66
  57. package/src/components/__stories__/number-input.stories.tsx +0 -41
  58. package/src/components/__stories__/prop-check-box.stories.tsx +0 -65
  59. package/src/components/__stories__/range-input.stories.tsx +0 -29
  60. package/src/components/__stories__/simple-keypad-input.stories.tsx +0 -27
  61. package/src/components/__stories__/sortable.stories.tsx +0 -77
  62. package/src/components/__stories__/stub-tag-editor.stories.tsx +0 -45
  63. package/src/components/__stories__/svg-image.stories.tsx +0 -74
  64. package/src/components/__stories__/tex.stories.tsx +0 -23
  65. package/src/components/__stories__/text-input.stories.tsx +0 -33
  66. package/src/components/__stories__/text-list-editor.stories.tsx +0 -32
  67. package/src/components/__stories__/tooltip.stories.tsx +0 -52
  68. package/src/components/__stories__/zoomable-tex.stories.tsx +0 -41
  69. package/src/components/__stories__/zoomable.stories.tsx +0 -49
  70. package/src/components/__testdata__/sorter.testdata.ts +0 -19
  71. package/src/components/__tests__/__snapshots__/sortable.test.tsx.snap +0 -163
  72. package/src/components/__tests__/__snapshots__/sorter.test.tsx.snap +0 -265
  73. package/src/components/__tests__/math-input.test.tsx +0 -147
  74. package/src/components/__tests__/number-input.test.tsx +0 -128
  75. package/src/components/__tests__/sortable.test.tsx +0 -269
  76. package/src/components/__tests__/sorter.test.tsx +0 -114
  77. package/src/components/__tests__/zoomable.test.tsx +0 -399
  78. package/src/components/button-group.tsx +0 -130
  79. package/src/components/constants.ts +0 -14
  80. package/src/components/fixed-to-responsive.tsx +0 -169
  81. package/src/components/graph.tsx +0 -444
  82. package/src/components/graphie-classes.ts +0 -153
  83. package/src/components/graphie-movables.ts +0 -338
  84. package/src/components/graphie.tsx +0 -400
  85. package/src/components/highlighting/highlightable-content.tsx +0 -240
  86. package/src/components/highlighting/highlights.ts +0 -207
  87. package/src/components/highlighting/ranges.ts +0 -304
  88. package/src/components/highlighting/types.ts +0 -73
  89. package/src/components/highlighting/ui/highlight-renderer.tsx +0 -172
  90. package/src/components/highlighting/ui/highlight-set-renderer.tsx +0 -185
  91. package/src/components/highlighting/ui/highlight-tooltip.tsx +0 -141
  92. package/src/components/highlighting/ui/highlighting-ui.tsx +0 -143
  93. package/src/components/highlighting/ui/selection-tracker.tsx +0 -186
  94. package/src/components/highlighting/ui/types.ts +0 -21
  95. package/src/components/highlighting/ui/util.ts +0 -165
  96. package/src/components/highlighting/word-indexer.tsx +0 -152
  97. package/src/components/hud.tsx +0 -167
  98. package/src/components/icon.tsx +0 -141
  99. package/src/components/image-loader.tsx +0 -177
  100. package/src/components/info-tip/info-tip.tsx +0 -144
  101. package/src/components/info-tip.tsx +0 -39
  102. package/src/components/inline-icon.tsx +0 -60
  103. package/src/components/input-with-examples.tsx +0 -249
  104. package/src/components/lint.tsx +0 -459
  105. package/src/components/math-input.tsx +0 -474
  106. package/src/components/math-output.tsx +0 -134
  107. package/src/components/multi-button-group.tsx +0 -135
  108. package/src/components/number-input.tsx +0 -249
  109. package/src/components/prop-check-box.tsx +0 -79
  110. package/src/components/range-input.tsx +0 -60
  111. package/src/components/simple-keypad-input.tsx +0 -88
  112. package/src/components/sortable.tsx +0 -958
  113. package/src/components/stub-tag-editor.tsx +0 -53
  114. package/src/components/svg-image.tsx +0 -779
  115. package/src/components/tex.tsx +0 -67
  116. package/src/components/text-input.tsx +0 -129
  117. package/src/components/text-list-editor.tsx +0 -166
  118. package/src/components/tooltip.tsx +0 -410
  119. package/src/components/visibility-observer/__stories__/visibility-observer.stories.tsx +0 -141
  120. package/src/components/visibility-observer/create-visibility-observer.ts +0 -108
  121. package/src/components/visibility-observer/get-scroll-parent.ts +0 -46
  122. package/src/components/visibility-observer/visibility-observer.tsx +0 -124
  123. package/src/components/zoomable-tex.tsx +0 -78
  124. package/src/components/zoomable.tsx +0 -304
  125. package/src/components.ts +0 -15
  126. package/src/definition-context.tsx +0 -59
  127. package/src/dependencies.ts +0 -40
  128. package/src/error-boundary.tsx +0 -70
  129. package/src/extra-widgets.ts +0 -75
  130. package/src/hint-renderer.tsx +0 -151
  131. package/src/hints-renderer.tsx +0 -372
  132. package/src/icon-paths.ts +0 -119
  133. package/src/index.ts +0 -171
  134. package/src/init.ts +0 -56
  135. package/src/interaction-tracker.ts +0 -62
  136. package/src/interactive2/__tests__/movable-mock.ts +0 -55
  137. package/src/interactive2/__tests__/movable-point.test.ts +0 -144
  138. package/src/interactive2/interactive-util.test.ts +0 -93
  139. package/src/interactive2/interactive-util.ts +0 -159
  140. package/src/interactive2/movable-helper-methods.ts +0 -166
  141. package/src/interactive2/movable-line-options.ts +0 -419
  142. package/src/interactive2/movable-line.ts +0 -307
  143. package/src/interactive2/movable-point-options.ts +0 -224
  144. package/src/interactive2/movable-point.tsx +0 -585
  145. package/src/interactive2/movable-polygon-options.ts +0 -389
  146. package/src/interactive2/movable-polygon.ts +0 -360
  147. package/src/interactive2/movable.test.ts +0 -249
  148. package/src/interactive2/movable.ts +0 -437
  149. package/src/interactive2/objective_.ts +0 -79
  150. package/src/interactive2/types.ts +0 -17
  151. package/src/interactive2/wrapped-defaults.ts +0 -87
  152. package/src/interactive2/wrapped-ellipse.ts +0 -94
  153. package/src/interactive2/wrapped-line.ts +0 -116
  154. package/src/interactive2/wrapped-path.ts +0 -51
  155. package/src/interactive2.ts +0 -70
  156. package/src/item-version.ts +0 -10
  157. package/src/jipt-paragraphs.ts +0 -49
  158. package/src/jquery.mobile.vmouse.js +0 -545
  159. package/src/loading-context.ts +0 -21
  160. package/src/logging/log.test.ts +0 -39
  161. package/src/logging/log.ts +0 -97
  162. package/src/mixins/__tests__/widget-prop-denylist.test.ts +0 -21
  163. package/src/mixins/changeable.ts +0 -133
  164. package/src/mixins/editor-jsonify.ts +0 -13
  165. package/src/mixins/widget-jsonify-deprecated.ts +0 -23
  166. package/src/mixins/widget-prop-denylist.ts +0 -48
  167. package/src/multi-items/__stories__/multi-renderer.stories.tsx +0 -83
  168. package/src/multi-items/__testdata__/multi-renderer.testdata.ts +0 -172
  169. package/src/multi-items/__tests__/__snapshots__/multi-renderer.test.tsx.snap +0 -1164
  170. package/src/multi-items/__tests__/items.test.ts +0 -240
  171. package/src/multi-items/__tests__/multi-renderer.test.tsx +0 -914
  172. package/src/multi-items/__tests__/prop-type-builders.test.ts +0 -133
  173. package/src/multi-items/__tests__/shapes.test.ts +0 -43
  174. package/src/multi-items/__tests__/trees.test.ts +0 -317
  175. package/src/multi-items/item-types.ts +0 -56
  176. package/src/multi-items/items.ts +0 -176
  177. package/src/multi-items/multi-renderer.tsx +0 -569
  178. package/src/multi-items/prop-type-builders.ts +0 -106
  179. package/src/multi-items/shape-types.ts +0 -52
  180. package/src/multi-items/shapes.ts +0 -52
  181. package/src/multi-items/tree-types.ts +0 -47
  182. package/src/multi-items/trees.ts +0 -360
  183. package/src/multi-items.ts +0 -75
  184. package/src/perseus-api.tsx +0 -188
  185. package/src/perseus-env.ts +0 -27
  186. package/src/perseus-error.ts +0 -17
  187. package/src/perseus-markdown.tsx +0 -405
  188. package/src/perseus-types.ts +0 -1366
  189. package/src/perseus-version.ts +0 -9
  190. package/src/question-paragraph.tsx +0 -34
  191. package/src/renderability.ts +0 -109
  192. package/src/renderer.tsx +0 -2000
  193. package/src/server-item-renderer.tsx +0 -495
  194. package/src/sigfigs.ts +0 -490
  195. package/src/styles/articles.less +0 -749
  196. package/src/styles/constants.ts +0 -94
  197. package/src/styles/global-constants.ts +0 -343
  198. package/src/styles/global-styles.ts +0 -306
  199. package/src/styles/khan-exercise.css +0 -1468
  200. package/src/styles/media-queries.ts +0 -47
  201. package/src/styles/perseus-renderer.less +0 -732
  202. package/src/styles/shared.ts +0 -130
  203. package/src/styles/util.less +0 -47
  204. package/src/styles/variables.boostrap.less +0 -277
  205. package/src/styles/variables.less +0 -56
  206. package/src/styles/variables.shared.less +0 -340
  207. package/src/styles/widgets/categorizer.less +0 -38
  208. package/src/styles/widgets/dropdown.less +0 -3
  209. package/src/styles/widgets/expression.less +0 -65
  210. package/src/styles/widgets/graded-group.less +0 -36
  211. package/src/styles/widgets/grapher.less +0 -12
  212. package/src/styles/widgets/group.less +0 -19
  213. package/src/styles/widgets/image.less +0 -54
  214. package/src/styles/widgets/interactive-graph.less +0 -64
  215. package/src/styles/widgets/label-image.less +0 -57
  216. package/src/styles/widgets/matcher.less +0 -8
  217. package/src/styles/widgets/matrix.less +0 -126
  218. package/src/styles/widgets/measurer.less +0 -20
  219. package/src/styles/widgets/orderer.less +0 -98
  220. package/src/styles/widgets/passage.less +0 -154
  221. package/src/styles/widgets/plotter.less +0 -31
  222. package/src/styles/widgets/radio.less +0 -58
  223. package/src/styles/widgets/reaction-diagram.less +0 -35
  224. package/src/styles/widgets/sequence.less +0 -5
  225. package/src/styles/widgets/sortable.less +0 -113
  226. package/src/styles/widgets/table.less +0 -57
  227. package/src/styles/widgets/unit.less +0 -15
  228. package/src/tex-wrangler.ts +0 -182
  229. package/src/translation-linter.ts +0 -126
  230. package/src/traversal.ts +0 -138
  231. package/src/types.ts +0 -513
  232. package/src/util/a11y.ts +0 -23
  233. package/src/util/answer-types.test.ts +0 -114
  234. package/src/util/answer-types.ts +0 -876
  235. package/src/util/colors.ts +0 -93
  236. package/src/util/drawing-transform.test.ts +0 -67
  237. package/src/util/drawing-transform.ts +0 -102
  238. package/src/util/extract-perseus-data.ts +0 -539
  239. package/src/util/fix-passage-refs.ts +0 -121
  240. package/src/util/geometry.test.ts +0 -75
  241. package/src/util/geometry.ts +0 -312
  242. package/src/util/graph-bounds.ts +0 -23
  243. package/src/util/graph-utils.ts +0 -15
  244. package/src/util/graphie.test.ts +0 -1277
  245. package/src/util/graphie.ts +0 -1576
  246. package/src/util/interactive.ts +0 -4174
  247. package/src/util/interval.ts +0 -4
  248. package/src/util/katex-preprocess.ts +0 -14
  249. package/src/util/math.test.ts +0 -11
  250. package/src/util/math.ts +0 -294
  251. package/src/util/mobile-native-utils.test.ts +0 -22
  252. package/src/util/mobile-native-utils.ts +0 -12
  253. package/src/util/parse-perseus-json.test.ts +0 -10
  254. package/src/util/parse-perseus-json.ts +0 -13
  255. package/src/util/react-render.tsx +0 -27
  256. package/src/util/register-all-widgets-for-testing.ts +0 -13
  257. package/src/util/scroll-utils.ts +0 -155
  258. package/src/util/sizing-utils.ts +0 -46
  259. package/src/util/tex.ts +0 -73
  260. package/src/util/url-utils.ts +0 -34
  261. package/src/util.graphie.test.ts +0 -45
  262. package/src/util.graphie.ts +0 -59
  263. package/src/util.ts +0 -966
  264. package/src/version.ts +0 -10
  265. package/src/widget-container.tsx +0 -199
  266. package/src/widgets/__stories__/categorizer.stories.tsx +0 -14
  267. package/src/widgets/__stories__/cs-program.stories.tsx +0 -14
  268. package/src/widgets/__stories__/definition.stories.tsx +0 -114
  269. package/src/widgets/__stories__/dropdown.stories.tsx +0 -14
  270. package/src/widgets/__stories__/explanation.stories.tsx +0 -18
  271. package/src/widgets/__stories__/expression.stories.tsx +0 -145
  272. package/src/widgets/__stories__/graded-group-set.stories.tsx +0 -31
  273. package/src/widgets/__stories__/graded-group.stories.tsx +0 -31
  274. package/src/widgets/__stories__/grapher.stories.tsx +0 -46
  275. package/src/widgets/__stories__/group.stories.tsx +0 -14
  276. package/src/widgets/__stories__/iframe.stories.tsx +0 -14
  277. package/src/widgets/__stories__/image.stories.tsx +0 -85
  278. package/src/widgets/__stories__/input-number.stories.tsx +0 -101
  279. package/src/widgets/__stories__/interaction.stories.tsx +0 -14
  280. package/src/widgets/__stories__/interactive-graph.stories.tsx +0 -60
  281. package/src/widgets/__stories__/label-image.stories.tsx +0 -130
  282. package/src/widgets/__stories__/matcher.stories.tsx +0 -14
  283. package/src/widgets/__stories__/matrix.stories.tsx +0 -14
  284. package/src/widgets/__stories__/number-line.stories.tsx +0 -14
  285. package/src/widgets/__stories__/numeric-input.stories.tsx +0 -105
  286. package/src/widgets/__stories__/orderer.stories.tsx +0 -18
  287. package/src/widgets/__stories__/passage-ref.stories.tsx +0 -33
  288. package/src/widgets/__stories__/passage.stories.tsx +0 -39
  289. package/src/widgets/__stories__/plotter.stories.tsx +0 -27
  290. package/src/widgets/__stories__/radio.stories.tsx +0 -86
  291. package/src/widgets/__stories__/random-widgets.stories.tsx +0 -59
  292. package/src/widgets/__stories__/sorter.stories.tsx +0 -14
  293. package/src/widgets/__stories__/test-keypad-context-wrapper.tsx +0 -66
  294. package/src/widgets/__stories__/unit.stories.tsx +0 -28
  295. package/src/widgets/__stories__/video-transcript-link.stories.tsx +0 -23
  296. package/src/widgets/__stories__/video.stories.tsx +0 -22
  297. package/src/widgets/__testdata__/base-radio.testdata.ts +0 -21
  298. package/src/widgets/__testdata__/categorizer.testdata.ts +0 -89
  299. package/src/widgets/__testdata__/cs-program.testdata.ts +0 -27
  300. package/src/widgets/__testdata__/dropdown.testdata.ts +0 -71
  301. package/src/widgets/__testdata__/explanation.testdata.ts +0 -85
  302. package/src/widgets/__testdata__/expression.testdata.ts +0 -198
  303. package/src/widgets/__testdata__/graded-group-set.testdata.ts +0 -356
  304. package/src/widgets/__testdata__/graded-group.testdata.ts +0 -77
  305. package/src/widgets/__testdata__/grapher.testdata.ts +0 -374
  306. package/src/widgets/__testdata__/group.testdata.ts +0 -153
  307. package/src/widgets/__testdata__/iframe.testdata.ts +0 -35
  308. package/src/widgets/__testdata__/image.testdata.ts +0 -36
  309. package/src/widgets/__testdata__/input-number.testdata.ts +0 -72
  310. package/src/widgets/__testdata__/interaction.testdata.ts +0 -262
  311. package/src/widgets/__testdata__/interactive-graph-random.testdata.ts +0 -269
  312. package/src/widgets/__testdata__/interactive-graph.testdata.ts +0 -644
  313. package/src/widgets/__testdata__/label-image.testdata.ts +0 -308
  314. package/src/widgets/__testdata__/matcher.testdata.ts +0 -33
  315. package/src/widgets/__testdata__/matrix.testdata.ts +0 -28
  316. package/src/widgets/__testdata__/number-line.testdata.ts +0 -30
  317. package/src/widgets/__testdata__/numeric-input.testdata.ts +0 -265
  318. package/src/widgets/__testdata__/orderer.testdata.ts +0 -123
  319. package/src/widgets/__testdata__/passage-ref.testdata.ts +0 -101
  320. package/src/widgets/__testdata__/passage.testdata.ts +0 -95
  321. package/src/widgets/__testdata__/plotter.testdata.ts +0 -36
  322. package/src/widgets/__testdata__/radio.testdata.ts +0 -324
  323. package/src/widgets/__testdata__/randomizers.ts +0 -51
  324. package/src/widgets/__testdata__/sorter.testdata.ts +0 -19
  325. package/src/widgets/__testdata__/video.testdata.ts +0 -61
  326. package/src/widgets/__tests__/__snapshots__/categorizer.test.ts.snap +0 -940
  327. package/src/widgets/__tests__/__snapshots__/cs-program.test.ts.snap +0 -67
  328. package/src/widgets/__tests__/__snapshots__/definition.test.ts.snap +0 -97
  329. package/src/widgets/__tests__/__snapshots__/dropdown.test.ts.snap +0 -133
  330. package/src/widgets/__tests__/__snapshots__/explanation.test.ts.snap +0 -425
  331. package/src/widgets/__tests__/__snapshots__/graded-group-set-jipt.test.ts.snap +0 -729
  332. package/src/widgets/__tests__/__snapshots__/graded-group-set.test.ts.snap +0 -339
  333. package/src/widgets/__tests__/__snapshots__/graded-group.test.ts.snap +0 -801
  334. package/src/widgets/__tests__/__snapshots__/grapher.test.ts.snap +0 -2673
  335. package/src/widgets/__tests__/__snapshots__/group.test.tsx.snap +0 -1211
  336. package/src/widgets/__tests__/__snapshots__/iframe.test.ts.snap +0 -61
  337. package/src/widgets/__tests__/__snapshots__/image.test.ts.snap +0 -378
  338. package/src/widgets/__tests__/__snapshots__/input-number.test.ts.snap +0 -495
  339. package/src/widgets/__tests__/__snapshots__/interaction.test.ts.snap +0 -292
  340. package/src/widgets/__tests__/__snapshots__/interactive-graph.test.ts.snap +0 -2889
  341. package/src/widgets/__tests__/__snapshots__/matcher.test.tsx.snap +0 -883
  342. package/src/widgets/__tests__/__snapshots__/matrix.test.ts.snap +0 -514
  343. package/src/widgets/__tests__/__snapshots__/number-line.test.ts.snap +0 -814
  344. package/src/widgets/__tests__/__snapshots__/numeric-input.test.ts.snap +0 -470
  345. package/src/widgets/__tests__/__snapshots__/orderer.test.ts.snap +0 -243
  346. package/src/widgets/__tests__/__snapshots__/passage-ref.test.ts.snap +0 -434
  347. package/src/widgets/__tests__/__snapshots__/passage.test.tsx.snap +0 -1956
  348. package/src/widgets/__tests__/__snapshots__/plotter.test.tsx.snap +0 -827
  349. package/src/widgets/__tests__/__snapshots__/radio.test.ts.snap +0 -4237
  350. package/src/widgets/__tests__/__snapshots__/unit.test.tsx.snap +0 -20
  351. package/src/widgets/__tests__/__snapshots__/video.test.ts.snap +0 -153
  352. package/src/widgets/__tests__/categorizer.test.ts +0 -203
  353. package/src/widgets/__tests__/cs-program.test.ts +0 -43
  354. package/src/widgets/__tests__/definition.test.ts +0 -136
  355. package/src/widgets/__tests__/dropdown.test.ts +0 -105
  356. package/src/widgets/__tests__/explanation.test.ts +0 -198
  357. package/src/widgets/__tests__/expression-mobile.test.tsx +0 -363
  358. package/src/widgets/__tests__/expression.test.tsx +0 -484
  359. package/src/widgets/__tests__/graded-group-set-jipt.test.ts +0 -30
  360. package/src/widgets/__tests__/graded-group-set.test.ts +0 -288
  361. package/src/widgets/__tests__/graded-group.test.ts +0 -232
  362. package/src/widgets/__tests__/grapher.cypress.ts +0 -576
  363. package/src/widgets/__tests__/grapher.test.ts +0 -33
  364. package/src/widgets/__tests__/group.test.tsx +0 -510
  365. package/src/widgets/__tests__/iframe.test.ts +0 -45
  366. package/src/widgets/__tests__/image.test.ts +0 -62
  367. package/src/widgets/__tests__/input-number.test.ts +0 -354
  368. package/src/widgets/__tests__/interaction.test.ts +0 -31
  369. package/src/widgets/__tests__/interactive-graph.cypress.ts +0 -815
  370. package/src/widgets/__tests__/interactive-graph.test.ts +0 -106
  371. package/src/widgets/__tests__/matcher.test.tsx +0 -176
  372. package/src/widgets/__tests__/matrix.test.ts +0 -82
  373. package/src/widgets/__tests__/number-line.test.ts +0 -79
  374. package/src/widgets/__tests__/numeric-input.test.ts +0 -575
  375. package/src/widgets/__tests__/orderer.test.ts +0 -73
  376. package/src/widgets/__tests__/passage-ref.test.ts +0 -168
  377. package/src/widgets/__tests__/passage.test.tsx +0 -224
  378. package/src/widgets/__tests__/plotter.test.tsx +0 -69
  379. package/src/widgets/__tests__/radio/base-radio.test.tsx +0 -470
  380. package/src/widgets/__tests__/radio/choice-icon.test.tsx +0 -90
  381. package/src/widgets/__tests__/radio/choice.test.tsx +0 -310
  382. package/src/widgets/__tests__/radio/focus-ring.test.tsx +0 -22
  383. package/src/widgets/__tests__/radio/option-status.test.tsx +0 -77
  384. package/src/widgets/__tests__/radio.test.ts +0 -807
  385. package/src/widgets/__tests__/randomizers.test.ts +0 -53
  386. package/src/widgets/__tests__/renderQuestion.tsx +0 -101
  387. package/src/widgets/__tests__/unit.test.tsx +0 -168
  388. package/src/widgets/__tests__/video.test.ts +0 -69
  389. package/src/widgets/categorizer.tsx +0 -344
  390. package/src/widgets/cs-program.tsx +0 -227
  391. package/src/widgets/definition.tsx +0 -121
  392. package/src/widgets/deprecated-standin/__stories__/deprecated-standin.stories.tsx +0 -30
  393. package/src/widgets/deprecated-standin/__tests__/__snapshots__/deprecated-standin.test.ts.snap +0 -70
  394. package/src/widgets/deprecated-standin/__tests__/deprecated-standin.test.ts +0 -93
  395. package/src/widgets/deprecated-standin/index.tsx +0 -58
  396. package/src/widgets/dropdown.tsx +0 -142
  397. package/src/widgets/explanation.tsx +0 -317
  398. package/src/widgets/expression.tsx +0 -707
  399. package/src/widgets/graded-group-answer-bar.tsx +0 -142
  400. package/src/widgets/graded-group-set.tsx +0 -338
  401. package/src/widgets/graded-group.tsx +0 -471
  402. package/src/widgets/grapher/util.tsx +0 -799
  403. package/src/widgets/grapher.tsx +0 -660
  404. package/src/widgets/group.tsx +0 -195
  405. package/src/widgets/iframe.tsx +0 -195
  406. package/src/widgets/image.tsx +0 -312
  407. package/src/widgets/input-number.tsx +0 -412
  408. package/src/widgets/interaction/arrow-picker.tsx +0 -38
  409. package/src/widgets/interaction/color-picker.tsx +0 -69
  410. package/src/widgets/interaction/dash-picker.tsx +0 -45
  411. package/src/widgets/interaction/element-container.tsx +0 -100
  412. package/src/widgets/interaction.tsx +0 -826
  413. package/src/widgets/interactive-graph.tsx +0 -2597
  414. package/src/widgets/label-image/__stories__/answer-choices.stories.tsx +0 -91
  415. package/src/widgets/label-image/__stories__/answer-pill.stories.tsx +0 -62
  416. package/src/widgets/label-image/__stories__/marker.stories.tsx +0 -171
  417. package/src/widgets/label-image/__tests__/answer-pill.test.tsx +0 -75
  418. package/src/widgets/label-image/__tests__/hide-answers-toggle.test.tsx +0 -39
  419. package/src/widgets/label-image/answer-choices.tsx +0 -88
  420. package/src/widgets/label-image/answer-pill.tsx +0 -103
  421. package/src/widgets/label-image/hide-answers-toggle.tsx +0 -40
  422. package/src/widgets/label-image/marker.tsx +0 -268
  423. package/src/widgets/label-image/strings.ts +0 -5
  424. package/src/widgets/label-image/types.ts +0 -27
  425. package/src/widgets/label-image.test.ts +0 -928
  426. package/src/widgets/label-image.tsx +0 -819
  427. package/src/widgets/lights-puzzle.tsx +0 -359
  428. package/src/widgets/matcher.tsx +0 -298
  429. package/src/widgets/matrix.tsx +0 -634
  430. package/src/widgets/measurer.tsx +0 -222
  431. package/src/widgets/molecule/__tests__/layout.test.ts +0 -162
  432. package/src/widgets/molecule/__tests__/parser.test.ts +0 -155
  433. package/src/widgets/molecule/molecule-drawing.ts +0 -173
  434. package/src/widgets/molecule/molecule-layout.ts +0 -362
  435. package/src/widgets/molecule/smiles-parser.ts +0 -296
  436. package/src/widgets/molecule.tsx +0 -172
  437. package/src/widgets/number-line.tsx +0 -862
  438. package/src/widgets/numeric-input.tsx +0 -576
  439. package/src/widgets/orderer.tsx +0 -786
  440. package/src/widgets/passage/__tests__/passage-markdown.test.ts +0 -376
  441. package/src/widgets/passage/passage-markdown.tsx +0 -475
  442. package/src/widgets/passage-ref-target.tsx +0 -76
  443. package/src/widgets/passage-ref.tsx +0 -213
  444. package/src/widgets/passage.tsx +0 -582
  445. package/src/widgets/plotter.tsx +0 -1194
  446. package/src/widgets/radio/__stories__/base-radio.stories.tsx +0 -196
  447. package/src/widgets/radio/__stories__/choice-icon.stories.tsx +0 -166
  448. package/src/widgets/radio/__stories__/choice-none-above.stories.tsx +0 -40
  449. package/src/widgets/radio/__stories__/choice.stories.tsx +0 -137
  450. package/src/widgets/radio/__stories__/focus-ring.stories.tsx +0 -43
  451. package/src/widgets/radio/__stories__/option-status.stories.tsx +0 -103
  452. package/src/widgets/radio/base-radio.tsx +0 -511
  453. package/src/widgets/radio/choice-a11y-text.ts +0 -61
  454. package/src/widgets/radio/choice-icon/choice-icon.tsx +0 -218
  455. package/src/widgets/radio/choice-icon/cross-out-line.tsx +0 -51
  456. package/src/widgets/radio/choice-icon/shared-styles.ts +0 -15
  457. package/src/widgets/radio/choice-none-above.tsx +0 -56
  458. package/src/widgets/radio/choice.jsx.fixture.ts +0 -45
  459. package/src/widgets/radio/choice.tsx +0 -359
  460. package/src/widgets/radio/focus-ring.tsx +0 -57
  461. package/src/widgets/radio/option-status.tsx +0 -98
  462. package/src/widgets/radio/util.test.ts +0 -18
  463. package/src/widgets/radio/util.ts +0 -31
  464. package/src/widgets/radio/widget.tsx +0 -520
  465. package/src/widgets/radio.ts +0 -157
  466. package/src/widgets/reaction-diagram.tsx +0 -144
  467. package/src/widgets/sequence.tsx +0 -142
  468. package/src/widgets/simulator.tsx +0 -829
  469. package/src/widgets/sorter.tsx +0 -155
  470. package/src/widgets/table.tsx +0 -393
  471. package/src/widgets/unit.tsx +0 -374
  472. package/src/widgets/video-transcript-link.test.tsx +0 -213
  473. package/src/widgets/video-transcript-link.tsx +0 -84
  474. package/src/widgets/video.tsx +0 -135
  475. package/src/widgets.ts +0 -489
  476. package/src/zoom.ts +0 -555
  477. package/tsconfig-build.json +0 -26
  478. package/tsconfig-build.tsbuildinfo +0 -1
@@ -1,173 +0,0 @@
1
- /**
2
- * Draw some text into a 2D canvas drawing context.
3
- *
4
- * Args:
5
- * ctx: the 2D drawing context
6
- * item: the rendering instruction for the text. Must look like: {
7
- * type: "text",
8
- * pos: [x, y],
9
- * value: "some text to draw",
10
- * }
11
- *
12
- */
13
- function drawText(ctx, item: any) {
14
- if (item.value === null) {
15
- return;
16
- }
17
- ctx.fillStyle = styles.fgColor;
18
- ctx.font = styles.font;
19
- ctx.fillText(
20
- item.value,
21
- item.pos[0] - styles.fontSizePx / 2 + 1,
22
- item.pos[1] + styles.fontSizePx / 2,
23
- );
24
- }
25
-
26
- /**
27
- * Draw a double line into a 2D canvas drawing context.
28
- *
29
- * Apparently the way you do this is to stroke an extra-wide line in the
30
- * foreground color and then a smaller line in the background color. 5:3
31
- * foreground:background width looks reasonable for drawing chemical bonds.
32
- *
33
- * Args:
34
- * ctx: the 2D drawing context
35
- * item: the rendering instruction for the line. Must look like: {
36
- * type: "line:double",
37
- * startPos: [x, y],
38
- * endPos: [x, y],
39
- * }
40
- */
41
- function drawDoubleLine(ctx: any, item: any) {
42
- // Outer line that forms both of the bond lines.
43
- let path = new Path2D();
44
- ctx.lineWidth = 5 * styles.lineWidth;
45
- ctx.strokeStyle = styles.fgColor;
46
- path.moveTo(item.startPos[0], item.startPos[1]);
47
- path.lineTo(item.endPos[0], item.endPos[1]);
48
- ctx.stroke(path);
49
-
50
- // Inner white line that separates the two bond lines.
51
- path = new Path2D();
52
- ctx.lineWidth = 3 * styles.lineWidth;
53
- ctx.strokeStyle = styles.bgColor;
54
- path.moveTo(item.startPos[0], item.startPos[1]);
55
- path.lineTo(item.endPos[0], item.endPos[1]);
56
- ctx.stroke(path);
57
- }
58
-
59
- /**
60
- * Draw a triple line into a 2D canvas drawing context.
61
- *
62
- * Following the strategy for the double line, we stroke a very wide
63
- * foreground-color line, then a medium background-color line, then a narrow
64
- * foreground-color line.
65
- *
66
- * Args:
67
- * ctx: the 2D drawing context
68
- * item: the rendering instruction for the line. Must look like: {
69
- * type: "line:triple",
70
- * startPos: [x, y],
71
- * endPos: [x, y],
72
- * }
73
- */
74
- function drawTripleLine(ctx: any, item: any) {
75
- // TODO(colin): consolidate duplicated code from the three line drawing
76
- // functions.
77
-
78
- // Outer line that will form the two outer bond lines.
79
- let path = new Path2D();
80
- ctx.lineWidth = 7 * styles.lineWidth;
81
- ctx.strokeStyle = styles.fgColor;
82
- path.moveTo(item.startPos[0], item.startPos[1]);
83
- path.lineTo(item.endPos[0], item.endPos[1]);
84
- ctx.stroke(path);
85
-
86
- // Middle white line that separates the bonds
87
- path = new Path2D();
88
- ctx.lineWidth = 5 * styles.lineWidth;
89
- ctx.strokeStyle = styles.bgColor;
90
- path.moveTo(item.startPos[0], item.startPos[1]);
91
- path.lineTo(item.endPos[0], item.endPos[1]);
92
- ctx.stroke(path);
93
-
94
- // Inner line that forms the middle bond line.
95
- drawLine(ctx, item);
96
- }
97
-
98
- /**
99
- * Draw a single line into a 2D canvas drawing context
100
- *
101
- * Args:
102
- * ctx: the 2D drawing context
103
- * item: the rendering instruction for the line. Must look like: {
104
- * type: "line:single",
105
- * startPos: [x, y],
106
- * endPos: [x, y],
107
- * }
108
- */
109
- function drawLine(ctx: any, item) {
110
- const path = new Path2D();
111
- ctx.lineWidth = styles.lineWidth;
112
- ctx.strokeStyle = styles.fgColor;
113
- path.moveTo(item.startPos[0], item.startPos[1]);
114
- path.lineTo(item.endPos[0], item.endPos[1]);
115
- ctx.stroke(path);
116
- }
117
-
118
- /**
119
- * Lookup table that maps drawing instruction types to the functions that
120
- * render them.
121
- */
122
- const drawingFuncs = {
123
- text: drawText,
124
- "line:single": drawLine,
125
- "line:double": drawDoubleLine,
126
- "line:triple": drawTripleLine,
127
- } as const;
128
-
129
- /**
130
- * Draw a single rendering instruction into a 2D canvas drawing context.
131
- */
132
- function drawItem(ctx: any) {
133
- return function (item: any) {
134
- drawingFuncs[item.type](ctx, item);
135
- };
136
- }
137
-
138
- /**
139
- * Lookup table for drawing priorities.
140
- *
141
- * Types with lower priorities are drawn first.
142
- */
143
- const ordering = {
144
- "line:single": 0,
145
- "line:double": 0,
146
- "line:triple": 0,
147
- text: 1,
148
- } as const;
149
-
150
- /**
151
- * Sorting comparison function that orders rendering instructions according to
152
- * their type's priority.
153
- */
154
- function compareElements(item0: any, item1: any) {
155
- return ordering[item0.type] - ordering[item1.type];
156
- }
157
-
158
- /**
159
- * Draw an array of rendering instructions into a 2D canvas drawing context.
160
- */
161
- function draw(ctx: any, items: Array<any>) {
162
- items.sort(compareElements).forEach(drawItem(ctx));
163
- }
164
-
165
- const styles = {
166
- bgColor: "rgb(255, 255, 255)",
167
- fgColor: "rgb(0, 0, 0)",
168
- fontSizePx: 12,
169
- lineWidth: 1,
170
- font: "12px sans",
171
- } as const;
172
-
173
- export default draw;
@@ -1,362 +0,0 @@
1
- /**
2
- * A molecule layout engine.
3
- *
4
- * This module transforms the SMILES syntax tree into a set of rendering
5
- * instructions. A rendering instruction is an object indicating what type of
6
- * thing to render (e.g. text or line), where to render it, and any other style
7
- * properties needed.
8
- *
9
- * For instance, an oxygen atom might be rendered as
10
- * {type: "text", value: "O", pos: [0, 0], idx: "1,0"}
11
- */
12
-
13
- // Default length of the bond. This currently corresponds directly to pixels
14
- // in the renderer, but we may want this just to be arbitrary in the future.
15
- const bondLength = 30;
16
-
17
- /**
18
- * Compute a coordinate by moving an angle and length from an origin point.
19
- *
20
- * Args:
21
- * origin: a list of the [x, y] coordinates of the origin
22
- * angle: an angle in degrees from the origin, following the typical
23
- * convention of +x axis = 0 degrees, +y axis = 90 degrees.
24
- * length: the distance to the new point
25
- * Return:
26
- * a two-element list containing the [x, y] coordinates of the point.
27
- */
28
- function polarAdd(origin: any, angle, length) {
29
- const x = origin[0];
30
- const y = origin[1];
31
- return [
32
- x + Math.cos((angle * 2 * Math.PI) / 360) * length,
33
- y + -1.0 * Math.sin((angle * 2 * Math.PI) / 360) * length,
34
- ];
35
- }
36
-
37
- /**
38
- * Compute the layout for a single atom.
39
- *
40
- * Args:
41
- * atom: the atom node for which layout is being created, as returned from
42
- * convertTree; the computed position of this atom is added to this
43
- * object in place, in addition to being returned in the layout
44
- * instruction.
45
- * TODO(colin): refactor so that we don't need to modify this in place
46
- * atoms: the list of all atoms, as returned from convertTree, used to
47
- * position this atom appropriately relative to its neighbors
48
- * bonds: the list of all bonds, as returned from convertTree, used to
49
- * determine the geometry based on bond type
50
- * rotationAngle: a constant rotation for the whole molecule (in degrees)
51
- *
52
- * Return:
53
- * a rendering instruction for the atom, containing a type (text), the text
54
- * to render, the position, and the atom index
55
- */
56
- function atomLayout(
57
- atom: any,
58
- atoms: any,
59
- bonds: ReadonlyArray<any>,
60
- rotationAngle: number,
61
- ): any {
62
- let textValue = atom.symbol;
63
- if (textValue === "C" && Object.keys(atoms).length !== 1) {
64
- // By convention, don't render the C for carbon in a chain.
65
- textValue = null;
66
- }
67
-
68
- if (atom.idx === "1,0") {
69
- // The first atom is special-cased because there are no neighbors for
70
- // relative positioning.
71
- const pos = [0, 0];
72
- atom.pos = pos;
73
- // Conventionally, molecules are rendered where the first bond is not
74
- // horizontal, but at a 30 degree angle, so subtract 30 degrees for the
75
- // first atom's direction.
76
- atom.baseAngle = -30 + rotationAngle;
77
- return {type: "text", value: textValue, pos: pos, idx: atom.idx};
78
- }
79
- // If we're an atom with any other index than the case just handled, we're
80
- // guaranteed to have a neighbor who has a defined position.
81
- const prevPositionedAtom =
82
- atoms[
83
- atom.connections.find(function (c) {
84
- return atoms[c].pos;
85
- })
86
- ];
87
-
88
- // Find this atom's index in the previous atom's connections
89
- const myIndex = prevPositionedAtom.connections.indexOf(atom.idx);
90
-
91
- let baseAngleIncrement = 60;
92
- let angleIncrement = 120;
93
- if (prevPositionedAtom.connections.length === 4) {
94
- // By convention, if an atom has 4 bonds, we represent it with 90
95
- // degree angles in 2D, even though it would have tetrahedral geometry
96
- // with ~110 degree angles in 3D.
97
- angleIncrement = 90;
98
- baseAngleIncrement = 90;
99
- } else if (
100
- bonds.find(
101
- (bond) => bond.bondType === "triple" && bond.to === atom.idx,
102
- ) ||
103
- bonds.find(
104
- (bond) =>
105
- bond.bondType === "triple" &&
106
- bond.to === prevPositionedAtom.idx,
107
- )
108
- ) {
109
- // Triple bonds have a bond angle of 180 degrees, so don't change the
110
- // direction in which we made the previous bond.
111
- angleIncrement = 0;
112
- baseAngleIncrement = 0;
113
- }
114
-
115
- let angle = 0;
116
- const idxPath = prevPositionedAtom.idx.split(":");
117
- const lastAtomIdx = idxPath[idxPath.length - 1].split(",")[0];
118
-
119
- // Conventionally, a single chain of atoms is rendered as a zig-zag pattern
120
- // with 120 degree angles. This means we need to flip the angle every
121
- // other atom. The parser ensures that indices always alternate odd-even,
122
- // including taking into account branch points.
123
- // TODO(colin): don't depend on the parser's indexing scheme and just track
124
- // this entirely in the layout engine.
125
- if (parseInt(lastAtomIdx) % 2 !== 0) {
126
- angle =
127
- prevPositionedAtom.baseAngle -
128
- (baseAngleIncrement - angleIncrement * myIndex);
129
- } else {
130
- angle =
131
- prevPositionedAtom.baseAngle +
132
- (baseAngleIncrement - angleIncrement * myIndex);
133
- }
134
-
135
- const pos = polarAdd(prevPositionedAtom.pos, angle, bondLength);
136
-
137
- atom.pos = pos;
138
- atom.baseAngle = angle;
139
-
140
- return {type: "text", value: textValue, pos: pos, idx: atom.idx};
141
- }
142
-
143
- /**
144
- * Get the start and end position for a bond connecting two atoms.
145
- *
146
- * If we have non-carbon atoms that render with explicit letters connected by a
147
- * bond, we don't want the line for the bond to extend into the lettering for
148
- * the atom.
149
- *
150
- * This function returns the start and end positions of the bond's line, taking
151
- * into account that one or both end points might need to be moved to make room
152
- * for text.
153
- *
154
- * TODO(colin): this makes assumptions about the relative sizes of the length
155
- * of a bond and the text. Think about alternate ways to represent this that
156
- * might not have that problem.
157
- */
158
- function maybeShrinkLines(fromAtom: any, toAtom) {
159
- const shrinkFactor = 0.25;
160
- let fromPos = [fromAtom.pos[0], fromAtom.pos[1]];
161
- let toPos = [toAtom.pos[0], toAtom.pos[1]];
162
- if (fromAtom.symbol !== "C") {
163
- fromPos = [
164
- toAtom.pos[0] -
165
- (1 - shrinkFactor) * (toAtom.pos[0] - fromAtom.pos[0]),
166
- toAtom.pos[1] -
167
- (1 - shrinkFactor) * (toAtom.pos[1] - fromAtom.pos[1]),
168
- ];
169
- }
170
- if (toAtom.symbol !== "C") {
171
- // For carbon atoms, conventionally we don't draw any letter, so this
172
- // special cases drawing the bond lines all the way to the point where
173
- // they meet.
174
- toPos = [
175
- fromAtom.pos[0] -
176
- (1 - shrinkFactor) * (fromAtom.pos[0] - toAtom.pos[0]),
177
- fromAtom.pos[1] -
178
- (1 - shrinkFactor) * (fromAtom.pos[1] - toAtom.pos[1]),
179
- ];
180
- }
181
- return [fromPos, toPos];
182
- }
183
-
184
- /**
185
- * Compute the layout for a bond between two atoms.
186
- *
187
- * Args:
188
- * bond: the bond node for which the layout is being computed, as returned
189
- * by convertTree
190
- * atoms: the list of all atoms returned by convertTree, which should
191
- * already have been processed for layout and thus have positions set
192
- *
193
- * Return:
194
- * a rendering instruction for the bond containing a type
195
- * (line:{single,double,triple}) and the line's endpoints
196
- */
197
- function bondLayout(bond: any, atoms: any): any {
198
- const fromAtom = atoms[bond.from];
199
- const toAtom = atoms[bond.to];
200
- const startAndEndPos = maybeShrinkLines(fromAtom, toAtom);
201
- return {
202
- type: "line:" + bond.bondType,
203
- startPos: startAndEndPos[0],
204
- endPos: startAndEndPos[1],
205
- };
206
- }
207
-
208
- /**
209
- * Convert an array of atom indices to a single string unique identifier.
210
- *
211
- * For linear molecules, or for atoms in the main chain, this will just be the
212
- * atom index, something like "0,1". For branched molecules, however, we
213
- * uniquely identify atoms by an array of atoms where the branching happened,
214
- * followed by the index in the current branch (like ["0,1", "1,2", "1,1"]).
215
- * This function just joins the parts with a colon so that we can have nice
216
- * object keys that still track the series of branches to get to an atom, which
217
- * is guaranteed to be a unique identifier.
218
- *
219
- */
220
- function idxString(idx) {
221
- return idx.join(":");
222
- }
223
-
224
- /**
225
- * Convert the parse tree output by the parser into an ordered list of atoms
226
- * and bonds to render.
227
- *
228
- * Args:
229
- * atoms: the output list of atoms that we're in the process of building.
230
- * This should be the empty list if not being called recursively.
231
- * bonds: the output list of bonds that we're in the process of building.
232
- * This should be the empty list if not being called recursively.
233
- * tree: the parse tree generated by the SMILES parser module.
234
- *
235
- * Return:
236
- * the final value of atoms and bonds, which are lists of all the atom
237
- * nodes and bond nodes, respectively, that need to be rendered.
238
- */
239
- function convertTree(atoms: any, bonds: any, tree: any): [any, any] {
240
- if (tree === null) {
241
- return [atoms, bonds];
242
- }
243
- if (tree.type === "atom") {
244
- const treeIdx = idxString(tree.idx);
245
- atoms[treeIdx] = {idx: treeIdx, symbol: tree.symbol, connections: []};
246
- if (tree.bonds) {
247
- tree.bonds.forEach(function (b) {
248
- const toIdx = idxString(b.to.idx);
249
- atoms[treeIdx].connections.push(toIdx);
250
- bonds.push({from: treeIdx, to: toIdx, bondType: b.bondType});
251
- convertTree(atoms, bonds, b.to);
252
- atoms[toIdx].connections.push(treeIdx);
253
- });
254
- }
255
- }
256
- return [atoms, bonds];
257
- }
258
-
259
- /**
260
- * Recursively process the queue of atoms that need to have layout computed.
261
- *
262
- * Args:
263
- * outputs: the array of atom rendering instructions we're in the process
264
- * of building. This should be the empty array if not being called
265
- * recursively.
266
- * atomProcessingQueue: the array of unique identifier strings (see the
267
- * comment for idxString for more information about these) of atoms
268
- * currently in line to be processed. When not being called
269
- * recursively, this should be a array with a single element, the
270
- * unique identifier of the first atom in the structure ("1,0" in the
271
- * current scheme).
272
- * atoms: the array of all atom nodes to be rendered, as returned by
273
- * convertTree
274
- * bonds: the array of all bond nodes to be rendered, as returned by
275
- * convertTree
276
- *
277
- * Return:
278
- * an array of rendering instructions for all the atoms in the molecule
279
- */
280
- function atomLayoutHelper(
281
- outputs,
282
- atomProcessingQueue,
283
- atoms,
284
- bonds,
285
- rotationAngle,
286
- ) {
287
- if (atomProcessingQueue.length === 0) {
288
- return outputs;
289
- }
290
-
291
- const queuedAtomIdx = atomProcessingQueue.shift();
292
- const atom = atoms[queuedAtomIdx];
293
- atom.connections.forEach(function (c) {
294
- if (!atoms[c].pos) {
295
- atomProcessingQueue.push(c);
296
- }
297
- });
298
- return atomLayoutHelper(
299
- outputs.concat(atomLayout(atom, atoms, bonds, rotationAngle)),
300
- atomProcessingQueue,
301
- atoms,
302
- bonds,
303
- rotationAngle,
304
- );
305
- }
306
-
307
- /**
308
- * Recursively process the queue of bonds that need to have layout computed.
309
- *
310
- * Args:
311
- * outputs: the array of bond rendering instructions we're in the process
312
- * of building. This should be the empty array or the array of all
313
- * atom rendering instructions if not being called recursively.
314
- * atoms: the array of all atom nodes to be rendered, as returned by
315
- * convertTree
316
- * bonds: the array of all bond nodes to be rendered, as returned by
317
- * convertTree
318
- *
319
- * Return:
320
- * an array of rendering instructions for all the bonds in the molecule
321
- * concatenated to the initial value of outputs
322
- */
323
- function bondLayoutHelper(outputs: Array<any>, atoms, bonds: any) {
324
- if (bonds.length === 0) {
325
- return outputs;
326
- }
327
- return bondLayoutHelper(
328
- outputs.concat(bondLayout(bonds[0], atoms)),
329
- atoms,
330
- bonds.slice(1),
331
- );
332
- }
333
-
334
- /**
335
- * Compute an array of rendering instructions from the parse tree of a molecule.
336
- *
337
- * Args:
338
- * tree: the parse tree as returned by the SMILES parser module
339
- * rotationAngle: a global rotation (in degrees) to be applied to the whole
340
- * molecule; this is manually adjustable in the widget.
341
- *
342
- * Return:
343
- * an array of rendering instructions for all the atoms and bonds in the
344
- * molecule suitable for processing by the renderer
345
- */
346
- function layout(tree: any, rotationAngle: any): any {
347
- const converted = convertTree({}, [], tree);
348
- const atoms = converted[0];
349
- const bonds = converted[1];
350
- const outputs = atomLayoutHelper([], ["1,0"], atoms, bonds, rotationAngle);
351
- return bondLayoutHelper(outputs, atoms, bonds);
352
- }
353
-
354
- export default {
355
- layout: layout,
356
- // The remainder are exported for testing and are not intended for external
357
- // use.
358
- _atomLayout: atomLayout,
359
- _bondLayout: bondLayout,
360
- _bondLength: bondLength,
361
- _convertTree: convertTree,
362
- };