@mathscan/geometry-engine 0.1.0 → 0.1.1

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 (238) hide show
  1. package/README.md +24 -7
  2. package/dist/core.cjs +1 -1
  3. package/dist/core.mjs +4 -4
  4. package/dist/entries/core.d.cts +1 -1
  5. package/dist/entries/core.d.ts +1 -1
  6. package/dist/entries/core.d.ts.map +1 -1
  7. package/dist/exercise.schema-Bma3qN9P.js +251 -0
  8. package/dist/exercise.schema-Bma3qN9P.js.map +1 -0
  9. package/dist/exercise.schema-Oj5ZH-yO.cjs +2 -0
  10. package/dist/exercise.schema-Oj5ZH-yO.cjs.map +1 -0
  11. package/dist/exerciseLoad-Db9Cigxi.cjs +2 -0
  12. package/dist/exerciseLoad-Db9Cigxi.cjs.map +1 -0
  13. package/dist/{geometryAttemptStatus-5L_q6-9l.js → exerciseLoad-DgeDXYbf.js} +84 -71
  14. package/dist/exerciseLoad-DgeDXYbf.js.map +1 -0
  15. package/dist/geometry/entities/angle.d.cts +56 -0
  16. package/dist/geometry/entities/angle.d.ts +57 -0
  17. package/dist/geometry/entities/angle.d.ts.map +1 -0
  18. package/dist/geometry/entities/circle.d.ts.map +1 -1
  19. package/dist/geometry/entities/index.d.cts +8 -4
  20. package/dist/geometry/entities/index.d.ts +8 -4
  21. package/dist/geometry/entities/index.d.ts.map +1 -1
  22. package/dist/geometry/entities/line.d.ts.map +1 -1
  23. package/dist/geometry/entities/point.d.ts.map +1 -1
  24. package/dist/geometry/entities/relations.d.cts +8 -1
  25. package/dist/geometry/entities/relations.d.ts +8 -1
  26. package/dist/geometry/entities/relations.d.ts.map +1 -1
  27. package/dist/geometry/entities/segment.d.ts.map +1 -1
  28. package/dist/geometry/entityModel.d.cts +21 -3
  29. package/dist/geometry/entityModel.d.ts +21 -3
  30. package/dist/geometry/entityModel.d.ts.map +1 -1
  31. package/dist/geometryState.schema-B5ccMKDa.cjs +2 -0
  32. package/dist/geometryState.schema-B5ccMKDa.cjs.map +1 -0
  33. package/dist/geometryState.schema-CKFPlX8j.js +1177 -0
  34. package/dist/geometryState.schema-CKFPlX8j.js.map +1 -0
  35. package/dist/goals-BlSeniyt.js +563 -0
  36. package/dist/goals-BlSeniyt.js.map +1 -0
  37. package/dist/goals-DLbmBZD8.cjs +2 -0
  38. package/dist/goals-DLbmBZD8.cjs.map +1 -0
  39. package/dist/index.cjs +1 -1
  40. package/dist/index.mjs +8 -8
  41. package/dist/measure/angleType.d.cts +2 -0
  42. package/dist/measure/angleType.d.ts +3 -0
  43. package/dist/measure/angleType.d.ts.map +1 -0
  44. package/dist/measure/geometryAdapter.d.cts +3 -0
  45. package/dist/measure/geometryAdapter.d.ts +3 -0
  46. package/dist/measure/geometryAdapter.d.ts.map +1 -1
  47. package/dist/react-B26_e52I.cjs +2 -0
  48. package/dist/react-B26_e52I.cjs.map +1 -0
  49. package/dist/{react-BEcdx1f6.js → react-B5cGaxH8.js} +738 -513
  50. package/dist/react-B5cGaxH8.js.map +1 -0
  51. package/dist/react.cjs +1 -1
  52. package/dist/react.mjs +1 -1
  53. package/dist/renderer/GeometryCanvas.d.ts.map +1 -1
  54. package/dist/renderer/StudentGeometryCanvas.d.ts.map +1 -1
  55. package/dist/renderer/Toolbar.d.ts.map +1 -1
  56. package/dist/renderer/angleMeasure.d.cts +14 -0
  57. package/dist/renderer/angleMeasure.d.ts +15 -0
  58. package/dist/renderer/angleMeasure.d.ts.map +1 -0
  59. package/dist/renderer/deriveRenderableGeometry.d.cts +1 -0
  60. package/dist/renderer/deriveRenderableGeometry.d.ts +1 -0
  61. package/dist/renderer/deriveRenderableGeometry.d.ts.map +1 -1
  62. package/dist/renderer/deriveSemanticScene.d.ts.map +1 -1
  63. package/dist/renderer/dragSnap.d.cts +14 -0
  64. package/dist/renderer/dragSnap.d.ts +15 -0
  65. package/dist/renderer/dragSnap.d.ts.map +1 -0
  66. package/dist/renderer/shapes/AngleShape.d.cts +19 -0
  67. package/dist/renderer/shapes/AngleShape.d.ts +20 -0
  68. package/dist/renderer/shapes/AngleShape.d.ts.map +1 -0
  69. package/dist/renderer/shapes/EntityLabel.d.cts +9 -1
  70. package/dist/renderer/shapes/EntityLabel.d.ts +9 -1
  71. package/dist/renderer/shapes/EntityLabel.d.ts.map +1 -1
  72. package/dist/renderer/shapes/EntityShape.d.cts +2 -1
  73. package/dist/renderer/shapes/EntityShape.d.ts +2 -1
  74. package/dist/renderer/shapes/EntityShape.d.ts.map +1 -1
  75. package/dist/renderer/useConnectionPreview.d.cts +12 -1
  76. package/dist/renderer/useConnectionPreview.d.ts +12 -1
  77. package/dist/renderer/useConnectionPreview.d.ts.map +1 -1
  78. package/dist/renderer/usePointerGestures.d.cts +1 -1
  79. package/dist/renderer/usePointerGestures.d.ts +1 -1
  80. package/dist/renderer/usePointerGestures.d.ts.map +1 -1
  81. package/dist/schemas/entityDefinition.schema.d.cts +7 -0
  82. package/dist/schemas/entityDefinition.schema.d.ts +7 -0
  83. package/dist/schemas/entityDefinition.schema.d.ts.map +1 -1
  84. package/dist/schemas/entityDocument.d.cts +34 -13
  85. package/dist/schemas/entityDocument.d.ts +34 -13
  86. package/dist/schemas/entityDocument.d.ts.map +1 -1
  87. package/dist/schemas/entityPresentation.schema.d.cts +3 -0
  88. package/dist/schemas/entityPresentation.schema.d.ts +3 -0
  89. package/dist/schemas/entityPresentation.schema.d.ts.map +1 -1
  90. package/dist/schemas/exercise.schema.d.cts +80 -2
  91. package/dist/schemas/exercise.schema.d.ts +80 -2
  92. package/dist/schemas/exercise.schema.d.ts.map +1 -1
  93. package/dist/schemas/exerciseV2.schema.d.cts +57 -0
  94. package/dist/schemas/exerciseV2.schema.d.ts +57 -0
  95. package/dist/schemas/exerciseV2.schema.d.ts.map +1 -1
  96. package/dist/schemas/exerciseV4.schema.d.cts +168 -0
  97. package/dist/schemas/exerciseV4.schema.d.ts +169 -0
  98. package/dist/schemas/exerciseV4.schema.d.ts.map +1 -0
  99. package/dist/schemas/geometryState.schema.d.cts +8 -0
  100. package/dist/schemas/geometryState.schema.d.ts +8 -0
  101. package/dist/schemas/geometryState.schema.d.ts.map +1 -1
  102. package/dist/schemas/goals/angleBisectorGoal.schema.d.cts +15 -0
  103. package/dist/schemas/goals/angleBisectorGoal.schema.d.ts +16 -0
  104. package/dist/schemas/goals/angleBisectorGoal.schema.d.ts.map +1 -0
  105. package/dist/schemas/goals/angleCriterion.schema.d.cts +28 -0
  106. package/dist/schemas/goals/angleCriterion.schema.d.ts +29 -0
  107. package/dist/schemas/goals/angleCriterion.schema.d.ts.map +1 -0
  108. package/dist/schemas/goals/angleMeasureGoal.schema.d.cts +26 -0
  109. package/dist/schemas/goals/angleMeasureGoal.schema.d.ts +27 -0
  110. package/dist/schemas/goals/angleMeasureGoal.schema.d.ts.map +1 -0
  111. package/dist/schemas/goals/createGoal.schema.d.cts +1 -0
  112. package/dist/schemas/goals/createGoal.schema.d.ts +1 -0
  113. package/dist/schemas/goals/createGoal.schema.d.ts.map +1 -1
  114. package/dist/schemas/goals/geometryGoal.schema.d.cts +61 -0
  115. package/dist/schemas/goals/geometryGoal.schema.d.ts +61 -0
  116. package/dist/schemas/goals/geometryGoal.schema.d.ts.map +1 -1
  117. package/dist/schemas/goals/givenAngleGoal.schema.d.cts +35 -0
  118. package/dist/schemas/goals/givenAngleGoal.schema.d.ts +36 -0
  119. package/dist/schemas/goals/givenAngleGoal.schema.d.ts.map +1 -0
  120. package/dist/schemas/goals/goalKindDeclaration.d.cts +7 -0
  121. package/dist/schemas/goals/goalKindDeclaration.d.ts +7 -0
  122. package/dist/schemas/goals/goalKindDeclaration.d.ts.map +1 -1
  123. package/dist/schemas/goals/parallelGoal.schema.d.cts +1 -0
  124. package/dist/schemas/goals/parallelGoal.schema.d.ts +1 -0
  125. package/dist/schemas/goals/parallelGoal.schema.d.ts.map +1 -1
  126. package/dist/schemas/goals/perpendicularGoal.schema.d.cts +1 -0
  127. package/dist/schemas/goals/perpendicularGoal.schema.d.ts +1 -0
  128. package/dist/schemas/goals/perpendicularGoal.schema.d.ts.map +1 -1
  129. package/dist/schemas/goals/throughPointsGoal.schema.d.cts +1 -0
  130. package/dist/schemas/goals/throughPointsGoal.schema.d.ts +1 -0
  131. package/dist/schemas/goals/throughPointsGoal.schema.d.ts.map +1 -1
  132. package/dist/schemas/objectTypeName.schema.d.cts +1 -0
  133. package/dist/schemas/objectTypeName.schema.d.ts +1 -0
  134. package/dist/schemas/objectTypeName.schema.d.ts.map +1 -1
  135. package/dist/schemas/v2ToV3.d.cts +15 -1
  136. package/dist/schemas/v2ToV3.d.ts +15 -1
  137. package/dist/schemas/v2ToV3.d.ts.map +1 -1
  138. package/dist/schemas/v3ToV4.d.cts +2 -1
  139. package/dist/schemas/v3ToV4.d.ts +2 -1
  140. package/dist/schemas/v3ToV4.d.ts.map +1 -1
  141. package/dist/schemas/v4ToV5.d.cts +7 -0
  142. package/dist/schemas/v4ToV5.d.ts +8 -0
  143. package/dist/schemas/v4ToV5.d.ts.map +1 -0
  144. package/dist/schemas.cjs +1 -1
  145. package/dist/schemas.mjs +3 -3
  146. package/dist/snapping/computeDragSnap.d.cts +30 -0
  147. package/dist/snapping/computeDragSnap.d.ts +31 -0
  148. package/dist/snapping/computeDragSnap.d.ts.map +1 -0
  149. package/dist/state/geometryContext.d.ts.map +1 -1
  150. package/dist/store/attemptChange.d.cts +1 -1
  151. package/dist/store/attemptChange.d.ts +1 -1
  152. package/dist/store/attemptChange.d.ts.map +1 -1
  153. package/dist/store/constructionCommand.d.cts +14 -2
  154. package/dist/store/constructionCommand.d.ts +14 -2
  155. package/dist/store/constructionCommand.d.ts.map +1 -1
  156. package/dist/store/constructionIdentity.d.cts +9 -0
  157. package/dist/store/constructionIdentity.d.ts +9 -0
  158. package/dist/store/constructionIdentity.d.ts.map +1 -1
  159. package/dist/store/studentStore.d.cts +7 -0
  160. package/dist/store/studentStore.d.ts +7 -0
  161. package/dist/store/studentStore.d.ts.map +1 -1
  162. package/dist/store/teacherStore.d.cts +16 -0
  163. package/dist/store/teacherStore.d.ts +16 -0
  164. package/dist/store/teacherStore.d.ts.map +1 -1
  165. package/dist/{studentStore-CEKTtMCh.js → studentStore-CyYa0N93.js} +502 -370
  166. package/dist/studentStore-CyYa0N93.js.map +1 -0
  167. package/dist/studentStore-ubldy4PJ.cjs +2 -0
  168. package/dist/studentStore-ubldy4PJ.cjs.map +1 -0
  169. package/dist/validation/getGeometryExerciseWarnings.d.cts +3 -2
  170. package/dist/validation/getGeometryExerciseWarnings.d.ts +3 -2
  171. package/dist/validation/getGeometryExerciseWarnings.d.ts.map +1 -1
  172. package/dist/validation/goals/angleBisector.d.cts +3 -0
  173. package/dist/validation/goals/angleBisector.d.ts +4 -0
  174. package/dist/validation/goals/angleBisector.d.ts.map +1 -0
  175. package/dist/validation/goals/angleCriterion.d.cts +12 -0
  176. package/dist/validation/goals/angleCriterion.d.ts +13 -0
  177. package/dist/validation/goals/angleCriterion.d.ts.map +1 -0
  178. package/dist/validation/goals/angleMeasure.d.cts +9 -0
  179. package/dist/validation/goals/angleMeasure.d.ts +10 -0
  180. package/dist/validation/goals/angleMeasure.d.ts.map +1 -0
  181. package/dist/validation/goals/create.d.cts +2 -2
  182. package/dist/validation/goals/create.d.ts +2 -2
  183. package/dist/validation/goals/create.d.ts.map +1 -1
  184. package/dist/validation/goals/givenAngle.d.cts +11 -0
  185. package/dist/validation/goals/givenAngle.d.ts +12 -0
  186. package/dist/validation/goals/givenAngle.d.ts.map +1 -0
  187. package/dist/validation/goals/goalKindHandler.d.cts +38 -1
  188. package/dist/validation/goals/goalKindHandler.d.ts +38 -1
  189. package/dist/validation/goals/goalKindHandler.d.ts.map +1 -1
  190. package/dist/validation/goals/index.d.cts +9 -2
  191. package/dist/validation/goals/index.d.ts +9 -2
  192. package/dist/validation/goals/index.d.ts.map +1 -1
  193. package/dist/validation/goals/midpoint.d.cts +2 -2
  194. package/dist/validation/goals/midpoint.d.ts +2 -2
  195. package/dist/validation/goals/midpoint.d.ts.map +1 -1
  196. package/dist/validation/goals/parallel.d.cts +2 -2
  197. package/dist/validation/goals/parallel.d.ts +2 -2
  198. package/dist/validation/goals/parallel.d.ts.map +1 -1
  199. package/dist/validation/goals/perpendicular.d.cts +2 -2
  200. package/dist/validation/goals/perpendicular.d.ts +2 -2
  201. package/dist/validation/goals/perpendicular.d.ts.map +1 -1
  202. package/dist/validation/goals/segmentLength.d.cts +2 -2
  203. package/dist/validation/goals/segmentLength.d.ts +2 -2
  204. package/dist/validation/goals/segmentLength.d.ts.map +1 -1
  205. package/dist/validation/goals/throughPoints.d.cts +2 -2
  206. package/dist/validation/goals/throughPoints.d.ts +2 -2
  207. package/dist/validation/goals/throughPoints.d.ts.map +1 -1
  208. package/dist/validation/types.d.cts +5 -1
  209. package/dist/validation/types.d.ts +5 -1
  210. package/dist/validation/types.d.ts.map +1 -1
  211. package/dist/validation/validateGeometryState.d.ts.map +1 -1
  212. package/dist/validation/validateGeometryStateInput.d.ts.map +1 -1
  213. package/dist/validation.cjs +1 -1
  214. package/dist/validation.cjs.map +1 -1
  215. package/dist/validation.mjs +106 -85
  216. package/dist/validation.mjs.map +1 -1
  217. package/package.json +1 -1
  218. package/dist/exercise.schema-BV2b7rtN.cjs +0 -2
  219. package/dist/exercise.schema-BV2b7rtN.cjs.map +0 -1
  220. package/dist/exercise.schema-ckVBW9XA.js +0 -212
  221. package/dist/exercise.schema-ckVBW9XA.js.map +0 -1
  222. package/dist/geometryAttemptStatus-5L_q6-9l.js.map +0 -1
  223. package/dist/geometryAttemptStatus-N_XHIkiS.cjs +0 -2
  224. package/dist/geometryAttemptStatus-N_XHIkiS.cjs.map +0 -1
  225. package/dist/geometryState.schema-D0ixyGYE.js +0 -955
  226. package/dist/geometryState.schema-D0ixyGYE.js.map +0 -1
  227. package/dist/geometryState.schema-DKQ-durx.cjs +0 -2
  228. package/dist/geometryState.schema-DKQ-durx.cjs.map +0 -1
  229. package/dist/goals-C3ZwbEh_.js +0 -451
  230. package/dist/goals-C3ZwbEh_.js.map +0 -1
  231. package/dist/goals-CxR5qPDC.cjs +0 -2
  232. package/dist/goals-CxR5qPDC.cjs.map +0 -1
  233. package/dist/react-BEcdx1f6.js.map +0 -1
  234. package/dist/react-Pp_VSk--.cjs +0 -2
  235. package/dist/react-Pp_VSk--.cjs.map +0 -1
  236. package/dist/studentStore-CEKTtMCh.js.map +0 -1
  237. package/dist/studentStore-DLftfFAl.cjs +0 -2
  238. package/dist/studentStore-DLftfFAl.cjs.map +0 -1
@@ -1,955 +0,0 @@
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