@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,4 +0,0 @@
1
- // type Interval represents a closed interval.
2
- // (see: https://en.wikipedia.org/wiki/Interval_(mathematics))
3
-
4
- export type Interval = [number, number];
@@ -1,14 +0,0 @@
1
- /**
2
- * Preprocess TeX code to convert things that KaTeX doesn't know how to handle
3
- * to things is does.
4
- */
5
-
6
- export default (texCode: string): string =>
7
- texCode
8
- // Replace uses of \begin{align}...\end{align} which KaTeX doesn't
9
- // support (yet) with \begin{aligned}...\end{aligned} which renders
10
- // the same is supported by KaTeX. It does the same for align*.
11
- // TODO(kevinb) update content to use aligned instead of align.
12
- .replace(/\{align[*]?\}/g, "{aligned}")
13
- // Replace non-breaking spaces with regular spaces.
14
- .replace(/[\u00a0]/g, " ");
@@ -1,11 +0,0 @@
1
- import {sum} from "./math";
2
-
3
- describe("sum", () => {
4
- it("returns 0 given an empty array", () => {
5
- expect(sum([])).toBe(0);
6
- });
7
-
8
- it("adds the numbers in the array", () => {
9
- expect(sum([1, 2, 5])).toBe(8);
10
- });
11
- });
package/src/util/math.ts DELETED
@@ -1,294 +0,0 @@
1
- import {number as knumber} from "@khanacademy/kmath";
2
- import $ from "jquery";
3
- import _ from "underscore";
4
-
5
- import type {MathFormat} from "../perseus-types";
6
-
7
- const KhanMath = {
8
- // Simplify formulas before display
9
- cleanMath: function (expr: string): string {
10
- return typeof expr === "string"
11
- ? expr
12
- .replace(/\+\s*-/g, "- ")
13
- .replace(/-\s*-/g, "+ ")
14
- .replace(/\^1/g, "")
15
- : expr;
16
- },
17
-
18
- // Bound a number by 1e-6 and 1e20 to avoid exponents after toString
19
- bound: function (num: number): number {
20
- if (num === 0) {
21
- return num;
22
- }
23
- if (num < 0) {
24
- return -KhanMath.bound(-num);
25
- }
26
- return Math.max(1e-6, Math.min(num, 1e20));
27
- },
28
-
29
- factorial: function (x: number): number {
30
- if (x <= 1) {
31
- return x;
32
- }
33
- return x * KhanMath.factorial(x - 1);
34
- },
35
-
36
- getGCD: function (a: number, b: number): number {
37
- if (arguments.length > 2) {
38
- // TODO(kevinb): rewrite using rest args instead of arguments
39
- // eslint-disable-next-line prefer-rest-params
40
- const rest = [].slice.call(arguments, 1);
41
- // @ts-expect-error - TS2556 - A spread argument must either have a tuple type or be passed to a rest parameter.
42
- return KhanMath.getGCD(a, KhanMath.getGCD(...rest));
43
- }
44
- let mod;
45
-
46
- a = Math.abs(a);
47
- b = Math.abs(b);
48
-
49
- while (b) {
50
- mod = a % b;
51
- a = b;
52
- b = mod;
53
- }
54
-
55
- return a;
56
- },
57
-
58
- getLCM: function (a: number, b: number): number {
59
- if (arguments.length > 2) {
60
- // TODO(kevinb): rewrite using rest args instead of arguments
61
- // eslint-disable-next-line prefer-rest-params
62
- const rest = [].slice.call(arguments, 1);
63
- // @ts-expect-error - TS2556 - A spread argument must either have a tuple type or be passed to a rest parameter.
64
- return KhanMath.getLCM(a, KhanMath.getLCM(...rest));
65
- }
66
- return Math.abs(a * b) / KhanMath.getGCD(a, b);
67
- },
68
-
69
- primes: [
70
- 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67,
71
- 71, 73, 79, 83, 89, 97,
72
- ],
73
-
74
- isPrime: function (n: number): boolean {
75
- if (n <= 1) {
76
- return false;
77
- }
78
- if (n < 101) {
79
- return !!$.grep(KhanMath.primes, function (p, i) {
80
- return Math.abs(p - n) <= 0.5;
81
- }).length;
82
- }
83
- if (n <= 1 || (n > 2 && n % 2 === 0)) {
84
- return false;
85
- }
86
- for (let i = 3, sqrt = Math.sqrt(n); i <= sqrt; i += 2) {
87
- if (n % i === 0) {
88
- return false;
89
- }
90
- }
91
-
92
- return true;
93
- },
94
- // @ts-expect-error - TS2366 - Function lacks ending return statement and return type does not include 'undefined'.
95
- getPrimeFactorization: function (number: number): ReadonlyArray<number> {
96
- if (number === 1) {
97
- return [];
98
- }
99
- if (KhanMath.isPrime(number)) {
100
- return [number];
101
- }
102
-
103
- const maxf = Math.sqrt(number);
104
- for (let f = 2; f <= maxf; f++) {
105
- if (number % f === 0) {
106
- return $.merge(
107
- KhanMath.getPrimeFactorization(f),
108
- KhanMath.getPrimeFactorization(number / f),
109
- );
110
- }
111
- }
112
- },
113
-
114
- // Round a number to the nearest increment
115
- // E.g., if increment = 30 and num = 40, return 30. if increment = 30 and
116
- // num = 45, return 60.
117
- roundToNearest: function (increment: number, num: number): number {
118
- return Math.round(num / increment) * increment;
119
- },
120
-
121
- // Round a number to a certain number of decimal places
122
- roundTo: function (precision: number, num: number): number {
123
- const factor = Math.pow(10, precision).toFixed(5);
124
- // @ts-expect-error - TS2345 - Argument of type 'string' is not assignable to parameter of type 'number'. | TS2363 - The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type. | TS2363 - The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.
125
- return Math.round((num * factor).toFixed(5)) / factor;
126
- },
127
-
128
- /**
129
- * Return a string of num rounded to a fixed precision decimal places,
130
- * with an approx symbol if num had to be rounded, and trailing 0s
131
- */
132
- toFixedApprox: function (num: number, precision: number): string {
133
- // TODO(aria): Make this locale-dependent like KhanUtil.localeToFixed
134
- const fixedStr = num.toFixed(precision);
135
- if (knumber.equal(+fixedStr, num)) {
136
- return fixedStr;
137
- }
138
- return "\\approx " + fixedStr;
139
- },
140
-
141
- /**
142
- * Return a string of num rounded to precision decimal places, with an
143
- * approx symbol if num had to be rounded, but no trailing 0s if it was
144
- * not rounded.
145
- */
146
- roundToApprox: function (num: number, precision: number): string {
147
- const fixed = KhanMath.roundTo(precision, num);
148
- if (knumber.equal(fixed, num)) {
149
- return String(fixed);
150
- }
151
- return KhanMath.toFixedApprox(num, precision);
152
- },
153
-
154
- // toFraction(4/8) => [1, 2]
155
- // toFraction(0.666) => [333, 500]
156
- // toFraction(0.666, 0.001) => [2, 3]
157
- //
158
- // tolerance can't be bigger than 1, sorry
159
- toFraction: function (
160
- decimal: number,
161
- tolerance?: number,
162
- ): [number, number] {
163
- if (tolerance == null) {
164
- tolerance = Math.pow(2, -46);
165
- }
166
-
167
- if (decimal < 0 || decimal > 1) {
168
- let fract = decimal % 1;
169
- fract += fract < 0 ? 1 : 0;
170
-
171
- const nd = KhanMath.toFraction(fract, tolerance);
172
- nd[0] += Math.round(decimal - fract) * nd[1];
173
- return nd;
174
- }
175
- if (Math.abs(Math.round(Number(decimal)) - decimal) <= tolerance) {
176
- return [Math.round(decimal), 1];
177
- }
178
- let loN = 0;
179
- let loD = 1;
180
- let hiN = 1;
181
- let hiD = 1;
182
- let midN = 1;
183
- let midD = 2;
184
-
185
- // eslint-disable-next-line no-constant-condition
186
- while (true) {
187
- if (Math.abs(Number(midN / midD) - decimal) <= tolerance) {
188
- return [midN, midD];
189
- }
190
- if (midN / midD < decimal) {
191
- loN = midN;
192
- loD = midD;
193
- } else {
194
- hiN = midN;
195
- hiD = midD;
196
- }
197
-
198
- midN = loN + hiN;
199
- midD = loD + hiD;
200
- }
201
- },
202
-
203
- // Returns the format (string) of a given numeric string
204
- // Note: purposively more inclusive than answer-types' predicate.forms
205
- // That is, it is not necessarily true that interpreted input are numeric
206
- getNumericFormat: function (text: string): MathFormat | null | undefined {
207
- text = $.trim(text);
208
- text = text.replace(/\u2212/, "-").replace(/([+-])\s+/g, "$1");
209
- if (text.match(/^[+-]?\d+$/)) {
210
- return "integer";
211
- }
212
- if (text.match(/^[+-]?\d+\s+\d+\s*\/\s*\d+$/)) {
213
- return "mixed";
214
- }
215
- const fraction = text.match(/^[+-]?(\d+)\s*\/\s*(\d+)$/);
216
- if (fraction) {
217
- return parseFloat(fraction[1]) > parseFloat(fraction[2])
218
- ? "improper"
219
- : "proper";
220
- }
221
- if (text.replace(/[,. ]/g, "").match(/^\d+$/)) {
222
- return "decimal";
223
- }
224
- if (text.match(/(pi?|\u03c0|t(?:au)?|\u03c4|pau)/)) {
225
- return "pi";
226
- }
227
- return null;
228
- },
229
-
230
- // Returns a string of the number in a specified format
231
- toNumericString: function (number: number, format?: MathFormat): string {
232
- if (number == null) {
233
- return "";
234
- }
235
- if (number === 0) {
236
- return "0"; // otherwise it might end up as 0% or 0pi
237
- }
238
-
239
- if (format === "percent") {
240
- return number * 100 + "%";
241
- }
242
-
243
- if (format === "pi") {
244
- const fraction = knumber.toFraction(number / Math.PI);
245
- const numerator = Math.abs(fraction[0]);
246
- const denominator = fraction[1];
247
- if (knumber.isInteger(numerator)) {
248
- const sign = number < 0 ? "-" : "";
249
- const pi = "\u03C0";
250
- return (
251
- sign +
252
- (numerator === 1 ? "" : numerator) +
253
- pi +
254
- (denominator === 1 ? "" : "/" + denominator)
255
- );
256
- }
257
- }
258
-
259
- if (_(["proper", "improper", "mixed", "fraction"]).contains(format)) {
260
- const fraction = knumber.toFraction(number);
261
- const numerator = Math.abs(fraction[0]);
262
- const denominator = fraction[1];
263
- const sign = number < 0 ? "-" : "";
264
- if (denominator === 1) {
265
- return sign + numerator; // for integers, irrational, d > 1000
266
- }
267
- if (format === "mixed") {
268
- const modulus = numerator % denominator;
269
- const integer = (numerator - modulus) / denominator;
270
- return (
271
- sign +
272
- (integer ? integer + " " : "") +
273
- modulus +
274
- "/" +
275
- denominator
276
- );
277
- } // otherwise proper, improper, or fraction
278
- return sign + numerator + "/" + denominator;
279
- }
280
-
281
- // otherwise (decimal, float, long long)
282
- return String(number);
283
- },
284
- } as const;
285
-
286
- export function sum(array: number[]): number {
287
- return array.reduce(add, 0);
288
- }
289
-
290
- export function add(a: number, b: number): number {
291
- return a + b;
292
- }
293
-
294
- export default KhanMath;
@@ -1,22 +0,0 @@
1
- import {isFileProtocol} from "./mobile-native-utils";
2
-
3
- describe("isFileProtocol", () => {
4
- it("If protocol is falsy, returns false", () => {
5
- expect(isFileProtocol(undefined)).toEqual(false);
6
- expect(isFileProtocol(null)).toEqual(false);
7
- expect(isFileProtocol("")).toEqual(false);
8
- });
9
-
10
- it("If protocol is file, returns true", () => {
11
- expect(isFileProtocol("file:")).toEqual(true);
12
- expect(isFileProtocol("File:")).toEqual(true);
13
- expect(isFileProtocol("FILE:")).toEqual(true);
14
- });
15
-
16
- it("If protocol is not file, returns false", () => {
17
- expect(isFileProtocol("ftp:")).toEqual(false);
18
- expect(isFileProtocol("http:")).toEqual(false);
19
- expect(isFileProtocol("https:")).toEqual(false);
20
- expect(isFileProtocol("mailto:")).toEqual(false);
21
- });
22
- });
@@ -1,12 +0,0 @@
1
- /**
2
- * Helps us detect that we are running in a mobile native environment for
3
- * any js that is bundled in the mobile app (e.g. Perseus).
4
- *
5
- * @param {*} protocol protocol portion of a URL. Generally: window.location.protocol
6
- */
7
- export const isFileProtocol = (protocol?: string | null): boolean => {
8
- if (protocol && protocol.toLowerCase() === "file:") {
9
- return true;
10
- }
11
- return false;
12
- };
@@ -1,10 +0,0 @@
1
- import {parsePerseusItem} from "./parse-perseus-json";
2
-
3
- describe("parsePerseusItem", () => {
4
- it("should parse JSON", () => {
5
- const result = parsePerseusItem(
6
- `{ "question": { "content": "idk why I'm testing this" }}`,
7
- );
8
- expect(result.question.content).toBe("idk why I'm testing this");
9
- });
10
- });
@@ -1,13 +0,0 @@
1
- import type {PerseusItem} from "../perseus-types";
2
-
3
- /**
4
- * Helper to parse PerseusItem JSON
5
- * Why not just use JSON.parse? We want:
6
- * - To make sure types are correct
7
- * - To give us a central place to validate/transform output if needed
8
- * @param {string} json - the stringified PerseusItem JSON
9
- * @returns {PerseusItem} the parsed PerseusItem object
10
- */
11
- export function parsePerseusItem(json: string): PerseusItem {
12
- return JSON.parse(json);
13
- }
@@ -1,27 +0,0 @@
1
- import {RenderStateRoot} from "@khanacademy/wonder-blocks-core";
2
- import * as React from "react";
3
- import ReactDOM from "react-dom";
4
-
5
- export default function render<ElementType extends React.ElementType>(
6
- element: React.ReactNode,
7
- container: HTMLElement,
8
- callback?: () => void,
9
- ): React.ElementRef<ElementType> {
10
- // TODO(LP-11406): Replace this, or callers, with React Portal
11
- // @ts-expect-error - TS2322 - Type 'void' is not assignable to type 'ElementRef<ElementType>'.
12
- // eslint-disable-next-line no-restricted-syntax
13
- return ReactDOM.render(
14
- /**
15
- * `RenderStateRoot` is responsible for tracking whether it's
16
- * the initial render or subsequent renders. It's used by
17
- * `useUniqueId` and will be used by `UniqueIDProvider` and
18
- * `WithSSRPlaceholder` in the future. We're placing it as
19
- * high up in the render tree as possible to ensure that any
20
- * components using that hook or those components will function
21
- * correctly.
22
- */
23
- <RenderStateRoot throwIfNested={false}>{element}</RenderStateRoot>,
24
- container,
25
- callback,
26
- );
27
- }
@@ -1,13 +0,0 @@
1
- /**
2
- * Some tests require some or all of the widgets and editors to be registered
3
- * in order for them to work. Requiring this file will register all of the
4
- * widgets and editors.
5
- */
6
- import allWidgets from "../all-widgets";
7
- import * as Widgets from "../widgets";
8
-
9
- export const registerAllWidgetsForTesting = () => {
10
- Widgets.registerWidgets(allWidgets);
11
-
12
- Widgets.replaceWidget("transformer", "deprecated-standin");
13
- };
@@ -1,155 +0,0 @@
1
- /**
2
- * A small collection of useful scrolling utility functions.
3
- */
4
-
5
- // Polyfill scrollTo if it doesn't exist
6
- if (typeof HTMLElement !== "undefined" && !HTMLElement.prototype.scrollTo) {
7
- // @ts-expect-error - TS2322 - Type '(left: number, top: any) => void' is not assignable to type '{ (options?: ScrollToOptions | undefined): void; (x: number, y: number): void; }'.
8
- HTMLElement.prototype.scrollTo = function (left, top: any) {
9
- this.scrollLeft = left;
10
- this.scrollTop = top;
11
- };
12
- }
13
-
14
- /**
15
- * Handles applying a given scroll object to either the window object,
16
- * or an HTML element.
17
- * NOTE: SIDE EFFECTS. This method touches the DOM.
18
- */
19
- const applyUniversalScrollOffset = (
20
- elementOrWindow: HTMLElement | WindowProxy,
21
- amount: number,
22
- ) => {
23
- // Window objects need to be scrolled by using the `.scrollTo()` function.
24
- // Elements in MODERN browsers also have this method, but a safer x-browser
25
- // solution is to use the `.scrollTop` property setter.
26
- if (typeof elementOrWindow.scrollTo === "function") {
27
- elementOrWindow.scrollTo(0, amount);
28
- } else if ("scrollTop" in elementOrWindow) {
29
- elementOrWindow.scrollTop = amount;
30
- }
31
- };
32
-
33
- /**
34
- * Smoothly scroll the given element to the given offset.
35
- *
36
- * This assumes that element.scrollHeight > element.clientHeight.
37
- */
38
- const scrollElementToOffset = (
39
- elementOrWindow: HTMLElement | WindowProxy,
40
- offset: number,
41
- duration = 0,
42
- callback?: any,
43
- ) => {
44
- const startPosition =
45
- elementOrWindow === window
46
- ? window.pageYOffset
47
- : // @ts-expect-error - TS2551 - Property 'scrollTop' does not exist on type 'HTMLElement | Window'. Did you mean 'scrollTo'?
48
- elementOrWindow.scrollTop;
49
- const endPosition = offset;
50
- const scrollDistance = endPosition - startPosition;
51
-
52
- // Aim for ~60 FPS
53
- const tickLength = 17;
54
- const numberOfSteps = duration / tickLength;
55
- let step = 0;
56
-
57
- // TODO (josh): Rewrite this using window.requestAnimationFrame
58
- // TODO(jeff, WEB-1378): Use Wonder Blocks Timing API
59
- // eslint-disable-next-line no-restricted-syntax
60
- const scrollInterval = setInterval(function () {
61
- if (step < numberOfSteps) {
62
- const x = step / numberOfSteps; // Domain: [0, 1]
63
- const y = (-Math.cos(Math.PI * x) + 1) / 2; // Range: [0, 1]
64
-
65
- const newPosition = startPosition + scrollDistance * y;
66
- applyUniversalScrollOffset(elementOrWindow, newPosition);
67
-
68
- step += 1;
69
- } else {
70
- // Account for non-integer numberOfSteps
71
- applyUniversalScrollOffset(elementOrWindow, endPosition);
72
-
73
- // TODO(jeff, WEB-1378): Use Wonder Blocks Timing API
74
- // eslint-disable-next-line no-restricted-syntax
75
- clearInterval(scrollInterval);
76
- callback && callback();
77
- }
78
- }, tickLength);
79
- };
80
-
81
- /**
82
- * Returns the closest ancestor that is scrollable.
83
- *
84
- * If the container is document.body we return window b/c scrollTo() doesn't
85
- * work on document.body in some browsers.
86
- */
87
- const getScrollContainer = (element?: Element | null): any | Element => {
88
- if (element === document.body) {
89
- return window;
90
- }
91
- if (element == null) {
92
- return window;
93
- }
94
- if (element.scrollHeight > element.clientHeight) {
95
- return element;
96
- }
97
- return getScrollContainer(element.parentElement);
98
- };
99
-
100
- const SCROLL_ANIMATION_DURATION = 750; // ms
101
-
102
- /**
103
- * Scroll the given element into view.
104
- *
105
- * This works with elements inside scroll containers, but may fail in scenarios
106
- * involving multiple nested scroll containers.
107
- */
108
- export const scrollElementIntoView = (element: Element, callback?: any) => {
109
- // Often times we scroll an element into with in reaction to some change in
110
- // the DOM. Since we need to measure things, we wait a tick for the DOM to
111
- // settle before computing the distance to scroll and beginning the scroll
112
- // animation.
113
- // TODO(jeff, WEB-1378): Use Wonder Blocks Timing API
114
- // eslint-disable-next-line no-restricted-syntax
115
- setTimeout(() => {
116
- const scrollContainer = getScrollContainer(element);
117
-
118
- const childBounds = element.getBoundingClientRect();
119
- const containerBounds =
120
- scrollContainer === window
121
- ? {
122
- top: 0,
123
- bottom: window.innerHeight,
124
- }
125
- : scrollContainer.getBoundingClientRect();
126
-
127
- let offset = 0;
128
- const currentScrollTop =
129
- scrollContainer === window
130
- ? window.scrollY
131
- : scrollContainer.scrollTop;
132
-
133
- if (childBounds.bottom > containerBounds.bottom) {
134
- let distanceToScroll = childBounds.bottom - containerBounds.bottom;
135
-
136
- // Ensure that we see the top of the component we're scrolling.
137
- if (childBounds.top + distanceToScroll < containerBounds.top) {
138
- distanceToScroll = childBounds.top - containerBounds.top;
139
- }
140
-
141
- offset = currentScrollTop + distanceToScroll;
142
- } else if (childBounds.top < containerBounds.top) {
143
- const distanceToScroll = childBounds.top - containerBounds.top;
144
-
145
- offset = currentScrollTop + distanceToScroll;
146
- }
147
-
148
- scrollElementToOffset(
149
- scrollContainer,
150
- offset,
151
- SCROLL_ANIMATION_DURATION,
152
- callback,
153
- );
154
- }, 0);
155
- };
@@ -1,46 +0,0 @@
1
- import * as constants from "../styles/constants";
2
-
3
- const {interactiveSizes} = constants;
4
-
5
- // Note: these size cutoffs represent content-width cutoffs as specified in
6
- // http://zpl.io/1mVmvU (broken link - we no longer use Zeplin)
7
- // TODO(benkomalo): these values aren't used in JS outside of this file, but
8
- // are coupled to the values in styles/articles.less - DRY it up at some point
9
- const smMax = constants.articleMaxWidthTableInPx;
10
- const mdMax = constants.articleMaxWidthInPx;
11
-
12
- export const containerSizeClass = {
13
- SMALL: "small" as const,
14
- MEDIUM: "medium" as const,
15
- LARGE: "large" as const,
16
- XLARGE: "xlarge" as const,
17
- } as const;
18
-
19
- export type SizeClass =
20
- typeof containerSizeClass[keyof typeof containerSizeClass];
21
-
22
- export const getClassFromWidth = (width: number): SizeClass => {
23
- if (!width) {
24
- return containerSizeClass.MEDIUM;
25
- }
26
-
27
- if (width <= smMax) {
28
- return containerSizeClass.SMALL;
29
- }
30
- if (width <= mdMax) {
31
- return containerSizeClass.MEDIUM;
32
- }
33
- return containerSizeClass.LARGE;
34
- };
35
-
36
- export const getInteractiveBoxFromSizeClass = (
37
- sizeClass: SizeClass,
38
- ): [number, number] => {
39
- if (sizeClass === containerSizeClass.SMALL) {
40
- return [
41
- interactiveSizes.defaultBoxSizeSmall,
42
- interactiveSizes.defaultBoxSizeSmall,
43
- ];
44
- }
45
- return [interactiveSizes.defaultBoxSize, interactiveSizes.defaultBoxSize];
46
- };