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