@xom11/whiteboard 0.30.0 → 0.31.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ai.d.mts +226 -32
- package/dist/ai.d.ts +226 -32
- package/dist/ai.js +5126 -351
- package/dist/ai.js.map +1 -1
- package/dist/ai.mjs +4970 -352
- package/dist/ai.mjs.map +1 -1
- package/dist/catalog.json +5 -5
- package/dist/{chunk-V3YJ6JFL.mjs → chunk-44JY2AKC.mjs} +3 -3
- package/dist/{chunk-V3YJ6JFL.mjs.map → chunk-44JY2AKC.mjs.map} +1 -1
- package/dist/{chunk-XVVLT6B3.mjs → chunk-BMYC2ILT.mjs} +4 -4
- package/dist/{chunk-XVVLT6B3.mjs.map → chunk-BMYC2ILT.mjs.map} +1 -1
- package/dist/{chunk-PPKHCRRE.mjs → chunk-C76SOFXF.mjs} +3 -3
- package/dist/{chunk-PPKHCRRE.mjs.map → chunk-C76SOFXF.mjs.map} +1 -1
- package/dist/{chunk-IHUFOV7L.mjs → chunk-CH6SFONH.mjs} +15 -3
- package/dist/chunk-CH6SFONH.mjs.map +1 -0
- package/dist/{chunk-SF3U7ZF4.mjs → chunk-DWIEVCGK.mjs} +180 -15
- package/dist/chunk-DWIEVCGK.mjs.map +1 -0
- package/dist/{chunk-SZDAS7LK.mjs → chunk-IE2GGHNF.mjs} +131 -81
- package/dist/chunk-IE2GGHNF.mjs.map +1 -0
- package/dist/{chunk-ZTQBUKLJ.mjs → chunk-JJ4FPCBE.mjs} +142 -22
- package/dist/chunk-JJ4FPCBE.mjs.map +1 -0
- package/dist/{chunk-QRUAEXLR.mjs → chunk-K5BS2H56.mjs} +5 -5
- package/dist/{chunk-QRUAEXLR.mjs.map → chunk-K5BS2H56.mjs.map} +1 -1
- package/dist/{chunk-BNBOIDO5.mjs → chunk-K7VJU7LQ.mjs} +3 -3
- package/dist/{chunk-BNBOIDO5.mjs.map → chunk-K7VJU7LQ.mjs.map} +1 -1
- package/dist/{chunk-H22OZYTW.mjs → chunk-KOXOC2FI.mjs} +48 -39
- package/dist/chunk-KOXOC2FI.mjs.map +1 -0
- package/dist/{chunk-CXHNVYMD.mjs → chunk-KWDBVLST.mjs} +5 -5
- package/dist/{chunk-CXHNVYMD.mjs.map → chunk-KWDBVLST.mjs.map} +1 -1
- package/dist/{chunk-OQIQNKPQ.mjs → chunk-LTLLQUMN.mjs} +4 -4
- package/dist/{chunk-OQIQNKPQ.mjs.map → chunk-LTLLQUMN.mjs.map} +1 -1
- package/dist/{chunk-QGNU34T7.mjs → chunk-QLQ4MJNO.mjs} +10 -4
- package/dist/chunk-QLQ4MJNO.mjs.map +1 -0
- package/dist/{chunk-BU5KLO3P.mjs → chunk-T3N4BSJV.mjs} +4 -4
- package/dist/{chunk-BU5KLO3P.mjs.map → chunk-T3N4BSJV.mjs.map} +1 -1
- package/dist/{chunk-5JM35CXV.mjs → chunk-TMRFSOM7.mjs} +4 -4
- package/dist/{chunk-5JM35CXV.mjs.map → chunk-TMRFSOM7.mjs.map} +1 -1
- package/dist/geometry-2d.d.mts +1 -1
- package/dist/geometry-2d.d.ts +1 -1
- package/dist/geometry-2d.js +449 -172
- package/dist/geometry-2d.js.map +1 -1
- package/dist/geometry-2d.mjs +5 -5
- package/dist/geometry-3d.d.mts +1 -1
- package/dist/geometry-3d.d.ts +1 -1
- package/dist/geometry-3d.js +172 -22
- package/dist/geometry-3d.js.map +1 -1
- package/dist/geometry-3d.mjs +4 -4
- package/dist/graph-2d.d.mts +1 -1
- package/dist/graph-2d.d.ts +1 -1
- package/dist/graph-2d.js +307 -100
- package/dist/graph-2d.js.map +1 -1
- package/dist/graph-2d.mjs +7 -7
- package/dist/{host-HOSJHQ5H.mjs → host-4FIUNIDQ.mjs} +13 -12
- package/dist/host-4FIUNIDQ.mjs.map +1 -0
- package/dist/{host-2ISGVO7O.mjs → host-4ZB4XD4S.mjs} +9 -8
- package/dist/host-4ZB4XD4S.mjs.map +1 -0
- package/dist/{host-ZQCDAT6O.mjs → host-H2IGOKJU.mjs} +3 -3
- package/dist/{host-ZQCDAT6O.mjs.map → host-H2IGOKJU.mjs.map} +1 -1
- package/dist/{host-3UFGFMJ2.mjs → host-KMWP7KBT.mjs} +90 -43
- package/dist/host-KMWP7KBT.mjs.map +1 -0
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +453 -174
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +21 -21
- package/dist/latex.d.mts +1 -1
- package/dist/latex.d.ts +1 -1
- package/dist/latex.js +8 -2
- package/dist/latex.js.map +1 -1
- package/dist/latex.mjs +1 -1
- package/dist/render-NMS7OAV6.mjs +10 -0
- package/dist/{render-ZX2O2IK7.mjs.map → render-NMS7OAV6.mjs.map} +1 -1
- package/dist/serialize-PGHQZEPV.mjs +9 -0
- package/dist/{serialize-N4G6RFBB.mjs.map → serialize-PGHQZEPV.mjs.map} +1 -1
- package/dist/{types-C3FjpoUi.d.ts → types-tePd94vW.d.mts} +8 -0
- package/dist/{types-C3FjpoUi.d.mts → types-tePd94vW.d.ts} +8 -0
- package/package.json +1 -1
- package/dist/chunk-H22OZYTW.mjs.map +0 -1
- package/dist/chunk-IHUFOV7L.mjs.map +0 -1
- package/dist/chunk-QGNU34T7.mjs.map +0 -1
- package/dist/chunk-SF3U7ZF4.mjs.map +0 -1
- package/dist/chunk-SZDAS7LK.mjs.map +0 -1
- package/dist/chunk-ZTQBUKLJ.mjs.map +0 -1
- package/dist/host-2ISGVO7O.mjs.map +0 -1
- package/dist/host-3UFGFMJ2.mjs.map +0 -1
- package/dist/host-HOSJHQ5H.mjs.map +0 -1
- package/dist/render-ZX2O2IK7.mjs +0 -10
- package/dist/serialize-N4G6RFBB.mjs +0 -9
|
@@ -122,6 +122,8 @@ var freeModule = defineModule({
|
|
|
122
122
|
y: z.number().finite()
|
|
123
123
|
}),
|
|
124
124
|
collectRefs: () => [],
|
|
125
|
+
refSpecs: [],
|
|
126
|
+
// không có ref — khai rỗng để registry-handled tường minh
|
|
125
127
|
emit: (e, ctx) => [{
|
|
126
128
|
role: "primary",
|
|
127
129
|
object: emitPointObject(ctx.resolveId(e.name), e.name, { kind: "free", x: e.x, y: e.y })
|
|
@@ -140,6 +142,10 @@ var midpointModule = defineModule({
|
|
|
140
142
|
visible: z.boolean().optional()
|
|
141
143
|
}),
|
|
142
144
|
collectRefs: (e) => [e.p1, e.p2],
|
|
145
|
+
refSpecs: [
|
|
146
|
+
{ field: "p1", role: "point" },
|
|
147
|
+
{ field: "p2", role: "point" }
|
|
148
|
+
],
|
|
143
149
|
emit: (e, ctx) => [{
|
|
144
150
|
role: "primary",
|
|
145
151
|
object: emitPointObject(
|
|
@@ -150,6 +156,29 @@ var midpointModule = defineModule({
|
|
|
150
156
|
)
|
|
151
157
|
}]
|
|
152
158
|
});
|
|
159
|
+
var onPerpBisectorModule = defineModule({
|
|
160
|
+
kind: "onPerpBisector",
|
|
161
|
+
role: "point",
|
|
162
|
+
category: "points",
|
|
163
|
+
prefix: "p",
|
|
164
|
+
schema: z.object({
|
|
165
|
+
name: NameZ,
|
|
166
|
+
kind: z.literal("onPerpBisector"),
|
|
167
|
+
p1: NameZ,
|
|
168
|
+
p2: NameZ,
|
|
169
|
+
t: z.number().optional()
|
|
170
|
+
}),
|
|
171
|
+
collectRefs: (e) => [e.p1, e.p2],
|
|
172
|
+
emit: (e, ctx) => [{
|
|
173
|
+
role: "primary",
|
|
174
|
+
object: emitPointObject(ctx.resolveId(e.name), e.name, {
|
|
175
|
+
kind: "onPerpBisector",
|
|
176
|
+
p1: ctx.resolveId(e.p1),
|
|
177
|
+
p2: ctx.resolveId(e.p2),
|
|
178
|
+
t: e.t ?? 3
|
|
179
|
+
})
|
|
180
|
+
}]
|
|
181
|
+
});
|
|
153
182
|
var onSegmentModule = defineModule({
|
|
154
183
|
kind: "onSegment",
|
|
155
184
|
role: "point",
|
|
@@ -162,6 +191,7 @@ var onSegmentModule = defineModule({
|
|
|
162
191
|
t: z.number().min(0).max(1)
|
|
163
192
|
}),
|
|
164
193
|
collectRefs: (e) => [e.segmentId],
|
|
194
|
+
refSpecs: [{ field: "segmentId", role: "segment" }],
|
|
165
195
|
emit: (e, ctx) => [{
|
|
166
196
|
role: "primary",
|
|
167
197
|
object: emitPointObject(
|
|
@@ -183,6 +213,7 @@ var onLineModule = defineModule({
|
|
|
183
213
|
t: z.number().finite()
|
|
184
214
|
}),
|
|
185
215
|
collectRefs: (e) => [e.lineId],
|
|
216
|
+
refSpecs: [{ field: "lineId", role: "line-like" }],
|
|
186
217
|
emit: (e, ctx) => [{
|
|
187
218
|
role: "primary",
|
|
188
219
|
object: emitPointObject(
|
|
@@ -204,6 +235,7 @@ var onCircleModule = defineModule({
|
|
|
204
235
|
theta: z.number().finite()
|
|
205
236
|
}),
|
|
206
237
|
collectRefs: (e) => [e.circleId],
|
|
238
|
+
refSpecs: [{ field: "circleId", role: "circle" }],
|
|
207
239
|
emit: (e, ctx) => [{
|
|
208
240
|
role: "primary",
|
|
209
241
|
object: emitPointObject(
|
|
@@ -225,6 +257,10 @@ var perpFootModule = defineModule({
|
|
|
225
257
|
onLine: NameZ
|
|
226
258
|
}),
|
|
227
259
|
collectRefs: (e) => [e.from, e.onLine],
|
|
260
|
+
refSpecs: [
|
|
261
|
+
{ field: "from", role: "point" },
|
|
262
|
+
{ field: "onLine", role: "line-like" }
|
|
263
|
+
],
|
|
228
264
|
emit: (e, ctx) => [{
|
|
229
265
|
role: "primary",
|
|
230
266
|
object: emitPointObject(
|
|
@@ -245,6 +281,7 @@ var circumcenterModule = defineModule({
|
|
|
245
281
|
vertices: z.tuple([NameZ, NameZ, NameZ])
|
|
246
282
|
}),
|
|
247
283
|
collectRefs: (e) => [...e.vertices],
|
|
284
|
+
refSpecs: [{ field: "vertices", role: "point", many: true }],
|
|
248
285
|
emit: (e, ctx) => [{
|
|
249
286
|
role: "primary",
|
|
250
287
|
object: emitPointObject(
|
|
@@ -265,6 +302,7 @@ var incenterModule = defineModule({
|
|
|
265
302
|
vertices: z.tuple([NameZ, NameZ, NameZ])
|
|
266
303
|
}),
|
|
267
304
|
collectRefs: (e) => [...e.vertices],
|
|
305
|
+
refSpecs: [{ field: "vertices", role: "point", many: true }],
|
|
268
306
|
emit: (e, ctx) => [{
|
|
269
307
|
role: "primary",
|
|
270
308
|
object: emitPointObject(
|
|
@@ -285,6 +323,7 @@ var centroidModule = defineModule({
|
|
|
285
323
|
vertices: z.tuple([NameZ, NameZ, NameZ])
|
|
286
324
|
}),
|
|
287
325
|
collectRefs: (e) => [...e.vertices],
|
|
326
|
+
refSpecs: [{ field: "vertices", role: "point", many: true }],
|
|
288
327
|
emit: (e, ctx) => [{
|
|
289
328
|
role: "primary",
|
|
290
329
|
object: emitPointObject(
|
|
@@ -305,6 +344,7 @@ var orthocenterModule = defineModule({
|
|
|
305
344
|
vertices: z.tuple([NameZ, NameZ, NameZ])
|
|
306
345
|
}),
|
|
307
346
|
collectRefs: (e) => [...e.vertices],
|
|
347
|
+
refSpecs: [{ field: "vertices", role: "point", many: true }],
|
|
308
348
|
emit: (e, ctx) => [{
|
|
309
349
|
role: "primary",
|
|
310
350
|
object: emitPointObject(
|
|
@@ -327,6 +367,10 @@ var intersectionModule = defineModule({
|
|
|
327
367
|
branch: z.union([z.literal(0), z.literal(1)]).optional()
|
|
328
368
|
}),
|
|
329
369
|
collectRefs: (e) => [e.ref1, e.ref2],
|
|
370
|
+
refSpecs: [
|
|
371
|
+
{ field: "ref1", role: "line-or-circle" },
|
|
372
|
+
{ field: "ref2", role: "line-or-circle" }
|
|
373
|
+
],
|
|
330
374
|
emit: (e, ctx) => {
|
|
331
375
|
const r1IsCircle = ctx.hintOf(e.ref1) === "circle";
|
|
332
376
|
const r2IsCircle = ctx.hintOf(e.ref2) === "circle";
|
|
@@ -366,6 +410,10 @@ var segmentModule = defineModule({
|
|
|
366
410
|
p2: NameZ
|
|
367
411
|
}),
|
|
368
412
|
collectRefs: (e) => [e.p1, e.p2],
|
|
413
|
+
refSpecs: [
|
|
414
|
+
{ field: "p1", role: "point" },
|
|
415
|
+
{ field: "p2", role: "point" }
|
|
416
|
+
],
|
|
369
417
|
emit: (e, ctx) => [{
|
|
370
418
|
role: "primary",
|
|
371
419
|
object: {
|
|
@@ -389,6 +437,10 @@ var lineModule = defineModule({
|
|
|
389
437
|
p2: NameZ
|
|
390
438
|
}),
|
|
391
439
|
collectRefs: (e) => [e.p1, e.p2],
|
|
440
|
+
refSpecs: [
|
|
441
|
+
{ field: "p1", role: "point" },
|
|
442
|
+
{ field: "p2", role: "point" }
|
|
443
|
+
],
|
|
392
444
|
emit: (e, ctx) => [{
|
|
393
445
|
role: "primary",
|
|
394
446
|
object: {
|
|
@@ -412,6 +464,10 @@ var rayModule = defineModule({
|
|
|
412
464
|
through: NameZ
|
|
413
465
|
}),
|
|
414
466
|
collectRefs: (e) => [e.origin, e.through],
|
|
467
|
+
refSpecs: [
|
|
468
|
+
{ field: "origin", role: "point" },
|
|
469
|
+
{ field: "through", role: "point" }
|
|
470
|
+
],
|
|
415
471
|
emit: (e, ctx) => [{
|
|
416
472
|
role: "primary",
|
|
417
473
|
object: {
|
|
@@ -435,6 +491,10 @@ var perpendicularModule = defineModule({
|
|
|
435
491
|
toLine: NameZ
|
|
436
492
|
}),
|
|
437
493
|
collectRefs: (e) => [e.throughPoint, e.toLine],
|
|
494
|
+
refSpecs: [
|
|
495
|
+
{ field: "throughPoint", role: "point" },
|
|
496
|
+
{ field: "toLine", role: "line-like" }
|
|
497
|
+
],
|
|
438
498
|
emit: (e, ctx) => [{
|
|
439
499
|
role: "primary",
|
|
440
500
|
object: {
|
|
@@ -464,6 +524,10 @@ var parallelModule = defineModule({
|
|
|
464
524
|
toLine: NameZ
|
|
465
525
|
}),
|
|
466
526
|
collectRefs: (e) => [e.throughPoint, e.toLine],
|
|
527
|
+
refSpecs: [
|
|
528
|
+
{ field: "throughPoint", role: "point" },
|
|
529
|
+
{ field: "toLine", role: "line-like" }
|
|
530
|
+
],
|
|
467
531
|
emit: (e, ctx) => [{
|
|
468
532
|
role: "primary",
|
|
469
533
|
object: {
|
|
@@ -493,6 +557,10 @@ var perpBisectorModule = defineModule({
|
|
|
493
557
|
p2: NameZ
|
|
494
558
|
}),
|
|
495
559
|
collectRefs: (e) => [e.p1, e.p2],
|
|
560
|
+
refSpecs: [
|
|
561
|
+
{ field: "p1", role: "point" },
|
|
562
|
+
{ field: "p2", role: "point" }
|
|
563
|
+
],
|
|
496
564
|
emit: (e, ctx) => [{
|
|
497
565
|
role: "primary",
|
|
498
566
|
object: {
|
|
@@ -523,6 +591,11 @@ var angleBisectorModule = defineModule({
|
|
|
523
591
|
p2: NameZ
|
|
524
592
|
}),
|
|
525
593
|
collectRefs: (e) => [e.p1, e.vertex, e.p2],
|
|
594
|
+
refSpecs: [
|
|
595
|
+
{ field: "p1", role: "point" },
|
|
596
|
+
{ field: "vertex", role: "point" },
|
|
597
|
+
{ field: "p2", role: "point" }
|
|
598
|
+
],
|
|
526
599
|
emit: (e, ctx) => [{
|
|
527
600
|
role: "primary",
|
|
528
601
|
object: {
|
|
@@ -615,6 +688,10 @@ var tangentModule = defineModule({
|
|
|
615
688
|
branch: z.union([z.literal(0), z.literal(1), z.literal("on")]).optional()
|
|
616
689
|
}),
|
|
617
690
|
collectRefs: (e) => [e.throughPoint, e.toCircle],
|
|
691
|
+
refSpecs: [
|
|
692
|
+
{ field: "throughPoint", role: "point" },
|
|
693
|
+
{ field: "toCircle", role: "circle" }
|
|
694
|
+
],
|
|
618
695
|
emit: (e, ctx) => {
|
|
619
696
|
const construction = {
|
|
620
697
|
kind: "tangent",
|
|
@@ -645,6 +722,7 @@ var polygonModule = defineModule({
|
|
|
645
722
|
vertices: z.array(NameZ).min(3)
|
|
646
723
|
}),
|
|
647
724
|
collectRefs: (e) => [...e.vertices],
|
|
725
|
+
refSpecs: [{ field: "vertices", role: "point", many: true }],
|
|
648
726
|
emit: (e, ctx) => [{
|
|
649
727
|
role: "primary",
|
|
650
728
|
object: {
|
|
@@ -669,6 +747,10 @@ var circleCPModule = defineModule({
|
|
|
669
747
|
visible: z.boolean().optional()
|
|
670
748
|
}),
|
|
671
749
|
collectRefs: (e) => [e.center, e.surfacePoint],
|
|
750
|
+
refSpecs: [
|
|
751
|
+
{ field: "center", role: "point" },
|
|
752
|
+
{ field: "surfacePoint", role: "point" }
|
|
753
|
+
],
|
|
672
754
|
emit: (e, ctx) => [{
|
|
673
755
|
role: "primary",
|
|
674
756
|
object: {
|
|
@@ -694,6 +776,11 @@ var circle3Module = defineModule({
|
|
|
694
776
|
p3: NameZ
|
|
695
777
|
}),
|
|
696
778
|
collectRefs: (e) => [e.p1, e.p2, e.p3],
|
|
779
|
+
refSpecs: [
|
|
780
|
+
{ field: "p1", role: "point" },
|
|
781
|
+
{ field: "p2", role: "point" },
|
|
782
|
+
{ field: "p3", role: "point" }
|
|
783
|
+
],
|
|
697
784
|
emit: (e, ctx) => [{
|
|
698
785
|
role: "primary",
|
|
699
786
|
object: {
|
|
@@ -998,9 +1085,30 @@ var arcMidpointModule = defineModule({
|
|
|
998
1085
|
circle: NameZ,
|
|
999
1086
|
a: NameZ,
|
|
1000
1087
|
b: NameZ,
|
|
1001
|
-
notContaining
|
|
1088
|
+
// Đúng 1 trong notContaining / containing — bất biến cứng kiểm ở
|
|
1089
|
+
// scene-constraint validate (không .refine vì registry dựng
|
|
1090
|
+
// discriminatedUnion yêu cầu ZodObject thuần).
|
|
1091
|
+
notContaining: NameZ.optional(),
|
|
1092
|
+
containing: NameZ.optional()
|
|
1002
1093
|
}),
|
|
1003
|
-
collectRefs: (e) =>
|
|
1094
|
+
collectRefs: (e) => {
|
|
1095
|
+
const refs = [e.circle, e.a, e.b];
|
|
1096
|
+
const containment = e.notContaining ?? e.containing;
|
|
1097
|
+
if (containment) refs.push(containment);
|
|
1098
|
+
return refs;
|
|
1099
|
+
},
|
|
1100
|
+
// refSpecs động: notContaining/containing TỐI ĐA 1 — có thể không có (cung không mơ hồ).
|
|
1101
|
+
refSpecs: (e) => {
|
|
1102
|
+
const specs = [
|
|
1103
|
+
{ field: "circle", role: "circle" },
|
|
1104
|
+
{ field: "a", role: "point" },
|
|
1105
|
+
{ field: "b", role: "point" }
|
|
1106
|
+
];
|
|
1107
|
+
if (e.containing ?? e.notContaining) {
|
|
1108
|
+
specs.push({ field: e.containing ? "containing" : "notContaining", role: "point" });
|
|
1109
|
+
}
|
|
1110
|
+
return specs;
|
|
1111
|
+
},
|
|
1004
1112
|
emit: (e, ctx) => [{
|
|
1005
1113
|
role: "primary",
|
|
1006
1114
|
object: emitPointObject(ctx.resolveId(e.name), e.name, {
|
|
@@ -1008,7 +1116,8 @@ var arcMidpointModule = defineModule({
|
|
|
1008
1116
|
circle: ctx.resolveId(e.circle),
|
|
1009
1117
|
a: ctx.resolveId(e.a),
|
|
1010
1118
|
b: ctx.resolveId(e.b),
|
|
1011
|
-
notContaining:
|
|
1119
|
+
// notContaining/containing optional: cung KHÔNG mơ hồ (nửa đường tròn) → bỏ cả hai.
|
|
1120
|
+
...e.containing ? { containing: ctx.resolveId(e.containing) } : e.notContaining ? { notContaining: ctx.resolveId(e.notContaining) } : {}
|
|
1012
1121
|
})
|
|
1013
1122
|
}]
|
|
1014
1123
|
});
|
|
@@ -1024,6 +1133,10 @@ var excenterModule = defineModule({
|
|
|
1024
1133
|
opposite: NameZ
|
|
1025
1134
|
}),
|
|
1026
1135
|
collectRefs: (e) => [...e.vertices],
|
|
1136
|
+
refSpecs: [
|
|
1137
|
+
{ field: "vertices", role: "point", many: true },
|
|
1138
|
+
{ field: "opposite", role: "point" }
|
|
1139
|
+
],
|
|
1027
1140
|
emit: (e, ctx) => [{
|
|
1028
1141
|
role: "primary",
|
|
1029
1142
|
object: emitPointObject(ctx.resolveId(e.name), e.name, {
|
|
@@ -1033,6 +1146,27 @@ var excenterModule = defineModule({
|
|
|
1033
1146
|
})
|
|
1034
1147
|
}]
|
|
1035
1148
|
});
|
|
1149
|
+
var mixtilinearPointModule = defineModule({
|
|
1150
|
+
kind: "mixtilinearPoint",
|
|
1151
|
+
role: "point",
|
|
1152
|
+
category: "points",
|
|
1153
|
+
prefix: "p",
|
|
1154
|
+
schema: z.object({
|
|
1155
|
+
name: NameZ,
|
|
1156
|
+
kind: z.literal("mixtilinearPoint"),
|
|
1157
|
+
vertices: z.tuple([NameZ, NameZ, NameZ]),
|
|
1158
|
+
which: z.union([z.literal("center"), z.literal("touch")])
|
|
1159
|
+
}),
|
|
1160
|
+
collectRefs: (e) => [...e.vertices],
|
|
1161
|
+
emit: (e, ctx) => [{
|
|
1162
|
+
role: "primary",
|
|
1163
|
+
object: emitPointObject(ctx.resolveId(e.name), e.name, {
|
|
1164
|
+
kind: "mixtilinearPoint",
|
|
1165
|
+
vertices: resolveTriangleVertices(ctx, e.vertices),
|
|
1166
|
+
which: e.which
|
|
1167
|
+
})
|
|
1168
|
+
}]
|
|
1169
|
+
});
|
|
1036
1170
|
var reflectPointModule = defineModule({
|
|
1037
1171
|
kind: "reflectPoint",
|
|
1038
1172
|
role: "point",
|
|
@@ -1040,6 +1174,10 @@ var reflectPointModule = defineModule({
|
|
|
1040
1174
|
prefix: "p",
|
|
1041
1175
|
schema: z.object({ name: NameZ, kind: z.literal("reflectPoint"), of: NameZ, through: NameZ }),
|
|
1042
1176
|
collectRefs: (e) => [e.of, e.through],
|
|
1177
|
+
refSpecs: [
|
|
1178
|
+
{ field: "of", role: "point" },
|
|
1179
|
+
{ field: "through", role: "point" }
|
|
1180
|
+
],
|
|
1043
1181
|
emit: (e, ctx) => [{
|
|
1044
1182
|
role: "primary",
|
|
1045
1183
|
object: emitPointObject(ctx.resolveId(e.name), e.name, {
|
|
@@ -1056,6 +1194,10 @@ var reflectLineModule = defineModule({
|
|
|
1056
1194
|
prefix: "p",
|
|
1057
1195
|
schema: z.object({ name: NameZ, kind: z.literal("reflectLine"), of: NameZ, through: NameZ }),
|
|
1058
1196
|
collectRefs: (e) => [e.of, e.through],
|
|
1197
|
+
refSpecs: [
|
|
1198
|
+
{ field: "of", role: "point" },
|
|
1199
|
+
{ field: "through", role: "line-like" }
|
|
1200
|
+
],
|
|
1059
1201
|
emit: (e, ctx) => [{
|
|
1060
1202
|
role: "primary",
|
|
1061
1203
|
object: emitPointObject(ctx.resolveId(e.name), e.name, {
|
|
@@ -1097,12 +1239,25 @@ var pointAtDistanceModule = defineModule({
|
|
|
1097
1239
|
const extra = d.kind === "circleRadius" ? [d.circle] : d.kind === "segmentLength" ? [d.p1, d.p2] : [];
|
|
1098
1240
|
return [e.from, e.through, ...extra];
|
|
1099
1241
|
},
|
|
1100
|
-
//
|
|
1101
|
-
//
|
|
1102
|
-
refSpecs:
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1242
|
+
// refSpecs động: distance.{circle,p1,p2} nested validate qua dotted path
|
|
1243
|
+
// ('distance.circle' — runSpecs ở transpile/refs.ts đọc bằng reduce theo '.').
|
|
1244
|
+
refSpecs: (e) => {
|
|
1245
|
+
const base = [
|
|
1246
|
+
{ field: "from", role: "point" },
|
|
1247
|
+
{ field: "through", role: "point" }
|
|
1248
|
+
];
|
|
1249
|
+
if (e.distance.kind === "circleRadius") {
|
|
1250
|
+
return [...base, { field: "distance.circle", role: "circle" }];
|
|
1251
|
+
}
|
|
1252
|
+
if (e.distance.kind === "segmentLength") {
|
|
1253
|
+
return [
|
|
1254
|
+
...base,
|
|
1255
|
+
{ field: "distance.p1", role: "point" },
|
|
1256
|
+
{ field: "distance.p2", role: "point" }
|
|
1257
|
+
];
|
|
1258
|
+
}
|
|
1259
|
+
return base;
|
|
1260
|
+
},
|
|
1106
1261
|
emit: (e, ctx) => {
|
|
1107
1262
|
const d = e.distance;
|
|
1108
1263
|
const distance = d.kind === "circleRadius" ? withScaleOffset({ kind: "circleRadius", circle: ctx.resolveId(d.circle) }, d) : d.kind === "segmentLength" ? withScaleOffset({ kind: "segmentLength", p1: ctx.resolveId(d.p1), p2: ctx.resolveId(d.p2) }, d) : withScaleOffset({ kind: "literal", value: d.value }, d);
|
|
@@ -1122,6 +1277,7 @@ var pointAtDistanceModule = defineModule({
|
|
|
1122
1277
|
var ALL_MODULES = [
|
|
1123
1278
|
freeModule,
|
|
1124
1279
|
midpointModule,
|
|
1280
|
+
onPerpBisectorModule,
|
|
1125
1281
|
onSegmentModule,
|
|
1126
1282
|
onLineModule,
|
|
1127
1283
|
onCircleModule,
|
|
@@ -1158,6 +1314,7 @@ var ALL_MODULES = [
|
|
|
1158
1314
|
// Cụm A points
|
|
1159
1315
|
arcMidpointModule,
|
|
1160
1316
|
excenterModule,
|
|
1317
|
+
mixtilinearPointModule,
|
|
1161
1318
|
reflectPointModule,
|
|
1162
1319
|
reflectLineModule,
|
|
1163
1320
|
// Cụm B points
|
|
@@ -1294,8 +1451,11 @@ function serializePoint(obj, state) {
|
|
|
1294
1451
|
};
|
|
1295
1452
|
}
|
|
1296
1453
|
case "arcMidpoint": {
|
|
1297
|
-
const
|
|
1298
|
-
|
|
1454
|
+
const containment = c.containing ?? c.notContaining;
|
|
1455
|
+
const baseRefs = [c.circle, c.a, c.b];
|
|
1456
|
+
if (containment) baseRefs.push(containment);
|
|
1457
|
+
const refs = resolveRefs(baseRefs, state);
|
|
1458
|
+
if (!refs) return fail("unresolved-ref", baseRefs.join(","));
|
|
1299
1459
|
return {
|
|
1300
1460
|
ok: true,
|
|
1301
1461
|
entity: {
|
|
@@ -1304,7 +1464,7 @@ function serializePoint(obj, state) {
|
|
|
1304
1464
|
circle: refs[0],
|
|
1305
1465
|
a: refs[1],
|
|
1306
1466
|
b: refs[2],
|
|
1307
|
-
notContaining: refs[3]
|
|
1467
|
+
...c.containing ? { containing: refs[3] } : c.notContaining ? { notContaining: refs[3] } : {}
|
|
1308
1468
|
}
|
|
1309
1469
|
};
|
|
1310
1470
|
}
|
|
@@ -1348,6 +1508,7 @@ function serializePoint(obj, state) {
|
|
|
1348
1508
|
case "onPerpendicular":
|
|
1349
1509
|
case "onPerpBisector":
|
|
1350
1510
|
case "onCircleAroundPoint":
|
|
1511
|
+
case "mixtilinearPoint":
|
|
1351
1512
|
return fail("unsupported-constraint", c.kind);
|
|
1352
1513
|
default: {
|
|
1353
1514
|
return fail("unsupported-constraint");
|
|
@@ -1644,9 +1805,11 @@ function describeEntity(e) {
|
|
|
1644
1805
|
return `${e.name} = \u0111\u01B0\u1EDDng tr\xF2n b\xE0ng ti\u1EBFp ${e.vertices.join("")} \u0111\u1ED1i di\u1EC7n ${e.opposite}`;
|
|
1645
1806
|
// Cụm A
|
|
1646
1807
|
case "arcMidpoint":
|
|
1647
|
-
return `${e.name} = trung \u0111i\u1EC3m cung ${e.a}${e.b} (kh\xF4ng ch\u1EE9a ${e.notContaining}) tr\xEAn ${e.circle}`;
|
|
1808
|
+
return `${e.name} = trung \u0111i\u1EC3m cung ${e.a}${e.b}${e.containing || e.notContaining ? ` (${e.containing ? "ch\u1EE9a" : "kh\xF4ng ch\u1EE9a"} ${e.containing ?? e.notContaining})` : ""} tr\xEAn ${e.circle}`;
|
|
1648
1809
|
case "excenter":
|
|
1649
1810
|
return `${e.name} = t\xE2m b\xE0ng ti\u1EBFp ${e.vertices.join("")} \u0111\u1ED1i di\u1EC7n ${e.opposite}`;
|
|
1811
|
+
case "mixtilinearPoint":
|
|
1812
|
+
return `${e.name} = ${e.which === "center" ? "t\xE2m" : "ti\u1EBFp \u0111i\u1EC3m"} mixtilinear ${e.vertices.join("")}`;
|
|
1650
1813
|
case "reflectPoint":
|
|
1651
1814
|
return `${e.name} = \u0111\u1ED1i x\u1EE9ng ${e.of} qua \u0111i\u1EC3m ${e.through}`;
|
|
1652
1815
|
case "reflectLine":
|
|
@@ -1657,6 +1820,8 @@ function describeEntity(e) {
|
|
|
1657
1820
|
const distStr = d.kind === "circleRadius" ? `r(${d.circle})` : d.kind === "segmentLength" ? `|${d.p1}${d.p2}|` : `${d.value}`;
|
|
1658
1821
|
return `${e.name} = \u0111i\u1EC3m tr\xEAn tia ${e.from}${e.through} c\xE1ch ${e.through} m\u1ED9t kho\u1EA3ng ${distStr}`;
|
|
1659
1822
|
}
|
|
1823
|
+
case "onPerpBisector":
|
|
1824
|
+
return `${e.name} = \u0111i\u1EC3m tr\xEAn trung tr\u1EF1c ${e.p1}${e.p2}`;
|
|
1660
1825
|
default: {
|
|
1661
1826
|
return "";
|
|
1662
1827
|
}
|
|
@@ -1675,5 +1840,5 @@ function describeDsl(obj, state) {
|
|
|
1675
1840
|
}
|
|
1676
1841
|
|
|
1677
1842
|
export { CIRCLE_KINDS, KIND_REGISTRY, LINE_LIKE_SHAPE_KINDS, POINT_KINDS, describeDsl, fileToImagePart, inferMediaType, validateFile };
|
|
1678
|
-
//# sourceMappingURL=chunk-
|
|
1679
|
-
//# sourceMappingURL=chunk-
|
|
1843
|
+
//# sourceMappingURL=chunk-DWIEVCGK.mjs.map
|
|
1844
|
+
//# sourceMappingURL=chunk-DWIEVCGK.mjs.map
|