@doenet/doenetml 0.6.0-alpha1

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 (549) hide show
  1. package/.prettierrc +3 -0
  2. package/LICENSE +661 -0
  3. package/README.md +146 -0
  4. package/cypress/e2e/ActivityViewer/activityVariants.cy.js +1770 -0
  5. package/cypress/e2e/ActivityViewer/compiledActivity.cy.js +83 -0
  6. package/cypress/e2e/ActivityViewer/relationshipsAmongPages.cy.js +697 -0
  7. package/cypress/e2e/answerValidation/errorinnumbers.cy.js +2125 -0
  8. package/cypress/e2e/answerValidation/factoring.cy.js +1945 -0
  9. package/cypress/e2e/answerValidation/factoringOldAlgorithm.cy.js +892 -0
  10. package/cypress/e2e/answerValidation/functionanswers.cy.js +314 -0
  11. package/cypress/e2e/answerValidation/matchingpatterns.cy.js +287 -0
  12. package/cypress/e2e/answerValidation/matchpartial.cy.js +6711 -0
  13. package/cypress/e2e/answerValidation/pointlocation.cy.js +3989 -0
  14. package/cypress/e2e/answerValidation/symbolicequality.cy.js +1893 -0
  15. package/cypress/e2e/answerValidation/videoProgress.cy.js +210 -0
  16. package/cypress/e2e/assignNames/basiccopy.cy.js +2376 -0
  17. package/cypress/e2e/assignNames/collections.cy.js +9247 -0
  18. package/cypress/e2e/assignNames/selects.cy.js +105 -0
  19. package/cypress/e2e/assignNames/sequences.cy.js +1964 -0
  20. package/cypress/e2e/baseComponent/basecomponentproperties.cy.js +999 -0
  21. package/cypress/e2e/baseComponent/doenetMLtext.cy.js +427 -0
  22. package/cypress/e2e/chemistry/atom.cy.js +201 -0
  23. package/cypress/e2e/chemistry/ion.cy.js +608 -0
  24. package/cypress/e2e/chemistry/ioniccompound.cy.js +133 -0
  25. package/cypress/e2e/dynamicalsystem/cobwebpolyline.cy.js +2653 -0
  26. package/cypress/e2e/dynamicalsystem/equilibriumcurve.cy.js +311 -0
  27. package/cypress/e2e/dynamicalsystem/equilibriumline.cy.js +279 -0
  28. package/cypress/e2e/dynamicalsystem/equilibriumpoint.cy.js +283 -0
  29. package/cypress/e2e/dynamicalsystem/odesystem.cy.js +1834 -0
  30. package/cypress/e2e/equality/mathexpressions.cy.js +948 -0
  31. package/cypress/e2e/graphing/graphreferences.cy.js +978 -0
  32. package/cypress/e2e/graphing/graphreferences2.cy.js +615 -0
  33. package/cypress/e2e/linearAlgebra/eigenDecomposition.cy.js +401 -0
  34. package/cypress/e2e/tagSpecific/angle.cy.js +3898 -0
  35. package/cypress/e2e/tagSpecific/animatefromsequence.cy.js +2306 -0
  36. package/cypress/e2e/tagSpecific/answer.cy.js +31647 -0
  37. package/cypress/e2e/tagSpecific/bestfitline.cy.js +612 -0
  38. package/cypress/e2e/tagSpecific/blockquote.cy.js +30 -0
  39. package/cypress/e2e/tagSpecific/boolean.cy.js +742 -0
  40. package/cypress/e2e/tagSpecific/booleaninput.cy.js +1283 -0
  41. package/cypress/e2e/tagSpecific/booleanlist.cy.js +588 -0
  42. package/cypress/e2e/tagSpecific/booleanoperators.cy.js +596 -0
  43. package/cypress/e2e/tagSpecific/booleanoperatorsonmath.cy.js +498 -0
  44. package/cypress/e2e/tagSpecific/callaction.cy.js +2835 -0
  45. package/cypress/e2e/tagSpecific/choiceinput.cy.js +3205 -0
  46. package/cypress/e2e/tagSpecific/circle.cy.js +22036 -0
  47. package/cypress/e2e/tagSpecific/codeeditor.cy.js +1995 -0
  48. package/cypress/e2e/tagSpecific/collect.cy.js +5035 -0
  49. package/cypress/e2e/tagSpecific/componentsize.cy.js +502 -0
  50. package/cypress/e2e/tagSpecific/conditionalcontent.cy.js +3495 -0
  51. package/cypress/e2e/tagSpecific/contentBrowser.cy.js +335 -0
  52. package/cypress/e2e/tagSpecific/contentpicker.cy.js +261 -0
  53. package/cypress/e2e/tagSpecific/copy.cy.js +12627 -0
  54. package/cypress/e2e/tagSpecific/copy2.cy.js +5698 -0
  55. package/cypress/e2e/tagSpecific/curve.bezier.cy.js +12440 -0
  56. package/cypress/e2e/tagSpecific/curve.cy.js +1716 -0
  57. package/cypress/e2e/tagSpecific/curve.function.cy.js +1471 -0
  58. package/cypress/e2e/tagSpecific/curve.parametrized.cy.js +920 -0
  59. package/cypress/e2e/tagSpecific/document.cy.js +234 -0
  60. package/cypress/e2e/tagSpecific/endpoint.cy.js +197 -0
  61. package/cypress/e2e/tagSpecific/evaluate.cy.js +8895 -0
  62. package/cypress/e2e/tagSpecific/extract.cy.js +2282 -0
  63. package/cypress/e2e/tagSpecific/feedback.cy.js +2941 -0
  64. package/cypress/e2e/tagSpecific/function.cy.js +9450 -0
  65. package/cypress/e2e/tagSpecific/functioniterates.cy.js +1178 -0
  66. package/cypress/e2e/tagSpecific/functionoperators.cy.js +4047 -0
  67. package/cypress/e2e/tagSpecific/graph.cy.js +2491 -0
  68. package/cypress/e2e/tagSpecific/group.cy.js +683 -0
  69. package/cypress/e2e/tagSpecific/hint.cy.js +204 -0
  70. package/cypress/e2e/tagSpecific/image.cy.js +770 -0
  71. package/cypress/e2e/tagSpecific/integer.cy.js +206 -0
  72. package/cypress/e2e/tagSpecific/label.cy.js +800 -0
  73. package/cypress/e2e/tagSpecific/legend.cy.js +1001 -0
  74. package/cypress/e2e/tagSpecific/line.cy.js +12167 -0
  75. package/cypress/e2e/tagSpecific/linesegment.cy.js +4749 -0
  76. package/cypress/e2e/tagSpecific/lorem.cy.js +289 -0
  77. package/cypress/e2e/tagSpecific/map.cy.js +4476 -0
  78. package/cypress/e2e/tagSpecific/matchespattern.cy.js +693 -0
  79. package/cypress/e2e/tagSpecific/math.cy.js +10990 -0
  80. package/cypress/e2e/tagSpecific/mathdisplay.cy.js +2689 -0
  81. package/cypress/e2e/tagSpecific/mathinput.cy.js +15628 -0
  82. package/cypress/e2e/tagSpecific/mathinputgraph.cy.js +566 -0
  83. package/cypress/e2e/tagSpecific/mathlist.cy.js +4073 -0
  84. package/cypress/e2e/tagSpecific/mathoperators.cy.js +13851 -0
  85. package/cypress/e2e/tagSpecific/matrix.cy.js +8825 -0
  86. package/cypress/e2e/tagSpecific/matrixinput.cy.js +16277 -0
  87. package/cypress/e2e/tagSpecific/module.cy.js +1771 -0
  88. package/cypress/e2e/tagSpecific/number.cy.js +2221 -0
  89. package/cypress/e2e/tagSpecific/numberlist.cy.js +1285 -0
  90. package/cypress/e2e/tagSpecific/p.cy.js +72 -0
  91. package/cypress/e2e/tagSpecific/paginator.cy.js +2983 -0
  92. package/cypress/e2e/tagSpecific/parabola.cy.js +14331 -0
  93. package/cypress/e2e/tagSpecific/paragraphmarkup.cy.js +104 -0
  94. package/cypress/e2e/tagSpecific/periodicset.cy.js +1439 -0
  95. package/cypress/e2e/tagSpecific/piecewisefunction.cy.js +1055 -0
  96. package/cypress/e2e/tagSpecific/pluralize.cy.js +274 -0
  97. package/cypress/e2e/tagSpecific/point.cy.js +8895 -0
  98. package/cypress/e2e/tagSpecific/point2.cy.js +10259 -0
  99. package/cypress/e2e/tagSpecific/polygon.cy.js +5039 -0
  100. package/cypress/e2e/tagSpecific/polyline.cy.js +4704 -0
  101. package/cypress/e2e/tagSpecific/problem.cy.js +2768 -0
  102. package/cypress/e2e/tagSpecific/ray.cy.js +10770 -0
  103. package/cypress/e2e/tagSpecific/rectangle.cy.js +2143 -0
  104. package/cypress/e2e/tagSpecific/ref.cy.js +420 -0
  105. package/cypress/e2e/tagSpecific/regularPolygon.cy.js +1006 -0
  106. package/cypress/e2e/tagSpecific/regularPolygon2.cy.js +100 -0
  107. package/cypress/e2e/tagSpecific/regularPolygon3.cy.js +777 -0
  108. package/cypress/e2e/tagSpecific/samplerandomnumbers.cy.js +3619 -0
  109. package/cypress/e2e/tagSpecific/sectioning.cy.js +3530 -0
  110. package/cypress/e2e/tagSpecific/select.cy.js +5376 -0
  111. package/cypress/e2e/tagSpecific/selectfromsequence.cy.js +3846 -0
  112. package/cypress/e2e/tagSpecific/selectrandomnumbers.cy.js +2914 -0
  113. package/cypress/e2e/tagSpecific/sequence.cy.js +2093 -0
  114. package/cypress/e2e/tagSpecific/shuffle.cy.js +490 -0
  115. package/cypress/e2e/tagSpecific/sidebyside.cy.js +8057 -0
  116. package/cypress/e2e/tagSpecific/singlecharactercomponents.cy.js +72 -0
  117. package/cypress/e2e/tagSpecific/slider.cy.js +914 -0
  118. package/cypress/e2e/tagSpecific/solution.cy.js +109 -0
  119. package/cypress/e2e/tagSpecific/solveequations.cy.js +1026 -0
  120. package/cypress/e2e/tagSpecific/sort.cy.js +1685 -0
  121. package/cypress/e2e/tagSpecific/spreadsheet.cy.js +5971 -0
  122. package/cypress/e2e/tagSpecific/subsetofreals.cy.js +2725 -0
  123. package/cypress/e2e/tagSpecific/substitute.cy.js +2646 -0
  124. package/cypress/e2e/tagSpecific/tabular.cy.js +36 -0
  125. package/cypress/e2e/tagSpecific/text.cy.js +975 -0
  126. package/cypress/e2e/tagSpecific/textinput.cy.js +2177 -0
  127. package/cypress/e2e/tagSpecific/textlist.cy.js +369 -0
  128. package/cypress/e2e/tagSpecific/triangle.cy.js +1936 -0
  129. package/cypress/e2e/tagSpecific/triggerset.cy.js +2023 -0
  130. package/cypress/e2e/tagSpecific/updatevalue.cy.js +3288 -0
  131. package/cypress/e2e/tagSpecific/vector.cy.js +20183 -0
  132. package/cypress/e2e/tagSpecific/video.cy.js +612 -0
  133. package/cypress/e2e/tagSpecific/when.cy.js +202 -0
  134. package/cypress/e2e/variants/specifysinglevariant.cy.js +6726 -0
  135. package/cypress/e2e/variants/uniquevariants.cy.js +4846 -0
  136. package/cypress/fixtures/example.json +5 -0
  137. package/cypress/support/commands.js +32 -0
  138. package/cypress/support/e2e.js +31 -0
  139. package/cypress.config.js +18 -0
  140. package/docs/codeSnippet.jsx +11 -0
  141. package/docs/index.html +133 -0
  142. package/docs/index.jsx +138 -0
  143. package/docs/prism.css +3 -0
  144. package/index.html +14 -0
  145. package/index.js +21 -0
  146. package/media/answer_example.png +0 -0
  147. package/media/graph_example.png +0 -0
  148. package/media/graph_markup_example.png +0 -0
  149. package/package.json +83 -0
  150. package/public/favicon.ico +0 -0
  151. package/public/fonts/files/open-sans-v18-latin-700.woff +0 -0
  152. package/public/fonts/files/open-sans-v18-latin-700.woff2 +0 -0
  153. package/public/fonts/files/open-sans-v18-latin-700italic.woff +0 -0
  154. package/public/fonts/files/open-sans-v18-latin-700italic.woff2 +0 -0
  155. package/public/fonts/files/open-sans-v18-latin-italic.woff +0 -0
  156. package/public/fonts/files/open-sans-v18-latin-italic.woff2 +0 -0
  157. package/public/fonts/files/open-sans-v18-latin-light-italic.woff +0 -0
  158. package/public/fonts/files/open-sans-v18-latin-light-italic.woff2 +0 -0
  159. package/public/fonts/files/open-sans-v18-latin-light.woff +0 -0
  160. package/public/fonts/files/open-sans-v18-latin-light.woff2 +0 -0
  161. package/public/fonts/files/open-sans-v18-latin-regular.woff +0 -0
  162. package/public/fonts/files/open-sans-v18-latin-regular.woff2 +0 -0
  163. package/src/Core/ComponentTypes.js +426 -0
  164. package/src/Core/Core.js +11852 -0
  165. package/src/Core/CoreWorker.js +127 -0
  166. package/src/Core/Dependencies.js +8226 -0
  167. package/src/Core/Numerics.js +473 -0
  168. package/src/Core/ParameterStack.js +36 -0
  169. package/src/Core/ReadOnlyProxyHandler.js +41 -0
  170. package/src/Core/StateProxyHandler.js +88 -0
  171. package/src/Core/components/Aliases.js +67 -0
  172. package/src/Core/components/Angle.js +758 -0
  173. package/src/Core/components/AnimateFromSequence.js +922 -0
  174. package/src/Core/components/Answer.js +2087 -0
  175. package/src/Core/components/AsList.js +83 -0
  176. package/src/Core/components/AttractTo.js +245 -0
  177. package/src/Core/components/AttractToAngles.js +262 -0
  178. package/src/Core/components/AttractToConstraint.js +104 -0
  179. package/src/Core/components/AttractToGrid.js +315 -0
  180. package/src/Core/components/Award.js +906 -0
  181. package/src/Core/components/BestFitLine.js +318 -0
  182. package/src/Core/components/BezierControls.js +719 -0
  183. package/src/Core/components/BlockQuote.js +35 -0
  184. package/src/Core/components/Boolean.js +500 -0
  185. package/src/Core/components/BooleanInput.js +330 -0
  186. package/src/Core/components/BooleanList.js +396 -0
  187. package/src/Core/components/BooleanOperators.js +35 -0
  188. package/src/Core/components/BooleanOperatorsOfMath.js +148 -0
  189. package/src/Core/components/CallAction.js +261 -0
  190. package/src/Core/components/Caption.js +73 -0
  191. package/src/Core/components/Case.js +56 -0
  192. package/src/Core/components/Cell.js +439 -0
  193. package/src/Core/components/CellBlock.js +64 -0
  194. package/src/Core/components/Chart.js +795 -0
  195. package/src/Core/components/Choice.js +266 -0
  196. package/src/Core/components/ChoiceInput.js +1407 -0
  197. package/src/Core/components/Circle.js +2884 -0
  198. package/src/Core/components/CodeEditor.js +647 -0
  199. package/src/Core/components/CodeViewer.js +294 -0
  200. package/src/Core/components/CollaborateGroupSetup.js +46 -0
  201. package/src/Core/components/CollaborateGroups.js +119 -0
  202. package/src/Core/components/Collect.js +850 -0
  203. package/src/Core/components/Column.js +608 -0
  204. package/src/Core/components/ConditionalContent.js +468 -0
  205. package/src/Core/components/ConsiderAsResponses.js +49 -0
  206. package/src/Core/components/ConstrainTo.js +161 -0
  207. package/src/Core/components/ConstrainToAngles.js +244 -0
  208. package/src/Core/components/ConstrainToGraph.js +142 -0
  209. package/src/Core/components/ConstrainToGrid.js +175 -0
  210. package/src/Core/components/ConstraintUnion.js +119 -0
  211. package/src/Core/components/Constraints.js +497 -0
  212. package/src/Core/components/ContentBrowser.js +441 -0
  213. package/src/Core/components/ContentPicker.js +263 -0
  214. package/src/Core/components/ControlVectors.js +25 -0
  215. package/src/Core/components/Coords.js +63 -0
  216. package/src/Core/components/Copy.js +3412 -0
  217. package/src/Core/components/Curve.js +4130 -0
  218. package/src/Core/components/CustomAttribute.js +175 -0
  219. package/src/Core/components/DataFrame.js +357 -0
  220. package/src/Core/components/DiscreteSimulationResultList.js +342 -0
  221. package/src/Core/components/DiscreteSimulationResultPolyline.js +581 -0
  222. package/src/Core/components/Divisions.js +55 -0
  223. package/src/Core/components/Document.js +888 -0
  224. package/src/Core/components/Embed.js +65 -0
  225. package/src/Core/components/Endpoint.js +62 -0
  226. package/src/Core/components/Evaluate.js +321 -0
  227. package/src/Core/components/Extract.js +656 -0
  228. package/src/Core/components/Extrema.js +556 -0
  229. package/src/Core/components/Feedback.js +200 -0
  230. package/src/Core/components/FeedbackDefinitions.js +97 -0
  231. package/src/Core/components/Figure.js +148 -0
  232. package/src/Core/components/Footnote.js +73 -0
  233. package/src/Core/components/Function.js +5344 -0
  234. package/src/Core/components/FunctionIterates.js +306 -0
  235. package/src/Core/components/FunctionOperators.js +702 -0
  236. package/src/Core/components/Graph.js +1679 -0
  237. package/src/Core/components/Group.js +7 -0
  238. package/src/Core/components/HasSameFactoring.js +407 -0
  239. package/src/Core/components/Hint.js +241 -0
  240. package/src/Core/components/Image.js +524 -0
  241. package/src/Core/components/Indexing.js +79 -0
  242. package/src/Core/components/IntComma.js +64 -0
  243. package/src/Core/components/Integer.js +81 -0
  244. package/src/Core/components/Intersection.js +328 -0
  245. package/src/Core/components/Interval.js +29 -0
  246. package/src/Core/components/Label.js +492 -0
  247. package/src/Core/components/Latex.js +104 -0
  248. package/src/Core/components/Legend.js +329 -0
  249. package/src/Core/components/Line.js +2040 -0
  250. package/src/Core/components/LineSegment.js +882 -0
  251. package/src/Core/components/Lists.js +180 -0
  252. package/src/Core/components/Lorem.js +249 -0
  253. package/src/Core/components/MMeMen.js +377 -0
  254. package/src/Core/components/Map.js +873 -0
  255. package/src/Core/components/Markers.js +101 -0
  256. package/src/Core/components/MatchesPattern.js +339 -0
  257. package/src/Core/components/Math.js +2552 -0
  258. package/src/Core/components/MathInput.js +948 -0
  259. package/src/Core/components/MathList.js +828 -0
  260. package/src/Core/components/MathOperators.js +1286 -0
  261. package/src/Core/components/Matrix.js +497 -0
  262. package/src/Core/components/MatrixInput.js +3157 -0
  263. package/src/Core/components/MdMdnMrow.js +394 -0
  264. package/src/Core/components/Module.js +16 -0
  265. package/src/Core/components/Number.js +1031 -0
  266. package/src/Core/components/NumberList.js +550 -0
  267. package/src/Core/components/Option.js +24 -0
  268. package/src/Core/components/P.js +71 -0
  269. package/src/Core/components/Paginator.js +338 -0
  270. package/src/Core/components/Panel.js +126 -0
  271. package/src/Core/components/Parabola.js +1561 -0
  272. package/src/Core/components/ParagraphMarkup.js +59 -0
  273. package/src/Core/components/Pegboard.js +43 -0
  274. package/src/Core/components/PeriodicSet.js +291 -0
  275. package/src/Core/components/PiecewiseFunction.js +832 -0
  276. package/src/Core/components/Pluralize.js +198 -0
  277. package/src/Core/components/Point.js +1295 -0
  278. package/src/Core/components/Polygon.js +408 -0
  279. package/src/Core/components/Polyline.js +841 -0
  280. package/src/Core/components/RandomizedTextList.js +225 -0
  281. package/src/Core/components/Ray.js +1737 -0
  282. package/src/Core/components/Rectangle.js +1535 -0
  283. package/src/Core/components/Ref.js +350 -0
  284. package/src/Core/components/RegionBetweenCurveXAxis.js +124 -0
  285. package/src/Core/components/RegionHalfPlane.js +107 -0
  286. package/src/Core/components/RegularPolygon.js +2118 -0
  287. package/src/Core/components/RenderDoenetML.js +181 -0
  288. package/src/Core/components/Row.js +780 -0
  289. package/src/Core/components/SampleRandomNumbers.js +653 -0
  290. package/src/Core/components/Sectioning.js +303 -0
  291. package/src/Core/components/Select.js +947 -0
  292. package/src/Core/components/SelectFromSequence.js +1242 -0
  293. package/src/Core/components/SelectRandomNumbers.js +225 -0
  294. package/src/Core/components/Sequence.js +444 -0
  295. package/src/Core/components/Setup.js +53 -0
  296. package/src/Core/components/Shuffle.js +470 -0
  297. package/src/Core/components/SideBySide.js +2130 -0
  298. package/src/Core/components/SingleCharacterComponents.js +41 -0
  299. package/src/Core/components/Slider.js +819 -0
  300. package/src/Core/components/SolutionContainer.js +67 -0
  301. package/src/Core/components/Solutions.js +334 -0
  302. package/src/Core/components/SolveEquations.js +568 -0
  303. package/src/Core/components/Sort.js +398 -0
  304. package/src/Core/components/Sources.js +108 -0
  305. package/src/Core/components/Split.js +205 -0
  306. package/src/Core/components/Spreadsheet.js +1507 -0
  307. package/src/Core/components/StyleDefinitions.js +111 -0
  308. package/src/Core/components/SubsetOfReals.js +348 -0
  309. package/src/Core/components/SubsetOfRealsInput.js +1474 -0
  310. package/src/Core/components/Substitute.js +496 -0
  311. package/src/Core/components/SummaryStatistics.js +652 -0
  312. package/src/Core/components/Table.js +145 -0
  313. package/src/Core/components/Tabular.js +384 -0
  314. package/src/Core/components/Template.js +360 -0
  315. package/src/Core/components/Text.js +341 -0
  316. package/src/Core/components/TextInput.js +566 -0
  317. package/src/Core/components/TextList.js +442 -0
  318. package/src/Core/components/TextListFromString.js +137 -0
  319. package/src/Core/components/TextOperatorsOfMath.js +21 -0
  320. package/src/Core/components/Triangle.js +280 -0
  321. package/src/Core/components/TriggerSet.js +189 -0
  322. package/src/Core/components/TupleList.js +43 -0
  323. package/src/Core/components/UpdateValue.js +435 -0
  324. package/src/Core/components/VariantControl.js +36 -0
  325. package/src/Core/components/Vector.js +2478 -0
  326. package/src/Core/components/Verbatim.js +125 -0
  327. package/src/Core/components/Video.js +673 -0
  328. package/src/Core/components/When.js +198 -0
  329. package/src/Core/components/abstract/AngleListComponent.js +140 -0
  330. package/src/Core/components/abstract/BaseComponent.js +1496 -0
  331. package/src/Core/components/abstract/BlockComponent.js +5 -0
  332. package/src/Core/components/abstract/BooleanBaseOperator.js +88 -0
  333. package/src/Core/components/abstract/BooleanBaseOperatorOfMath.js +100 -0
  334. package/src/Core/components/abstract/BooleanBaseOperatorOneInput.js +44 -0
  335. package/src/Core/components/abstract/ComponentSize.js +789 -0
  336. package/src/Core/components/abstract/ComponentWithSelectableType.js +537 -0
  337. package/src/Core/components/abstract/CompositeComponent.js +142 -0
  338. package/src/Core/components/abstract/ConstraintComponent.js +19 -0
  339. package/src/Core/components/abstract/FunctionBaseOperator.js +680 -0
  340. package/src/Core/components/abstract/GraphicalComponent.js +56 -0
  341. package/src/Core/components/abstract/InlineComponent.js +5 -0
  342. package/src/Core/components/abstract/InlineRenderInlineChildren.js +63 -0
  343. package/src/Core/components/abstract/Input.js +192 -0
  344. package/src/Core/components/abstract/IntervalListComponent.js +218 -0
  345. package/src/Core/components/abstract/LineListComponent.js +114 -0
  346. package/src/Core/components/abstract/MathBaseOperator.js +631 -0
  347. package/src/Core/components/abstract/MathBaseOperatorOneInput.js +112 -0
  348. package/src/Core/components/abstract/PointListComponent.js +238 -0
  349. package/src/Core/components/abstract/SectioningComponent.js +1262 -0
  350. package/src/Core/components/abstract/SingleCharacterInline.js +23 -0
  351. package/src/Core/components/abstract/TextBaseOperatorOfMath.js +47 -0
  352. package/src/Core/components/abstract/TextOrInline.js +66 -0
  353. package/src/Core/components/abstract/VariableName.js +31 -0
  354. package/src/Core/components/abstract/VariableNameList.js +83 -0
  355. package/src/Core/components/abstract/VectorListComponent.js +235 -0
  356. package/src/Core/components/chemistry/Atom.js +910 -0
  357. package/src/Core/components/chemistry/ElectronConfiguration.js +36 -0
  358. package/src/Core/components/chemistry/Ion.js +684 -0
  359. package/src/Core/components/chemistry/IonicCompound.js +189 -0
  360. package/src/Core/components/chemistry/OrbitalDiagram.js +175 -0
  361. package/src/Core/components/chemistry/OrbitalDiagramInput.js +753 -0
  362. package/src/Core/components/chemistry/index.js +6 -0
  363. package/src/Core/components/commonsugar/breakstrings.js +627 -0
  364. package/src/Core/components/commonsugar/lists.js +177 -0
  365. package/src/Core/components/dynamicalSystems/CobwebPolyline.js +913 -0
  366. package/src/Core/components/dynamicalSystems/EquilibriumCurve.js +95 -0
  367. package/src/Core/components/dynamicalSystems/EquilibriumLine.js +93 -0
  368. package/src/Core/components/dynamicalSystems/EquilibriumPoint.js +93 -0
  369. package/src/Core/components/dynamicalSystems/ODESystem.js +943 -0
  370. package/src/Core/components/dynamicalSystems/index.js +5 -0
  371. package/src/Core/components/linearAlgebra/EigenDecomposition.js +294 -0
  372. package/src/Core/utils/array.js +30 -0
  373. package/src/Core/utils/booleanLogic.js +965 -0
  374. package/src/Core/utils/checkEquality.js +818 -0
  375. package/src/Core/utils/cid.js +29 -0
  376. package/src/Core/utils/componentInfoObjects.js +100 -0
  377. package/src/Core/utils/constraints.js +23 -0
  378. package/src/Core/utils/copy.js +572 -0
  379. package/src/Core/utils/deepFunctions.js +173 -0
  380. package/src/Core/utils/descendants.js +252 -0
  381. package/src/Core/utils/enumeration.js +234 -0
  382. package/src/Core/utils/feedback.js +84 -0
  383. package/src/Core/utils/function.js +1343 -0
  384. package/src/Core/utils/graphical.js +196 -0
  385. package/src/Core/utils/label.js +396 -0
  386. package/src/Core/utils/math.js +1056 -0
  387. package/src/Core/utils/naming.js +45 -0
  388. package/src/Core/utils/periodicSetEquality.js +403 -0
  389. package/src/Core/utils/randomNumbers.js +70 -0
  390. package/src/Core/utils/retrieveMedia.js +98 -0
  391. package/src/Core/utils/retrieveTextFile.js +140 -0
  392. package/src/Core/utils/returnAllPossibleVariants.js +73 -0
  393. package/src/Core/utils/rounding.js +316 -0
  394. package/src/Core/utils/sequence.js +754 -0
  395. package/src/Core/utils/serializedStateProcessing.js +4049 -0
  396. package/src/Core/utils/size.js +22 -0
  397. package/src/Core/utils/stateVariables.js +138 -0
  398. package/src/Core/utils/style.js +535 -0
  399. package/src/Core/utils/subset-of-reals.js +796 -0
  400. package/src/Core/utils/table.js +41 -0
  401. package/src/Core/utils/text.js +16 -0
  402. package/src/Core/utils/triggering.js +167 -0
  403. package/src/Core/utils/variants.js +477 -0
  404. package/src/DoenetML.css +308 -0
  405. package/src/DoenetML.jsx +201 -0
  406. package/src/Parser/doenet.grammar +90 -0
  407. package/src/Parser/doenet.js +33 -0
  408. package/src/Parser/doenet.terms.js +20 -0
  409. package/src/Parser/parser.js +266 -0
  410. package/src/Parser/tokens.js +129 -0
  411. package/src/Tools/CodeMirror.jsx +440 -0
  412. package/src/Tools/DarkmodeController.jsx +21 -0
  413. package/src/Tools/Footers/MathInputSelector.jsx +34 -0
  414. package/src/Tools/Footers/VirtualKeyboard.jsx +751 -0
  415. package/src/Tools/cypressTest/CypressTest.jsx +341 -0
  416. package/src/Tools/cypressTest/index.html +102 -0
  417. package/src/Tools/cypressTest/index.jsx +40 -0
  418. package/src/Viewer/ActivityViewer.jsx +1461 -0
  419. package/src/Viewer/PageViewer.jsx +1329 -0
  420. package/src/Viewer/renderers/alert.jsx +17 -0
  421. package/src/Viewer/renderers/angle.jsx +209 -0
  422. package/src/Viewer/renderers/answer.jsx +206 -0
  423. package/src/Viewer/renderers/asList.jsx +25 -0
  424. package/src/Viewer/renderers/blockQuote.jsx +41 -0
  425. package/src/Viewer/renderers/boolean.jsx +17 -0
  426. package/src/Viewer/renderers/booleanInput.css +105 -0
  427. package/src/Viewer/renderers/booleanInput.jsx +636 -0
  428. package/src/Viewer/renderers/button.jsx +369 -0
  429. package/src/Viewer/renderers/c.jsx +17 -0
  430. package/src/Viewer/renderers/callAction.jsx +18 -0
  431. package/src/Viewer/renderers/cell.jsx +59 -0
  432. package/src/Viewer/renderers/chart.jsx +83 -0
  433. package/src/Viewer/renderers/choiceInput.css +223 -0
  434. package/src/Viewer/renderers/choiceInput.jsx +535 -0
  435. package/src/Viewer/renderers/circle.jsx +990 -0
  436. package/src/Viewer/renderers/cobwebPolyline.jsx +442 -0
  437. package/src/Viewer/renderers/codeEditor.jsx +248 -0
  438. package/src/Viewer/renderers/codeViewer.jsx +105 -0
  439. package/src/Viewer/renderers/containerBlock.jsx +41 -0
  440. package/src/Viewer/renderers/containerInline.jsx +17 -0
  441. package/src/Viewer/renderers/contentBrowser.jsx +159 -0
  442. package/src/Viewer/renderers/contentPicker.jsx +160 -0
  443. package/src/Viewer/renderers/curve.jsx +1072 -0
  444. package/src/Viewer/renderers/ellipsis.jsx +17 -0
  445. package/src/Viewer/renderers/em.jsx +17 -0
  446. package/src/Viewer/renderers/embed.jsx +110 -0
  447. package/src/Viewer/renderers/feedback.jsx +74 -0
  448. package/src/Viewer/renderers/figure.jsx +131 -0
  449. package/src/Viewer/renderers/footnote.jsx +52 -0
  450. package/src/Viewer/renderers/graph.jsx +925 -0
  451. package/src/Viewer/renderers/hint.jsx +142 -0
  452. package/src/Viewer/renderers/image.jsx +581 -0
  453. package/src/Viewer/renderers/jsxgraph-distrib/jsxgraphcore.mjs +2 -0
  454. package/src/Viewer/renderers/jsxgraph-distrib/jsxgraphcore.mjs.map +1 -0
  455. package/src/Viewer/renderers/label.jsx +470 -0
  456. package/src/Viewer/renderers/legend.jsx +306 -0
  457. package/src/Viewer/renderers/line.jsx +511 -0
  458. package/src/Viewer/renderers/lineSegment.jsx +754 -0
  459. package/src/Viewer/renderers/list.jsx +111 -0
  460. package/src/Viewer/renderers/lq.jsx +12 -0
  461. package/src/Viewer/renderers/lsq.jsx +12 -0
  462. package/src/Viewer/renderers/math.jsx +582 -0
  463. package/src/Viewer/renderers/mathInput.css +10 -0
  464. package/src/Viewer/renderers/mathInput.jsx +425 -0
  465. package/src/Viewer/renderers/mathInputog.jsx +534 -0
  466. package/src/Viewer/renderers/mathList.jsx +39 -0
  467. package/src/Viewer/renderers/matrixInput.jsx +317 -0
  468. package/src/Viewer/renderers/mdash.jsx +12 -0
  469. package/src/Viewer/renderers/nbsp.jsx +12 -0
  470. package/src/Viewer/renderers/ndash.jsx +12 -0
  471. package/src/Viewer/renderers/number.jsx +454 -0
  472. package/src/Viewer/renderers/numberList.jsx +35 -0
  473. package/src/Viewer/renderers/orbitalDiagram.jsx +247 -0
  474. package/src/Viewer/renderers/orbitalDiagramInput.jsx +450 -0
  475. package/src/Viewer/renderers/p.jsx +38 -0
  476. package/src/Viewer/renderers/paginatorControls.jsx +41 -0
  477. package/src/Viewer/renderers/pegboard.jsx +239 -0
  478. package/src/Viewer/renderers/point.jsx +649 -0
  479. package/src/Viewer/renderers/polygon.jsx +612 -0
  480. package/src/Viewer/renderers/polyline.jsx +608 -0
  481. package/src/Viewer/renderers/pre.jsx +34 -0
  482. package/src/Viewer/renderers/q.jsx +17 -0
  483. package/src/Viewer/renderers/ray.jsx +410 -0
  484. package/src/Viewer/renderers/ref.jsx +149 -0
  485. package/src/Viewer/renderers/regionBetweenCurveXAxis.jsx +182 -0
  486. package/src/Viewer/renderers/renderDoenetML.jsx +56 -0
  487. package/src/Viewer/renderers/row.jsx +31 -0
  488. package/src/Viewer/renderers/rq.jsx +12 -0
  489. package/src/Viewer/renderers/rsq.jsx +12 -0
  490. package/src/Viewer/renderers/section.jsx +427 -0
  491. package/src/Viewer/renderers/sideBySide.jsx +80 -0
  492. package/src/Viewer/renderers/slider.jsx +800 -0
  493. package/src/Viewer/renderers/solution.jsx +134 -0
  494. package/src/Viewer/renderers/spreadsheet.jsx +83 -0
  495. package/src/Viewer/renderers/sq.jsx +17 -0
  496. package/src/Viewer/renderers/styles/global.css +14 -0
  497. package/src/Viewer/renderers/subsetOfRealsInput.jsx +392 -0
  498. package/src/Viewer/renderers/summaryStatistics.jsx +83 -0
  499. package/src/Viewer/renderers/table.jsx +78 -0
  500. package/src/Viewer/renderers/tabular.jsx +58 -0
  501. package/src/Viewer/renderers/tag.jsx +26 -0
  502. package/src/Viewer/renderers/text.jsx +439 -0
  503. package/src/Viewer/renderers/textInput.jsx +774 -0
  504. package/src/Viewer/renderers/textList.jsx +30 -0
  505. package/src/Viewer/renderers/triggerSet.jsx +52 -0
  506. package/src/Viewer/renderers/updateValue.jsx +30 -0
  507. package/src/Viewer/renderers/utils/css.js +13 -0
  508. package/src/Viewer/renderers/utils/graph.js +159 -0
  509. package/src/Viewer/renderers/utils/offGraphIndicators.js +91 -0
  510. package/src/Viewer/renderers/vector.jsx +678 -0
  511. package/src/Viewer/renderers/video.jsx +494 -0
  512. package/src/Viewer/useDoenetRenderer.jsx +128 -0
  513. package/src/main.jsx +16 -0
  514. package/src/media/fonts/files/open-sans-v18-latin-700.woff +0 -0
  515. package/src/media/fonts/files/open-sans-v18-latin-700.woff2 +0 -0
  516. package/src/media/fonts/files/open-sans-v18-latin-700italic.woff +0 -0
  517. package/src/media/fonts/files/open-sans-v18-latin-700italic.woff2 +0 -0
  518. package/src/media/fonts/files/open-sans-v18-latin-italic.woff +0 -0
  519. package/src/media/fonts/files/open-sans-v18-latin-italic.woff2 +0 -0
  520. package/src/media/fonts/files/open-sans-v18-latin-light-italic.woff +0 -0
  521. package/src/media/fonts/files/open-sans-v18-latin-light-italic.woff2 +0 -0
  522. package/src/media/fonts/files/open-sans-v18-latin-light.woff +0 -0
  523. package/src/media/fonts/files/open-sans-v18-latin-light.woff2 +0 -0
  524. package/src/media/fonts/files/open-sans-v18-latin-regular.woff +0 -0
  525. package/src/media/fonts/files/open-sans-v18-latin-regular.woff2 +0 -0
  526. package/src/test/testCode.doenet +26 -0
  527. package/src/test/testViewer.jsx +158 -0
  528. package/src/uiComponents/ActionButton.jsx +157 -0
  529. package/src/uiComponents/ActionButtonGroup.jsx +93 -0
  530. package/src/uiComponents/Button.jsx +160 -0
  531. package/src/uiComponents/ButtonGroup.jsx +56 -0
  532. package/src/uiComponents/ToggleButton.jsx +194 -0
  533. package/src/uiComponents/ToggleButtonGroup.jsx +77 -0
  534. package/src/utils/activityUtils.js +713 -0
  535. package/src/utils/array.js +17 -0
  536. package/src/utils/cid.js +34 -0
  537. package/src/utils/componentInfoObjects.js +89 -0
  538. package/src/utils/deepFunctions.js +165 -0
  539. package/src/utils/enumeration.js +226 -0
  540. package/src/utils/math.js +624 -0
  541. package/src/utils/naming.js +44 -0
  542. package/src/utils/retrieveTextFile.js +156 -0
  543. package/src/utils/returnAllPossibleVariants.js +81 -0
  544. package/src/utils/sequence.js +715 -0
  545. package/src/utils/serialize.js +29 -0
  546. package/src/utils/serializedStateProcessing.js +2587 -0
  547. package/src/utils/subset-of-reals.js +783 -0
  548. package/src/utils/url.js +19 -0
  549. package/vite.config.js +14 -0
@@ -0,0 +1,473 @@
1
+ /*
2
+ This file contains code modified from JSXGraph, which is copyright 2008-2018
3
+ Matthias Ehmann,
4
+ Michael Gerhaeuser,
5
+ Carsten Miller,
6
+ Bianca Valentin,
7
+ Alfred Wassermann,
8
+ Peter Wilfahrt
9
+
10
+ Redistributed and modified under the terms of the
11
+
12
+ * GNU Lesser General Public License as published by
13
+ the Free Software Foundation, either version 3 of the License, or
14
+ (at your option) any later version
15
+ OR
16
+ * MIT License: https://github.com/jsxgraph/jsxgraph/blob/master/LICENSE.MIT
17
+
18
+ */
19
+
20
+ export default class Numerics {
21
+ constructor({
22
+ maxIterationsRoot = 80,
23
+ maxIterationsMinimize = 500,
24
+ eps = 0.000001,
25
+ } = {}) {
26
+ this.maxIterationsRoot = maxIterationsRoot;
27
+ this.maxIterationsMinimize = maxIterationsMinimize;
28
+ this.eps = eps;
29
+ }
30
+
31
+ /**
32
+ *
33
+ * Find zero of an univariate function f.
34
+ * @param {function} f Function, whose root is to be found
35
+ * @param {Array,Number} x0 Start value or start interval enclosing the root
36
+ * @param {Object} object Parent object in case f is method of it
37
+ * @returns {Number} the approximation of the root
38
+ * Algorithm:
39
+ * G.Forsythe, M.Malcolm, C.Moler, Computer methods for mathematical
40
+ * computations. M., Mir, 1980, p.180 of the Russian edition
41
+ *
42
+ * If x0 is an array containing lower and upper bound for the zero
43
+ * algorithm 748 is applied. Otherwise, if x0 is a number,
44
+ * the algorithm tries to bracket a zero of f starting from x0.
45
+ * If this fails, we fall back to Newton's method.
46
+ */
47
+ fzero(f, x0, object) {
48
+ var a,
49
+ b,
50
+ c,
51
+ fa,
52
+ fb,
53
+ fc,
54
+ aa,
55
+ blist,
56
+ i,
57
+ len,
58
+ u,
59
+ fu,
60
+ prev_step,
61
+ t1,
62
+ cb,
63
+ t2,
64
+ // Actual tolerance
65
+ tol_act,
66
+ // Interpolation step is calculated in the form p/q; division
67
+ // operations is delayed until the last moment
68
+ p,
69
+ q,
70
+ // Step at this iteration
71
+ new_step,
72
+ eps = this.eps,
73
+ maxiter = this.maxIterationsRoot,
74
+ niter = 0,
75
+ nfev = 0;
76
+
77
+ if (Array.isArray(x0)) {
78
+ if (x0.length < 2) {
79
+ throw new Error("fzero: length of array x0 has to be at least two.");
80
+ }
81
+
82
+ a = x0[0];
83
+ fa = f.call(object, a);
84
+ nfev += 1;
85
+ b = x0[1];
86
+ fb = f.call(object, b);
87
+ nfev += 1;
88
+ } else {
89
+ a = x0;
90
+ fa = f.call(object, a);
91
+ nfev += 1;
92
+
93
+ // Try to get b.
94
+ if (a === 0) {
95
+ aa = 1;
96
+ } else {
97
+ aa = a;
98
+ }
99
+
100
+ blist = [
101
+ 0.9 * aa,
102
+ 1.1 * aa,
103
+ aa - 1,
104
+ aa + 1,
105
+ 0.5 * aa,
106
+ 1.5 * aa,
107
+ -aa,
108
+ 2 * aa,
109
+ -10 * aa,
110
+ 10 * aa,
111
+ ];
112
+ len = blist.length;
113
+
114
+ for (i = 0; i < len; i++) {
115
+ b = blist[i];
116
+ fb = f.call(object, b);
117
+ nfev += 1;
118
+
119
+ if (fa * fb <= 0) {
120
+ break;
121
+ }
122
+ }
123
+ if (b < a) {
124
+ u = a;
125
+ a = b;
126
+ b = u;
127
+
128
+ fu = fa;
129
+ fa = fb;
130
+ fb = fu;
131
+ }
132
+ }
133
+
134
+ if (fa * fb > 0) {
135
+ // Bracketing not successful, fall back to Newton's method or to fminbr
136
+ if (Array.isArray(x0)) {
137
+ return this.fminbr(f, [a, b], object).x;
138
+ }
139
+
140
+ return this.Newton(f, a, object);
141
+ }
142
+
143
+ // OK, we have enclosed a zero of f.
144
+ // Now we can start Brent's method
145
+
146
+ c = a;
147
+ fc = fa;
148
+
149
+ // Main iteration loop
150
+ while (niter < maxiter) {
151
+ // Distance from the last but one to the last approximation
152
+ prev_step = b - a;
153
+
154
+ // Swap data for b to be the best approximation
155
+ if (Math.abs(fc) < Math.abs(fb)) {
156
+ a = b;
157
+ b = c;
158
+ c = a;
159
+
160
+ fa = fb;
161
+ fb = fc;
162
+ fc = fa;
163
+ }
164
+ tol_act = 0.5 * eps * (Math.abs(b) + 1);
165
+ new_step = (c - b) * 0.5;
166
+
167
+ if (Math.abs(new_step) <= tol_act && Math.abs(fb) <= eps) {
168
+ // Acceptable approx. is found
169
+ return b;
170
+ }
171
+
172
+ // Decide if the interpolation can be tried
173
+ // If prev_step was large enough and was in true direction Interpolatiom may be tried
174
+ if (Math.abs(prev_step) >= tol_act && Math.abs(fa) > Math.abs(fb)) {
175
+ cb = c - b;
176
+
177
+ // If we have only two distinct points linear interpolation can only be applied
178
+ if (a === c) {
179
+ t1 = fb / fa;
180
+ p = cb * t1;
181
+ q = 1.0 - t1;
182
+ // Quadric inverse interpolation
183
+ } else {
184
+ q = fa / fc;
185
+ t1 = fb / fc;
186
+ t2 = fb / fa;
187
+
188
+ p = t2 * (cb * q * (q - t1) - (b - a) * (t1 - 1.0));
189
+ q = (q - 1.0) * (t1 - 1.0) * (t2 - 1.0);
190
+ }
191
+
192
+ // p was calculated with the opposite sign; make p positive
193
+ if (p > 0) {
194
+ q = -q;
195
+ // and assign possible minus to q
196
+ } else {
197
+ p = -p;
198
+ }
199
+
200
+ // If b+p/q falls in [b,c] and isn't too large it is accepted
201
+ // If p/q is too large then the bissection procedure can reduce [b,c] range to more extent
202
+ if (
203
+ p < 0.75 * cb * q - Math.abs(tol_act * q) * 0.5 &&
204
+ p < Math.abs(prev_step * q * 0.5)
205
+ ) {
206
+ new_step = p / q;
207
+ }
208
+ }
209
+
210
+ // Adjust the step to be not less than tolerance
211
+ if (Math.abs(new_step) < tol_act) {
212
+ if (new_step > 0) {
213
+ new_step = tol_act;
214
+ } else {
215
+ new_step = -tol_act;
216
+ }
217
+ }
218
+
219
+ // Save the previous approx.
220
+ a = b;
221
+ fa = fb;
222
+ b += new_step;
223
+ fb = f.call(object, b);
224
+ // Do step to a new approxim.
225
+ nfev += 1;
226
+
227
+ // Adjust c for it to have a sign opposite to that of b
228
+ if ((fb > 0 && fc > 0) || (fb < 0 && fc < 0)) {
229
+ c = a;
230
+ fc = fa;
231
+ }
232
+ niter++;
233
+ } // End while
234
+
235
+ return b;
236
+ }
237
+
238
+ /**
239
+ *
240
+ * Find minimum of an univariate function f.
241
+ * <p>
242
+ * Algorithm:
243
+ * G.Forsythe, M.Malcolm, C.Moler, Computer methods for mathematical
244
+ * computations. M., Mir, 1980, p.180 of the Russian edition
245
+ *
246
+ * @param {function} f Function, whose minimum is to be found
247
+ * @param {Array} x0 Start interval enclosing the minimum
248
+ * @param {Object} context Parent object in case f is method of it
249
+ *
250
+ * Return object with attributes:
251
+ * - success: true if reached minimum before max number of iterations
252
+ * - x: the approximation of the minimum value position
253
+ * - fx: the value of f at x
254
+ * - tol: the tolerance used in computing the minimum
255
+ **/
256
+
257
+ fminbr(f, x0, context, eps_override) {
258
+ let eps = eps_override !== undefined ? eps_override : this.eps;
259
+ var a,
260
+ b,
261
+ x,
262
+ v,
263
+ w,
264
+ fx,
265
+ fv,
266
+ fw,
267
+ range,
268
+ middle_range,
269
+ tol_act,
270
+ new_step,
271
+ p,
272
+ q,
273
+ t,
274
+ ft,
275
+ // Golden section ratio
276
+ r = (3.0 - Math.sqrt(5.0)) * 0.5,
277
+ tol = eps,
278
+ sqrteps = eps, //Math.sqrt(Mat.eps),
279
+ maxiter = this.maxIterationsMinimize,
280
+ niter = 0,
281
+ nfev = 0;
282
+
283
+ if (!Array.isArray(x0) || x0.length < 2) {
284
+ throw new Error(
285
+ "Numerics.fminbr: length of array x0 has to be at least two.",
286
+ );
287
+ }
288
+
289
+ a = x0[0];
290
+ b = x0[1];
291
+ v = a + r * (b - a);
292
+ fv = f.call(context, v);
293
+ if (Number.isNaN(fv)) {
294
+ return { success: false };
295
+ }
296
+
297
+ // First step - always gold section
298
+ nfev += 1;
299
+ x = v;
300
+ w = v;
301
+ fx = fv;
302
+ fw = fv;
303
+
304
+ while (niter < maxiter) {
305
+ // Range over the interval in which we are looking for the minimum
306
+ range = b - a;
307
+ middle_range = (a + b) * 0.5;
308
+
309
+ // Actual tolerance
310
+ tol_act = sqrteps * Math.abs(x) + tol / 3.0;
311
+
312
+ if (Math.abs(x - middle_range) + range * 0.5 <= 2.0 * tol_act) {
313
+ // Acceptable approx. is found
314
+ return { success: true, x: x, fx: fx, tol: tol_act };
315
+ }
316
+
317
+ // Obtain the golden section step
318
+ new_step = r * (x < middle_range ? b - x : a - x);
319
+
320
+ // Decide if the interpolation can be tried. If x and w are distinct interpolatiom may be tried
321
+ if (Math.abs(x - w) >= tol_act) {
322
+ // Interpolation step is calculated as p/q;
323
+ // division operation is delayed until last moment
324
+ t = (x - w) * (fx - fv);
325
+ q = (x - v) * (fx - fw);
326
+ p = (x - v) * q - (x - w) * t;
327
+ q = 2 * (q - t);
328
+
329
+ if (q > 0) {
330
+ // q was calculated with the op-
331
+ p = -p; // posite sign; make q positive
332
+ } else {
333
+ // and assign possible minus to
334
+ q = -q; // p
335
+ }
336
+ if (
337
+ Math.abs(p) < Math.abs(new_step * q) && // If x+p/q falls in [a,b]
338
+ p > q * (a - x + 2 * tol_act) && // not too close to a and
339
+ p < q * (b - x - 2 * tol_act)
340
+ ) {
341
+ // b, and isn't too large
342
+ new_step = p / q; // it is accepted
343
+ }
344
+ // If p/q is too large then the
345
+ // golden section procedure can
346
+ // reduce [a,b] range to more
347
+ // extent
348
+ }
349
+
350
+ // Adjust the step to be not less than tolerance
351
+ if (Math.abs(new_step) < tol_act) {
352
+ if (new_step > 0) {
353
+ new_step = tol_act;
354
+ } else {
355
+ new_step = -tol_act;
356
+ }
357
+ }
358
+
359
+ // Obtain the next approximation to min
360
+ // and reduce the enveloping range
361
+
362
+ // Tentative point for the min
363
+ t = x + new_step;
364
+ ft = f.call(context, t);
365
+ if (Number.isNaN(ft)) {
366
+ return { success: false };
367
+ }
368
+ nfev += 1;
369
+
370
+ // t is a better approximation
371
+ if (ft <= fx) {
372
+ // Reduce the range so that t would fall within it
373
+ if (t < x) {
374
+ b = x;
375
+ } else {
376
+ a = x;
377
+ }
378
+
379
+ // Assign the best approx to x
380
+ v = w;
381
+ w = x;
382
+ x = t;
383
+
384
+ fv = fw;
385
+ fw = fx;
386
+ fx = ft;
387
+ // x remains the better approx
388
+ } else {
389
+ // Reduce the range enclosing x
390
+ if (t < x) {
391
+ a = t;
392
+ } else {
393
+ b = t;
394
+ }
395
+
396
+ if (ft <= fw || w === x) {
397
+ v = w;
398
+ w = t;
399
+ fv = fw;
400
+ fw = ft;
401
+ } else if (ft <= fv || v === x || v === w) {
402
+ v = t;
403
+ fv = ft;
404
+ }
405
+ }
406
+ niter += 1;
407
+ }
408
+
409
+ return { success: false, x: x, fx: fx };
410
+ }
411
+
412
+ /**
413
+ * Newton's method to find roots of a funtion in one variable.
414
+ * @param {function} f We search for a solution of f(x)=0.
415
+ * @param {Number} x initial guess for the root, i.e. start value.
416
+ * @param {Object} context optional object that is treated as "this" in the function body. This is useful if
417
+ * the function is a method of an object and contains a reference to its parent object via "this".
418
+ * @returns {Number} A root of the function f.
419
+ */
420
+ Newton(f, x, context) {
421
+ var df,
422
+ i = 0,
423
+ h = this.eps,
424
+ newf = f.apply(context, [x]),
425
+ nfev = 1;
426
+
427
+ // For compatibility
428
+ if (Array.isArray(x)) {
429
+ x = x[0];
430
+ }
431
+
432
+ while (i < 50 && Math.abs(newf) > h) {
433
+ df = this.D(f, context)(x);
434
+ nfev += 2;
435
+
436
+ if (Math.abs(df) > h) {
437
+ x -= newf / df;
438
+ } else {
439
+ x += Math.random() * 0.2 - 1.0;
440
+ }
441
+
442
+ newf = f.apply(context, [x]);
443
+ nfev += 1;
444
+ i += 1;
445
+ }
446
+
447
+ return x;
448
+ }
449
+
450
+ /**
451
+ * Numerical (symmetric) approximation of derivative.
452
+ * @param {function} f Function in one variable to be differentiated.
453
+ * @param {object} [obj] Optional object that is treated as "this" in the function body. This is useful, if the function is a
454
+ * method of an object and contains a reference to its parent object via "this".
455
+ * @returns {function} Derivative function of a given function f.
456
+ */
457
+ D(f, obj) {
458
+ if (!(obj === undefined || obj === null)) {
459
+ return function (x) {
460
+ var h = 0.00001,
461
+ h2 = h * 2.0;
462
+ return (f(x + h) - f(x - h)) / h2;
463
+ };
464
+ }
465
+
466
+ return function (x) {
467
+ var h = 0.00001,
468
+ h2 = h * 2.0;
469
+
470
+ return (f.apply(obj, [x + h]) - f.apply(obj, [x - h])) / h2;
471
+ };
472
+ }
473
+ }
@@ -0,0 +1,36 @@
1
+ export default class ParameterStack {
2
+ constructor(initialParameters) {
3
+ this.stack = [{}];
4
+ if (initialParameters !== undefined) {
5
+ Object.assign(this.parameters, initialParameters);
6
+ }
7
+ }
8
+
9
+ get parameters() {
10
+ return this.stack[this.stack.length - 1];
11
+ }
12
+
13
+ push(additionalParameters, mergePrevious = true) {
14
+ let newParameters = {};
15
+ if (mergePrevious) {
16
+ Object.assign(newParameters, this.parameters);
17
+ if (additionalParameters !== undefined) {
18
+ Object.assign(newParameters, additionalParameters);
19
+ }
20
+ } else {
21
+ newParameters = additionalParameters;
22
+ }
23
+ this.stack.push(newParameters);
24
+ }
25
+
26
+ pop() {
27
+ let lastParams = this.stack.pop();
28
+
29
+ // don't fail if pop off too much
30
+ // just create an empty object
31
+ if (this.stack.length === 0) {
32
+ this.stack = [{}];
33
+ }
34
+ return lastParams;
35
+ }
36
+ }
@@ -0,0 +1,41 @@
1
+ const readOnlyProxyHandler = {
2
+ get: function (obj, prop) {
3
+ if (prop === "__isReadOnlyProxy") {
4
+ return true;
5
+ }
6
+ if (prop === "then" && obj instanceof Promise) {
7
+ // If we are wrapping the read-only proxy around the "then" of a promise,
8
+ // we want to swap the order of the promise and the read-only proxy
9
+ // so that we have a promise of a proxy rather than vice-versa.
10
+
11
+ // We return a function that will be used instead of the "then"
12
+ // that first applies the read-only proxy
13
+ return (f) =>
14
+ obj.then.bind(obj)((x) =>
15
+ f(
16
+ x !== null && typeof x === "object"
17
+ ? new Proxy(x, readOnlyProxyHandler)
18
+ : x,
19
+ ),
20
+ );
21
+ }
22
+ let result = obj[prop];
23
+ if (
24
+ result !== null &&
25
+ typeof result === "object" &&
26
+ result.__isReadOnlyProxy !== true
27
+ ) {
28
+ return new Proxy(result, readOnlyProxyHandler);
29
+ } else {
30
+ return result;
31
+ }
32
+ },
33
+ set: function (obj, prop, value) {
34
+ throw Error("Property " + prop + " is read-only");
35
+ },
36
+ deleteProperty: function (obj, prop) {
37
+ throw Error("Property " + prop + " is read-only");
38
+ },
39
+ };
40
+
41
+ export default readOnlyProxyHandler;
@@ -0,0 +1,88 @@
1
+ import readOnlyProxyHandler from "./ReadOnlyProxyHandler";
2
+
3
+ export default function createStateProxyHandler() {
4
+ return {
5
+ get: function (obj, prop) {
6
+ let result = obj[prop];
7
+ if (result !== undefined) {
8
+ if (result.isArray && (result.public || result.trackChanges)) {
9
+ result = new Proxy(
10
+ result.value,
11
+ createArrayProxyHandler({
12
+ variable: prop,
13
+ numDimensions: result.numDimensions,
14
+ }),
15
+ );
16
+ } else {
17
+ result = result.value;
18
+ // if (result !== null && typeof result === 'object' && result.__isReadOnlyProxy !== true) {
19
+ // result = new Proxy(result, readOnlyProxyHandler);
20
+ // }
21
+ }
22
+ }
23
+ return result;
24
+ },
25
+ set: function (obj, prop, value) {
26
+ throw Error("Property " + prop + " is read-only");
27
+ },
28
+ deleteProperty: function (obj, prop) {
29
+ throw Error("Property " + prop + " is read-only");
30
+ },
31
+ };
32
+ }
33
+
34
+ function createArrayProxyHandler({
35
+ variable,
36
+ numDimensions,
37
+ indicesSoFar = [],
38
+ }) {
39
+ return {
40
+ variable: variable,
41
+ numDimensions: numDimensions,
42
+ indicesSoFar: indicesSoFar,
43
+ get: function (obj, index) {
44
+ if (index === "then" && obj instanceof Promise) {
45
+ // If we are wrapping the array proxy around the "then" of a promise,
46
+ // we want to swap the order of the promise and the array proxy
47
+ // so that we have a promise of a proxy rather than vice-versa.
48
+
49
+ // We return a function that will be used instead of the "then"
50
+ // that first applies the array proxy
51
+ return (f) =>
52
+ obj.then.bind(obj)((x) =>
53
+ f(
54
+ x !== null && typeof x === "object"
55
+ ? new Proxy(
56
+ x,
57
+ createArrayProxyHandler({
58
+ variable: this.variable,
59
+ numDimensions: this.numDimensions,
60
+ indicesSoFar: this.indicesSoFar,
61
+ }),
62
+ )
63
+ : x,
64
+ ),
65
+ );
66
+ }
67
+
68
+ let result = obj[index];
69
+ if (result !== null && typeof result === "object" && numDimensions > 1) {
70
+ result = new Proxy(
71
+ result,
72
+ createArrayProxyHandler({
73
+ variable: this.variable,
74
+ numDimensions: this.numDimensions - 1,
75
+ indicesSoFar: [...this.indicesSoFar, index],
76
+ }),
77
+ );
78
+ }
79
+ return result;
80
+ },
81
+ set: function (obj, prop, value) {
82
+ throw Error("Property " + prop + " is read-only");
83
+ },
84
+ deleteProperty: function (obj, prop) {
85
+ throw Error("Property " + prop + " is read-only");
86
+ },
87
+ };
88
+ }
@@ -0,0 +1,67 @@
1
+ import TextComponent from "./Text";
2
+ import TextOrInline from "./abstract/TextOrInline";
3
+ import Template from "./Template";
4
+ import MathComponent from "./Math";
5
+ import Label from "./Label";
6
+ import MathList from "./MathList";
7
+ import { Div } from "./Divisions";
8
+
9
+ export class Columns extends TextComponent {
10
+ static componentType = "columns";
11
+ static rendererType = "text";
12
+ }
13
+
14
+ export class Title extends TextOrInline {
15
+ static componentType = "title";
16
+ }
17
+
18
+ export class RightHandSide extends MathComponent {
19
+ static componentType = "rightHandSide";
20
+ static rendererType = "math";
21
+ }
22
+
23
+ export class Description extends TextOrInline {
24
+ static componentType = "description";
25
+ static rendererType = undefined;
26
+ }
27
+
28
+ export class Else extends Template {
29
+ static componentType = "else";
30
+ }
31
+
32
+ export class Xlabel extends Label {
33
+ static componentType = "xlabel";
34
+ static rendererType = "label";
35
+ }
36
+
37
+ export class Ylabel extends Label {
38
+ static componentType = "ylabel";
39
+ static rendererType = "label";
40
+ }
41
+
42
+ export class MatrixRow extends MathList {
43
+ static componentType = "matrixRow";
44
+ static rendererType = "mathList";
45
+ }
46
+
47
+ export class MatrixColumn extends MathList {
48
+ static componentType = "matrixColumn";
49
+ static rendererType = "mathList";
50
+ }
51
+
52
+ export class Statement extends Div {
53
+ static componentType = "statement";
54
+ }
55
+
56
+ export class Introduction extends Div {
57
+ static componentType = "introduction";
58
+ }
59
+
60
+ export class Conclusion extends Div {
61
+ static componentType = "conclusion";
62
+ }
63
+
64
+ export class Topic extends TextComponent {
65
+ static componentType = "topic";
66
+ static rendererType = "text";
67
+ }