@xom11/whiteboard 0.24.2 → 0.25.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/README.md +84 -11
- package/dist/ai.d.mts +422 -566
- package/dist/ai.d.ts +422 -566
- package/dist/ai.js +1527 -407
- package/dist/ai.js.map +1 -1
- package/dist/ai.mjs +1008 -512
- package/dist/ai.mjs.map +1 -1
- package/dist/catalog.json +4 -4
- package/dist/{chunk-BKSXPNPQ.mjs → chunk-AYSFWUPK.mjs} +4 -3
- package/dist/chunk-AYSFWUPK.mjs.map +1 -0
- package/dist/chunk-B4NJJZFR.mjs +18 -0
- package/dist/chunk-B4NJJZFR.mjs.map +1 -0
- package/dist/{chunk-LVNCYP4J.mjs → chunk-CJBLJUWG.mjs} +5 -5
- package/dist/{chunk-LVNCYP4J.mjs.map → chunk-CJBLJUWG.mjs.map} +1 -1
- package/dist/{chunk-7WQXXEVR.mjs → chunk-ESVPQWHX.mjs} +5 -5
- package/dist/{chunk-7WQXXEVR.mjs.map → chunk-ESVPQWHX.mjs.map} +1 -1
- package/dist/{chunk-KRC2XOIG.mjs → chunk-I24QOHPU.mjs} +3 -3
- package/dist/{chunk-KRC2XOIG.mjs.map → chunk-I24QOHPU.mjs.map} +1 -1
- package/dist/{chunk-ZBJBQKJ2.mjs → chunk-IHUFOV7L.mjs} +4 -19
- package/dist/chunk-IHUFOV7L.mjs.map +1 -0
- package/dist/{chunk-AZIARTGX.mjs → chunk-M42TGYT6.mjs} +3 -3
- package/dist/{chunk-AZIARTGX.mjs.map → chunk-M42TGYT6.mjs.map} +1 -1
- package/dist/{chunk-45CGKJ7S.mjs → chunk-NDEZJKNY.mjs} +4 -4
- package/dist/{chunk-45CGKJ7S.mjs.map → chunk-NDEZJKNY.mjs.map} +1 -1
- package/dist/{chunk-BEZSQKPY.mjs → chunk-ONBCUWVI.mjs} +5 -4
- package/dist/chunk-ONBCUWVI.mjs.map +1 -0
- package/dist/{chunk-WM2VDYQA.mjs → chunk-REIJZDVZ.mjs} +4 -3
- package/dist/chunk-REIJZDVZ.mjs.map +1 -0
- package/dist/{chunk-2WF6KIGF.mjs → chunk-TB4CL25L.mjs} +9 -8
- package/dist/chunk-TB4CL25L.mjs.map +1 -0
- package/dist/chunk-VNCCIV6O.mjs +938 -0
- package/dist/chunk-VNCCIV6O.mjs.map +1 -0
- package/dist/{chunk-CGZZO4BX.mjs → chunk-VRHWDZ66.mjs} +5 -5
- package/dist/{chunk-CGZZO4BX.mjs.map → chunk-VRHWDZ66.mjs.map} +1 -1
- package/dist/{chunk-4DS3MKID.mjs → chunk-YSJOVBCD.mjs} +4 -4
- package/dist/{chunk-4DS3MKID.mjs.map → chunk-YSJOVBCD.mjs.map} +1 -1
- package/dist/geometry-2d.d.mts +2 -2
- package/dist/geometry-2d.d.ts +2 -2
- package/dist/geometry-2d.js +1383 -23
- package/dist/geometry-2d.js.map +1 -1
- package/dist/geometry-2d.mjs +6 -5
- package/dist/geometry-3d.d.mts +2 -2
- package/dist/geometry-3d.d.ts +2 -2
- package/dist/geometry-3d.js +2 -2
- package/dist/geometry-3d.js.map +1 -1
- package/dist/geometry-3d.mjs +5 -4
- package/dist/graph-2d.d.mts +2 -2
- package/dist/graph-2d.d.ts +2 -2
- package/dist/graph-2d.js +2 -2
- package/dist/graph-2d.js.map +1 -1
- package/dist/graph-2d.mjs +8 -7
- package/dist/{host-ZIQ77W33.mjs → host-A64ITWVX.mjs} +7 -6
- package/dist/host-A64ITWVX.mjs.map +1 -0
- package/dist/{host-EPZCNFLH.mjs → host-L7FMFZUW.mjs} +226 -29
- package/dist/host-L7FMFZUW.mjs.map +1 -0
- package/dist/{host-LKCMYEAV.mjs → host-QK53UYMD.mjs} +11 -10
- package/dist/host-QK53UYMD.mjs.map +1 -0
- package/dist/index.d.mts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +1414 -54
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +18 -17
- package/dist/index.mjs.map +1 -1
- package/dist/latex.d.mts +2 -2
- package/dist/latex.d.ts +2 -2
- package/dist/render-3WTY7NZB.mjs +9 -0
- package/dist/{render-SA4JTOW3.mjs.map → render-3WTY7NZB.mjs.map} +1 -1
- package/dist/serialize-SRJVKYUG.mjs +8 -0
- package/dist/{serialize-JAVOU22E.mjs.map → serialize-SRJVKYUG.mjs.map} +1 -1
- package/dist/{types-vtvyKGAA.d.mts → types-DWRyCa2m.d.mts} +187 -2
- package/dist/{types-Crbefnfe.d.ts → types-DWRyCa2m.d.ts} +187 -2
- package/package.json +1 -1
- package/dist/chunk-2WF6KIGF.mjs.map +0 -1
- package/dist/chunk-BEZSQKPY.mjs.map +0 -1
- package/dist/chunk-BKSXPNPQ.mjs.map +0 -1
- package/dist/chunk-WM2VDYQA.mjs.map +0 -1
- package/dist/chunk-ZBJBQKJ2.mjs.map +0 -1
- package/dist/host-EPZCNFLH.mjs.map +0 -1
- package/dist/host-LKCMYEAV.mjs.map +0 -1
- package/dist/host-ZIQ77W33.mjs.map +0 -1
- package/dist/render-SA4JTOW3.mjs +0 -8
- package/dist/serialize-JAVOU22E.mjs +0 -7
- package/dist/types-DxlMPh-6.d.mts +0 -49
- package/dist/types-DxlMPh-6.d.ts +0 -49
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/stamps/geometry-2d/dsl/names.ts","../src/stamps/geometry-2d/dsl/kinds/_types.ts","../src/stamps/geometry-2d/dsl/kinds/_shared.ts","../src/stamps/geometry-2d/dsl/kinds/points/free.ts","../src/stamps/geometry-2d/dsl/kinds/points/midpoint.ts","../src/stamps/geometry-2d/dsl/kinds/points/onSegment.ts","../src/stamps/geometry-2d/dsl/kinds/points/onLine.ts","../src/stamps/geometry-2d/dsl/kinds/points/onCircle.ts","../src/stamps/geometry-2d/dsl/kinds/points/perpFoot.ts","../src/stamps/geometry-2d/dsl/kinds/points/circumcenter.ts","../src/stamps/geometry-2d/dsl/kinds/points/incenter.ts","../src/stamps/geometry-2d/dsl/kinds/points/centroid.ts","../src/stamps/geometry-2d/dsl/kinds/points/orthocenter.ts","../src/stamps/geometry-2d/dsl/kinds/points/intersection.ts","../src/stamps/geometry-2d/dsl/kinds/lines/segment.ts","../src/stamps/geometry-2d/dsl/kinds/lines/line.ts","../src/stamps/geometry-2d/dsl/kinds/lines/ray.ts","../src/stamps/geometry-2d/dsl/kinds/lines/perpendicular.ts","../src/stamps/geometry-2d/dsl/kinds/lines/parallel.ts","../src/stamps/geometry-2d/dsl/kinds/lines/perpBisector.ts","../src/stamps/geometry-2d/dsl/kinds/lines/angleBisector.ts","../src/stamps/geometry-2d/dsl/kinds/lines/tangent.ts","../src/stamps/geometry-2d/dsl/kinds/polygons/polygon.ts","../src/stamps/geometry-2d/dsl/kinds/circles/circleCP.ts","../src/stamps/geometry-2d/dsl/kinds/circles/circle3.ts","../src/stamps/geometry-2d/dsl/registry.ts","../src/stamps/geometry-2d/dsl/serialize.ts","../src/stamps/geometry-2d/dsl/describeDsl.ts"],"names":["z"],"mappings":"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","file":"chunk-VNCCIV6O.mjs","sourcesContent":["// src/stamps/geometry-2d/dsl/names.ts\nimport { z } from 'zod';\n\n// Label-style name: chữ cái Latin đầu, cho phép unicode prime (') + subscript ₀-₉.\n// Max length 12 ký tự. Phân biệt hoa/thường.\nexport const NameZ = z\n .string()\n .regex(/^[A-Za-z][A-Za-z0-9_'₀-₉]{0,11}$/);\n","// src/stamps/geometry-2d/dsl/kinds/_types.ts\nimport type { z } from 'zod';\nimport type { SceneObject } from '../../../../core/scene/types';\n\nexport type KindRole =\n | 'point'\n | 'segment'\n | 'line'\n | 'ray'\n | 'lineConstruction'\n | 'circle'\n | 'polygon';\n\nexport type KindCategory = 'points' | 'lines' | 'polygons' | 'circles' | 'compound';\n\nexport interface EmitContext {\n /** Look up the scene-object id assigned to a DSL symbol name. */\n resolveId(name: string): string;\n /** Hint lookup for intersection-style emit needing to know what a referenced symbol is. */\n hintOf(name: string): KindRole;\n /** Generate a unique auxiliary id for an internal entity (not addressable from DSL). */\n mintAuxId(parentName: string, suffix: string): string;\n}\n\nexport interface EmittedEntity {\n /** The first emitted entity per kind MUST have role 'primary'. */\n role: 'primary' | 'auxiliary';\n object: SceneObject;\n}\n\nexport interface DslKindModule<TKind extends string = string, TInput = unknown> {\n kind: TKind;\n role: KindRole;\n category: KindCategory;\n prefix: string;\n schema: z.ZodObject<any>;\n collectRefs: (entity: TInput) => string[];\n emit: (entity: TInput, ctx: EmitContext) => EmittedEntity[];\n}\n\n/**\n * Factory that widens a typed module into the registry's generic shape.\n * Each kind module exports its module via this factory so `ALL_MODULES`\n * in registry.ts can be typed as ReadonlyArray<DslKindModule> without a cast.\n */\nexport function defineModule<TKind extends string, TInput>(\n m: DslKindModule<TKind, TInput>,\n): DslKindModule {\n return m as DslKindModule;\n}\n","// src/stamps/geometry-2d/dsl/kinds/_shared.ts\nimport type { SceneObject } from '../../../../core/scene/types';\nimport type { EmitContext } from './_types';\n\nexport const POINT_BASE_FIELDS = {\n visible: true,\n locked: false,\n layer: 'default',\n schemaVersion: 1,\n} as const;\n\n/** Wrap a Constraint2D-style attrs into a primary 'point' SceneObject. */\nexport function emitPointObject(\n id: string,\n name: string,\n constraint: Record<string, unknown>,\n): SceneObject {\n return {\n id,\n kind: 'point',\n label: name,\n ...POINT_BASE_FIELDS,\n attrs: { constraint },\n };\n}\n\n/** Resolve a triangle's 3 vertex ids. */\nexport function resolveTriangleVertices(\n ctx: EmitContext,\n vertices: readonly [string, string, string],\n): [string, string, string] {\n return [ctx.resolveId(vertices[0]), ctx.resolveId(vertices[1]), ctx.resolveId(vertices[2])];\n}\n\nexport const SHAPE_BASE_FIELDS = {\n visible: true,\n locked: false,\n layer: 'default',\n schemaVersion: 1,\n} as const;\n","// src/stamps/geometry-2d/dsl/kinds/points/free.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslPointT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { emitPointObject } from '../_shared';\n\ntype Input = Extract<DslPointT, { kind: 'free' }>;\n\nexport const freeModule = defineModule<'free', Input>({\n kind: 'free',\n role: 'point',\n category: 'points',\n prefix: 'p',\n schema: z.object({\n name: NameZ,\n kind: z.literal('free'),\n x: z.number().finite(),\n y: z.number().finite(),\n }),\n collectRefs: () => [],\n emit: (e, ctx) => [{\n role: 'primary',\n object: emitPointObject(ctx.resolveId(e.name), e.name, { kind: 'free', x: e.x, y: e.y }),\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/points/midpoint.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslPointT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { emitPointObject } from '../_shared';\n\ntype Input = Extract<DslPointT, { kind: 'midpoint' }>;\n\nexport const midpointModule = defineModule<'midpoint', Input>({\n kind: 'midpoint',\n role: 'point',\n category: 'points',\n prefix: 'p',\n schema: z.object({\n name: NameZ,\n kind: z.literal('midpoint'),\n p1: NameZ,\n p2: NameZ,\n }),\n collectRefs: (e) => [e.p1, e.p2],\n emit: (e, ctx) => [{\n role: 'primary',\n object: emitPointObject(\n ctx.resolveId(e.name),\n e.name,\n { kind: 'midpoint', p1: ctx.resolveId(e.p1), p2: ctx.resolveId(e.p2) },\n ),\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/points/onSegment.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslPointT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { emitPointObject } from '../_shared';\n\ntype Input = Extract<DslPointT, { kind: 'onSegment' }>;\n\nexport const onSegmentModule = defineModule<'onSegment', Input>({\n kind: 'onSegment',\n role: 'point',\n category: 'points',\n prefix: 'p',\n schema: z.object({\n name: NameZ,\n kind: z.literal('onSegment'),\n segmentId: NameZ,\n t: z.number().min(0).max(1),\n }),\n collectRefs: (e) => [e.segmentId],\n emit: (e, ctx) => [{\n role: 'primary',\n object: emitPointObject(\n ctx.resolveId(e.name),\n e.name,\n { kind: 'onSegment', segmentId: ctx.resolveId(e.segmentId), t: e.t },\n ),\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/points/onLine.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslPointT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { emitPointObject } from '../_shared';\n\ntype Input = Extract<DslPointT, { kind: 'onLine' }>;\n\nexport const onLineModule = defineModule<'onLine', Input>({\n kind: 'onLine',\n role: 'point',\n category: 'points',\n prefix: 'p',\n schema: z.object({\n name: NameZ,\n kind: z.literal('onLine'),\n lineId: NameZ,\n t: z.number().finite(),\n }),\n collectRefs: (e) => [e.lineId],\n emit: (e, ctx) => [{\n role: 'primary',\n object: emitPointObject(\n ctx.resolveId(e.name),\n e.name,\n { kind: 'onLine', lineId: ctx.resolveId(e.lineId), t: e.t },\n ),\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/points/onCircle.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslPointT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { emitPointObject } from '../_shared';\n\ntype Input = Extract<DslPointT, { kind: 'onCircle' }>;\n\nexport const onCircleModule = defineModule<'onCircle', Input>({\n kind: 'onCircle',\n role: 'point',\n category: 'points',\n prefix: 'p',\n schema: z.object({\n name: NameZ,\n kind: z.literal('onCircle'),\n circleId: NameZ,\n theta: z.number().finite(),\n }),\n collectRefs: (e) => [e.circleId],\n emit: (e, ctx) => [{\n role: 'primary',\n object: emitPointObject(\n ctx.resolveId(e.name),\n e.name,\n { kind: 'onCircle', circleId: ctx.resolveId(e.circleId), theta: e.theta },\n ),\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/points/perpFoot.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslPointT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { emitPointObject } from '../_shared';\n\ntype Input = Extract<DslPointT, { kind: 'perpFoot' }>;\n\nexport const perpFootModule = defineModule<'perpFoot', Input>({\n kind: 'perpFoot',\n role: 'point',\n category: 'points',\n prefix: 'p',\n schema: z.object({\n name: NameZ,\n kind: z.literal('perpFoot'),\n from: NameZ,\n onLine: NameZ,\n }),\n collectRefs: (e) => [e.from, e.onLine],\n emit: (e, ctx) => [{\n role: 'primary',\n object: emitPointObject(\n ctx.resolveId(e.name),\n e.name,\n { kind: 'perpFoot', from: ctx.resolveId(e.from), onLine: ctx.resolveId(e.onLine) },\n ),\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/points/circumcenter.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslPointT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { emitPointObject, resolveTriangleVertices } from '../_shared';\n\ntype Input = Extract<DslPointT, { kind: 'circumcenter' }>;\n\nexport const circumcenterModule = defineModule<'circumcenter', Input>({\n kind: 'circumcenter',\n role: 'point',\n category: 'points',\n prefix: 'p',\n schema: z.object({\n name: NameZ,\n kind: z.literal('circumcenter'),\n vertices: z.tuple([NameZ, NameZ, NameZ]),\n }),\n collectRefs: (e) => [...e.vertices],\n emit: (e, ctx) => [{\n role: 'primary',\n object: emitPointObject(\n ctx.resolveId(e.name),\n e.name,\n { kind: 'circumcenter', vertices: resolveTriangleVertices(ctx, e.vertices) },\n ),\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/points/incenter.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslPointT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { emitPointObject, resolveTriangleVertices } from '../_shared';\n\ntype Input = Extract<DslPointT, { kind: 'incenter' }>;\n\nexport const incenterModule = defineModule<'incenter', Input>({\n kind: 'incenter',\n role: 'point',\n category: 'points',\n prefix: 'p',\n schema: z.object({\n name: NameZ,\n kind: z.literal('incenter'),\n vertices: z.tuple([NameZ, NameZ, NameZ]),\n }),\n collectRefs: (e) => [...e.vertices],\n emit: (e, ctx) => [{\n role: 'primary',\n object: emitPointObject(\n ctx.resolveId(e.name),\n e.name,\n { kind: 'incenter', vertices: resolveTriangleVertices(ctx, e.vertices) },\n ),\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/points/centroid.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslPointT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { emitPointObject, resolveTriangleVertices } from '../_shared';\n\ntype Input = Extract<DslPointT, { kind: 'centroid' }>;\n\nexport const centroidModule = defineModule<'centroid', Input>({\n kind: 'centroid',\n role: 'point',\n category: 'points',\n prefix: 'p',\n schema: z.object({\n name: NameZ,\n kind: z.literal('centroid'),\n vertices: z.tuple([NameZ, NameZ, NameZ]),\n }),\n collectRefs: (e) => [...e.vertices],\n emit: (e, ctx) => [{\n role: 'primary',\n object: emitPointObject(\n ctx.resolveId(e.name),\n e.name,\n { kind: 'centroid', vertices: resolveTriangleVertices(ctx, e.vertices) },\n ),\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/points/orthocenter.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslPointT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { emitPointObject, resolveTriangleVertices } from '../_shared';\n\ntype Input = Extract<DslPointT, { kind: 'orthocenter' }>;\n\nexport const orthocenterModule = defineModule<'orthocenter', Input>({\n kind: 'orthocenter',\n role: 'point',\n category: 'points',\n prefix: 'p',\n schema: z.object({\n name: NameZ,\n kind: z.literal('orthocenter'),\n vertices: z.tuple([NameZ, NameZ, NameZ]),\n }),\n collectRefs: (e) => [...e.vertices],\n emit: (e, ctx) => [{\n role: 'primary',\n object: emitPointObject(\n ctx.resolveId(e.name),\n e.name,\n { kind: 'orthocenter', vertices: resolveTriangleVertices(ctx, e.vertices) },\n ),\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/points/intersection.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslPointT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { POINT_BASE_FIELDS } from '../_shared';\n\ntype Input = Extract<DslPointT, { kind: 'intersection' }>;\n\nexport const intersectionModule = defineModule<'intersection', Input>({\n kind: 'intersection',\n role: 'point',\n category: 'points',\n prefix: 'i',\n schema: z.object({\n name: NameZ,\n kind: z.literal('intersection'),\n ref1: NameZ,\n ref2: NameZ,\n branch: z.union([z.literal(0), z.literal(1)]).optional(),\n }),\n collectRefs: (e) => [e.ref1, e.ref2],\n emit: (e, ctx) => {\n const r1IsCircle = ctx.hintOf(e.ref1) === 'circle';\n const r2IsCircle = ctx.hintOf(e.ref2) === 'circle';\n let intersectKind: 'lineLine' | 'lineCircle' | 'circleCircle';\n if (r1IsCircle && r2IsCircle) intersectKind = 'circleCircle';\n else if (r1IsCircle || r2IsCircle) intersectKind = 'lineCircle';\n else intersectKind = 'lineLine';\n\n const attrs: Record<string, unknown> = {\n kind: intersectKind,\n ref1: ctx.resolveId(e.ref1),\n ref2: ctx.resolveId(e.ref2),\n };\n if (intersectKind !== 'lineLine') {\n attrs.branch = e.branch ?? 0;\n }\n return [{\n role: 'primary',\n object: {\n id: ctx.resolveId(e.name),\n kind: 'intersection',\n label: e.name,\n ...POINT_BASE_FIELDS,\n attrs,\n },\n }];\n },\n});\n","// src/stamps/geometry-2d/dsl/kinds/lines/segment.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslShapeT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { SHAPE_BASE_FIELDS } from '../_shared';\n\ntype Input = Extract<DslShapeT, { kind: 'segment' }>;\n\nexport const segmentModule = defineModule<'segment', Input>({\n kind: 'segment',\n role: 'segment',\n category: 'lines',\n prefix: 's',\n schema: z.object({\n name: NameZ,\n kind: z.literal('segment'),\n p1: NameZ,\n p2: NameZ,\n }),\n collectRefs: (e) => [e.p1, e.p2],\n emit: (e, ctx) => [{\n role: 'primary',\n object: {\n id: ctx.resolveId(e.name),\n kind: 'segment',\n label: e.name,\n ...SHAPE_BASE_FIELDS,\n attrs: { p1: ctx.resolveId(e.p1), p2: ctx.resolveId(e.p2) },\n },\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/lines/line.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslShapeT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { SHAPE_BASE_FIELDS } from '../_shared';\n\ntype Input = Extract<DslShapeT, { kind: 'line' }>;\n\nexport const lineModule = defineModule<'line', Input>({\n kind: 'line',\n role: 'line',\n category: 'lines',\n prefix: 'l',\n schema: z.object({\n name: NameZ,\n kind: z.literal('line'),\n p1: NameZ,\n p2: NameZ,\n }),\n collectRefs: (e) => [e.p1, e.p2],\n emit: (e, ctx) => [{\n role: 'primary',\n object: {\n id: ctx.resolveId(e.name),\n kind: 'line',\n label: e.name,\n ...SHAPE_BASE_FIELDS,\n attrs: { p1: ctx.resolveId(e.p1), p2: ctx.resolveId(e.p2) },\n },\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/lines/ray.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslShapeT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { SHAPE_BASE_FIELDS } from '../_shared';\n\ntype Input = Extract<DslShapeT, { kind: 'ray' }>;\n\nexport const rayModule = defineModule<'ray', Input>({\n kind: 'ray',\n role: 'ray',\n category: 'lines',\n prefix: 'r',\n schema: z.object({\n name: NameZ,\n kind: z.literal('ray'),\n origin: NameZ,\n through: NameZ,\n }),\n collectRefs: (e) => [e.origin, e.through],\n emit: (e, ctx) => [{\n role: 'primary',\n object: {\n id: ctx.resolveId(e.name),\n kind: 'ray',\n label: e.name,\n ...SHAPE_BASE_FIELDS,\n attrs: { origin: ctx.resolveId(e.origin), through: ctx.resolveId(e.through) },\n },\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/lines/perpendicular.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslShapeT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { SHAPE_BASE_FIELDS } from '../_shared';\n\ntype Input = Extract<DslShapeT, { kind: 'perpendicular' }>;\n\nexport const perpendicularModule = defineModule<'perpendicular', Input>({\n kind: 'perpendicular',\n role: 'lineConstruction',\n category: 'lines',\n prefix: 'l',\n schema: z.object({\n name: NameZ,\n kind: z.literal('perpendicular'),\n throughPoint: NameZ,\n toLine: NameZ,\n }),\n collectRefs: (e) => [e.throughPoint, e.toLine],\n emit: (e, ctx) => [{\n role: 'primary',\n object: {\n id: ctx.resolveId(e.name),\n kind: 'line',\n label: e.name,\n ...SHAPE_BASE_FIELDS,\n attrs: {\n construction: {\n kind: 'perpendicular',\n throughPoint: ctx.resolveId(e.throughPoint),\n toLine: ctx.resolveId(e.toLine),\n },\n },\n },\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/lines/parallel.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslShapeT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { SHAPE_BASE_FIELDS } from '../_shared';\n\ntype Input = Extract<DslShapeT, { kind: 'parallel' }>;\n\nexport const parallelModule = defineModule<'parallel', Input>({\n kind: 'parallel',\n role: 'lineConstruction',\n category: 'lines',\n prefix: 'l',\n schema: z.object({\n name: NameZ,\n kind: z.literal('parallel'),\n throughPoint: NameZ,\n toLine: NameZ,\n }),\n collectRefs: (e) => [e.throughPoint, e.toLine],\n emit: (e, ctx) => [{\n role: 'primary',\n object: {\n id: ctx.resolveId(e.name),\n kind: 'line',\n label: e.name,\n ...SHAPE_BASE_FIELDS,\n attrs: {\n construction: {\n kind: 'parallel',\n throughPoint: ctx.resolveId(e.throughPoint),\n toLine: ctx.resolveId(e.toLine),\n },\n },\n },\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/lines/perpBisector.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslShapeT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { SHAPE_BASE_FIELDS } from '../_shared';\n\ntype Input = Extract<DslShapeT, { kind: 'perpBisector' }>;\n\nexport const perpBisectorModule = defineModule<'perpBisector', Input>({\n kind: 'perpBisector',\n role: 'lineConstruction',\n category: 'lines',\n prefix: 'l',\n schema: z.object({\n name: NameZ,\n kind: z.literal('perpBisector'),\n p1: NameZ,\n p2: NameZ,\n }),\n collectRefs: (e) => [e.p1, e.p2],\n emit: (e, ctx) => [{\n role: 'primary',\n object: {\n id: ctx.resolveId(e.name),\n kind: 'line',\n label: e.name,\n ...SHAPE_BASE_FIELDS,\n attrs: {\n construction: {\n kind: 'perpBisector',\n p1: ctx.resolveId(e.p1),\n p2: ctx.resolveId(e.p2),\n },\n },\n },\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/lines/angleBisector.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslShapeT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { SHAPE_BASE_FIELDS } from '../_shared';\n\ntype Input = Extract<DslShapeT, { kind: 'angleBisector' }>;\n\nexport const angleBisectorModule = defineModule<'angleBisector', Input>({\n kind: 'angleBisector',\n role: 'lineConstruction',\n category: 'lines',\n prefix: 'l',\n schema: z.object({\n name: NameZ,\n kind: z.literal('angleBisector'),\n p1: NameZ,\n vertex: NameZ,\n p2: NameZ,\n }),\n collectRefs: (e) => [e.p1, e.vertex, e.p2],\n emit: (e, ctx) => [{\n role: 'primary',\n object: {\n id: ctx.resolveId(e.name),\n kind: 'line',\n label: e.name,\n ...SHAPE_BASE_FIELDS,\n attrs: {\n construction: {\n kind: 'angleBisector',\n p1: ctx.resolveId(e.p1),\n vertex: ctx.resolveId(e.vertex),\n p2: ctx.resolveId(e.p2),\n },\n },\n },\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/lines/tangent.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslShapeT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { SHAPE_BASE_FIELDS } from '../_shared';\n\ntype Input = Extract<DslShapeT, { kind: 'tangent' }>;\n\nexport const tangentModule = defineModule<'tangent', Input>({\n kind: 'tangent',\n role: 'lineConstruction',\n category: 'lines',\n prefix: 'l',\n schema: z.object({\n name: NameZ,\n kind: z.literal('tangent'),\n throughPoint: NameZ,\n toCircle: NameZ,\n branch: z.union([z.literal(0), z.literal(1), z.literal('on')]).optional(),\n }),\n collectRefs: (e) => [e.throughPoint, e.toCircle],\n emit: (e, ctx) => {\n const construction: Record<string, unknown> = {\n kind: 'tangent',\n throughPoint: ctx.resolveId(e.throughPoint),\n toCircle: ctx.resolveId(e.toCircle),\n };\n if (e.branch !== undefined) construction.branch = e.branch;\n return [{\n role: 'primary',\n object: {\n id: ctx.resolveId(e.name),\n kind: 'line',\n label: e.name,\n ...SHAPE_BASE_FIELDS,\n attrs: { construction },\n },\n }];\n },\n});\n","// src/stamps/geometry-2d/dsl/kinds/polygons/polygon.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslShapeT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { SHAPE_BASE_FIELDS } from '../_shared';\n\ntype Input = Extract<DslShapeT, { kind: 'polygon' }>;\n\nexport const polygonModule = defineModule<'polygon', Input>({\n kind: 'polygon',\n role: 'polygon',\n category: 'polygons',\n prefix: 'poly',\n schema: z.object({\n name: NameZ,\n kind: z.literal('polygon'),\n vertices: z.array(NameZ).min(3),\n }),\n collectRefs: (e) => [...e.vertices],\n emit: (e, ctx) => [{\n role: 'primary',\n object: {\n id: ctx.resolveId(e.name),\n kind: 'polygon',\n label: e.name,\n ...SHAPE_BASE_FIELDS,\n attrs: { vertices: e.vertices.map((v) => ctx.resolveId(v)) },\n },\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/circles/circleCP.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslShapeT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { SHAPE_BASE_FIELDS } from '../_shared';\n\ntype Input = Extract<DslShapeT, { kind: 'circleCP' }>;\n\nexport const circleCPModule = defineModule<'circleCP', Input>({\n kind: 'circleCP',\n role: 'circle',\n category: 'circles',\n prefix: 'c',\n schema: z.object({\n name: NameZ,\n kind: z.literal('circleCP'),\n center: NameZ,\n surfacePoint: NameZ,\n }),\n collectRefs: (e) => [e.center, e.surfacePoint],\n emit: (e, ctx) => [{\n role: 'primary',\n object: {\n id: ctx.resolveId(e.name),\n kind: 'circle',\n label: e.name,\n ...SHAPE_BASE_FIELDS,\n attrs: { center: ctx.resolveId(e.center), surfacePoint: ctx.resolveId(e.surfacePoint) },\n },\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/circles/circle3.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslShapeT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { SHAPE_BASE_FIELDS } from '../_shared';\n\ntype Input = Extract<DslShapeT, { kind: 'circle3' }>;\n\nexport const circle3Module = defineModule<'circle3', Input>({\n kind: 'circle3',\n role: 'circle',\n category: 'circles',\n prefix: 'c',\n schema: z.object({\n name: NameZ,\n kind: z.literal('circle3'),\n p1: NameZ,\n p2: NameZ,\n p3: NameZ,\n }),\n collectRefs: (e) => [e.p1, e.p2, e.p3],\n emit: (e, ctx) => [{\n role: 'primary',\n object: {\n id: ctx.resolveId(e.name),\n kind: 'circle',\n label: e.name,\n ...SHAPE_BASE_FIELDS,\n attrs: {\n construction: {\n kind: 'circumscribed',\n p1: ctx.resolveId(e.p1),\n p2: ctx.resolveId(e.p2),\n p3: ctx.resolveId(e.p3),\n },\n },\n },\n }],\n});\n","// src/stamps/geometry-2d/dsl/registry.ts\nimport { z } from 'zod';\nimport type { DslKindModule } from './kinds/_types';\nimport { freeModule } from './kinds/points/free';\nimport { midpointModule } from './kinds/points/midpoint';\nimport { onSegmentModule } from './kinds/points/onSegment';\nimport { onLineModule } from './kinds/points/onLine';\nimport { onCircleModule } from './kinds/points/onCircle';\nimport { perpFootModule } from './kinds/points/perpFoot';\nimport { circumcenterModule } from './kinds/points/circumcenter';\nimport { incenterModule } from './kinds/points/incenter';\nimport { centroidModule } from './kinds/points/centroid';\nimport { orthocenterModule } from './kinds/points/orthocenter';\nimport { intersectionModule } from './kinds/points/intersection';\nimport { segmentModule } from './kinds/lines/segment';\nimport { lineModule } from './kinds/lines/line';\nimport { rayModule } from './kinds/lines/ray';\nimport { perpendicularModule } from './kinds/lines/perpendicular';\nimport { parallelModule } from './kinds/lines/parallel';\nimport { perpBisectorModule } from './kinds/lines/perpBisector';\nimport { angleBisectorModule } from './kinds/lines/angleBisector';\nimport { tangentModule } from './kinds/lines/tangent';\nimport { polygonModule } from './kinds/polygons/polygon';\nimport { circleCPModule } from './kinds/circles/circleCP';\nimport { circle3Module } from './kinds/circles/circle3';\n\nconst ALL_MODULES: ReadonlyArray<DslKindModule> = [\n freeModule, midpointModule, onSegmentModule, onLineModule, onCircleModule,\n perpFootModule, circumcenterModule, incenterModule, centroidModule,\n orthocenterModule, intersectionModule,\n segmentModule, lineModule, rayModule,\n perpendicularModule, parallelModule, perpBisectorModule,\n angleBisectorModule, tangentModule,\n polygonModule,\n circleCPModule, circle3Module,\n];\n\nexport const KIND_REGISTRY: ReadonlyMap<string, DslKindModule> =\n new Map(ALL_MODULES.map((m) => [m.kind, m]));\n\nexport const POINT_KINDS: ReadonlySet<string> = new Set(\n ALL_MODULES.filter((m) => m.role === 'point').map((m) => m.kind),\n);\n\nexport const LINE_LIKE_SHAPE_KINDS: ReadonlySet<string> = new Set(\n ALL_MODULES.filter(\n (m) =>\n m.role === 'segment' ||\n m.role === 'line' ||\n m.role === 'ray' ||\n m.role === 'lineConstruction',\n ).map((m) => m.kind),\n);\n\nexport const CIRCLE_KINDS: ReadonlySet<string> = new Set(\n ALL_MODULES.filter((m) => m.role === 'circle').map((m) => m.kind),\n);\n\n// Top-level entity discriminated union — used internally by schema.ts for building DslPoint/DslShape.\nexport const DslEntitySchema = z.discriminatedUnion(\n 'kind',\n ALL_MODULES.map((m) => m.schema) as unknown as [z.ZodObject<any>, z.ZodObject<any>, ...z.ZodObject<any>[]],\n);\n","// src/stamps/geometry-2d/dsl/serialize.ts\n//\n// Reverse path: SceneObject → DSL entity. Counterpart cho `transpile` (forward\n// DSL → State). Dùng cho tab Đối tượng hiển thị mô tả DSL-style + reuse khi\n// muốn export state về DSL.\n//\n// Lossless với mọi primitive DSL v1 hỗ trợ. Out-of-DSL state (vector, distance,\n// angle, arc, sector, onAxis/onPolygon/transformed constraint, polygon regular,\n// angleBisectorLines) → fallback `{ ok: false; reason }` không drop.\n\nimport type { SceneObject, State } from '../../../core/scene/types';\nimport type { Constraint2D } from '../../../core/scene/kinds/2d-constraint';\nimport type { LineConstruction, LineAttrs } from '../../../core/scene/kinds/line';\nimport type { CircleAttrs } from '../../../core/scene/kinds/circle';\nimport type { PolygonAttrs } from '../../../core/scene/kinds/polygon';\nimport type { SegmentAttrs } from '../../../core/scene/kinds/segment';\nimport type { RayAttrs } from '../../../core/scene/kinds/ray';\nimport type { IntersectionAttrs } from '../../../core/scene/kinds/intersection';\nimport type { PointAttrs } from '../../../core/scene/kinds/point';\nimport type { DslInputT, DslPointT, DslShapeT } from './schema';\nimport { POINT_KINDS } from './registry';\n\nexport type SerializeReason =\n | 'unsupported-kind'\n | 'unsupported-constraint'\n | 'unsupported-construction'\n | 'unresolved-ref'\n | 'invalid-label';\n\nexport type SerializedEntity =\n | { ok: true; entity: DslPointT | DslShapeT }\n | { ok: false; reason: SerializeReason; detail?: string };\n\nexport interface UnsupportedEntry {\n id: string;\n label: string;\n kind: string;\n reason: SerializeReason;\n detail?: string;\n}\n\nexport interface SerializeStateResult {\n dsl: DslInputT;\n unsupported: UnsupportedEntry[];\n}\n\n// Đồng bộ với NameZ ở names.ts. Dup ở đây để serializer không phụ thuộc Zod\n// parse cho mỗi label (hot path khi tab Đối tượng render hàng chục row).\nconst NAME_REGEX = /^[A-Za-z][A-Za-z0-9_'₀-₉]{0,11}$/;\n\nfunction isValidName(s: string): boolean {\n return NAME_REGEX.test(s);\n}\n\nfunction labelOf(id: string, state: State): string | null {\n const obj = state.objects[id];\n return obj ? obj.label : null;\n}\n\nfunction resolveRefs(ids: readonly string[], state: State): string[] | null {\n const out: string[] = [];\n for (const id of ids) {\n const lab = labelOf(id, state);\n if (lab == null || !isValidName(lab)) return null;\n out.push(lab);\n }\n return out;\n}\n\nfunction fail(reason: SerializeReason, detail?: string): SerializedEntity {\n return { ok: false, reason, detail };\n}\n\n// ---------------------------------------------------------------------------\n// point — drill into Constraint2D\n// ---------------------------------------------------------------------------\n\nfunction serializePoint(obj: SceneObject<PointAttrs>, state: State): SerializedEntity {\n const c: Constraint2D | undefined = obj.attrs?.constraint;\n if (!c) return fail('unsupported-constraint', 'missing');\n\n switch (c.kind) {\n case 'free':\n return { ok: true, entity: { name: obj.label, kind: 'free', x: c.x, y: c.y } };\n\n case 'midpoint': {\n const refs = resolveRefs([c.p1, c.p2], state);\n if (!refs) return fail('unresolved-ref', `${c.p1},${c.p2}`);\n return { ok: true, entity: { name: obj.label, kind: 'midpoint', p1: refs[0], p2: refs[1] } };\n }\n\n case 'onSegment': {\n const refs = resolveRefs([c.segmentId], state);\n if (!refs) return fail('unresolved-ref', c.segmentId);\n return { ok: true, entity: { name: obj.label, kind: 'onSegment', segmentId: refs[0], t: c.t } };\n }\n\n case 'onLine': {\n const refs = resolveRefs([c.lineId], state);\n if (!refs) return fail('unresolved-ref', c.lineId);\n return { ok: true, entity: { name: obj.label, kind: 'onLine', lineId: refs[0], t: c.t } };\n }\n\n case 'onCircle': {\n const refs = resolveRefs([c.circleId], state);\n if (!refs) return fail('unresolved-ref', c.circleId);\n return { ok: true, entity: { name: obj.label, kind: 'onCircle', circleId: refs[0], theta: c.theta } };\n }\n\n case 'perpFoot': {\n const refs = resolveRefs([c.from, c.onLine], state);\n if (!refs) return fail('unresolved-ref', `${c.from},${c.onLine}`);\n return { ok: true, entity: { name: obj.label, kind: 'perpFoot', from: refs[0], onLine: refs[1] } };\n }\n\n case 'circumcenter':\n case 'incenter':\n case 'centroid':\n case 'orthocenter': {\n const refs = resolveRefs(c.vertices, state);\n if (!refs || refs.length !== 3) return fail('unresolved-ref', c.vertices.join(','));\n return {\n ok: true,\n entity: {\n name: obj.label,\n kind: c.kind,\n vertices: [refs[0], refs[1], refs[2]],\n },\n };\n }\n\n // Out of DSL v1:\n case 'onAxis':\n case 'onPolygon':\n case 'transformed':\n return fail('unsupported-constraint', c.kind);\n\n default: {\n // exhaustive guard\n const _exhaust: never = c;\n void _exhaust;\n return fail('unsupported-constraint');\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// intersection — branch field only for non-lineLine\n// ---------------------------------------------------------------------------\n\nfunction serializeIntersection(\n obj: SceneObject<IntersectionAttrs>,\n state: State,\n): SerializedEntity {\n const a = obj.attrs;\n const refs = resolveRefs([a.ref1, a.ref2], state);\n if (!refs) return fail('unresolved-ref', `${a.ref1},${a.ref2}`);\n if (a.kind === 'lineLine') {\n return { ok: true, entity: { name: obj.label, kind: 'intersection', ref1: refs[0], ref2: refs[1] } };\n }\n return {\n ok: true,\n entity: {\n name: obj.label,\n kind: 'intersection',\n ref1: refs[0],\n ref2: refs[1],\n branch: a.branch,\n },\n };\n}\n\n// ---------------------------------------------------------------------------\n// segment / ray\n// ---------------------------------------------------------------------------\n\nfunction serializeSegment(obj: SceneObject<SegmentAttrs>, state: State): SerializedEntity {\n const refs = resolveRefs([obj.attrs.p1, obj.attrs.p2], state);\n if (!refs) return fail('unresolved-ref', `${obj.attrs.p1},${obj.attrs.p2}`);\n return { ok: true, entity: { name: obj.label, kind: 'segment', p1: refs[0], p2: refs[1] } };\n}\n\nfunction serializeRay(obj: SceneObject<RayAttrs>, state: State): SerializedEntity {\n const refs = resolveRefs([obj.attrs.origin, obj.attrs.through], state);\n if (!refs) return fail('unresolved-ref', `${obj.attrs.origin},${obj.attrs.through}`);\n return { ok: true, entity: { name: obj.label, kind: 'ray', origin: refs[0], through: refs[1] } };\n}\n\n// ---------------------------------------------------------------------------\n// line — no construction → 'line'; construction → matching DSL kind\n// ---------------------------------------------------------------------------\n\nfunction serializeLine(obj: SceneObject<LineAttrs>, state: State): SerializedEntity {\n const a = obj.attrs;\n const c: LineConstruction | undefined = a.construction;\n if (!c) {\n if (!a.p1 || !a.p2) return fail('unsupported-construction', 'missing p1/p2');\n const refs = resolveRefs([a.p1, a.p2], state);\n if (!refs) return fail('unresolved-ref', `${a.p1},${a.p2}`);\n return { ok: true, entity: { name: obj.label, kind: 'line', p1: refs[0], p2: refs[1] } };\n }\n\n switch (c.kind) {\n case 'perpendicular':\n case 'parallel': {\n const refs = resolveRefs([c.throughPoint, c.toLine], state);\n if (!refs) return fail('unresolved-ref', `${c.throughPoint},${c.toLine}`);\n return {\n ok: true,\n entity: { name: obj.label, kind: c.kind, throughPoint: refs[0], toLine: refs[1] },\n };\n }\n\n case 'perpBisector': {\n const refs = resolveRefs([c.p1, c.p2], state);\n if (!refs) return fail('unresolved-ref', `${c.p1},${c.p2}`);\n return { ok: true, entity: { name: obj.label, kind: 'perpBisector', p1: refs[0], p2: refs[1] } };\n }\n\n case 'angleBisector': {\n const refs = resolveRefs([c.p1, c.vertex, c.p2], state);\n if (!refs) return fail('unresolved-ref', `${c.p1},${c.vertex},${c.p2}`);\n return {\n ok: true,\n entity: {\n name: obj.label,\n kind: 'angleBisector',\n p1: refs[0],\n vertex: refs[1],\n p2: refs[2],\n },\n };\n }\n\n case 'tangent': {\n const refs = resolveRefs([c.throughPoint, c.toCircle], state);\n if (!refs) return fail('unresolved-ref', `${c.throughPoint},${c.toCircle}`);\n const entity: DslShapeT =\n c.branch !== undefined\n ? {\n name: obj.label,\n kind: 'tangent',\n throughPoint: refs[0],\n toCircle: refs[1],\n branch: c.branch,\n }\n : { name: obj.label, kind: 'tangent', throughPoint: refs[0], toCircle: refs[1] };\n return { ok: true, entity };\n }\n\n case 'angleBisectorLines':\n return fail('unsupported-construction', 'angleBisectorLines');\n\n default: {\n const _exhaust: never = c;\n void _exhaust;\n return fail('unsupported-construction');\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// polygon — no construction OK; 'regular' unsupported\n// ---------------------------------------------------------------------------\n\nfunction serializePolygon(obj: SceneObject<PolygonAttrs>, state: State): SerializedEntity {\n const a = obj.attrs;\n if (a.construction) return fail('unsupported-construction', a.construction.kind);\n if (!Array.isArray(a.vertices) || a.vertices.length < 3) {\n return fail('unsupported-construction', 'missing vertices');\n }\n const refs = resolveRefs(a.vertices, state);\n if (!refs) return fail('unresolved-ref', a.vertices.join(','));\n return { ok: true, entity: { name: obj.label, kind: 'polygon', vertices: refs } };\n}\n\n// ---------------------------------------------------------------------------\n// circle — no construction → circleCP; 'circumscribed' → circle3\n// ---------------------------------------------------------------------------\n\nfunction serializeCircle(obj: SceneObject<CircleAttrs>, state: State): SerializedEntity {\n const a = obj.attrs;\n const c = a.construction;\n if (!c) {\n if (!a.center || !a.surfacePoint) {\n return fail('unsupported-construction', 'missing center/surfacePoint');\n }\n const refs = resolveRefs([a.center, a.surfacePoint], state);\n if (!refs) return fail('unresolved-ref', `${a.center},${a.surfacePoint}`);\n return {\n ok: true,\n entity: { name: obj.label, kind: 'circleCP', center: refs[0], surfacePoint: refs[1] },\n };\n }\n if (c.kind === 'circumscribed') {\n const refs = resolveRefs([c.p1, c.p2, c.p3], state);\n if (!refs) return fail('unresolved-ref', `${c.p1},${c.p2},${c.p3}`);\n return {\n ok: true,\n entity: { name: obj.label, kind: 'circle3', p1: refs[0], p2: refs[1], p3: refs[2] },\n };\n }\n return fail('unsupported-construction');\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\nexport function serializeObject(obj: SceneObject, state: State): SerializedEntity {\n if (!isValidName(obj.label)) {\n return fail('invalid-label', obj.label);\n }\n switch (obj.kind) {\n case 'point':\n return serializePoint(obj as SceneObject<PointAttrs>, state);\n case 'segment':\n return serializeSegment(obj as SceneObject<SegmentAttrs>, state);\n case 'ray':\n return serializeRay(obj as SceneObject<RayAttrs>, state);\n case 'line':\n return serializeLine(obj as SceneObject<LineAttrs>, state);\n case 'polygon':\n return serializePolygon(obj as SceneObject<PolygonAttrs>, state);\n case 'circle':\n return serializeCircle(obj as SceneObject<CircleAttrs>, state);\n case 'intersection':\n return serializeIntersection(obj as SceneObject<IntersectionAttrs>, state);\n default:\n return fail('unsupported-kind', obj.kind);\n }\n}\n\nexport function serializeState(state: State): SerializeStateResult {\n const points: DslPointT[] = [];\n const shapes: DslShapeT[] = [];\n const unsupported: UnsupportedEntry[] = [];\n\n for (const id of state.order) {\n const obj = state.objects[id];\n if (!obj) continue;\n const r = serializeObject(obj, state);\n if (!r.ok) {\n unsupported.push({\n id: obj.id,\n label: obj.label,\n kind: obj.kind,\n reason: r.reason,\n detail: r.detail,\n });\n continue;\n }\n if (POINT_KINDS.has(r.entity.kind)) {\n points.push(r.entity as DslPointT);\n } else {\n shapes.push(r.entity as DslShapeT);\n }\n }\n\n return {\n dsl: { version: 1, points, shapes },\n unsupported,\n };\n}\n","// src/stamps/geometry-2d/dsl/describeDsl.ts\n//\n// DSL-style description tiếng Việt cho tab Đối tượng (issue #41). Reuse\n// serializeObject để đảm bảo mô tả khớp với DSL hỗ trợ; out-of-DSL object\n// fallback về `kindDef.describe()` qua getKind, kèm suffix \"(không hỗ trợ DSL)\"\n// để rõ ràng cho user.\n\nimport type { SceneObject, State } from '../../../core/scene/types';\nimport { getKind } from '../../../core/scene/registry';\nimport type { DslPointT, DslShapeT } from './schema';\nimport { serializeObject } from './serialize';\n\nfunction describeEntity(e: DslPointT | DslShapeT): string {\n switch (e.kind) {\n case 'free': return `${e.name} = (${e.x}, ${e.y})`;\n case 'midpoint': return `${e.name} = trung điểm ${e.p1}${e.p2}`;\n case 'onSegment': return `${e.name} ∈ đoạn ${e.segmentId} (t = ${e.t})`;\n case 'onLine': return `${e.name} ∈ đường ${e.lineId} (t = ${e.t})`;\n case 'onCircle': return `${e.name} ∈ đường tròn ${e.circleId} (θ = ${e.theta})`;\n case 'perpFoot': return `${e.name} = chân vuông góc từ ${e.from} xuống ${e.onLine}`;\n case 'circumcenter': return `${e.name} = tâm ngoại tiếp ${e.vertices.join('')}`;\n case 'incenter': return `${e.name} = tâm nội tiếp ${e.vertices.join('')}`;\n case 'centroid': return `${e.name} = trọng tâm ${e.vertices.join('')}`;\n case 'orthocenter': return `${e.name} = trực tâm ${e.vertices.join('')}`;\n case 'intersection': {\n const branch = 'branch' in e && e.branch !== undefined ? ` (nhánh ${e.branch})` : '';\n return `${e.name} = ${e.ref1} ∩ ${e.ref2}${branch}`;\n }\n case 'segment': return `${e.name} = đoạn ${e.p1}${e.p2}`;\n case 'line': return `${e.name} = đường thẳng ${e.p1}${e.p2}`;\n case 'ray': return `${e.name} = tia ${e.origin}${e.through}`;\n case 'polygon': return `${e.name} = đa giác ${e.vertices.join('')}`;\n case 'perpendicular': return `${e.name} ⟂ ${e.toLine} qua ${e.throughPoint}`;\n case 'parallel': return `${e.name} ∥ ${e.toLine} qua ${e.throughPoint}`;\n case 'perpBisector': return `${e.name} = trung trực ${e.p1}${e.p2}`;\n case 'angleBisector': return `${e.name} = phân giác ∠${e.p1}${e.vertex}${e.p2}`;\n case 'tangent': {\n const branch = 'branch' in e && e.branch !== undefined ? ` (nhánh ${e.branch})` : '';\n return `${e.name} = tiếp tuyến ${e.toCircle} qua ${e.throughPoint}${branch}`;\n }\n case 'circleCP': return `${e.name} = (${e.center}; ${e.center}${e.surfacePoint})`;\n case 'circle3': return `${e.name} = đường tròn qua ${e.p1}${e.p2}${e.p3}`;\n default: {\n const _exhaust: never = e;\n void _exhaust;\n return '';\n }\n }\n}\n\n/**\n * Mô tả DSL-style cho 1 SceneObject. Dùng cho `ObjectListPanel.renderRow`.\n *\n * - Object trong miền DSL → mô tả Việt ngắn gọn (vd \"M = trung điểm BC\").\n * - Object ngoài miền DSL → fallback `kindDef.describe()` + suffix\n * \"(không hỗ trợ DSL)\" để user biết object này không export sang DSL được.\n */\nexport function describeDsl(obj: SceneObject, state: State): string {\n const r = serializeObject(obj, state);\n if (r.ok) return describeEntity(r.entity);\n\n // Fallback — dùng describe từ scene kind registry. Mặc định \"(không hỗ trợ DSL)\"\n // để user thấy rõ giới hạn.\n let base: string;\n try {\n base = getKind(obj.kind).describe(obj, state);\n } catch {\n base = `${obj.kind} ${obj.label}`;\n }\n return `${base} (không hỗ trợ DSL)`;\n}\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { paletteFor } from './chunk-R5FL6S7L.mjs';
|
|
3
|
-
import { JxgRenderer } from './chunk-
|
|
3
|
+
import { JxgRenderer } from './chunk-AYSFWUPK.mjs';
|
|
4
4
|
import { renderJsxgOffscreen } from './chunk-ICR4CVOE.mjs';
|
|
5
|
-
import { serializeScene, deserializeScene } from './chunk-
|
|
6
|
-
import { createStore } from './chunk-
|
|
5
|
+
import { serializeScene, deserializeScene } from './chunk-REIJZDVZ.mjs';
|
|
6
|
+
import { createStore } from './chunk-IHUFOV7L.mjs';
|
|
7
7
|
import { DEFAULT_VIEW_2D } from './chunk-73Q7ADVL.mjs';
|
|
8
8
|
|
|
9
9
|
// src/stamps/geometry-2d/serialize.ts
|
|
@@ -92,5 +92,5 @@ function isGeometryCustomData(data) {
|
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
export { deserializeBoard, isGeometryCustomData, renderGeometrySvgFromState, serializeBoard };
|
|
95
|
-
//# sourceMappingURL=chunk-
|
|
96
|
-
//# sourceMappingURL=chunk-
|
|
95
|
+
//# sourceMappingURL=chunk-VRHWDZ66.mjs.map
|
|
96
|
+
//# sourceMappingURL=chunk-VRHWDZ66.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/stamps/geometry-2d/serialize.ts","../src/stamps/geometry-2d/render.ts","../src/stamps/geometry-2d/types.ts"],"names":[],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/stamps/geometry-2d/serialize.ts","../src/stamps/geometry-2d/render.ts","../src/stamps/geometry-2d/types.ts"],"names":[],"mappings":"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","file":"chunk-VRHWDZ66.mjs","sourcesContent":["// src/stamps/geometry-2d/serialize.ts\n//\n// Sau Tier D PR 3: customData.jsonState chỉ chứa `JSON.stringify(state)`\n// (không còn envelope `{version, bbox, state, showAxis, showGrid}`).\n// View info (bbox/axis/grid) nằm trong `state.meta.view` (View2D shape).\n\nimport { serializeScene, deserializeScene } from '../shared/serializeScene';\nimport type { State, View2D } from '../../core/scene';\n\nexport function serializeBoard(state: State, view: View2D): string {\n const withView: State = {\n ...state,\n meta: { domain: '2d', version: state.meta.version, view },\n };\n return serializeScene(withView);\n}\n\nexport function deserializeBoard(raw: string): State {\n return deserializeScene('2d', raw);\n}\n","import { deserializeBoard } from './serialize';\nimport { paletteFor } from './editor/theme';\nimport { createStore } from '../../core/scene';\nimport { DEFAULT_VIEW_2D } from '../../core/scene/types';\nimport { JxgRenderer } from '../../core/scene/render/JxgRenderer';\nimport { renderJsxgOffscreen } from '../shared/jxgOffscreenRender';\n\n/**\n * Re-render geometry SVG từ jsonState đã serialize. Dùng cho:\n * 1. Restore math-stamp file sau khi reload page (Excalidraw mất binary files).\n * 2. Generate SVG lúc INSERT (thay vì clone DOM với màu theo theme editor).\n *\n * LƯU Ý quan trọng — luôn dùng LIGHT palette (nét đậm). Excalidraw apply CSS\n * `filter: invert(93%) hue-rotate(180deg)` lên canvas trong dark mode → nét\n * đậm tự đảo thành sáng. Nếu ta bake nét sáng vào SVG cho dark mode, filter\n * sẽ đảo thành đậm → chìm vào nền tối. Giải pháp: luôn dùng nét đậm + để\n * Excalidraw tự lo invert.\n *\n * Implementation: tạo 1 div ẩn (off-screen, real dimensions để JSXGraph render\n * chuẩn), initBoard, replay creation log từ jsonState, dump SVG, dọn dẹp.\n *\n * Container dimensions phải MATCH aspect ratio của bbox (đã được editor lưu\n * sau khi JSXGraph adjust với keepAspectRatio:true). Trước đây hardcode\n * 400×300 + keepAspectRatio:false làm shape bị kéo dãn (circle thành ellipse,\n * góc vuông lệch) khi bbox không 4:3 → ảnh hiển thị khác với editor lúc\n * double-click. Fix: tính container W/H từ bbox + keepAspectRatio:true để\n * SVG output khớp với view trong editor.\n *\n * Lý do JXG.Options.text.display = 'internal': JSXGraph mặc định render\n * label bằng HTML <div> overlay → clone SVG export sẽ thiếu label.\n */\n\nconst PIXELS_PER_UNIT = 20;\nconst MIN_DIM = 100;\nconst MAX_DIM = 1200;\nconst FALLBACK_W = 400;\nconst FALLBACK_H = 300;\n\nexport function containerDimsForBbox(bbox: [number, number, number, number]): { width: number; height: number } {\n const [xmin, ymax, xmax, ymin] = bbox;\n const w = Math.abs(xmax - xmin);\n const h = Math.abs(ymax - ymin);\n if (!Number.isFinite(w) || !Number.isFinite(h) || w <= 0 || h <= 0) {\n return { width: FALLBACK_W, height: FALLBACK_H };\n }\n let width = w * PIXELS_PER_UNIT;\n let height = h * PIXELS_PER_UNIT;\n const maxAxis = Math.max(width, height);\n if (maxAxis > MAX_DIM) {\n const ratio = MAX_DIM / maxAxis;\n width *= ratio;\n height *= ratio;\n }\n const minAxis = Math.min(width, height);\n if (minAxis < MIN_DIM) {\n const ratio = MIN_DIM / minAxis;\n width *= ratio;\n height *= ratio;\n }\n return { width: Math.round(width), height: Math.round(height) };\n}\n\nexport async function renderGeometrySvgFromState(jsonState: string): Promise<string> {\n const state = deserializeBoard(jsonState);\n const view = state.meta.domain === '2d' ? state.meta.view : DEFAULT_VIEW_2D;\n const bbox = view.bbox as [number, number, number, number];\n // Stamps inserted vào Excalidraw canvas → luôn dùng light palette.\n // Excalidraw's THEME_FILTER tự đảo nét trong dark mode.\n const palette = paletteFor(false);\n const dims = containerDimsForBbox(bbox);\n const { svgString } = await renderJsxgOffscreen({\n bbox,\n dims,\n axis: view.showAxis,\n grid: view.showGrid,\n keepAspectRatio: true,\n applyOptions: (JXG) => {\n \n const opts = (JXG as any).Options;\n if (!opts) return;\n opts.text = opts.text || {};\n opts.text.display = 'internal';\n opts.text.useASCIIMathML = false;\n opts.text.useMathJax = false;\n opts.text.useKatex = false;\n opts.text.strokeColor = palette.label;\n opts.label = opts.label || {};\n opts.label.display = 'internal';\n opts.label.strokeColor = palette.label;\n opts.axis = opts.axis || {};\n opts.axis.strokeColor = palette.axis;\n opts.grid = opts.grid || {};\n opts.grid.strokeColor = palette.grid;\n },\n setup: (board) => {\n const store = createStore(state);\n return new JxgRenderer(store, board);\n },\n });\n return svgString;\n}\n","import type { BaseStampCustomData } from '../shared/types';\n\nexport interface GeometryCustomData extends BaseStampCustomData {\n kind: 'geometry';\n version: 1;\n jsonState: string;\n}\n\nexport function isGeometryCustomData(data: unknown): data is GeometryCustomData {\n if (!data || typeof data !== 'object') return false;\n const d = data as Partial<GeometryCustomData>;\n return d.kind === 'geometry' && d.version === 1 && typeof d.jsonState === 'string';\n}\n"]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { isGeometryCustomData, renderGeometrySvgFromState } from './chunk-
|
|
2
|
+
import { isGeometryCustomData, renderGeometrySvgFromState } from './chunk-VRHWDZ66.mjs';
|
|
3
3
|
import { svgToStampFile } from './chunk-5UTGXHLJ.mjs';
|
|
4
4
|
import { lazy } from 'react';
|
|
5
5
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
6
6
|
|
|
7
7
|
var GeometryStampHost = lazy(
|
|
8
|
-
() => import('./host-
|
|
8
|
+
() => import('./host-L7FMFZUW.mjs').then((m) => ({ default: m.GeometryStampHost }))
|
|
9
9
|
);
|
|
10
10
|
var GeometryIcon = /* @__PURE__ */ jsxs("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
|
|
11
11
|
/* @__PURE__ */ jsx("polygon", { points: "4,20 20,20 12,5" }),
|
|
@@ -38,5 +38,5 @@ var geometryStamp = {
|
|
|
38
38
|
};
|
|
39
39
|
|
|
40
40
|
export { geometryStamp };
|
|
41
|
-
//# sourceMappingURL=chunk-
|
|
42
|
-
//# sourceMappingURL=chunk-
|
|
41
|
+
//# sourceMappingURL=chunk-YSJOVBCD.mjs.map
|
|
42
|
+
//# sourceMappingURL=chunk-YSJOVBCD.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/stamps/geometry-2d/index.tsx"],"names":[],"mappings":";;;;;AAgBA,IAAM,iBAAA,GAAoB,IAAA;AAAA,EAAK,MAC7B,OAAO,qBAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,MAAO,EAAE,OAAA,EAAS,CAAA,CAAE,iBAAA,EAAkB,CAAE;AACjE,CAAA;AAEA,IAAM,YAAA,wBACH,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,SAAQ,WAAA,EAAY,IAAA,EAAK,QAAO,MAAA,EAAO,cAAA,EAAe,aAAY,KAAA,EAAM,aAAA,EAAc,SAAQ,cAAA,EAAe,OAAA,EAAQ,eAAY,MAAA,EAC3J,QAAA,EAAA;AAAA,kBAAA,GAAA,CAAC,SAAA,EAAA,EAAQ,QAAO,iBAAA,EAAkB,CAAA;AAAA,kBAClC,GAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK,CAAA,EAAE,KAAA,EAAM,IAAA,EAAK,cAAA,EAAe,MAAA,EAAO,MAAA,EAAO,CAAA;AAAA,kBACjE,GAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA,EAAE,KAAA,EAAM,IAAA,EAAK,cAAA,EAAe,MAAA,EAAO,MAAA,EAAO,CAAA;AAAA,kBAClE,GAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,GAAA,EAAI,CAAA,EAAE,KAAA,EAAM,IAAA,EAAK,cAAA,EAAe,MAAA,EAAO,MAAA,EAAO;AAAA,CAAA,EACnE,CAAA;AAGK,IAAM,aAAA,GAA+C;AAAA,EAC1D,IAAA,EAAM,UAAA;AAAA,EACN,WAAA,EAAa,GAAA;AAAA,EACb,YAAA,EAAc,GAAA;AAAA,EACd,YAAA,EAAc,8BAAA;AAAA,EACd,WAAA,EAAa,YAAA;AAAA,EACb,aAAA,EAAe,wBAAA;AAAA,EACf,iBAAA,EAAmB,oBAAA;AAAA,EACnB,MAAM,wBAAwB,IAAA,EAAM;AAClC,IAAA,IAAI,CAAC,oBAAA,CAAqB,IAAI,CAAA,EAAG;AAC/B,MAAA,MAAM,IAAI,MAAM,+EAAuE,CAAA;AAAA,IACzF;AACA,IAAA,OAAO,0BAAA,CAA2B,KAAK,SAAS,CAAA;AAAA,EAClD,CAAA;AAAA,EACA,MAAM,0BAA0B,OAAA,EAA4C;AAC1E,IAAA,MAAM,OAAO,OAAA,CAAQ,UAAA;AACrB,IAAA,MAAM,SAAU,OAAA,CAAuC,MAAA;AACvD,IAAA,IAAI,CAAC,QAAQ,CAAC,MAAA,IAAU,CAAC,oBAAA,CAAqB,IAAI,GAAG,OAAO,IAAA;AAC5D,IAAA,MAAM,SAAA,GAAY,MAAM,0BAAA,CAA2B,IAAA,CAAK,SAAS,CAAA;AACjE,IAAA,OAAO,cAAA,CAAe,WAAW,MAAM,CAAA;AAAA,EACzC,CAAA;AAAA,EACA,IAAA,EAAM;AACR","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/stamps/geometry-2d/index.tsx"],"names":[],"mappings":";;;;;AAgBA,IAAM,iBAAA,GAAoB,IAAA;AAAA,EAAK,MAC7B,OAAO,qBAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,MAAO,EAAE,OAAA,EAAS,CAAA,CAAE,iBAAA,EAAkB,CAAE;AACjE,CAAA;AAEA,IAAM,YAAA,wBACH,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,SAAQ,WAAA,EAAY,IAAA,EAAK,QAAO,MAAA,EAAO,cAAA,EAAe,aAAY,KAAA,EAAM,aAAA,EAAc,SAAQ,cAAA,EAAe,OAAA,EAAQ,eAAY,MAAA,EAC3J,QAAA,EAAA;AAAA,kBAAA,GAAA,CAAC,SAAA,EAAA,EAAQ,QAAO,iBAAA,EAAkB,CAAA;AAAA,kBAClC,GAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK,CAAA,EAAE,KAAA,EAAM,IAAA,EAAK,cAAA,EAAe,MAAA,EAAO,MAAA,EAAO,CAAA;AAAA,kBACjE,GAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA,EAAE,KAAA,EAAM,IAAA,EAAK,cAAA,EAAe,MAAA,EAAO,MAAA,EAAO,CAAA;AAAA,kBAClE,GAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,GAAA,EAAI,CAAA,EAAE,KAAA,EAAM,IAAA,EAAK,cAAA,EAAe,MAAA,EAAO,MAAA,EAAO;AAAA,CAAA,EACnE,CAAA;AAGK,IAAM,aAAA,GAA+C;AAAA,EAC1D,IAAA,EAAM,UAAA;AAAA,EACN,WAAA,EAAa,GAAA;AAAA,EACb,YAAA,EAAc,GAAA;AAAA,EACd,YAAA,EAAc,8BAAA;AAAA,EACd,WAAA,EAAa,YAAA;AAAA,EACb,aAAA,EAAe,wBAAA;AAAA,EACf,iBAAA,EAAmB,oBAAA;AAAA,EACnB,MAAM,wBAAwB,IAAA,EAAM;AAClC,IAAA,IAAI,CAAC,oBAAA,CAAqB,IAAI,CAAA,EAAG;AAC/B,MAAA,MAAM,IAAI,MAAM,+EAAuE,CAAA;AAAA,IACzF;AACA,IAAA,OAAO,0BAAA,CAA2B,KAAK,SAAS,CAAA;AAAA,EAClD,CAAA;AAAA,EACA,MAAM,0BAA0B,OAAA,EAA4C;AAC1E,IAAA,MAAM,OAAO,OAAA,CAAQ,UAAA;AACrB,IAAA,MAAM,SAAU,OAAA,CAAuC,MAAA;AACvD,IAAA,IAAI,CAAC,QAAQ,CAAC,MAAA,IAAU,CAAC,oBAAA,CAAqB,IAAI,GAAG,OAAO,IAAA;AAC5D,IAAA,MAAM,SAAA,GAAY,MAAM,0BAAA,CAA2B,IAAA,CAAK,SAAS,CAAA;AACjE,IAAA,OAAO,cAAA,CAAe,WAAW,MAAM,CAAA;AAAA,EACzC,CAAA;AAAA,EACA,IAAA,EAAM;AACR","file":"chunk-YSJOVBCD.mjs","sourcesContent":["'use client';\n\nimport { lazy, type ReactNode } from 'react';\nimport { renderGeometrySvgFromState } from './render';\nimport type {\n RestoredStampFile,\n StampType,\n} from '../shared/types';\nimport { svgToStampFile } from '../shared/svgToStampFile';\nimport {\n isGeometryCustomData,\n type GeometryCustomData,\n} from './types';\n\nexport type { GeometryCustomData };\n\nconst GeometryStampHost = lazy(() =>\n import('./host').then((m) => ({ default: m.GeometryStampHost })),\n);\n\nconst GeometryIcon: ReactNode = (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <polygon points=\"4,20 20,20 12,5\" />\n <circle cx=\"4\" cy=\"20\" r=\"1.4\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"20\" cy=\"20\" r=\"1.4\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"12\" cy=\"5\" r=\"1.4\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n);\n\nexport const geometryStamp: StampType<GeometryCustomData> = {\n kind: 'geometry',\n shortcutKey: 'g',\n toolbarLabel: 'G',\n toolbarTitle: 'Chèn hình học (G)',\n toolbarIcon: GeometryIcon,\n toolbarTestId: 'stamp-toolbar-geometry',\n matchesCustomData: isGeometryCustomData,\n async renderSvgFromCustomData(data) {\n if (!isGeometryCustomData(data)) {\n throw new Error('geometryStamp.renderSvgFromCustomData: customData không phải geometry');\n }\n return renderGeometrySvgFromState(data.jsonState);\n },\n async restoreFileFromCustomData(element): Promise<RestoredStampFile | null> {\n const data = element.customData as GeometryCustomData | undefined;\n const fileId = (element as { fileId?: string | null }).fileId;\n if (!data || !fileId || !isGeometryCustomData(data)) return null;\n const svgString = await renderGeometrySvgFromState(data.jsonState);\n return svgToStampFile(svgString, fileId);\n },\n Host: GeometryStampHost,\n};\n"]}
|
package/dist/geometry-2d.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { B as BaseStampCustomData, S as StampType } from './types-
|
|
1
|
+
import { B as BaseStampCustomData, S as StampType } from './types-DWRyCa2m.mjs';
|
|
2
|
+
import 'zod';
|
|
2
3
|
import 'react';
|
|
3
4
|
import '@excalidraw/excalidraw/element/types';
|
|
4
|
-
import './types-DxlMPh-6.mjs';
|
|
5
5
|
|
|
6
6
|
interface GeometryCustomData extends BaseStampCustomData {
|
|
7
7
|
kind: 'geometry';
|
package/dist/geometry-2d.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { B as BaseStampCustomData, S as StampType } from './types-
|
|
1
|
+
import { B as BaseStampCustomData, S as StampType } from './types-DWRyCa2m.js';
|
|
2
|
+
import 'zod';
|
|
2
3
|
import 'react';
|
|
3
4
|
import '@excalidraw/excalidraw/element/types';
|
|
4
|
-
import './types-DxlMPh-6.js';
|
|
5
5
|
|
|
6
6
|
interface GeometryCustomData extends BaseStampCustomData {
|
|
7
7
|
kind: 'geometry';
|