@khanacademy/perseus 19.1.5 → 19.1.7

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 (489) hide show
  1. package/dist/components/graph.d.ts +0 -1
  2. package/dist/components/graphie.d.ts +0 -1
  3. package/dist/es/index.js +319 -212
  4. package/dist/es/index.js.map +1 -1
  5. package/dist/index.js +338 -222
  6. package/dist/index.js.map +1 -1
  7. package/dist/interactive2/movable-point.d.ts +195 -1
  8. package/dist/interactive2/movable.d.ts +1 -1
  9. package/dist/interactive2/types.d.ts +4 -2
  10. package/dist/interactive2.d.ts +2 -1
  11. package/dist/server-item-renderer.d.ts +2 -2
  12. package/dist/util/graphie.d.ts +12 -2
  13. package/dist/widgets/expression.d.ts +6 -6
  14. package/package.json +11 -8
  15. package/.babelrc.js +0 -8
  16. package/.eslintrc.js +0 -12
  17. package/CHANGELOG.md +0 -1432
  18. package/src/__stories__/article-renderer.stories.tsx +0 -100
  19. package/src/__stories__/hints-renderer.stories.tsx +0 -55
  20. package/src/__stories__/server-item-renderer.stories.tsx +0 -44
  21. package/src/__testdata__/article-renderer.testdata.ts +0 -212
  22. package/src/__testdata__/graphie.testdata.ts +0 -51
  23. package/src/__testdata__/renderer.testdata.ts +0 -274
  24. package/src/__testdata__/server-item-renderer.testdata.ts +0 -171
  25. package/src/__tests__/__snapshots__/perseus-markdown.test.ts.snap +0 -507
  26. package/src/__tests__/__snapshots__/renderer.test.tsx.snap +0 -525
  27. package/src/__tests__/__snapshots__/server-item-renderer.test.tsx.snap +0 -285
  28. package/src/__tests__/a11y.test.ts +0 -303
  29. package/src/__tests__/article-renderer.test.tsx +0 -130
  30. package/src/__tests__/error-boundary.test.tsx +0 -76
  31. package/src/__tests__/extract-perseus-data.test.ts +0 -1027
  32. package/src/__tests__/init.test.ts +0 -10
  33. package/src/__tests__/jipt-paragraphs.test.ts +0 -32
  34. package/src/__tests__/mock-asset-loading-widget.tsx +0 -53
  35. package/src/__tests__/mock-widget.tsx +0 -33
  36. package/src/__tests__/perseus-markdown.test.ts +0 -764
  37. package/src/__tests__/renderability.test.ts +0 -480
  38. package/src/__tests__/renderer-api.test.tsx +0 -302
  39. package/src/__tests__/renderer.test.tsx +0 -1816
  40. package/src/__tests__/server-item-renderer.test.tsx +0 -582
  41. package/src/__tests__/test-items/image-item.ts +0 -24
  42. package/src/__tests__/test-items/input-number-1-item.ts +0 -26
  43. package/src/__tests__/test-items/input-number-2-item.ts +0 -38
  44. package/src/__tests__/test-items/table-item.ts +0 -29
  45. package/src/__tests__/tex-wrangler.test.ts +0 -82
  46. package/src/__tests__/util.test.ts +0 -40
  47. package/src/__tests__/widget-container.test.tsx +0 -126
  48. package/src/__tests__/widgets.test.ts +0 -91
  49. package/src/a11y.ts +0 -45
  50. package/src/all-widgets.ts +0 -9
  51. package/src/article-renderer.tsx +0 -237
  52. package/src/asset-context.ts +0 -30
  53. package/src/basic-widgets.ts +0 -16
  54. package/src/components/__stories__/button-group.stories.tsx +0 -55
  55. package/src/components/__stories__/fixed-to-responsive.stories.tsx +0 -141
  56. package/src/components/__stories__/graph.stories.tsx +0 -28
  57. package/src/components/__stories__/graphie.stories.tsx +0 -33
  58. package/src/components/__stories__/hud.stories.tsx +0 -35
  59. package/src/components/__stories__/icon.stories.tsx +0 -63
  60. package/src/components/__stories__/image-loader.stories.tsx +0 -63
  61. package/src/components/__stories__/info-tip.stories.tsx +0 -31
  62. package/src/components/__stories__/inline-icon.stories.tsx +0 -40
  63. package/src/components/__stories__/input-with-examples.stories.tsx +0 -53
  64. package/src/components/__stories__/lint.stories.tsx +0 -86
  65. package/src/components/__stories__/math-input.stories.tsx +0 -43
  66. package/src/components/__stories__/math-output.stories.tsx +0 -23
  67. package/src/components/__stories__/multi-button-group.stories.tsx +0 -66
  68. package/src/components/__stories__/number-input.stories.tsx +0 -41
  69. package/src/components/__stories__/prop-check-box.stories.tsx +0 -65
  70. package/src/components/__stories__/range-input.stories.tsx +0 -29
  71. package/src/components/__stories__/simple-keypad-input.stories.tsx +0 -27
  72. package/src/components/__stories__/sortable.stories.tsx +0 -77
  73. package/src/components/__stories__/stub-tag-editor.stories.tsx +0 -45
  74. package/src/components/__stories__/svg-image.stories.tsx +0 -74
  75. package/src/components/__stories__/tex.stories.tsx +0 -23
  76. package/src/components/__stories__/text-input.stories.tsx +0 -33
  77. package/src/components/__stories__/text-list-editor.stories.tsx +0 -32
  78. package/src/components/__stories__/tooltip.stories.tsx +0 -52
  79. package/src/components/__stories__/zoomable-tex.stories.tsx +0 -41
  80. package/src/components/__stories__/zoomable.stories.tsx +0 -49
  81. package/src/components/__testdata__/sorter.testdata.ts +0 -19
  82. package/src/components/__tests__/__snapshots__/sortable.test.tsx.snap +0 -163
  83. package/src/components/__tests__/__snapshots__/sorter.test.tsx.snap +0 -265
  84. package/src/components/__tests__/math-input.test.tsx +0 -147
  85. package/src/components/__tests__/number-input.test.tsx +0 -128
  86. package/src/components/__tests__/sortable.test.tsx +0 -269
  87. package/src/components/__tests__/sorter.test.tsx +0 -114
  88. package/src/components/__tests__/zoomable.test.tsx +0 -399
  89. package/src/components/button-group.tsx +0 -130
  90. package/src/components/constants.ts +0 -14
  91. package/src/components/fixed-to-responsive.tsx +0 -169
  92. package/src/components/graph.tsx +0 -444
  93. package/src/components/graphie-classes.ts +0 -153
  94. package/src/components/graphie-movables.ts +0 -338
  95. package/src/components/graphie.tsx +0 -400
  96. package/src/components/highlighting/highlightable-content.tsx +0 -240
  97. package/src/components/highlighting/highlights.ts +0 -207
  98. package/src/components/highlighting/ranges.ts +0 -304
  99. package/src/components/highlighting/types.ts +0 -73
  100. package/src/components/highlighting/ui/highlight-renderer.tsx +0 -172
  101. package/src/components/highlighting/ui/highlight-set-renderer.tsx +0 -185
  102. package/src/components/highlighting/ui/highlight-tooltip.tsx +0 -141
  103. package/src/components/highlighting/ui/highlighting-ui.tsx +0 -143
  104. package/src/components/highlighting/ui/selection-tracker.tsx +0 -186
  105. package/src/components/highlighting/ui/types.ts +0 -21
  106. package/src/components/highlighting/ui/util.ts +0 -165
  107. package/src/components/highlighting/word-indexer.tsx +0 -152
  108. package/src/components/hud.tsx +0 -167
  109. package/src/components/icon.tsx +0 -141
  110. package/src/components/image-loader.tsx +0 -177
  111. package/src/components/info-tip/info-tip.tsx +0 -144
  112. package/src/components/info-tip.tsx +0 -39
  113. package/src/components/inline-icon.tsx +0 -60
  114. package/src/components/input-with-examples.tsx +0 -249
  115. package/src/components/lint.tsx +0 -459
  116. package/src/components/math-input.tsx +0 -474
  117. package/src/components/math-output.tsx +0 -134
  118. package/src/components/multi-button-group.tsx +0 -135
  119. package/src/components/number-input.tsx +0 -249
  120. package/src/components/prop-check-box.tsx +0 -79
  121. package/src/components/range-input.tsx +0 -60
  122. package/src/components/simple-keypad-input.tsx +0 -88
  123. package/src/components/sortable.tsx +0 -958
  124. package/src/components/stub-tag-editor.tsx +0 -53
  125. package/src/components/svg-image.tsx +0 -779
  126. package/src/components/tex.tsx +0 -67
  127. package/src/components/text-input.tsx +0 -129
  128. package/src/components/text-list-editor.tsx +0 -166
  129. package/src/components/tooltip.tsx +0 -410
  130. package/src/components/visibility-observer/__stories__/visibility-observer.stories.tsx +0 -141
  131. package/src/components/visibility-observer/create-visibility-observer.ts +0 -108
  132. package/src/components/visibility-observer/get-scroll-parent.ts +0 -46
  133. package/src/components/visibility-observer/visibility-observer.tsx +0 -124
  134. package/src/components/zoomable-tex.tsx +0 -78
  135. package/src/components/zoomable.tsx +0 -304
  136. package/src/components.ts +0 -15
  137. package/src/definition-context.tsx +0 -59
  138. package/src/dependencies.ts +0 -40
  139. package/src/error-boundary.tsx +0 -70
  140. package/src/extra-widgets.ts +0 -75
  141. package/src/hint-renderer.tsx +0 -151
  142. package/src/hints-renderer.tsx +0 -372
  143. package/src/icon-paths.ts +0 -119
  144. package/src/index.ts +0 -171
  145. package/src/init.ts +0 -56
  146. package/src/interaction-tracker.ts +0 -62
  147. package/src/interactive2/__tests__/movable-mock.ts +0 -55
  148. package/src/interactive2/__tests__/movable-point.test.ts +0 -144
  149. package/src/interactive2/interactive-util.test.ts +0 -93
  150. package/src/interactive2/interactive-util.ts +0 -159
  151. package/src/interactive2/movable-helper-methods.ts +0 -166
  152. package/src/interactive2/movable-line-options.ts +0 -419
  153. package/src/interactive2/movable-line.ts +0 -307
  154. package/src/interactive2/movable-point-options.ts +0 -224
  155. package/src/interactive2/movable-point.tsx +0 -585
  156. package/src/interactive2/movable-polygon-options.ts +0 -389
  157. package/src/interactive2/movable-polygon.ts +0 -360
  158. package/src/interactive2/movable.test.ts +0 -249
  159. package/src/interactive2/movable.ts +0 -437
  160. package/src/interactive2/objective_.ts +0 -79
  161. package/src/interactive2/types.ts +0 -17
  162. package/src/interactive2/wrapped-defaults.ts +0 -87
  163. package/src/interactive2/wrapped-ellipse.ts +0 -94
  164. package/src/interactive2/wrapped-line.ts +0 -116
  165. package/src/interactive2/wrapped-path.ts +0 -51
  166. package/src/interactive2.ts +0 -70
  167. package/src/item-version.ts +0 -10
  168. package/src/jipt-paragraphs.ts +0 -49
  169. package/src/jquery.mobile.vmouse.js +0 -545
  170. package/src/loading-context.ts +0 -21
  171. package/src/logging/log.test.ts +0 -39
  172. package/src/logging/log.ts +0 -97
  173. package/src/mixins/__tests__/widget-prop-denylist.test.ts +0 -21
  174. package/src/mixins/changeable.ts +0 -133
  175. package/src/mixins/editor-jsonify.ts +0 -13
  176. package/src/mixins/widget-jsonify-deprecated.ts +0 -23
  177. package/src/mixins/widget-prop-denylist.ts +0 -48
  178. package/src/multi-items/__stories__/multi-renderer.stories.tsx +0 -83
  179. package/src/multi-items/__testdata__/multi-renderer.testdata.ts +0 -172
  180. package/src/multi-items/__tests__/__snapshots__/multi-renderer.test.tsx.snap +0 -1164
  181. package/src/multi-items/__tests__/items.test.ts +0 -240
  182. package/src/multi-items/__tests__/multi-renderer.test.tsx +0 -914
  183. package/src/multi-items/__tests__/prop-type-builders.test.ts +0 -133
  184. package/src/multi-items/__tests__/shapes.test.ts +0 -43
  185. package/src/multi-items/__tests__/trees.test.ts +0 -317
  186. package/src/multi-items/item-types.ts +0 -56
  187. package/src/multi-items/items.ts +0 -176
  188. package/src/multi-items/multi-renderer.tsx +0 -569
  189. package/src/multi-items/prop-type-builders.ts +0 -106
  190. package/src/multi-items/shape-types.ts +0 -52
  191. package/src/multi-items/shapes.ts +0 -52
  192. package/src/multi-items/tree-types.ts +0 -47
  193. package/src/multi-items/trees.ts +0 -360
  194. package/src/multi-items.ts +0 -75
  195. package/src/perseus-api.tsx +0 -188
  196. package/src/perseus-env.ts +0 -27
  197. package/src/perseus-error.ts +0 -17
  198. package/src/perseus-markdown.tsx +0 -405
  199. package/src/perseus-types.ts +0 -1366
  200. package/src/perseus-version.ts +0 -9
  201. package/src/question-paragraph.tsx +0 -34
  202. package/src/renderability.ts +0 -109
  203. package/src/renderer.tsx +0 -2000
  204. package/src/server-item-renderer.tsx +0 -495
  205. package/src/sigfigs.ts +0 -490
  206. package/src/styles/articles.less +0 -749
  207. package/src/styles/constants.ts +0 -94
  208. package/src/styles/global-constants.ts +0 -343
  209. package/src/styles/global-styles.ts +0 -306
  210. package/src/styles/khan-exercise.css +0 -1468
  211. package/src/styles/media-queries.ts +0 -47
  212. package/src/styles/perseus-renderer.less +0 -732
  213. package/src/styles/shared.ts +0 -130
  214. package/src/styles/util.less +0 -47
  215. package/src/styles/variables.boostrap.less +0 -277
  216. package/src/styles/variables.less +0 -56
  217. package/src/styles/variables.shared.less +0 -340
  218. package/src/styles/widgets/categorizer.less +0 -38
  219. package/src/styles/widgets/dropdown.less +0 -3
  220. package/src/styles/widgets/expression.less +0 -65
  221. package/src/styles/widgets/graded-group.less +0 -36
  222. package/src/styles/widgets/grapher.less +0 -12
  223. package/src/styles/widgets/group.less +0 -19
  224. package/src/styles/widgets/image.less +0 -54
  225. package/src/styles/widgets/interactive-graph.less +0 -64
  226. package/src/styles/widgets/label-image.less +0 -57
  227. package/src/styles/widgets/matcher.less +0 -8
  228. package/src/styles/widgets/matrix.less +0 -126
  229. package/src/styles/widgets/measurer.less +0 -20
  230. package/src/styles/widgets/orderer.less +0 -98
  231. package/src/styles/widgets/passage.less +0 -154
  232. package/src/styles/widgets/plotter.less +0 -31
  233. package/src/styles/widgets/radio.less +0 -58
  234. package/src/styles/widgets/reaction-diagram.less +0 -35
  235. package/src/styles/widgets/sequence.less +0 -5
  236. package/src/styles/widgets/sortable.less +0 -113
  237. package/src/styles/widgets/table.less +0 -57
  238. package/src/styles/widgets/unit.less +0 -15
  239. package/src/tex-wrangler.ts +0 -182
  240. package/src/translation-linter.ts +0 -126
  241. package/src/traversal.ts +0 -138
  242. package/src/types.ts +0 -513
  243. package/src/util/a11y.ts +0 -23
  244. package/src/util/answer-types.test.ts +0 -114
  245. package/src/util/answer-types.ts +0 -876
  246. package/src/util/colors.ts +0 -93
  247. package/src/util/drawing-transform.test.ts +0 -67
  248. package/src/util/drawing-transform.ts +0 -102
  249. package/src/util/extract-perseus-data.ts +0 -539
  250. package/src/util/fix-passage-refs.ts +0 -121
  251. package/src/util/geometry.test.ts +0 -75
  252. package/src/util/geometry.ts +0 -312
  253. package/src/util/graph-bounds.ts +0 -23
  254. package/src/util/graph-utils.ts +0 -15
  255. package/src/util/graphie.test.ts +0 -1277
  256. package/src/util/graphie.ts +0 -1576
  257. package/src/util/interactive.ts +0 -4174
  258. package/src/util/interval.ts +0 -4
  259. package/src/util/katex-preprocess.ts +0 -14
  260. package/src/util/math.test.ts +0 -11
  261. package/src/util/math.ts +0 -294
  262. package/src/util/mobile-native-utils.test.ts +0 -22
  263. package/src/util/mobile-native-utils.ts +0 -12
  264. package/src/util/parse-perseus-json.test.ts +0 -10
  265. package/src/util/parse-perseus-json.ts +0 -13
  266. package/src/util/react-render.tsx +0 -27
  267. package/src/util/register-all-widgets-for-testing.ts +0 -13
  268. package/src/util/scroll-utils.ts +0 -155
  269. package/src/util/sizing-utils.ts +0 -46
  270. package/src/util/tex.ts +0 -73
  271. package/src/util/url-utils.ts +0 -34
  272. package/src/util.graphie.test.ts +0 -45
  273. package/src/util.graphie.ts +0 -59
  274. package/src/util.ts +0 -966
  275. package/src/version.ts +0 -10
  276. package/src/widget-container.tsx +0 -199
  277. package/src/widgets/__stories__/categorizer.stories.tsx +0 -14
  278. package/src/widgets/__stories__/cs-program.stories.tsx +0 -14
  279. package/src/widgets/__stories__/definition.stories.tsx +0 -114
  280. package/src/widgets/__stories__/dropdown.stories.tsx +0 -14
  281. package/src/widgets/__stories__/explanation.stories.tsx +0 -18
  282. package/src/widgets/__stories__/expression.stories.tsx +0 -145
  283. package/src/widgets/__stories__/graded-group-set.stories.tsx +0 -31
  284. package/src/widgets/__stories__/graded-group.stories.tsx +0 -31
  285. package/src/widgets/__stories__/grapher.stories.tsx +0 -46
  286. package/src/widgets/__stories__/group.stories.tsx +0 -14
  287. package/src/widgets/__stories__/iframe.stories.tsx +0 -14
  288. package/src/widgets/__stories__/image.stories.tsx +0 -85
  289. package/src/widgets/__stories__/input-number.stories.tsx +0 -101
  290. package/src/widgets/__stories__/interaction.stories.tsx +0 -14
  291. package/src/widgets/__stories__/interactive-graph.stories.tsx +0 -60
  292. package/src/widgets/__stories__/label-image.stories.tsx +0 -130
  293. package/src/widgets/__stories__/matcher.stories.tsx +0 -14
  294. package/src/widgets/__stories__/matrix.stories.tsx +0 -14
  295. package/src/widgets/__stories__/number-line.stories.tsx +0 -14
  296. package/src/widgets/__stories__/numeric-input.stories.tsx +0 -105
  297. package/src/widgets/__stories__/orderer.stories.tsx +0 -18
  298. package/src/widgets/__stories__/passage-ref.stories.tsx +0 -33
  299. package/src/widgets/__stories__/passage.stories.tsx +0 -39
  300. package/src/widgets/__stories__/plotter.stories.tsx +0 -27
  301. package/src/widgets/__stories__/radio.stories.tsx +0 -86
  302. package/src/widgets/__stories__/random-widgets.stories.tsx +0 -59
  303. package/src/widgets/__stories__/sorter.stories.tsx +0 -14
  304. package/src/widgets/__stories__/test-keypad-context-wrapper.tsx +0 -66
  305. package/src/widgets/__stories__/unit.stories.tsx +0 -28
  306. package/src/widgets/__stories__/video-transcript-link.stories.tsx +0 -23
  307. package/src/widgets/__stories__/video.stories.tsx +0 -22
  308. package/src/widgets/__testdata__/base-radio.testdata.ts +0 -21
  309. package/src/widgets/__testdata__/categorizer.testdata.ts +0 -89
  310. package/src/widgets/__testdata__/cs-program.testdata.ts +0 -27
  311. package/src/widgets/__testdata__/dropdown.testdata.ts +0 -71
  312. package/src/widgets/__testdata__/explanation.testdata.ts +0 -85
  313. package/src/widgets/__testdata__/expression.testdata.ts +0 -198
  314. package/src/widgets/__testdata__/graded-group-set.testdata.ts +0 -356
  315. package/src/widgets/__testdata__/graded-group.testdata.ts +0 -77
  316. package/src/widgets/__testdata__/grapher.testdata.ts +0 -374
  317. package/src/widgets/__testdata__/group.testdata.ts +0 -153
  318. package/src/widgets/__testdata__/iframe.testdata.ts +0 -35
  319. package/src/widgets/__testdata__/image.testdata.ts +0 -36
  320. package/src/widgets/__testdata__/input-number.testdata.ts +0 -72
  321. package/src/widgets/__testdata__/interaction.testdata.ts +0 -262
  322. package/src/widgets/__testdata__/interactive-graph-random.testdata.ts +0 -269
  323. package/src/widgets/__testdata__/interactive-graph.testdata.ts +0 -644
  324. package/src/widgets/__testdata__/label-image.testdata.ts +0 -308
  325. package/src/widgets/__testdata__/matcher.testdata.ts +0 -33
  326. package/src/widgets/__testdata__/matrix.testdata.ts +0 -28
  327. package/src/widgets/__testdata__/number-line.testdata.ts +0 -30
  328. package/src/widgets/__testdata__/numeric-input.testdata.ts +0 -265
  329. package/src/widgets/__testdata__/orderer.testdata.ts +0 -123
  330. package/src/widgets/__testdata__/passage-ref.testdata.ts +0 -101
  331. package/src/widgets/__testdata__/passage.testdata.ts +0 -95
  332. package/src/widgets/__testdata__/plotter.testdata.ts +0 -36
  333. package/src/widgets/__testdata__/radio.testdata.ts +0 -324
  334. package/src/widgets/__testdata__/randomizers.ts +0 -51
  335. package/src/widgets/__testdata__/sorter.testdata.ts +0 -19
  336. package/src/widgets/__testdata__/video.testdata.ts +0 -61
  337. package/src/widgets/__tests__/__snapshots__/categorizer.test.ts.snap +0 -940
  338. package/src/widgets/__tests__/__snapshots__/cs-program.test.ts.snap +0 -67
  339. package/src/widgets/__tests__/__snapshots__/definition.test.ts.snap +0 -97
  340. package/src/widgets/__tests__/__snapshots__/dropdown.test.ts.snap +0 -133
  341. package/src/widgets/__tests__/__snapshots__/explanation.test.ts.snap +0 -425
  342. package/src/widgets/__tests__/__snapshots__/graded-group-set-jipt.test.ts.snap +0 -729
  343. package/src/widgets/__tests__/__snapshots__/graded-group-set.test.ts.snap +0 -339
  344. package/src/widgets/__tests__/__snapshots__/graded-group.test.ts.snap +0 -801
  345. package/src/widgets/__tests__/__snapshots__/grapher.test.ts.snap +0 -2673
  346. package/src/widgets/__tests__/__snapshots__/group.test.tsx.snap +0 -1211
  347. package/src/widgets/__tests__/__snapshots__/iframe.test.ts.snap +0 -61
  348. package/src/widgets/__tests__/__snapshots__/image.test.ts.snap +0 -378
  349. package/src/widgets/__tests__/__snapshots__/input-number.test.ts.snap +0 -495
  350. package/src/widgets/__tests__/__snapshots__/interaction.test.ts.snap +0 -292
  351. package/src/widgets/__tests__/__snapshots__/interactive-graph.test.ts.snap +0 -2889
  352. package/src/widgets/__tests__/__snapshots__/matcher.test.tsx.snap +0 -883
  353. package/src/widgets/__tests__/__snapshots__/matrix.test.ts.snap +0 -514
  354. package/src/widgets/__tests__/__snapshots__/number-line.test.ts.snap +0 -814
  355. package/src/widgets/__tests__/__snapshots__/numeric-input.test.ts.snap +0 -470
  356. package/src/widgets/__tests__/__snapshots__/orderer.test.ts.snap +0 -243
  357. package/src/widgets/__tests__/__snapshots__/passage-ref.test.ts.snap +0 -434
  358. package/src/widgets/__tests__/__snapshots__/passage.test.tsx.snap +0 -1956
  359. package/src/widgets/__tests__/__snapshots__/plotter.test.tsx.snap +0 -827
  360. package/src/widgets/__tests__/__snapshots__/radio.test.ts.snap +0 -4237
  361. package/src/widgets/__tests__/__snapshots__/unit.test.tsx.snap +0 -20
  362. package/src/widgets/__tests__/__snapshots__/video.test.ts.snap +0 -153
  363. package/src/widgets/__tests__/categorizer.test.ts +0 -203
  364. package/src/widgets/__tests__/cs-program.test.ts +0 -43
  365. package/src/widgets/__tests__/definition.test.ts +0 -136
  366. package/src/widgets/__tests__/dropdown.test.ts +0 -105
  367. package/src/widgets/__tests__/explanation.test.ts +0 -198
  368. package/src/widgets/__tests__/expression-mobile.test.tsx +0 -363
  369. package/src/widgets/__tests__/expression.test.tsx +0 -484
  370. package/src/widgets/__tests__/graded-group-set-jipt.test.ts +0 -30
  371. package/src/widgets/__tests__/graded-group-set.test.ts +0 -288
  372. package/src/widgets/__tests__/graded-group.test.ts +0 -232
  373. package/src/widgets/__tests__/grapher.cypress.ts +0 -576
  374. package/src/widgets/__tests__/grapher.test.ts +0 -33
  375. package/src/widgets/__tests__/group.test.tsx +0 -510
  376. package/src/widgets/__tests__/iframe.test.ts +0 -45
  377. package/src/widgets/__tests__/image.test.ts +0 -62
  378. package/src/widgets/__tests__/input-number.test.ts +0 -354
  379. package/src/widgets/__tests__/interaction.test.ts +0 -31
  380. package/src/widgets/__tests__/interactive-graph.cypress.ts +0 -815
  381. package/src/widgets/__tests__/interactive-graph.test.ts +0 -106
  382. package/src/widgets/__tests__/matcher.test.tsx +0 -176
  383. package/src/widgets/__tests__/matrix.test.ts +0 -82
  384. package/src/widgets/__tests__/number-line.test.ts +0 -79
  385. package/src/widgets/__tests__/numeric-input.test.ts +0 -575
  386. package/src/widgets/__tests__/orderer.test.ts +0 -73
  387. package/src/widgets/__tests__/passage-ref.test.ts +0 -168
  388. package/src/widgets/__tests__/passage.test.tsx +0 -224
  389. package/src/widgets/__tests__/plotter.test.tsx +0 -69
  390. package/src/widgets/__tests__/radio/base-radio.test.tsx +0 -470
  391. package/src/widgets/__tests__/radio/choice-icon.test.tsx +0 -90
  392. package/src/widgets/__tests__/radio/choice.test.tsx +0 -310
  393. package/src/widgets/__tests__/radio/focus-ring.test.tsx +0 -22
  394. package/src/widgets/__tests__/radio/option-status.test.tsx +0 -77
  395. package/src/widgets/__tests__/radio.test.ts +0 -807
  396. package/src/widgets/__tests__/randomizers.test.ts +0 -53
  397. package/src/widgets/__tests__/renderQuestion.tsx +0 -101
  398. package/src/widgets/__tests__/unit.test.tsx +0 -168
  399. package/src/widgets/__tests__/video.test.ts +0 -69
  400. package/src/widgets/categorizer.tsx +0 -344
  401. package/src/widgets/cs-program.tsx +0 -227
  402. package/src/widgets/definition.tsx +0 -121
  403. package/src/widgets/deprecated-standin/__stories__/deprecated-standin.stories.tsx +0 -30
  404. package/src/widgets/deprecated-standin/__tests__/__snapshots__/deprecated-standin.test.ts.snap +0 -70
  405. package/src/widgets/deprecated-standin/__tests__/deprecated-standin.test.ts +0 -93
  406. package/src/widgets/deprecated-standin/index.tsx +0 -58
  407. package/src/widgets/dropdown.tsx +0 -142
  408. package/src/widgets/explanation.tsx +0 -317
  409. package/src/widgets/expression.tsx +0 -707
  410. package/src/widgets/graded-group-answer-bar.tsx +0 -142
  411. package/src/widgets/graded-group-set.tsx +0 -338
  412. package/src/widgets/graded-group.tsx +0 -471
  413. package/src/widgets/grapher/util.tsx +0 -799
  414. package/src/widgets/grapher.tsx +0 -660
  415. package/src/widgets/group.tsx +0 -195
  416. package/src/widgets/iframe.tsx +0 -195
  417. package/src/widgets/image.tsx +0 -312
  418. package/src/widgets/input-number.tsx +0 -412
  419. package/src/widgets/interaction/arrow-picker.tsx +0 -38
  420. package/src/widgets/interaction/color-picker.tsx +0 -69
  421. package/src/widgets/interaction/dash-picker.tsx +0 -45
  422. package/src/widgets/interaction/element-container.tsx +0 -100
  423. package/src/widgets/interaction.tsx +0 -826
  424. package/src/widgets/interactive-graph.tsx +0 -2597
  425. package/src/widgets/label-image/__stories__/answer-choices.stories.tsx +0 -91
  426. package/src/widgets/label-image/__stories__/answer-pill.stories.tsx +0 -62
  427. package/src/widgets/label-image/__stories__/marker.stories.tsx +0 -171
  428. package/src/widgets/label-image/__tests__/answer-pill.test.tsx +0 -75
  429. package/src/widgets/label-image/__tests__/hide-answers-toggle.test.tsx +0 -39
  430. package/src/widgets/label-image/answer-choices.tsx +0 -88
  431. package/src/widgets/label-image/answer-pill.tsx +0 -103
  432. package/src/widgets/label-image/hide-answers-toggle.tsx +0 -40
  433. package/src/widgets/label-image/marker.tsx +0 -268
  434. package/src/widgets/label-image/strings.ts +0 -5
  435. package/src/widgets/label-image/types.ts +0 -27
  436. package/src/widgets/label-image.test.ts +0 -928
  437. package/src/widgets/label-image.tsx +0 -819
  438. package/src/widgets/lights-puzzle.tsx +0 -359
  439. package/src/widgets/matcher.tsx +0 -298
  440. package/src/widgets/matrix.tsx +0 -634
  441. package/src/widgets/measurer.tsx +0 -222
  442. package/src/widgets/molecule/__tests__/layout.test.ts +0 -162
  443. package/src/widgets/molecule/__tests__/parser.test.ts +0 -155
  444. package/src/widgets/molecule/molecule-drawing.ts +0 -173
  445. package/src/widgets/molecule/molecule-layout.ts +0 -362
  446. package/src/widgets/molecule/smiles-parser.ts +0 -296
  447. package/src/widgets/molecule.tsx +0 -172
  448. package/src/widgets/number-line.tsx +0 -862
  449. package/src/widgets/numeric-input.tsx +0 -576
  450. package/src/widgets/orderer.tsx +0 -786
  451. package/src/widgets/passage/__tests__/passage-markdown.test.ts +0 -376
  452. package/src/widgets/passage/passage-markdown.tsx +0 -475
  453. package/src/widgets/passage-ref-target.tsx +0 -76
  454. package/src/widgets/passage-ref.tsx +0 -213
  455. package/src/widgets/passage.tsx +0 -582
  456. package/src/widgets/plotter.tsx +0 -1194
  457. package/src/widgets/radio/__stories__/base-radio.stories.tsx +0 -196
  458. package/src/widgets/radio/__stories__/choice-icon.stories.tsx +0 -166
  459. package/src/widgets/radio/__stories__/choice-none-above.stories.tsx +0 -40
  460. package/src/widgets/radio/__stories__/choice.stories.tsx +0 -137
  461. package/src/widgets/radio/__stories__/focus-ring.stories.tsx +0 -43
  462. package/src/widgets/radio/__stories__/option-status.stories.tsx +0 -103
  463. package/src/widgets/radio/base-radio.tsx +0 -511
  464. package/src/widgets/radio/choice-a11y-text.ts +0 -61
  465. package/src/widgets/radio/choice-icon/choice-icon.tsx +0 -218
  466. package/src/widgets/radio/choice-icon/cross-out-line.tsx +0 -51
  467. package/src/widgets/radio/choice-icon/shared-styles.ts +0 -15
  468. package/src/widgets/radio/choice-none-above.tsx +0 -56
  469. package/src/widgets/radio/choice.jsx.fixture.ts +0 -45
  470. package/src/widgets/radio/choice.tsx +0 -359
  471. package/src/widgets/radio/focus-ring.tsx +0 -57
  472. package/src/widgets/radio/option-status.tsx +0 -98
  473. package/src/widgets/radio/util.test.ts +0 -18
  474. package/src/widgets/radio/util.ts +0 -31
  475. package/src/widgets/radio/widget.tsx +0 -520
  476. package/src/widgets/radio.ts +0 -157
  477. package/src/widgets/reaction-diagram.tsx +0 -144
  478. package/src/widgets/sequence.tsx +0 -142
  479. package/src/widgets/simulator.tsx +0 -829
  480. package/src/widgets/sorter.tsx +0 -155
  481. package/src/widgets/table.tsx +0 -393
  482. package/src/widgets/unit.tsx +0 -374
  483. package/src/widgets/video-transcript-link.test.tsx +0 -213
  484. package/src/widgets/video-transcript-link.tsx +0 -84
  485. package/src/widgets/video.tsx +0 -135
  486. package/src/widgets.ts +0 -489
  487. package/src/zoom.ts +0 -555
  488. package/tsconfig-build.json +0 -26
  489. 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
- };