@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,6 @@
1
+ export { default as Atom } from "./Atom";
2
+ export { default as Ion } from "./Ion";
3
+ export { default as IonicCompound } from "./IonicCompound";
4
+ export { default as ElectronConfiguration } from "./ElectronConfiguration";
5
+ export { default as OrbitalDiagram } from "./OrbitalDiagram";
6
+ export { default as OrbitalDiagramInput } from "./OrbitalDiagramInput";
@@ -0,0 +1,627 @@
1
+ export function breakStringsAndOthersIntoComponentsByStringCommas(e) {
2
+ return null;
3
+ }
4
+
5
+ // function: returnBreakStringsSugarFunction
6
+ //
7
+ // returns a sugar replacement function that
8
+ // - expects string and other children,
9
+ // - breaks the children by commas in strings not enclosed in parenthesis,
10
+ // (optionally stripping off outer most parentheses first)
11
+ // - returns an array of components created by mapping the childrenToComponentFunction
12
+ // function onto each of the pieces
13
+ // - other children are not examined or altered, so they could be anything
14
+ //
15
+ // For example, to take the dependency "stringAndMathChildren"
16
+ // and create points with coordinates determined by the pieces
17
+ // one could use the sugar replacement function
18
+ // let childrenToComponentFunction = x => ({
19
+ // componentType: "point", children: [{
20
+ // componentType: "coords", children: x}]
21
+ // })
22
+ // returnBreakStringsSugarFunction({
23
+ // childrenToComponentFunction,
24
+ // dependencyNameWithChildren: "stringAndMathChildren"
25
+ // })
26
+
27
+ export function returnBreakStringsSugarFunction({
28
+ childrenToComponentFunction,
29
+ mustStripOffOuterParentheses = false,
30
+ }) {
31
+ return function ({ matchedChildren }) {
32
+ let Nparens = 0;
33
+ let pieces = [];
34
+ let currentPiece = [];
35
+ let strippedParens = false;
36
+
37
+ let numChildren = matchedChildren.length;
38
+
39
+ if (mustStripOffOuterParentheses) {
40
+ let firstComponent = matchedChildren[0];
41
+ if (
42
+ typeof firstComponent !== "string" ||
43
+ firstComponent.trimLeft()[0] !== "("
44
+ ) {
45
+ return { success: false };
46
+ }
47
+ }
48
+
49
+ for (let [compInd, component] of matchedChildren.entries()) {
50
+ if (typeof component !== "string") {
51
+ currentPiece.push(component);
52
+ continue;
53
+ }
54
+
55
+ let s = component.trim();
56
+
57
+ if (compInd === 0 && mustStripOffOuterParentheses && s[0] === "(") {
58
+ // found beginning paren, now check if there is an ending parens
59
+ let lastChild = matchedChildren[numChildren - 1];
60
+ if (typeof lastChild === "string") {
61
+ let sLast = lastChild.trimRight();
62
+ if (sLast[sLast.length - 1] === ")") {
63
+ // found ending paren, so we'll strip off first paren
64
+ strippedParens = true;
65
+ s = s.substring(1);
66
+ }
67
+ }
68
+ }
69
+
70
+ let beginInd = 0;
71
+
72
+ for (let ind = 0; ind < s.length; ind++) {
73
+ let char = s[ind];
74
+ if (char === "(") {
75
+ Nparens++;
76
+ }
77
+ if (char === ")") {
78
+ if (Nparens === 0) {
79
+ // parens didn't match
80
+
81
+ // check if stripped off initial paren and we're at the end
82
+ if (
83
+ strippedParens &&
84
+ compInd === numChildren - 1 &&
85
+ ind === s.length - 1
86
+ ) {
87
+ // strip off last parens
88
+ s = s.substring(0, s.length - 1);
89
+ break;
90
+ }
91
+ // return failure due to non-matching parens
92
+ return { success: false };
93
+ }
94
+ Nparens--;
95
+ }
96
+ if (char === "," && Nparens === 0) {
97
+ if (ind > beginInd) {
98
+ currentPiece.push(s.substring(beginInd, ind));
99
+ }
100
+ pieces.push(currentPiece);
101
+ currentPiece = [];
102
+ beginInd = ind + 1;
103
+ }
104
+ }
105
+
106
+ if (s.length > beginInd) {
107
+ currentPiece.push(s.substring(beginInd, s.length));
108
+ }
109
+ }
110
+
111
+ // parens didn't match, so return failure
112
+ if (Nparens !== 0) {
113
+ return { success: false };
114
+ }
115
+
116
+ pieces.push(currentPiece);
117
+
118
+ let newChildren = pieces.map(childrenToComponentFunction);
119
+
120
+ return {
121
+ success: true,
122
+ newChildren: newChildren,
123
+ };
124
+ };
125
+ }
126
+
127
+ // function: breakEmbeddedStringByCommas
128
+ //
129
+ // Utility function that can be used at the beginning of a sugar replacement function.
130
+ // It breaks children by commas not enclosed in parentheses.
131
+ // Remaining components are kept embedded in the pieces
132
+
133
+ // Returns
134
+ // - success: true if successed to break pieces
135
+ // - pieces: array of pieces that were broken apart by commas
136
+ // Each piece is an array of components.
137
+
138
+ export function breakEmbeddedStringByCommas({ childrenList }) {
139
+ let Nparens = 0;
140
+ let pieces = [];
141
+ let currentPiece = [];
142
+
143
+ for (let component of childrenList) {
144
+ if (typeof component !== "string") {
145
+ currentPiece.push(component);
146
+ continue;
147
+ }
148
+
149
+ let s = component.trim();
150
+ let beginInd = 0;
151
+
152
+ for (let ind = 0; ind < s.length; ind++) {
153
+ let char = s[ind];
154
+ if (char === "(") {
155
+ Nparens++;
156
+ }
157
+ if (char === ")") {
158
+ if (Nparens === 0) {
159
+ // parens didn't match, so return failure
160
+ return { success: false };
161
+ }
162
+ Nparens--;
163
+ }
164
+ if (char === "," && Nparens === 0) {
165
+ if (ind > beginInd) {
166
+ let newString = s.substring(beginInd, ind).trim();
167
+ currentPiece.push(newString);
168
+ }
169
+
170
+ pieces.push(currentPiece);
171
+ currentPiece = [];
172
+ beginInd = ind + 1;
173
+ }
174
+ }
175
+
176
+ if (s.length > beginInd) {
177
+ let newString = s.substring(beginInd, s.length).trim();
178
+ currentPiece.push(newString);
179
+ }
180
+ }
181
+
182
+ // parens didn't match, so return failure
183
+ if (Nparens !== 0) {
184
+ return { success: false };
185
+ }
186
+
187
+ pieces.push(currentPiece);
188
+
189
+ return {
190
+ success: true,
191
+ pieces: pieces,
192
+ };
193
+ }
194
+
195
+ export function breakEmbeddedStringsIntoParensPieces({
196
+ componentList,
197
+ removeParens = false,
198
+ }) {
199
+ let Nparens = 0;
200
+ let pieces = [];
201
+ let currentPiece = [];
202
+
203
+ for (let component of componentList) {
204
+ if (typeof component !== "string") {
205
+ if (Nparens === 0) {
206
+ // if not in a parenthesis, just add as a separate piece
207
+ pieces.push([component]);
208
+ } else {
209
+ currentPiece.push(component);
210
+ }
211
+ continue;
212
+ }
213
+
214
+ let s = component;
215
+
216
+ let beginInd = 0;
217
+
218
+ for (let ind = 0; ind < s.length; ind++) {
219
+ let char = s[ind];
220
+
221
+ if (char === "(") {
222
+ if (Nparens === 0 && removeParens) {
223
+ beginInd = ind + 1;
224
+ }
225
+ Nparens++;
226
+ } else if (char === ")") {
227
+ if (Nparens === 0) {
228
+ // parens didn't match, so return failure
229
+ return { success: false };
230
+ }
231
+ if (Nparens === 1) {
232
+ // found end of piece in parens
233
+ if (ind + 1 > beginInd) {
234
+ let lastInd = removeParens ? ind : ind + 1;
235
+ let newString = s.substring(beginInd, lastInd);
236
+ if (newString.length > 0) {
237
+ currentPiece.push(newString);
238
+ }
239
+ }
240
+
241
+ pieces.push(currentPiece);
242
+ currentPiece = [];
243
+ beginInd = ind + 1;
244
+ }
245
+ Nparens--;
246
+ } else if (Nparens === 0 && !char.match(/\s/)) {
247
+ // starting a new piece
248
+ // each piece must begin with parens
249
+ return { success: false };
250
+ }
251
+ }
252
+
253
+ if (s.length > beginInd) {
254
+ let newString = s.substring(beginInd, s.length);
255
+ currentPiece.push(newString);
256
+ }
257
+ }
258
+
259
+ // parens didn't match, so return failure
260
+ if (Nparens !== 0) {
261
+ return { success: false };
262
+ }
263
+
264
+ if (currentPiece.length > 0) {
265
+ pieces.push(currentPiece);
266
+ }
267
+
268
+ return {
269
+ success: true,
270
+ pieces: pieces,
271
+ };
272
+ }
273
+
274
+ export function breakIntoPiecesBySpacesOutsideParens({ componentList }) {
275
+ let Nparens = 0;
276
+ let pieces = [];
277
+ let currentPiece = [];
278
+
279
+ for (let component of componentList) {
280
+ if (typeof component !== "string") {
281
+ currentPiece.push(component);
282
+ continue;
283
+ }
284
+
285
+ let s = component;
286
+
287
+ let beginInd = 0;
288
+
289
+ for (let ind = 0; ind < s.length; ind++) {
290
+ let char = s[ind];
291
+
292
+ if (char === "(") {
293
+ Nparens++;
294
+ } else if (char === ")") {
295
+ if (Nparens === 0) {
296
+ // parens didn't match, so return failure
297
+ return { success: false };
298
+ }
299
+ Nparens--;
300
+ } else if (Nparens === 0 && char.match(/\s/)) {
301
+ // found a space outside parens
302
+
303
+ if (ind > beginInd) {
304
+ currentPiece.push(s.substring(beginInd, ind));
305
+ }
306
+
307
+ if (currentPiece.length > 0) {
308
+ pieces.push(currentPiece);
309
+ currentPiece = [];
310
+ }
311
+
312
+ beginInd = ind + 1;
313
+ }
314
+ }
315
+
316
+ if (s.length > beginInd) {
317
+ let newString = s.substring(beginInd, s.length).trim();
318
+ currentPiece.push(newString);
319
+ }
320
+ }
321
+
322
+ // parens didn't match, so return failure
323
+ if (Nparens !== 0) {
324
+ return { success: false };
325
+ }
326
+
327
+ if (currentPiece.length > 0) {
328
+ pieces.push(currentPiece);
329
+ }
330
+
331
+ return {
332
+ success: true,
333
+ pieces,
334
+ };
335
+ }
336
+
337
+ // function: breakIntoVectorComponents
338
+ //
339
+ // Utility function that attempts to break an array of components (compList) into components of a vector
340
+ // To be considered a vector, compList must
341
+ // -start with a string beginning with (
342
+ // -end with a string ending with )
343
+ // Moreover, once those parens are removed, the remainder must be able to be broken by commas not in parens
344
+ // (If not, then either compList didn't obey math rules of paren or the parens removed didn't match each other
345
+ //
346
+ // Returns:
347
+ // - foundVector: true if succeded
348
+ // - vectorComponents: array whose components are arrays representing the vector components
349
+
350
+ export function breakIntoVectorComponents(compList) {
351
+ if (compList.length === 0) {
352
+ return { foundVector: false };
353
+ }
354
+
355
+ if (typeof compList[0] !== "string") {
356
+ return { foundVector: false };
357
+ }
358
+
359
+ let sFirst = compList[0];
360
+ let charFirst = sFirst.trim()[0];
361
+ if (charFirst !== "(") {
362
+ return { foundVector: false };
363
+ }
364
+
365
+ if (typeof compList[compList.length - 1] !== "string") {
366
+ return { foundVector: false };
367
+ }
368
+
369
+ let sLast = compList[compList.length - 1];
370
+ let charLast = sLast.trim().slice(-1);
371
+ if (charLast !== ")") {
372
+ return { foundVector: false };
373
+ }
374
+
375
+ let newCompList = [];
376
+ if (compList.length === 1) {
377
+ let snew = sFirst.trim().slice(1, -1).trim();
378
+ if (snew.length > 0) {
379
+ newCompList.push(snew);
380
+ }
381
+ } else {
382
+ let snew = sFirst.trim().slice(1).trim();
383
+ if (snew.length > 0) {
384
+ newCompList.push(snew);
385
+ }
386
+
387
+ newCompList.push(...compList.slice(1, -1));
388
+
389
+ snew = sLast.trim().slice(0, -1).trim();
390
+ if (snew.length > 0) {
391
+ newCompList.push(snew);
392
+ }
393
+ }
394
+ let Nparens = 0;
395
+ let pieces = [];
396
+ let currentPiece = [];
397
+
398
+ for (let comp of newCompList) {
399
+ if (typeof comp !== "string") {
400
+ currentPiece.push(comp);
401
+ continue;
402
+ }
403
+
404
+ let s = comp.trim();
405
+
406
+ let beginInd = 0;
407
+ let brokeString = false;
408
+
409
+ for (let ind = 0; ind < s.length; ind++) {
410
+ let char = s[ind];
411
+ if (char === "(") {
412
+ Nparens++;
413
+ }
414
+ if (char === ")") {
415
+ if (Nparens === 0) {
416
+ // parens didn't match, so it wasn't a vector
417
+ return { foundVector: false };
418
+ }
419
+ Nparens--;
420
+ }
421
+
422
+ if (char === "," && Nparens === 0) {
423
+ if (ind > beginInd) {
424
+ let snew = s.substring(beginInd, ind).trim();
425
+ currentPiece.push(snew);
426
+ }
427
+
428
+ pieces.push(currentPiece);
429
+ currentPiece = [];
430
+ beginInd = ind + 1;
431
+ brokeString = true;
432
+ }
433
+ }
434
+
435
+ if (brokeString) {
436
+ if (s.length > beginInd) {
437
+ let snew = s.substring(beginInd, s.length).trim();
438
+ currentPiece.push(snew);
439
+ }
440
+ } else {
441
+ currentPiece.push(comp);
442
+ }
443
+ }
444
+
445
+ // parens didn't match, so it wasn't a vector
446
+ if (Nparens !== 0) {
447
+ return { foundVector: false };
448
+ }
449
+
450
+ pieces.push(currentPiece);
451
+
452
+ return {
453
+ foundVector: true,
454
+ vectorComponents: pieces,
455
+ };
456
+ }
457
+
458
+ // function: breakPiecesByEquals
459
+ //
460
+ // We break each piece into lhs and rhs separated by an equal sign.
461
+ // If no piece contains an equal sign, then rhs's will be empty
462
+ // If some pieces contain an equal sign but not others, return failure
463
+ // If a pieced contains two equal signs, return failure
464
+ //
465
+ // If parseVectorEquality is true and there is a single piece
466
+ // with an equal sign, then attempt to parse both lhs and rhs as vectors.
467
+ // If both are vectors of the same size, put the components individually
468
+ // into lhs and rhs pieces (i.e., treat the same as if had separate pieces
469
+ // with an equal sign for each component)
470
+ // If one side but not the other is a vector or if they have different sizes,
471
+ // then return failure
472
+ // If neither side is a vector, keep lhs and rhs as they were
473
+ //
474
+ // Returns:
475
+ // - success: true if didn't run into troubles described above
476
+ // - lhsByPiece: array of lhs of each piece
477
+ // - rhsByPiece: array of rhs of each piece
478
+ // - toDelete: strings that were broken apart and hence must be deleted
479
+ //
480
+ // Note: all punctuation (equal sign as well as comma and parens for vectors)
481
+ // are recognized only inside strings
482
+ //
483
+ // Note 2: we assume pieces have already been processed by breakEmbeddedStringByCommas
484
+ // so that strings can be idenified by the _string property
485
+
486
+ // TODO: this no longer works, as we don't add _string property,
487
+ // but this code isn't currently being called anywhere
488
+
489
+ // export function breakPiecesByEquals(pieces, parseVectorEquality = false) {
490
+
491
+ // let lhsByPiece = [];
492
+ // let rhsByPiece = [];
493
+ // let toDelete = [];
494
+
495
+ // let foundEqualSignInAPiece;
496
+ // let re_equal = /^([^=]*)(=([^=]*))?$/;
497
+
498
+ // for (let ind = 0; ind < pieces.length; ind++) {
499
+ // let piece = pieces[ind];
500
+
501
+ // let lhs = [];
502
+ // let rhs = [];
503
+ // let foundEqualSign = false;
504
+ // for (let comp of piece) {
505
+
506
+ // let s = comp._string;
507
+ // if (s === undefined) {
508
+ // if (foundEqualSign) {
509
+ // rhs.push(comp);
510
+ // } else {
511
+ // lhs.push(comp);
512
+ // }
513
+ // continue;
514
+ // }
515
+
516
+ // // we have a string s
517
+ // let result = s.match(re_equal);
518
+ // if (result === null) {
519
+ // // found more than one = sign in the single string
520
+ // return { success: false };
521
+ // }
522
+ // if (result[2] === undefined) {
523
+ // // no equal sign, so just add to lhs or rhs
524
+ // if (foundEqualSign) {
525
+ // rhs.push(comp);
526
+ // } else {
527
+ // lhs.push(comp);
528
+ // }
529
+ // } else {
530
+
531
+ // // found one equal sign
532
+ // if (foundEqualSign) {
533
+ // // found second equal sign
534
+ // return { success: false };
535
+ // }
536
+ // foundEqualSign = true;
537
+ // let l = result[1];
538
+ // let r = result[3];
539
+ // if (l.length > 0) {
540
+ // lhs.push({
541
+ // componentType: "string",
542
+ // state: { value: l },
543
+ // _string: l,
544
+ // })
545
+ // }
546
+ // if (r.length > 0) {
547
+ // rhs.push({
548
+ // componentType: "string",
549
+ // state: { value: r },
550
+ // _string: r,
551
+ // })
552
+ // }
553
+ // if (comp.createdComponent === true) {
554
+ // // broke up an original string
555
+ // // need to make original string as to be deleted
556
+ // toDelete.push(comp.componentName);
557
+ // }
558
+ // }
559
+ // }
560
+
561
+ // if (ind === 0) {
562
+ // foundEqualSignInAPiece = foundEqualSign;
563
+ // } else {
564
+ // if (foundEqualSign !== foundEqualSignInAPiece) {
565
+ // // inconsistent pieces, some with and without equal signs
566
+ // // sugar fails
567
+ // return { success: false };
568
+ // }
569
+ // }
570
+
571
+ // if (foundEqualSign) {
572
+
573
+ // if (pieces.length === 1 && parseVectorEquality) {
574
+ // // check if lhs and rhs are vectors
575
+ // let lhsResult = breakIntoVectorComponents(lhs);
576
+ // if (lhsResult.foundVector === true) {
577
+ // let rhsResult = breakIntoVectorComponents(rhs);
578
+ // if (rhsResult.foundVector !== true) {
579
+ // // on side is vector, the other isn't
580
+ // return { success: false }
581
+ // }
582
+ // if (lhsResult.vectorComponents.length !== rhsResult.vectorComponents.length) {
583
+ // // have different vector lengths
584
+ // return { success: false }
585
+ // }
586
+
587
+ // // found two vectors of the same length
588
+ // // should treat the same as separate equalities
589
+ // for (let i = 0; i < lhsResult.vectorComponents.length; i++) {
590
+ // lhsByPiece.push(lhsResult.vectorComponents[i]);
591
+ // rhsByPiece.push(rhsResult.vectorComponents[i]);
592
+ // }
593
+ // // add any more strings to delete
594
+ // toDelete = [...toDelete, ...lhsResult.toDelete, ...rhsResult.toDelete]
595
+
596
+ // return {
597
+ // success: true,
598
+ // lhsByPiece: lhsByPiece,
599
+ // rhsByPiece: rhsByPiece,
600
+ // toDelete: toDelete,
601
+ // }
602
+
603
+ // } else {
604
+ // // didn't find vector in lhs
605
+ // // just make sure isn't a vector in rhs
606
+ // let rhsResult = breakIntoVectorComponents(rhs, true);
607
+ // if (rhsResult.success === true) {
608
+ // return { success: false };
609
+ // }
610
+ // }
611
+ // }
612
+ // lhsByPiece.push(lhs);
613
+ // rhsByPiece.push(rhs);
614
+ // } else {
615
+ // // no equal sign, so we just have lhs
616
+ // lhsByPiece.push(lhs);
617
+ // }
618
+ // }
619
+
620
+ // return {
621
+ // success: true,
622
+ // lhsByPiece: lhsByPiece,
623
+ // rhsByPiece: rhsByPiece,
624
+ // toDelete: toDelete,
625
+
626
+ // }
627
+ // }