@xom11/whiteboard 0.25.0 → 0.28.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.
Files changed (93) hide show
  1. package/dist/{ExcalidrawWithMenus-WENZRYYE.mjs → ExcalidrawWithMenus-2QPPTXJM.mjs} +3 -2
  2. package/dist/ExcalidrawWithMenus-2QPPTXJM.mjs.map +1 -0
  3. package/dist/ai.d.mts +3035 -108
  4. package/dist/ai.d.ts +3035 -108
  5. package/dist/ai.js +6780 -788
  6. package/dist/ai.js.map +1 -1
  7. package/dist/ai.mjs +5140 -577
  8. package/dist/ai.mjs.map +1 -1
  9. package/dist/catalog.json +5 -5
  10. package/dist/{chunk-NDEZJKNY.mjs → chunk-5JM35CXV.mjs} +4 -4
  11. package/dist/{chunk-NDEZJKNY.mjs.map → chunk-5JM35CXV.mjs.map} +1 -1
  12. package/dist/{chunk-VNCCIV6O.mjs → chunk-AJAHD35N.mjs} +779 -9
  13. package/dist/chunk-AJAHD35N.mjs.map +1 -0
  14. package/dist/{chunk-M42TGYT6.mjs → chunk-BNBOIDO5.mjs} +3 -3
  15. package/dist/{chunk-M42TGYT6.mjs.map → chunk-BNBOIDO5.mjs.map} +1 -1
  16. package/dist/{chunk-ONBCUWVI.mjs → chunk-BU5KLO3P.mjs} +3 -3
  17. package/dist/{chunk-ONBCUWVI.mjs.map → chunk-BU5KLO3P.mjs.map} +1 -1
  18. package/dist/{chunk-CJBLJUWG.mjs → chunk-CXHNVYMD.mjs} +4 -4
  19. package/dist/{chunk-CJBLJUWG.mjs.map → chunk-CXHNVYMD.mjs.map} +1 -1
  20. package/dist/chunk-H22OZYTW.mjs +265 -0
  21. package/dist/chunk-H22OZYTW.mjs.map +1 -0
  22. package/dist/chunk-J5LGTIGS.mjs +10 -0
  23. package/dist/chunk-J5LGTIGS.mjs.map +1 -0
  24. package/dist/{chunk-TB4CL25L.mjs → chunk-OQIQNKPQ.mjs} +206 -66
  25. package/dist/chunk-OQIQNKPQ.mjs.map +1 -0
  26. package/dist/{chunk-SGFJLHHG.mjs → chunk-PPKHCRRE.mjs} +3 -3
  27. package/dist/{chunk-SGFJLHHG.mjs.map → chunk-PPKHCRRE.mjs.map} +1 -1
  28. package/dist/{chunk-YSJOVBCD.mjs → chunk-QCZVFEN4.mjs} +4 -4
  29. package/dist/{chunk-YSJOVBCD.mjs.map → chunk-QCZVFEN4.mjs.map} +1 -1
  30. package/dist/{chunk-ESVPQWHX.mjs → chunk-QRUAEXLR.mjs} +5 -5
  31. package/dist/{chunk-ESVPQWHX.mjs.map → chunk-QRUAEXLR.mjs.map} +1 -1
  32. package/dist/{chunk-AYSFWUPK.mjs → chunk-SZDAS7LK.mjs} +79 -2
  33. package/dist/chunk-SZDAS7LK.mjs.map +1 -0
  34. package/dist/chunk-T3SOHYB2.mjs +851 -0
  35. package/dist/chunk-T3SOHYB2.mjs.map +1 -0
  36. package/dist/{chunk-I24QOHPU.mjs → chunk-V3YJ6JFL.mjs} +3 -3
  37. package/dist/{chunk-I24QOHPU.mjs.map → chunk-V3YJ6JFL.mjs.map} +1 -1
  38. package/dist/{chunk-REIJZDVZ.mjs → chunk-ZTQBUKLJ.mjs} +960 -196
  39. package/dist/chunk-ZTQBUKLJ.mjs.map +1 -0
  40. package/dist/geometry-2d.d.mts +1 -1
  41. package/dist/geometry-2d.d.ts +1 -1
  42. package/dist/geometry-2d.js +5521 -1384
  43. package/dist/geometry-2d.js.map +1 -1
  44. package/dist/geometry-2d.mjs +5 -4
  45. package/dist/geometry-3d.d.mts +1 -1
  46. package/dist/geometry-3d.d.ts +1 -1
  47. package/dist/geometry-3d.js +1351 -252
  48. package/dist/geometry-3d.js.map +1 -1
  49. package/dist/geometry-3d.mjs +4 -3
  50. package/dist/graph-2d.d.mts +1 -1
  51. package/dist/graph-2d.d.ts +1 -1
  52. package/dist/graph-2d.js +1517 -341
  53. package/dist/graph-2d.js.map +1 -1
  54. package/dist/graph-2d.mjs +7 -6
  55. package/dist/handleExtractProblem-C-U5KluK.d.mts +158 -0
  56. package/dist/handleExtractProblem-C-U5KluK.d.ts +158 -0
  57. package/dist/{host-A64ITWVX.mjs → host-2ISGVO7O.mjs} +6 -5
  58. package/dist/host-2ISGVO7O.mjs.map +1 -0
  59. package/dist/{host-L7FMFZUW.mjs → host-4P766V4J.mjs} +1363 -463
  60. package/dist/host-4P766V4J.mjs.map +1 -0
  61. package/dist/{host-QK53UYMD.mjs → host-HOSJHQ5H.mjs} +10 -9
  62. package/dist/host-HOSJHQ5H.mjs.map +1 -0
  63. package/dist/{host-QS2EOTRJ.mjs → host-ZQCDAT6O.mjs} +3 -2
  64. package/dist/host-ZQCDAT6O.mjs.map +1 -0
  65. package/dist/index.d.mts +10 -4
  66. package/dist/index.d.ts +10 -4
  67. package/dist/index.js +5746 -1603
  68. package/dist/index.js.map +1 -1
  69. package/dist/index.mjs +26 -22
  70. package/dist/index.mjs.map +1 -1
  71. package/dist/latex.d.mts +1 -1
  72. package/dist/latex.d.ts +1 -1
  73. package/dist/latex.mjs +2 -1
  74. package/dist/render-ZX2O2IK7.mjs +10 -0
  75. package/dist/{render-3WTY7NZB.mjs.map → render-ZX2O2IK7.mjs.map} +1 -1
  76. package/dist/serialize-N4G6RFBB.mjs +9 -0
  77. package/dist/{serialize-SRJVKYUG.mjs.map → serialize-N4G6RFBB.mjs.map} +1 -1
  78. package/dist/{types-DWRyCa2m.d.ts → types-BHYC2Fiw.d.mts} +130 -1
  79. package/dist/{types-DWRyCa2m.d.mts → types-BHYC2Fiw.d.ts} +130 -1
  80. package/package.json +10 -1
  81. package/dist/ExcalidrawWithMenus-WENZRYYE.mjs.map +0 -1
  82. package/dist/chunk-AYSFWUPK.mjs.map +0 -1
  83. package/dist/chunk-REIJZDVZ.mjs.map +0 -1
  84. package/dist/chunk-TB4CL25L.mjs.map +0 -1
  85. package/dist/chunk-VNCCIV6O.mjs.map +0 -1
  86. package/dist/chunk-VRHWDZ66.mjs +0 -96
  87. package/dist/chunk-VRHWDZ66.mjs.map +0 -1
  88. package/dist/host-A64ITWVX.mjs.map +0 -1
  89. package/dist/host-L7FMFZUW.mjs.map +0 -1
  90. package/dist/host-QK53UYMD.mjs.map +0 -1
  91. package/dist/host-QS2EOTRJ.mjs.map +0 -1
  92. package/dist/render-3WTY7NZB.mjs +0 -9
  93. package/dist/serialize-SRJVKYUG.mjs +0 -8
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/core/scene/selectors.ts","../src/core/scene/hooks/useEditorState.ts","../src/core/scene/kinds/3d-constraint.ts","../src/core/scene/kinds/point3d.ts","../src/core/scene/kinds/labelOf.ts","../src/core/scene/kinds/segment3d.ts","../src/core/scene/kinds/line3d.ts","../src/core/scene/kinds/ray3d.ts","../src/core/scene/kinds/vector3d.ts","../src/core/scene/kinds/plane3d.ts","../src/core/scene/kinds/polygon3d.ts","../src/core/scene/kinds/sphere3d.ts","../src/core/scene/kinds/polyhedron3d.ts","../src/core/scene/kinds/cylinder3d.ts","../src/core/scene/kinds/cone3d.ts","../src/core/scene/kinds/2d-constraint.ts","../src/core/scene/kinds/point.ts","../src/core/scene/kinds/segment.ts","../src/core/scene/kinds/line.ts","../src/core/scene/kinds/ray.ts","../src/core/scene/kinds/vector.ts","../src/core/scene/kinds/circle.ts","../src/core/scene/kinds/arc.ts","../src/core/scene/kinds/sector.ts","../src/core/scene/kinds/polygon.ts","../src/core/scene/kinds/intersection.ts","../src/core/scene/kinds/angle.ts","../src/core/scene/kinds/distance.ts","../src/core/scene/kinds/function2d.ts","../src/core/scene/kinds/parameter.ts","../src/core/scene/kinds/pointOnCurve.ts","../src/core/scene/kinds/tangent2d.ts","../src/core/scene/expressions/evaluator.ts","../src/core/scene/kinds/extremum2d.ts","../src/core/scene/kinds/root2d.ts","../src/core/scene/kinds/slope2d.ts","../src/stamps/shared/serializeScene.ts"],"names":["def","CURVED_SEGMENTS","tangent","constructionRefs","A","B"],"mappings":"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","file":"chunk-REIJZDVZ.mjs","sourcesContent":["// src/core/scene/selectors.ts\nimport type { State, SceneObject } from './types';\nimport { getKind } from './registry';\n\nexport function listObjects(state: State): SceneObject[] {\n return state.order\n .map(id => state.objects[id])\n .filter((o): o is SceneObject => o !== undefined);\n}\n\nexport function byKind(state: State, kind: string): SceneObject[] {\n return listObjects(state).filter(o => o.kind === kind);\n}\n\nexport function dependentsOf(state: State, rootId: string): Set<string> {\n const result = new Set<string>([rootId]);\n let grew = true;\n while (grew) {\n grew = false;\n for (const obj of Object.values(state.objects)) {\n if (result.has(obj.id)) continue;\n let def;\n try { def = getKind(obj.kind); } catch { continue; }\n const refs = def.dependsOn(obj.attrs as never);\n if (refs.some(r => result.has(r))) {\n result.add(obj.id);\n grew = true;\n }\n }\n }\n return result;\n}\n\nconst ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n\n/**\n * Nhóm các kind chia chung namespace label. User nhìn point free, intersection,\n * midpoint đều là \"điểm\" có tên 1 chữ cái — không được trùng tên dù khác kind\n * trong scene store. Ví dụ tam giác ABC + giao điểm 2 đường: giao điểm phải là\n * D (không phải A trùng đỉnh tam giác).\n */\nconst LABEL_GROUPS: Record<string, readonly string[]> = {\n point: ['point', 'intersection'],\n intersection: ['point', 'intersection'],\n};\n\nexport function nextLabel(state: State, kind: string): string {\n const kinds = LABEL_GROUPS[kind] ?? [kind];\n const used = new Set(\n listObjects(state).filter(o => kinds.includes(o.kind)).map(o => o.label),\n );\n for (const c of ALPHABET) if (!used.has(c)) return c;\n let idx = 1;\n while (true) {\n for (const c of ALPHABET) {\n const candidate = `${c}${idx}`;\n if (!used.has(candidate)) return candidate;\n }\n idx += 1;\n }\n}\n","// src/core/scene/hooks/useEditorState.ts\nimport * as React from 'react';\nimport type { Store } from '../store';\nimport type { State } from '../types';\n\nexport interface UseEditorStateOptions {\n /** Store sẵn có (host owns). */\n store: Store;\n /** Serialized scene để LOAD lúc mount. Null/undefined = bỏ qua. */\n initialState?: { state: State } | null;\n /** Notify host mỗi khi store fire (canUndo/canRedo có thể đổi). */\n onHistoryChange?: (canUndo: boolean, canRedo: boolean) => void;\n /** Bind Ctrl/Cmd+Z, Cmd+Shift+Z, Ctrl+Y. Default true. */\n bindKeyboardShortcuts?: boolean;\n}\n\n// Side effects chung cho stamp editor panel mà host owns store:\n// - LOAD initial state một lần (trong withoutHistory để không bẩn undo stack).\n// - Propagate canUndo/canRedo lên host qua callback.\n// - Bind global keyboard shortcuts cho undo/redo.\nexport function useEditorState(opts: UseEditorStateOptions): void {\n const { store, initialState, onHistoryChange, bindKeyboardShortcuts = true } = opts;\n\n const onHistoryChangeRef = React.useRef(onHistoryChange);\n onHistoryChangeRef.current = onHistoryChange;\n\n React.useEffect(() => {\n if (initialState?.state) {\n const loaded = initialState.state;\n store.withoutHistory(() => {\n store.dispatch({ type: 'LOAD', payload: { state: loaded } });\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n React.useEffect(() => {\n onHistoryChangeRef.current?.(store.canUndo(), store.canRedo());\n const unsub = store.subscribe(() => {\n onHistoryChangeRef.current?.(store.canUndo(), store.canRedo());\n });\n return unsub;\n }, [store]);\n\n React.useEffect(() => {\n if (!bindKeyboardShortcuts) return;\n const onKey = (e: KeyboardEvent) => {\n const ae = document.activeElement as HTMLElement | null;\n const inField = !!(\n ae && (ae.tagName === 'INPUT' || ae.tagName === 'TEXTAREA' || ae.isContentEditable)\n );\n if (inField) return;\n if (!(e.metaKey || e.ctrlKey)) return;\n const key = e.key.toLowerCase();\n if (key === 'z' && !e.shiftKey) {\n e.preventDefault();\n e.stopPropagation();\n store.undo();\n } else if ((key === 'z' && e.shiftKey) || (key === 'y' && !e.shiftKey)) {\n e.preventDefault();\n e.stopPropagation();\n store.redo();\n }\n };\n window.addEventListener('keydown', onKey, { capture: true });\n return () => window.removeEventListener('keydown', onKey, { capture: true });\n }, [store, bindKeyboardShortcuts]);\n}\n","// src/core/scene/kinds/3d-constraint.ts\nexport type Vec3 = [number, number, number];\n\nexport type Constraint3D =\n | { kind: 'free'; x: number; y: number; z: number }\n | { kind: 'onGround'; x: number; y: number }\n | { kind: 'onAxis'; axis: 'x' | 'y' | 'z'; t: number }\n | { kind: 'onPlane'; planeId: string; u: number; v: number }\n | { kind: 'onLine'; lineId: string; t: number }\n | { kind: 'onPolygon'; polygonId: string; u: number; v: number }\n | { kind: 'onSphere'; sphereId: string; theta: number; phi: number };\n\nexport function constraintRefs(c: Constraint3D): string[] {\n switch (c.kind) {\n case 'onPlane': return [c.planeId];\n case 'onLine': return [c.lineId];\n case 'onPolygon': return [c.polygonId];\n case 'onSphere': return [c.sphereId];\n default: return [];\n }\n}\n","// src/core/scene/kinds/point3d.ts\nimport { registerKind } from '../registry';\nimport type { KindDef, RenderCtx, SceneObject } from '../types';\nimport { type Constraint3D, constraintRefs } from './3d-constraint';\n\nexport type Point3DAttrs = {\n constraint: Constraint3D;\n color?: string;\n};\n\nconst def: KindDef<Point3DAttrs> = {\n type: 'point3d',\n schemaVersion: 1,\n migrate: {},\n validate: (a) => {\n if (!a || !a.constraint || !a.constraint.kind) {\n throw new Error('point3d: constraint required');\n }\n },\n dependsOn: (a) => constraintRefs(a.constraint),\n measure: (obj) => {\n const c = obj.attrs.constraint;\n if (c.kind === 'free') {\n return [\n { label: 'x', value: c.x },\n { label: 'y', value: c.y },\n { label: 'z', value: c.z },\n ];\n }\n if (c.kind === 'onGround') {\n return [\n { label: 'x', value: c.x },\n { label: 'y', value: c.y },\n { label: 'z', value: 0 },\n ];\n }\n return null;\n },\n describe: (obj) => {\n const c = obj.attrs.constraint;\n if (c.kind === 'free') return `${obj.label} = (${c.x.toFixed(2)}, ${c.y.toFixed(2)}, ${c.z.toFixed(2)})`;\n if (c.kind === 'onGround') return `${obj.label} = (${c.x.toFixed(2)}, ${c.y.toFixed(2)}, 0)`;\n if (c.kind === 'onAxis') return `${obj.label} trên trục ${c.axis} (t=${c.t.toFixed(2)})`;\n if (c.kind === 'onPlane') return `${obj.label} trên mặt ${c.planeId}`;\n if (c.kind === 'onLine') return `${obj.label} trên đường ${c.lineId}`;\n if (c.kind === 'onPolygon') return `${obj.label} trên đa giác ${c.polygonId}`;\n if (c.kind === 'onSphere') return `${obj.label} trên mặt cầu ${c.sphereId}`;\n return obj.label;\n },\n render: (obj, ctx: RenderCtx) => {\n const view = ctx.jxg as any;\n const c = obj.attrs.constraint;\n const opts = {\n name: obj.label,\n visible: obj.visible,\n fixed: obj.locked,\n strokeColor: obj.attrs.color ?? '#1e40af',\n fillColor: obj.attrs.color ?? '#1e40af',\n size: 4,\n };\n if (c.kind === 'free') {\n return view.create('point3d', [c.x, c.y, c.z], opts);\n } else if (c.kind === 'onGround') {\n return view.create('point3d', [c.x, c.y, 0], opts);\n } else if (c.kind === 'onAxis') {\n const coords =\n c.axis === 'x' ? [c.t, 0, 0] :\n c.axis === 'y' ? [0, c.t, 0] :\n [0, 0, c.t];\n return view.create('point3d', coords, opts);\n } else if (c.kind === 'onPlane') {\n const plane = ctx.resolveRef(c.planeId) as any;\n return view.create('point3d', [\n () => plane.F(c.u, c.v)[0],\n () => plane.F(c.u, c.v)[1],\n () => plane.F(c.u, c.v)[2],\n ], opts);\n } else if (c.kind === 'onLine') {\n const line = ctx.resolveRef(c.lineId) as any;\n return view.create('point3d', [\n () => line.F(c.t)[0],\n () => line.F(c.t)[1],\n () => line.F(c.t)[2],\n ], opts);\n } else if (c.kind === 'onPolygon') {\n const poly = ctx.resolveRef(c.polygonId) as any;\n return view.create('point3d', [\n () => poly.F(c.u, c.v)[0],\n () => poly.F(c.u, c.v)[1],\n () => poly.F(c.u, c.v)[2],\n ], opts);\n } else if (c.kind === 'onSphere') {\n const sph = ctx.resolveRef(c.sphereId) as any;\n return view.create('point3d', [\n () => sph.F(c.theta, c.phi)[0],\n () => sph.F(c.theta, c.phi)[1],\n () => sph.F(c.theta, c.phi)[2],\n ], opts);\n }\n return view.create('point3d', [0, 0, 0], opts);\n },\n};\n\nregisterKind(def);\n","// src/core/scene/kinds/labelOf.ts\nimport type { State } from '../types';\n\n/**\n * Resolve một object id sang label hiển thị. Dùng trong describe() để show\n * tên đẹp (\"AB\") thay vì internal id (\"p_1p_2\"). Fallback về id nếu không\n * tìm thấy (vd state chưa truyền vào, hoặc ref chỉ tới object đã bị xoá).\n */\nexport function labelOf(id: string, state: State | undefined): string {\n return state?.objects[id]?.label ?? id;\n}\n","// src/core/scene/kinds/segment3d.ts\nimport { registerKind } from '../registry';\nimport type { KindDef } from '../types';\nimport { labelOf } from './labelOf';\n\nexport type Segment3DAttrs = { p1: string; p2: string; color?: string };\n\nconst def: KindDef<Segment3DAttrs> = {\n type: 'segment3d',\n schemaVersion: 1,\n migrate: {},\n validate: (a) => {\n if (!a?.p1 || !a?.p2) throw new Error('segment3d: p1 và p2 bắt buộc');\n },\n dependsOn: (a) => [a.p1, a.p2],\n measure: (obj, state) => {\n const p1 = state.objects[obj.attrs.p1];\n const p2 = state.objects[obj.attrs.p2];\n if (!p1 || !p2) return null;\n const c1 = (p1.attrs as { constraint?: { kind: string; x?: number; y?: number; z?: number } }).constraint;\n const c2 = (p2.attrs as { constraint?: { kind: string; x?: number; y?: number; z?: number } }).constraint;\n if (c1?.kind !== 'free' || c2?.kind !== 'free') return null;\n const dx = (c2.x ?? 0) - (c1.x ?? 0);\n const dy = (c2.y ?? 0) - (c1.y ?? 0);\n const dz = (c2.z ?? 0) - (c1.z ?? 0);\n return [{ label: 'length', value: Math.hypot(dx, dy, dz) }];\n },\n describe: (obj, state) => `Đoạn thẳng ${labelOf(obj.attrs.p1, state)}${labelOf(obj.attrs.p2, state)}`,\n render: (obj, ctx) => {\n const view = ctx.jxg as any;\n const pA = ctx.resolveRef(obj.attrs.p1);\n const pB = ctx.resolveRef(obj.attrs.p2);\n return view.create('line3d', [pA, pB], {\n straightFirst: false,\n straightLast: false,\n strokeColor: obj.attrs.color ?? '#0f172a',\n strokeWidth: 2,\n visible: obj.visible,\n });\n },\n};\n\nregisterKind(def);\n","// src/core/scene/kinds/line3d.ts\nimport { registerKind } from '../registry';\nimport type { KindDef } from '../types';\nimport { labelOf } from './labelOf';\n\nexport type Line3DAttrs = { p1: string; p2: string; color?: string };\n\nregisterKind<Line3DAttrs>({\n type: 'line3d',\n schemaVersion: 1,\n migrate: {},\n validate: (a) => { if (!a?.p1 || !a?.p2) throw new Error('line3d: p1/p2 required'); },\n dependsOn: (a) => [a.p1, a.p2],\n describe: (obj, state) => `Đường ${obj.label} qua ${labelOf(obj.attrs.p1, state)}, ${labelOf(obj.attrs.p2, state)}`,\n render: (obj, ctx) => {\n const view = ctx.jxg as any;\n const pA = ctx.resolveRef(obj.attrs.p1);\n const pB = ctx.resolveRef(obj.attrs.p2);\n return view.create('line3d', [pA, pB], {\n straightFirst: true,\n straightLast: true,\n strokeColor: obj.attrs.color ?? '#0f172a',\n strokeWidth: 2,\n visible: obj.visible,\n });\n },\n});\n","// src/core/scene/kinds/ray3d.ts\nimport { registerKind } from '../registry';\nimport type { KindDef } from '../types';\nimport { labelOf } from './labelOf';\n\nexport type Ray3DAttrs = { origin: string; through: string; color?: string };\n\nregisterKind<Ray3DAttrs>({\n type: 'ray3d',\n schemaVersion: 1,\n migrate: {},\n validate: (a) => { if (!a?.origin || !a?.through) throw new Error('ray3d: origin/through required'); },\n dependsOn: (a) => [a.origin, a.through],\n describe: (obj, state) => `Tia ${obj.label} từ ${labelOf(obj.attrs.origin, state)} qua ${labelOf(obj.attrs.through, state)}`,\n render: (obj, ctx) => {\n const view = ctx.jxg as any;\n const pOrigin = ctx.resolveRef(obj.attrs.origin);\n const pThrough = ctx.resolveRef(obj.attrs.through);\n return view.create('line3d', [pOrigin, pThrough], {\n straightFirst: false,\n straightLast: true,\n strokeColor: obj.attrs.color ?? '#0f172a',\n strokeWidth: 2,\n visible: obj.visible,\n });\n },\n});\n","// src/core/scene/kinds/vector3d.ts\nimport { registerKind } from '../registry';\nimport type { KindDef } from '../types';\nimport { labelOf } from './labelOf';\n\nexport type Vector3DAttrs = { from: string; to: string; color?: string };\n\nregisterKind<Vector3DAttrs>({\n type: 'vector3d',\n schemaVersion: 1,\n migrate: {},\n validate: (a) => { if (!a?.from || !a?.to) throw new Error('vector3d: from/to required'); },\n dependsOn: (a) => [a.from, a.to],\n describe: (obj, state) => `Véc-tơ ${obj.label}: ${labelOf(obj.attrs.from, state)} → ${labelOf(obj.attrs.to, state)}`,\n render: (obj, ctx) => {\n const view = ctx.jxg as any;\n const pFrom = ctx.resolveRef(obj.attrs.from);\n const pTo = ctx.resolveRef(obj.attrs.to);\n return view.create('line3d', [pFrom, pTo], {\n straightFirst: false,\n straightLast: false,\n lastArrow: { type: 1 },\n strokeColor: obj.attrs.color ?? '#0f172a',\n strokeWidth: 2,\n visible: obj.visible,\n });\n },\n});\n","// src/core/scene/kinds/plane3d.ts\nimport { registerKind } from '../registry';\nimport type { KindDef } from '../types';\nimport { labelOf } from './labelOf';\n\nexport type Plane3DAttrs = { p1: string; p2: string; p3: string; color?: string };\n\nregisterKind<Plane3DAttrs>({\n type: 'plane3d',\n schemaVersion: 1,\n migrate: {},\n validate: (a) => { if (!a?.p1 || !a?.p2 || !a?.p3) throw new Error('plane3d: cần 3 điểm'); },\n dependsOn: (a) => [a.p1, a.p2, a.p3],\n describe: (obj, state) => `Mặt ${obj.label} qua ${labelOf(obj.attrs.p1, state)}, ${labelOf(obj.attrs.p2, state)}, ${labelOf(obj.attrs.p3, state)}`,\n render: (obj, ctx) => {\n const view = ctx.jxg as any;\n return view.create('plane3d', [\n ctx.resolveRef(obj.attrs.p1),\n ctx.resolveRef(obj.attrs.p2),\n ctx.resolveRef(obj.attrs.p3),\n ], {\n fillOpacity: 0.15,\n fillColor: obj.attrs.color ?? '#60a5fa',\n strokeColor: obj.attrs.color ?? '#60a5fa',\n visible: obj.visible,\n });\n },\n});\n","// src/core/scene/kinds/polygon3d.ts\nimport { registerKind } from '../registry';\nimport type { KindDef } from '../types';\n\nexport type Polygon3DAttrs = { vertices: string[]; color?: string };\n\nregisterKind<Polygon3DAttrs>({\n type: 'polygon3d',\n schemaVersion: 1,\n migrate: {},\n validate: (a) => {\n if (!a?.vertices || a.vertices.length < 3) throw new Error('polygon3d: cần ≥3 vertices');\n },\n dependsOn: (a) => [...a.vertices],\n describe: (obj) => `Đa giác ${obj.label} (${obj.attrs.vertices.length} đỉnh)`,\n render: (obj, ctx) => {\n const view = ctx.jxg as any;\n const refs = obj.attrs.vertices.map(id => ctx.resolveRef(id));\n return view.create('polygon3d', [refs], {\n fillOpacity: 0.3,\n fillColor: obj.attrs.color ?? '#60a5fa',\n visible: obj.visible,\n });\n },\n});\n","// src/core/scene/kinds/sphere3d.ts\nimport { registerKind } from '../registry';\nimport type { KindDef } from '../types';\nimport { labelOf } from './labelOf';\n\nexport type Sphere3DAttrs = { center: string; surfacePoint: string; color?: string };\n\nregisterKind<Sphere3DAttrs>({\n type: 'sphere3d',\n schemaVersion: 1,\n migrate: {},\n validate: (a) => { if (!a?.center || !a?.surfacePoint) throw new Error('sphere3d: center/surfacePoint required'); },\n dependsOn: (a) => [a.center, a.surfacePoint],\n describe: (obj, state) => `Mặt cầu ${obj.label} tâm ${labelOf(obj.attrs.center, state)}`,\n render: (obj, ctx) => {\n const view = ctx.jxg as any;\n return view.create('sphere3d', [\n ctx.resolveRef(obj.attrs.center),\n ctx.resolveRef(obj.attrs.surfacePoint),\n ], {\n fillOpacity: 0.25,\n fillColor: obj.attrs.color ?? '#60a5fa',\n visible: obj.visible,\n });\n },\n});\n","// src/core/scene/kinds/polyhedron3d.ts\nimport { registerKind } from '../registry';\nimport type { KindDef } from '../types';\n\nexport type PolyhedronFlavor = 'pyramid' | 'prism' | 'tetrahedron' | 'cube';\n\nexport type Polyhedron3DAttrs = {\n flavor: PolyhedronFlavor;\n vertices: string[];\n faces: number[][];\n color?: string;\n};\n\nconst FLAVOR_LABEL: Record<PolyhedronFlavor, string> = {\n pyramid: 'chóp',\n prism: 'lăng trụ',\n tetrahedron: 'tứ diện',\n cube: 'lập phương',\n};\n\nregisterKind<Polyhedron3DAttrs>({\n type: 'polyhedron3d',\n schemaVersion: 1,\n migrate: {},\n validate: (a) => {\n if (!a?.vertices || a.vertices.length < 4) throw new Error('polyhedron3d: cần ≥4 vertices');\n if (!a?.faces || a.faces.length < 4) throw new Error('polyhedron3d: cần ≥4 faces');\n },\n dependsOn: (a) => [...a.vertices],\n describe: (obj) => `Khối ${FLAVOR_LABEL[obj.attrs.flavor]} ${obj.label}`,\n render: (obj, ctx) => {\n const view = ctx.jxg as any;\n const verts = obj.attrs.vertices.map(id => ctx.resolveRef(id));\n const faces = obj.attrs.faces.map((faceIndices, fi) =>\n view.create('polygon3d', [faceIndices.map(i => verts[i])], {\n id: `${obj.id}.face${faceIndices.join('-')}.${fi}`,\n fillOpacity: 0.25,\n fillColor: obj.attrs.color ?? '#fbbf24',\n strokeColor: '#0066cc',\n strokeWidth: 1.5,\n visible: obj.visible,\n })\n );\n return { faces };\n },\n});\n","// src/core/scene/kinds/cylinder3d.ts\nimport { registerKind } from '../registry';\nimport type { KindDef } from '../types';\n\nexport type Cylinder3DAttrs = { baseCenter: string; topCenter: string; radius: number; color?: string };\n\n// Faceted cylinder: 16 segments, copied from old JxgRenderer faceted.ts approach.\nconst CURVED_SEGMENTS = 16;\n\nregisterKind<Cylinder3DAttrs>({\n type: 'cylinder3d',\n schemaVersion: 1,\n migrate: {},\n validate: (a) => {\n if (!a?.baseCenter || !a?.topCenter) throw new Error('cylinder3d: baseCenter/topCenter required');\n if (!(a.radius > 0)) throw new Error('cylinder3d: radius > 0');\n },\n dependsOn: (a) => [a.baseCenter, a.topCenter],\n describe: (obj) => `Trụ ${obj.label} R=${obj.attrs.radius.toFixed(2)}`,\n render: (obj, ctx) => {\n const view = ctx.jxg as any;\n const a = ctx.resolveRef(obj.attrs.baseCenter) as any;\n const b = ctx.resolveRef(obj.attrs.topCenter) as any;\n const r = obj.attrs.radius;\n // Read world coords from JSXGraph point3d objects at render time.\n const ax = a.X?.() ?? 0, ay = a.Y?.() ?? 0, az = a.Z?.() ?? 0;\n const bx = b.X?.() ?? 0, by = b.Y?.() ?? 0, bz = b.Z?.() ?? 0;\n // Build faceted cylinder vertices.\n const baseRing: [number, number, number][] = [];\n const topRing: [number, number, number][] = [];\n for (let i = 0; i < CURVED_SEGMENTS; i++) {\n const theta = (i / CURVED_SEGMENTS) * Math.PI * 2;\n const dx = r * Math.cos(theta);\n const dy = r * Math.sin(theta);\n baseRing.push([ax + dx, ay + dy, az]);\n topRing.push([bx + dx, by + dy, bz]);\n }\n const vertices = [...baseRing, ...topRing];\n const faces: number[][] = [];\n faces.push(baseRing.map((_, i) => i));\n faces.push(topRing.map((_, i) => CURVED_SEGMENTS + i));\n for (let i = 0; i < CURVED_SEGMENTS; i++) {\n const next = (i + 1) % CURVED_SEGMENTS;\n faces.push([i, next, CURVED_SEGMENTS + next, CURVED_SEGMENTS + i]);\n }\n const vertJxgs: unknown[] = vertices.map((v, i) =>\n view.create('point3d', v, {\n id: `${obj.id}.v${i}`,\n visible: false,\n fixed: true,\n withLabel: false,\n })\n );\n const faceJxgs: unknown[] = faces.map((face, fi) =>\n view.create('polygon3d', [face.map(idx => vertJxgs[idx])], {\n id: `${obj.id}.face${fi}`,\n fillOpacity: 0.25,\n fillColor: obj.attrs.color ?? '#f97316',\n strokeColor: '#0066cc',\n strokeWidth: 1.5,\n visible: obj.visible,\n })\n );\n return { _verts: vertJxgs, faces: faceJxgs };\n },\n});\n","// src/core/scene/kinds/cone3d.ts\nimport { registerKind } from '../registry';\nimport type { KindDef } from '../types';\n\nexport type Cone3DAttrs = { baseCenter: string; apex: string; radius: number; color?: string };\n\n// Faceted cone: 16 segments, copied from old JxgRenderer faceted.ts approach.\nconst CURVED_SEGMENTS = 16;\n\nregisterKind<Cone3DAttrs>({\n type: 'cone3d',\n schemaVersion: 1,\n migrate: {},\n validate: (a) => {\n if (!a?.baseCenter || !a?.apex) throw new Error('cone3d: baseCenter/apex required');\n if (!(a.radius > 0)) throw new Error('cone3d: radius > 0');\n },\n dependsOn: (a) => [a.baseCenter, a.apex],\n describe: (obj) => `Nón ${obj.label} R=${obj.attrs.radius.toFixed(2)}`,\n render: (obj, ctx) => {\n const view = ctx.jxg as any;\n const base = ctx.resolveRef(obj.attrs.baseCenter) as any;\n const apexPt = ctx.resolveRef(obj.attrs.apex) as any;\n const r = obj.attrs.radius;\n // Read world coords from JSXGraph point3d objects at render time.\n const bx = base.X?.() ?? 0, by = base.Y?.() ?? 0, bz = base.Z?.() ?? 0;\n const apexCoords: [number, number, number] = [\n apexPt.X?.() ?? 0,\n apexPt.Y?.() ?? 0,\n apexPt.Z?.() ?? 0,\n ];\n // Build faceted cone vertices.\n const baseRing: [number, number, number][] = [];\n for (let i = 0; i < CURVED_SEGMENTS; i++) {\n const theta = (i / CURVED_SEGMENTS) * Math.PI * 2;\n baseRing.push([bx + r * Math.cos(theta), by + r * Math.sin(theta), bz]);\n }\n const apexIdx = baseRing.length;\n const vertices = [...baseRing, apexCoords];\n const faces: number[][] = [baseRing.map((_, i) => i)];\n for (let i = 0; i < CURVED_SEGMENTS; i++) {\n faces.push([i, (i + 1) % CURVED_SEGMENTS, apexIdx]);\n }\n const vertJxgs: unknown[] = vertices.map((v, i) =>\n view.create('point3d', v, {\n id: `${obj.id}.v${i}`,\n visible: false,\n fixed: true,\n withLabel: false,\n })\n );\n const faceJxgs: unknown[] = faces.map((face, fi) =>\n view.create('polygon3d', [face.map(idx => vertJxgs[idx])], {\n id: `${obj.id}.face${fi}`,\n fillOpacity: 0.25,\n fillColor: obj.attrs.color ?? '#f59e0b',\n strokeColor: '#0066cc',\n strokeWidth: 1.5,\n visible: obj.visible,\n })\n );\n return { _verts: vertJxgs, faces: faceJxgs };\n },\n});\n","// src/core/scene/kinds/2d-constraint.ts\nexport type Vec2 = [number, number];\n\n/**\n * Phép biến hình áp dụng lên một điểm. Tham số là id điểm/đường gốc, không phải\n * giá trị toạ độ — để dependency graph cập nhật đúng khi user kéo gốc.\n *\n * - translate: dx/dy là số literal (frozen). Trade-off để serialize đơn giản\n * qua JSON; transformed object không tự cập nhật khi user kéo điểm vector.\n * - reflectPoint = rotate π quanh center — biểu diễn riêng để render trực tiếp.\n * - dilate quanh center: implement bằng chain T(-c) → S(k) → T(+c) ở render-time\n * (JSXGraph 'scale' không nhận center).\n */\nexport type TransformDef =\n | { kind: 'translate'; dx: number; dy: number }\n | { kind: 'rotate'; angleRad: number; center: string }\n | { kind: 'reflectLine'; line: string }\n | { kind: 'reflectPoint'; center: string }\n | { kind: 'dilate'; k: number; center: string };\n\nexport function transformRefs(t: TransformDef): string[] {\n switch (t.kind) {\n case 'translate': return [];\n case 'rotate':\n case 'reflectPoint':\n case 'dilate':\n return [t.center];\n case 'reflectLine':\n return [t.line];\n }\n}\n\nexport type Constraint2D =\n | { kind: 'free'; x: number; y: number }\n | { kind: 'onAxis'; axis: 'x' | 'y'; t: number }\n | { kind: 'onLine'; lineId: string; t: number }\n | { kind: 'onSegment'; segmentId: string; t: number }\n | { kind: 'onCircle'; circleId: string; theta: number }\n | { kind: 'onPolygon'; polygonId: string; u: number; v: number }\n | { kind: 'midpoint'; p1: string; p2: string }\n | { kind: 'transformed'; source: string; transform: TransformDef }\n | { kind: 'perpFoot'; from: string; onLine: string }\n | { kind: 'circumcenter'; vertices: [string, string, string] }\n | { kind: 'incenter'; vertices: [string, string, string] }\n | { kind: 'centroid'; vertices: [string, string, string] }\n | { kind: 'orthocenter'; vertices: [string, string, string] };\n\nexport function constraintRefs2D(c: Constraint2D): string[] {\n switch (c.kind) {\n case 'onLine': return [c.lineId];\n case 'onSegment': return [c.segmentId];\n case 'onCircle': return [c.circleId];\n case 'onPolygon': return [c.polygonId];\n case 'midpoint': return [c.p1, c.p2];\n case 'transformed': return [c.source, ...transformRefs(c.transform)];\n case 'perpFoot': return [c.from, c.onLine];\n case 'circumcenter': return [c.vertices[0], c.vertices[1], c.vertices[2]];\n case 'incenter': return [c.vertices[0], c.vertices[1], c.vertices[2]];\n case 'centroid': return [c.vertices[0], c.vertices[1], c.vertices[2]];\n case 'orthocenter': return [c.vertices[0], c.vertices[1], c.vertices[2]];\n default: return [];\n }\n}\n","// src/core/scene/kinds/point.ts\nimport { registerKind } from '../registry';\nimport type { KindDef, RenderCtx } from '../types';\nimport { type Constraint2D, type TransformDef, constraintRefs2D } from './2d-constraint';\n\n/**\n * Build mảng JSXGraph 'transform' elements cho TransformDef. Dilate → chain\n * 3 transform (T(-c) → S(k) → T(+c)) vì JSXGraph 'scale' không nhận center.\n *\n * Center là pointId; resolve qua ctx + dùng function-based để dilate cập nhật\n * live khi user kéo center.\n */\n \nfunction buildJxgTransforms(board: any, ctx: RenderCtx, t: TransformDef): any[] {\n switch (t.kind) {\n case 'translate':\n return [board.create('transform', [t.dx, t.dy], { type: 'translate' })];\n case 'rotate': {\n \n const c: any = ctx.resolveRef(t.center);\n return [board.create('transform', [t.angleRad, c], { type: 'rotate' })];\n }\n case 'reflectPoint': {\n // Đối xứng qua điểm = quay π quanh điểm đó.\n \n const c: any = ctx.resolveRef(t.center);\n return [board.create('transform', [Math.PI, c], { type: 'rotate' })];\n }\n case 'reflectLine': {\n \n const l: any = ctx.resolveRef(t.line);\n return [board.create('transform', [l], { type: 'reflect' })];\n }\n case 'dilate': {\n \n const c: any = ctx.resolveRef(t.center);\n // Function-based để chain cập nhật khi user kéo center.\n return [\n board.create('transform', [() => -c.X(), () => -c.Y()], { type: 'translate' }),\n board.create('transform', [t.k, t.k], { type: 'scale' }),\n board.create('transform', [() => c.X(), () => c.Y()], { type: 'translate' }),\n ];\n }\n }\n}\n\nexport type PointAttrs = {\n constraint: Constraint2D;\n color?: string;\n showLabel?: boolean;\n showValue?: boolean;\n face?: 'o' | 'circle' | 'cross' | 'plus';\n size?: number;\n};\n\nconst def: KindDef<PointAttrs> = {\n type: 'point',\n schemaVersion: 1,\n migrate: {},\n validate: (a) => {\n if (!a || !a.constraint || !a.constraint.kind) {\n throw new Error('point: constraint required');\n }\n const c = a.constraint;\n if (c.kind === 'perpFoot') {\n if (!c.from || !c.onLine) {\n throw new Error('point.perpFoot: from và onLine bắt buộc');\n }\n }\n if (c.kind === 'circumcenter') {\n if (!Array.isArray(c.vertices) || c.vertices.length !== 3) {\n throw new Error('point.circumcenter: vertices phải là tuple 3 id');\n }\n if (!c.vertices[0] || !c.vertices[1] || !c.vertices[2]) {\n throw new Error('point.circumcenter: 3 vertex id phải non-empty');\n }\n }\n if (c.kind === 'incenter') {\n if (!Array.isArray(c.vertices) || c.vertices.length !== 3) {\n throw new Error('point.incenter: vertices phải là tuple 3 id');\n }\n if (!c.vertices[0] || !c.vertices[1] || !c.vertices[2]) {\n throw new Error('point.incenter: 3 vertex id phải non-empty');\n }\n }\n if (c.kind === 'centroid') {\n if (!Array.isArray(c.vertices) || c.vertices.length !== 3) {\n throw new Error('point.centroid: vertices phải là tuple 3 id');\n }\n if (!c.vertices[0] || !c.vertices[1] || !c.vertices[2]) {\n throw new Error('point.centroid: 3 vertex id phải non-empty');\n }\n }\n if (c.kind === 'orthocenter') {\n if (!Array.isArray(c.vertices) || c.vertices.length !== 3) {\n throw new Error('point.orthocenter: vertices phải là tuple 3 id');\n }\n if (!c.vertices[0] || !c.vertices[1] || !c.vertices[2]) {\n throw new Error('point.orthocenter: 3 vertex id phải non-empty');\n }\n }\n },\n dependsOn: (a) => constraintRefs2D(a.constraint),\n measure: (obj) => {\n const c = obj.attrs.constraint;\n if (c.kind === 'free') {\n return [\n { label: 'x', value: c.x },\n { label: 'y', value: c.y },\n ];\n }\n return null;\n },\n describe: (obj, state) => {\n const c = obj.attrs.constraint;\n if (c.kind === 'free') return `Điểm ${obj.label}`;\n if (c.kind === 'onAxis') return `${obj.label} trên trục ${c.axis}`;\n if (c.kind === 'onLine') return `${obj.label} trên đường ${state?.objects[c.lineId]?.label ?? c.lineId}`;\n if (c.kind === 'onSegment') return `${obj.label} trên đoạn ${state?.objects[c.segmentId]?.label ?? c.segmentId}`;\n if (c.kind === 'onCircle') return `${obj.label} trên đường tròn ${state?.objects[c.circleId]?.label ?? c.circleId}`;\n if (c.kind === 'onPolygon') return `${obj.label} trên đa giác ${state?.objects[c.polygonId]?.label ?? c.polygonId}`;\n if (c.kind === 'midpoint') {\n const l1 = state?.objects[c.p1]?.label ?? c.p1;\n const l2 = state?.objects[c.p2]?.label ?? c.p2;\n return `${obj.label} = trung điểm ${l1}${l2}`;\n }\n if (c.kind === 'transformed') {\n const t = c.transform;\n const labelRef = (id: string) => state?.objects[id]?.label ?? id;\n const op =\n t.kind === 'translate' ? `tịnh tiến (${t.dx.toFixed(2)}, ${t.dy.toFixed(2)})`\n : t.kind === 'rotate' ? `quay ${((t.angleRad * 180) / Math.PI).toFixed(0)}° quanh ${labelRef(t.center)}`\n : t.kind === 'reflectLine' ? `đối xứng qua ${labelRef(t.line)}`\n : t.kind === 'reflectPoint' ? `đối xứng qua điểm ${labelRef(t.center)}`\n : t.kind === 'dilate' ? `vị tự k=${t.k} quanh ${labelRef(t.center)}`\n : '';\n return `${obj.label} = ảnh của ${labelRef(c.source)} (${op})`;\n }\n if (c.kind === 'perpFoot') {\n const fromLabel = state?.objects[c.from]?.label ?? c.from;\n const lineLabel = state?.objects[c.onLine]?.label ?? c.onLine;\n return `${obj.label} = chân ⟂ từ ${fromLabel} xuống ${lineLabel}`;\n }\n if (c.kind === 'circumcenter') {\n const labels = c.vertices.map((id) => state?.objects[id]?.label ?? id).join('');\n return `${obj.label} = tâm ngoại tiếp Δ${labels}`;\n }\n if (c.kind === 'incenter') {\n const labels = c.vertices.map((id) => state?.objects[id]?.label ?? id).join('');\n return `${obj.label} = tâm nội tiếp Δ${labels}`;\n }\n if (c.kind === 'centroid') {\n const labels = c.vertices.map((id) => state?.objects[id]?.label ?? id).join('');\n return `${obj.label} = trọng tâm Δ${labels}`;\n }\n if (c.kind === 'orthocenter') {\n const labels = c.vertices.map((id) => state?.objects[id]?.label ?? id).join('');\n return `${obj.label} = trực tâm Δ${labels}`;\n }\n return `Điểm ${obj.label}`;\n },\n render: (obj, ctx) => {\n const board = ctx.jxg as any;\n const c = obj.attrs.constraint;\n const opts: Record<string, unknown> = {\n name: obj.label,\n withLabel: obj.attrs.showLabel ?? true,\n visible: obj.visible,\n fixed: obj.locked,\n strokeColor: obj.attrs.color ?? '#1e40af',\n fillColor: obj.attrs.color ?? '#1e40af',\n face: obj.attrs.face ?? 'o',\n size: obj.attrs.size ?? 4,\n };\n if (c.kind === 'free') return board.create('point', [c.x, c.y], opts);\n if (c.kind === 'onAxis') {\n const coords: [number, number] = c.axis === 'x' ? [c.t, 0] : [0, c.t];\n return board.create('point', coords, opts);\n }\n if (c.kind === 'onLine') {\n const line = ctx.resolveRef(c.lineId) as any;\n return board.create('glider', [c.t, c.t, line], opts);\n }\n if (c.kind === 'onSegment') {\n const seg = ctx.resolveRef(c.segmentId) as any;\n return board.create('glider', [c.t, c.t, seg], opts);\n }\n if (c.kind === 'onCircle') {\n const circle = ctx.resolveRef(c.circleId) as any;\n return board.create('glider', [Math.cos(c.theta), Math.sin(c.theta), circle], opts);\n }\n if (c.kind === 'onPolygon') {\n const poly = ctx.resolveRef(c.polygonId) as any;\n return board.create('glider', [c.u, c.v, poly], opts);\n }\n if (c.kind === 'midpoint') {\n const p1 = ctx.resolveRef(c.p1) as any;\n const p2 = ctx.resolveRef(c.p2) as any;\n return board.create('midpoint', [p1, p2], opts);\n }\n if (c.kind === 'transformed') {\n \n const src: any = ctx.resolveRef(c.source);\n const transforms = buildJxgTransforms(board, ctx, c.transform);\n const parent = transforms.length === 1 ? transforms[0] : transforms;\n // JSXGraph: create('point', [src, transformParent]) — src first.\n \n const pt: any = board.create('point', [src, parent], opts);\n // Renderer dọn _helpers khi remove element (xem JxgRenderer.remove).\n pt._helpers = transforms;\n return pt;\n }\n if (c.kind === 'perpFoot') {\n \n const from: any = ctx.resolveRef(c.from);\n \n const onLine: any = ctx.resolveRef(c.onLine);\n // JSXGraph 'perpendicularpoint': create('perpendicularpoint', [line, point])\n // → trả về chân vuông góc của point xuống line.\n return board.create('perpendicularpoint', [onLine, from], opts);\n }\n if (c.kind === 'circumcenter') {\n \n const a: any = ctx.resolveRef(c.vertices[0]);\n \n const b: any = ctx.resolveRef(c.vertices[1]);\n \n const c3: any = ctx.resolveRef(c.vertices[2]);\n // JSXGraph 'circumcenter': create('circumcenter', [A, B, C])\n return board.create('circumcenter', [a, b, c3], opts);\n }\n if (c.kind === 'incenter') {\n \n const a: any = ctx.resolveRef(c.vertices[0]);\n \n const b: any = ctx.resolveRef(c.vertices[1]);\n \n const c3: any = ctx.resolveRef(c.vertices[2]);\n return board.create('incenter', [a, b, c3], opts);\n }\n if (c.kind === 'centroid') {\n \n const a: any = ctx.resolveRef(c.vertices[0]);\n \n const b: any = ctx.resolveRef(c.vertices[1]);\n \n const c3: any = ctx.resolveRef(c.vertices[2]);\n // JSXGraph function-based point: parents = [() => x, () => y]\n // Function được gọi lại mỗi frame → live update khi user kéo vertex.\n return board.create('point', [\n () => (a.X() + b.X() + c3.X()) / 3,\n () => (a.Y() + b.Y() + c3.Y()) / 3,\n ], opts);\n }\n if (c.kind === 'orthocenter') {\n \n const a: any = ctx.resolveRef(c.vertices[0]);\n \n const b: any = ctx.resolveRef(c.vertices[1]);\n \n const c3: any = ctx.resolveRef(c.vertices[2]);\n const hide = { visible: false, withLabel: false, fixed: true, name: '' };\n // Altitude A→BC: line BC + perpendicular từ A xuống BC.\n const lineBC = board.create('line', [b, c3], hide);\n const altA = board.create('perpendicular', [lineBC, a], hide);\n // Altitude B→AC: line AC + perpendicular từ B xuống AC.\n const lineAC = board.create('line', [a, c3], hide);\n const altB = board.create('perpendicular', [lineAC, b], hide);\n // Trực tâm = giao 2 altitude (branch 0 — chỉ có 1 giao điểm).\n \n const ortho: any = board.create('intersection', [altA, altB, 0], opts);\n ortho._helpers = [lineBC, altA, lineAC, altB];\n return ortho;\n }\n return board.create('point', [0, 0], opts);\n },\n /**\n * Free → Free update giữ nguyên JxgObj identity (gọi setPositionDirectly +\n * setAttribute) để các object phụ thuộc (line/segment/...) không bị stale\n * parent ref. Đổi constraint kind → throw để renderer fallback recreate.\n *\n * Đây cũng là endpoint cho drag-sync dispatch trong JxgRenderer: khi user\n * kéo điểm, listener dispatch UPDATE_ATTRS → update hook chạy, vị trí đã\n * đúng sẵn nên setPositionDirectly là no-op nhưng vẫn cần để sync các attrs\n * khác (label/color/...).\n */\n update: (obj, prev, ctx, existing) => {\n const c = obj.attrs.constraint;\n const oldC = prev.attrs.constraint;\n if (c.kind === 'free' && oldC.kind === 'free') {\n \n const el = existing as any;\n // JXG.COORDS_BY_USER = 1 (hardcoded constant — JSXGraph không export\n // qua module API, lấy qua window.JXG sẽ phải gánh thêm phụ thuộc).\n if (typeof el.setPositionDirectly === 'function') {\n try { el.setPositionDirectly(1, [c.x, c.y]); } catch { /* ignore */ }\n }\n if (typeof el.setAttribute === 'function') {\n try {\n el.setAttribute({\n name: obj.label,\n withLabel: obj.attrs.showLabel ?? true,\n visible: obj.visible,\n fixed: obj.locked,\n strokeColor: obj.attrs.color ?? '#1e40af',\n fillColor: obj.attrs.color ?? '#1e40af',\n face: obj.attrs.face ?? 'o',\n size: obj.attrs.size ?? 4,\n });\n } catch { /* ignore */ }\n }\n void ctx;\n return;\n }\n throw new Error('point: constraint kind changed — recreate');\n },\n};\n\nregisterKind(def);\n","// src/core/scene/kinds/segment.ts\nimport { registerKind } from '../registry';\nimport type { KindDef } from '../types';\nimport { labelOf } from './labelOf';\n\nexport type SegmentAttrs = {\n p1: string;\n p2: string;\n color?: string;\n width?: number;\n dash?: number;\n showLabel?: boolean;\n showValue?: boolean;\n};\n\nconst def: KindDef<SegmentAttrs> = {\n type: 'segment',\n schemaVersion: 1,\n migrate: {},\n validate: (a) => {\n if (!a?.p1 || !a?.p2) throw new Error('segment: p1 và p2 bắt buộc');\n },\n dependsOn: (a) => [a.p1, a.p2],\n measure: (obj, state) => {\n const p1 = state.objects[obj.attrs.p1];\n const p2 = state.objects[obj.attrs.p2];\n if (!p1 || !p2) return null;\n const c1 = (p1.attrs as { constraint?: { kind: string; x?: number; y?: number } }).constraint;\n const c2 = (p2.attrs as { constraint?: { kind: string; x?: number; y?: number } }).constraint;\n if (c1?.kind !== 'free' || c2?.kind !== 'free') return null;\n const dx = (c2.x ?? 0) - (c1.x ?? 0);\n const dy = (c2.y ?? 0) - (c1.y ?? 0);\n return [{ label: 'length', value: Math.hypot(dx, dy) }];\n },\n describe: (obj, state) => `Đoạn thẳng ${labelOf(obj.attrs.p1, state)}${labelOf(obj.attrs.p2, state)}`,\n render: (obj, ctx) => {\n const board = ctx.jxg as any;\n const p1 = ctx.resolveRef(obj.attrs.p1);\n const p2 = ctx.resolveRef(obj.attrs.p2);\n return board.create('segment', [p1, p2], {\n name: obj.label,\n withLabel: obj.attrs.showLabel ?? false,\n strokeColor: obj.attrs.color ?? '#0f172a',\n strokeWidth: obj.attrs.width ?? 2,\n dash: obj.attrs.dash ?? 0,\n visible: obj.visible,\n fixed: obj.locked,\n });\n },\n};\n\nregisterKind(def);\n","// src/core/scene/kinds/line.ts\nimport { registerKind } from '../registry';\nimport type { KindDef } from '../types';\nimport { labelOf } from './labelOf';\n\n/**\n * Cách dựng đường thẳng phái sinh. Khi `construction` có mặt, `p1`/`p2` ở\n * trên LineAttrs bị bỏ qua — renderer dùng nhánh tương ứng (perpendicular /\n * parallel / perpBisector / angleBisector / tangent).\n *\n * Lưu ý: tangent dựng qua một glider ẩn nằm trên đường tròn gần `throughPoint`;\n * glider được lưu tại property `_helpers` của element trả về để renderer dọn\n * dẹp khi đường tangent bị xoá.\n */\nexport type LineConstruction =\n | { kind: 'perpendicular'; throughPoint: string; toLine: string }\n | { kind: 'parallel'; throughPoint: string; toLine: string }\n | { kind: 'perpBisector'; p1: string; p2: string }\n | { kind: 'angleBisector'; p1: string; vertex: string; p2: string }\n | { kind: 'angleBisectorLines'; line1: string; line2: string; branch: 0 | 1 }\n | { kind: 'tangent'; throughPoint: string; toCircle: string; branch?: 0 | 1 | 'on' };\n\nexport type LineAttrs = {\n /** Hai-điểm fallback — bắt buộc khi không có `construction`. */\n p1?: string;\n p2?: string;\n construction?: LineConstruction;\n color?: string;\n width?: number;\n dash?: number;\n showLabel?: boolean;\n};\n\n// Polygon edges là sub-segment do JSXGraph tự tạo bên trong polygon — không có\n// scene id riêng. Synthetic id \"<polyId>:border:<i>\" cho phép construct tools\n// (perpendicular, parallel) tham chiếu cạnh đa giác như một line, nhưng\n// dependency graph cần biết line phụ thuộc vào polygon thật (để DELETE polygon\n// cascade xoá line). Strip suffix về polyId ở đây.\nfunction stripBorderSuffix(id: string): string {\n const m = /^(.+):border:\\d+$/.exec(id);\n return m ? m[1] : id;\n}\n\nfunction constructionRefs(c: LineConstruction): string[] {\n switch (c.kind) {\n case 'perpendicular':\n case 'parallel':\n return [c.throughPoint, stripBorderSuffix(c.toLine)];\n case 'perpBisector':\n return [c.p1, c.p2];\n case 'angleBisector':\n return [c.p1, c.vertex, c.p2];\n case 'angleBisectorLines':\n return [stripBorderSuffix(c.line1), stripBorderSuffix(c.line2)];\n case 'tangent':\n return [c.throughPoint, c.toCircle];\n }\n}\n\nconst def: KindDef<LineAttrs> = {\n type: 'line',\n schemaVersion: 1,\n migrate: {},\n validate: (a) => {\n if (a?.construction) return;\n if (!a?.p1 || !a?.p2) throw new Error('line: p1 và p2 bắt buộc (hoặc construction)');\n },\n dependsOn: (a) => (a.construction ? constructionRefs(a.construction) : [a.p1!, a.p2!]),\n describe: (obj, state) => {\n const L = (id: string) => labelOf(id, state);\n const c = obj.attrs.construction;\n if (!c) return `Đường thẳng ${L(obj.attrs.p1!)}${L(obj.attrs.p2!)}`;\n switch (c.kind) {\n case 'perpendicular': return `${obj.label} ⟂ ${L(c.toLine)} qua ${L(c.throughPoint)}`;\n case 'parallel': return `${obj.label} ∥ ${L(c.toLine)} qua ${L(c.throughPoint)}`;\n case 'perpBisector': return `${obj.label}: trung trực ${L(c.p1)}${L(c.p2)}`;\n case 'angleBisector': return `${obj.label}: phân giác góc ${L(c.p1)}${L(c.vertex)}${L(c.p2)}`;\n case 'angleBisectorLines': return `${obj.label}: phân giác ${L(c.line1)} & ${L(c.line2)} (${c.branch === 0 ? '1' : '2'})`;\n case 'tangent': return `${obj.label}: tiếp tuyến ${L(c.toCircle)} qua ${L(c.throughPoint)}`;\n }\n },\n render: (obj, ctx) => {\n \n const board = ctx.jxg as any;\n const baseOpts: Record<string, unknown> = {\n name: obj.label,\n withLabel: obj.attrs.showLabel ?? false,\n strokeColor: obj.attrs.color ?? '#0f172a',\n strokeWidth: obj.attrs.width ?? 2,\n dash: obj.attrs.dash ?? 0,\n visible: obj.visible,\n fixed: obj.locked,\n };\n const c = obj.attrs.construction;\n if (!c) {\n const p1 = ctx.resolveRef(obj.attrs.p1!);\n const p2 = ctx.resolveRef(obj.attrs.p2!);\n return board.create('line', [p1, p2], {\n ...baseOpts,\n straightFirst: true,\n straightLast: true,\n });\n }\n switch (c.kind) {\n case 'perpendicular': {\n const through = ctx.resolveRef(c.throughPoint);\n const toLine = ctx.resolveRef(c.toLine);\n // JSXGraph: create('perpendicular', [line, point]) → line qua point ⟂ line\n return board.create('perpendicular', [toLine, through], baseOpts);\n }\n case 'parallel': {\n const through = ctx.resolveRef(c.throughPoint);\n const toLine = ctx.resolveRef(c.toLine);\n return board.create('parallel', [toLine, through], baseOpts);\n }\n case 'perpBisector': {\n // JSXGraph 1.12 không có element 'perpendicularbisector' — compose từ\n // midpoint + helper line + perpendicular. Helper objects được lưu vào\n // `_helpers` để JxgRenderer.remove() dọn dẹp khi line bị xoá.\n const p1 = ctx.resolveRef(c.p1);\n const p2 = ctx.resolveRef(c.p2);\n const mid = board.create('midpoint', [p1, p2], {\n visible: false, withLabel: false, fixed: true, name: '',\n });\n const helperLine = board.create('line', [p1, p2], {\n visible: false, withLabel: false, fixed: true, name: '',\n straightFirst: true, straightLast: true,\n });\n const bisector = board.create('perpendicular', [helperLine, mid], baseOpts);\n (bisector as Record<string, unknown>)._helpers = [mid, helperLine];\n return bisector;\n }\n case 'angleBisector': {\n const p1 = ctx.resolveRef(c.p1);\n const vertex = ctx.resolveRef(c.vertex);\n const p2 = ctx.resolveRef(c.p2);\n return board.create('bisector', [p1, vertex, p2], baseOpts);\n }\n case 'angleBisectorLines': {\n // JSXGraph 'bisectorlines' tạo 2 đường phân giác vuông góc của góc giữa\n // 2 đường thẳng (qua giao điểm). Composition trả về có .line1 và .line2.\n // Mỗi scene entry chỉ hiển thị 1 nhánh (branch 0/1) — nhánh còn lại lưu\n // trong _helpers để JxgRenderer dọn dẹp khi entry bị xoá.\n \n const line1Jxg = ctx.resolveRef(c.line1) as any;\n \n const line2Jxg = ctx.resolveRef(c.line2) as any;\n const comp = board.create('bisectorlines', [line1Jxg, line2Jxg], {\n line1: { visible: false, withLabel: false, fixed: true, name: '' },\n line2: { visible: false, withLabel: false, fixed: true, name: '' },\n });\n \n const selected = (c.branch === 0 ? comp.line1 : comp.line2) as any;\n \n const other = (c.branch === 0 ? comp.line2 : comp.line1) as any;\n selected.setAttribute({\n ...baseOpts,\n visible: obj.visible,\n fixed: obj.locked,\n });\n (selected as Record<string, unknown>)._helpers = [other];\n return selected;\n }\n case 'tangent': {\n \n const through = ctx.resolveRef(c.throughPoint) as any;\n \n const toCircle = ctx.resolveRef(c.toCircle) as any;\n const branch = c.branch ?? 'on';\n\n if (branch === 'on') {\n // P trên đường tròn (hoặc legacy data trước khi có branch): glider\n // tại P + JXG tangent element. Backward-compat với data cũ.\n const glider = board.create('glider', [through.X(), through.Y(), toCircle], {\n visible: false, withLabel: false, fixed: true, name: '',\n });\n const tangent = board.create('tangent', [glider], baseOpts);\n (tangent as Record<string, unknown>)._helpers = [glider];\n return tangent;\n }\n\n // branch 0 | 1: dựng qua Thales-circle intersection.\n // M = midpoint(O, P). Auxiliary circle tâm M qua O và P → 2 giao\n // điểm với đường tròn gốc là 2 tiếp điểm T (∠OTP = 90°).\n // Tangent line = line(P, T_branch).\n const center = toCircle.center;\n const mid = board.create('midpoint', [center, through], {\n visible: false, withLabel: false, fixed: true, name: '',\n });\n const thales = board.create('circle', [mid, through], {\n visible: false, withLabel: false, fixed: true,\n strokeOpacity: 0, fillOpacity: 0,\n });\n const touch = board.create('intersection', [thales, toCircle, branch], {\n visible: false, withLabel: false, fixed: true, name: '',\n });\n const tangent = board.create('line', [through, touch], {\n ...baseOpts, straightFirst: true, straightLast: true,\n });\n (tangent as Record<string, unknown>)._helpers = [mid, thales, touch];\n return tangent;\n }\n }\n },\n};\n\nregisterKind(def);\n","// src/core/scene/kinds/ray.ts\nimport { registerKind } from '../registry';\nimport type { KindDef } from '../types';\nimport { labelOf } from './labelOf';\n\nexport type RayAttrs = {\n origin: string;\n through: string;\n color?: string;\n width?: number;\n dash?: number;\n};\n\nconst def: KindDef<RayAttrs> = {\n type: 'ray',\n schemaVersion: 1,\n migrate: {},\n validate: (a) => {\n if (!a?.origin || !a?.through) throw new Error('ray: origin và through bắt buộc');\n },\n dependsOn: (a) => [a.origin, a.through],\n describe: (obj, state) => `Tia ${labelOf(obj.attrs.origin, state)}${labelOf(obj.attrs.through, state)}`,\n render: (obj, ctx) => {\n const board = ctx.jxg as any;\n const o = ctx.resolveRef(obj.attrs.origin);\n const t = ctx.resolveRef(obj.attrs.through);\n return board.create('line', [o, t], {\n name: obj.label,\n straightFirst: false,\n straightLast: true,\n strokeColor: obj.attrs.color ?? '#0f172a',\n strokeWidth: obj.attrs.width ?? 2,\n dash: obj.attrs.dash ?? 0,\n visible: obj.visible,\n fixed: obj.locked,\n });\n },\n};\n\nregisterKind(def);\n","// src/core/scene/kinds/vector.ts\nimport { registerKind } from '../registry';\nimport type { KindDef } from '../types';\nimport { labelOf } from './labelOf';\n\nexport type VectorAttrs = {\n from: string;\n to: string;\n color?: string;\n width?: number;\n};\n\nconst def: KindDef<VectorAttrs> = {\n type: 'vector',\n schemaVersion: 1,\n migrate: {},\n validate: (a) => {\n if (!a?.from || !a?.to) throw new Error('vector: from và to bắt buộc');\n },\n dependsOn: (a) => [a.from, a.to],\n describe: (obj, state) => `Vector ${labelOf(obj.attrs.from, state)}${labelOf(obj.attrs.to, state)}`,\n render: (obj, ctx) => {\n const board = ctx.jxg as any;\n const f = ctx.resolveRef(obj.attrs.from);\n const t = ctx.resolveRef(obj.attrs.to);\n return board.create('arrow', [f, t], {\n name: obj.label,\n strokeColor: obj.attrs.color ?? '#0f172a',\n strokeWidth: obj.attrs.width ?? 2,\n visible: obj.visible,\n fixed: obj.locked,\n });\n },\n};\n\nregisterKind(def);\n","// src/core/scene/kinds/circle.ts\nimport { registerKind } from '../registry';\nimport type { KindDef } from '../types';\nimport { labelOf } from './labelOf';\n\n/**\n * Cách dựng đường tròn phái sinh. Khi `construction` có mặt, `center`/\n * `surfacePoint` bị bỏ qua — renderer dùng JSXGraph `circumcircle` để dựng\n * đường tròn ngoại tiếp 3 điểm.\n */\nexport type CircleConstruction =\n | { kind: 'circumscribed'; p1: string; p2: string; p3: string };\n\nexport type CircleAttrs = {\n /** Hai-điểm fallback — bắt buộc khi không có `construction`. */\n center?: string;\n surfacePoint?: string;\n construction?: CircleConstruction;\n color?: string;\n width?: number;\n dash?: number;\n showLabel?: boolean;\n showValue?: boolean;\n};\n\nfunction constructionRefs(c: CircleConstruction): string[] {\n switch (c.kind) {\n case 'circumscribed': return [c.p1, c.p2, c.p3];\n }\n}\n\nconst def: KindDef<CircleAttrs> = {\n type: 'circle',\n schemaVersion: 1,\n migrate: {},\n validate: (a) => {\n if (a?.construction) return;\n if (!a?.center || !a?.surfacePoint) {\n throw new Error('circle: center và surfacePoint bắt buộc (hoặc construction)');\n }\n },\n dependsOn: (a) => (a.construction ? constructionRefs(a.construction) : [a.center!, a.surfacePoint!]),\n measure: (obj, state) => {\n // Circumscribed circles need full geometric derivation — skip for now.\n if (obj.attrs.construction) return null;\n const center = obj.attrs.center ? state.objects[obj.attrs.center] : undefined;\n const surface = obj.attrs.surfacePoint ? state.objects[obj.attrs.surfacePoint] : undefined;\n if (!center || !surface) return null;\n const c1 = (center.attrs as { constraint?: { kind: string; x?: number; y?: number } }).constraint;\n const c2 = (surface.attrs as { constraint?: { kind: string; x?: number; y?: number } }).constraint;\n if (c1?.kind !== 'free' || c2?.kind !== 'free') return null;\n const dx = (c2.x ?? 0) - (c1.x ?? 0);\n const dy = (c2.y ?? 0) - (c1.y ?? 0);\n return [{ label: 'r', value: Math.hypot(dx, dy) }];\n },\n describe: (obj, state) => {\n const L = (id: string) => labelOf(id, state);\n const c = obj.attrs.construction;\n if (c?.kind === 'circumscribed') {\n return `Đường tròn đi qua ${L(c.p1)}${L(c.p2)}${L(c.p3)}`;\n }\n return `Đường tròn tâm ${L(obj.attrs.center!)} bán kính ${L(obj.attrs.center!)}${L(obj.attrs.surfacePoint!)}`;\n },\n render: (obj, ctx) => {\n \n const board = ctx.jxg as any;\n const baseOpts: Record<string, unknown> = {\n name: obj.label,\n withLabel: obj.attrs.showLabel ?? false,\n strokeColor: obj.attrs.color ?? '#0f172a',\n strokeWidth: obj.attrs.width ?? 2,\n dash: obj.attrs.dash ?? 0,\n fillColor: 'none',\n visible: obj.visible,\n fixed: obj.locked,\n };\n const c = obj.attrs.construction;\n if (c?.kind === 'circumscribed') {\n const p1 = ctx.resolveRef(c.p1);\n const p2 = ctx.resolveRef(c.p2);\n const p3 = ctx.resolveRef(c.p3);\n return board.create('circumcircle', [p1, p2, p3], baseOpts);\n }\n const center = ctx.resolveRef(obj.attrs.center!);\n const surface = ctx.resolveRef(obj.attrs.surfacePoint!);\n return board.create('circle', [center, surface], baseOpts);\n },\n};\n\nregisterKind(def);\n","// src/core/scene/kinds/arc.ts\nimport { registerKind } from '../registry';\nimport type { KindDef } from '../types';\nimport { labelOf } from './labelOf';\n\nexport type ArcConstruction =\n | { kind: 'semicircle'; p1: string; p2: string }\n | { kind: 'byCenter'; center: string; p1: string; p2: string }\n | { kind: 'by3Points'; p1: string; p2: string; p3: string };\n\nexport type ArcAttrs = {\n construction: ArcConstruction;\n color?: string;\n width?: number;\n dash?: number;\n showLabel?: boolean;\n};\n\nfunction constructionRefs(c: ArcConstruction): string[] {\n switch (c.kind) {\n case 'semicircle': return [c.p1, c.p2];\n case 'byCenter': return [c.center, c.p1, c.p2];\n case 'by3Points': return [c.p1, c.p2, c.p3];\n }\n}\n\nconst def: KindDef<ArcAttrs> = {\n type: 'arc',\n schemaVersion: 1,\n migrate: {},\n validate: (a) => {\n const c = a?.construction;\n if (!c) throw new Error('arc: construction bắt buộc');\n if (c.kind === 'semicircle') {\n if (!c.p1 || !c.p2) throw new Error('arc.semicircle: p1, p2 bắt buộc');\n } else if (c.kind === 'byCenter') {\n if (!c.center || !c.p1 || !c.p2) throw new Error('arc.byCenter: center, p1, p2 bắt buộc');\n } else if (c.kind === 'by3Points') {\n if (!c.p1 || !c.p2 || !c.p3) throw new Error('arc.by3Points: p1, p2, p3 bắt buộc');\n }\n },\n dependsOn: (a) => constructionRefs(a.construction),\n describe: (obj, state) => {\n const L = (id: string) => labelOf(id, state);\n const c = obj.attrs.construction;\n switch (c.kind) {\n case 'semicircle': return `Nửa đường tròn đường kính ${L(c.p1)}${L(c.p2)}`;\n case 'byCenter': return `Cung tròn tâm ${L(c.center)} từ ${L(c.p1)} đến ${L(c.p2)}`;\n case 'by3Points': return `Cung tròn qua ${L(c.p1)}${L(c.p2)}${L(c.p3)}`;\n }\n },\n render: (obj, ctx) => {\n \n const board = ctx.jxg as any;\n const baseOpts: Record<string, unknown> = {\n name: obj.label,\n withLabel: obj.attrs.showLabel ?? false,\n strokeColor: obj.attrs.color ?? '#0f172a',\n strokeWidth: obj.attrs.width ?? 2,\n dash: obj.attrs.dash ?? 0,\n fillColor: 'none',\n visible: obj.visible,\n fixed: obj.locked,\n };\n const c = obj.attrs.construction;\n if (c.kind === 'semicircle') {\n const p1 = ctx.resolveRef(c.p1);\n const p2 = ctx.resolveRef(c.p2);\n return board.create('semicircle', [p1, p2], baseOpts);\n }\n if (c.kind === 'byCenter') {\n const O = ctx.resolveRef(c.center);\n const A = ctx.resolveRef(c.p1);\n const B = ctx.resolveRef(c.p2);\n return board.create('arc', [O, A, B], baseOpts);\n }\n // by3Points\n const A = ctx.resolveRef(c.p1);\n const B = ctx.resolveRef(c.p2);\n const C = ctx.resolveRef(c.p3);\n return board.create('circumcirclearc', [A, B, C], baseOpts);\n },\n};\n\nregisterKind(def);\n","// src/core/scene/kinds/sector.ts\nimport { registerKind } from '../registry';\nimport type { KindDef } from '../types';\nimport { labelOf } from './labelOf';\n\nexport type SectorConstruction =\n | { kind: 'byCenter'; center: string; p1: string; p2: string };\n\nexport type SectorAttrs = {\n construction: SectorConstruction;\n color?: string;\n width?: number;\n fillColor?: string;\n fillOpacity?: number;\n showLabel?: boolean;\n};\n\nconst def: KindDef<SectorAttrs> = {\n type: 'sector',\n schemaVersion: 1,\n migrate: {},\n validate: (a) => {\n const c = a?.construction;\n if (!c) throw new Error('sector: construction bắt buộc');\n if (c.kind === 'byCenter') {\n if (!c.center || !c.p1 || !c.p2) {\n throw new Error('sector.byCenter: center, p1, p2 bắt buộc');\n }\n }\n },\n dependsOn: (a) => {\n const c = a.construction;\n return [c.center, c.p1, c.p2];\n },\n describe: (obj, state) => {\n const L = (id: string) => labelOf(id, state);\n const c = obj.attrs.construction;\n return `Hình quạt tâm ${L(c.center)} từ ${L(c.p1)} đến ${L(c.p2)}`;\n },\n render: (obj, ctx) => {\n \n const board = ctx.jxg as any;\n const c = obj.attrs.construction;\n const O = ctx.resolveRef(c.center);\n const A = ctx.resolveRef(c.p1);\n const B = ctx.resolveRef(c.p2);\n return board.create('sector', [O, A, B], {\n name: obj.label,\n withLabel: obj.attrs.showLabel ?? false,\n strokeColor: obj.attrs.color ?? '#0f172a',\n strokeWidth: obj.attrs.width ?? 2,\n fillColor: obj.attrs.fillColor ?? '#f59e0b',\n fillOpacity: obj.attrs.fillOpacity ?? 0.18,\n visible: obj.visible,\n fixed: obj.locked,\n });\n },\n};\n\nregisterKind(def);\n","// src/core/scene/kinds/polygon.ts\nimport { registerKind } from '../registry';\nimport type { KindDef } from '../types';\nimport { labelOf } from './labelOf';\n\n/** Tên tiếng Việt cho đa giác đều theo số cạnh. */\nfunction regularPolygonName(n: number): string {\n if (n === 3) return 'Tam giác đều';\n if (n === 4) return 'Hình vuông';\n if (n === 5) return 'Ngũ giác đều';\n if (n === 6) return 'Lục giác đều';\n return `${n}-giác đều`;\n}\n\n/**\n * Sinh nhãn đỉnh dạng \"ABCDE...\" khi p1/p2 là 2 chữ cái in hoa liên tiếp.\n * Vd p1=A, p2=B, n=4 → \"ABCD\". Vd p1=C, p2=D, n=3 → \"CDE\".\n * Fallback \"p1Label · p2Label…\" khi không suy ra được dãy chữ.\n */\nfunction regularVertexLabels(p1Label: string, p2Label: string, n: number): string {\n const A = 'A'.charCodeAt(0);\n const Z = 'Z'.charCodeAt(0);\n if (p1Label.length === 1 && p2Label.length === 1) {\n const c1 = p1Label.charCodeAt(0);\n const c2 = p2Label.charCodeAt(0);\n if (c1 >= A && c1 <= Z && c2 === c1 + 1 && c1 + n - 1 <= Z) {\n let out = '';\n for (let i = 0; i < n; i++) out += String.fromCharCode(c1 + i);\n return out;\n }\n }\n return `${p1Label}${p2Label}…`;\n}\n\n/**\n * Cách dựng đa giác phái sinh. Khi `construction` có mặt, `vertices` bị bỏ qua\n * — renderer dùng nhánh tương ứng.\n *\n * - regular: đa giác đều n cạnh dựng từ 2 đỉnh kề (p1, p2 = vertex0, vertex1).\n * JSXGraph 'regularpolygon' tự sinh n-2 đỉnh còn lại.\n */\nexport type PolygonConstruction =\n | { kind: 'regular'; p1: string; p2: string; n: number };\n\nexport type PolygonAttrs = {\n /** Danh sách đỉnh — bắt buộc khi không có `construction`. */\n vertices?: string[];\n construction?: PolygonConstruction;\n color?: string;\n fillOpacity?: number;\n width?: number;\n showLabel?: boolean;\n showValue?: boolean; // hiển thị diện tích\n};\n\nconst def: KindDef<PolygonAttrs> = {\n type: 'polygon',\n schemaVersion: 1,\n migrate: {},\n validate: (a) => {\n if (a?.construction) {\n if (a.construction.kind === 'regular') {\n if (!a.construction.p1 || !a.construction.p2) {\n throw new Error('polygon (regular): p1 và p2 bắt buộc');\n }\n if (!Number.isFinite(a.construction.n) || a.construction.n < 3) {\n throw new Error('polygon (regular): n ≥ 3');\n }\n }\n return;\n }\n if (!Array.isArray(a?.vertices) || a.vertices.length < 3) {\n throw new Error('polygon: cần ít nhất 3 đỉnh');\n }\n },\n dependsOn: (a) => {\n if (a.construction?.kind === 'regular') return [a.construction.p1, a.construction.p2];\n return [...(a.vertices ?? [])];\n },\n describe: (obj, state) => {\n if (obj.attrs.construction?.kind === 'regular') {\n const c = obj.attrs.construction;\n const labels = regularVertexLabels(labelOf(c.p1, state), labelOf(c.p2, state), c.n);\n return `${regularPolygonName(c.n)} ${labels}`;\n }\n return `Đa giác ${(obj.attrs.vertices ?? []).map((id) => labelOf(id, state)).join('')}`;\n },\n render: (obj, ctx) => {\n const board = ctx.jxg as any;\n const label = obj.label;\n const showValue = obj.attrs.showValue ?? false;\n // Construction 'regular': dùng JSXGraph 'regularpolygon' với 2 đỉnh kề + n.\n // showValue không support cho regular (JSXGraph 'regularpolygon' không expose\n // Area() — nếu cần, user có thể đo qua tool 'area' riêng).\n if (obj.attrs.construction?.kind === 'regular') {\n const c = obj.attrs.construction;\n const p1 = ctx.resolveRef(c.p1);\n const p2 = ctx.resolveRef(c.p2);\n return board.create('regularpolygon', [p1, p2, c.n], {\n name: label,\n withLabel: obj.attrs.showLabel ?? false,\n borders: {\n strokeColor: obj.attrs.color ?? '#0f172a',\n strokeWidth: obj.attrs.width ?? 2,\n },\n fillColor: obj.attrs.color ?? '#60a5fa',\n fillOpacity: obj.attrs.fillOpacity ?? 0.15,\n visible: obj.visible,\n fixed: obj.locked,\n });\n }\n const verts = (obj.attrs.vertices ?? []).map(id => ctx.resolveRef(id));\n // showValue=true: hiển thị label dạng \"ABC: S = 8.50\" với diện tích live.\n // showLabel=false + showValue=true: chỉ số diện tích. JSXGraph polygon's\n // Area() trả về |∮ x dy| theo đỉnh hiện tại → live update khi kéo đỉnh.\n \n const poly = board.create('polygon', verts, {\n name: showValue\n \n ? function (this: any) {\n // `this` là polygon element; gọi Area() để lấy giá trị live.\n const a = typeof this.Area === 'function' ? this.Area() : 0;\n const prefix = (obj.attrs.showLabel ?? true) ? `${label}: ` : '';\n return `${prefix}S = ${Math.abs(a).toFixed(2)}`;\n }\n : label,\n withLabel: showValue ? true : (obj.attrs.showLabel ?? false),\n borders: {\n strokeColor: obj.attrs.color ?? '#0f172a',\n strokeWidth: obj.attrs.width ?? 2,\n },\n fillColor: obj.attrs.color ?? '#60a5fa',\n fillOpacity: obj.attrs.fillOpacity ?? 0.15,\n visible: obj.visible,\n fixed: obj.locked,\n });\n return poly;\n },\n};\n\nregisterKind(def);\n","// src/core/scene/kinds/intersection.ts\nimport { registerKind } from '../registry';\nimport type { KindDef } from '../types';\n\nexport type IntersectionAttrs =\n | { kind: 'lineLine'; ref1: string; ref2: string; color?: string }\n | { kind: 'lineCircle'; ref1: string; ref2: string; branch: 0 | 1; color?: string }\n | { kind: 'circleCircle'; ref1: string; ref2: string; branch: 0 | 1; color?: string };\n\nconst def: KindDef<IntersectionAttrs> = {\n type: 'intersection',\n schemaVersion: 1,\n migrate: {},\n validate: (a) => {\n if (!a || !('kind' in a)) throw new Error('intersection: kind bắt buộc');\n if (!a.ref1 || !a.ref2) throw new Error('intersection: ref1 và ref2 bắt buộc');\n if (a.kind === 'lineLine') return;\n if (a.kind === 'lineCircle' || a.kind === 'circleCircle') {\n if (a.branch !== 0 && a.branch !== 1) {\n throw new Error(`intersection.${a.kind}: branch phải là 0 hoặc 1`);\n }\n return;\n }\n throw new Error(`intersection: kind không hợp lệ \"${(a as { kind: string }).kind}\"`);\n },\n dependsOn: (a) => [a.ref1, a.ref2],\n describe: (obj) => {\n const a = obj.attrs;\n return `${obj.label} = giao ${a.ref1} ∩ ${a.ref2}`;\n },\n render: (obj, ctx) => {\n const board = ctx.jxg as any;\n const a = ctx.resolveRef(obj.attrs.ref1);\n const b = ctx.resolveRef(obj.attrs.ref2);\n const opts: Record<string, unknown> = {\n name: obj.label,\n withLabel: true,\n strokeColor: obj.attrs.color ?? '#dc2626',\n fillColor: obj.attrs.color ?? '#dc2626',\n visible: obj.visible,\n fixed: obj.locked,\n };\n if (obj.attrs.kind === 'lineLine') {\n return board.create('intersection', [a, b, 0], opts);\n }\n // lineCircle hoặc circleCircle: branch 0/1\n const branch = obj.attrs.branch ?? 0;\n return board.create('intersection', [a, b, branch], opts);\n },\n};\n\nregisterKind(def);\n","// src/core/scene/kinds/angle.ts\nimport { registerKind } from '../registry';\nimport type { KindDef } from '../types';\nimport { labelOf } from './labelOf';\n\n/**\n * Angle measurement: cung tròn + label giá trị tại đỉnh.\n *\n * JSXGraph vẽ cung từ p1 → p2 theo chiều dương (CCW). Nếu cross(p1−v, p2−v) < 0\n * thì cung CCW > 180° (reflex) — đổi vai trò p1/p2 ở render-time để luôn hiển\n * thị góc nhọn/tù thay vì góc phản.\n */\nexport type AngleAttrs = {\n p1: string;\n vertex: string;\n p2: string;\n color?: string;\n fillOpacity?: number;\n radius?: number;\n showLabel?: boolean;\n};\n\nconst def: KindDef<AngleAttrs> = {\n type: 'angle',\n schemaVersion: 1,\n migrate: {},\n validate: (a) => {\n if (!a?.p1 || !a?.vertex || !a?.p2) {\n throw new Error('angle: p1, vertex, p2 bắt buộc');\n }\n },\n dependsOn: (a) => [a.p1, a.vertex, a.p2],\n describe: (obj, state) => `Góc ${labelOf(obj.attrs.p1, state)}${labelOf(obj.attrs.vertex, state)}${labelOf(obj.attrs.p2, state)}`,\n render: (obj, ctx) => {\n \n const board = ctx.jxg as any;\n \n const pa: any = ctx.resolveRef(obj.attrs.p1);\n \n const pv: any = ctx.resolveRef(obj.attrs.vertex);\n \n const pc: any = ctx.resolveRef(obj.attrs.p2);\n // Cross-product check: reorder để tránh cung reflex (> 180°). Chỉ check\n // một lần tại render-time (không live) — user có thể di chuyển điểm sau\n // và làm cung lật reflex; chấp nhận trade-off vì re-order live phức tạp.\n let parents = [pa, pv, pc];\n try {\n const ax = pa.X() - pv.X(), ay = pa.Y() - pv.Y();\n const cx = pc.X() - pv.X(), cy = pc.Y() - pv.Y();\n if (ax * cy - ay * cx < 0) parents = [pc, pv, pa];\n } catch { /* fallback giữ thứ tự gốc */ }\n return board.create('angle', parents, {\n name: obj.label,\n withLabel: obj.attrs.showLabel ?? true,\n radius: obj.attrs.radius ?? 1,\n fillColor: obj.attrs.color ?? '#22c55e',\n fillOpacity: obj.attrs.fillOpacity ?? 0.25,\n strokeColor: obj.attrs.color ?? '#16a34a',\n strokeWidth: 1.5,\n visible: obj.visible,\n fixed: obj.locked,\n });\n },\n};\n\nregisterKind(def);\n","// src/core/scene/kinds/distance.ts\nimport { registerKind } from '../registry';\nimport type { KindDef } from '../types';\nimport { labelOf } from './labelOf';\n\n/**\n * Distance measurement: text \"d = X.XX\" hiển thị tại trung điểm p1-p2.\n *\n * Dùng function-based coords + content cho JSXGraph text → live update khi\n * user kéo p1/p2 (khác commit cũ pre-scene-v2 vốn freeze value lúc create).\n */\nexport type DistanceAttrs = {\n p1: string;\n p2: string;\n color?: string;\n fontSize?: number;\n /** Tiền tố hiển thị, mặc định 'd = '. Để '' nếu chỉ muốn số. */\n prefix?: string;\n /** Số chữ số sau dấu phẩy, mặc định 2. */\n precision?: number;\n};\n\nconst def: KindDef<DistanceAttrs> = {\n type: 'distance',\n schemaVersion: 1,\n migrate: {},\n validate: (a) => {\n if (!a?.p1 || !a?.p2) throw new Error('distance: p1 và p2 bắt buộc');\n },\n dependsOn: (a) => [a.p1, a.p2],\n describe: (obj, state) => `Khoảng cách ${labelOf(obj.attrs.p1, state)}${labelOf(obj.attrs.p2, state)}`,\n render: (obj, ctx) => {\n \n const board = ctx.jxg as any;\n \n const p1: any = ctx.resolveRef(obj.attrs.p1);\n \n const p2: any = ctx.resolveRef(obj.attrs.p2);\n const prefix = obj.attrs.prefix ?? 'd = ';\n const precision = obj.attrs.precision ?? 2;\n return board.create('text', [\n () => (p1.X() + p2.X()) / 2,\n () => (p1.Y() + p2.Y()) / 2,\n () => `${prefix}${Math.hypot(p1.X() - p2.X(), p1.Y() - p2.Y()).toFixed(precision)}`,\n ], {\n fontSize: obj.attrs.fontSize ?? 14,\n strokeColor: obj.attrs.color ?? '#dc2626',\n anchorX: 'middle',\n anchorY: 'middle',\n visible: obj.visible,\n fixed: true,\n });\n },\n};\n\nregisterKind(def);\n","// src/core/scene/kinds/function2d.ts\nimport { registerKind } from '../registry';\nimport type { KindDef } from '../types';\nimport { validate as validateExpr, compile } from '../expressions/parser';\n\nexport interface Function2DAttrs {\n expression: string;\n color: string;\n visible: boolean;\n domain?: { min: number; max: number };\n}\n\nconst def: KindDef<Function2DAttrs> = {\n type: 'function2d',\n schemaVersion: 1,\n migrate: {},\n validate: (a) => {\n if (!a) throw new Error('function2d: attrs bắt buộc');\n if (typeof a.expression !== 'string' || !a.expression.trim()) {\n throw new Error('function2d: expression rỗng');\n }\n const v = validateExpr(a.expression);\n if (!v.ok) throw new Error(`function2d: expression invalid — ${v.error}`);\n if (typeof a.color !== 'string') throw new Error('function2d: color bắt buộc');\n if (typeof a.visible !== 'boolean') throw new Error('function2d: visible bắt buộc');\n if (a.domain) {\n if (a.domain.min >= a.domain.max) {\n throw new Error('function2d: domain min phải < max');\n }\n }\n },\n dependsOn: () => [],\n describe: (obj) => `${obj.label}(x) = ${obj.attrs.expression}`,\n render: (obj, ctx) => {\n \n const board = ctx.jxg as any;\n if (!obj.visible || !obj.attrs.visible) return null;\n const fn = compile(obj.attrs.expression, (ctx.paramMap ?? {}) as Record<string, number>);\n if (typeof fn !== 'function') return null;\n const view = (ctx.defaults as { view?: { xMin?: number; xMax?: number } }).view;\n const xMin = obj.attrs.domain?.min ?? view?.xMin ?? -10;\n const xMax = obj.attrs.domain?.max ?? view?.xMax ?? 10;\n return board.create('functiongraph', [fn, xMin, xMax], {\n strokeColor: obj.attrs.color,\n strokeWidth: 2,\n name: obj.label,\n withLabel: false,\n highlight: false,\n fixed: true,\n });\n },\n};\n\nregisterKind(def);\n","// src/core/scene/kinds/parameter.ts\nimport { registerKind } from '../registry';\nimport type { KindDef } from '../types';\n\nexport interface ParameterAttrs {\n value: number;\n min: number;\n max: number;\n step: number;\n}\n\nconst def: KindDef<ParameterAttrs> = {\n type: 'parameter',\n schemaVersion: 1,\n migrate: {},\n validate: (a) => {\n if (!a) throw new Error('parameter: attrs bắt buộc');\n if (typeof a.value !== 'number' || typeof a.min !== 'number' || typeof a.max !== 'number') {\n throw new Error('parameter: value/min/max phải là number');\n }\n if (a.min >= a.max) throw new Error('parameter: min phải < max');\n if (a.value < a.min || a.value > a.max) throw new Error('parameter: value ngoài [min, max]');\n if (typeof a.step !== 'number' || a.step <= 0) throw new Error('parameter: step phải > 0');\n },\n dependsOn: () => [],\n describe: (obj) => `${obj.label} = ${obj.attrs.value}`,\n render: () => null, // Không render lên board\n};\n\nregisterKind(def);\n","// src/core/scene/kinds/pointOnCurve.ts\nimport { registerKind } from '../registry';\nimport type { KindDef } from '../types';\n\nexport interface PointOnCurveAttrs {\n functionId: string;\n x: number;\n}\n\nconst def: KindDef<PointOnCurveAttrs> = {\n type: 'pointOnCurve',\n schemaVersion: 1,\n migrate: {},\n validate: (a) => {\n if (!a || typeof a.functionId !== 'string' || !a.functionId) {\n throw new Error('pointOnCurve: functionId bắt buộc');\n }\n if (typeof a.x !== 'number' || !Number.isFinite(a.x)) {\n throw new Error('pointOnCurve: x phải là finite number');\n }\n },\n dependsOn: (a) => [a.functionId],\n describe: (obj) => `${obj.label} trên ${obj.attrs.functionId} tại x=${obj.attrs.x.toFixed(3)}`,\n render: (obj, ctx) => {\n \n const board = ctx.jxg as any;\n const curve = ctx.resolveRef(obj.attrs.functionId);\n if (!curve) return null;\n return board.create('glider', [obj.attrs.x, 0, curve], {\n name: obj.label,\n size: 3,\n withLabel: obj.label !== '',\n fillColor: '#000',\n strokeColor: '#000',\n });\n },\n};\n\nregisterKind(def);\n","// src/core/scene/kinds/tangent2d.ts\nimport { registerKind } from '../registry';\nimport type { KindDef } from '../types';\n\nexport interface Tangent2DAttrs {\n pointId: string;\n}\n\nconst def: KindDef<Tangent2DAttrs> = {\n type: 'tangent2d',\n schemaVersion: 1,\n migrate: {},\n validate: (a) => {\n if (!a || typeof a.pointId !== 'string' || !a.pointId) {\n throw new Error('tangent2d: pointId bắt buộc');\n }\n },\n dependsOn: (a) => [a.pointId],\n describe: (obj) => `Tiếp tuyến tại ${obj.attrs.pointId}`,\n render: (obj, ctx) => {\n \n const board = ctx.jxg as any;\n const pt = ctx.resolveRef(obj.attrs.pointId);\n if (!pt) return null;\n return board.create('tangent', [pt], {\n strokeColor: '#65a30d',\n strokeWidth: 1.5,\n dash: 2,\n withLabel: false,\n });\n },\n};\n\nregisterKind(def);\n","// src/core/scene/expressions/evaluator.ts\n// Numerical root + extrema scanning. Pure module.\n\nconst DEFAULT_SAMPLES = 1000;\n\n/**\n * Quét nghiệm trong [xMin, xMax] bằng sign-change detection + bisection.\n * - Lấy DEFAULT_SAMPLES sample.\n * - Mỗi sub-interval đổi dấu → bisect 30 step.\n */\nexport function scanRoots(\n fn: (x: number) => number,\n xMin: number,\n xMax: number,\n samples = DEFAULT_SAMPLES,\n): number[] {\n if (!Number.isFinite(xMin) || !Number.isFinite(xMax) || xMin >= xMax) return [];\n const out: number[] = [];\n const step = (xMax - xMin) / samples;\n let prev = fn(xMin);\n for (let i = 1; i <= samples; i++) {\n const x = xMin + i * step;\n const curr = fn(x);\n if (!Number.isFinite(prev) || !Number.isFinite(curr)) {\n prev = curr;\n continue;\n }\n // Sign change: strictly opposite signs (not both zero, not just touching zero)\n if (prev * curr < 0) {\n // Bisect\n const root = bisect(fn, x - step, x);\n if (Number.isFinite(root)) out.push(root);\n } else if (prev !== 0 && curr === 0) {\n // Exact root at x\n out.push(x);\n }\n prev = curr;\n }\n return out;\n}\n\nfunction bisect(fn: (x: number) => number, lo: number, hi: number): number {\n for (let i = 0; i < 50; i++) {\n const mid = (lo + hi) / 2;\n const fmid = fn(mid);\n if (!Number.isFinite(fmid)) break;\n if (Math.abs(fmid) < 1e-10) return mid;\n const flo = fn(lo);\n if (!Number.isFinite(flo)) break;\n if (flo * fmid <= 0) hi = mid;\n else lo = mid;\n }\n return (lo + hi) / 2;\n}\n\nexport interface Extremum {\n x: number;\n y: number;\n type: 'max' | 'min';\n}\n\n/**\n * Quét cực trị bằng sample derivative sign-change.\n * - Lấy DEFAULT_SAMPLES sample y = fn(x).\n * - Derivative xấp xỉ Δy / Δx.\n * - Đổi dấu derivative + → - = max, - → + = min.\n */\nexport function scanExtrema(\n fn: (x: number) => number,\n xMin: number,\n xMax: number,\n samples = DEFAULT_SAMPLES,\n): Extremum[] {\n if (!Number.isFinite(xMin) || !Number.isFinite(xMax) || xMin >= xMax) return [];\n const out: Extremum[] = [];\n const step = (xMax - xMin) / samples;\n // xs[0..samples+1] with xs[1..samples] covering [xMin..xMax], xs[0] and xs[samples+1] are guards\n const xs: number[] = [];\n const ys: number[] = [];\n for (let i = 0; i <= samples + 1; i++) {\n const x = xMin + (i - 1) * step;\n xs.push(x);\n ys.push(fn(x));\n }\n // xs[i] for i=1..samples corresponds to xMin + (i-1)*step\n // We check derivative sign change: d = ys[i+1] - ys[i-1]\n // When sign changes, extremum is at xs[i] = xMin + (i-1)*step\n let prevSign = 0;\n let prevSignIdx = 1;\n for (let i = 1; i <= samples; i++) {\n const d = ys[i + 1] - ys[i - 1];\n if (!Number.isFinite(d)) continue;\n const sign = d > 0 ? 1 : d < 0 ? -1 : 0;\n if (sign === 0) continue;\n if (prevSign !== 0 && sign !== prevSign) {\n const type: 'max' | 'min' = prevSign > 0 ? 'max' : 'min';\n // Extremum is between prevSignIdx and i — use midpoint\n const midI = Math.round((prevSignIdx + i) / 2);\n out.push({ x: xs[midI], y: ys[midI], type });\n }\n prevSign = sign;\n prevSignIdx = i;\n }\n return out;\n}\n","// src/core/scene/kinds/extremum2d.ts\nimport { registerKind } from '../registry';\nimport type { KindDef } from '../types';\nimport { scanExtrema } from '../expressions/evaluator';\nimport { compile } from '../expressions/parser';\n\nexport interface Extremum2DAttrs {\n functionId: string;\n interval: { min: number; max: number };\n mode: 'max' | 'min';\n}\n\nconst def: KindDef<Extremum2DAttrs> = {\n type: 'extremum2d',\n schemaVersion: 1,\n migrate: {},\n validate: (a) => {\n if (!a || typeof a.functionId !== 'string' || !a.functionId) {\n throw new Error('extremum2d: functionId bắt buộc');\n }\n if (!a.interval || a.interval.min >= a.interval.max) {\n throw new Error('extremum2d: interval min phải < max');\n }\n if (a.mode !== 'max' && a.mode !== 'min') {\n throw new Error('extremum2d: mode phải là \"max\" hoặc \"min\"');\n }\n },\n dependsOn: (a) => [a.functionId],\n describe: (obj) => `${obj.attrs.mode === 'max' ? 'Cực đại' : 'Cực tiểu'} của ${obj.attrs.functionId} trong [${obj.attrs.interval.min}, ${obj.attrs.interval.max}]`,\n render: (obj, ctx) => {\n \n const board = ctx.jxg as any;\n // Need expression from function — look up via state if needed.\n // Simplified: use compiled-from-attrs cached in ctx.defaults._functionExpr (renderer populates).\n const expr = (ctx.defaults as { _functionExpr?: Record<string, string> })._functionExpr?.[obj.attrs.functionId];\n if (!expr) return null;\n const fn = compile(expr, (ctx.paramMap ?? {}) as Record<string, number>);\n if (typeof fn !== 'function') return null;\n const extrema = scanExtrema(fn, obj.attrs.interval.min, obj.attrs.interval.max).filter((e) => e.type === obj.attrs.mode);\n return extrema.map((e) => board.create('point', [e.x, e.y], {\n name: obj.label,\n size: 3,\n fillColor: '#dc2626',\n strokeColor: '#dc2626',\n withLabel: obj.label !== '',\n }));\n },\n};\n\nregisterKind(def);\n","// src/core/scene/kinds/root2d.ts\nimport { registerKind } from '../registry';\nimport type { KindDef } from '../types';\nimport { scanRoots } from '../expressions/evaluator';\nimport { compile } from '../expressions/parser';\n\nexport interface Root2DAttrs {\n functionId: string;\n interval: { min: number; max: number };\n}\n\nconst def: KindDef<Root2DAttrs> = {\n type: 'root2d',\n schemaVersion: 1,\n migrate: {},\n validate: (a) => {\n if (!a || typeof a.functionId !== 'string' || !a.functionId) {\n throw new Error('root2d: functionId bắt buộc');\n }\n if (!a.interval || a.interval.min >= a.interval.max) {\n throw new Error('root2d: interval min phải < max');\n }\n },\n dependsOn: (a) => [a.functionId],\n describe: (obj) => `Nghiệm của ${obj.attrs.functionId} trong [${obj.attrs.interval.min}, ${obj.attrs.interval.max}]`,\n render: (obj, ctx) => {\n \n const board = ctx.jxg as any;\n const expr = (ctx.defaults as { _functionExpr?: Record<string, string> })._functionExpr?.[obj.attrs.functionId];\n if (!expr) return null;\n const fn = compile(expr, (ctx.paramMap ?? {}) as Record<string, number>);\n if (typeof fn !== 'function') return null;\n const roots = scanRoots(fn, obj.attrs.interval.min, obj.attrs.interval.max);\n return roots.map((x) => board.create('point', [x, 0], {\n name: obj.label,\n size: 3,\n fillColor: '#dc2626',\n strokeColor: '#dc2626',\n withLabel: obj.label !== '',\n }));\n },\n};\n\nregisterKind(def);\n","// src/core/scene/kinds/slope2d.ts\nimport { registerKind } from '../registry';\nimport type { KindDef } from '../types';\n\nexport interface Slope2DAttrs {\n pointId: string;\n}\n\nconst def: KindDef<Slope2DAttrs> = {\n type: 'slope2d',\n schemaVersion: 1,\n migrate: {},\n validate: (a) => {\n if (!a || typeof a.pointId !== 'string' || !a.pointId) {\n throw new Error('slope2d: pointId bắt buộc');\n }\n },\n dependsOn: (a) => [a.pointId],\n describe: (obj) => `Slope tại ${obj.attrs.pointId}`,\n render: (obj, ctx) => {\n \n const board = ctx.jxg as any;\n const pt = ctx.resolveRef(obj.attrs.pointId);\n if (!pt) return null;\n return board.create('slopetriangle', [pt], {\n name: obj.label,\n withLabel: true,\n fillColor: '#9333ea',\n strokeColor: '#9333ea',\n fillOpacity: 0.2,\n });\n },\n};\n\nregisterKind(def);\n","// Shared serialize/deserialize cho scene State của stamp interactive\n// (geometry-2d, geometry-3d, graph-2d). Sau Tier D PR 3, customData chỉ\n// store JSON.stringify(state) — không còn envelope `{version, bbox, state}`.\n//\n// View info (bbox/axis/grid/azimuth/elevation) nằm trong `state.meta.view`\n// (discriminated union theo domain). createEmptyState set default view.\n//\n// Note: v0.20 KHÔNG support backward-compat envelope cũ. Data sessionStorage\n// cũ sẽ fallback về empty state khi parse fail (per user spec).\n\nimport { createEmptyState, type Domain, type State } from '../../core/scene';\n\nexport function serializeScene(state: State): string {\n return JSON.stringify(state);\n}\n\nfunction isValidState(value: unknown, domain: Domain): value is State {\n if (!value || typeof value !== 'object') return false;\n const v = value as Partial<State>;\n if (!v.meta || typeof v.meta !== 'object') return false;\n if (v.meta.domain !== domain) return false;\n if (!v.meta.view || typeof v.meta.view !== 'object') return false;\n if (!v.objects || typeof v.objects !== 'object') return false;\n if (!Array.isArray(v.order)) return false;\n return true;\n}\n\nexport function deserializeScene(domain: Domain, raw: string): State {\n if (!raw) return createEmptyState(domain);\n try {\n const parsed = JSON.parse(raw);\n if (isValidState(parsed, domain)) return parsed;\n } catch {\n /* swallow — fallback empty state */\n }\n return createEmptyState(domain);\n}\n"]}