@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,1851 @@
1
+ import { I as e, O as t, R as n, k as r } from "./geometryState.schema-D0ixyGYE.js";
2
+ import { c as i, d as a, s as o } from "./goals-C3ZwbEh_.js";
3
+ import { $ as s, C as c, E as l, H as u, I as d, N as f, O as p, P as m, Q as h, V as g, a as _, at as v, b as y, c as b, ct as x, d as S, f as C, g as w, h as T, i as E, it as D, j as O, k, l as A, m as j, n as M, nt as ee, o as N, ot as P, p as te, r as ne, st as re, t as ie, u as ae, v as F, x as oe, y as se } from "./studentStore-CEKTtMCh.js";
4
+ import { c as ce, o as le, r as ue, s as de, t as fe, u as pe } from "./geometryAttemptStatus-5L_q6-9l.js";
5
+ import { useEffect as I, useLayoutEffect as L, useMemo as me, useRef as R, useState as z, useSyncExternalStore as he } from "react";
6
+ import { Arc as ge, Circle as B, Ellipse as _e, Group as V, Layer as ve, Line as H, Rect as U, Stage as ye, Text as W } from "react-konva";
7
+ import { Fragment as G, jsx as K, jsxs as q } from "react/jsx-runtime";
8
+ //#region src/geometry/entityCapabilities.ts
9
+ var be = {
10
+ implicit: {
11
+ rendered: !1,
12
+ selectable: !1,
13
+ snapTarget: !0
14
+ },
15
+ explicit: {
16
+ rendered: !0,
17
+ selectable: !0,
18
+ snapTarget: !0
19
+ }
20
+ };
21
+ function xe(e) {
22
+ return be[e];
23
+ }
24
+ //#endregion
25
+ //#region src/renderer/deriveRenderableGeometry.ts
26
+ function Se(e) {
27
+ let t = o(e.exercise), n = t.points, r = /* @__PURE__ */ new Map(), i = [];
28
+ for (let [t, a] of Object.entries(e.exercise.entities)) {
29
+ if (a.kind !== "point") {
30
+ i.push({
31
+ id: t,
32
+ definition: a
33
+ });
34
+ continue;
35
+ }
36
+ let e = n.get(t);
37
+ e && r.set(t, e);
38
+ }
39
+ return we(r, i, t);
40
+ }
41
+ function Ce(e, t) {
42
+ let n = a(e, t);
43
+ return we(n.points, [...i(e, t).values()], n);
44
+ }
45
+ function we(e, t, n) {
46
+ let r = (e) => xe(n.presentationOf(e).role);
47
+ return {
48
+ points: e,
49
+ objects: t,
50
+ capabilitiesOf: r,
51
+ labelOf: (e) => {
52
+ let t = n.presentationOf(e);
53
+ return t.role === "explicit" ? t.label : void 0;
54
+ },
55
+ isSnapTarget: (e) => r(e).snapTarget
56
+ };
57
+ }
58
+ //#endregion
59
+ //#region src/renderer/useConnectionPreview.ts
60
+ var Te = {
61
+ gestureFrom: null,
62
+ pointer: null,
63
+ snap: null
64
+ };
65
+ function Ee({ points: e, viewport: t, canvas: n, pendingObjectType: r, pendingFirstPointId: i, connect: a, pick: o, objects: c = [], isSnapTarget: l, canCreatePoints: u = !1, preserveCreatedPointOrigins: d = !0 }) {
66
+ let f = R(null), p = R(null), m = R(null), [g, _] = z(Te), y = r === "segment" || r === "line", b = v(t, n), S = re(32, b), C = {
67
+ points: e,
68
+ objects: c,
69
+ viewport: t,
70
+ isSnapTarget: l
71
+ }, w = g.snap?.kind === "point" ? g.snap.targetIds[0] ?? null : null;
72
+ function T() {
73
+ let e = f.current;
74
+ _(e ? {
75
+ gestureFrom: e.fromPoint,
76
+ pointer: e.pointer,
77
+ snap: m.current
78
+ } : {
79
+ gestureFrom: null,
80
+ pointer: p.current,
81
+ snap: m.current
82
+ });
83
+ }
84
+ function E(e) {
85
+ return x(e, t, n, b);
86
+ }
87
+ function O(t) {
88
+ return e.has(t) && (!l || l(t));
89
+ }
90
+ function k(e, t) {
91
+ return h(E(e), C, {
92
+ tolerance: S,
93
+ exclude: t?.kind === "existing" ? [t.id] : [],
94
+ kinds: u ? [
95
+ "point",
96
+ "intersection",
97
+ "onObject"
98
+ ] : ["point"]
99
+ });
100
+ }
101
+ let A = (() => {
102
+ let a = g.gestureFrom ?? (i ? e.get(i) ?? null : null), { pointer: o } = g;
103
+ if (!y || !a || !o) return null;
104
+ let s = g.snap ? P(g.snap.position, t, n) : o;
105
+ if (r !== "line") {
106
+ let e = P(a, t, n);
107
+ return [
108
+ e.x,
109
+ e.y,
110
+ s.x,
111
+ s.y
112
+ ];
113
+ }
114
+ let c = D(a, E(s), t);
115
+ if (!c) return null;
116
+ let l = P(c[0], t, n), u = P(c[1], t, n);
117
+ return [
118
+ l.x,
119
+ l.y,
120
+ u.x,
121
+ u.y
122
+ ];
123
+ })();
124
+ function j(t, n) {
125
+ if (f.current = null, p.current = null, m.current = null, !y) return;
126
+ if (i) {
127
+ let n = {
128
+ kind: "existing",
129
+ id: i
130
+ };
131
+ f.current = {
132
+ from: n,
133
+ fromPoint: e.get(i) ?? E(t),
134
+ completing: !0,
135
+ pointer: t
136
+ }, m.current = k(t, n), T();
137
+ return;
138
+ }
139
+ let r = n && O(n) ? n : null, a = E(t), o = null;
140
+ if (!r && (!u || (o = h(a, C, {
141
+ tolerance: S,
142
+ kinds: [
143
+ "point",
144
+ "intersection",
145
+ "onObject"
146
+ ]
147
+ }), o?.kind === "point" && (r = o.targetIds[0] ?? null, !r || !O(r))))) return;
148
+ if (r) {
149
+ f.current = {
150
+ from: {
151
+ kind: "existing",
152
+ id: r
153
+ },
154
+ fromPoint: e.get(r),
155
+ completing: !1,
156
+ pointer: null
157
+ };
158
+ return;
159
+ }
160
+ let c = o?.position ?? a, l = o && d ? s({
161
+ position: c,
162
+ snap: o
163
+ }) : null;
164
+ f.current = {
165
+ from: {
166
+ kind: "create",
167
+ origin: l ?? {
168
+ kind: "point",
169
+ at: c
170
+ }
171
+ },
172
+ fromPoint: c,
173
+ completing: !1,
174
+ pointer: null
175
+ };
176
+ }
177
+ function M(e) {
178
+ let t = f.current;
179
+ t && (m.current = k(e, t.from), f.current = {
180
+ ...t,
181
+ pointer: e
182
+ }, T());
183
+ }
184
+ function ee(e) {
185
+ if (!f.current) {
186
+ if (!y || !i || !e) {
187
+ if (!p.current && !m.current) return;
188
+ p.current = null, m.current = null, T();
189
+ return;
190
+ }
191
+ p.current = e, m.current = k(e, {
192
+ kind: "existing",
193
+ id: i
194
+ }), T();
195
+ }
196
+ }
197
+ function N(e, t, n) {
198
+ let r = e ? {
199
+ kind: "existing",
200
+ id: e
201
+ } : u ? {
202
+ kind: "create",
203
+ origin: {
204
+ kind: "point",
205
+ at: t
206
+ }
207
+ } : null;
208
+ if (!n) return r;
209
+ if (n.kind === "point") {
210
+ let e = n.targetIds[0];
211
+ return e ? {
212
+ kind: "existing",
213
+ id: e
214
+ } : r;
215
+ }
216
+ if (!u) return r;
217
+ if (!d) return {
218
+ kind: "create",
219
+ origin: {
220
+ kind: "point",
221
+ at: n.position
222
+ }
223
+ };
224
+ let i = s({
225
+ position: n.position,
226
+ snap: n
227
+ });
228
+ return i ? {
229
+ kind: "create",
230
+ origin: i
231
+ } : r;
232
+ }
233
+ function te(e, t, n) {
234
+ let r = f.current;
235
+ if (f.current = null, m.current = null, T(), !r || !y) return !1;
236
+ let i = t && O(t) ? t : null;
237
+ if (!n) {
238
+ let t = r.completing ? i ?? ne(e) : r.from.kind === "existing" ? r.from.id : null;
239
+ return t ? (o(t), !0) : !1;
240
+ }
241
+ let s = N(i, E(e), k(e, r.from));
242
+ return s && a(r.from, s), !0;
243
+ }
244
+ function ne(e) {
245
+ let t = h(E(e), C, {
246
+ tolerance: S,
247
+ kinds: ["point"]
248
+ }), n = t?.kind === "point" ? t.targetIds[0] : void 0;
249
+ return n && O(n) ? n : null;
250
+ }
251
+ function ie() {
252
+ !f.current && !p.current && !m.current || (f.current = null, p.current = null, m.current = null, T());
253
+ }
254
+ return {
255
+ connecting: y,
256
+ previewPoints: A,
257
+ snapTargetId: y ? w : null,
258
+ snapPreview: y && g.snap && g.snap.kind !== "point" ? g.snap : null,
259
+ press: j,
260
+ drag: M,
261
+ hover: ee,
262
+ release: te,
263
+ cancel: ie
264
+ };
265
+ }
266
+ //#endregion
267
+ //#region src/renderer/usePlacementSnap.ts
268
+ function De({ points: e, objects: t, viewport: n, canvas: r, showGrid: i, isSnapTarget: a, active: o }) {
269
+ let [s, c] = z(null), l = v(n, r), u = {
270
+ points: e,
271
+ objects: t,
272
+ viewport: n,
273
+ showGrid: i,
274
+ isSnapTarget: a
275
+ }, d = { tolerance: re(24, l) };
276
+ function f(e) {
277
+ if (!o) {
278
+ s && c(null);
279
+ return;
280
+ }
281
+ c(h(x(e, n, r, l), u, d));
282
+ }
283
+ function p(e) {
284
+ let t = e.target.getStage()?.getPointerPosition();
285
+ t ? f(t) : !o && s && c(null);
286
+ }
287
+ function m() {
288
+ s && c(null);
289
+ }
290
+ function g(e) {
291
+ let t = x(e, n, r, l);
292
+ if (!o) return {
293
+ position: t,
294
+ snap: null
295
+ };
296
+ let i = h(t, u, d);
297
+ return {
298
+ position: i?.position ?? t,
299
+ snap: i
300
+ };
301
+ }
302
+ return {
303
+ snap: o ? s : null,
304
+ trackAt: f,
305
+ trackPointer: p,
306
+ clearPointer: m,
307
+ resolvePlacement: g
308
+ };
309
+ }
310
+ //#endregion
311
+ //#region src/renderer/gesturePolicy.ts
312
+ function Oe(e, t, n) {
313
+ let r = n.width > 0 && t.width / n.width || 1, i = n.height > 0 && t.height / n.height || 1;
314
+ return {
315
+ x: (e.x - t.left) / r,
316
+ y: (e.y - t.top) / i
317
+ };
318
+ }
319
+ function ke(e) {
320
+ return e === "touch" ? 8 : 4;
321
+ }
322
+ function Ae(e, t, n) {
323
+ return {
324
+ pointerId: e,
325
+ pointerType: t,
326
+ origin: n,
327
+ maxDisplacement: 0,
328
+ dragging: !1
329
+ };
330
+ }
331
+ function je(e, t) {
332
+ let n = Math.hypot(t.x - e.origin.x, t.y - e.origin.y), r = Math.max(e.maxDisplacement, n);
333
+ return {
334
+ ...e,
335
+ maxDisplacement: r,
336
+ dragging: e.dragging || r >= ke(e.pointerType)
337
+ };
338
+ }
339
+ function Me(e) {
340
+ return e.isPrimary ? e.pointerType !== "mouse" || e.button === 0 : !1;
341
+ }
342
+ var Ne = {
343
+ touchAction: "none",
344
+ userSelect: "none",
345
+ WebkitUserSelect: "none"
346
+ };
347
+ function Pe(e, t) {
348
+ return e.x >= 0 && e.y >= 0 && e.x <= t.width && e.y <= t.height;
349
+ }
350
+ var Fe = "geometry-point-", Ie = "geometry-object-";
351
+ function Le(e) {
352
+ return `${Fe}${e}`;
353
+ }
354
+ function Re(e) {
355
+ return `${Ie}${e}`;
356
+ }
357
+ function ze(e) {
358
+ return e.startsWith(Fe) ? {
359
+ kind: "point",
360
+ id: e.slice(15)
361
+ } : e.startsWith(Ie) ? {
362
+ kind: "object",
363
+ id: e.slice(16)
364
+ } : null;
365
+ }
366
+ //#endregion
367
+ //#region src/renderer/usePointerGestures.ts
368
+ function Be(e, t, n, r) {
369
+ let i = R({
370
+ handlers: r,
371
+ canvas: t,
372
+ store: n
373
+ });
374
+ L(() => {
375
+ i.current = {
376
+ handlers: r,
377
+ canvas: t,
378
+ store: n
379
+ };
380
+ });
381
+ let a = R(null), o = R(() => {}), s = R(n);
382
+ I(() => {
383
+ let t = e.current;
384
+ if (!t) return;
385
+ let n = t.container();
386
+ function r(e) {
387
+ let n = t.content;
388
+ return Oe({
389
+ x: e.clientX,
390
+ y: e.clientY
391
+ }, n.getBoundingClientRect(), {
392
+ width: n.clientWidth,
393
+ height: n.clientHeight
394
+ });
395
+ }
396
+ function s(e) {
397
+ return {
398
+ x: e.clientX,
399
+ y: e.clientY
400
+ };
401
+ }
402
+ let c = /* @__PURE__ */ new Map();
403
+ function l(e) {
404
+ let n = t.getIntersection(e);
405
+ if (!n) return { kind: "stage" };
406
+ let r = ze(n.id());
407
+ return r?.kind === "point" && !i.current.handlers.pointOnScreen(r.id) ? { kind: "foreign" } : r ?? { kind: "foreign" };
408
+ }
409
+ function u(e) {
410
+ let t = l(e);
411
+ return t.kind === "point" ? t.id : null;
412
+ }
413
+ function d(e) {
414
+ if (a.current === e && (a.current = null), e.captured) try {
415
+ n.hasPointerCapture(e.pointerId) && n.releasePointerCapture(e.pointerId);
416
+ } catch {}
417
+ }
418
+ function f(e) {
419
+ let t = a.current;
420
+ t && d(t);
421
+ let { handlers: n } = i.current;
422
+ n.connection.cancel(), n.placement.clearPointer(), t ? (t.role === "point" && t.dragging && t.dragFrom && t.handlers.endPointDrag(t.target.id), t.handlers.abandonConstruction()) : e !== "store-replaced" && n.abandonConstruction(), e === "escape" && n.tool && n.disarmTool();
423
+ }
424
+ o.current = f;
425
+ function p(e) {
426
+ return i.current.store !== e.store || (e.store.getState().interactionEpoch ?? 0) !== e.epoch;
427
+ }
428
+ function m(e) {
429
+ let t = a.current;
430
+ return !t || t.pointerId !== e.pointerId ? null : p(t) ? (f("invalidated"), null) : t;
431
+ }
432
+ function h(e) {
433
+ if (a.current || !Me(e) || c.size > 1) return;
434
+ let t = r(e), o = l(t);
435
+ if (o.kind === "foreign") return;
436
+ let { handlers: u, store: d } = i.current, f = u.tool === "segment" || u.tool === "line" ? "connect" : o.kind, p = f === "point" && o.kind === "point" && u.canDragPoint(o.id) ? u.pointOnScreen(o.id) : null, m = !1;
437
+ try {
438
+ n.setPointerCapture(e.pointerId), m = !0;
439
+ } catch {}
440
+ a.current = {
441
+ ...Ae(e.pointerId, e.pointerType, s(e)),
442
+ store: d,
443
+ epoch: d.getState().interactionEpoch ?? 0,
444
+ handlers: u,
445
+ stageOrigin: t,
446
+ target: o,
447
+ role: f,
448
+ dragFrom: p,
449
+ captured: m
450
+ }, f === "connect" ? u.connection.press(t, o.kind === "point" ? o.id : null) : u.tool === "point" && f === "stage" && u.placement.trackAt(t);
451
+ }
452
+ function g(e) {
453
+ if (e.isPrimary) for (let [t, n] of c) n === e.pointerType && t !== e.pointerId && c.delete(t);
454
+ c.set(e.pointerId, e.pointerType);
455
+ let t = a.current;
456
+ t && t.pointerId !== e.pointerId && f("second-pointer");
457
+ }
458
+ function _(e) {
459
+ c.delete(e.pointerId);
460
+ }
461
+ function v(e) {
462
+ e.buttons === 0 && c.delete(e.pointerId);
463
+ let t = m(e);
464
+ if (!t) return;
465
+ let n = r(e), o = {
466
+ ...t,
467
+ ...je(t, s(e))
468
+ };
469
+ if (a.current = o, !o.dragging) return;
470
+ let { handlers: l } = i.current;
471
+ o.role === "connect" ? l.connection.drag(n) : o.role === "point" && o.dragFrom ? l.dragPoint(o.target.id, {
472
+ x: o.dragFrom.x + n.x - o.stageOrigin.x,
473
+ y: o.dragFrom.y + n.y - o.stageOrigin.y
474
+ }) : o.role === "stage" && !t.dragging && l.placement.clearPointer();
475
+ }
476
+ function y(e) {
477
+ let t = m(e);
478
+ if (!t) return;
479
+ let n = r(e);
480
+ if (!Pe(n, i.current.canvas)) {
481
+ f("outside-release");
482
+ return;
483
+ }
484
+ let { dragging: a } = je(t, s(e));
485
+ d(t);
486
+ let { handlers: o } = i.current, { target: c } = t;
487
+ switch (t.role) {
488
+ case "connect":
489
+ !o.connection.release(n, u(n), a) && !a && c.kind === "stage" && o.tapStage(n);
490
+ break;
491
+ case "point":
492
+ a ? t.dragFrom && o.endPointDrag(c.id) : o.tapPoint(c.id);
493
+ break;
494
+ case "object":
495
+ a || o.tapObject(c.id);
496
+ break;
497
+ case "stage": a || o.tapStage(n);
498
+ }
499
+ e.pointerType !== "mouse" && e.pointerType !== "pen" && o.placement.clearPointer();
500
+ }
501
+ function b(e) {
502
+ m(e) && f("pointercancel");
503
+ }
504
+ function x(e) {
505
+ let t = a.current;
506
+ t?.captured && t.pointerId === e.pointerId && f("lost-capture");
507
+ }
508
+ function S(e) {
509
+ if (a.current || e.pointerType === "touch") return;
510
+ let t = r(e), { handlers: n } = i.current;
511
+ n.connection.hover(t), n.tool === "point" && n.placement.trackAt(t);
512
+ }
513
+ function C() {
514
+ if (a.current) return;
515
+ let { handlers: e } = i.current;
516
+ e.connection.hover(null), e.placement.clearPointer();
517
+ }
518
+ function w() {
519
+ c.clear(), f("blur");
520
+ }
521
+ function T() {
522
+ document.visibilityState === "hidden" && (c.clear(), f("hidden"));
523
+ }
524
+ function E(e) {
525
+ e.key === "Escape" && (!a.current && !i.current.handlers.tool || f("escape"));
526
+ }
527
+ let D = [];
528
+ function O(e, t, n, r = !1) {
529
+ let i = n;
530
+ e.addEventListener(t, i, r), D.push(() => e.removeEventListener(t, i, r));
531
+ }
532
+ return O(n, "pointerdown", h), O(n, "pointermove", S), O(n, "pointerleave", C), O(n, "lostpointercapture", x), O(window, "pointerdown", g, !0), O(window, "pointerup", _, !0), O(window, "pointercancel", _, !0), O(window, "pointermove", v), O(window, "pointerup", y), O(window, "pointercancel", b), O(window, "blur", w), O(window, "keydown", E), O(document, "visibilitychange", T), () => {
533
+ for (let e of D) e();
534
+ f("unmount"), o.current = () => {};
535
+ };
536
+ }, [e]), I(() => {
537
+ s.current !== n && (s.current = n, o.current("store-replaced"));
538
+ let e = n.getState().interactionEpoch ?? 0;
539
+ return n.subscribe((t) => {
540
+ let n = t.interactionEpoch ?? 0;
541
+ n !== e && (e = n, o.current("invalidated"));
542
+ });
543
+ }, [n]), I(() => {
544
+ a.current && o.current("resize");
545
+ }, [t.width, t.height]);
546
+ }
547
+ //#endregion
548
+ //#region src/renderer/shapes/SnapMarker.tsx
549
+ var Ve = "#786af5", He = {
550
+ point: "point",
551
+ intersection: "intersection",
552
+ grid: "grid",
553
+ onObject: "on object"
554
+ };
555
+ function Ue({ snap: e, viewport: t, canvas: n }) {
556
+ let r = P(e.position, t, n);
557
+ return /* @__PURE__ */ q(G, { children: [
558
+ /* @__PURE__ */ K(B, {
559
+ x: r.x,
560
+ y: r.y,
561
+ radius: 12,
562
+ stroke: Ve,
563
+ strokeWidth: 2,
564
+ dash: [4, 3],
565
+ listening: !1
566
+ }),
567
+ /* @__PURE__ */ K(B, {
568
+ x: r.x,
569
+ y: r.y,
570
+ radius: 3.5,
571
+ fill: Ve,
572
+ listening: !1
573
+ }),
574
+ /* @__PURE__ */ K(W, {
575
+ x: r.x + 15,
576
+ y: r.y + 8,
577
+ text: He[e.kind],
578
+ fontSize: 13,
579
+ fontStyle: "bold",
580
+ fill: Ve,
581
+ listening: !1
582
+ })
583
+ ] });
584
+ }
585
+ //#endregion
586
+ //#region src/renderer/shapes/PointShape.tsx
587
+ var We = 22;
588
+ function J({ id: e, position: t, viewport: n, canvas: r, selected: i = !1, connectable: a = !1, snapTarget: o = !1, label: s, color: c = "#24304a", feedbackRingColor: l, feedbackRingDashed: u = !1 }) {
589
+ let d = P(t, n, r), f = o || i ? 13 : a ? 10 : 9;
590
+ return /* @__PURE__ */ q(G, { children: [
591
+ l && /* @__PURE__ */ K(B, {
592
+ x: d.x,
593
+ y: d.y,
594
+ radius: 15,
595
+ stroke: l,
596
+ strokeWidth: 4,
597
+ dash: u ? [7, 5] : void 0,
598
+ listening: !1
599
+ }),
600
+ o && /* @__PURE__ */ K(B, {
601
+ x: d.x,
602
+ y: d.y,
603
+ radius: 20,
604
+ fill: "#786af526",
605
+ stroke: "#786af5",
606
+ strokeWidth: 2,
607
+ shadowColor: "#786af5",
608
+ shadowBlur: 18,
609
+ listening: !1
610
+ }),
611
+ /* @__PURE__ */ K(B, {
612
+ id: Le(e),
613
+ x: d.x,
614
+ y: d.y,
615
+ radius: f,
616
+ fill: o || i ? "#6d5dfc" : c,
617
+ stroke: a && !i && !o ? "#a69df8" : "#fff",
618
+ strokeWidth: 3,
619
+ hitStrokeWidth: 2 * (We - f),
620
+ shadowColor: "#24304a",
621
+ shadowBlur: i ? 12 : 4
622
+ }),
623
+ /* @__PURE__ */ K(W, {
624
+ x: d.x + 13,
625
+ y: d.y - 23,
626
+ text: s ?? e,
627
+ fontSize: 18,
628
+ fontStyle: "bold",
629
+ fill: c,
630
+ listening: !1
631
+ })
632
+ ] });
633
+ }
634
+ //#endregion
635
+ //#region src/renderer/shapes/StrokedLine.tsx
636
+ var Ge = 44;
637
+ function Ke({ id: e, a: t, b: n, color: r, strokeWidth: i, dashed: a, selected: o, opacity: s, listening: c }) {
638
+ return /* @__PURE__ */ K(H, {
639
+ id: Re(e),
640
+ points: [
641
+ t.x,
642
+ t.y,
643
+ n.x,
644
+ n.y
645
+ ],
646
+ stroke: r,
647
+ strokeWidth: o ? i + 3 : i,
648
+ lineCap: "round",
649
+ dash: a ? [10, 6] : void 0,
650
+ hitStrokeWidth: Ge,
651
+ opacity: s,
652
+ listening: c
653
+ });
654
+ }
655
+ //#endregion
656
+ //#region src/renderer/shapes/SegmentShape.tsx
657
+ function qe({ id: e, from: t, to: n, viewport: r, canvas: i, color: a = "#6d5dfc", strokeWidth: o = 5, dashed: s = !1, selected: c = !1, opacity: l = 1, listening: u = !0 }) {
658
+ let d = P(t, r, i), f = P(n, r, i);
659
+ return /* @__PURE__ */ K(Ke, {
660
+ id: e,
661
+ a: d,
662
+ b: f,
663
+ color: a,
664
+ strokeWidth: o,
665
+ dashed: s,
666
+ selected: c,
667
+ opacity: l,
668
+ listening: u
669
+ });
670
+ }
671
+ //#endregion
672
+ //#region src/renderer/shapes/LineShape.tsx
673
+ function Je({ id: e, through: t, viewport: n, canvas: r, color: i = "#6d5dfc", strokeWidth: a = 4, dashed: o = !1, selected: s = !1, opacity: c = 1, listening: l = !0 }) {
674
+ let u = D(t[0], t[1], n);
675
+ if (!u) return null;
676
+ let d = P(u[0], n, r), f = P(u[1], n, r);
677
+ return /* @__PURE__ */ K(Ke, {
678
+ id: e,
679
+ a: d,
680
+ b: f,
681
+ color: i,
682
+ strokeWidth: a,
683
+ dashed: o,
684
+ selected: s,
685
+ opacity: c,
686
+ listening: l
687
+ });
688
+ }
689
+ //#endregion
690
+ //#region src/renderer/shapes/CircleShape.tsx
691
+ var Ye = 44;
692
+ function Xe({ id: e, center: t, radius: n, viewport: r, canvas: i, color: a = "#6d5dfc", strokeWidth: o = 4, dashed: s = !1, selected: c = !1, opacity: l = 1, listening: u = !0 }) {
693
+ let d = v(r, i), f = P(t, r, i, d);
694
+ return /* @__PURE__ */ K(_e, {
695
+ id: Re(e),
696
+ x: f.x,
697
+ y: f.y,
698
+ radiusX: n * d.scaleX,
699
+ radiusY: n * d.scaleY,
700
+ stroke: a,
701
+ strokeWidth: c ? o + 3 : o,
702
+ dash: s ? [10, 6] : void 0,
703
+ hitStrokeWidth: Ye,
704
+ opacity: l,
705
+ listening: u
706
+ });
707
+ }
708
+ //#endregion
709
+ //#region src/renderer/shapes/EntityLabel.tsx
710
+ var Ze = {
711
+ point: () => null,
712
+ segment: (e) => et(e.from, e.to),
713
+ line: (e, t) => {
714
+ let n = D(e.through[0], e.through[1], t);
715
+ return n ? et(n[0], n[1]) : null;
716
+ },
717
+ circle: (e) => ({
718
+ x: e.center.x,
719
+ y: e.center.y + e.radius
720
+ })
721
+ };
722
+ function Qe(e, t) {
723
+ let n = Ze[e.shape];
724
+ return n(e, t);
725
+ }
726
+ function $e({ text: e, descriptor: t, viewport: n, canvas: r, color: i = "#24304a", opacity: a = 1 }) {
727
+ let o = Qe(t, n);
728
+ if (!o) return null;
729
+ let s = P(o, n, r);
730
+ return /* @__PURE__ */ K(W, {
731
+ x: s.x + 10,
732
+ y: s.y - 24,
733
+ text: e,
734
+ fontSize: 18,
735
+ fontStyle: "bold",
736
+ fill: i,
737
+ opacity: a,
738
+ listening: !1
739
+ });
740
+ }
741
+ function et(e, t) {
742
+ return {
743
+ x: (e.x + t.x) / 2,
744
+ y: (e.y + t.y) / 2
745
+ };
746
+ }
747
+ //#endregion
748
+ //#region src/renderer/shapes/EntityShape.tsx
749
+ var tt = {
750
+ point: () => null,
751
+ segment: (e, t) => /* @__PURE__ */ K(qe, {
752
+ ...t,
753
+ from: e.from,
754
+ to: e.to
755
+ }),
756
+ line: (e, t) => /* @__PURE__ */ K(Je, {
757
+ ...t,
758
+ through: [e.through[0], e.through[1]]
759
+ }),
760
+ circle: (e, t) => /* @__PURE__ */ K(Xe, {
761
+ ...t,
762
+ center: e.center,
763
+ radius: e.radius
764
+ })
765
+ };
766
+ function nt({ descriptor: e, label: t, ...n }) {
767
+ let r = tt[e.shape], i = r(e, n);
768
+ return !i || t === void 0 ? i : /* @__PURE__ */ q(G, { children: [i, /* @__PURE__ */ K($e, {
769
+ text: t,
770
+ descriptor: e,
771
+ viewport: n.viewport,
772
+ canvas: n.canvas,
773
+ color: n.color,
774
+ opacity: n.opacity
775
+ })] });
776
+ }
777
+ //#endregion
778
+ //#region src/renderer/GeometryGrid.tsx
779
+ function rt({ viewport: e, canvas: t, visible: n }) {
780
+ let [r, i, a, o] = e, s = v(e, t), c = P({
781
+ x: r,
782
+ y: o
783
+ }, e, t, s), l = P({
784
+ x: a,
785
+ y: i
786
+ }, e, t, s), { x: u, y: d } = ee(e), f = [], p = [];
787
+ if (n) {
788
+ for (let n = Math.ceil(r / u) * u; n <= a; n += u) {
789
+ let r = P({
790
+ x: n,
791
+ y: 0
792
+ }, e, t, s);
793
+ f.push(/* @__PURE__ */ K(H, {
794
+ points: [
795
+ r.x,
796
+ c.y,
797
+ r.x,
798
+ l.y
799
+ ],
800
+ stroke: "#e6e9f2",
801
+ strokeWidth: 1,
802
+ listening: !1
803
+ }, `grid-x-${n}`));
804
+ }
805
+ for (let n = Math.ceil(i / d) * d; n <= o; n += d) {
806
+ let r = P({
807
+ x: 0,
808
+ y: n
809
+ }, e, t, s);
810
+ p.push(/* @__PURE__ */ K(H, {
811
+ points: [
812
+ c.x,
813
+ r.y,
814
+ l.x,
815
+ r.y
816
+ ],
817
+ stroke: "#e6e9f2",
818
+ strokeWidth: 1,
819
+ listening: !1
820
+ }, `grid-y-${n}`));
821
+ }
822
+ }
823
+ return /* @__PURE__ */ q(G, { children: [
824
+ f,
825
+ p,
826
+ /* @__PURE__ */ K(U, {
827
+ x: c.x + .5,
828
+ y: c.y + .5,
829
+ width: Math.max(0, l.x - c.x - 1),
830
+ height: Math.max(0, l.y - c.y - 1),
831
+ stroke: "#cfd5e3",
832
+ strokeWidth: 1,
833
+ listening: !1
834
+ })
835
+ ] });
836
+ }
837
+ //#endregion
838
+ //#region src/renderer/GeometryInstruments.tsx
839
+ var Y = "#5b6b82", it = "rgba(211, 225, 242, 0.58)", X = "#6558e8";
840
+ function at(e, t) {
841
+ return e === "ruler" ? {
842
+ x: t.width * .5,
843
+ y: t.height * .72,
844
+ rotation: 0,
845
+ flipped: !1
846
+ } : e === "setSquare" ? {
847
+ x: t.width * .32,
848
+ y: t.height * .46,
849
+ rotation: 0,
850
+ flipped: !1
851
+ } : {
852
+ x: t.width * .68,
853
+ y: t.height * .46,
854
+ rotation: 0,
855
+ flipped: !1
856
+ };
857
+ }
858
+ function ot() {
859
+ let e = Array.from({ length: 21 }, (e, t) => t);
860
+ return /* @__PURE__ */ q(V, {
861
+ listening: !1,
862
+ children: [
863
+ /* @__PURE__ */ K(U, {
864
+ x: -150,
865
+ y: -30,
866
+ width: 300,
867
+ height: 60,
868
+ cornerRadius: 5,
869
+ fill: it,
870
+ stroke: Y,
871
+ strokeWidth: 2
872
+ }),
873
+ e.map((e) => {
874
+ let t = -140 + e * 14, n = e % 2 == 0;
875
+ return /* @__PURE__ */ K(H, {
876
+ points: [
877
+ t,
878
+ -29,
879
+ t,
880
+ -29 + (n ? 17 : 10)
881
+ ],
882
+ stroke: Y,
883
+ strokeWidth: n ? 1.5 : 1
884
+ }, e);
885
+ }),
886
+ e.filter((e) => e % 2 == 0).map((e) => /* @__PURE__ */ K(W, {
887
+ x: -145 + e * 14,
888
+ y: -8,
889
+ width: 20,
890
+ align: "center",
891
+ text: String(e / 2),
892
+ fontSize: 10,
893
+ fill: Y
894
+ }, `label-${e}`))
895
+ ]
896
+ });
897
+ }
898
+ function st() {
899
+ return /* @__PURE__ */ q(V, {
900
+ listening: !1,
901
+ children: [
902
+ /* @__PURE__ */ K(H, {
903
+ points: [
904
+ -105,
905
+ 70,
906
+ 105,
907
+ 70,
908
+ -105,
909
+ -75
910
+ ],
911
+ closed: !0,
912
+ fill: it,
913
+ stroke: Y,
914
+ strokeWidth: 2,
915
+ lineJoin: "round"
916
+ }),
917
+ /* @__PURE__ */ K(H, {
918
+ points: [
919
+ -72,
920
+ 48,
921
+ 48,
922
+ 48,
923
+ -72,
924
+ -34
925
+ ],
926
+ closed: !0,
927
+ fill: "#fbfcff",
928
+ stroke: Y,
929
+ strokeWidth: 1.5,
930
+ lineJoin: "round"
931
+ }),
932
+ Array.from({ length: 11 }, (e, t) => /* @__PURE__ */ K(H, {
933
+ points: [
934
+ -91 + t * 18,
935
+ 70,
936
+ -91 + t * 18,
937
+ t % 5 == 0 ? 54 : 60
938
+ ],
939
+ stroke: Y,
940
+ strokeWidth: 1
941
+ }, t))
942
+ ]
943
+ });
944
+ }
945
+ function ct() {
946
+ let e = Array.from({ length: 37 }, (e, t) => t * 5);
947
+ return /* @__PURE__ */ q(V, {
948
+ listening: !1,
949
+ children: [
950
+ /* @__PURE__ */ K(ge, {
951
+ x: 0,
952
+ y: 0,
953
+ innerRadius: 38,
954
+ outerRadius: 112,
955
+ angle: 180,
956
+ rotation: 180,
957
+ fill: it,
958
+ stroke: Y,
959
+ strokeWidth: 2
960
+ }),
961
+ /* @__PURE__ */ K(H, {
962
+ points: [
963
+ -112,
964
+ 0,
965
+ 112,
966
+ 0
967
+ ],
968
+ stroke: Y,
969
+ strokeWidth: 2
970
+ }),
971
+ e.map((e) => {
972
+ let t = Math.PI * e / 180, n = e % 10 == 0, r = n ? 94 : 100;
973
+ return /* @__PURE__ */ K(H, {
974
+ points: [
975
+ Math.cos(Math.PI - t) * 108,
976
+ -Math.sin(t) * 108,
977
+ Math.cos(Math.PI - t) * r,
978
+ -Math.sin(t) * r
979
+ ],
980
+ stroke: Y,
981
+ strokeWidth: n ? 1.4 : .8
982
+ }, e);
983
+ }),
984
+ /* @__PURE__ */ K(B, {
985
+ x: 0,
986
+ y: 0,
987
+ radius: 3,
988
+ fill: Y
989
+ })
990
+ ]
991
+ });
992
+ }
993
+ function lt({ tool: e }) {
994
+ return K(e === "ruler" ? ot : e === "setSquare" ? st : ct, {});
995
+ }
996
+ function ut(e, t, n) {
997
+ let r = n * Math.PI / 180;
998
+ return {
999
+ x: e * Math.cos(r) - t * Math.sin(r),
1000
+ y: e * Math.sin(r) + t * Math.cos(r)
1001
+ };
1002
+ }
1003
+ function dt(e, t) {
1004
+ let n = e === "ruler" ? {
1005
+ x: 0,
1006
+ y: 19
1007
+ } : e === "setSquare" ? {
1008
+ x: -42,
1009
+ y: 24
1010
+ } : {
1011
+ x: 0,
1012
+ y: -20
1013
+ };
1014
+ return {
1015
+ x: t ? -n.x : n.x,
1016
+ y: n.y
1017
+ };
1018
+ }
1019
+ function ft({ tools: e, canvas: t }) {
1020
+ let [n, r] = z(() => Object.fromEntries(e.map((e) => [e, at(e, t)]))), [i, a] = z(null), o = i && e.includes(i) ? i : null;
1021
+ function s(e, n) {
1022
+ r((r) => ({
1023
+ ...r,
1024
+ [e]: {
1025
+ ...r[e] ?? at(e, t),
1026
+ ...n
1027
+ }
1028
+ }));
1029
+ }
1030
+ return /* @__PURE__ */ K(G, { children: e.map((e) => {
1031
+ let r = n[e] ?? at(e, t), i = o === e, c = dt(e, r.flipped), l = ut(c.x, c.y, r.rotation), u = {
1032
+ x: r.x + l.x,
1033
+ y: r.y + l.y
1034
+ }, d = ut(0, -105, r.rotation), f = ut(0, e === "setSquare" ? 96 : e === "ruler" ? 50 : 48, r.rotation);
1035
+ return /* @__PURE__ */ q(V, { children: [
1036
+ /* @__PURE__ */ K(V, {
1037
+ x: r.x,
1038
+ y: r.y,
1039
+ rotation: r.rotation,
1040
+ scaleX: r.flipped ? -1 : 1,
1041
+ listening: !1,
1042
+ children: /* @__PURE__ */ K(lt, { tool: e })
1043
+ }),
1044
+ i && /* @__PURE__ */ q(G, { children: [
1045
+ /* @__PURE__ */ K(H, {
1046
+ points: [
1047
+ r.x,
1048
+ r.y,
1049
+ r.x + d.x,
1050
+ r.y + d.y
1051
+ ],
1052
+ stroke: X,
1053
+ strokeWidth: 1.5,
1054
+ dash: [4, 4],
1055
+ listening: !1
1056
+ }),
1057
+ /* @__PURE__ */ K(B, {
1058
+ x: r.x + d.x,
1059
+ y: r.y + d.y,
1060
+ radius: 11,
1061
+ fill: "#fff",
1062
+ stroke: X,
1063
+ strokeWidth: 2.5,
1064
+ draggable: !0,
1065
+ onDragMove: (t) => {
1066
+ let n = t.target.x() - r.x, i = t.target.y() - r.y;
1067
+ s(e, { rotation: Math.atan2(i, n) * 180 / Math.PI + 90 });
1068
+ },
1069
+ onMouseDown: (e) => {
1070
+ e.cancelBubble = !0;
1071
+ },
1072
+ onTouchStart: (e) => {
1073
+ e.cancelBubble = !0;
1074
+ }
1075
+ }),
1076
+ /* @__PURE__ */ K(W, {
1077
+ x: r.x + d.x - 8,
1078
+ y: r.y + d.y - 8,
1079
+ width: 16,
1080
+ height: 16,
1081
+ text: "↻",
1082
+ align: "center",
1083
+ verticalAlign: "middle",
1084
+ fontSize: 14,
1085
+ fontStyle: "bold",
1086
+ fill: X,
1087
+ listening: !1
1088
+ }),
1089
+ /* @__PURE__ */ K(U, {
1090
+ x: r.x + f.x - 29,
1091
+ y: r.y + f.y - 11,
1092
+ width: 58,
1093
+ height: 22,
1094
+ cornerRadius: 11,
1095
+ fill: "#fff",
1096
+ stroke: X,
1097
+ strokeWidth: 1.5,
1098
+ onClick: (t) => {
1099
+ t.cancelBubble = !0, s(e, { flipped: !r.flipped });
1100
+ },
1101
+ onTap: (t) => {
1102
+ t.cancelBubble = !0, s(e, { flipped: !r.flipped });
1103
+ }
1104
+ }),
1105
+ /* @__PURE__ */ K(W, {
1106
+ x: r.x + f.x - 27,
1107
+ y: r.y + f.y - 7,
1108
+ width: 54,
1109
+ height: 14,
1110
+ text: "⇄ Flip",
1111
+ align: "center",
1112
+ verticalAlign: "middle",
1113
+ fontSize: 10,
1114
+ fontStyle: "600",
1115
+ fill: X,
1116
+ listening: !1
1117
+ })
1118
+ ] }),
1119
+ /* @__PURE__ */ K(B, {
1120
+ id: `geometry-instrument-${e}-move-handle`,
1121
+ x: u.x,
1122
+ y: u.y,
1123
+ radius: i ? 8 : 12,
1124
+ fill: i ? "rgba(255, 255, 255, 0.94)" : "rgba(255, 255, 255, 0.01)",
1125
+ stroke: X,
1126
+ strokeWidth: i ? 1.5 : 0,
1127
+ shadowColor: "#24304a",
1128
+ shadowBlur: i ? 2 : 0,
1129
+ draggable: !0,
1130
+ dragBoundFunc: (e) => ({
1131
+ x: Math.max(22, Math.min(t.width - 22, e.x)),
1132
+ y: Math.max(22, Math.min(t.height - 22, e.y))
1133
+ }),
1134
+ onDragStart: () => a(e),
1135
+ onDragMove: (t) => s(e, {
1136
+ x: t.target.x() - l.x,
1137
+ y: t.target.y() - l.y
1138
+ }),
1139
+ onMouseEnter: (e) => {
1140
+ let t = e.target.getStage();
1141
+ t && (t.container().style.cursor = "grab");
1142
+ },
1143
+ onMouseLeave: (e) => {
1144
+ let t = e.target.getStage();
1145
+ t && (t.container().style.cursor = "default");
1146
+ },
1147
+ onClick: (t) => {
1148
+ t.cancelBubble = !0, a(e);
1149
+ },
1150
+ onTap: (t) => {
1151
+ t.cancelBubble = !0, a(e);
1152
+ }
1153
+ }),
1154
+ i ? /* @__PURE__ */ K(W, {
1155
+ x: u.x - 6,
1156
+ y: u.y - 5,
1157
+ width: 12,
1158
+ height: 10,
1159
+ text: "✣",
1160
+ align: "center",
1161
+ verticalAlign: "middle",
1162
+ fontSize: 9,
1163
+ fontStyle: "bold",
1164
+ fill: X,
1165
+ listening: !1
1166
+ }) : /* @__PURE__ */ K(B, {
1167
+ x: u.x,
1168
+ y: u.y,
1169
+ radius: 2.5,
1170
+ fill: Y,
1171
+ opacity: .65,
1172
+ listening: !1
1173
+ })
1174
+ ] }, e);
1175
+ }) });
1176
+ }
1177
+ //#endregion
1178
+ //#region src/store/useStoreState.ts
1179
+ function Z(e) {
1180
+ return he((t) => e.subscribe(t), () => e.getState());
1181
+ }
1182
+ //#endregion
1183
+ //#region src/renderer/GeometryCanvas.tsx
1184
+ function pt({ store: t, size: r, onExerciseChange: i, onGivenSelect: a, highlightedGivenIds: o = [], goalPreviews: h = [] }) {
1185
+ let _ = Z(t), { points: v, objects: y, capabilitiesOf: b, labelOf: S, isSnapTarget: C } = Se(_), { viewport: w } = _.exercise, T = R(null), E = Ee({
1186
+ points: v,
1187
+ viewport: w,
1188
+ canvas: r,
1189
+ pendingObjectType: _.pendingObjectType,
1190
+ pendingFirstPointId: _.pendingFirstPointId,
1191
+ connect: (e, n) => {
1192
+ (_.pendingObjectType === "segment" || _.pendingObjectType === "line") && k(t, {
1193
+ tool: _.pendingObjectType,
1194
+ from: e,
1195
+ to: n
1196
+ });
1197
+ },
1198
+ pick: (e) => {
1199
+ m(t, e), a?.(e);
1200
+ },
1201
+ objects: y,
1202
+ isSnapTarget: C,
1203
+ canCreatePoints: !0,
1204
+ preserveCreatedPointOrigins: !1
1205
+ }), { connecting: D, previewPoints: A, snapTargetId: j } = E, M = De({
1206
+ points: v,
1207
+ objects: y,
1208
+ viewport: w,
1209
+ canvas: r,
1210
+ showGrid: !!_.exercise.showGrid,
1211
+ isSnapTarget: C,
1212
+ active: _.pendingObjectType === "point"
1213
+ });
1214
+ I(() => {
1215
+ if (i) return t.subscribe((e) => i(e.exercise));
1216
+ }, [t, i]);
1217
+ function ee(e) {
1218
+ if (_.pendingObjectType !== "point") {
1219
+ g(t, null);
1220
+ return;
1221
+ }
1222
+ let n = M.resolvePlacement(e);
1223
+ if (n.snap?.kind === "point") {
1224
+ let e = n.snap.targetIds[0];
1225
+ e && d(t, e);
1226
+ return;
1227
+ }
1228
+ let r = s(n);
1229
+ r && c(t, r, "at" in r);
1230
+ }
1231
+ function N(e) {
1232
+ g(t, e), a?.(e);
1233
+ }
1234
+ return Be(T, r, t, {
1235
+ tool: _.pendingObjectType,
1236
+ connection: E,
1237
+ placement: M,
1238
+ pointOnScreen: (e) => {
1239
+ let t = v.get(e);
1240
+ return t ? P(t, w, r) : null;
1241
+ },
1242
+ canDragPoint: (e) => O(_, e),
1243
+ dragPoint: (e, n) => f(t, e, x(n, w, r)),
1244
+ endPointDrag: () => p(t),
1245
+ tapPoint: (e) => {
1246
+ b(e).selectable && N(e);
1247
+ },
1248
+ tapObject: N,
1249
+ tapStage: ee,
1250
+ abandonConstruction: () => l(t),
1251
+ disarmTool: () => u(t, null)
1252
+ }), /* @__PURE__ */ K(ye, {
1253
+ ref: T,
1254
+ width: r.width,
1255
+ height: r.height,
1256
+ style: {
1257
+ ...Ne,
1258
+ cursor: _.pendingObjectType === "point" || D ? "crosshair" : "default"
1259
+ },
1260
+ children: /* @__PURE__ */ q(ve, { children: [
1261
+ /* @__PURE__ */ K(U, {
1262
+ width: r.width,
1263
+ height: r.height,
1264
+ fill: "#fbfcff",
1265
+ listening: !1
1266
+ }),
1267
+ /* @__PURE__ */ K(rt, {
1268
+ viewport: w,
1269
+ canvas: r,
1270
+ visible: !!_.exercise.showGrid
1271
+ }),
1272
+ A && /* @__PURE__ */ K(H, {
1273
+ points: A,
1274
+ stroke: "#786af5",
1275
+ strokeWidth: 3,
1276
+ dash: [9, 6],
1277
+ lineCap: "round",
1278
+ listening: !1
1279
+ }),
1280
+ y.map(({ id: t, definition: i }) => {
1281
+ let a = b(t);
1282
+ if (!a.rendered) return null;
1283
+ let s = e(i, v);
1284
+ return s ? /* @__PURE__ */ K(nt, {
1285
+ id: t,
1286
+ descriptor: n(s),
1287
+ viewport: w,
1288
+ canvas: r,
1289
+ label: S(t),
1290
+ selected: t === _.selectedGivenId || o.includes(t),
1291
+ listening: a.selectable && !_.pendingObjectType
1292
+ }, t) : null;
1293
+ }),
1294
+ h.map((e) => e.shape ? e.shape.type === "segment" ? /* @__PURE__ */ K(qe, {
1295
+ id: `goal-preview-${e.id}`,
1296
+ from: e.shape.from,
1297
+ to: e.shape.to,
1298
+ viewport: w,
1299
+ canvas: r,
1300
+ color: "#f59e0b",
1301
+ strokeWidth: 4,
1302
+ dashed: !0,
1303
+ opacity: .72,
1304
+ listening: !1
1305
+ }, `goal-preview-${e.id}`) : e.shape.type === "point" ? /* @__PURE__ */ K(J, {
1306
+ id: `goal-preview-${e.id}`,
1307
+ position: e.shape.at,
1308
+ viewport: w,
1309
+ canvas: r,
1310
+ color: "#f59e0b"
1311
+ }, `goal-preview-${e.id}`) : /* @__PURE__ */ K(Je, {
1312
+ id: `goal-preview-${e.id}`,
1313
+ through: e.shape.through,
1314
+ viewport: w,
1315
+ canvas: r,
1316
+ color: "#f59e0b",
1317
+ strokeWidth: 3,
1318
+ dashed: !0,
1319
+ opacity: .72,
1320
+ listening: !1
1321
+ }, `goal-preview-${e.id}`) : null),
1322
+ [...v].map(([e, t]) => {
1323
+ let n = b(e);
1324
+ return n.rendered ? /* @__PURE__ */ K(J, {
1325
+ id: e,
1326
+ position: t,
1327
+ viewport: w,
1328
+ canvas: r,
1329
+ label: S(e) ?? e,
1330
+ selected: e === _.pendingFirstPointId || e === _.selectedGivenId || o.includes(e),
1331
+ connectable: D && n.snapTarget,
1332
+ snapTarget: e === j
1333
+ }, e) : null;
1334
+ }),
1335
+ M.snap && /* @__PURE__ */ K(Ue, {
1336
+ snap: M.snap,
1337
+ viewport: w,
1338
+ canvas: r
1339
+ }),
1340
+ /* @__PURE__ */ K(ft, {
1341
+ tools: _.exercise.tools,
1342
+ canvas: r
1343
+ })
1344
+ ] })
1345
+ });
1346
+ }
1347
+ //#endregion
1348
+ //#region src/renderer/entityDisplayName.ts
1349
+ var mt = /^student-(.+)-(\d+)$/;
1350
+ function Q(e, t, n) {
1351
+ if (t) return t;
1352
+ if (n === "given") return e;
1353
+ let r = mt.exec(e);
1354
+ return !r?.[1] || !r[2] ? e : r[1] === "point" ? `P${r[2]}` : `${r[1]} ${r[2]}`;
1355
+ }
1356
+ //#endregion
1357
+ //#region src/renderer/StudentGeometryCanvas.tsx
1358
+ var ht = "#1683ff", gt = "#159a68", _t = "#d64555";
1359
+ function vt(e) {
1360
+ return e === "correct" ? gt : e === "incorrect" ? _t : void 0;
1361
+ }
1362
+ function yt({ store: r, size: i, validationFeedback: a = null, focusedGoalId: o = null }) {
1363
+ let c = Z(r), { exercise: l, geometry: u } = c, { points: d, objects: f, capabilitiesOf: p, labelOf: m, isSnapTarget: h } = Ce(l, u), g = ce(a, u, o), v = R(null), y = Ee({
1364
+ points: d,
1365
+ viewport: l.viewport,
1366
+ canvas: i,
1367
+ pendingObjectType: c.pendingObjectType,
1368
+ pendingFirstPointId: c.pendingFirstPointId,
1369
+ connect: (e, t) => {
1370
+ (c.pendingObjectType === "segment" || c.pendingObjectType === "line") && N(r, {
1371
+ tool: c.pendingObjectType,
1372
+ from: e,
1373
+ to: t
1374
+ });
1375
+ },
1376
+ pick: (e) => S(r, e),
1377
+ objects: f,
1378
+ isSnapTarget: h,
1379
+ canCreatePoints: !0
1380
+ }), { connecting: w, previewPoints: T, snapTargetId: E, snapPreview: D } = y, O = De({
1381
+ points: d,
1382
+ objects: f,
1383
+ viewport: l.viewport,
1384
+ canvas: i,
1385
+ showGrid: !!l.showGrid,
1386
+ isSnapTarget: h,
1387
+ active: c.pendingObjectType === "point"
1388
+ });
1389
+ function k(e) {
1390
+ if (c.selectedObjectId && F(r, null), c.pendingObjectType !== "point") return;
1391
+ let t = O.resolvePlacement(e);
1392
+ if (t.snap?.kind === "point") {
1393
+ let e = t.snap.targetIds[0];
1394
+ e && C(r, e);
1395
+ return;
1396
+ }
1397
+ let n = s(t);
1398
+ n && ie(r, n, !0);
1399
+ }
1400
+ return Be(v, i, r, {
1401
+ tool: c.pendingObjectType,
1402
+ connection: y,
1403
+ placement: O,
1404
+ pointOnScreen: (e) => {
1405
+ let t = d.get(e);
1406
+ return t ? P(t, l.viewport, i) : null;
1407
+ },
1408
+ canDragPoint: (e) => A(c, e),
1409
+ dragPoint: (e, t) => ae(r, e, x(t, l.viewport, i)),
1410
+ endPointDrag: () => _(r),
1411
+ tapPoint: (e) => {
1412
+ let t = p(e).selectable && b(c, e);
1413
+ F(r, t ? e : null);
1414
+ },
1415
+ tapObject: (e) => F(r, e),
1416
+ tapStage: k,
1417
+ abandonConstruction: () => M(r),
1418
+ disarmTool: () => se(r, null)
1419
+ }), /* @__PURE__ */ K(ye, {
1420
+ ref: v,
1421
+ width: i.width,
1422
+ height: i.height,
1423
+ style: Ne,
1424
+ children: /* @__PURE__ */ q(ve, { children: [
1425
+ /* @__PURE__ */ K(U, {
1426
+ width: i.width,
1427
+ height: i.height,
1428
+ fill: "#fbfcff",
1429
+ listening: !1
1430
+ }),
1431
+ /* @__PURE__ */ K(rt, {
1432
+ viewport: l.viewport,
1433
+ canvas: i,
1434
+ visible: !!l.showGrid
1435
+ }),
1436
+ T && /* @__PURE__ */ K(H, {
1437
+ points: T,
1438
+ stroke: "#786af5",
1439
+ strokeWidth: 3,
1440
+ dash: [9, 6],
1441
+ lineCap: "round",
1442
+ listening: !1
1443
+ }),
1444
+ f.map(({ id: r, definition: a }) => {
1445
+ let o = Object.prototype.hasOwnProperty.call(u.entities, r), s = p(r);
1446
+ if (!s.rendered) return null;
1447
+ let f = t(g.constructions, r), h = vt(f), _ = e(a, d);
1448
+ if (!_) return null;
1449
+ let v = s.selectable && o;
1450
+ return /* @__PURE__ */ K(nt, {
1451
+ id: r,
1452
+ descriptor: n(_),
1453
+ viewport: l.viewport,
1454
+ canvas: i,
1455
+ label: m(r),
1456
+ color: o ? h ?? ht : void 0,
1457
+ dashed: f === "incorrect",
1458
+ selected: v && r === c.selectedObjectId,
1459
+ listening: v && !c.pendingObjectType
1460
+ }, r);
1461
+ }),
1462
+ [...d].map(([e, n]) => {
1463
+ let r = p(e);
1464
+ if (!r.rendered) return null;
1465
+ let a = Object.prototype.hasOwnProperty.call(l.entities, e), o = !a, s = t(g.points, e), u = vt(s);
1466
+ return /* @__PURE__ */ K(J, {
1467
+ id: e,
1468
+ position: n,
1469
+ viewport: l.viewport,
1470
+ canvas: i,
1471
+ label: Q(e, m(e), a ? "given" : "student"),
1472
+ color: o ? u ?? ht : void 0,
1473
+ feedbackRingColor: u,
1474
+ feedbackRingDashed: s === "incorrect",
1475
+ selected: e === c.pendingFirstPointId || e === c.selectedObjectId,
1476
+ connectable: w && r.snapTarget,
1477
+ snapTarget: e === E
1478
+ }, e);
1479
+ }),
1480
+ (O.snap ?? D) && /* @__PURE__ */ K(Ue, {
1481
+ snap: O.snap ?? D,
1482
+ viewport: l.viewport,
1483
+ canvas: i
1484
+ }),
1485
+ /* @__PURE__ */ K(ft, {
1486
+ tools: l.tools,
1487
+ canvas: i
1488
+ })
1489
+ ] })
1490
+ });
1491
+ }
1492
+ //#endregion
1493
+ //#region src/renderer/deriveSemanticScene.ts
1494
+ function bt(e, n = null, r = null) {
1495
+ let { exercise: i, geometry: o } = e, s = a(i, o), c = ce(n, o, r), l = wt(s), u = St(s, s.entityIds, {
1496
+ nameOf: l,
1497
+ selectedId: e.selectedObjectId,
1498
+ isSelectable: (e, t) => t && !s.isGiven(e),
1499
+ statusOf: (e, n) => t(n === "point" ? c.points : c.constructions, e) ?? null
1500
+ });
1501
+ return {
1502
+ toolLine: Et(e.pendingObjectType),
1503
+ pendingLine: Dt(e.pendingObjectType, e.pendingFirstPointId, l),
1504
+ answerLine: Ot(n),
1505
+ entities: u,
1506
+ selectedId: e.selectedObjectId
1507
+ };
1508
+ }
1509
+ function xt(e) {
1510
+ let t = o(e.exercise), n = wt(t), r = St(t, Object.keys(e.exercise.entities), {
1511
+ nameOf: n,
1512
+ selectedId: e.selectedGivenId,
1513
+ isSelectable: (e, t) => t,
1514
+ statusOf: () => null
1515
+ });
1516
+ return {
1517
+ toolLine: Et(e.pendingObjectType),
1518
+ pendingLine: Dt(e.pendingObjectType, e.pendingFirstPointId, n),
1519
+ answerLine: null,
1520
+ entities: r,
1521
+ selectedId: e.selectedGivenId
1522
+ };
1523
+ }
1524
+ function St(e, t, n) {
1525
+ let i = [];
1526
+ for (let a of t) {
1527
+ let t = e.presentationOf(a);
1528
+ if (!xe(t.role).rendered) continue;
1529
+ let o = e.definitionOf(a), s = e.kindOf(a);
1530
+ if (!o || !s) continue;
1531
+ let c = e.isGiven(a) ? "given" : "student", l = Q(a, t.label, c), u = r(o, n.nameOf), d = e.resolvedOf(a) !== void 0, f = n.statusOf(a, s);
1532
+ i.push({
1533
+ id: a,
1534
+ kind: s,
1535
+ owner: c,
1536
+ name: l,
1537
+ description: u,
1538
+ placed: d,
1539
+ selected: a === n.selectedId,
1540
+ selectable: n.isSelectable(a, xe(t.role).selectable),
1541
+ status: f,
1542
+ text: Ct(l, u, d, f)
1543
+ });
1544
+ }
1545
+ return i;
1546
+ }
1547
+ function Ct(e, t, n, r) {
1548
+ return `${e}: ${t}${`${n ? "" : ", not on screen"}${r ? `, ${r}` : ""}`}`;
1549
+ }
1550
+ function wt(e) {
1551
+ return (t) => Q(t, Tt(e, t), e.isGiven(t) ? "given" : "student");
1552
+ }
1553
+ function Tt(e, t) {
1554
+ let n = e.presentationOf(t);
1555
+ return n.role === "explicit" ? n.label : void 0;
1556
+ }
1557
+ function Et(e) {
1558
+ return `Tool: ${e ?? "none"}`;
1559
+ }
1560
+ function Dt(e, t, n) {
1561
+ return !e || !t ? "Building: nothing" : `Building: ${e} from ${n(t)}`;
1562
+ }
1563
+ function Ot(e) {
1564
+ return e ? `Answer: ${e.result.goals.filter((e) => e.status === "correct").length} of ${e.result.goals.length} goals correct` : "Answer: not checked";
1565
+ }
1566
+ function kt(e, t) {
1567
+ if (!e) return null;
1568
+ let n = new Map(e.entities.map((e) => [e.id, e])), r = new Map(t.entities.map((e) => [e.id, e])), i = t.entities.filter((e) => !n.has(e.id)), a = e.entities.filter((e) => !r.has(e.id)), o = [];
1569
+ return i.length === 1 && i[0] ? o.push(`Added ${i[0].text}`) : i.length > 1 && o.push(`Added ${i.length} objects`), a.length === 1 && a[0] ? o.push(`Removed ${a[0].text}`) : a.length > 1 && o.push(`Removed ${a.length} objects`), t.answerLine && t.answerLine !== e.answerLine && o.push(t.answerLine), o.length === 0 && t.toolLine !== e.toolLine && o.push(t.toolLine), o.length ? `${o.join(". ")}.` : null;
1570
+ }
1571
+ //#endregion
1572
+ //#region src/renderer/GeometryCompanion.tsx
1573
+ function At({ scene: e, onSelect: t, label: n = "Figure contents", className: r }) {
1574
+ let i = Nt(e);
1575
+ return /* @__PURE__ */ q("section", {
1576
+ "aria-label": n,
1577
+ className: r,
1578
+ children: [
1579
+ /* @__PURE__ */ K("p", { children: e.toolLine }),
1580
+ /* @__PURE__ */ K("p", { children: e.pendingLine }),
1581
+ /* @__PURE__ */ q("ul", {
1582
+ "aria-label": "Figure objects",
1583
+ children: [e.entities.length === 0 && /* @__PURE__ */ K("li", { children: "Nothing has been drawn yet." }), e.entities.map((e) => e.selectable ? /* @__PURE__ */ K("li", { children: /* @__PURE__ */ K("button", {
1584
+ type: "button",
1585
+ "aria-pressed": e.selected,
1586
+ onClick: () => t(e.selected ? null : e.id),
1587
+ children: e.text
1588
+ }) }, e.id) : /* @__PURE__ */ K("li", { children: e.text }, e.id))]
1589
+ }),
1590
+ e.answerLine !== null && /* @__PURE__ */ K("p", { children: e.answerLine }),
1591
+ /* @__PURE__ */ K("div", {
1592
+ role: "status",
1593
+ "aria-live": "polite",
1594
+ "aria-atomic": "true",
1595
+ children: /* @__PURE__ */ K("span", { children: i.message }, i.tick)
1596
+ })
1597
+ ]
1598
+ });
1599
+ }
1600
+ function jt({ store: e, validationFeedback: t = null, focusedGoalId: n = null, label: r, className: i }) {
1601
+ let a = bt(Z(e), t, n);
1602
+ return /* @__PURE__ */ K(At, {
1603
+ scene: a,
1604
+ onSelect: (t) => F(e, t),
1605
+ label: r,
1606
+ className: i
1607
+ });
1608
+ }
1609
+ function Mt({ store: e, label: t, className: n }) {
1610
+ let r = xt(Z(e));
1611
+ return /* @__PURE__ */ K(At, {
1612
+ scene: r,
1613
+ onSelect: (t) => g(e, t),
1614
+ label: t,
1615
+ className: n
1616
+ });
1617
+ }
1618
+ function Nt(e) {
1619
+ let t = R(null), [n, r] = z({
1620
+ message: "",
1621
+ tick: 0
1622
+ });
1623
+ return I(() => {
1624
+ let n = kt(t.current, e);
1625
+ t.current = e, n !== null && r((e) => ({
1626
+ message: n,
1627
+ tick: e.tick + 1
1628
+ }));
1629
+ }, [e]), n;
1630
+ }
1631
+ //#endregion
1632
+ //#region src/renderer/studentExerciseSession.ts
1633
+ function Pt(e, t) {
1634
+ let n = ue(e);
1635
+ if (!n.success) return {
1636
+ success: !1,
1637
+ issues: n.errors.map((e) => ({
1638
+ source: "exercise",
1639
+ ...e
1640
+ }))
1641
+ };
1642
+ let r = t == null ? {
1643
+ success: !0,
1644
+ data: fe()
1645
+ } : pe(t, n.data);
1646
+ return r.success ? {
1647
+ success: !0,
1648
+ exercise: n.data,
1649
+ attempt: r.data,
1650
+ exerciseFingerprint: de(n.data),
1651
+ attemptFingerprint: le(r.data)
1652
+ } : {
1653
+ success: !1,
1654
+ issues: r.errors.map((e) => ({
1655
+ source: "value",
1656
+ ...e
1657
+ }))
1658
+ };
1659
+ }
1660
+ function Ft(e, t) {
1661
+ let n = pe(t, e);
1662
+ return n.success ? le(n.data) : null;
1663
+ }
1664
+ function It(e) {
1665
+ return {
1666
+ store: ne(e.exercise, e.attempt),
1667
+ exercise: e.exerciseFingerprint,
1668
+ value: e.attemptFingerprint
1669
+ };
1670
+ }
1671
+ function Lt(e, t) {
1672
+ if (t.exerciseFingerprint !== e.exercise) {
1673
+ e.exercise = t.exerciseFingerprint, e.value = t.attemptFingerprint, T(e.store, t.exercise, t.attempt);
1674
+ return;
1675
+ }
1676
+ if (t.attemptFingerprint === e.value) return;
1677
+ e.value = t.attemptFingerprint;
1678
+ let { exercise: n, geometry: r } = e.store.getState();
1679
+ Ft(n, r) !== t.attemptFingerprint && j(e.store, t.attempt);
1680
+ }
1681
+ function Rt(e, t) {
1682
+ return e.subscribe((e, n) => {
1683
+ let r = e.lastAttemptChange;
1684
+ r && r !== n.lastAttemptChange && t().onChange(JSON.parse(JSON.stringify(e.geometry)), {
1685
+ action: r.action,
1686
+ entityIds: [...r.entityIds]
1687
+ });
1688
+ let i = e.constructionNotice;
1689
+ i && i !== n.constructionNotice && t().onNotice?.(i);
1690
+ });
1691
+ }
1692
+ function zt(e, t, n) {
1693
+ return !e?.success || e.fingerprints.exercise !== de(t) ? null : e.fingerprints.attempt === Ft(t, n) ? e.data : null;
1694
+ }
1695
+ //#endregion
1696
+ //#region src/renderer/Toolbar.tsx
1697
+ var Bt = [
1698
+ "point",
1699
+ "segment",
1700
+ "line"
1701
+ ], Vt = {
1702
+ minWidth: 44,
1703
+ minHeight: 44
1704
+ };
1705
+ function Ht({ selected: e, onSelect: t, available: n = Bt }) {
1706
+ return /* @__PURE__ */ K("div", {
1707
+ role: "toolbar",
1708
+ "aria-label": "Geometry tools",
1709
+ children: n.map((n) => /* @__PURE__ */ K("button", {
1710
+ type: "button",
1711
+ "aria-pressed": e === n,
1712
+ style: Vt,
1713
+ onClick: () => t(e === n ? null : n),
1714
+ children: n
1715
+ }, n))
1716
+ });
1717
+ }
1718
+ //#endregion
1719
+ //#region src/renderer/StudentGeometryExercise.tsx
1720
+ var $ = {
1721
+ minWidth: 44,
1722
+ minHeight: 44
1723
+ }, Ut = {
1724
+ border: 0,
1725
+ margin: 0,
1726
+ padding: 0,
1727
+ minWidth: 0
1728
+ };
1729
+ function Wt(e) {
1730
+ let { exercise: t, value: n, readOnly: r = !1, validationFeedback: i = null, focusedGoalId: a = null, controls: o, className: s } = e, c = Pt(t, n), [l, u] = z(null), d = R(e), f = R(null);
1731
+ return !l && c.success && u(It(c)), L(() => {
1732
+ d.current = e;
1733
+ }), L(() => {
1734
+ l && c.success && Lt(l, c);
1735
+ }, [c, l]), L(() => l ? Rt(l.store, () => d.current) : void 0, [l]), L(() => {
1736
+ l && y(l.store, r);
1737
+ }, [l, r]), L(() => {
1738
+ let e = c.success ? null : JSON.stringify(c.issues);
1739
+ !c.success && e !== f.current && d.current.onError?.(c.issues), f.current = e;
1740
+ }, [c]), c.success ? l ? /* @__PURE__ */ K(Gt, {
1741
+ store: l.store,
1742
+ validationFeedback: i,
1743
+ focusedGoalId: a,
1744
+ controls: o,
1745
+ className: s
1746
+ }) : null : /* @__PURE__ */ K("div", {
1747
+ className: s,
1748
+ role: "alert",
1749
+ children: "This exercise cannot be displayed."
1750
+ });
1751
+ }
1752
+ function Gt({ store: e, validationFeedback: n, focusedGoalId: r, controls: i, className: a }) {
1753
+ let o = Z(e), { exercise: s, geometry: c, selectedObjectId: l, constructionNotice: u } = o, d = me(() => zt(n, s, c), [
1754
+ n,
1755
+ s,
1756
+ c
1757
+ ]), f = d ? r : null, p = R(null), [m, h] = z({
1758
+ width: 0,
1759
+ height: 0
1760
+ }), [g, _, v, y] = s.viewport;
1761
+ L(() => {
1762
+ let e = p.current;
1763
+ if (!e) return;
1764
+ let t = ({ width: e, height: t }) => {
1765
+ let n = {
1766
+ width: Math.floor(e),
1767
+ height: Math.floor(t)
1768
+ };
1769
+ h((e) => e.width === n.width && e.height === n.height ? e : n);
1770
+ };
1771
+ t(e.getBoundingClientRect());
1772
+ let n = new ResizeObserver(([e]) => e && t(e.contentRect));
1773
+ return n.observe(e), () => n.disconnect();
1774
+ }, []);
1775
+ let b = (e) => i?.[e] !== !1, x = u && `This construction already exists: ${Q(u.entityId, t(c.presentation, u.entityId)?.label, "student")}`;
1776
+ return /* @__PURE__ */ q("div", {
1777
+ className: a,
1778
+ children: [
1779
+ /* @__PURE__ */ q("fieldset", {
1780
+ disabled: o.readOnly,
1781
+ style: Ut,
1782
+ children: [
1783
+ b("toolbar") && /* @__PURE__ */ K(Ht, {
1784
+ selected: o.pendingObjectType,
1785
+ available: s.allowedObjects,
1786
+ onSelect: (t) => se(e, t)
1787
+ }),
1788
+ b("history") && /* @__PURE__ */ q(G, { children: [/* @__PURE__ */ K("button", {
1789
+ type: "button",
1790
+ style: $,
1791
+ disabled: !o.past.length,
1792
+ onClick: () => oe(e),
1793
+ children: "Undo"
1794
+ }), /* @__PURE__ */ K("button", {
1795
+ type: "button",
1796
+ style: $,
1797
+ disabled: !o.future.length,
1798
+ onClick: () => te(e),
1799
+ children: "Redo"
1800
+ })] }),
1801
+ b("delete") && /* @__PURE__ */ K("button", {
1802
+ type: "button",
1803
+ style: $,
1804
+ disabled: !l,
1805
+ onClick: () => l && E(e, l),
1806
+ children: "Delete"
1807
+ }),
1808
+ b("reset") && /* @__PURE__ */ K("button", {
1809
+ type: "button",
1810
+ style: $,
1811
+ onClick: () => w(e),
1812
+ children: "Reset"
1813
+ })
1814
+ ]
1815
+ }),
1816
+ /* @__PURE__ */ K("div", {
1817
+ ref: p,
1818
+ style: {
1819
+ position: "relative",
1820
+ width: "100%",
1821
+ aspectRatio: `${v - g} / ${y - _}`
1822
+ },
1823
+ children: m.width > 0 && m.height > 0 && /* @__PURE__ */ K("div", {
1824
+ style: {
1825
+ position: "absolute",
1826
+ inset: 0
1827
+ },
1828
+ children: /* @__PURE__ */ K(yt, {
1829
+ store: e,
1830
+ size: m,
1831
+ validationFeedback: d,
1832
+ focusedGoalId: f
1833
+ })
1834
+ })
1835
+ }),
1836
+ /* @__PURE__ */ K("p", {
1837
+ role: "status",
1838
+ children: x
1839
+ }),
1840
+ /* @__PURE__ */ K(jt, {
1841
+ store: e,
1842
+ validationFeedback: d,
1843
+ focusedGoalId: f
1844
+ })
1845
+ ]
1846
+ });
1847
+ }
1848
+ //#endregion
1849
+ export { Ce as C, Se as S, Je as _, Mt as a, Ue as b, xt as c, pt as d, Z as f, Xe as g, nt as h, jt as i, yt as l, rt as m, Ht as n, kt as o, ft as p, At as r, bt as s, Wt as t, Q as u, qe as v, De as x, J as y };
1850
+
1851
+ //# sourceMappingURL=react-BEcdx1f6.js.map