@mathscan/geometry-engine 0.1.0

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 (380) hide show
  1. package/README.md +1101 -0
  2. package/dist/coordinates/grid.d.cts +8 -0
  3. package/dist/coordinates/grid.d.ts +9 -0
  4. package/dist/coordinates/grid.d.ts.map +1 -0
  5. package/dist/coordinates/lineClipping.d.cts +3 -0
  6. package/dist/coordinates/lineClipping.d.ts +4 -0
  7. package/dist/coordinates/lineClipping.d.ts.map +1 -0
  8. package/dist/coordinates/transform.d.cts +18 -0
  9. package/dist/coordinates/transform.d.ts +19 -0
  10. package/dist/coordinates/transform.d.ts.map +1 -0
  11. package/dist/core.cjs +1 -0
  12. package/dist/core.mjs +4 -0
  13. package/dist/entries/core.d.cts +16 -0
  14. package/dist/entries/core.d.ts +17 -0
  15. package/dist/entries/core.d.ts.map +1 -0
  16. package/dist/entries/react.d.cts +18 -0
  17. package/dist/entries/react.d.ts +19 -0
  18. package/dist/entries/react.d.ts.map +1 -0
  19. package/dist/entries/schemas.d.cts +14 -0
  20. package/dist/entries/schemas.d.ts +15 -0
  21. package/dist/entries/schemas.d.ts.map +1 -0
  22. package/dist/entries/validation.d.cts +12 -0
  23. package/dist/entries/validation.d.ts +13 -0
  24. package/dist/entries/validation.d.ts.map +1 -0
  25. package/dist/exercise.schema-BV2b7rtN.cjs +2 -0
  26. package/dist/exercise.schema-BV2b7rtN.cjs.map +1 -0
  27. package/dist/exercise.schema-ckVBW9XA.js +212 -0
  28. package/dist/exercise.schema-ckVBW9XA.js.map +1 -0
  29. package/dist/geometry/distance.d.cts +9 -0
  30. package/dist/geometry/distance.d.ts +10 -0
  31. package/dist/geometry/distance.d.ts.map +1 -0
  32. package/dist/geometry/entities/circle.d.cts +36 -0
  33. package/dist/geometry/entities/circle.d.ts +37 -0
  34. package/dist/geometry/entities/circle.d.ts.map +1 -0
  35. package/dist/geometry/entities/index.d.cts +60 -0
  36. package/dist/geometry/entities/index.d.ts +61 -0
  37. package/dist/geometry/entities/index.d.ts.map +1 -0
  38. package/dist/geometry/entities/line.d.cts +43 -0
  39. package/dist/geometry/entities/line.d.ts +44 -0
  40. package/dist/geometry/entities/line.d.ts.map +1 -0
  41. package/dist/geometry/entities/point.d.cts +27 -0
  42. package/dist/geometry/entities/point.d.ts +28 -0
  43. package/dist/geometry/entities/point.d.ts.map +1 -0
  44. package/dist/geometry/entities/relations.d.cts +27 -0
  45. package/dist/geometry/entities/relations.d.ts +28 -0
  46. package/dist/geometry/entities/relations.d.ts.map +1 -0
  47. package/dist/geometry/entities/segment.d.cts +45 -0
  48. package/dist/geometry/entities/segment.d.ts +46 -0
  49. package/dist/geometry/entities/segment.d.ts.map +1 -0
  50. package/dist/geometry/entityCapabilities.d.cts +2 -0
  51. package/dist/geometry/entityCapabilities.d.ts +3 -0
  52. package/dist/geometry/entityCapabilities.d.ts.map +1 -0
  53. package/dist/geometry/entityModel.d.cts +139 -0
  54. package/dist/geometry/entityModel.d.ts +140 -0
  55. package/dist/geometry/entityModel.d.ts.map +1 -0
  56. package/dist/geometry/entityRecord.d.cts +27 -0
  57. package/dist/geometry/entityRecord.d.ts +28 -0
  58. package/dist/geometry/entityRecord.d.ts.map +1 -0
  59. package/dist/geometry/evaluateGraph.d.cts +37 -0
  60. package/dist/geometry/evaluateGraph.d.ts +38 -0
  61. package/dist/geometry/evaluateGraph.d.ts.map +1 -0
  62. package/dist/geometry/geometryObject.d.cts +4 -0
  63. package/dist/geometry/geometryObject.d.ts +5 -0
  64. package/dist/geometry/geometryObject.d.ts.map +1 -0
  65. package/dist/geometry/goalCandidate.d.cts +8 -0
  66. package/dist/geometry/goalCandidate.d.ts +9 -0
  67. package/dist/geometry/goalCandidate.d.ts.map +1 -0
  68. package/dist/geometry/hitTest.d.cts +23 -0
  69. package/dist/geometry/hitTest.d.ts +24 -0
  70. package/dist/geometry/hitTest.d.ts.map +1 -0
  71. package/dist/geometry/point.d.cts +5 -0
  72. package/dist/geometry/point.d.ts +6 -0
  73. package/dist/geometry/point.d.ts.map +1 -0
  74. package/dist/geometry/pointOrigin.d.cts +5 -0
  75. package/dist/geometry/pointOrigin.d.ts +6 -0
  76. package/dist/geometry/pointOrigin.d.ts.map +1 -0
  77. package/dist/geometry/v1Bridge.d.cts +41 -0
  78. package/dist/geometry/v1Bridge.d.ts +42 -0
  79. package/dist/geometry/v1Bridge.d.ts.map +1 -0
  80. package/dist/geometryAttemptStatus-5L_q6-9l.js +184 -0
  81. package/dist/geometryAttemptStatus-5L_q6-9l.js.map +1 -0
  82. package/dist/geometryAttemptStatus-N_XHIkiS.cjs +2 -0
  83. package/dist/geometryAttemptStatus-N_XHIkiS.cjs.map +1 -0
  84. package/dist/geometryState.schema-D0ixyGYE.js +955 -0
  85. package/dist/geometryState.schema-D0ixyGYE.js.map +1 -0
  86. package/dist/geometryState.schema-DKQ-durx.cjs +2 -0
  87. package/dist/geometryState.schema-DKQ-durx.cjs.map +1 -0
  88. package/dist/goals-C3ZwbEh_.js +451 -0
  89. package/dist/goals-C3ZwbEh_.js.map +1 -0
  90. package/dist/goals-CxR5qPDC.cjs +2 -0
  91. package/dist/goals-CxR5qPDC.cjs.map +1 -0
  92. package/dist/index.cjs +1 -0
  93. package/dist/index.d.cts +4 -0
  94. package/dist/index.d.ts +5 -0
  95. package/dist/index.d.ts.map +1 -0
  96. package/dist/index.mjs +10 -0
  97. package/dist/measure/geometryAdapter.d.cts +26 -0
  98. package/dist/measure/geometryAdapter.d.ts +27 -0
  99. package/dist/measure/geometryAdapter.d.ts.map +1 -0
  100. package/dist/measure/kernel.d.cts +25 -0
  101. package/dist/measure/kernel.d.ts +26 -0
  102. package/dist/measure/kernel.d.ts.map +1 -0
  103. package/dist/numerics/policy.d.cts +17 -0
  104. package/dist/numerics/policy.d.ts +18 -0
  105. package/dist/numerics/policy.d.ts.map +1 -0
  106. package/dist/react-BEcdx1f6.js +1851 -0
  107. package/dist/react-BEcdx1f6.js.map +1 -0
  108. package/dist/react-Pp_VSk--.cjs +2 -0
  109. package/dist/react-Pp_VSk--.cjs.map +1 -0
  110. package/dist/react.cjs +1 -0
  111. package/dist/react.mjs +2 -0
  112. package/dist/renderer/GeometryCanvas.d.cts +14 -0
  113. package/dist/renderer/GeometryCanvas.d.ts +15 -0
  114. package/dist/renderer/GeometryCanvas.d.ts.map +1 -0
  115. package/dist/renderer/GeometryCompanion.d.cts +29 -0
  116. package/dist/renderer/GeometryCompanion.d.ts +30 -0
  117. package/dist/renderer/GeometryCompanion.d.ts.map +1 -0
  118. package/dist/renderer/GeometryGrid.d.cts +7 -0
  119. package/dist/renderer/GeometryGrid.d.ts +8 -0
  120. package/dist/renderer/GeometryGrid.d.ts.map +1 -0
  121. package/dist/renderer/GeometryInstruments.d.cts +7 -0
  122. package/dist/renderer/GeometryInstruments.d.ts +8 -0
  123. package/dist/renderer/GeometryInstruments.d.ts.map +1 -0
  124. package/dist/renderer/StudentGeometryCanvas.d.cts +11 -0
  125. package/dist/renderer/StudentGeometryCanvas.d.ts +12 -0
  126. package/dist/renderer/StudentGeometryCanvas.d.ts.map +1 -0
  127. package/dist/renderer/StudentGeometryExercise.d.cts +36 -0
  128. package/dist/renderer/StudentGeometryExercise.d.ts +37 -0
  129. package/dist/renderer/StudentGeometryExercise.d.ts.map +1 -0
  130. package/dist/renderer/Toolbar.d.cts +7 -0
  131. package/dist/renderer/Toolbar.d.ts +8 -0
  132. package/dist/renderer/Toolbar.d.ts.map +1 -0
  133. package/dist/renderer/deriveRenderableGeometry.d.cts +15 -0
  134. package/dist/renderer/deriveRenderableGeometry.d.ts +16 -0
  135. package/dist/renderer/deriveRenderableGeometry.d.ts.map +1 -0
  136. package/dist/renderer/deriveSemanticScene.d.cts +58 -0
  137. package/dist/renderer/deriveSemanticScene.d.ts +59 -0
  138. package/dist/renderer/deriveSemanticScene.d.ts.map +1 -0
  139. package/dist/renderer/entityDisplayName.d.cts +12 -0
  140. package/dist/renderer/entityDisplayName.d.ts +13 -0
  141. package/dist/renderer/entityDisplayName.d.ts.map +1 -0
  142. package/dist/renderer/gesturePolicy.d.cts +97 -0
  143. package/dist/renderer/gesturePolicy.d.ts +98 -0
  144. package/dist/renderer/gesturePolicy.d.ts.map +1 -0
  145. package/dist/renderer/shapes/CircleShape.d.cts +17 -0
  146. package/dist/renderer/shapes/CircleShape.d.ts +18 -0
  147. package/dist/renderer/shapes/CircleShape.d.ts.map +1 -0
  148. package/dist/renderer/shapes/EntityLabel.d.cts +14 -0
  149. package/dist/renderer/shapes/EntityLabel.d.ts +15 -0
  150. package/dist/renderer/shapes/EntityLabel.d.ts.map +1 -0
  151. package/dist/renderer/shapes/EntityShape.d.cts +18 -0
  152. package/dist/renderer/shapes/EntityShape.d.ts +19 -0
  153. package/dist/renderer/shapes/EntityShape.d.ts.map +1 -0
  154. package/dist/renderer/shapes/LineShape.d.cts +16 -0
  155. package/dist/renderer/shapes/LineShape.d.ts +17 -0
  156. package/dist/renderer/shapes/LineShape.d.ts.map +1 -0
  157. package/dist/renderer/shapes/PointShape.d.cts +17 -0
  158. package/dist/renderer/shapes/PointShape.d.ts +18 -0
  159. package/dist/renderer/shapes/PointShape.d.ts.map +1 -0
  160. package/dist/renderer/shapes/SegmentShape.d.cts +17 -0
  161. package/dist/renderer/shapes/SegmentShape.d.ts +18 -0
  162. package/dist/renderer/shapes/SegmentShape.d.ts.map +1 -0
  163. package/dist/renderer/shapes/SnapMarker.d.cts +8 -0
  164. package/dist/renderer/shapes/SnapMarker.d.ts +9 -0
  165. package/dist/renderer/shapes/SnapMarker.d.ts.map +1 -0
  166. package/dist/renderer/shapes/StrokedLine.d.cts +18 -0
  167. package/dist/renderer/shapes/StrokedLine.d.ts +19 -0
  168. package/dist/renderer/shapes/StrokedLine.d.ts.map +1 -0
  169. package/dist/renderer/studentExerciseSession.d.cts +71 -0
  170. package/dist/renderer/studentExerciseSession.d.ts +72 -0
  171. package/dist/renderer/studentExerciseSession.d.ts.map +1 -0
  172. package/dist/renderer/useConnectionPreview.d.cts +44 -0
  173. package/dist/renderer/useConnectionPreview.d.ts +45 -0
  174. package/dist/renderer/useConnectionPreview.d.ts.map +1 -0
  175. package/dist/renderer/usePlacementSnap.d.cts +28 -0
  176. package/dist/renderer/usePlacementSnap.d.ts +29 -0
  177. package/dist/renderer/usePlacementSnap.d.ts.map +1 -0
  178. package/dist/renderer/usePointerGestures.d.cts +46 -0
  179. package/dist/renderer/usePointerGestures.d.ts +47 -0
  180. package/dist/renderer/usePointerGestures.d.ts.map +1 -0
  181. package/dist/schemas/circle.schema.d.cts +8 -0
  182. package/dist/schemas/circle.schema.d.ts +9 -0
  183. package/dist/schemas/circle.schema.d.ts.map +1 -0
  184. package/dist/schemas/entityDefinition.schema.d.cts +69 -0
  185. package/dist/schemas/entityDefinition.schema.d.ts +70 -0
  186. package/dist/schemas/entityDefinition.schema.d.ts.map +1 -0
  187. package/dist/schemas/entityDocument.d.cts +95 -0
  188. package/dist/schemas/entityDocument.d.ts +96 -0
  189. package/dist/schemas/entityDocument.d.ts.map +1 -0
  190. package/dist/schemas/entityPresentation.schema.d.cts +12 -0
  191. package/dist/schemas/entityPresentation.schema.d.ts +13 -0
  192. package/dist/schemas/entityPresentation.schema.d.ts.map +1 -0
  193. package/dist/schemas/exercise.schema.d.cts +217 -0
  194. package/dist/schemas/exercise.schema.d.ts +218 -0
  195. package/dist/schemas/exercise.schema.d.ts.map +1 -0
  196. package/dist/schemas/exerciseProjection.d.cts +10 -0
  197. package/dist/schemas/exerciseProjection.d.ts +11 -0
  198. package/dist/schemas/exerciseProjection.d.ts.map +1 -0
  199. package/dist/schemas/exerciseV2.schema.d.cts +137 -0
  200. package/dist/schemas/exerciseV2.schema.d.ts +138 -0
  201. package/dist/schemas/exerciseV2.schema.d.ts.map +1 -0
  202. package/dist/schemas/exerciseV3.schema.d.cts +149 -0
  203. package/dist/schemas/exerciseV3.schema.d.ts +150 -0
  204. package/dist/schemas/exerciseV3.schema.d.ts.map +1 -0
  205. package/dist/schemas/geometryObject.schema.d.cts +17 -0
  206. package/dist/schemas/geometryObject.schema.d.ts +18 -0
  207. package/dist/schemas/geometryObject.schema.d.ts.map +1 -0
  208. package/dist/schemas/geometryState.schema.d.cts +64 -0
  209. package/dist/schemas/geometryState.schema.d.ts +65 -0
  210. package/dist/schemas/geometryState.schema.d.ts.map +1 -0
  211. package/dist/schemas/givenElement.schema.d.cts +24 -0
  212. package/dist/schemas/givenElement.schema.d.ts +25 -0
  213. package/dist/schemas/givenElement.schema.d.ts.map +1 -0
  214. package/dist/schemas/goals/createGoal.schema.d.cts +12 -0
  215. package/dist/schemas/goals/createGoal.schema.d.ts +13 -0
  216. package/dist/schemas/goals/createGoal.schema.d.ts.map +1 -0
  217. package/dist/schemas/goals/geometryGoal.schema.d.cts +58 -0
  218. package/dist/schemas/goals/geometryGoal.schema.d.ts +59 -0
  219. package/dist/schemas/goals/geometryGoal.schema.d.ts.map +1 -0
  220. package/dist/schemas/goals/goalKindDeclaration.d.cts +53 -0
  221. package/dist/schemas/goals/goalKindDeclaration.d.ts +54 -0
  222. package/dist/schemas/goals/goalKindDeclaration.d.ts.map +1 -0
  223. package/dist/schemas/goals/midpointGoal.schema.d.cts +9 -0
  224. package/dist/schemas/goals/midpointGoal.schema.d.ts +10 -0
  225. package/dist/schemas/goals/midpointGoal.schema.d.ts.map +1 -0
  226. package/dist/schemas/goals/parallelGoal.schema.d.cts +15 -0
  227. package/dist/schemas/goals/parallelGoal.schema.d.ts +16 -0
  228. package/dist/schemas/goals/parallelGoal.schema.d.ts.map +1 -0
  229. package/dist/schemas/goals/perpendicularGoal.schema.d.cts +15 -0
  230. package/dist/schemas/goals/perpendicularGoal.schema.d.ts +16 -0
  231. package/dist/schemas/goals/perpendicularGoal.schema.d.ts.map +1 -0
  232. package/dist/schemas/goals/segmentLengthGoal.schema.d.cts +9 -0
  233. package/dist/schemas/goals/segmentLengthGoal.schema.d.ts +10 -0
  234. package/dist/schemas/goals/segmentLengthGoal.schema.d.ts.map +1 -0
  235. package/dist/schemas/goals/throughPointsGoal.schema.d.cts +13 -0
  236. package/dist/schemas/goals/throughPointsGoal.schema.d.ts +14 -0
  237. package/dist/schemas/goals/throughPointsGoal.schema.d.ts.map +1 -0
  238. package/dist/schemas/identifier.schema.d.cts +2 -0
  239. package/dist/schemas/identifier.schema.d.ts +3 -0
  240. package/dist/schemas/identifier.schema.d.ts.map +1 -0
  241. package/dist/schemas/line.schema.d.cts +7 -0
  242. package/dist/schemas/line.schema.d.ts +8 -0
  243. package/dist/schemas/line.schema.d.ts.map +1 -0
  244. package/dist/schemas/migrate.d.cts +21 -0
  245. package/dist/schemas/migrate.d.ts +22 -0
  246. package/dist/schemas/migrate.d.ts.map +1 -0
  247. package/dist/schemas/objectTypeName.schema.d.cts +8 -0
  248. package/dist/schemas/objectTypeName.schema.d.ts +9 -0
  249. package/dist/schemas/objectTypeName.schema.d.ts.map +1 -0
  250. package/dist/schemas/point.schema.d.cts +15 -0
  251. package/dist/schemas/point.schema.d.ts +16 -0
  252. package/dist/schemas/point.schema.d.ts.map +1 -0
  253. package/dist/schemas/pointOrigin.schema.d.cts +25 -0
  254. package/dist/schemas/pointOrigin.schema.d.ts +26 -0
  255. package/dist/schemas/pointOrigin.schema.d.ts.map +1 -0
  256. package/dist/schemas/segment.schema.d.cts +8 -0
  257. package/dist/schemas/segment.schema.d.ts +9 -0
  258. package/dist/schemas/segment.schema.d.ts.map +1 -0
  259. package/dist/schemas/v1ToV2.d.cts +37 -0
  260. package/dist/schemas/v1ToV2.d.ts +38 -0
  261. package/dist/schemas/v1ToV2.d.ts.map +1 -0
  262. package/dist/schemas/v2ToV3.d.cts +37 -0
  263. package/dist/schemas/v2ToV3.d.ts +38 -0
  264. package/dist/schemas/v2ToV3.d.ts.map +1 -0
  265. package/dist/schemas/v3ToV4.d.cts +3 -0
  266. package/dist/schemas/v3ToV4.d.ts +4 -0
  267. package/dist/schemas/v3ToV4.d.ts.map +1 -0
  268. package/dist/schemas/viewport.schema.d.cts +3 -0
  269. package/dist/schemas/viewport.schema.d.ts +4 -0
  270. package/dist/schemas/viewport.schema.d.ts.map +1 -0
  271. package/dist/schemas.cjs +1 -0
  272. package/dist/schemas.mjs +3 -0
  273. package/dist/snapping/computeSnap.d.cts +30 -0
  274. package/dist/snapping/computeSnap.d.ts +31 -0
  275. package/dist/snapping/computeSnap.d.ts.map +1 -0
  276. package/dist/state/geometryContext.d.cts +40 -0
  277. package/dist/state/geometryContext.d.ts +41 -0
  278. package/dist/state/geometryContext.d.ts.map +1 -0
  279. package/dist/state/resolvePoints.d.cts +51 -0
  280. package/dist/state/resolvePoints.d.ts +52 -0
  281. package/dist/state/resolvePoints.d.ts.map +1 -0
  282. package/dist/store/attemptChange.d.cts +30 -0
  283. package/dist/store/attemptChange.d.ts +31 -0
  284. package/dist/store/attemptChange.d.ts.map +1 -0
  285. package/dist/store/constructionCommand.d.cts +35 -0
  286. package/dist/store/constructionCommand.d.ts +36 -0
  287. package/dist/store/constructionCommand.d.ts.map +1 -0
  288. package/dist/store/constructionIdentity.d.cts +21 -0
  289. package/dist/store/constructionIdentity.d.ts +22 -0
  290. package/dist/store/constructionIdentity.d.ts.map +1 -0
  291. package/dist/store/createStore.d.cts +6 -0
  292. package/dist/store/createStore.d.ts +7 -0
  293. package/dist/store/createStore.d.ts.map +1 -0
  294. package/dist/store/history.d.cts +2 -0
  295. package/dist/store/history.d.ts +3 -0
  296. package/dist/store/history.d.ts.map +1 -0
  297. package/dist/store/studentStore.d.cts +151 -0
  298. package/dist/store/studentStore.d.ts +152 -0
  299. package/dist/store/studentStore.d.ts.map +1 -0
  300. package/dist/store/teacherStore.d.cts +111 -0
  301. package/dist/store/teacherStore.d.ts +112 -0
  302. package/dist/store/teacherStore.d.ts.map +1 -0
  303. package/dist/store/useStoreState.d.cts +2 -0
  304. package/dist/store/useStoreState.d.ts +3 -0
  305. package/dist/store/useStoreState.d.ts.map +1 -0
  306. package/dist/studentStore-CEKTtMCh.js +1162 -0
  307. package/dist/studentStore-CEKTtMCh.js.map +1 -0
  308. package/dist/studentStore-DLftfFAl.cjs +2 -0
  309. package/dist/studentStore-DLftfFAl.cjs.map +1 -0
  310. package/dist/validation/checkGeometryAnswer.d.cts +63 -0
  311. package/dist/validation/checkGeometryAnswer.d.ts +64 -0
  312. package/dist/validation/checkGeometryAnswer.d.ts.map +1 -0
  313. package/dist/validation/deriveGeometryCanvasFeedback.d.cts +7 -0
  314. package/dist/validation/deriveGeometryCanvasFeedback.d.ts +8 -0
  315. package/dist/validation/deriveGeometryCanvasFeedback.d.ts.map +1 -0
  316. package/dist/validation/exerciseLoad.d.cts +29 -0
  317. package/dist/validation/exerciseLoad.d.ts +30 -0
  318. package/dist/validation/exerciseLoad.d.ts.map +1 -0
  319. package/dist/validation/geometryAttemptStatus.d.cts +23 -0
  320. package/dist/validation/geometryAttemptStatus.d.ts +24 -0
  321. package/dist/validation/geometryAttemptStatus.d.ts.map +1 -0
  322. package/dist/validation/getGeometryExerciseWarnings.d.cts +16 -0
  323. package/dist/validation/getGeometryExerciseWarnings.d.ts +17 -0
  324. package/dist/validation/getGeometryExerciseWarnings.d.ts.map +1 -0
  325. package/dist/validation/goals/create.d.cts +3 -0
  326. package/dist/validation/goals/create.d.ts +4 -0
  327. package/dist/validation/goals/create.d.ts.map +1 -0
  328. package/dist/validation/goals/goalContext.d.cts +44 -0
  329. package/dist/validation/goals/goalContext.d.ts +45 -0
  330. package/dist/validation/goals/goalContext.d.ts.map +1 -0
  331. package/dist/validation/goals/goalKindHandler.d.cts +26 -0
  332. package/dist/validation/goals/goalKindHandler.d.ts +27 -0
  333. package/dist/validation/goals/goalKindHandler.d.ts.map +1 -0
  334. package/dist/validation/goals/index.d.cts +14 -0
  335. package/dist/validation/goals/index.d.ts +15 -0
  336. package/dist/validation/goals/index.d.ts.map +1 -0
  337. package/dist/validation/goals/midpoint.d.cts +4 -0
  338. package/dist/validation/goals/midpoint.d.ts +5 -0
  339. package/dist/validation/goals/midpoint.d.ts.map +1 -0
  340. package/dist/validation/goals/parallel.d.cts +3 -0
  341. package/dist/validation/goals/parallel.d.ts +4 -0
  342. package/dist/validation/goals/parallel.d.ts.map +1 -0
  343. package/dist/validation/goals/perpendicular.d.cts +3 -0
  344. package/dist/validation/goals/perpendicular.d.ts +4 -0
  345. package/dist/validation/goals/perpendicular.d.ts.map +1 -0
  346. package/dist/validation/goals/previewGeometry.d.cts +9 -0
  347. package/dist/validation/goals/previewGeometry.d.ts +10 -0
  348. package/dist/validation/goals/previewGeometry.d.ts.map +1 -0
  349. package/dist/validation/goals/segmentLength.d.cts +3 -0
  350. package/dist/validation/goals/segmentLength.d.ts +4 -0
  351. package/dist/validation/goals/segmentLength.d.ts.map +1 -0
  352. package/dist/validation/goals/throughPoints.d.cts +5 -0
  353. package/dist/validation/goals/throughPoints.d.ts +6 -0
  354. package/dist/validation/goals/throughPoints.d.ts.map +1 -0
  355. package/dist/validation/gradingFingerprints.d.cts +4 -0
  356. package/dist/validation/gradingFingerprints.d.ts +5 -0
  357. package/dist/validation/gradingFingerprints.d.ts.map +1 -0
  358. package/dist/validation/revealGeometryAnswers.d.cts +3 -0
  359. package/dist/validation/revealGeometryAnswers.d.ts +4 -0
  360. package/dist/validation/revealGeometryAnswers.d.ts.map +1 -0
  361. package/dist/validation/revealGeometryAttempt.d.cts +36 -0
  362. package/dist/validation/revealGeometryAttempt.d.ts +37 -0
  363. package/dist/validation/revealGeometryAttempt.d.ts.map +1 -0
  364. package/dist/validation/types.d.cts +58 -0
  365. package/dist/validation/types.d.ts +59 -0
  366. package/dist/validation/types.d.ts.map +1 -0
  367. package/dist/validation/validateGeometryExercise.d.cts +30 -0
  368. package/dist/validation/validateGeometryExercise.d.ts +31 -0
  369. package/dist/validation/validateGeometryExercise.d.ts.map +1 -0
  370. package/dist/validation/validateGeometryState.d.cts +16 -0
  371. package/dist/validation/validateGeometryState.d.ts +17 -0
  372. package/dist/validation/validateGeometryState.d.ts.map +1 -0
  373. package/dist/validation/validateGeometryStateInput.d.cts +22 -0
  374. package/dist/validation/validateGeometryStateInput.d.ts +23 -0
  375. package/dist/validation/validateGeometryStateInput.d.ts.map +1 -0
  376. package/dist/validation.cjs +2 -0
  377. package/dist/validation.cjs.map +1 -0
  378. package/dist/validation.mjs +269 -0
  379. package/dist/validation.mjs.map +1 -0
  380. package/package.json +150 -0
@@ -0,0 +1,955 @@
1
+ import e from "jsxgraph";
2
+ import { z as t } from "zod";
3
+ //#region src/geometry/point.ts
4
+ function n(e, t) {
5
+ return Math.hypot(t.x - e.x, t.y - e.y);
6
+ }
7
+ function r(e, t) {
8
+ return {
9
+ x: (e.x + t.x) / 2,
10
+ y: (e.y + t.y) / 2
11
+ };
12
+ }
13
+ //#endregion
14
+ //#region src/numerics/policy.ts
15
+ var i = 1e-9, a = 1e-9, o = 1e-12, s = 1e-12, c = 1e-6, l = 1e-9, ee = 24, te = 32;
16
+ function ne(e, t, n = i) {
17
+ return Math.abs(e - t) <= n;
18
+ }
19
+ function u(e, t) {
20
+ return Math.abs(e) <= Math.abs(t) * s;
21
+ }
22
+ function re(e, t, r = a) {
23
+ return n(e, t) <= r;
24
+ }
25
+ function ie(e, t) {
26
+ return n(e, t) <= c;
27
+ }
28
+ function ae(e) {
29
+ return e >= -1e-12 && e <= 1.000000000001;
30
+ }
31
+ function oe(e, t, n) {
32
+ return Math.abs(e - t) <= n + l;
33
+ }
34
+ function se(e, t) {
35
+ return e <= t + l;
36
+ }
37
+ function ce(e, t) {
38
+ return e / t;
39
+ }
40
+ //#endregion
41
+ //#region src/geometry/distance.ts
42
+ function d(e, t, r) {
43
+ let i = r.x - t.x, a = r.y - t.y, o = Math.hypot(i, a);
44
+ if (o === 0 || u(o, n(e, t))) return null;
45
+ let s = i / o, c = a / o;
46
+ return ((e.x - t.x) * s + (e.y - t.y) * c) / o;
47
+ }
48
+ function f(e, t, n) {
49
+ return {
50
+ x: e.x + (t.x - e.x) * n,
51
+ y: e.y + (t.y - e.y) * n
52
+ };
53
+ }
54
+ function p(e, t, n) {
55
+ let r = d(e, t, n);
56
+ return r === null ? t : f(t, n, r);
57
+ }
58
+ function m(e, t, n) {
59
+ let r = d(e, t, n);
60
+ return r === null ? t : f(t, n, Math.min(1, Math.max(0, r)));
61
+ }
62
+ function h(e, t, r) {
63
+ return n(e, p(e, t, r));
64
+ }
65
+ function g(e, t, r) {
66
+ return n(e, m(e, t, r));
67
+ }
68
+ function _(e, t, r) {
69
+ return Math.abs(n(e, t) - r);
70
+ }
71
+ function v(e, t, n) {
72
+ let r = e.x - t.x, i = e.y - t.y, a = Math.hypot(r, i);
73
+ return a === 0 || u(a, n) ? null : {
74
+ x: t.x + r / a * n,
75
+ y: t.y + i / a * n
76
+ };
77
+ }
78
+ //#endregion
79
+ //#region src/geometry/entities/circle.ts
80
+ var le = {
81
+ kind: "circle",
82
+ parents: (e) => e.parents,
83
+ resolve: (e, [t, r]) => {
84
+ if (t?.kind !== "point" || r?.kind !== "point") return null;
85
+ let i = n(t.at, r.at);
86
+ return i === 0 ? null : {
87
+ kind: "circle",
88
+ center: t.at,
89
+ radius: i
90
+ };
91
+ },
92
+ toShape: (e) => ({
93
+ shape: "circle",
94
+ center: e.center,
95
+ radius: e.radius
96
+ }),
97
+ toMeasured: (e) => ({
98
+ type: "circle",
99
+ center: e.center,
100
+ radius: e.radius
101
+ }),
102
+ distanceTo: (e, t) => _(t, e.center, e.radius),
103
+ describe: (e, t) => `circle centred on ${t(e.parents[0])} through ${t(e.parents[1])}`,
104
+ hitPriority: 1,
105
+ identityKey: (e) => `circle:${e.parents.join(":")}`
106
+ }, ue = {
107
+ kind: "line",
108
+ parents: (e) => e.parents,
109
+ resolve: (e, [t, n]) => t?.kind !== "point" || n?.kind !== "point" ? null : {
110
+ kind: "line",
111
+ through: [t.at, n.at]
112
+ },
113
+ toShape: (e) => ({
114
+ shape: "line",
115
+ through: e.through
116
+ }),
117
+ toMeasured: (e) => ({
118
+ type: "line",
119
+ from: e.through[0],
120
+ to: e.through[1]
121
+ }),
122
+ distanceTo: (e, t) => h(t, e.through[0], e.through[1]),
123
+ describe: (e, t) => `line through ${t(e.parents[0])} and ${t(e.parents[1])}`,
124
+ hitPriority: 2,
125
+ identityKey: (e) => `line:${[...e.parents].sort().join(":")}`
126
+ }, de = Object.freeze({
127
+ origin: Object.freeze({ scrCoords: Object.freeze([
128
+ 1,
129
+ 0,
130
+ 0
131
+ ]) }),
132
+ unitX: 1,
133
+ unitY: 1
134
+ }), fe = e.default ?? e, y = fe.Math.Geometry, b = fe.Math;
135
+ function x(e) {
136
+ return [
137
+ 1,
138
+ e.x,
139
+ e.y
140
+ ];
141
+ }
142
+ function pe(e, t) {
143
+ let [n, r, i] = b.crossProduct(x(e), x(t));
144
+ return b.normalize([
145
+ n ?? 0,
146
+ r ?? 0,
147
+ i ?? 0,
148
+ 0,
149
+ 1,
150
+ 0,
151
+ 0,
152
+ 0
153
+ ]);
154
+ }
155
+ function S(e) {
156
+ return b.normalize([
157
+ 0,
158
+ -e.center.x,
159
+ -e.center.y,
160
+ .5,
161
+ e.radius,
162
+ 0,
163
+ 0,
164
+ 0
165
+ ]);
166
+ }
167
+ function C(e) {
168
+ let [t, n, r] = e.usrCoords;
169
+ return {
170
+ w: t ?? NaN,
171
+ x: n ?? NaN,
172
+ y: r ?? NaN
173
+ };
174
+ }
175
+ function me(e, t, n, r) {
176
+ let [i, a, o] = y.meetSegmentSegment(x(e), x(t), x(n), x(r));
177
+ return {
178
+ point: C({ usrCoords: i }),
179
+ t: a,
180
+ u: o
181
+ };
182
+ }
183
+ function he(e, t, n) {
184
+ return C(y.meetLineCircle(pe(e.from, e.to), S(t), n, de));
185
+ }
186
+ function w(e, t, n) {
187
+ return C(y.meetCircleCircle(S(e), S(t), n, de));
188
+ }
189
+ //#endregion
190
+ //#region src/measure/geometryAdapter.ts
191
+ function T(e, t) {
192
+ return re(e, t);
193
+ }
194
+ function E(e, t) {
195
+ return n(e, t) === 0 ? NaN : Math.atan2(t.y - e.y, t.x - e.x);
196
+ }
197
+ function ge(e, t, n, r) {
198
+ let i = ((E(e, t) - E(n, r)) * 180 / Math.PI % 180 + 180) % 180;
199
+ return Math.min(i, 180 - i);
200
+ }
201
+ function D(e, t) {
202
+ return e.type === "line" || ae(t);
203
+ }
204
+ function _e(e) {
205
+ return e.type === "segment" ? {
206
+ type: "line",
207
+ from: e.from,
208
+ to: e.to
209
+ } : e;
210
+ }
211
+ function O(e) {
212
+ let { w: t, x: n, y: r } = e;
213
+ return !Number.isFinite(t) || !Number.isFinite(n) || !Number.isFinite(r) || u(t, 1) ? null : {
214
+ x: k(n / t),
215
+ y: k(r / t)
216
+ };
217
+ }
218
+ function k(e) {
219
+ return e === 0 ? 0 : e;
220
+ }
221
+ function A(e) {
222
+ let t = [];
223
+ for (let n of e) n && (t.some((e) => T(e, n)) || t.push(n));
224
+ return t.sort((e, t) => e.x - t.x || e.y - t.y);
225
+ }
226
+ function j(e, t) {
227
+ let n = {
228
+ from: e.from,
229
+ to: e.to
230
+ }, r = {
231
+ center: t.center,
232
+ radius: t.radius
233
+ }, i = A([O(he(n, r, 0)), O(he(n, r, 1))]);
234
+ return e.type === "line" ? i : i.filter((t) => {
235
+ let n = d(t, e.from, e.to);
236
+ return n !== null && D(e, n);
237
+ });
238
+ }
239
+ function ve(e, t) {
240
+ return T(e.center, t.center) ? [] : A([O(w(e, t, 0)), O(w(e, t, 1))]);
241
+ }
242
+ function ye(e, t) {
243
+ let { point: n, t: r, u: i } = me(e.from, e.to, t.from, t.to);
244
+ if (!Number.isFinite(r) || !Number.isFinite(i)) return [];
245
+ let a = O(n);
246
+ return !a || !D(e, r) || !D(t, i) ? [] : [a];
247
+ }
248
+ function M(e, t) {
249
+ return e.type === "circle" ? t.type === "circle" ? ve(e, t) : j(t, e) : t.type === "circle" ? j(e, t) : ye(e, t);
250
+ }
251
+ //#endregion
252
+ //#region src/geometry/entities/relations.ts
253
+ var N = (e) => ({
254
+ type: "segment",
255
+ from: e.from,
256
+ to: e.to
257
+ }), P = (e) => ({
258
+ type: "line",
259
+ from: e.through[0],
260
+ to: e.through[1]
261
+ }), F = (e) => ({
262
+ type: "circle",
263
+ center: e.center,
264
+ radius: e.radius
265
+ });
266
+ function I(e, t, n) {
267
+ return M(e, t)[n] ?? null;
268
+ }
269
+ var L = () => null, be = {
270
+ "point:point": L,
271
+ "point:segment": L,
272
+ "point:line": L,
273
+ "segment:point": L,
274
+ "line:point": L,
275
+ "point:circle": L,
276
+ "circle:point": L,
277
+ "segment:segment": ([e, t], n) => I(N(e), N(t), n),
278
+ "segment:line": ([e, t], n) => I(N(e), P(t), n),
279
+ "line:segment": ([e, t], n) => I(P(e), N(t), n),
280
+ "line:line": ([e, t], n) => I(P(e), P(t), n),
281
+ "segment:circle": ([e, t], n) => I(N(e), F(t), n),
282
+ "circle:segment": ([e, t], n) => I(F(e), N(t), n),
283
+ "line:circle": ([e, t], n) => I(P(e), F(t), n),
284
+ "circle:line": ([e, t], n) => I(F(e), P(t), n),
285
+ "circle:circle": ([e, t], n) => I(F(e), F(t), n)
286
+ };
287
+ function xe(e, t, n = 0) {
288
+ let r = be[`${e.kind}:${t.kind}`];
289
+ return r([e, t], n);
290
+ }
291
+ var Se = {
292
+ point: () => null,
293
+ segment: (e, t) => f(e.from, e.to, t),
294
+ line: (e, t) => f(e.through[0], e.through[1], t),
295
+ circle: (e, t) => ({
296
+ x: e.center.x + e.radius * Math.cos(2 * Math.PI * t),
297
+ y: e.center.y + e.radius * Math.sin(2 * Math.PI * t)
298
+ })
299
+ };
300
+ function R(e, t) {
301
+ let n = Se[e.kind];
302
+ return n(e, t);
303
+ }
304
+ var Ce = {
305
+ point: () => null,
306
+ segment: (e, t) => {
307
+ let n = d(t, e.from, e.to);
308
+ return n === null ? null : Math.min(1, Math.max(0, n));
309
+ },
310
+ line: (e, t) => d(t, e.through[0], e.through[1]),
311
+ circle: (e, t) => {
312
+ let n = v(t, e.center, e.radius);
313
+ if (!n) return null;
314
+ let r = Math.atan2(n.y - e.center.y, n.x - e.center.x) / (2 * Math.PI);
315
+ return r < 0 ? r + 1 : r;
316
+ }
317
+ };
318
+ function we(e, t) {
319
+ let n = Ce[e.kind];
320
+ return n(e, t);
321
+ }
322
+ //#endregion
323
+ //#region src/geometry/entities/point.ts
324
+ var Te = Object.freeze([]);
325
+ function z(e) {
326
+ return String(Number(e.toFixed(2)));
327
+ }
328
+ //#endregion
329
+ //#region src/geometry/entities/index.ts
330
+ var B = Object.freeze({
331
+ point: {
332
+ kind: "point",
333
+ parents: (e) => "at" in e ? Te : "on" in e ? [e.on] : e.intersectionOf,
334
+ resolve: (e, t) => {
335
+ if ("at" in e) return {
336
+ kind: "point",
337
+ at: e.at
338
+ };
339
+ if ("on" in e) {
340
+ let n = t[0];
341
+ if (!n) return null;
342
+ let r = R(n, e.t);
343
+ return r ? {
344
+ kind: "point",
345
+ at: r
346
+ } : null;
347
+ }
348
+ let [n, r] = t;
349
+ if (!n || !r) return null;
350
+ let i = xe(n, r, e.which ?? 0);
351
+ return i ? {
352
+ kind: "point",
353
+ at: i
354
+ } : null;
355
+ },
356
+ toShape: (e) => ({
357
+ shape: "point",
358
+ at: e.at
359
+ }),
360
+ toMeasured: () => null,
361
+ distanceTo: (e, t) => n(t, e.at),
362
+ describe: (e, t) => {
363
+ if ("at" in e) return `point at (${z(e.at.x)}, ${z(e.at.y)})`;
364
+ if ("on" in e) return `point on ${t(e.on)}`;
365
+ let [n, r] = e.intersectionOf;
366
+ return `point where ${t(n)} and ${t(r)} meet`;
367
+ },
368
+ hitPriority: 0,
369
+ identityKey: (e) => "at" in e ? `point:at:${e.at.x}:${e.at.y}` : "on" in e ? `point:on:${e.on}:${e.t}` : `point:meet:${e.intersectionOf.join(":")}:${e.which ?? 0}`
370
+ },
371
+ segment: {
372
+ kind: "segment",
373
+ parents: (e) => e.parents,
374
+ resolve: (e, [t, n]) => t?.kind !== "point" || n?.kind !== "point" ? null : {
375
+ kind: "segment",
376
+ from: t.at,
377
+ to: n.at
378
+ },
379
+ toShape: (e) => ({
380
+ shape: "segment",
381
+ from: e.from,
382
+ to: e.to
383
+ }),
384
+ toMeasured: (e) => ({
385
+ type: "segment",
386
+ from: e.from,
387
+ to: e.to
388
+ }),
389
+ distanceTo: (e, t) => g(t, e.from, e.to),
390
+ describe: (e, t) => `segment from ${t(e.parents[0])} to ${t(e.parents[1])}`,
391
+ hitPriority: 1,
392
+ identityKey: (e) => `segment:${[...e.parents].sort().join(":")}`
393
+ },
394
+ line: ue,
395
+ circle: le
396
+ }), Ee = Object.freeze(Object.keys(B)), De = Object.freeze(Ee.filter((e) => e !== "point"));
397
+ function V(e) {
398
+ return B[e];
399
+ }
400
+ function H(e) {
401
+ return V(e.kind).parents(e);
402
+ }
403
+ function Oe(e, t) {
404
+ return V(e.kind).resolve(e, t);
405
+ }
406
+ function ke(e, t) {
407
+ let n = [];
408
+ for (let r of H(e)) {
409
+ let e = t.get(r);
410
+ if (!e) return null;
411
+ n.push({
412
+ kind: "point",
413
+ at: e
414
+ });
415
+ }
416
+ return Oe(e, n);
417
+ }
418
+ function Ae(e) {
419
+ return V(e.kind).toShape(e);
420
+ }
421
+ function je(e) {
422
+ return V(e.kind).toMeasured(e);
423
+ }
424
+ function Me(e, t) {
425
+ return V(e.kind).distanceTo(e, t);
426
+ }
427
+ function Ne(e) {
428
+ return V(e).hitPriority;
429
+ }
430
+ function Pe(e) {
431
+ return V(e.kind).identityKey(e);
432
+ }
433
+ function Fe(e, t) {
434
+ return V(e.kind).describe(e, t);
435
+ }
436
+ //#endregion
437
+ //#region src/geometry/entityRecord.ts
438
+ var U = "__proto__";
439
+ function Ie(e) {
440
+ return e === U;
441
+ }
442
+ function Le(e) {
443
+ return `${e} cannot be used as an entity id`;
444
+ }
445
+ function W(e, t) {
446
+ return Object.prototype.hasOwnProperty.call(e, t) ? e[t] : void 0;
447
+ }
448
+ function G() {
449
+ return Object.create(null);
450
+ }
451
+ //#endregion
452
+ //#region src/schemas/identifier.schema.ts
453
+ var K = t.string().min(1).refine((e) => e === e.trim(), { message: "id must not have leading or trailing spaces" });
454
+ //#endregion
455
+ //#region src/schemas/entityDocument.ts
456
+ function q(e) {
457
+ return t.preprocess((e, n) => typeof e == "object" && e && Object.prototype.hasOwnProperty.call(e, "__proto__") ? (n.addIssue({
458
+ code: "custom",
459
+ path: [U],
460
+ message: Le(U)
461
+ }), t.NEVER) : e, t.record(K, e));
462
+ }
463
+ function Re(e, t, n, r) {
464
+ return t.kind === "point" ? r.kind === "point" ? "on" in t ? `${e} is on ${n}, which is a point` : `${e} intersects ${n}, which is a point` : null : r.kind === "point" ? null : `${e} references ${n}, which is a ${r.kind} and not a point`;
465
+ }
466
+ function ze(e, t) {
467
+ let n = [], r = Object.entries(e.entities), i = (t) => Object.prototype.hasOwnProperty.call(e.entities, t), a = /* @__PURE__ */ new Map();
468
+ for (let [i, o] of r) {
469
+ let r = H(o), s = ["entities", i];
470
+ r.includes(i) && n.push({
471
+ path: s,
472
+ message: `${i} is its own parent`
473
+ }), new Set(r).size !== r.length && n.push({
474
+ path: s,
475
+ message: `${i} must reference two distinct entities`
476
+ });
477
+ for (let a of r) {
478
+ let r = W(e.entities, a);
479
+ if (!r) {
480
+ t.parentsMustBeDeclared && n.push({
481
+ path: s,
482
+ message: `${i} references missing entity ${a}`
483
+ });
484
+ continue;
485
+ }
486
+ let c = Re(i, o, a, r);
487
+ c && n.push({
488
+ path: s,
489
+ message: c
490
+ }), "on" in o && r.kind === "segment" && (o.t < 0 || o.t > 1) && n.push({
491
+ path: [...s, "t"],
492
+ message: `${i} must have t within [0, 1] on segment ${a}`
493
+ });
494
+ }
495
+ if (o.kind === "point") continue;
496
+ let c = Pe(o), l = a.get(c);
497
+ l === void 0 ? a.set(c, i) : n.push({
498
+ path: s,
499
+ message: `${i} duplicates the geometry of ${l}`
500
+ });
501
+ }
502
+ for (let t of Object.keys(e.presentation)) i(t) || n.push({
503
+ path: ["presentation", t],
504
+ message: `presentation entry for unknown entity ${t}`
505
+ });
506
+ return n;
507
+ }
508
+ function Be(e, t) {
509
+ let n = [];
510
+ for (let [r, i] of Object.entries(e.entities)) {
511
+ let a = ["entities", r], o = W(t, r) !== void 0;
512
+ for (let s of H(i)) {
513
+ if (Object.prototype.hasOwnProperty.call(e.entities, s)) {
514
+ o && !W(t, s) && n.push({
515
+ path: a,
516
+ message: `${r} is declared by the exercise and cannot be defined on ${s}, which it does not declare`
517
+ });
518
+ continue;
519
+ }
520
+ let c = W(t, s);
521
+ if (!c) {
522
+ n.push({
523
+ path: a,
524
+ message: `${r} references missing entity ${s}`
525
+ });
526
+ continue;
527
+ }
528
+ let l = Re(r, i, s, c);
529
+ l && n.push({
530
+ path: a,
531
+ message: l
532
+ }), "on" in i && c.kind === "segment" && (i.t < 0 || i.t > 1) && n.push({
533
+ path: [...a, "t"],
534
+ message: `${r} must have t within [0, 1] on segment ${s}`
535
+ });
536
+ }
537
+ }
538
+ return n;
539
+ }
540
+ function Ve(e, t) {
541
+ return e.kind !== "point" || t.kind !== "point";
542
+ }
543
+ function He(e, t) {
544
+ let n = [];
545
+ for (let [r, i] of Object.entries(e.entities)) {
546
+ let e = W(t, r);
547
+ !e || !Ve(e, i) || n.push({
548
+ path: ["entities", r],
549
+ message: `${r} is already declared by the exercise as a ${e.kind}`
550
+ });
551
+ }
552
+ return n;
553
+ }
554
+ function Ue(e, t, n, r = {}) {
555
+ let i = [], a = /* @__PURE__ */ new Set();
556
+ return e.forEach((e, o) => {
557
+ let s = [t, o], c = W(n.entities, e);
558
+ c ? r.pointsOnly && c.kind !== "point" && i.push({
559
+ path: s,
560
+ message: `${t} names ${e}, which is a ${c.kind}`
561
+ }) : i.push({
562
+ path: s,
563
+ message: `${t} names unknown entity ${e}`
564
+ }), a.has(e) && i.push({
565
+ path: s,
566
+ message: `duplicate ${t} entry: ${e}`
567
+ }), a.add(e);
568
+ }), i;
569
+ }
570
+ //#endregion
571
+ //#region src/schemas/objectTypeName.schema.ts
572
+ var J = t.enum([
573
+ "point",
574
+ "segment",
575
+ "line",
576
+ "circle"
577
+ ]), We = t.object({
578
+ id: K,
579
+ type: t.literal("create"),
580
+ objectType: J
581
+ }).strict(), Ge = t.object({
582
+ id: K,
583
+ type: t.literal("midpoint"),
584
+ objectType: t.literal("point"),
585
+ referenceObjectId: K,
586
+ toleranceUnits: t.number().positive().finite()
587
+ }).strict(), Ke = t.object({
588
+ id: K,
589
+ type: t.literal("parallel"),
590
+ objectType: J,
591
+ referenceObjectId: K,
592
+ throughPointId: K,
593
+ toleranceDegrees: t.number().positive().max(90)
594
+ }).strict(), qe = t.object({
595
+ id: K,
596
+ type: t.literal("perpendicular"),
597
+ objectType: J,
598
+ referenceObjectId: K,
599
+ throughPointId: K,
600
+ toleranceDegrees: t.number().positive().max(90)
601
+ }).strict(), Je = t.object({
602
+ id: K,
603
+ type: t.literal("segmentLength"),
604
+ objectType: t.literal("segment"),
605
+ targetLength: t.number().positive().finite(),
606
+ toleranceUnits: t.number().positive().finite()
607
+ }).strict(), Ye = t.object({
608
+ id: K,
609
+ type: t.literal("throughPoints"),
610
+ objectType: J,
611
+ pointIds: t.array(K).min(1)
612
+ }).strict();
613
+ //#endregion
614
+ //#region src/schemas/goals/goalKindDeclaration.ts
615
+ function Y(e) {
616
+ return e === "segment" || e === "line";
617
+ }
618
+ var Xe = () => [], Ze = () => [];
619
+ function Qe(e, t, n) {
620
+ let r = [];
621
+ Y(e.objectType) || r.push({
622
+ path: ["objectType"],
623
+ message: `${e.type} requires segment or line`
624
+ });
625
+ let i = t.definitionOf(e.referenceObjectId);
626
+ return i ? Y(i.kind) || r.push({
627
+ path: ["referenceObjectId"],
628
+ message: `${e.type} requires a segment or line reference, got ${i.kind} ${e.referenceObjectId}`
629
+ }) : r.push({
630
+ path: ["referenceObjectId"],
631
+ message: `unknown reference object ${e.referenceObjectId}`
632
+ }), t.definitionOf(e.throughPointId)?.kind !== "point" && r.push({
633
+ path: ["throughPointId"],
634
+ message: `unknown point ${e.throughPointId}`
635
+ }), n(i) && r.push({
636
+ path: ["throughPointId"],
637
+ message: `parallel through ${e.throughPointId} is degenerate: it defines ${e.referenceObjectId}`
638
+ }), r;
639
+ }
640
+ var $e = Object.freeze({
641
+ create: {
642
+ kind: "create",
643
+ schema: We,
644
+ referencedGivenIds: Xe,
645
+ crossReferenceIssues: Ze
646
+ },
647
+ throughPoints: {
648
+ kind: "throughPoints",
649
+ schema: Ye,
650
+ referencedGivenIds: (e) => e.pointIds,
651
+ crossReferenceIssues(e, t) {
652
+ let n = [];
653
+ Y(e.objectType) || n.push({
654
+ path: ["objectType"],
655
+ message: "throughPoints requires segment or line"
656
+ }), (e.pointIds.length !== 2 || new Set(e.pointIds).size !== 2) && n.push({
657
+ path: ["pointIds"],
658
+ message: "throughPoints requires two distinct points"
659
+ });
660
+ for (let r of e.pointIds) t.definitionOf(r)?.kind !== "point" && n.push({
661
+ path: ["pointIds"],
662
+ message: `unknown point ${r}`
663
+ });
664
+ return n;
665
+ }
666
+ },
667
+ perpendicular: {
668
+ kind: "perpendicular",
669
+ schema: qe,
670
+ referencedGivenIds: (e) => [e.throughPointId, e.referenceObjectId],
671
+ crossReferenceIssues: (e, t) => Qe(e, t, () => !1)
672
+ },
673
+ parallel: {
674
+ kind: "parallel",
675
+ schema: Ke,
676
+ referencedGivenIds: (e) => [e.throughPointId, e.referenceObjectId],
677
+ crossReferenceIssues: (e, t) => Qe(e, t, (t) => t !== void 0 && Y(t.kind) && H(t).includes(e.throughPointId))
678
+ },
679
+ segmentLength: {
680
+ kind: "segmentLength",
681
+ schema: Je,
682
+ referencedGivenIds: Xe,
683
+ crossReferenceIssues: Ze
684
+ },
685
+ midpoint: {
686
+ kind: "midpoint",
687
+ schema: Ge,
688
+ referencedGivenIds: (e) => [e.referenceObjectId],
689
+ crossReferenceIssues(e, t) {
690
+ let n = t.definitionOf(e.referenceObjectId);
691
+ return !n || n.kind !== "segment" ? [{
692
+ path: ["referenceObjectId"],
693
+ message: `midpoint requires a given segment, got ${e.referenceObjectId}`
694
+ }] : [];
695
+ }
696
+ }
697
+ });
698
+ function et(e) {
699
+ return $e[e.type];
700
+ }
701
+ //#endregion
702
+ //#region src/schemas/exerciseProjection.ts
703
+ function tt(e) {
704
+ if (!("solution" in e)) return e;
705
+ let t = { ...e };
706
+ return delete t.solution, t;
707
+ }
708
+ //#endregion
709
+ //#region src/schemas/point.schema.ts
710
+ var nt = t.object({
711
+ x: t.number().finite(),
712
+ y: t.number().finite()
713
+ }).strict();
714
+ t.object({
715
+ id: K,
716
+ type: t.literal("point"),
717
+ x: t.number().finite(),
718
+ y: t.number().finite(),
719
+ label: t.string().min(1).optional(),
720
+ draggable: t.boolean().optional()
721
+ }).strict();
722
+ //#endregion
723
+ //#region src/schemas/entityDefinition.schema.ts
724
+ var rt = t.object({
725
+ kind: t.literal("point"),
726
+ at: nt
727
+ }).strict(), it = t.object({
728
+ kind: t.literal("point"),
729
+ on: K,
730
+ t: t.number().finite()
731
+ }).strict(), at = t.object({
732
+ kind: t.literal("point"),
733
+ intersectionOf: t.tuple([K, K]).readonly(),
734
+ which: t.union([t.literal(0), t.literal(1)]).optional()
735
+ }).strict(), ot = t.union([
736
+ rt,
737
+ it,
738
+ at
739
+ ]), X = t.tuple([K, K]).readonly(), st = t.object({
740
+ kind: t.literal("segment"),
741
+ parents: X
742
+ }).strict(), ct = t.object({
743
+ kind: t.literal("line"),
744
+ parents: X
745
+ }).strict(), lt = t.object({
746
+ kind: t.literal("circle"),
747
+ parents: X
748
+ }).strict(), ut = t.union([
749
+ ot,
750
+ st,
751
+ ct,
752
+ lt
753
+ ]), dt = t.enum(["implicit", "explicit"]), ft = t.object({
754
+ role: dt,
755
+ label: t.string().min(1).optional()
756
+ }).strict();
757
+ //#endregion
758
+ //#region src/schemas/migrate.ts
759
+ function pt(e) {
760
+ let t = e.schemaVersion;
761
+ return typeof t == "number" && Number.isInteger(t) ? t : null;
762
+ }
763
+ function Z(e, t, n) {
764
+ if (typeof e != "object" || !e || Array.isArray(e)) return {
765
+ success: !1,
766
+ message: "expected an object"
767
+ };
768
+ let r = { ...e }, i = pt(r);
769
+ if (i === null) return {
770
+ success: !1,
771
+ message: "missing or invalid schemaVersion"
772
+ };
773
+ if (i > n) return {
774
+ success: !1,
775
+ message: `schemaVersion ${i} is newer than the supported version ${n}`
776
+ };
777
+ let a = i;
778
+ for (; a < n;) {
779
+ let e = t.find((e) => e.from === a);
780
+ if (!e) return {
781
+ success: !1,
782
+ message: `no migration from schemaVersion ${a} to ${n}`
783
+ };
784
+ if (e.to <= a) return {
785
+ success: !1,
786
+ message: `migration from ${a} does not advance the version`
787
+ };
788
+ try {
789
+ r = {
790
+ ...e.migrate(r),
791
+ schemaVersion: e.to
792
+ };
793
+ } catch (t) {
794
+ return {
795
+ success: !1,
796
+ message: `migration from ${a} to ${e.to} failed: ${t instanceof Error ? t.message : String(t)}`
797
+ };
798
+ }
799
+ a = e.to;
800
+ }
801
+ return {
802
+ success: !0,
803
+ data: r
804
+ };
805
+ }
806
+ //#endregion
807
+ //#region src/geometry/pointOrigin.ts
808
+ function mt(e) {
809
+ return "x" in e;
810
+ }
811
+ function ht(e) {
812
+ return "onObject" in e;
813
+ }
814
+ //#endregion
815
+ //#region src/geometry/v1Bridge.ts
816
+ var gt = {
817
+ segment: (e) => ({
818
+ kind: "segment",
819
+ parents: [e.from, e.to]
820
+ }),
821
+ line: (e) => ({
822
+ kind: "line",
823
+ parents: e.through
824
+ }),
825
+ circle: (e) => ({
826
+ kind: "circle",
827
+ parents: [e.center, e.through]
828
+ })
829
+ };
830
+ function _t(e) {
831
+ let t = gt[e.type];
832
+ return t(e);
833
+ }
834
+ function vt(e) {
835
+ return mt(e) ? {
836
+ kind: "point",
837
+ at: e
838
+ } : ht(e) ? {
839
+ kind: "point",
840
+ on: e.onObject,
841
+ t: e.t
842
+ } : {
843
+ kind: "point",
844
+ intersectionOf: e.intersectionOf
845
+ };
846
+ }
847
+ function yt(e) {
848
+ return e.type === "point" ? {
849
+ kind: "point",
850
+ at: {
851
+ x: e.x,
852
+ y: e.y
853
+ }
854
+ } : _t(e);
855
+ }
856
+ function Q(e, t) {
857
+ if (typeof e != "object" || !e || Array.isArray(e)) throw Error(`${t} is not an object`);
858
+ return e;
859
+ }
860
+ function $(e, t) {
861
+ let n = e[t];
862
+ if (!Array.isArray(n)) throw Error(`${t} is not an array`);
863
+ return n;
864
+ }
865
+ function bt(e, t) {
866
+ let n = e.id;
867
+ if (typeof n != "string") throw Error(`${t}.id is not a string`);
868
+ return xt(n, `${t}.id`), n;
869
+ }
870
+ function xt(e, t) {
871
+ if (Ie(e)) throw Error(`${t}: ${Le(e)}`);
872
+ }
873
+ function St(e, t, n, r) {
874
+ if (e.has(t)) throw Error(`${n}.id duplicates ${r}`);
875
+ e.add(t);
876
+ }
877
+ var Ct = [
878
+ "segment",
879
+ "line",
880
+ "circle"
881
+ ];
882
+ function wt(e, t) {
883
+ let n = e.type;
884
+ if (typeof n != "string" || !Ct.includes(n)) throw Error(`${t} has unknown type ${JSON.stringify(n)}`);
885
+ return _t(e);
886
+ }
887
+ function Tt(e, t) {
888
+ let n = Q(t, `points.${e}`);
889
+ if (!("x" in n) && !("onObject" in n) && !("intersectionOf" in n)) throw Error(`points.${e} is not a free, on-object or intersection origin`);
890
+ return vt(n);
891
+ }
892
+ var Et = {
893
+ from: 1,
894
+ to: 2,
895
+ migrate: (e) => {
896
+ let t = Q(e.points, "points"), n = $(e, "constructions"), r = G(), i = G(), a = [...$(e, "constructedPointIds")], o = /* @__PURE__ */ new Map(), s = /* @__PURE__ */ new Set();
897
+ for (let [e, n] of Object.entries(t)) xt(e, `points.${e}`), r[e] = Tt(e, n), i[e] = { role: "explicit" }, s.add(e), o.set(e, `points.${e}`);
898
+ return n.forEach((e, t) => {
899
+ let n = `constructions[${t}]`, c = Q(e, n), l = bt(c, n);
900
+ St(s, l, n, o.get(l) ?? n), o.set(l, n), r[l] = wt(c, n), i[l] = { role: "explicit" }, a.push(l);
901
+ }), {
902
+ schemaVersion: 2,
903
+ entities: r,
904
+ presentation: i,
905
+ answerEntityIds: a
906
+ };
907
+ }
908
+ }, Dt = {
909
+ from: 1,
910
+ to: 2,
911
+ migrate: (e) => {
912
+ let t = $(e, "givens"), n = G(), r = G(), i = [], a = /* @__PURE__ */ new Set(), o = /* @__PURE__ */ new Map();
913
+ t.forEach((e, t) => {
914
+ let s = `givens[${t}]`, c = Q(e, s), l = bt(c, s);
915
+ if (St(a, l, s, o.get(l) ?? s), o.set(l, s), n[l] = c.type === "point" ? yt(c) : wt(c, s), c.label !== void 0 && (r[l] = {
916
+ role: "explicit",
917
+ label: c.label
918
+ }), c.draggable !== void 0) {
919
+ if (typeof c.draggable != "boolean") throw Error(`${s}.draggable is not a boolean`);
920
+ c.draggable && i.push(l);
921
+ }
922
+ });
923
+ let s = { ...e };
924
+ return delete s.givens, {
925
+ ...s,
926
+ schemaVersion: 2,
927
+ entities: n,
928
+ presentation: r,
929
+ draggableEntityIds: i
930
+ };
931
+ }
932
+ }, Ot = 2, kt = [Et], At = t.object({
933
+ schemaVersion: t.literal(2),
934
+ entities: q(ut),
935
+ presentation: q(ft),
936
+ answerEntityIds: t.array(K)
937
+ }).strict().superRefine((e, t) => {
938
+ for (let n of ze(e, { parentsMustBeDeclared: !1 })) t.addIssue({
939
+ code: "custom",
940
+ path: n.path,
941
+ message: n.message
942
+ });
943
+ for (let n of Ue(e.answerEntityIds, "answerEntityIds", e)) t.addIssue({
944
+ code: "custom",
945
+ path: n.path,
946
+ message: n.message
947
+ });
948
+ });
949
+ function jt(e) {
950
+ return Z(e, kt, 2);
951
+ }
952
+ //#endregion
953
+ export { i as $, Me as A, R as B, ze as C, K as D, Ve as E, H as F, v as G, ge as H, ke as I, _ as J, p as K, Oe as L, Pe as M, je as N, W as O, De as P, d as Q, Ae as R, Be as S, q as T, T as U, M as V, _e as W, g as X, h as Y, f as Z, Ke as _, Dt as a, c as at, J as b, ut as c, re as ct, et as d, ae as dt, te as et, $e as f, ce as ft, qe as g, r as gt, Je as h, n as ht, jt as i, ee as it, Ne as j, Fe as k, nt as l, u as lt, Ye as m, oe as mt, At as n, l as nt, Z as o, s as ot, Y as p, se as pt, m as q, Ot as r, o as rt, ft as s, ne as st, kt as t, a as tt, tt as u, ie as ut, Ge as v, Ue as w, He as x, We as y, we as z };
954
+
955
+ //# sourceMappingURL=geometryState.schema-D0ixyGYE.js.map