@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
@@ -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
- };