@xom11/whiteboard 0.7.0 → 0.10.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 +51 -1
- package/dist/chunk-74VEEZBV.mjs +619 -0
- package/dist/chunk-74VEEZBV.mjs.map +1 -0
- package/dist/{chunk-BJX4YNA5.mjs → chunk-G7FR3AIV.mjs} +68 -12
- package/dist/chunk-G7FR3AIV.mjs.map +1 -0
- package/dist/{chunk-SHFOGORM.mjs → chunk-PDKKDZ4H.mjs} +4 -4
- package/dist/{chunk-SHFOGORM.mjs.map → chunk-PDKKDZ4H.mjs.map} +1 -1
- package/dist/chunk-PWIMZIB6.mjs +62 -0
- package/dist/chunk-PWIMZIB6.mjs.map +1 -0
- package/dist/{chunk-LPM4MM45.mjs → chunk-SBDMF4NQ.mjs} +3 -2
- package/dist/chunk-SBDMF4NQ.mjs.map +1 -0
- package/dist/chunk-WQOABS6N.mjs +197 -0
- package/dist/chunk-WQOABS6N.mjs.map +1 -0
- package/dist/{chunk-3SSQKRRO.mjs → chunk-ZVN356JZ.mjs} +4 -4
- package/dist/{chunk-3SSQKRRO.mjs.map → chunk-ZVN356JZ.mjs.map} +1 -1
- package/dist/geometry-2d.js +344 -228
- package/dist/geometry-2d.js.map +1 -1
- package/dist/geometry-2d.mjs +2 -2
- package/dist/geometry-3d.d.mts +1 -1
- package/dist/geometry-3d.d.ts +1 -1
- package/dist/geometry-3d.js +3411 -1277
- package/dist/geometry-3d.js.map +1 -1
- package/dist/geometry-3d.mjs +3 -2
- package/dist/graph-2d.js +360 -66
- package/dist/graph-2d.js.map +1 -1
- package/dist/graph-2d.mjs +2 -2
- package/dist/{host-T2W6R6SO.mjs → host-DJETSFCG.mjs} +272 -223
- package/dist/host-DJETSFCG.mjs.map +1 -0
- package/dist/{host-2QGKMGCT.mjs → host-LZH2FZ2N.mjs} +3 -3
- package/dist/{host-2QGKMGCT.mjs.map → host-LZH2FZ2N.mjs.map} +1 -1
- package/dist/host-N6ACNJKI.mjs +3226 -0
- package/dist/host-N6ACNJKI.mjs.map +1 -0
- package/dist/index.d.mts +133 -6
- package/dist/index.d.ts +133 -6
- package/dist/index.js +5634 -1999
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1231 -146
- package/dist/index.mjs.map +1 -1
- package/package.json +9 -6
- package/dist/chunk-BJX4YNA5.mjs.map +0 -1
- package/dist/chunk-DJTBZEAR.mjs +0 -25
- package/dist/chunk-DJTBZEAR.mjs.map +0 -1
- package/dist/chunk-HM7RIXJE.mjs +0 -331
- package/dist/chunk-HM7RIXJE.mjs.map +0 -1
- package/dist/chunk-HYXFHEDJ.mjs +0 -129
- package/dist/chunk-HYXFHEDJ.mjs.map +0 -1
- package/dist/chunk-LPM4MM45.mjs.map +0 -1
- package/dist/host-T2W6R6SO.mjs.map +0 -1
- package/dist/host-XUFON6CQ.mjs +0 -1422
- package/dist/host-XUFON6CQ.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/stamps/geometry-3d/editor/theme.ts","../src/stamps/geometry-3d/editor/handlers.ts","../src/stamps/geometry-3d/editor/MiniBoard3D.tsx","../src/stamps/geometry-3d/editor/EditorPanel.tsx","../src/stamps/geometry-3d/editor/tools.ts","../src/stamps/geometry-3d/editor/toolButtons.tsx","../src/stamps/geometry-3d/editor/LeftPanel.tsx","../src/stamps/geometry-3d/host.tsx"],"names":["paletteFor","radius","center","MiniBoard3D","p","forwardRef","EditorPanel","useRef","useState","useCallback","useImperativeHandle","jsx","jsxs","useEffect","Geometry3DStampHost","useMemo","Fragment"],"mappings":"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","file":"host-XUFON6CQ.mjs","sourcesContent":["import {\n paletteFor as palette2D,\n type GeomPalette,\n} from '../../geometry-2d/editor/theme';\n\nexport type Geom3DPalette = GeomPalette & {\n view3dBg: string;\n axisX: string;\n axisY: string;\n axisZ: string;\n};\n\nexport function paletteFor(isDark: boolean): Geom3DPalette {\n const base = palette2D(isDark);\n return {\n ...base,\n view3dBg: isDark ? '#1a1a1a' : '#ffffff',\n axisX: '#d63b3b',\n axisY: '#2d8a2d',\n axisZ: '#2d6dd6',\n };\n}\n\nexport const DEFAULT_VIEW3D: {\n azimuth: number;\n elevation: number;\n bbox3D: [number, number, number, number, number, number];\n} = {\n azimuth: 0.7,\n elevation: 0.4,\n bbox3D: [-3, -3, -3, 3, 3, 3],\n};\n\nexport const VIEW3D_ATTRS = (isDark: boolean) => {\n const p = paletteFor(isDark);\n return {\n az: { slider: { visible: false }, point2: { visible: false } },\n el: { slider: { visible: false } },\n projection: 'central' as const,\n axesPosition: 'border' as const,\n xAxis: { strokeColor: p.axisX, lastArrow: { type: 2 } },\n yAxis: { strokeColor: p.axisY, lastArrow: { type: 2 } },\n zAxis: { strokeColor: p.axisZ, lastArrow: { type: 2 } },\n };\n};\n","import type { GeomTool3D } from './tools';\nimport type { SerializedElement3D, Element3DType } from '../serialize';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype JxgObj = any;\n\nexport interface HandlerContextDeps {\n view: { create: (kind: string, parents: unknown[], attrs: unknown) => JxgObj };\n pushLog: (e: SerializedElement3D) => void;\n objMap: Map<string, JxgObj>;\n nextId: () => string;\n isDark: boolean;\n promptCoords: (label: string) => { x: number; y: number; z: number } | null;\n promptNumber: (label: string) => number | null;\n promptText: (label: string) => string | null;\n notify: () => void;\n}\n\nexport interface PendingPoint {\n id: string;\n ref: JxgObj;\n coords: [number, number, number];\n}\n\nexport interface HandlerContext extends HandlerContextDeps {\n pendingPoints: PendingPoint[];\n /** Internal state flag for multi-stage tools (pyramid base done, etc.) */\n pendingFlags: Record<string, unknown>;\n /** World coords keyed by point id — used by label tool to anchor text3d. */\n pushedPointCoords: Map<string, [number, number, number]>;\n}\n\nexport interface ClickHit {\n x3: number;\n y3: number;\n z3: number;\n /** Existing point id if the click landed on an existing point. */\n existingPointId?: string;\n}\n\nexport function createHandlerContext(deps: HandlerContextDeps): HandlerContext {\n return {\n ...deps,\n pendingPoints: [],\n pendingFlags: {},\n pushedPointCoords: new Map(),\n };\n}\n\nfunction refByPlaceholder(id: string): string {\n return `@id:${id}`;\n}\n\nfunction createPoint3D(\n ctx: HandlerContext,\n x: number,\n y: number,\n z: number,\n label?: string,\n): PendingPoint {\n const id = ctx.nextId();\n const attrs: Record<string, unknown> = { id, size: 3 };\n if (label) attrs.name = label;\n const ref = ctx.view.create('point3d', [x, y, z], attrs);\n ctx.objMap.set(id, ref);\n ctx.pushedPointCoords.set(id, [x, y, z]);\n ctx.pushLog({\n type: 'point3d',\n parents: [x, y, z],\n attributes: attrs,\n id,\n label,\n });\n return { id, ref, coords: [x, y, z] };\n}\n\nfunction resolvePoint(ctx: HandlerContext, hit: ClickHit): PendingPoint {\n if (hit.existingPointId && ctx.objMap.has(hit.existingPointId)) {\n // Prefer the stored world coords (the click hit is screen-projected and\n // may differ); fall back to hit coords if the point predates this session.\n const stored = ctx.pushedPointCoords.get(hit.existingPointId);\n return {\n id: hit.existingPointId,\n ref: ctx.objMap.get(hit.existingPointId),\n coords: stored ?? [hit.x3, hit.y3, hit.z3],\n };\n }\n return createPoint3D(ctx, hit.x3, hit.y3, hit.z3);\n}\n\nfunction finishPolygon(\n ctx: HandlerContext,\n points: PendingPoint[],\n extraAttrs: Record<string, unknown> = {},\n): void {\n const id = ctx.nextId();\n const refs = points.map((p) => p.ref);\n const attrs = { id, ...extraAttrs };\n const ref = ctx.view.create('polygon3d', [refs], attrs);\n ctx.objMap.set(id, ref);\n ctx.pushLog({\n type: 'polygon3d',\n parents: [points.map((p) => refByPlaceholder(p.id))],\n attributes: attrs,\n id,\n });\n}\n\nfunction finishLineLike(\n ctx: HandlerContext,\n elType: Element3DType,\n points: PendingPoint[],\n extraAttrs: Record<string, unknown> = {},\n): void {\n const id = ctx.nextId();\n const refs = points.map((p) => p.ref);\n const attrs = { id, ...extraAttrs };\n const ref = ctx.view.create(elType, refs, attrs);\n ctx.objMap.set(id, ref);\n ctx.pushLog({\n type: elType,\n parents: points.map((p) => refByPlaceholder(p.id)),\n attributes: attrs,\n id,\n });\n}\n\nexport function handleToolStep(\n ctx: HandlerContext,\n tool: GeomTool3D,\n hit: ClickHit,\n): void {\n switch (tool) {\n case 'move':\n return;\n\n case 'point': {\n const coords = ctx.promptCoords('Toạ độ điểm (x, y, z)');\n if (!coords) return;\n createPoint3D(ctx, coords.x, coords.y, coords.z);\n ctx.notify();\n return;\n }\n\n case 'segment':\n case 'line': {\n const p = resolvePoint(ctx, hit);\n ctx.pendingPoints.push(p);\n if (ctx.pendingPoints.length === 2) {\n // JSXGraph 3D has no `segment3d`; bound a `line3d` with straight* off for segment.\n // Explicit stroke + fixed to force visible render (default render is invisible\n // in view3d unless attrs are set — see Bug #9).\n const lineColor = ctx.isDark ? '#9ecbff' : '#0066cc';\n const baseAttrs: Record<string, unknown> = {\n strokeColor: lineColor,\n strokeWidth: 2,\n visible: true,\n fixed: true,\n };\n if (tool === 'segment') {\n baseAttrs.straightFirst = false;\n baseAttrs.straightLast = false;\n }\n finishLineLike(ctx, 'line3d', ctx.pendingPoints, baseAttrs);\n ctx.pendingPoints = [];\n }\n ctx.notify();\n return;\n }\n\n case 'plane': {\n const p = resolvePoint(ctx, hit);\n ctx.pendingPoints.push(p);\n if (ctx.pendingPoints.length === 3) {\n // plane3d in JSXGraph expects [point, direction1, direction2] but accepts\n // 3-point form for \"plane through A, B, C\".\n finishLineLike(ctx, 'plane3d', ctx.pendingPoints);\n ctx.pendingPoints = [];\n }\n ctx.notify();\n return;\n }\n\n case 'triangle': {\n const p = resolvePoint(ctx, hit);\n ctx.pendingPoints.push(p);\n if (ctx.pendingPoints.length === 3) {\n finishPolygon(ctx, ctx.pendingPoints);\n ctx.pendingPoints = [];\n }\n ctx.notify();\n return;\n }\n\n case 'polygon': {\n if (\n ctx.pendingPoints.length >= 3 &&\n hit.existingPointId === ctx.pendingPoints[0].id\n ) {\n finishPolygon(ctx, ctx.pendingPoints);\n ctx.pendingPoints = [];\n ctx.notify();\n return;\n }\n const p = resolvePoint(ctx, hit);\n ctx.pendingPoints.push(p);\n ctx.notify();\n return;\n }\n\n case 'label': {\n if (!hit.existingPointId) return;\n const text = ctx.promptText('Nội dung nhãn');\n if (!text) return;\n const id = ctx.nextId();\n // JSXGraph 1.12 `text3d` requires `[[x,y,z], text]` or `[x,y,z,text]`; the\n // `[pointRef, text]` form silently renders empty. Anchor coords come from\n // the host point (we already have its world coords from createPoint3D log).\n // Points are immutable in this editor (no drag-edit) so static coords are\n // safe.\n const pointLog = ctx.pushedPointCoords.get(hit.existingPointId);\n if (!pointLog) return;\n const [x, y, z] = pointLog;\n const attrs: Record<string, unknown> = {\n id,\n fontSize: 14,\n strokeColor: ctx.isDark ? '#f5f5f5' : '#111111',\n };\n const ref = ctx.view.create('text3d', [x, y, z, text], attrs);\n ctx.objMap.set(id, ref);\n ctx.pushLog({\n type: 'text3d',\n parents: [x, y, z, text],\n attributes: attrs,\n id,\n label: text,\n });\n ctx.notify();\n return;\n }\n\n // Solids + curved handled in B8, B9\n default:\n handleSolidStep(ctx, tool, hit);\n return;\n }\n}\n\nexport function handleSolidStep(\n ctx: HandlerContext,\n tool: GeomTool3D,\n hit: ClickHit,\n): void {\n switch (tool) {\n case 'tetrahedron': {\n const p = resolvePoint(ctx, hit);\n ctx.pendingPoints.push(p);\n if (ctx.pendingPoints.length === 4) {\n const [a, b, c, d] = ctx.pendingPoints;\n finishPolyhedron(ctx, [\n [a, b, c],\n [a, b, d],\n [a, c, d],\n [b, c, d],\n ]);\n ctx.pendingPoints = [];\n }\n ctx.notify();\n return;\n }\n\n case 'parallelepiped': {\n const origin = resolvePoint(ctx, hit);\n const v1 = ctx.promptCoords('Vector cạnh 1 (dx, dy, dz)');\n const v2 = ctx.promptCoords('Vector cạnh 2 (dx, dy, dz)');\n const v3 = ctx.promptCoords('Vector cạnh 3 (dx, dy, dz)');\n if (!v1 || !v2 || !v3) return;\n const [ox, oy, oz] = origin.coords;\n // 7 derived points (origin is reused as corner 0)\n const c1 = createPoint3D(ctx, ox + v1.x, oy + v1.y, oz + v1.z);\n const c2 = createPoint3D(ctx, ox + v2.x, oy + v2.y, oz + v2.z);\n const c3 = createPoint3D(ctx, ox + v3.x, oy + v3.y, oz + v3.z);\n const c12 = createPoint3D(\n ctx,\n ox + v1.x + v2.x,\n oy + v1.y + v2.y,\n oz + v1.z + v2.z,\n );\n const c13 = createPoint3D(\n ctx,\n ox + v1.x + v3.x,\n oy + v1.y + v3.y,\n oz + v1.z + v3.z,\n );\n const c23 = createPoint3D(\n ctx,\n ox + v2.x + v3.x,\n oy + v2.y + v3.y,\n oz + v2.z + v3.z,\n );\n const c123 = createPoint3D(\n ctx,\n ox + v1.x + v2.x + v3.x,\n oy + v1.y + v2.y + v3.y,\n oz + v1.z + v2.z + v3.z,\n );\n finishPolyhedron(ctx, [\n [origin, c1, c12, c2],\n [origin, c1, c13, c3],\n [origin, c2, c23, c3],\n [c123, c12, c1, c13],\n [c123, c12, c2, c23],\n [c123, c13, c3, c23],\n ]);\n ctx.pendingPoints = [];\n ctx.notify();\n return;\n }\n\n case 'prism': {\n if (\n ctx.pendingPoints.length >= 3 &&\n hit.existingPointId === ctx.pendingPoints[0].id\n ) {\n const base = ctx.pendingPoints;\n const height = ctx.promptNumber('Chiều cao (theo trục z)');\n if (!height) return;\n const top = base.map((bp) =>\n createPoint3D(ctx, bp.coords[0], bp.coords[1], bp.coords[2] + height),\n );\n const faces: PendingPoint[][] = [base, top];\n for (let i = 0; i < base.length; i++) {\n const next = (i + 1) % base.length;\n faces.push([base[i], base[next], top[next], top[i]]);\n }\n finishPolyhedron(ctx, faces);\n ctx.pendingPoints = [];\n ctx.notify();\n return;\n }\n const p = resolvePoint(ctx, hit);\n ctx.pendingPoints.push(p);\n ctx.notify();\n return;\n }\n\n case 'pyramid': {\n const baseDone = ctx.pendingFlags.pyramidBaseDone === true;\n if (\n !baseDone &&\n ctx.pendingPoints.length >= 3 &&\n hit.existingPointId === ctx.pendingPoints[0].id\n ) {\n ctx.pendingFlags.pyramidBaseDone = true;\n ctx.notify();\n return;\n }\n if (baseDone) {\n const base = ctx.pendingPoints;\n const apex = createPoint3D(ctx, hit.x3, hit.y3, hit.z3);\n const faces: PendingPoint[][] = [base];\n for (let i = 0; i < base.length; i++) {\n const next = (i + 1) % base.length;\n faces.push([base[i], base[next], apex]);\n }\n finishPolyhedron(ctx, faces);\n ctx.pendingPoints = [];\n ctx.pendingFlags.pyramidBaseDone = false;\n ctx.notify();\n return;\n }\n const p = resolvePoint(ctx, hit);\n ctx.pendingPoints.push(p);\n ctx.notify();\n return;\n }\n\n // Curved → B9\n default:\n handleCurvedStep(ctx, tool, hit);\n return;\n }\n}\n\nfunction finishPolyhedron(ctx: HandlerContext, faces: PendingPoint[][]): void {\n // JSXGraph 1.12 `polyhedron3d` API requires `[vertices[], faceIndices[]]` (coords\n // + index arrays) — the previous `[facesAsPointRefs]` form throws `Cannot read\n // 'length' of undefined` at runtime. Emit one `polygon3d` per face instead;\n // polygon3d is proven to render (triangle test) and round-trips cleanly through\n // the existing render.ts path. See Bug #7.\n const faceColor = ctx.isDark ? 'rgba(150, 180, 220, 0.35)' : 'rgba(60, 120, 200, 0.25)';\n const edgeColor = ctx.isDark ? '#9ecbff' : '#0066cc';\n for (const face of faces) {\n finishPolygon(ctx, face, {\n fillColor: faceColor,\n fillOpacity: 1,\n strokeColor: edgeColor,\n strokeWidth: 1.5,\n visible: true,\n });\n }\n}\n\nconst CURVED_SEGMENTS = 16;\n\nexport function handleCurvedStep(\n ctx: HandlerContext,\n tool: GeomTool3D,\n hit: ClickHit,\n): void {\n switch (tool) {\n case 'sphere': {\n const radius = ctx.promptNumber('Bán kính mặt cầu');\n if (radius == null) return;\n const center = resolvePoint(ctx, hit);\n const id = ctx.nextId();\n const ref = ctx.view.create('sphere3d', [center.ref, radius], { id });\n ctx.objMap.set(id, ref);\n ctx.pushLog({\n type: 'sphere3d',\n parents: [refByPlaceholder(center.id), radius],\n attributes: { id },\n id,\n });\n ctx.notify();\n return;\n }\n\n case 'cone': {\n const baseDone = ctx.pendingFlags.coneBaseDone === true;\n if (!baseDone) {\n const radius = ctx.promptNumber('Bán kính đáy');\n if (radius == null) return;\n const center = resolvePoint(ctx, hit);\n ctx.pendingFlags.coneCenter = center;\n ctx.pendingFlags.coneRadius = radius;\n ctx.pendingFlags.coneBaseDone = true;\n ctx.notify();\n return;\n }\n // Second click = apex\n const center = ctx.pendingFlags.coneCenter as PendingPoint;\n const radius = ctx.pendingFlags.coneRadius as number;\n const apex = createPoint3D(ctx, hit.x3, hit.y3, hit.z3);\n const [cx, cy, cz] = center.coords;\n const basePoints: PendingPoint[] = [];\n for (let i = 0; i < CURVED_SEGMENTS; i++) {\n const theta = (i / CURVED_SEGMENTS) * Math.PI * 2;\n basePoints.push(\n createPoint3D(\n ctx,\n cx + radius * Math.cos(theta),\n cy + radius * Math.sin(theta),\n cz,\n ),\n );\n }\n const faces: PendingPoint[][] = [basePoints];\n for (let i = 0; i < CURVED_SEGMENTS; i++) {\n faces.push([basePoints[i], basePoints[(i + 1) % CURVED_SEGMENTS], apex]);\n }\n finishPolyhedron(ctx, faces);\n ctx.pendingFlags.coneBaseDone = false;\n ctx.pendingFlags.coneCenter = undefined;\n ctx.pendingFlags.coneRadius = undefined;\n ctx.notify();\n return;\n }\n\n case 'cylinder': {\n const radius = ctx.promptNumber('Bán kính đáy');\n if (radius == null) return;\n const height = ctx.promptNumber('Chiều cao (theo trục z)');\n if (height == null) return;\n const center = resolvePoint(ctx, hit);\n const [cx, cy, cz] = center.coords;\n const basePoints: PendingPoint[] = [];\n const topPoints: PendingPoint[] = [];\n for (let i = 0; i < CURVED_SEGMENTS; i++) {\n const theta = (i / CURVED_SEGMENTS) * Math.PI * 2;\n basePoints.push(\n createPoint3D(\n ctx,\n cx + radius * Math.cos(theta),\n cy + radius * Math.sin(theta),\n cz,\n ),\n );\n topPoints.push(\n createPoint3D(\n ctx,\n cx + radius * Math.cos(theta),\n cy + radius * Math.sin(theta),\n cz + height,\n ),\n );\n }\n const faces: PendingPoint[][] = [basePoints, topPoints];\n for (let i = 0; i < CURVED_SEGMENTS; i++) {\n const next = (i + 1) % CURVED_SEGMENTS;\n faces.push([basePoints[i], basePoints[next], topPoints[next], topPoints[i]]);\n }\n finishPolyhedron(ctx, faces);\n ctx.notify();\n return;\n }\n\n // 'solidofrevolution' removed in 0.6.1 — `solidofrevolution3d` is not a valid\n // JSXGraph 1.12.2 element. See Bug #8.\n default:\n return;\n }\n}\n\n// Helpers exported for B8/B9 to reuse\nexport {\n createPoint3D,\n resolvePoint,\n refByPlaceholder,\n finishPolygon,\n finishLineLike,\n};\n","'use client';\n\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react';\nimport { DEFAULT_VIEW3D, VIEW3D_ATTRS, paletteFor } from './theme';\nimport type { GeomTool3D } from './tools';\nimport type { SerializedBoard3D, SerializedElement3D } from '../serialize';\nimport {\n createHandlerContext,\n handleToolStep,\n type ClickHit,\n type HandlerContext,\n} from './handlers';\n\nexport interface MiniBoard3DHandle {\n getContainer: () => HTMLDivElement | null;\n getTool: () => GeomTool3D;\n setTool: (t: GeomTool3D) => void;\n getCreationLog: () => SerializedElement3D[];\n pushLog: (e: SerializedElement3D) => void;\n getViewState: () => {\n azimuth: number;\n elevation: number;\n bbox3D: [number, number, number, number, number, number];\n };\n getBbox: () => [number, number, number, number];\n getShowAxes: () => boolean;\n getShowMesh: () => boolean;\n setShowAxes: (b: boolean) => void;\n setShowMesh: (b: boolean) => void;\n resetView: () => void;\n undo: () => void;\n canUndo: () => boolean;\n snapshotSVG: () => { svgString: string; width: number; height: number };\n subscribe: (cb: () => void) => () => void;\n}\n\ninterface Props {\n isDark: boolean;\n initialState?: SerializedBoard3D | null;\n}\n\n// JSXGraph board / view types are not published — use minimal local shapes.\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype JxgBoard = any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype JxgView = any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype JxgObj = any;\n\nexport const MiniBoard3D = forwardRef<MiniBoard3DHandle, Props>(function MiniBoard3D(\n { isDark, initialState },\n ref,\n) {\n const reactId = useId();\n const containerId = `geom3d_${reactId.replace(/[^a-zA-Z0-9_]/g, '_')}`;\n const containerRef = useRef<HTMLDivElement | null>(null);\n const boardRef = useRef<JxgBoard>(null);\n const viewRef = useRef<JxgView>(null);\n const toolRef = useRef<GeomTool3D>('move');\n const logRef = useRef<SerializedElement3D[]>([]);\n const objMapRef = useRef<Map<string, JxgObj>>(new Map());\n const subsRef = useRef<Set<() => void>>(new Set());\n const initialBbox3D = useRef<[number, number, number, number, number, number]>(\n initialState?.view.bbox3D ?? DEFAULT_VIEW3D.bbox3D,\n );\n const ctxRef = useRef<HandlerContext | null>(null);\n const pointerHandlerRef = useRef<{ el: HTMLElement | SVGElement; fn: EventListener } | null>(null);\n const [showAxes, setShowAxes] = useState(initialState?.showAxes ?? true);\n const [showMesh, setShowMesh] = useState(initialState?.showMesh ?? false);\n\n const notify = useCallback(() => {\n for (const cb of subsRef.current) cb();\n }, []);\n\n useEffect(() => {\n const div = containerRef.current;\n if (!div) return;\n let cancelled = false;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let JXG: any = null;\n let board: JxgBoard | null = null;\n\n void (async () => {\n JXG = (await import('jsxgraph')).default;\n if (cancelled || !containerRef.current) return;\n JXG.Options.text.display = 'internal';\n\n board = JXG.JSXGraph.initBoard(div, {\n boundingbox: [-6, 6, 6, -6],\n axis: false,\n showCopyright: false,\n showNavigation: false,\n renderer: 'svg',\n });\n boardRef.current = board;\n\n const initView = initialState?.view ?? DEFAULT_VIEW3D;\n const baseAttrs = VIEW3D_ATTRS(isDark);\n const view: JxgView = board.create(\n 'view3d',\n [\n [-5, -5],\n [10, 10],\n [\n [initView.bbox3D[0], initView.bbox3D[3]],\n [initView.bbox3D[1], initView.bbox3D[4]],\n [initView.bbox3D[2], initView.bbox3D[5]],\n ],\n ],\n {\n ...baseAttrs,\n az: { ...baseAttrs.az, value: initView.azimuth },\n el: { ...baseAttrs.el, value: initView.elevation },\n },\n );\n viewRef.current = view;\n\n // Wire pointer events to handlers\n let idCounter = 1;\n const ctx: HandlerContext = createHandlerContext({\n view,\n pushLog: (e) => {\n logRef.current.push(e);\n notify();\n },\n objMap: objMapRef.current,\n nextId: () => `obj_${Date.now().toString(36)}_${(idCounter++).toString(36)}`,\n isDark,\n promptCoords: (label) => {\n const raw = window.prompt(`${label}\\n(định dạng \"x,y,z\")`, '0,0,0');\n if (!raw) return null;\n const parts = raw.split(',').map((s) => Number(s.trim()));\n if (parts.length !== 3 || parts.some((n) => !isFinite(n))) return null;\n return { x: parts[0], y: parts[1], z: parts[2] };\n },\n promptNumber: (label) => {\n const raw = window.prompt(label, '1');\n if (raw == null) return null;\n const n = Number(raw);\n return isFinite(n) ? n : null;\n },\n promptText: (label) => {\n const raw = window.prompt(label, '');\n return raw == null ? null : raw;\n },\n notify,\n });\n ctxRef.current = ctx;\n\n // Helper: find existing point3d under pointer (returns its id) so polygon\n // close + segment chaining work.\n //\n // Bug #10 root cause: JSXGraph 3D `point3d` objects don't expose `coords`\n // directly — the rendered position lives on the auto-generated 2D shadow\n // `element2D.coords.scrCoords`. The earlier code read `obj.coords` which\n // was always undefined, so every iteration `continue`'d and the hit-test\n // never matched. View3d's screen↔world projection isn't lossless, so the\n // user's click position can differ from the rendered point by 100+ px;\n // using the shadow's actual screen coords fixes both that drift and the\n // synthetic-test miss.\n function findExistingPointAt(clientX: number, clientY: number): string | undefined {\n const containerRect = (div as HTMLDivElement).getBoundingClientRect();\n const localX = clientX - containerRect.left;\n const localY = clientY - containerRect.top;\n const PICK = 18;\n const svg = (div as HTMLDivElement).querySelector('svg');\n if (!svg) return undefined;\n for (const [id, obj] of objMapRef.current) {\n const entry = obj as {\n elType?: string;\n element2D?: { coords?: { scrCoords?: number[] } };\n };\n if (entry?.elType !== 'point3d') continue;\n const sc = entry.element2D?.coords?.scrCoords;\n if (!sc || sc.length < 3) continue;\n const dx = sc[1] - localX;\n const dy = sc[2] - localY;\n if (dx * dx + dy * dy <= PICK * PICK) return id;\n }\n return undefined;\n }\n\n const handlePointerDown = (e: PointerEvent) => {\n const tool = toolRef.current;\n if (tool === 'move') return;\n // Suppress default JSXGraph drag/select for tool clicks\n const existingPointId = findExistingPointAt(e.clientX, e.clientY);\n let x3 = 0;\n let y3 = 0;\n const z3 = 0;\n try {\n // 2D world coords from screen, project onto z=0 plane.\n const board2d = boardRef.current as\n | { getCoordsTopLeftCorner?: unknown; getUsrCoordsOfMouse?: (ev: Event) => [number, number] }\n | null;\n if (board2d?.getUsrCoordsOfMouse) {\n const uc = board2d.getUsrCoordsOfMouse(e);\n if (Array.isArray(uc) && uc.length >= 2) {\n x3 = uc[0];\n y3 = uc[1];\n }\n }\n } catch {\n /* fall back to 0,0,0 */\n }\n const hit: ClickHit = { x3, y3, z3, existingPointId };\n handleToolStep(ctx, tool, hit);\n };\n\n const svgEl = (div as HTMLDivElement).querySelector('svg');\n const targetEl = (svgEl ?? (div as HTMLDivElement)) as HTMLElement | SVGElement;\n const handlePointerDownEv: EventListener = (e) => handlePointerDown(e as PointerEvent);\n targetEl.addEventListener('pointerdown', handlePointerDownEv);\n pointerHandlerRef.current = { el: targetEl, fn: handlePointerDownEv };\n\n if (initialState?.elements?.length) {\n const map = objMapRef.current;\n for (const el of initialState.elements) {\n const parents = el.parents.map((p) =>\n typeof p === 'string' && p.startsWith('@id:') ? map.get(p.slice(4)) : p,\n );\n const obj = view.create(el.type, parents, {\n ...el.attributes,\n id: el.id,\n name: el.label,\n });\n map.set(el.id, obj);\n logRef.current.push(el);\n }\n }\n })();\n\n return () => {\n cancelled = true;\n if (pointerHandlerRef.current) {\n pointerHandlerRef.current.el.removeEventListener(\n 'pointerdown',\n pointerHandlerRef.current.fn,\n );\n pointerHandlerRef.current = null;\n }\n try {\n if (board && JXG) JXG.JSXGraph.freeBoard(board);\n } catch {\n /* ignore teardown errors in tests */\n }\n boardRef.current = null;\n viewRef.current = null;\n ctxRef.current = null;\n objMapRef.current.clear();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleRef = useRef<MiniBoard3DHandle | null>(null);\n handleRef.current = {\n getContainer: () => containerRef.current,\n getTool: () => toolRef.current,\n setTool: (t) => {\n toolRef.current = t;\n notify();\n },\n // Sync toạ độ live của free point3d về log trước khi trả ra. JSXGraph\n // cho phép drag point3d (parents=[x,y,z] không có ref), việc drag chỉ\n // cập nhật obj.X()/Y()/Z() chứ không đụng log → re-edit + Chèn sẽ\n // serialize toạ độ cũ → SVG không đổi → fileId trùng → user thấy\n // \"k thay đổi\". Line/plane/polygon/sphere tham chiếu point qua @id nên\n // auto-update theo.\n getCreationLog: () => logRef.current.map((e) => {\n if (e.type !== 'point3d') return { ...e };\n const parents = e.parents;\n if (!Array.isArray(parents) || parents.length !== 3) return { ...e };\n if (\n typeof parents[0] !== 'number' ||\n typeof parents[1] !== 'number' ||\n typeof parents[2] !== 'number'\n ) return { ...e };\n const obj = objMapRef.current.get(e.id) as\n | { X?: () => number; Y?: () => number; Z?: () => number }\n | undefined;\n if (\n !obj ||\n typeof obj.X !== 'function' ||\n typeof obj.Y !== 'function' ||\n typeof obj.Z !== 'function'\n ) return { ...e };\n const x = obj.X();\n const y = obj.Y();\n const z = obj.Z();\n if (!Number.isFinite(x) || !Number.isFinite(y) || !Number.isFinite(z)) return { ...e };\n return { ...e, parents: [x, y, z] };\n }),\n pushLog: (e) => {\n logRef.current.push(e);\n notify();\n },\n getViewState: () => {\n const v = viewRef.current as { az?: { Value?: () => number }; el?: { Value?: () => number } } | null;\n return {\n azimuth: v?.az?.Value?.() ?? DEFAULT_VIEW3D.azimuth,\n elevation: v?.el?.Value?.() ?? DEFAULT_VIEW3D.elevation,\n bbox3D: initialBbox3D.current,\n };\n },\n getBbox: () => [-6, 6, 6, -6],\n getShowAxes: () => showAxes,\n getShowMesh: () => showMesh,\n setShowAxes: (b) => {\n setShowAxes(b);\n notify();\n },\n setShowMesh: (b) => {\n setShowMesh(b);\n notify();\n },\n resetView: () => {\n notify();\n },\n undo: () => {\n logRef.current.pop();\n notify();\n },\n canUndo: () => logRef.current.length > 0,\n snapshotSVG: () => {\n const div = containerRef.current;\n if (!div) return { svgString: '', width: 0, height: 0 };\n const svg = div.querySelector('svg');\n if (!svg) return { svgString: '', width: 0, height: 0 };\n const clone = svg.cloneNode(true) as SVGElement;\n const rect = svg.getBoundingClientRect();\n const width = rect.width || 600;\n const height = rect.height || 600;\n clone.setAttribute('width', String(width));\n clone.setAttribute('height', String(height));\n return {\n svgString: new XMLSerializer().serializeToString(clone),\n width,\n height,\n };\n },\n subscribe: (cb) => {\n subsRef.current.add(cb);\n return () => {\n subsRef.current.delete(cb);\n };\n },\n };\n\n useImperativeHandle(ref, () => handleRef.current!, []);\n\n const p = paletteFor(isDark);\n\n return (\n <div\n ref={containerRef}\n id={containerId}\n style={{\n width: '100%',\n height: '100%',\n background: p.view3dBg,\n position: 'relative',\n // Clip JSXGraph mesh3d/bounding-box paths that project outside the\n // board container (Bug #4) — without this they overlap LeftPanel and\n // block pointer events.\n overflow: 'hidden',\n }}\n />\n );\n});\n","'use client';\nimport React, { forwardRef, useCallback, useImperativeHandle, useRef, useState } from 'react';\nimport { MiniBoard3D, type MiniBoard3DHandle } from './MiniBoard3D';\nimport type { SerializedBoard3D } from '../serialize';\n\nexport interface EditorPanelHandle {\n tryInsert: () => boolean;\n hasContent: () => boolean;\n}\n\ninterface Props {\n isDark: boolean;\n initial: SerializedBoard3D | null;\n onInsert: (jsonState: string, svgString: string, width: number, height: number) => void;\n onClose: () => void;\n /** Mobile mode: full-screen + hamburger header. */\n isMobile?: boolean;\n /** Khi true, panel position offset left để chừa chỗ cho LeftPanel (240px). */\n withLeftPanel?: boolean;\n /** Callback expose board handle ra Host để LeftPanel sibling dùng được. */\n onBoardReady?: (handle: MiniBoard3DHandle | null) => void;\n /** Click hamburger trên mobile để mở LeftPanel drawer. */\n onOpenDrawer?: () => void;\n}\n\nexport const EditorPanel = forwardRef<EditorPanelHandle, Props>(function EditorPanel(\n { isDark, initial, onInsert, onClose, isMobile = false, withLeftPanel = false, onBoardReady, onOpenDrawer },\n ref,\n) {\n const boardRef = useRef<MiniBoard3DHandle | null>(null);\n const [ready, setReady] = useState(false);\n const onBoardReadyRef = useRef(onBoardReady);\n onBoardReadyRef.current = onBoardReady;\n\n const setBoard = useCallback((h: MiniBoard3DHandle | null) => {\n boardRef.current = h;\n setReady(!!h);\n onBoardReadyRef.current?.(h);\n }, []);\n\n const performInsert = useCallback((): boolean => {\n const board = boardRef.current;\n if (!board) return false;\n const log = board.getCreationLog();\n if (log.length === 0) return false;\n const view = board.getViewState();\n const state: SerializedBoard3D = {\n version: 1,\n bbox: board.getBbox(),\n view,\n showAxes: board.getShowAxes(),\n showMesh: board.getShowMesh(),\n elements: log,\n };\n const snap = board.snapshotSVG();\n onInsert(JSON.stringify(state), snap.svgString, snap.width, snap.height);\n return true;\n }, [onInsert]);\n\n useImperativeHandle(\n ref,\n () => ({\n tryInsert: performInsert,\n hasContent: () => (boardRef.current?.getCreationLog().length ?? 0) > 0,\n }),\n [performInsert],\n );\n\n const handleInsert = useCallback(() => {\n performInsert();\n }, [performInsert]);\n\n const wrapperStyle: React.CSSProperties = isMobile\n ? { position: 'fixed', inset: 0, zIndex: 40 }\n : {\n position: 'absolute',\n top: '50%',\n left: withLeftPanel ? 'calc(50% + 120px)' : '50%',\n transform: 'translate(-50%, -50%)',\n zIndex: 40,\n };\n\n return (\n <div\n role=\"dialog\"\n aria-label=\"Dựng hình học 3D\"\n data-testid=\"geom3d-editor-panel\"\n data-stamp-area=\"true\"\n data-mobile-editor={isMobile ? 'true' : undefined}\n style={wrapperStyle}\n className={[\n isDark ? 'theme--dark ' : '',\n 'flex flex-col overflow-hidden bg-white',\n isMobile\n ? 'h-full w-full'\n : 'h-[600px] max-h-[85vh] w-[760px] max-w-[calc(100vw-280px)] rounded-lg border border-slate-300 shadow-2xl ring-1 ring-black/5',\n ].join(' ')}\n >\n <header className=\"flex items-center gap-2 border-b border-slate-200 bg-gradient-to-r from-blue-600 to-cyan-600 px-3 py-2 text-white\">\n {isMobile && (\n <button\n type=\"button\"\n onClick={onOpenDrawer}\n aria-label=\"Mở ngăn công cụ\"\n className=\"-ml-1 inline-flex h-10 w-10 items-center justify-center rounded transition hover:bg-white/15\"\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"4\" y1=\"6\" x2=\"20\" y2=\"6\" />\n <line x1=\"4\" y1=\"12\" x2=\"20\" y2=\"12\" />\n <line x1=\"4\" y1=\"18\" x2=\"20\" y2=\"18\" />\n </svg>\n </button>\n )}\n <h3 className=\"flex flex-1 items-center gap-2 text-sm font-semibold\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M4 7 L14 4 L20 7 L14 10 Z M4 7 L4 17 L14 20 L14 10 M14 20 L20 17 L20 7\" />\n </svg>\n Hình học không gian (3D)\n </h3>\n {isMobile && (\n <button\n type=\"button\"\n onClick={handleInsert}\n disabled={!ready}\n data-testid=\"geom3d-insert-btn-mobile\"\n className=\"rounded bg-white/15 px-3 py-1.5 text-xs font-semibold transition hover:bg-white/25 disabled:opacity-50\"\n >\n Chèn\n </button>\n )}\n <button\n onClick={onClose}\n aria-label=\"Đóng\"\n className=\"inline-flex h-9 w-9 items-center justify-center rounded transition hover:bg-white/15\"\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n </svg>\n </button>\n </header>\n\n <div className=\"min-h-0 flex-1\">\n <MiniBoard3D ref={setBoard} isDark={isDark} initialState={initial} />\n </div>\n\n {!isMobile && (\n <footer className=\"flex items-center justify-between border-t border-slate-200 bg-slate-50 px-3 py-2\">\n <span className=\"text-xs text-slate-500\">Chọn công cụ bên trái, click trên bảng để dựng hình.</span>\n <div className=\"flex gap-2\">\n <button\n onClick={onClose}\n className=\"rounded border border-slate-300 bg-white px-3 py-1 text-xs font-medium text-slate-700 transition hover:bg-slate-100\"\n >\n Huỷ\n </button>\n <button\n onClick={handleInsert}\n disabled={!ready}\n data-testid=\"geom3d-insert-btn\"\n className=\"rounded bg-blue-600 px-3 py-1 text-xs font-medium text-white transition hover:bg-blue-700 disabled:opacity-50\"\n >\n Chèn\n </button>\n </div>\n </footer>\n )}\n </div>\n );\n});\n","export type GeomTool3D =\n | 'move'\n | 'point'\n | 'segment'\n | 'line'\n | 'plane'\n | 'triangle'\n | 'polygon'\n | 'tetrahedron'\n | 'parallelepiped'\n | 'prism'\n | 'pyramid'\n | 'sphere'\n | 'cone'\n | 'cylinder'\n | 'label';\n\nexport type ToolGroup3D = 'view' | 'primitive' | 'solid' | 'curved' | 'meta';\n\nexport interface ToolDef3D {\n key: GeomTool3D;\n label: string;\n group: ToolGroup3D;\n stepsRequired: number;\n hint?: string;\n}\n\nexport const GROUP_LABELS_3D: Record<ToolGroup3D, string> = {\n view: 'Xem',\n primitive: 'Cơ bản',\n solid: 'Khối đa diện',\n curved: 'Khối cong',\n meta: 'Khác',\n};\n\n// Positional A..E — letter shortcut cho chord 2-phím.\nexport const GROUP_ORDER_3D: ToolGroup3D[] = [\n 'view',\n 'primitive',\n 'solid',\n 'curved',\n 'meta',\n];\n\nconst A_CODE_3D = 'A'.charCodeAt(0);\n\nexport function letterForGroup3D(g: ToolGroup3D): string {\n const idx = GROUP_ORDER_3D.indexOf(g);\n return idx >= 0 ? String.fromCharCode(A_CODE_3D + idx) : '';\n}\n\nexport function groupForLetter3D(ch: string): ToolGroup3D | null {\n if (ch.length !== 1) return null;\n const upper = ch.toUpperCase();\n const idx = upper.charCodeAt(0) - A_CODE_3D;\n if (idx < 0 || idx >= GROUP_ORDER_3D.length) return null;\n return GROUP_ORDER_3D[idx];\n}\n\nexport const TOOLS_3D: ReadonlyArray<ToolDef3D> = [\n { key: 'move', label: 'Di chuyển', group: 'view', stepsRequired: 0 },\n { key: 'point', label: 'Điểm', group: 'primitive', stepsRequired: 1, hint: 'Nhập (x, y, z)' },\n { key: 'segment', label: 'Đoạn thẳng', group: 'primitive', stepsRequired: 2 },\n { key: 'line', label: 'Đường thẳng', group: 'primitive', stepsRequired: 2 },\n { key: 'plane', label: 'Mặt phẳng', group: 'primitive', stepsRequired: 3 },\n { key: 'triangle', label: 'Tam giác', group: 'primitive', stepsRequired: 3 },\n {\n key: 'polygon',\n label: 'Đa giác',\n group: 'primitive',\n stepsRequired: 3,\n hint: 'Click trở lại điểm đầu để đóng',\n },\n { key: 'tetrahedron', label: 'Tứ diện', group: 'solid', stepsRequired: 4 },\n {\n key: 'parallelepiped',\n label: 'Hình hộp',\n group: 'solid',\n stepsRequired: 1,\n hint: '1 đỉnh + 3 vector',\n },\n {\n key: 'prism',\n label: 'Lăng trụ',\n group: 'solid',\n stepsRequired: 3,\n hint: 'Đa giác đáy + chiều cao',\n },\n {\n key: 'pyramid',\n label: 'Chóp',\n group: 'solid',\n stepsRequired: 4,\n hint: 'Đa giác đáy + đỉnh',\n },\n { key: 'sphere', label: 'Mặt cầu', group: 'curved', stepsRequired: 1, hint: 'Tâm + bán kính' },\n {\n key: 'cone',\n label: 'Hình nón',\n group: 'curved',\n stepsRequired: 2,\n hint: 'Tâm đáy + bán kính + đỉnh',\n },\n {\n key: 'cylinder',\n label: 'Hình trụ',\n group: 'curved',\n stepsRequired: 1,\n hint: 'Tâm đáy + bán kính + chiều cao',\n },\n { key: 'label', label: 'Nhãn', group: 'meta', stepsRequired: 1, hint: 'Gắn vào điểm' },\n];\n","'use client';\nimport type { ReactNode } from 'react';\nimport type { GeomTool3D } from './tools';\n\ninterface ToolButtonProps {\n toolKey: GeomTool3D;\n label: string;\n hint?: string;\n active: boolean;\n onClick: () => void;\n icon: ReactNode;\n badge?: ReactNode;\n}\n\nexport function ToolButton({ toolKey, label, hint, active, onClick, icon, badge }: ToolButtonProps) {\n return (\n <button\n type=\"button\"\n title={hint ? `${label} — ${hint}` : label}\n aria-label={label}\n aria-pressed={active}\n onClick={onClick}\n data-active={active || undefined}\n data-tool={toolKey}\n className={[\n 'relative flex h-8 items-center justify-center rounded-md transition',\n active\n ? 'bg-blue-600 text-white shadow-sm'\n : 'text-slate-700 hover:bg-slate-100 hover:text-slate-900',\n ].join(' ')}\n >\n {icon}\n {badge}\n </button>\n );\n}\n\nconst stroke = {\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 1.5,\n strokeLinecap: 'round' as const,\n strokeLinejoin: 'round' as const,\n};\n\nexport const ICONS_3D: Record<GeomTool3D, ReactNode> = {\n move: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" {...stroke}>\n <path d=\"M5 9l-3 3 3 3M19 9l3 3-3 3M9 5l3-3 3 3M9 19l3 3 3-3\" />\n </svg>\n ),\n point: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\">\n <circle cx=\"12\" cy=\"12\" r=\"3\" fill=\"currentColor\" />\n </svg>\n ),\n segment: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" {...stroke}>\n <line x1=\"4\" y1=\"20\" x2=\"20\" y2=\"4\" />\n <circle cx=\"4\" cy=\"20\" r=\"1.5\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"20\" cy=\"4\" r=\"1.5\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n ),\n line: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" {...stroke}>\n <line x1=\"2\" y1=\"22\" x2=\"22\" y2=\"2\" />\n </svg>\n ),\n plane: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" {...stroke}>\n <path d=\"M3 18 L8 8 L21 6 L16 18 Z\" />\n </svg>\n ),\n triangle: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" {...stroke}>\n <path d=\"M12 4 L21 20 L3 20 Z\" />\n </svg>\n ),\n polygon: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" {...stroke}>\n <path d=\"M12 3 L20 9 L17 19 L7 19 L4 9 Z\" />\n </svg>\n ),\n tetrahedron: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" {...stroke}>\n <path d=\"M12 3 L20 20 L4 20 Z M12 3 L12 20\" />\n </svg>\n ),\n parallelepiped: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" {...stroke}>\n <path d=\"M4 7 L14 4 L20 7 L14 10 Z M4 7 L4 17 L14 20 L14 10 M14 20 L20 17 L20 7\" />\n </svg>\n ),\n prism: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" {...stroke}>\n <path d=\"M12 4 L18 8 L18 20 L12 16 Z M12 4 L6 8 L6 20 L12 16 M6 8 L12 12 L18 8 M6 20 L18 20\" />\n </svg>\n ),\n pyramid: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" {...stroke}>\n <path d=\"M12 3 L4 20 L20 20 Z M12 3 L12 20\" />\n </svg>\n ),\n sphere: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" {...stroke}>\n <circle cx=\"12\" cy=\"12\" r=\"8\" />\n <ellipse cx=\"12\" cy=\"12\" rx=\"8\" ry=\"3\" />\n </svg>\n ),\n cone: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" {...stroke}>\n <path d=\"M12 3 L4 20 L20 20 Z\" />\n <ellipse cx=\"12\" cy=\"20\" rx=\"8\" ry=\"2\" />\n </svg>\n ),\n cylinder: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" {...stroke}>\n <ellipse cx=\"12\" cy=\"5\" rx=\"6\" ry=\"2\" />\n <ellipse cx=\"12\" cy=\"19\" rx=\"6\" ry=\"2\" />\n <line x1=\"6\" y1=\"5\" x2=\"6\" y2=\"19\" />\n <line x1=\"18\" y1=\"5\" x2=\"18\" y2=\"19\" />\n </svg>\n ),\n label: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" {...stroke}>\n <path d=\"M4 4 H 16 L 20 8 L 16 12 H 4 Z\" />\n </svg>\n ),\n};\n","'use client';\n\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { TOOLS_3D, GROUP_LABELS_3D, GROUP_ORDER_3D, letterForGroup3D, type GeomTool3D, type ToolDef3D, type ToolGroup3D } from './tools';\nimport { ToolButton, ICONS_3D } from './toolButtons';\nimport type { MiniBoard3DHandle } from './MiniBoard3D';\nimport { MobileToolDrawer, type MobileToolGroup } from '../../shared/MobileToolDrawer';\n\nconst TOOLTIP_DELAY_MS = 400;\ntype HoverState = { label: string; hint?: string; x: number; y: number } | null;\n\n// ---------- Shell (desktop) ----------\n\ninterface ShellProps {\n title: string;\n icon: React.ReactNode;\n onClose: () => void;\n children: React.ReactNode;\n isDark?: boolean;\n}\n\nfunction Shell({ title, icon, onClose, children, isDark }: ShellProps) {\n return (\n <aside\n role=\"complementary\"\n aria-label={title}\n data-testid=\"geom3d-left-panel\"\n data-stamp-area=\"true\"\n className={[\n isDark ? 'theme--dark ' : '',\n 'absolute left-0 top-0 z-30 flex h-full w-60 flex-col border-r border-slate-200 bg-white shadow-md animate-in slide-in-from-left duration-200',\n ].join('')}\n >\n <header className=\"flex items-center justify-between border-b border-slate-200 bg-gradient-to-r from-slate-50 to-white px-3 py-2\">\n <h3 className=\"flex items-center gap-2 text-sm font-semibold text-slate-800\">\n <span className=\"text-base leading-none\">{icon}</span>\n {title}\n </h3>\n <button\n onClick={onClose}\n aria-label=\"Đóng\"\n className=\"rounded p-1 text-slate-500 transition hover:bg-slate-100 hover:text-slate-800\"\n >\n <CloseIcon />\n </button>\n </header>\n <div className=\"min-h-0 flex-1 overflow-y-auto p-3 space-y-4\">{children}</div>\n </aside>\n );\n}\n\nfunction Section({ label, children }: { label: string; children: React.ReactNode }) {\n return (\n <section>\n <h4 className=\"mb-1.5 text-[10px] font-semibold uppercase tracking-wider text-slate-500\">\n {label}\n </h4>\n {children}\n </section>\n );\n}\n\n// ---------- Icons ----------\n\nconst Geom3DIconHeader = (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M4 7 L14 4 L20 7 L14 10 Z M4 7 L4 17 L14 20 L14 10 M14 20 L20 17 L20 7\" />\n </svg>\n);\n\nfunction CloseIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n </svg>\n );\n}\n\nfunction UndoIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"3 7 3 13 9 13\" />\n <path d=\"M3.51 13a9 9 0 1 0 2.13-9.36L3 7\" />\n </svg>\n );\n}\n\nfunction ResetViewIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\" />\n <path d=\"M3 3v5h5\" />\n </svg>\n );\n}\n\nfunction AxisIcon3D() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"12\" y1=\"20\" x2=\"12\" y2=\"4\" />\n <line x1=\"12\" y1=\"12\" x2=\"22\" y2=\"6\" />\n <line x1=\"12\" y1=\"12\" x2=\"2\" y2=\"18\" />\n </svg>\n );\n}\n\nfunction MeshIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M4 8 L12 4 L20 8 L12 12 Z\" />\n <path d=\"M4 8 L4 16 L12 20 L12 12\" />\n <path d=\"M12 20 L20 16 L20 8\" />\n </svg>\n );\n}\n\n// ---------- Props ----------\n\ninterface Props {\n handle: MiniBoard3DHandle | null;\n onResetView: () => void;\n onClose: () => void;\n isDark?: boolean;\n isMobile?: boolean;\n drawerOpen?: boolean;\n onDrawerClose?: () => void;\n /** Chord shortcut: group đang được focus (sau khi bấm letter). null = không active. */\n chordGroup?: ToolGroup3D | null;\n}\n\n// ---------- Desktop tooltip helper ----------\n\nfunction useToolHoverTooltip() {\n const [hover, setHover] = useState<HoverState>(null);\n const [portalReady, setPortalReady] = useState(false);\n const hoverTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n setPortalReady(true);\n return () => {\n if (hoverTimerRef.current) clearTimeout(hoverTimerRef.current);\n };\n }, []);\n\n const showHover = useCallback((el: HTMLElement, t: ToolDef3D) => {\n if (hoverTimerRef.current) clearTimeout(hoverTimerRef.current);\n hoverTimerRef.current = setTimeout(() => {\n const r = el.getBoundingClientRect();\n setHover({ label: t.label, hint: t.hint, x: r.right, y: r.top + r.height / 2 });\n }, TOOLTIP_DELAY_MS);\n }, []);\n\n const hideHover = useCallback(() => {\n if (hoverTimerRef.current) {\n clearTimeout(hoverTimerRef.current);\n hoverTimerRef.current = null;\n }\n setHover(null);\n }, []);\n\n return { hover, portalReady, showHover, hideHover };\n}\n\n// ---------- Hook: sync state với handle ----------\n\nfunction useHandleState(handle: MiniBoard3DHandle | null) {\n const [tool, setTool] = useState<GeomTool3D>('move');\n const [showAxes, setShowAxes] = useState(true);\n const [showMesh, setShowMesh] = useState(false);\n const [canUndo, setCanUndo] = useState(false);\n\n useEffect(() => {\n if (!handle) return;\n const sync = () => {\n setTool(handle.getTool());\n setShowAxes(handle.getShowAxes());\n setShowMesh(handle.getShowMesh());\n setCanUndo(handle.canUndo());\n };\n sync();\n return handle.subscribe(sync);\n }, [handle]);\n\n return { tool, showAxes, showMesh, canUndo };\n}\n\n// ---------- Desktop panel ----------\n\nfunction DesktopPanel(props: Props) {\n const { handle, onResetView, onClose, isDark, chordGroup } = props;\n const { tool, showAxes, showMesh, canUndo } = useHandleState(handle);\n const { hover, portalReady, showHover, hideHover } = useToolHoverTooltip();\n\n const grouped = useMemo(() => {\n return TOOLS_3D.reduce<Record<ToolGroup3D, ToolDef3D[]>>(\n (acc, t) => {\n (acc[t.group] ??= []).push(t);\n return acc;\n },\n {} as Record<ToolGroup3D, ToolDef3D[]>,\n );\n }, []);\n\n const orderedGroups = useMemo(\n () => GROUP_ORDER_3D.filter((g) => grouped[g]),\n [grouped],\n );\n\n const activeGroupTools: ToolDef3D[] | null = chordGroup\n ? (grouped[chordGroup] ?? null)\n : null;\n\n return (\n <>\n <Shell title=\"Hình học 3D\" icon={Geom3DIconHeader} onClose={onClose} isDark={isDark}>\n <Section label=\"Bố cục\">\n <div className=\"flex items-center gap-2 flex-wrap text-[11px] text-slate-700\">\n <label className=\"inline-flex select-none items-center gap-1.5\">\n <input\n type=\"checkbox\"\n checked={showAxes}\n onChange={(e) => handle?.setShowAxes(e.target.checked)}\n data-testid=\"toggle-axes\"\n />\n Trục\n </label>\n <label className=\"inline-flex select-none items-center gap-1.5\">\n <input\n type=\"checkbox\"\n checked={showMesh}\n onChange={(e) => handle?.setShowMesh(e.target.checked)}\n data-testid=\"toggle-mesh\"\n />\n Lưới\n </label>\n <button\n type=\"button\"\n onClick={onResetView}\n title=\"Reset góc nhìn\"\n aria-label=\"Reset view\"\n className=\"ml-auto inline-flex items-center justify-center rounded p-1 text-slate-600 transition hover:bg-slate-100 hover:text-slate-900\"\n >\n <ResetViewIcon />\n </button>\n <button\n type=\"button\"\n onClick={() => handle?.undo()}\n disabled={!canUndo}\n title=\"Hoàn tác (Ctrl/Cmd+Z)\"\n aria-label=\"Hoàn tác\"\n className=\"inline-flex items-center justify-center rounded p-1 text-slate-600 transition hover:bg-slate-100 hover:text-slate-900 disabled:cursor-not-allowed disabled:text-slate-300 disabled:hover:bg-transparent\"\n >\n <UndoIcon />\n </button>\n </div>\n </Section>\n\n {orderedGroups.map((group) => {\n const tools = grouped[group];\n const isChordActive = chordGroup === group;\n const dimmed = chordGroup !== null && !isChordActive;\n return (\n <section\n key={group}\n data-chord-group={group}\n data-chord-active={isChordActive ? 'true' : 'false'}\n className={[\n 'rounded-md transition',\n isChordActive\n ? 'bg-blue-50 ring-1 ring-blue-400 p-1'\n : 'p-0',\n dimmed ? 'opacity-55' : 'opacity-100',\n ].join(' ')}\n >\n <h4 className=\"mb-1.5 flex items-center justify-between text-[10px] font-semibold uppercase tracking-wider text-slate-500\">\n <span>{GROUP_LABELS_3D[group]}</span>\n <span\n data-testid={`chord-letter-${group}`}\n className={[\n 'font-mono text-[10px] leading-none transition',\n isChordActive\n ? 'text-blue-700 font-bold'\n : 'text-slate-400',\n ].join(' ')}\n >\n {letterForGroup3D(group)}\n </span>\n </h4>\n <div className=\"grid grid-cols-4 gap-1\">\n {tools.map((t, i) => {\n const isActive = tool === t.key;\n return (\n <ToolButton\n key={t.key}\n toolKey={t.key}\n label={t.label}\n hint={t.hint}\n active={isActive}\n onClick={() => handle?.setTool(t.key)}\n icon={\n <span\n onMouseEnter={(e) => showHover(e.currentTarget.closest('button') as HTMLElement, t)}\n onMouseLeave={hideHover}\n onFocus={(e) => showHover(e.currentTarget.closest('button') as HTMLElement, t)}\n onBlur={hideHover}\n >\n {ICONS_3D[t.key]}\n </span>\n }\n badge={\n <span\n data-testid={`chord-num-${t.key}`}\n className={[\n 'pointer-events-none absolute bottom-0 right-0.5 font-mono text-[9px] leading-none transition',\n isActive\n ? 'text-white/70'\n : isChordActive\n ? 'text-blue-700 font-bold'\n : 'text-slate-400',\n ].join(' ')}\n >\n {i + 1}\n </span>\n }\n />\n );\n })}\n </div>\n </section>\n );\n })}\n\n {chordGroup && activeGroupTools && (\n <div\n data-testid=\"chord-hint\"\n className=\"mt-1 rounded border border-blue-200 bg-blue-50/60 px-2 py-1 text-[11px] leading-snug text-slate-600\"\n >\n <span className=\"font-mono font-semibold text-blue-700\">\n {letterForGroup3D(chordGroup)}\n </span>\n <span className=\"mx-1 text-slate-400\">→</span>\n {activeGroupTools.map((t, i) => (\n <span key={t.key} className=\"mr-2 inline-block\">\n <span className=\"font-mono font-semibold text-blue-700\">\n {i + 1}\n </span>\n <span className=\"ml-1\">{t.label}</span>\n </span>\n ))}\n <span className=\"text-slate-400\">Esc huỷ</span>\n </div>\n )}\n </Shell>\n\n {portalReady && hover && typeof document !== 'undefined'\n ? createPortal(\n <div\n role=\"tooltip\"\n className=\"pointer-events-none fixed w-max max-w-[220px] rounded-md bg-slate-900 px-2 py-1 text-left text-[11px] leading-tight text-white shadow-lg\"\n style={{\n left: hover.x + 8,\n top: hover.y,\n transform: 'translate(0, -50%)',\n zIndex: 2147483600,\n }}\n >\n <span className=\"block font-medium\">{hover.label}</span>\n {hover.hint && <span className=\"mt-0.5 block text-slate-300\">{hover.hint}</span>}\n </div>,\n document.body,\n )\n : null}\n </>\n );\n}\n\n// ---------- Mobile panel (redesigned) ----------\n\nfunction MobilePanel(props: Props) {\n const { handle, onResetView, isDark, drawerOpen, onDrawerClose } = props;\n const { tool, showAxes, showMesh, canUndo } = useHandleState(handle);\n\n const groups = useMemo<MobileToolGroup<GeomTool3D, ToolGroup3D>[]>(() => {\n const acc = new Map<ToolGroup3D, ToolDef3D[]>();\n for (const t of TOOLS_3D) {\n if (!acc.has(t.group)) acc.set(t.group, []);\n acc.get(t.group)!.push(t);\n }\n return Array.from(acc.entries()).map(([group, tools]) => ({\n group,\n groupLabel: GROUP_LABELS_3D[group],\n tools: tools.map((t) => ({ key: t.key, label: t.label, icon: ICONS_3D[t.key] })),\n }));\n }, []);\n\n return (\n <MobileToolDrawer\n title=\"Hình học 3D\"\n headerIcon={Geom3DIconHeader}\n testId=\"geom3d-left-panel\"\n isDark={isDark}\n drawerOpen={!!drawerOpen}\n onDrawerClose={() => onDrawerClose?.()}\n chips={[\n {\n label: 'Trục',\n icon: <AxisIcon3D />,\n pressed: showAxes,\n onToggle: (b) => handle?.setShowAxes(b),\n testId: 'toggle-axes',\n },\n {\n label: 'Lưới',\n icon: <MeshIcon />,\n pressed: showMesh,\n onToggle: (b) => handle?.setShowMesh(b),\n testId: 'toggle-mesh',\n },\n ]}\n actions={[\n {\n label: 'Reset view',\n title: 'Reset góc nhìn',\n icon: <ResetViewIcon />,\n onClick: onResetView,\n },\n {\n label: 'Hoàn tác',\n title: 'Hoàn tác (Ctrl/Cmd+Z)',\n icon: <UndoIcon />,\n onClick: () => handle?.undo(),\n disabled: !canUndo,\n },\n ]}\n groups={groups}\n activeTool={tool}\n onToolSelect={(k) => handle?.setTool(k)}\n />\n );\n}\n\n// ---------- Public entry ----------\n\nexport function LeftPanel(props: Props) {\n if (props.isMobile) return <MobilePanel {...props} />;\n return <DesktopPanel {...props} />;\n}\n","'use client';\n\nimport {\n forwardRef,\n useCallback,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { EditorPanel, type EditorPanelHandle } from './editor/EditorPanel';\nimport { LeftPanel as Geometry3DLeftPanel } from './editor/LeftPanel';\nimport type { MiniBoard3DHandle } from './editor/MiniBoard3D';\nimport { GROUP_ORDER_3D, TOOLS_3D, type GeomTool3D } from './editor/tools';\nimport { useChordShortcut } from '../shared/useChordShortcut';\nimport { insertStampImage } from '../shared/insertImage';\nimport { useIsMobile } from '../shared/useIsMobile';\nimport {\n isGeometry3DCustomData,\n parseSerializedBoard3D,\n type Geometry3DCustomData,\n type SerializedBoard3D,\n} from './serialize';\nimport type {\n StampHostProps,\n StampHostHandle,\n} from '../shared/types';\n\nfunction parseInitial(\n editingElement: StampHostProps['editingElement'],\n): SerializedBoard3D | null {\n if (!editingElement) return null;\n if (!isGeometry3DCustomData(editingElement.customData)) return null;\n try {\n return parseSerializedBoard3D(editingElement.customData.jsonState);\n } catch {\n return null;\n }\n}\n\nexport const Geometry3DStampHost = forwardRef<StampHostHandle, StampHostProps>(\n function Geometry3DStampHost({ api, editingElement, onClose, isDark }, ref) {\n const editorRef = useRef<EditorPanelHandle | null>(null);\n const { isMobile } = useIsMobile();\n const [drawerOpen, setDrawerOpen] = useState(false);\n const [boardHandle, setBoardHandle] = useState<MiniBoard3DHandle | null>(null);\n\n const initial = useMemo(\n () => parseInitial(editingElement),\n [editingElement],\n );\n\n const handleBoardReady = useCallback((h: MiniBoard3DHandle | null) => {\n setBoardHandle((prev) => (prev === h ? prev : h));\n }, []);\n\n const { chordGroup } = useChordShortcut({\n groupOrder: GROUP_ORDER_3D,\n tools: TOOLS_3D as unknown as Array<{ key: string; group: typeof GROUP_ORDER_3D[number] }>,\n onSelect: (key) => boardHandle?.setTool(key as GeomTool3D),\n enabled: !isMobile,\n });\n\n const handleResetView = useCallback(() => {\n boardHandle?.resetView();\n }, [boardHandle]);\n\n const handleInsert = useCallback(\n async (jsonState: string, svgString: string, width: number, height: number) => {\n if (!api) return;\n await insertStampImage(api, {\n svgString,\n makeCustomData: (): Geometry3DCustomData => ({\n kind: 'geometry3d',\n version: 1,\n jsonState,\n svgWidth: width,\n svgHeight: height,\n }),\n editingElementId: editingElement?.id ?? null,\n });\n onClose();\n },\n [api, editingElement, onClose],\n );\n\n useImperativeHandle(\n ref,\n () => ({\n tryInsert: () => editorRef.current?.tryInsert() ?? false,\n hasContent: () => editorRef.current?.hasContent() ?? false,\n }),\n [],\n );\n\n return (\n <>\n <Geometry3DLeftPanel\n handle={boardHandle}\n onResetView={handleResetView}\n onClose={onClose}\n isDark={isDark}\n isMobile={isMobile}\n drawerOpen={drawerOpen}\n onDrawerClose={() => setDrawerOpen(false)}\n chordGroup={chordGroup}\n />\n <EditorPanel\n ref={editorRef}\n isDark={isDark}\n initial={initial}\n onInsert={handleInsert}\n onClose={onClose}\n isMobile={isMobile}\n withLeftPanel={!isMobile}\n onBoardReady={handleBoardReady}\n onOpenDrawer={() => setDrawerOpen(true)}\n />\n </>\n );\n },\n);\n"]}
|