@xom11/whiteboard 0.24.2 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +84 -11
- package/dist/{ExcalidrawWithMenus-WENZRYYE.mjs → ExcalidrawWithMenus-2QPPTXJM.mjs} +3 -2
- package/dist/ExcalidrawWithMenus-2QPPTXJM.mjs.map +1 -0
- package/dist/ai.d.mts +3217 -434
- package/dist/ai.d.ts +3217 -434
- package/dist/ai.js +7679 -598
- package/dist/ai.js.map +1 -1
- package/dist/ai.mjs +5707 -679
- package/dist/ai.mjs.map +1 -1
- package/dist/catalog.json +5 -5
- package/dist/{chunk-7WQXXEVR.mjs → chunk-4ETJ4CDY.mjs} +5 -5
- package/dist/{chunk-7WQXXEVR.mjs.map → chunk-4ETJ4CDY.mjs.map} +1 -1
- package/dist/chunk-AJAHD35N.mjs +1708 -0
- package/dist/chunk-AJAHD35N.mjs.map +1 -0
- package/dist/chunk-AYJPOHCI.mjs +265 -0
- package/dist/chunk-AYJPOHCI.mjs.map +1 -0
- package/dist/chunk-B4NJJZFR.mjs +18 -0
- package/dist/chunk-B4NJJZFR.mjs.map +1 -0
- package/dist/{chunk-AZIARTGX.mjs → chunk-BNBOIDO5.mjs} +3 -3
- package/dist/{chunk-AZIARTGX.mjs.map → chunk-BNBOIDO5.mjs.map} +1 -1
- package/dist/{chunk-LVNCYP4J.mjs → chunk-CXHNVYMD.mjs} +5 -5
- package/dist/{chunk-LVNCYP4J.mjs.map → chunk-CXHNVYMD.mjs.map} +1 -1
- package/dist/{chunk-45CGKJ7S.mjs → chunk-D5JLJ3PT.mjs} +4 -4
- package/dist/{chunk-45CGKJ7S.mjs.map → chunk-D5JLJ3PT.mjs.map} +1 -1
- package/dist/{chunk-WM2VDYQA.mjs → chunk-D5LWSN2Y.mjs} +944 -196
- package/dist/chunk-D5LWSN2Y.mjs.map +1 -0
- package/dist/{chunk-KRC2XOIG.mjs → chunk-HLAOGXEK.mjs} +3 -3
- package/dist/{chunk-KRC2XOIG.mjs.map → chunk-HLAOGXEK.mjs.map} +1 -1
- package/dist/{chunk-2WF6KIGF.mjs → chunk-I3L56GVH.mjs} +212 -71
- package/dist/chunk-I3L56GVH.mjs.map +1 -0
- package/dist/{chunk-ZBJBQKJ2.mjs → chunk-IHUFOV7L.mjs} +4 -19
- package/dist/chunk-IHUFOV7L.mjs.map +1 -0
- package/dist/chunk-J5LGTIGS.mjs +10 -0
- package/dist/chunk-J5LGTIGS.mjs.map +1 -0
- package/dist/{chunk-BEZSQKPY.mjs → chunk-KYMBUTPO.mjs} +5 -4
- package/dist/chunk-KYMBUTPO.mjs.map +1 -0
- package/dist/{chunk-4DS3MKID.mjs → chunk-KZGPSTZI.mjs} +4 -4
- package/dist/{chunk-4DS3MKID.mjs.map → chunk-KZGPSTZI.mjs.map} +1 -1
- package/dist/{chunk-SGFJLHHG.mjs → chunk-PPKHCRRE.mjs} +3 -3
- package/dist/{chunk-SGFJLHHG.mjs.map → chunk-PPKHCRRE.mjs.map} +1 -1
- package/dist/{chunk-BKSXPNPQ.mjs → chunk-SZDAS7LK.mjs} +81 -3
- package/dist/chunk-SZDAS7LK.mjs.map +1 -0
- package/dist/chunk-T3SOHYB2.mjs +851 -0
- package/dist/chunk-T3SOHYB2.mjs.map +1 -0
- package/dist/geometry-2d.d.mts +2 -2
- package/dist/geometry-2d.d.ts +2 -2
- package/dist/geometry-2d.js +6288 -901
- package/dist/geometry-2d.js.map +1 -1
- package/dist/geometry-2d.mjs +7 -5
- package/dist/geometry-3d.d.mts +2 -2
- package/dist/geometry-3d.d.ts +2 -2
- package/dist/geometry-3d.js +1335 -253
- package/dist/geometry-3d.js.map +1 -1
- package/dist/geometry-3d.mjs +6 -4
- package/dist/graph-2d.d.mts +2 -2
- package/dist/graph-2d.d.ts +2 -2
- package/dist/graph-2d.js +1501 -342
- package/dist/graph-2d.js.map +1 -1
- package/dist/graph-2d.mjs +9 -7
- package/dist/handleExtractProblem-C-U5KluK.d.mts +158 -0
- package/dist/handleExtractProblem-C-U5KluK.d.ts +158 -0
- package/dist/{host-EPZCNFLH.mjs → host-HAYCJJ2T.mjs} +1390 -376
- package/dist/host-HAYCJJ2T.mjs.map +1 -0
- package/dist/{host-LKCMYEAV.mjs → host-LTJHAY5A.mjs} +12 -10
- package/dist/host-LTJHAY5A.mjs.map +1 -0
- package/dist/{host-ZIQ77W33.mjs → host-M26FS244.mjs} +8 -6
- package/dist/host-M26FS244.mjs.map +1 -0
- package/dist/{host-QS2EOTRJ.mjs → host-ZQCDAT6O.mjs} +3 -2
- package/dist/host-ZQCDAT6O.mjs.map +1 -0
- package/dist/index.d.mts +4 -3
- package/dist/index.d.ts +4 -3
- package/dist/index.js +6493 -1102
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +24 -21
- package/dist/index.mjs.map +1 -1
- package/dist/latex.d.mts +2 -2
- package/dist/latex.d.ts +2 -2
- package/dist/latex.mjs +2 -1
- package/dist/render-ZX2O2IK7.mjs +10 -0
- package/dist/{render-SA4JTOW3.mjs.map → render-ZX2O2IK7.mjs.map} +1 -1
- package/dist/serialize-C3LSUMSA.mjs +9 -0
- package/dist/{serialize-JAVOU22E.mjs.map → serialize-C3LSUMSA.mjs.map} +1 -1
- package/dist/types-zc_Pa0mp.d.mts +418 -0
- package/dist/types-zc_Pa0mp.d.ts +418 -0
- package/package.json +10 -1
- package/dist/ExcalidrawWithMenus-WENZRYYE.mjs.map +0 -1
- package/dist/chunk-2WF6KIGF.mjs.map +0 -1
- package/dist/chunk-BEZSQKPY.mjs.map +0 -1
- package/dist/chunk-BKSXPNPQ.mjs.map +0 -1
- package/dist/chunk-CGZZO4BX.mjs +0 -96
- package/dist/chunk-CGZZO4BX.mjs.map +0 -1
- package/dist/chunk-WM2VDYQA.mjs.map +0 -1
- package/dist/chunk-ZBJBQKJ2.mjs.map +0 -1
- package/dist/host-EPZCNFLH.mjs.map +0 -1
- package/dist/host-LKCMYEAV.mjs.map +0 -1
- package/dist/host-QS2EOTRJ.mjs.map +0 -1
- package/dist/host-ZIQ77W33.mjs.map +0 -1
- package/dist/render-SA4JTOW3.mjs +0 -8
- package/dist/serialize-JAVOU22E.mjs +0 -7
- package/dist/types-Crbefnfe.d.ts +0 -128
- package/dist/types-DxlMPh-6.d.mts +0 -49
- package/dist/types-DxlMPh-6.d.ts +0 -49
- package/dist/types-vtvyKGAA.d.mts +0 -128
package/dist/geometry-2d.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/scene/types.ts","../src/core/scene/registry.ts","../src/core/scene/reducer.ts","../src/core/scene/store.ts","../src/core/scene/selectors.ts","../src/core/scene/hooks/useEditorState.ts","../src/core/scene/hooks/index.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/expressions/parser.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/core/scene/kinds/index.ts","../src/core/scene/index.ts","../src/stamps/shared/serializeScene.ts","../src/stamps/geometry-2d/serialize.ts","../src/stamps/geometry-2d/editor/theme.ts","../src/core/scene/render/types2d.ts","../src/core/scene/render/JxgRenderer.ts","../src/stamps/shared/jxgOffscreenRender.ts","../src/stamps/geometry-2d/render.ts","../src/stamps/shared/svgToStampFile.ts","../src/stamps/geometry-2d/types.ts","../src/core/scene/ui/LeftPanelShell.tsx","../src/core/scene/ui/kindMeta.ts","../src/core/scene/ui/ObjectRowMenu.tsx","../src/core/scene/ui/ObjectRow.tsx","../src/core/scene/ui/ObjectListPanel.tsx","../src/stamps/shared/StampLeftPanel/AxisGridSection.tsx","../src/stamps/shared/StampLeftPanel/types.ts","../src/stamps/shared/StampLeftPanel/useToolHoverTooltip.ts","../src/stamps/shared/StampLeftPanel/ToolGrid.tsx","../src/stamps/shared/StampLeftPanel/Desktop.tsx","../src/stamps/shared/MobileToolDrawer.tsx","../src/stamps/shared/StampLeftPanel/Mobile.tsx","../src/stamps/shared/StampLeftPanel/index.tsx","../src/stamps/geometry-2d/editor/icons.tsx","../src/stamps/geometry-2d/editor/tools.tsx","../src/stamps/geometry-2d/editor/handlers/pointerDown/move.ts","../src/stamps/geometry-2d/editor/handlers/pointerDown/select.ts","../src/stamps/shared/safeJsx.ts","../src/stamps/geometry-2d/editor/handlers/utils.ts","../src/stamps/geometry-2d/editor/handlers/pointerDown/point.ts","../src/stamps/geometry-2d/editor/handlers/pointerDown/singleTarget.ts","../src/stamps/geometry-2d/editor/handlers/pointerDown/polygon.ts","../src/stamps/geometry-2d/editor/handlers/classifyPointVsCircle.ts","../src/stamps/geometry-2d/editor/handlers/finalizeShape.ts","../src/stamps/geometry-2d/editor/transforms.ts","../src/stamps/geometry-2d/editor/handlers/transform.ts","../src/stamps/geometry-2d/editor/handlers/pointerDown/multiClick.ts","../src/stamps/geometry-2d/editor/handlers/pointerDown/index.ts","../src/stamps/geometry-2d/editor/handlers/pointerMove.ts","../src/stamps/geometry-2d/editor/handlers/pointerUp.ts","../src/stamps/geometry-2d/editor/handlers/index.ts","../src/stamps/geometry-2d/editor/hitTest.ts","../src/stamps/shared/useToolStateMachine.ts","../src/stamps/shared/attachJxgWheelZoom.ts","../src/stamps/shared/initJxgBoard.ts","../src/stamps/geometry-2d/editor/snapshot.ts","../src/stamps/geometry-2d/editor/preview.ts","../src/stamps/geometry-2d/editor/previewActions.ts","../src/stamps/geometry-2d/editor/attrMapping.ts","../src/stamps/geometry-2d/editor/buildHandle.ts","../src/stamps/geometry-2d/editor/idResolvers.ts","../src/stamps/geometry-2d/editor/useAxisGridSync.ts","../src/stamps/geometry-2d/editor/useEditorShortcuts.ts","../src/stamps/geometry-2d/editor/useJxgSceneIdMap.ts","../src/stamps/geometry-2d/editor/MiniBoard.tsx","../src/stamps/shared/excalidrawPalette.ts","../src/stamps/shared/useIsMobile.ts","../src/stamps/geometry-2d/editor/PropertiesPopover.tsx","../src/stamps/geometry-2d/editor/MultiPropertiesPopover.tsx","../src/stamps/geometry-2d/editor/TransformParamPopover.tsx","../src/stamps/shared/StampLeftPanel/constants.ts","../src/stamps/shared/Toast/ToastProvider.tsx","../src/stamps/shared/Toast/Toast.tsx","../src/stamps/shared/Toast/useToast.ts","../src/stamps/shared/Toast/ToastHost.tsx","../src/stamps/shared/Toast/index.ts","../src/stamps/geometry-2d/editor/useAiFigure.ts","../src/stamps/geometry-2d/editor/AiFigurePrompt.tsx","../src/stamps/geometry-2d/editor/EditorPanel.tsx","../src/stamps/shared/useChordShortcut.ts","../src/stamps/shared/insertImage.ts","../src/stamps/shared/useStampStore.ts","../src/stamps/geometry-2d/host.tsx","../src/stamps/geometry-2d/index.tsx"],"names":["def","produce","React","CURVED_SEGMENTS","init_d_constraint","tangent","constructionRefs","A","B","init_types","jsx","jsxs","React2","React3","Fragment","useState","useRef","useEffect","useCallback","useMemo","createPortal","UndoIcon","RedoIcon","init_point","init_polygon","id","label","ids","sc","jxgFromSceneId","forwardRef","MiniBoard2D","useId","jxgIdToSceneId","screenCoordsOf","objectsAt","clearPreviewSegs","removePhantom","useImperativeHandle","useLayoutEffect","rect","w","left","top","Icons","useReducer","createContext","useContext","init_Toast","GeometryEditorPanelInner","GeometryEditorPanel","A_CODE","GeometryStampHost","lazy"],"mappings":"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","file":"geometry-2d.js","sourcesContent":["// src/core/scene/types.ts\n\nexport type SceneObject<A = Record<string, unknown>> = {\n id: string;\n kind: string;\n label: string;\n visible: boolean;\n locked: boolean;\n layer: string;\n schemaVersion: number;\n attrs: A;\n};\n\n// View per domain — narrow theo `state.meta.domain`.\nexport type View2D = {\n readonly bbox: readonly [number, number, number, number]; // [xmin, ymax, xmax, ymin]\n readonly showAxis: boolean;\n readonly showGrid: boolean;\n};\n\nexport type View3D = {\n readonly bbox3D: readonly [number, number, number, number, number, number]; // [xmin, xmax, ymin, ymax, zmin, zmax]\n readonly azimuth: number;\n readonly elevation: number;\n};\n\nexport type ViewGraph2D = {\n readonly xMin: number;\n readonly xMax: number;\n readonly yMin: number;\n readonly yMax: number;\n readonly showAxis: boolean;\n readonly showGrid: boolean;\n};\n\n// Union of all view shapes — narrow qua state.meta.domain.\nexport type SceneView = View2D | View3D | ViewGraph2D;\n\n// Discriminated union: domain narrow → view shape narrow.\nexport type StateMeta =\n | { readonly domain: '2d'; readonly version: number; readonly view: View2D }\n | { readonly domain: '3d'; readonly version: number; readonly view: View3D }\n | { readonly domain: 'graph2d'; readonly version: number; readonly view: ViewGraph2D };\n\nexport type Domain = StateMeta['domain'];\n\n// Backward-compat alias: UPDATE_VIEW patch dùng graph-2d shape (chỉ graph-2d\n// dispatch action này hiện tại).\nexport type ViewSettings = ViewGraph2D;\n\nexport type State = {\n readonly objects: Readonly<Record<string, SceneObject>>;\n readonly order: readonly string[];\n readonly counter: number;\n readonly meta: StateMeta;\n};\n\nexport type Action =\n | { type: 'ADD'; payload: { obj: SceneObject } }\n | { type: 'UPDATE'; payload: { id: string; patch: Partial<Omit<SceneObject, 'id' | 'kind' | 'attrs'>> } }\n | { type: 'UPDATE_ATTRS'; payload: { id: string; patch: Record<string, unknown> } }\n | { type: 'DELETE'; payload: { id: string } }\n | { type: 'RESET' }\n | { type: 'LOAD'; payload: { state: State } }\n | { type: 'TRANSACTION'; payload: { actions: Action[] } }\n | { type: 'UPDATE_VIEW'; payload: { patch: Partial<ViewSettings> } };\n\nexport type RenderCtx = {\n jxg: unknown;\n resolveRef: (id: string) => unknown;\n defaults: Readonly<Record<string, unknown>>;\n /** Map tham số (parameter.label → parameter.value). Chỉ graph2d dùng. */\n paramMap?: Readonly<Record<string, number>>;\n};\n\nexport type KindDef<A = Record<string, unknown>> = {\n type: string;\n schemaVersion: number;\n migrate: Record<number, (prev: any) => any>;\n validate?: (attrs: A) => void;\n dependsOn: (attrs: A) => string[];\n describe: (obj: SceneObject<A>, state?: State) => string;\n measure?: (obj: SceneObject<A>, state: State) =>\n | { label: string; value: number }[]\n | null;\n render: (obj: SceneObject<A>, ctx: RenderCtx) => unknown;\n update?: (\n obj: SceneObject<A>,\n prev: SceneObject<A>,\n ctx: RenderCtx,\n existing: unknown,\n ) => void;\n};\n\nexport const DEFAULT_VIEW_2D: View2D = {\n bbox: [-10, 10, 10, -10],\n showAxis: false,\n showGrid: false,\n};\n\nexport const DEFAULT_VIEW_3D: View3D = {\n bbox3D: [-5, 5, -5, 5, -5, 5],\n azimuth: 60,\n elevation: 30,\n};\n\nexport const DEFAULT_VIEW_GRAPH2D: ViewGraph2D = {\n xMin: -10, xMax: 10, yMin: -10, yMax: 10,\n showAxis: true, showGrid: true,\n};\n\n// EMPTY_STATE giữ shape '3d' (legacy default). Dùng `createEmptyState(domain)`\n// khi cần state cụ thể cho domain — đảm bảo meta.view khớp domain.\nexport const EMPTY_STATE: State = {\n objects: {},\n order: [],\n counter: 0,\n meta: { domain: '3d', version: 1, view: DEFAULT_VIEW_3D },\n};\n\nexport function createEmptyState(domain: Domain): State {\n const base = { objects: {}, order: [], counter: 0 } as const;\n switch (domain) {\n case '2d':\n return { ...base, meta: { domain: '2d', version: 1, view: DEFAULT_VIEW_2D } };\n case '3d':\n return { ...base, meta: { domain: '3d', version: 1, view: DEFAULT_VIEW_3D } };\n case 'graph2d':\n return { ...base, meta: { domain: 'graph2d', version: 1, view: DEFAULT_VIEW_GRAPH2D } };\n }\n}\n","// src/core/scene/registry.ts\nimport type { KindDef } from './types';\n\nconst registry = new Map<string, KindDef>();\n\nexport function registerKind<A = Record<string, unknown>>(def: KindDef<A>): void {\n if (registry.has(def.type)) {\n console.warn(`[scene] kind \"${def.type}\" đã được đăng ký — ghi đè định nghĩa cũ`);\n }\n registry.set(def.type, def as unknown as KindDef);\n}\n\nexport function getKind(type: string): KindDef {\n const def = registry.get(type);\n if (!def) throw new Error(`[scene] unknown kind: ${type}`);\n return def;\n}\n\nexport function listKinds(): KindDef[] {\n return Array.from(registry.values());\n}\n\n// Chỉ dùng cho test — reset registry giữa các test case.\nexport function __clearRegistryForTests(): void {\n registry.clear();\n}\n","// src/core/scene/reducer.ts\nimport type { Draft } from 'immer';\nimport type { Action, State, SceneObject } from './types';\nimport { getKind } from './registry';\n\nfunction collectDependents(state: Draft<State> | State, rootId: string): Set<string> {\n const dependents = new Set<string>([rootId]);\n let grew = true;\n while (grew) {\n grew = false;\n for (const obj of Object.values(state.objects) as SceneObject[]) {\n if (dependents.has(obj.id)) continue;\n let kindDef;\n try { kindDef = getKind(obj.kind); } catch { continue; }\n const refs = kindDef.dependsOn(obj.attrs as never);\n if (refs.some(r => dependents.has(r))) {\n dependents.add(obj.id);\n grew = true;\n }\n }\n }\n return dependents;\n}\n\nexport function reduce(draft: Draft<State>, action: Action): void {\n switch (action.type) {\n case 'ADD': {\n const { obj } = action.payload;\n if (draft.objects[obj.id]) throw new Error(`[scene] id \"${obj.id}\" đã tồn tại`);\n const kindDef = getKind(obj.kind);\n kindDef.validate?.(obj.attrs as never);\n draft.objects[obj.id] = obj;\n draft.order.push(obj.id);\n draft.counter += 1;\n return;\n }\n case 'UPDATE': {\n const { id, patch } = action.payload;\n const obj = draft.objects[id];\n if (!obj) return;\n Object.assign(obj, patch);\n return;\n }\n case 'UPDATE_ATTRS': {\n const { id, patch } = action.payload;\n const obj = draft.objects[id];\n if (!obj) return;\n const kindDef = getKind(obj.kind);\n const nextAttrs = { ...(obj.attrs as object), ...patch };\n kindDef.validate?.(nextAttrs as never);\n obj.attrs = nextAttrs;\n return;\n }\n case 'DELETE': {\n const { id } = action.payload;\n if (!draft.objects[id]) return;\n const toDelete = collectDependents(draft, id);\n for (const delId of toDelete) {\n delete draft.objects[delId];\n }\n draft.order = draft.order.filter(x => !toDelete.has(x));\n return;\n }\n case 'RESET': {\n draft.objects = {};\n draft.order = [];\n draft.counter = 0;\n return;\n }\n case 'LOAD': {\n const { state } = action.payload;\n draft.objects = { ...state.objects };\n draft.order = [...state.order];\n draft.counter = state.counter;\n // Cast qua Draft<State['meta']> — immer chấp nhận structurally\n // identical shape, chỉ stricter readonly.\n draft.meta = { ...state.meta } as typeof draft.meta;\n return;\n }\n case 'TRANSACTION': {\n for (const sub of action.payload.actions) {\n reduce(draft, sub);\n }\n return;\n }\n case 'UPDATE_VIEW': {\n // Action payload typed cho graph-2d ViewSettings. Bỏ qua nếu domain\n // khác (view shape không tương thích — 2d dùng bbox, 3d dùng bbox3D).\n if (draft.meta.domain !== 'graph2d') return;\n Object.assign(draft.meta.view, action.payload.patch);\n return;\n }\n }\n}\n","// src/core/scene/store.ts\nimport { produce } from 'immer';\nimport { reduce } from './reducer';\nimport type { Action, State } from './types';\n\nexport type StoreListener = (next: State, prev: State, action: Action) => void;\n\nexport interface Store {\n getState(): State;\n dispatch(action: Action): void;\n subscribe(listener: StoreListener): () => void;\n undo(): void;\n redo(): void;\n canUndo(): boolean;\n canRedo(): boolean;\n transaction(fn: (dispatch: (a: Action) => void) => void): void;\n withoutHistory(fn: () => void): void;\n}\n\nexport type StoreOptions = { historyLimit?: number };\n\nconst HISTORY_DEFAULT = 100;\n\nconst UNDO_ACTION: Action = { type: 'TRANSACTION', payload: { actions: [] } };\nconst REDO_ACTION: Action = { type: 'TRANSACTION', payload: { actions: [] } };\n\nexport function createStore(initial: State, options: StoreOptions = {}): Store {\n const limit = options.historyLimit ?? HISTORY_DEFAULT;\n let state = initial;\n const past: State[] = [];\n const future: State[] = [];\n const listeners = new Set<StoreListener>();\n let dispatching = false;\n let suspendHistory = false;\n let transactionActions: Action[] | null = null;\n\n function notify(prev: State, action: Action): void {\n listeners.forEach(l => l(state, prev, action));\n }\n\n function pushHistory(prev: State): void {\n if (suspendHistory) return;\n past.push(prev);\n if (past.length > limit) past.shift();\n future.length = 0;\n }\n\n function applyAction(action: Action): void {\n const prev = state;\n state = produce(state, draft => { reduce(draft, action); });\n if (state !== prev) {\n pushHistory(prev);\n notify(prev, action);\n }\n }\n\n return {\n getState: () => state,\n\n dispatch(action: Action) {\n if (dispatching) throw new Error('[scene] không được dispatch trong subscriber');\n if (transactionActions) {\n transactionActions.push(action);\n return;\n }\n dispatching = true;\n try { applyAction(action); } finally { dispatching = false; }\n },\n\n subscribe(listener) {\n listeners.add(listener);\n return () => { listeners.delete(listener); };\n },\n\n undo() {\n const prev = past.pop();\n if (!prev) return;\n future.push(state);\n const old = state;\n state = prev;\n notify(old, UNDO_ACTION);\n },\n\n redo() {\n const next = future.pop();\n if (!next) return;\n past.push(state);\n if (past.length > limit) past.shift();\n const old = state;\n state = next;\n notify(old, REDO_ACTION);\n },\n\n canUndo: () => past.length > 0,\n canRedo: () => future.length > 0,\n\n transaction(fn) {\n if (transactionActions) throw new Error('[scene] transaction lồng nhau không hỗ trợ');\n transactionActions = [];\n try { fn((a) => { transactionActions!.push(a); }); }\n finally {\n const actions = transactionActions;\n transactionActions = null;\n if (actions.length > 0) {\n applyAction({ type: 'TRANSACTION', payload: { actions } });\n }\n }\n },\n\n withoutHistory(fn) {\n const prevSuspend = suspendHistory;\n suspendHistory = true;\n try { fn(); } finally { suspendHistory = prevSuspend; }\n },\n };\n}\n","// 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/hooks/index.ts\nexport { useSceneStore } from './useSceneStore';\nexport type { SceneStoreApi } from './useSceneStore';\nexport { useEditorState } from './useEditorState';\nexport type { UseEditorStateOptions } from './useEditorState';\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/expressions/parser.ts\n// Pure expression parser cho function2d kind. Không import JSXGraph/React.\n\nexport const ALLOWED_CONSTANTS = ['pi', 'e'] as const;\nexport const ALLOWED_FUNCTIONS = [\n 'sin', 'cos', 'tan',\n 'asin', 'acos', 'atan', 'atan2',\n 'sinh', 'cosh', 'tanh',\n 'exp', 'log', 'log10', 'ln',\n 'sqrt', 'cbrt', 'abs',\n 'floor', 'ceil', 'round',\n 'min', 'max', 'pow',\n] as const;\n\nconst ID_RE = /[A-Za-z_][A-Za-z0-9_]*/g;\nconst UNSAFE_RE = /[=;{}]|\\beval\\b|\\bnew\\b|\\breturn\\b|\\bthis\\b|\\bwindow\\b|\\bdocument\\b|\\bglobal\\b|\\bprocess\\b/;\n\nconst NUMBER_RE = /^[+-]?(\\d+\\.?\\d*|\\.\\d+)([eE][+-]?\\d+)?$/;\n\nexport type ValidateResult = { ok: true } | { ok: false; error: string };\n\n// Detect identifiers used as function calls (followed by '(')\nconst FUNC_CALL_RE = /([A-Za-z_][A-Za-z0-9_]*)\\s*\\(/g;\n\n/** Kiểm tra expression có hợp lệ không. */\nexport function validate(expression: string): ValidateResult {\n const trimmed = expression.trim();\n if (!trimmed) return { ok: false, error: 'Biểu thức rỗng' };\n if (UNSAFE_RE.test(trimmed)) return { ok: false, error: 'Biểu thức chứa toán tử hoặc identifier không cho phép' };\n\n // Replace ^ với ** (JS không có ^)\n const jsExpr = trimmed.replace(/\\^/g, '**');\n\n // Check function call identifiers — must be in ALLOWED_FUNCTIONS\n let fm: RegExpExecArray | null;\n FUNC_CALL_RE.lastIndex = 0;\n while ((fm = FUNC_CALL_RE.exec(jsExpr)) !== null) {\n const fnName = fm[1];\n if (!(ALLOWED_FUNCTIONS as readonly string[]).includes(fnName)) {\n return { ok: false, error: `Hàm không hợp lệ: ${fnName}` };\n }\n }\n\n // Check identifiers\n const ids = new Set<string>();\n let m: RegExpExecArray | null;\n ID_RE.lastIndex = 0;\n while ((m = ID_RE.exec(jsExpr)) !== null) ids.add(m[0]);\n\n for (const id of ids) {\n if (id === 'x') continue;\n if ((ALLOWED_CONSTANTS as readonly string[]).includes(id)) continue;\n if ((ALLOWED_FUNCTIONS as readonly string[]).includes(id)) continue;\n // Remaining identifiers treat as parameter — OK at validate time.\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(id)) {\n return { ok: false, error: `Identifier không hợp lệ: ${id}` };\n }\n }\n\n // Try syntactic compile (with dummy params) to catch syntax errors.\n try {\n buildFunctionBody(jsExpr, Array.from(ids).filter(\n (id) => id !== 'x' && !(ALLOWED_CONSTANTS as readonly string[]).includes(id) && !(ALLOWED_FUNCTIONS as readonly string[]).includes(id),\n ));\n } catch (err) {\n return { ok: false, error: `Cú pháp lỗi: ${(err as Error).message}` };\n }\n\n return { ok: true };\n}\n\n/**\n * Compile expression thành function (x: number) => number.\n * - `params` map từ identifier → value để inline vào closure.\n * - Trả string error nếu invalid.\n */\nexport function compile(\n expression: string,\n params: Record<string, number>,\n): ((x: number) => number) | string {\n const v = validate(expression);\n if (!v.ok) return v.error;\n const jsExpr = expression.trim().replace(/\\^/g, '**');\n\n const ids = new Set<string>();\n let m: RegExpExecArray | null;\n ID_RE.lastIndex = 0;\n while ((m = ID_RE.exec(jsExpr)) !== null) ids.add(m[0]);\n\n const paramNames: string[] = [];\n for (const id of ids) {\n if (id === 'x') continue;\n if ((ALLOWED_CONSTANTS as readonly string[]).includes(id)) continue;\n if ((ALLOWED_FUNCTIONS as readonly string[]).includes(id)) continue;\n paramNames.push(id);\n }\n\n try {\n const body = buildFunctionBody(jsExpr, paramNames);\n \n const fn = new Function('x', ...paramNames, body) as (\n x: number,\n ...args: number[]\n ) => number;\n const args = paramNames.map((name) => params[name] ?? NaN);\n return (x: number) => fn(x, ...args);\n } catch (err) {\n return `Compile error: ${(err as Error).message}`;\n }\n}\n\nfunction buildFunctionBody(jsExpr: string, _paramNames: string[]): string {\n // Inline Math constants and functions.\n // sin → Math.sin, pi → Math.PI, e → Math.E, ln → Math.log.\n let body = jsExpr;\n body = body.replace(/\\bln\\b/g, 'Math.log');\n body = body.replace(/\\blog\\b/g, 'Math.log10');\n body = body.replace(/\\bpi\\b/g, '(Math.PI)');\n body = body.replace(/\\be\\b(?!\\w)/g, '(Math.E)');\n for (const fn of ALLOWED_FUNCTIONS) {\n if (fn === 'log' || fn === 'log10') continue; // already handled\n body = body.replace(new RegExp(`\\\\b${fn}\\\\b`, 'g'), `Math.${fn}`);\n }\n return `\"use strict\"; return (${body});`;\n}\n\n/** Liệt kê free identifiers (≠ x, ≠ allowed const/func). */\nexport function collectFreeVars(expression: string): string[] {\n const v = validate(expression);\n if (!v.ok) return [];\n const ids = new Set<string>();\n let m: RegExpExecArray | null;\n ID_RE.lastIndex = 0;\n while ((m = ID_RE.exec(expression)) !== null) ids.add(m[0]);\n const out: string[] = [];\n for (const id of ids) {\n if (id === 'x') continue;\n if ((ALLOWED_CONSTANTS as readonly string[]).includes(id)) continue;\n if ((ALLOWED_FUNCTIONS as readonly string[]).includes(id)) continue;\n if (NUMBER_RE.test(id)) continue;\n out.push(id);\n }\n return out.sort();\n}\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","// src/core/scene/kinds/index.ts\nimport './point3d';\nimport './segment3d';\nimport './line3d';\nimport './ray3d';\nimport './vector3d';\nimport './plane3d';\nimport './polygon3d';\nimport './sphere3d';\nimport './polyhedron3d';\nimport './cylinder3d';\nimport './cone3d';\nimport './point';\nimport './segment';\nimport './line';\nimport './ray';\nimport './vector';\nimport './circle';\nimport './arc';\nimport './sector';\nimport './polygon';\nimport './intersection';\nimport './angle';\nimport './distance';\nimport './function2d';\nimport './parameter';\nimport './pointOnCurve';\nimport './tangent2d';\nimport './extremum2d';\nimport './root2d';\nimport './slope2d';\nexport {};\n","// src/core/scene/index.ts\nexport type {\n SceneObject,\n State,\n StateMeta,\n Domain,\n SceneView,\n View2D,\n View3D,\n ViewGraph2D,\n ViewSettings,\n Action,\n KindDef,\n RenderCtx,\n} from './types';\nexport {\n EMPTY_STATE,\n DEFAULT_VIEW_2D,\n DEFAULT_VIEW_3D,\n DEFAULT_VIEW_GRAPH2D,\n createEmptyState,\n} from './types';\nexport { createStore } from './store';\nexport type { Store, StoreListener, StoreOptions } from './store';\nexport { reduce } from './reducer';\nexport { registerKind, getKind, listKinds } from './registry';\nexport { listObjects, byKind, dependentsOf, nextLabel } from './selectors';\nexport { migrateState } from './migrations/runMigrations';\nexport { registerStateMigration, CURRENT_STATE_VERSION } from './migrations/state';\n\nexport { useSceneStore, useEditorState } from './hooks';\nexport type { SceneStoreApi, UseEditorStateOptions } from './hooks';\n\n// IMPORTANT: import kinds barrel để side-effect register chạy.\nimport './kinds';\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","// src/stamps/geometry-2d/serialize.ts\n//\n// Sau Tier D PR 3: customData.jsonState chỉ chứa `JSON.stringify(state)`\n// (không còn envelope `{version, bbox, state, showAxis, showGrid}`).\n// View info (bbox/axis/grid) nằm trong `state.meta.view` (View2D shape).\n\nimport { serializeScene, deserializeScene } from '../shared/serializeScene';\nimport type { State, View2D } from '../../core/scene';\n\nexport function serializeBoard(state: State, view: View2D): string {\n const withView: State = {\n ...state,\n meta: { domain: '2d', version: state.meta.version, view },\n };\n return serializeScene(withView);\n}\n\nexport function deserializeBoard(raw: string): State {\n return deserializeScene('2d', raw);\n}\n","// Theme-aware palette cho geometry stamps.\n//\n// Dùng `Theme2D` từ `core/scene/render/types2d` (cùng abstraction graph-2d).\n// JxgRenderer nhận theme qua constructor options và phân phối qua RenderCtx\n// đến mỗi kind handler — không cần sentinel string trong attrs nữa.\n\nimport { type Theme2D } from '../../../core/scene/render/types2d';\n\nexport const themeStroke = (dark: boolean): string => (dark ? '#e2e8f0' : '#0f172a');\nexport const themeAxis = (dark: boolean): string => (dark ? '#cbd5e1' : '#94a3b8');\nexport const themeGrid = (dark: boolean): string => (dark ? '#475569' : '#e2e8f0');\nexport const themeLabel = (dark: boolean): string => (dark ? '#e2e8f0' : '#000000');\n\nexport function paletteFor(isDark: boolean): Theme2D {\n const stroke = themeStroke(isDark);\n return {\n stroke,\n fill: '#60a5fa',\n axis: themeAxis(isDark),\n grid: themeGrid(isDark),\n label: themeLabel(isDark),\n // Geometry-2d điểm fill = stroke color (đồng bộ chấm điểm với nét vẽ).\n pointFill: stroke,\n };\n}\n","// src/core/scene/render/types2d.ts\nimport type { RenderCtx } from '../types';\n\nexport type Theme2D = {\n stroke: string;\n fill: string;\n label: string;\n axis: string;\n grid: string;\n pointFill: string;\n};\n\nexport const DEFAULT_THEME_2D: Theme2D = {\n stroke: '#0f172a',\n fill: '#60a5fa',\n label: '#0f172a',\n axis: '#94a3b8',\n grid: '#e2e8f0',\n pointFill: '#1e40af',\n};\n\nexport type RenderCtx2D = RenderCtx & {\n theme: Theme2D;\n};\n","// src/core/scene/render/JxgRenderer.ts\nimport type { Store } from '../store';\nimport type { State, SceneObject, RenderCtx } from '../types';\nimport { getKind } from '../registry';\nimport { DEFAULT_THEME_2D, type Theme2D } from './types2d';\nimport { collectFreeVars } from '../expressions/parser';\n\nexport type JxgRendererOptions = { theme?: Theme2D };\n\nexport class JxgRenderer {\n private board: unknown;\n private store: Store;\n private theme: Theme2D;\n private elements = new Map<string, unknown>();\n private unsubscribe: () => void;\n private disposed = false;\n\n /** Chỉ dùng cho domain='graph2d': parameter.label → parameter.value */\n private paramMap: Record<string, number> = {};\n /** Chỉ dùng cho domain='graph2d': function2d.id → expression string */\n private functionExpr: Record<string, string> = {};\n\n constructor(store: Store, board: unknown, options: JxgRendererOptions = {}) {\n this.store = store;\n this.board = board;\n this.theme = options.theme ?? DEFAULT_THEME_2D;\n this.unsubscribe = store.subscribe((next, prev) => this.applyDiff(prev, next));\n // Render state hiện tại (vd LOAD chạy trước khi subscribe).\n this.applyDiff(undefined, store.getState());\n }\n\n private ctx(): RenderCtx {\n return {\n jxg: this.board,\n resolveRef: (id: string) => {\n // Synthetic \"<polyId>:border:<N>\" → polygon.borders[N]. Polygon edges\n // là sub-segment do JSXGraph auto-tạo bên trong polygon; chúng không\n // có scene id riêng. Synthetic id cho phép construct tools (vd\n // perpendicular qua một cạnh đa giác) tham chiếu cạnh như một line.\n const m = /^(.+):border:(\\d+)$/.exec(id);\n if (m) {\n const poly = this.elements.get(m[1]) as { borders?: unknown[] } | undefined;\n if (!poly) throw new Error(`[scene/2d] resolveRef: chưa render polygon id=\"${m[1]}\"`);\n const borders = poly.borders;\n const idx = parseInt(m[2], 10);\n if (!Array.isArray(borders) || !borders[idx]) {\n throw new Error(`[scene/2d] resolveRef: polygon \"${m[1]}\" không có border[${idx}]`);\n }\n return borders[idx];\n }\n const el = this.elements.get(id);\n if (!el) throw new Error(`[scene/2d] resolveRef: chưa render id=\"${id}\"`);\n return el;\n },\n defaults: { theme: this.theme, _functionExpr: this.functionExpr },\n paramMap: this.paramMap,\n };\n }\n\n /**\n * Rebuild `paramMap` và `functionExpr` từ state hiện tại.\n * Chỉ chạy khi domain='graph2d'. Chi phí thấp vì parameters thường ≤ 8.\n */\n private rebuildGraphMaps(state: State): void {\n if (state.meta.domain !== 'graph2d') return;\n const params: Record<string, number> = {};\n const fns: Record<string, string> = {};\n for (const id of state.order) {\n const obj = state.objects[id];\n if (obj.kind === 'parameter') {\n params[obj.label] = (obj.attrs as { value: number }).value;\n } else if (obj.kind === 'function2d') {\n fns[obj.id] = (obj.attrs as { expression: string }).expression;\n }\n }\n this.paramMap = params;\n this.functionExpr = fns;\n }\n\n private create(obj: SceneObject): void {\n try {\n const def = getKind(obj.kind);\n const el = def.render(obj, this.ctx());\n this.elements.set(obj.id, el);\n this.attachFreePointDragSync(obj, el);\n } catch (err) {\n console.warn(`[scene/render/2d] không render được ${obj.kind} id=\"${obj.id}\":`, err);\n }\n }\n\n /**\n * Đồng bộ toạ độ live của free point về scene.constraint khi user kéo bằng\n * tay (Move tool / mobile drag). JSXGraph mutate obj.X()/Y() ngay nhưng\n * constraint vẫn giữ giá trị lúc tạo → serialize sẽ ra SVG y hệt cũ →\n * fileId SHA-256 trùng → Excalidraw bỏ qua refresh. (Regression từ\n * commit f41f366 sau scene v2 port.)\n *\n * Chỉ áp dụng cho free point — glider/intersection/midpoint không drag được\n * trực tiếp (toạ độ derived từ ref khác).\n */\n private attachFreePointDragSync(obj: SceneObject, el: unknown): void {\n if (obj.kind !== 'point') return;\n const c = (obj.attrs as { constraint?: { kind?: string } }).constraint;\n if (!c || c.kind !== 'free') return;\n \n const point = el as any;\n if (typeof point.on !== 'function') return;\n const sceneId = obj.id;\n point.on('up', () => {\n if (this.disposed) return;\n if (typeof point.X !== 'function' || typeof point.Y !== 'function') return;\n const x = point.X();\n const y = point.Y();\n if (!Number.isFinite(x) || !Number.isFinite(y)) return;\n const cur = this.store.getState().objects[sceneId];\n if (!cur) return;\n const curC = (cur.attrs as { constraint?: { kind?: string; x?: number; y?: number } }).constraint;\n if (!curC || curC.kind !== 'free') return;\n if (curC.x === x && curC.y === y) return;\n this.store.dispatch({\n type: 'UPDATE_ATTRS',\n payload: { id: sceneId, patch: { constraint: { kind: 'free', x, y } } },\n });\n });\n }\n\n private remove(id: string): void {\n // Selection halo (nếu có) phải bị xoá TRƯỚC element gốc — halo tham chiếu\n // tới point1/point2/center/vertices của element gốc qua lambda; xoá element\n // gốc trước sẽ làm halo dangling.\n this.removeHalo(id);\n this.selectedIds.delete(id);\n const el = this.elements.get(id);\n if (!el) return;\n try {\n const helpers = (el as Record<string, unknown>)._helpers;\n // Element chính bị remove trước, sau đó helpers (glider phụ trợ cho\n // tangent ...). Helpers thường là parent của element chính — nếu xoá\n // parent trước, JSXGraph có thể phàn nàn dangling reference.\n (this.board as { removeObject?: (e: unknown) => void }).removeObject?.(el);\n if (Array.isArray(helpers)) {\n for (const h of helpers) {\n try {\n (this.board as { removeObject?: (e: unknown) => void }).removeObject?.(h);\n } catch { /* ignore */ }\n }\n }\n } catch (err) {\n console.warn(`[scene/render/2d] không remove được id=\"${id}\":`, err);\n }\n this.elements.delete(id);\n }\n\n private applyDiff(prev: State | undefined, next: State): void {\n if (this.disposed) return;\n\n // Rebuild paramMap + functionExpr TRƯỚC khi diff, để ctx() có đúng\n // paramMap khi render lần đầu tiên.\n this.rebuildGraphMaps(next);\n\n const prevObjs = prev?.objects ?? {};\n const nextObjs = next.objects;\n\n // Xoá ids biến mất.\n for (const id of Object.keys(prevObjs)) {\n if (!(id in nextObjs)) this.remove(id);\n }\n\n // Thêm/cập nhật theo state.order — đảm bảo refs có trước.\n for (const id of next.order) {\n const cur = nextObjs[id];\n const old = prevObjs[id] as SceneObject | undefined;\n if (!old) {\n this.create(cur);\n continue;\n }\n if (Object.is(old, cur)) continue;\n const def = getKind(cur.kind);\n const existing = this.elements.get(id);\n if (def.update && existing) {\n try { def.update(cur, old, this.ctx(), existing); continue; }\n catch (err) { console.warn(`[scene/render/2d] update fail, recreate:`, err); }\n }\n this.remove(id);\n this.create(cur);\n }\n\n // Sau diff bình thường: nếu domain='graph2d', detect parameter value changes\n // và force re-render các function2d phụ thuộc.\n if (next.meta.domain === 'graph2d' && prev) {\n const changedParams = new Set<string>();\n for (const id of next.order) {\n const cur = next.objects[id];\n const old = prev.objects[id] as SceneObject | undefined;\n if (cur.kind !== 'parameter' || old?.kind !== 'parameter') continue;\n if ((cur.attrs as { value: number }).value !== (old.attrs as { value: number }).value) {\n changedParams.add(cur.label);\n }\n }\n if (changedParams.size > 0) {\n for (const id of next.order) {\n const obj = next.objects[id];\n if (obj.kind !== 'function2d') continue;\n const expr = (obj.attrs as { expression: string }).expression;\n const refs = collectFreeVars(expr);\n if (refs.some((r) => changedParams.has(r))) {\n this.remove(id);\n this.create(obj);\n }\n }\n }\n }\n }\n\n dispose(): void {\n if (this.disposed) return;\n this.unsubscribe();\n for (const id of Array.from(this.elements.keys())) this.remove(id);\n this.disposed = true;\n }\n\n /** Return the rendered JSXGraph element for a scene id, or null if not found. */\n getElement(id: string): unknown {\n return this.elements.get(id) ?? null;\n }\n\n /** Return a read-only view of the scene id → JSXGraph element map (for hit-test). */\n listElements(): Map<string, unknown> {\n return this.elements;\n }\n\n // Selection halo overlay model: thay vì đổi màu element gốc thành đỏ, tạo\n // một halo element gray phía sau (lower layer) → giữ nguyên màu gốc. Hỗ\n // trợ multi-select cho cả canvas click-selection lẫn ObjectListPanel.\n private selectedIds: Set<string> = new Set();\n private haloMap: Map<string, unknown[]> = new Map();\n\n highlight(ids: string | string[] | null): void {\n if (this.disposed) return;\n const newIds = new Set<string>(\n ids == null ? [] : Array.isArray(ids) ? ids : [ids],\n );\n // Remove halos cho ids đã bị bỏ chọn.\n for (const id of this.selectedIds) {\n if (!newIds.has(id)) this.removeHalo(id);\n }\n // Add halos cho ids mới chọn.\n for (const id of newIds) {\n if (!this.selectedIds.has(id) && this.elements.has(id)) this.addHalo(id);\n }\n this.selectedIds = newIds;\n try {\n (this.board as { update?: () => void }).update?.();\n } catch { /* ignore */ }\n }\n\n private removeHalo(id: string): void {\n const halos = this.haloMap.get(id);\n if (!halos) return;\n const board = this.board as { removeObject?: (e: unknown) => void };\n for (const h of halos) {\n try { board.removeObject?.(h); } catch { /* ignore */ }\n }\n this.haloMap.delete(id);\n }\n\n private addHalo(id: string): void {\n const el = this.elements.get(id) as\n | {\n elType?: string;\n getAttribute?: (k: string) => unknown;\n X?: () => number;\n Y?: () => number;\n point1?: unknown;\n point2?: unknown;\n center?: unknown;\n Radius?: () => number;\n vertices?: unknown[];\n }\n | undefined;\n if (!el) return;\n const board = this.board as {\n create?: (kind: string, parents: unknown[], attrs?: unknown) => unknown;\n };\n if (!board.create) return;\n\n // Selection palette — gray fill + darker gray border (xem\n // tham chiếu /tmp/ss.png).\n const SEL_STROKE = '#475569'; // slate-600\n const SEL_FILL = '#cbd5e1'; // slate-300\n const haloBase = {\n strokeColor: SEL_STROKE,\n strokeOpacity: 0.55,\n fillColor: SEL_FILL,\n fillOpacity: 0.3,\n fixed: true,\n withLabel: false,\n name: '',\n highlight: false,\n layer: 4,\n needsRegularUpdate: true,\n };\n const halos: unknown[] = [];\n try {\n switch (el.elType) {\n case 'point':\n case 'glider':\n case 'intersection': {\n const baseSize = (el.getAttribute?.('size') as number | undefined) ?? 4;\n const halo = board.create('point', [\n () => el.X?.() ?? 0,\n () => el.Y?.() ?? 0,\n ], {\n ...haloBase,\n size: baseSize + 6,\n face: 'o',\n strokeWidth: 2,\n strokeOpacity: 0.75,\n fillOpacity: 0.25,\n });\n halos.push(halo);\n break;\n }\n case 'segment': {\n if (el.point1 && el.point2) {\n const halo = board.create('segment', [el.point1, el.point2], {\n ...haloBase,\n strokeWidth: 9,\n straightFirst: false,\n straightLast: false,\n });\n halos.push(halo);\n }\n break;\n }\n case 'line':\n case 'arrow':\n case 'ray':\n case 'vector':\n case 'tangent':\n case 'normal':\n case 'parallel':\n case 'perpendicular':\n case 'bisector': {\n if (el.point1 && el.point2) {\n const halo = board.create('line', [el.point1, el.point2], {\n ...haloBase,\n strokeWidth: 9,\n });\n halos.push(halo);\n }\n break;\n }\n case 'circle': {\n if (el.center && typeof el.Radius === 'function') {\n const halo = board.create('circle', [el.center, () => el.Radius?.() ?? 0], {\n ...haloBase,\n strokeWidth: 9,\n fillOpacity: 0,\n });\n halos.push(halo);\n }\n break;\n }\n case 'polygon': {\n if (Array.isArray(el.vertices) && el.vertices.length >= 3) {\n // JSXGraph polygon.vertices có thể append vertex đầu lặp lại ở\n // cuối để đóng path — trim cho an toàn.\n const last = el.vertices.length - 1;\n const verts = el.vertices[last] === el.vertices[0]\n ? el.vertices.slice(0, last)\n : el.vertices.slice();\n const halo = board.create('polygon', verts, {\n ...haloBase,\n fillOpacity: 0.2,\n borders: {\n strokeColor: SEL_STROKE,\n strokeWidth: 7,\n strokeOpacity: 0.55,\n highlight: false,\n },\n });\n halos.push(halo);\n }\n break;\n }\n default:\n // Các kind khác (curve, arc, sector, angle, ...) — chưa hỗ trợ halo.\n break;\n }\n } catch (err) {\n console.warn('[scene/render/2d] halo create fail:', err);\n }\n if (halos.length) this.haloMap.set(id, halos);\n }\n}\n","/**\n * Shared offscreen JSXGraph render pipeline.\n *\n * Each JSXGraph stamp (geometry-2d, geometry-3d, graph-2d) needs the same\n * boilerplate to dump SVG offscreen: lazy import JSXGraph, create a hidden\n * DIV with explicit pixel dimensions, initBoard, attach a scene-store renderer\n * (or create a view3d), force update, clone the SVG node, add xmlns, serialize,\n * then tear everything down. This helper owns that lifecycle so each stamp\n * only writes the unique part — what to render — inside `setup`.\n *\n * Intrinsic SVG resolution matters: Excalidraw loads stamp SVGs via <img> then\n * drawImage onto canvas. The browser rasterizes SVG at its intrinsic\n * width/height, so dims passed here should be generous enough that the bitmap\n * downscales (sharp) instead of upscales (blurry) when the user zooms or views\n * on a retina display.\n */\n \ntype JxgModule = any;\n\nexport interface JxgOffscreenRenderOpts {\n /** JSXGraph bounding box: [xmin, ymax, xmax, ymin]. */\n bbox: [number, number, number, number];\n /** Offscreen container size in CSS pixels. Becomes SVG intrinsic size. */\n dims: { width: number; height: number };\n axis?: boolean;\n grid?: boolean;\n keepAspectRatio?: boolean;\n /** Mutate JXG.Options before initBoard (e.g. text.display='internal', palette). */\n applyOptions?: (JXG: JxgModule) => void;\n /**\n * Build the scene on the board. Return a disposable (typically the\n * `JxgRenderer` or `JxgRenderer3D` instance) — its `dispose()` is invoked\n * during teardown before `freeBoard`.\n */\n setup: (board: unknown, JXG: JxgModule) => { dispose: () => void } | Promise<{ dispose: () => void }>;\n /** Optional mutation on the cloned <svg> before serialization. */\n postProcessSvg?: (clone: SVGElement) => void;\n}\n\nexport interface JxgOffscreenRenderResult {\n svgString: string;\n width: number;\n height: number;\n}\n\nexport async function renderJsxgOffscreen(\n opts: JxgOffscreenRenderOpts,\n): Promise<JxgOffscreenRenderResult> {\n const { bbox, dims, axis = false, grid = false, keepAspectRatio = true } = opts;\n const JXG: JxgModule = (await import('jsxgraph')).default;\n\n if (opts.applyOptions) {\n try {\n opts.applyOptions(JXG);\n } catch {\n /* swallow option-apply errors */\n }\n }\n\n const containerId =\n 'jxg_offscreen_' + Date.now() + '_' + Math.random().toString(36).slice(2, 8);\n const container = document.createElement('div');\n container.id = containerId;\n container.style.cssText =\n `position:absolute;top:-99999px;left:-99999px;` +\n `width:${dims.width}px;height:${dims.height}px;` +\n `visibility:hidden;pointer-events:none;`;\n document.body.appendChild(container);\n\n let board: unknown = null;\n let disposable: { dispose: () => void } | null = null;\n try {\n board = JXG.JSXGraph.initBoard(containerId, {\n boundingbox: bbox,\n axis,\n grid,\n keepAspectRatio,\n showCopyright: false,\n showNavigation: false,\n });\n disposable = await opts.setup(board, JXG);\n try {\n \n (board as any)?.update?.();\n } catch {\n /* ignore — board may already be in valid state */\n }\n\n const svgEl = container.querySelector('svg');\n if (!svgEl) throw new Error('renderJsxgOffscreen: no SVG produced by JSXGraph');\n const clone = svgEl.cloneNode(true) as SVGElement;\n if (!clone.getAttribute('xmlns')) {\n clone.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n }\n if (opts.postProcessSvg) opts.postProcessSvg(clone);\n const svgString = new XMLSerializer().serializeToString(clone);\n return { svgString, width: dims.width, height: dims.height };\n } finally {\n try {\n disposable?.dispose();\n } catch {\n /* ignore */\n }\n try {\n if (board) JXG.JSXGraph.freeBoard(board);\n } catch {\n /* ignore */\n }\n if (container.parentNode) container.parentNode.removeChild(container);\n }\n}\n","import { deserializeBoard } from './serialize';\nimport { paletteFor } from './editor/theme';\nimport { createStore } from '../../core/scene';\nimport { DEFAULT_VIEW_2D } from '../../core/scene/types';\nimport { JxgRenderer } from '../../core/scene/render/JxgRenderer';\nimport { renderJsxgOffscreen } from '../shared/jxgOffscreenRender';\n\n/**\n * Re-render geometry SVG từ jsonState đã serialize. Dùng cho:\n * 1. Restore math-stamp file sau khi reload page (Excalidraw mất binary files).\n * 2. Generate SVG lúc INSERT (thay vì clone DOM với màu theo theme editor).\n *\n * LƯU Ý quan trọng — luôn dùng LIGHT palette (nét đậm). Excalidraw apply CSS\n * `filter: invert(93%) hue-rotate(180deg)` lên canvas trong dark mode → nét\n * đậm tự đảo thành sáng. Nếu ta bake nét sáng vào SVG cho dark mode, filter\n * sẽ đảo thành đậm → chìm vào nền tối. Giải pháp: luôn dùng nét đậm + để\n * Excalidraw tự lo invert.\n *\n * Implementation: tạo 1 div ẩn (off-screen, real dimensions để JSXGraph render\n * chuẩn), initBoard, replay creation log từ jsonState, dump SVG, dọn dẹp.\n *\n * Container dimensions phải MATCH aspect ratio của bbox (đã được editor lưu\n * sau khi JSXGraph adjust với keepAspectRatio:true). Trước đây hardcode\n * 400×300 + keepAspectRatio:false làm shape bị kéo dãn (circle thành ellipse,\n * góc vuông lệch) khi bbox không 4:3 → ảnh hiển thị khác với editor lúc\n * double-click. Fix: tính container W/H từ bbox + keepAspectRatio:true để\n * SVG output khớp với view trong editor.\n *\n * Lý do JXG.Options.text.display = 'internal': JSXGraph mặc định render\n * label bằng HTML <div> overlay → clone SVG export sẽ thiếu label.\n */\n\nconst PIXELS_PER_UNIT = 20;\nconst MIN_DIM = 100;\nconst MAX_DIM = 1200;\nconst FALLBACK_W = 400;\nconst FALLBACK_H = 300;\n\nexport function containerDimsForBbox(bbox: [number, number, number, number]): { width: number; height: number } {\n const [xmin, ymax, xmax, ymin] = bbox;\n const w = Math.abs(xmax - xmin);\n const h = Math.abs(ymax - ymin);\n if (!Number.isFinite(w) || !Number.isFinite(h) || w <= 0 || h <= 0) {\n return { width: FALLBACK_W, height: FALLBACK_H };\n }\n let width = w * PIXELS_PER_UNIT;\n let height = h * PIXELS_PER_UNIT;\n const maxAxis = Math.max(width, height);\n if (maxAxis > MAX_DIM) {\n const ratio = MAX_DIM / maxAxis;\n width *= ratio;\n height *= ratio;\n }\n const minAxis = Math.min(width, height);\n if (minAxis < MIN_DIM) {\n const ratio = MIN_DIM / minAxis;\n width *= ratio;\n height *= ratio;\n }\n return { width: Math.round(width), height: Math.round(height) };\n}\n\nexport async function renderGeometrySvgFromState(jsonState: string): Promise<string> {\n const state = deserializeBoard(jsonState);\n const view = state.meta.domain === '2d' ? state.meta.view : DEFAULT_VIEW_2D;\n const bbox = view.bbox as [number, number, number, number];\n // Stamps inserted vào Excalidraw canvas → luôn dùng light palette.\n // Excalidraw's THEME_FILTER tự đảo nét trong dark mode.\n const palette = paletteFor(false);\n const dims = containerDimsForBbox(bbox);\n const { svgString } = await renderJsxgOffscreen({\n bbox,\n dims,\n axis: view.showAxis,\n grid: view.showGrid,\n keepAspectRatio: true,\n applyOptions: (JXG) => {\n \n const opts = (JXG as any).Options;\n if (!opts) return;\n opts.text = opts.text || {};\n opts.text.display = 'internal';\n opts.text.useASCIIMathML = false;\n opts.text.useMathJax = false;\n opts.text.useKatex = false;\n opts.text.strokeColor = palette.label;\n opts.label = opts.label || {};\n opts.label.display = 'internal';\n opts.label.strokeColor = palette.label;\n opts.axis = opts.axis || {};\n opts.axis.strokeColor = palette.axis;\n opts.grid = opts.grid || {};\n opts.grid.strokeColor = palette.grid;\n },\n setup: (board) => {\n const store = createStore(state);\n return new JxgRenderer(store, board);\n },\n });\n return svgString;\n}\n","// SVG inline base64 helper dùng chung cho 3 stamp (geometry-2d, geometry-3d,\n// graph-2d):\n//\n// - `svgToStampFile(svg, fileId)` — sync, dùng cho `restoreFileFromCustomData`\n// khi caller đã có fileId từ element.\n// - `createStampFile(svg)` — async, dùng cho insert path khi cần generate\n// fileId mới từ hash SVG content.\n//\n// Output luôn là SVG inline base64 — Excalidraw render native + tự đảo màu\n// trong dark mode qua CSS filter. KHÔNG raster sang PNG.\n\nconst DEFAULT_WIDTH = 200;\nconst DEFAULT_HEIGHT = 100;\n\nexport interface StampFileResult {\n fileId: string;\n dataURL: string;\n mimeType: 'image/svg+xml';\n width: number;\n height: number;\n}\n\nasync function hashSvgToFileId(input: string): Promise<string> {\n if (typeof crypto !== 'undefined' && crypto.subtle) {\n const buf = new TextEncoder().encode(input);\n const digest = await crypto.subtle.digest('SHA-256', buf);\n return Array.from(new Uint8Array(digest))\n .slice(0, 16)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n }\n // Double-hash FNV-1a (32-bit chained) → 16 hex chars. Fallback Node/jsdom.\n let h1 = 0x811c9dc5;\n let h2 = 0xcbf29ce4;\n for (let i = 0; i < input.length; i++) {\n const c = input.charCodeAt(i);\n h1 ^= c;\n h1 = Math.imul(h1, 0x01000193);\n h2 ^= c + i;\n h2 = Math.imul(h2, 0x100000001b3 & 0xffffffff);\n }\n return (\n (h1 >>> 0).toString(16).padStart(8, '0') +\n (h2 >>> 0).toString(16).padStart(8, '0')\n );\n}\n\nfunction parseDim(svg: string, attr: 'width' | 'height'): number {\n const re = new RegExp(`<svg[^>]*\\\\s${attr}=\"(\\\\d+(?:\\\\.\\\\d+)?)`, 'i');\n const m = svg.match(re);\n if (m) return Math.max(1, Math.round(parseFloat(m[1])));\n const vb = svg.match(/viewBox=\"([\\d.\\s-]+)\"/i);\n if (vb) {\n const parts = vb[1].trim().split(/\\s+/).map(parseFloat);\n if (parts.length === 4) {\n return Math.max(1, Math.round(attr === 'width' ? parts[2] : parts[3]));\n }\n }\n return attr === 'width' ? DEFAULT_WIDTH : DEFAULT_HEIGHT;\n}\n\nexport function parseSvgDims(svg: string): { width: number; height: number } {\n return { width: parseDim(svg, 'width'), height: parseDim(svg, 'height') };\n}\n\nexport function svgToStampFile(svgString: string, fileId: string): StampFileResult {\n const { width, height } = parseSvgDims(svgString);\n const utf8 = unescape(encodeURIComponent(svgString));\n const base64 = typeof btoa !== 'undefined'\n ? btoa(utf8)\n : Buffer.from(utf8, 'binary').toString('base64');\n return {\n fileId,\n dataURL: `data:image/svg+xml;base64,${base64}`,\n mimeType: 'image/svg+xml',\n width,\n height,\n };\n}\n\n// Async variant cho insert path: hash SVG → fileId rồi gọi svgToStampFile.\n// Identical SVG content → identical fileId (Excalidraw addFiles dedupe).\nexport async function createStampFile(svgString: string): Promise<StampFileResult> {\n const fileId = await hashSvgToFileId(svgString);\n return svgToStampFile(svgString, fileId);\n}\n","import type { BaseStampCustomData } from '../shared/types';\n\nexport interface GeometryCustomData extends BaseStampCustomData {\n kind: 'geometry';\n version: 1;\n jsonState: string;\n}\n\nexport function isGeometryCustomData(data: unknown): data is GeometryCustomData {\n if (!data || typeof data !== 'object') return false;\n const d = data as Partial<GeometryCustomData>;\n return d.kind === 'geometry' && d.version === 1 && typeof d.jsonState === 'string';\n}\n","'use client';\nimport * as React from 'react';\n\nexport interface TabSpec<K extends string = string> {\n key: K;\n label: React.ReactNode;\n testId?: string;\n}\n\nexport interface LeftPanelShellProps<K extends string = string> {\n title: string;\n icon: React.ReactNode;\n onClose: () => void;\n isDark?: boolean;\n tabs?: readonly TabSpec<K>[];\n activeTab?: K;\n onTabChange?: (k: K) => void;\n /** data-testid trên <aside> root. Mặc định \"left-panel\". */\n testId?: string;\n children: React.ReactNode;\n}\n\nfunction CloseIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\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\nexport function LeftPanelShell<K extends string>(props: LeftPanelShellProps<K>): React.ReactElement {\n const { title, icon, onClose, isDark, tabs, activeTab, onTabChange, testId, children } = props;\n const showTabs = !!tabs && tabs.length >= 2;\n\n return (\n <aside\n role=\"complementary\"\n aria-label={title}\n data-testid={testId ?? '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 type=\"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\n {showTabs && (\n <div role=\"tablist\" className=\"flex gap-1 rounded-md bg-slate-100 p-0.5 mx-3 mt-3\">\n {tabs!.map((t) => (\n <TabPill\n key={t.key}\n active={t.key === activeTab}\n onClick={() => onTabChange?.(t.key)}\n testId={t.testId}\n >\n {t.label}\n </TabPill>\n ))}\n </div>\n )}\n\n <div\n {...(showTabs ? { role: 'tabpanel' } : {})}\n className=\"min-h-0 flex-1 overflow-y-auto p-3 space-y-3\"\n >\n {children}\n </div>\n </aside>\n );\n}\n\nexport function TabPill(props: {\n active: boolean;\n onClick: () => void;\n testId?: string;\n children: React.ReactNode;\n}): React.ReactElement {\n const { active, onClick, testId, children } = props;\n return (\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={active}\n onClick={onClick}\n data-testid={testId}\n className={[\n 'flex-1 rounded px-2 py-1 text-[11px] font-medium transition',\n active\n ? 'bg-white text-slate-900 shadow-sm ring-1 ring-slate-200'\n : 'text-slate-500 hover:text-slate-800',\n ].join(' ')}\n >\n {children}\n </button>\n );\n}\n\nexport function Section(props: { label: string; children: React.ReactNode }): React.ReactElement {\n return (\n <section>\n <h4 className=\"mb-1.5 text-[10px] font-semibold uppercase tracking-wider text-slate-500\">\n {props.label}\n </h4>\n {props.children}\n </section>\n );\n}\n","// src/core/scene/ui/kindMeta.ts\nexport interface KindUiMeta {\n displayName: string;\n icon: string;\n /** Fallback color khi obj.attrs.color không có. Phải khớp default ở renderer. */\n defaultColor: string;\n}\n\n// Default colors:\n// - Points: blue (#1e40af)\n// - Curves / shapes: dark slate (#0f172a)\n// - 3D planes / spheres: light blue (#60a5fa)\nconst POINT_COLOR = '#1e40af';\nconst CURVE_COLOR = '#0f172a';\nconst PLANE_COLOR = '#60a5fa';\n\nexport const KIND_UI_META: Readonly<Record<string, KindUiMeta>> = {\n // 2D\n point: { displayName: 'Điểm', icon: '·', defaultColor: POINT_COLOR },\n segment: { displayName: 'Đoạn thẳng', icon: '—', defaultColor: CURVE_COLOR },\n line: { displayName: 'Đường thẳng', icon: '/', defaultColor: CURVE_COLOR },\n ray: { displayName: 'Tia', icon: '→', defaultColor: CURVE_COLOR },\n vector: { displayName: 'Vector', icon: '↗', defaultColor: CURVE_COLOR },\n circle: { displayName: 'Đường tròn', icon: '○', defaultColor: CURVE_COLOR },\n polygon: { displayName: 'Đa giác', icon: '◇', defaultColor: CURVE_COLOR },\n intersection: { displayName: 'Giao điểm', icon: '✕', defaultColor: POINT_COLOR },\n angle: { displayName: 'Góc', icon: '∠', defaultColor: '#16a34a' },\n distance: { displayName: 'Khoảng cách', icon: '↔', defaultColor: '#dc2626' },\n // 3D\n point3d: { displayName: 'Điểm', icon: '·', defaultColor: POINT_COLOR },\n segment3d: { displayName: 'Đoạn thẳng', icon: '—', defaultColor: CURVE_COLOR },\n line3d: { displayName: 'Đường thẳng', icon: '/', defaultColor: CURVE_COLOR },\n ray3d: { displayName: 'Tia', icon: '→', defaultColor: CURVE_COLOR },\n vector3d: { displayName: 'Vector', icon: '↗', defaultColor: CURVE_COLOR },\n plane3d: { displayName: 'Mặt phẳng', icon: '▱', defaultColor: PLANE_COLOR },\n polygon3d: { displayName: 'Đa giác', icon: '◇', defaultColor: CURVE_COLOR },\n sphere3d: { displayName: 'Mặt cầu', icon: '◯', defaultColor: PLANE_COLOR },\n polyhedron3d: { displayName: 'Đa diện', icon: '⬢', defaultColor: PLANE_COLOR },\n cylinder3d: { displayName: 'Hình trụ', icon: '⌭', defaultColor: PLANE_COLOR },\n cone3d: { displayName: 'Hình nón', icon: '▲', defaultColor: PLANE_COLOR },\n // Graph 2D\n function2d: { displayName: 'Hàm số', icon: 'ƒ', defaultColor: CURVE_COLOR },\n parameter: { displayName: 'Tham số', icon: 'α', defaultColor: '#7c3aed' },\n pointOnCurve: { displayName: 'Điểm trên đồ thị', icon: '◉', defaultColor: POINT_COLOR },\n tangent2d: { displayName: 'Tiếp tuyến', icon: '╱', defaultColor: CURVE_COLOR },\n extremum2d: { displayName: 'Cực trị', icon: '∧', defaultColor: POINT_COLOR },\n root2d: { displayName: 'Nghiệm', icon: '0', defaultColor: POINT_COLOR },\n slope2d: { displayName: 'Hệ số góc', icon: '△', defaultColor: '#dc2626' },\n};\n\nexport function getKindUiMeta(kind: string): KindUiMeta {\n return KIND_UI_META[kind] ?? { displayName: kind, icon: '?', defaultColor: '#888888' };\n}\n","'use client';\nimport * as React from 'react';\n\nexport interface ObjectRowMenuProps {\n locked: boolean;\n onToggleLocked: () => void;\n onRename: () => void;\n onChangeColor: () => void;\n onDelete: () => void;\n}\n\nexport function ObjectRowMenu(props: ObjectRowMenuProps): React.ReactElement {\n const { locked, onToggleLocked, onRename, onChangeColor, onDelete } = props;\n const [open, setOpen] = React.useState(false);\n\n return (\n <div className=\"relative inline-block\">\n <button\n type=\"button\"\n aria-label=\"Row menu\"\n onClick={(e) => { e.stopPropagation(); setOpen((v) => !v); }}\n className=\"rounded px-1.5 text-black\"\n >\n ⋮\n </button>\n {open ? (\n <div\n role=\"menu\"\n className=\"absolute right-0 z-10 mt-1 w-40 rounded-md border border-zinc-200 bg-white py-1 text-xs shadow-lg dark:border-zinc-700 dark:bg-zinc-900\"\n onClick={(e) => e.stopPropagation()}\n >\n <MenuItem onClick={() => { setOpen(false); onRename(); }}>Đổi tên</MenuItem>\n <MenuItem onClick={() => { setOpen(false); onChangeColor(); }}>Đổi màu</MenuItem>\n <MenuItem onClick={() => { setOpen(false); onToggleLocked(); }}>\n {locked ? 'Mở khoá' : 'Khoá'}\n </MenuItem>\n <MenuItem\n onClick={() => { setOpen(false); onDelete(); }}\n className=\"text-red-600 dark:text-red-400\"\n >\n Xoá\n </MenuItem>\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction MenuItem({\n children,\n onClick,\n className,\n}: React.PropsWithChildren<{ onClick: () => void; className?: string }>) {\n return (\n <button\n type=\"button\"\n role=\"menuitem\"\n onClick={onClick}\n className={`block w-full px-3 py-1 text-left text-black ${className ?? ''}`}\n >\n {children}\n </button>\n );\n}\n","'use client';\nimport * as React from 'react';\nimport type { SceneObject, State } from '../types';\nimport { getKind } from '../registry';\nimport { getKindUiMeta } from './kindMeta';\nimport { ObjectRowMenu } from './ObjectRowMenu';\n\nexport interface ObjectRowProps {\n obj: SceneObject;\n state: State;\n selected: boolean;\n onSelect: (id: string) => void;\n onToggleVisible: (id: string) => void;\n onToggleLocked: (id: string) => void;\n onRename: (id: string) => void;\n onChangeColor: (id: string) => void;\n onDelete: (id: string) => void;\n}\n\nfunction formatMeasure(items: { label: string; value: number }[]): string {\n return items.map((it) => `${it.label} = ${it.value.toFixed(2)}`).join(', ');\n}\n\nexport function ObjectRow(props: ObjectRowProps): React.ReactElement {\n const { obj, state, selected, onSelect, onToggleVisible, onToggleLocked, onRename, onChangeColor, onDelete } = props;\n\n const meta = getKindUiMeta(obj.kind);\n\n let title = '';\n try {\n title = getKind(obj.kind).describe(obj, state);\n } catch {\n title = `${meta.displayName} ${obj.label}`;\n }\n\n let measureText: string | null = null;\n if (selected) {\n try {\n const m = getKind(obj.kind).measure?.(obj, state);\n if (m && m.length > 0) measureText = formatMeasure(m);\n } catch {\n measureText = null;\n }\n }\n\n const color = (obj.attrs as { color?: string }).color ?? meta.defaultColor;\n\n return (\n <li\n data-testid={`object-row-${obj.id}`}\n aria-selected={selected}\n onClick={() => onSelect(obj.id)}\n className={\n 'flex flex-col border-b border-zinc-100 cursor-pointer dark:border-zinc-800 ' +\n (selected ? 'bg-slate-200' : '')\n }\n >\n <div className=\"flex items-center gap-2 px-3 py-1.5 text-xs\">\n <button\n type=\"button\"\n aria-label=\"Toggle visibility\"\n aria-pressed={!obj.visible}\n onClick={(e) => { e.stopPropagation(); onToggleVisible(obj.id); }}\n className=\"h-4 w-4 shrink-0 rounded-full border-2 transition\"\n style={{\n backgroundColor: obj.visible ? color : 'transparent',\n borderColor: color,\n }}\n />\n <span className=\"flex-1 truncate text-black\">\n {title}\n </span>\n <ObjectRowMenu\n locked={obj.locked}\n onToggleLocked={() => onToggleLocked(obj.id)}\n onRename={() => onRename(obj.id)}\n onChangeColor={() => onChangeColor(obj.id)}\n onDelete={() => onDelete(obj.id)}\n />\n </div>\n {selected && measureText && (\n <div\n data-testid={`object-row-detail-${obj.id}`}\n className=\"pl-9 pr-3 pb-1.5 text-[11px] text-black\"\n >\n {measureText}\n </div>\n )}\n </li>\n );\n}\n","'use client';\nimport * as React from 'react';\nimport type { Store } from '../store';\nimport type { SceneObject } from '../types';\nimport { listObjects } from '../selectors';\nimport { ObjectRow } from './ObjectRow';\n\nexport interface ObjectListPanelProps {\n store: Store;\n selectedId?: string;\n /**\n * Called when user clicks a row. Receives the row id, or `null` when the\n * user clicks the already-selected row (toggle off — request to deselect).\n * Parent should treat `null` as \"clear selection\".\n */\n onSelect?: (id: string | null) => void;\n /**\n * Optional per-kind row renderer. Called with the SceneObject and default props\n * (selected, onClick). Return a ReactNode to override the default ObjectRow.\n * Return null/undefined to fall back to the default ObjectRow.\n */\n renderRow?: (\n obj: SceneObject,\n defaults: { selected: boolean; onClick: () => void },\n ) => React.ReactNode;\n}\n\nexport function ObjectListPanel(props: ObjectListPanelProps): React.ReactElement {\n const { store, selectedId, onSelect, renderRow } = props;\n // useSyncExternalStore expects subscribe to receive () => void callback,\n // but Store.subscribe takes (next, prev, action) => void. Wrap to adapt.\n const subscribe = React.useCallback(\n (cb: () => void) => store.subscribe(() => cb()),\n [store],\n );\n const state = React.useSyncExternalStore(subscribe, store.getState, store.getState);\n const objects = listObjects(state);\n\n function handleSelect(id: string) {\n // Toggle: click vào row đang selected → deselect (collapse detail + tắt highlight).\n onSelect?.(id === selectedId ? null : id);\n }\n\n function handleToggleVisible(id: string) {\n const obj = state.objects[id];\n if (!obj) return;\n store.dispatch({ type: 'UPDATE', payload: { id, patch: { visible: !obj.visible } } });\n }\n\n function handleToggleLocked(id: string) {\n const obj = state.objects[id];\n if (!obj) return;\n store.dispatch({ type: 'UPDATE', payload: { id, patch: { locked: !obj.locked } } });\n }\n\n function handleDelete(id: string) {\n store.dispatch({ type: 'DELETE', payload: { id } });\n }\n\n function noop() { /* rename + change color stubbed for Phase 3 */ }\n\n return (\n <ul\n data-testid=\"object-list-panel\"\n className=\"flex max-h-[calc(100vh-200px)] flex-col overflow-y-auto\"\n >\n {objects.length === 0 ? (\n <li className=\"px-3 py-4 text-center text-xs text-zinc-500\">Chưa có đối tượng nào</li>\n ) : (\n objects.map((obj) => {\n const selected = obj.id === selectedId;\n const onClick = () => handleSelect(obj.id);\n if (renderRow) {\n const custom = renderRow(obj, { selected, onClick });\n if (custom != null) {\n return <React.Fragment key={obj.id}>{custom}</React.Fragment>;\n }\n }\n return (\n <ObjectRow\n key={obj.id}\n obj={obj}\n state={state}\n selected={selected}\n onSelect={handleSelect}\n onToggleVisible={handleToggleVisible}\n onToggleLocked={handleToggleLocked}\n onRename={noop}\n onChangeColor={noop}\n onDelete={handleDelete}\n />\n );\n })\n )}\n </ul>\n );\n}\n","'use client';\n// src/stamps/shared/StampLeftPanel/AxisGridSection.tsx\n//\n// Section \"Bố cục\" / \"Góc nhìn\": 2 checkbox axis/grid + (optional) undo/redo\n// button ở mép phải. Render khi có ít nhất 1 trong (view, history).\n// Skip toàn bộ section khi cả 2 đều undefined.\n\nimport React from 'react';\nimport { Section } from '../../../core/scene/ui/LeftPanelShell';\nimport type {\n StampLeftPanelHistoryProps,\n StampLeftPanelViewProps,\n} from './types';\n\nexport interface AxisGridSectionProps {\n view?: StampLeftPanelViewProps;\n history?: StampLeftPanelHistoryProps;\n}\n\nfunction UndoIcon(): React.ReactElement {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M3 10 L8 5 L8 8 L15 8 A5 5 0 0 1 20 13 L20 16\" />\n <path d=\"M3 10 L8 15 L8 12\" />\n </svg>\n );\n}\n\nfunction RedoIcon(): React.ReactElement {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M21 10 L16 5 L16 8 L9 8 A5 5 0 0 0 4 13 L4 16\" />\n <path d=\"M21 10 L16 15 L16 12\" />\n </svg>\n );\n}\n\nexport function AxisGridSection(props: AxisGridSectionProps): React.ReactElement | null {\n const { view, history } = props;\n if (!view && !history) return null;\n\n const sectionLabel = view?.sectionLabel ?? 'Bố cục';\n const axisLabel = view?.axisLabel ?? 'Trục';\n const gridLabel = view?.gridLabel ?? 'Lưới';\n\n return (\n <Section label={sectionLabel}>\n <div className=\"flex items-center gap-3 text-[11px] text-slate-700\">\n {view && (\n <>\n <label className=\"inline-flex select-none items-center gap-1.5\">\n <input\n type=\"checkbox\"\n checked={view.showAxis}\n onChange={(e) => view.onShowAxisChange(e.target.checked)}\n data-testid=\"toggle-axis\"\n />\n {axisLabel}\n </label>\n <label className=\"inline-flex select-none items-center gap-1.5\">\n <input\n type=\"checkbox\"\n checked={view.showGrid}\n onChange={(e) => view.onShowGridChange(e.target.checked)}\n data-testid=\"toggle-grid\"\n />\n {gridLabel}\n </label>\n </>\n )}\n {history && (\n <div className=\"ml-auto flex items-center gap-0.5\">\n <button\n type=\"button\"\n onClick={history.onUndo}\n disabled={!history.canUndo}\n title=\"Hoàn tác (Ctrl/Cmd+Z)\"\n aria-label=\"Hoàn tác\"\n data-testid=\"undo-btn\"\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 <button\n type=\"button\"\n onClick={history.onRedo}\n disabled={!history.canRedo}\n title=\"Làm lại (Ctrl/Cmd+Shift+Z)\"\n aria-label=\"Làm lại\"\n data-testid=\"redo-btn\"\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 <RedoIcon />\n </button>\n </div>\n )}\n </div>\n </Section>\n );\n}\n","// src/stamps/shared/StampLeftPanel/types.ts\n//\n// Shared types cho StampLeftPanel template. Dùng generic TKey/TGroup để\n// preserve type safety tại call site (host của từng stamp truyền union type\n// riêng); internal cài theo string là OK.\n\nimport type { ReactNode } from 'react';\nimport type { Store } from '../../../core/scene/store';\nimport type { SceneObject } from '../../../core/scene/types';\n\nexport const TOOLTIP_DELAY_MS = 400;\nexport type HoverState = { label: string; hint?: string; x: number; y: number } | null;\n\n/** Tool descriptor unified cho 3 stamp editor. */\nexport interface StampToolDef<TKey extends string = string, TGroup extends string = string> {\n key: TKey;\n label: string;\n hint?: string;\n icon: ReactNode;\n group: TGroup;\n shortcut?: string;\n}\n\nexport interface StampLeftPanelTabs {\n /** Label tab \"Đối tượng\" (default \"📐 Đối tượng\"). */\n objectsLabel?: ReactNode;\n /** Label tab \"Công cụ\" (default \"🧰 Công cụ\"). */\n toolsLabel?: ReactNode;\n}\n\nexport interface StampLeftPanelViewProps {\n /** Section header label, default \"Bố cục\". */\n sectionLabel?: string;\n /** Checkbox label cho axis, default \"Trục\". */\n axisLabel?: string;\n /** Checkbox label cho grid, default \"Lưới\". */\n gridLabel?: string;\n showAxis: boolean;\n showGrid: boolean;\n onShowAxisChange: (b: boolean) => void;\n onShowGridChange: (b: boolean) => void;\n}\n\nexport interface StampLeftPanelHistoryProps {\n onUndo: () => void;\n canUndo: boolean;\n onRedo: () => void;\n canRedo: boolean;\n}\n\nexport interface StampLeftPanelChordProps<TGroup extends string = string> {\n /** Group đang được focus sau khi user bấm letter. null = không active. */\n activeGroup: TGroup | null;\n /** Mapping group → letter hint (vd \"P\" cho group \"point\"). */\n letterForGroup: (g: TGroup) => string;\n}\n\nexport interface StampLeftPanelObjectsProps {\n store: Store;\n selectedObjectId?: string;\n onObjectSelect?: (id: string | null) => void;\n /** Custom row render (vd graph-2d cần FunctionRow/ParameterRow). Trả null để fallback default ObjectRow. */\n renderRow?: (\n obj: SceneObject,\n defaults: { selected: boolean; onClick: () => void },\n ) => ReactNode | null;\n /** Optional buttons phía trên ObjectListPanel (vd graph-2d \"+Hàm\" \"+Tham số\"). */\n addButtons?: ReadonlyArray<{ label: string; testId?: string; onClick: () => void }>;\n}\n\nexport interface StampLeftPanelProps<\n TKey extends string = string,\n TGroup extends string = string,\n> {\n // Header\n title: string;\n icon: ReactNode;\n onClose: () => void;\n isDark?: boolean;\n /** data-testid trên <aside> root. Default \"stamp-left-panel\". */\n testId?: string;\n\n // Tools (required)\n tools: ReadonlyArray<StampToolDef<TKey, TGroup>>;\n groupOrder: ReadonlyArray<TGroup>;\n groupLabels: Record<TGroup, string>;\n activeTool: TKey;\n onToolChange: (k: TKey) => void;\n\n // Optional sections\n view?: StampLeftPanelViewProps;\n history?: StampLeftPanelHistoryProps;\n chord?: StampLeftPanelChordProps<TGroup>;\n objects?: StampLeftPanelObjectsProps;\n tabs?: StampLeftPanelTabs;\n\n // Mobile\n isMobile?: boolean;\n drawerOpen?: boolean;\n onDrawerClose?: () => void;\n}\n","// src/stamps/shared/StampLeftPanel/useToolHoverTooltip.ts\n//\n// Generic hover tooltip hook. Trả về { hover, portalReady, showHover, hideHover }\n// để consumer render tooltip qua createPortal. Delay 400ms tránh flash.\n//\n// Generic theo StampToolDef → 3 stamp dùng chung. Moved từ\n// geometry-2d/editor/LeftPanel/useToolHoverTooltip.ts (Phase 1.2).\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { TOOLTIP_DELAY_MS, type HoverState, type StampToolDef } from './types';\n\nexport function 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: StampToolDef) => {\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","'use client';\n// src/stamps/shared/StampLeftPanel/ToolGrid.tsx\n//\n// Tool button grid chord-aware. Render từng group thành section, mỗi section\n// có 4-col grid icon button. Khi chord.activeGroup set:\n// - section đó được highlight (ring emerald + bg)\n// - các section khác dimmed (opacity-55)\n// - mỗi button trong active group có number badge 1-9\n//\n// Port từ geometry-2d/editor/LeftPanel/Desktop.tsx:104-176 (baseline rich nhất).\n\nimport React, { useMemo } from 'react';\nimport type {\n StampLeftPanelChordProps,\n StampToolDef,\n} from './types';\nimport { useToolHoverTooltip } from './useToolHoverTooltip';\nimport { createPortal } from 'react-dom';\n\nexport interface ToolGridProps<TKey extends string, TGroup extends string> {\n tools: ReadonlyArray<StampToolDef<TKey, TGroup>>;\n groupOrder: ReadonlyArray<TGroup>;\n groupLabels: Record<TGroup, string>;\n activeTool: TKey;\n onToolChange: (k: TKey) => void;\n chord?: StampLeftPanelChordProps<TGroup>;\n}\n\nexport function ToolGrid<TKey extends string, TGroup extends string>(\n props: ToolGridProps<TKey, TGroup>,\n): React.ReactElement {\n const { tools, groupOrder, groupLabels, activeTool, onToolChange, chord } = props;\n const { hover, portalReady, showHover, hideHover } = useToolHoverTooltip();\n\n const grouped = useMemo(() => {\n const acc: Partial<Record<TGroup, StampToolDef<TKey, TGroup>[]>> = {};\n for (const t of tools) {\n (acc[t.group] ??= []).push(t);\n }\n return acc;\n }, [tools]);\n\n const groupKeys = useMemo(\n () => groupOrder.filter((g) => grouped[g]),\n [grouped, groupOrder],\n );\n\n const activeGroupTools = chord?.activeGroup ? grouped[chord.activeGroup] ?? null : null;\n\n return (\n <>\n {groupKeys.map((group) => {\n const isChordActive = chord?.activeGroup === group;\n const dimmed = chord?.activeGroup != 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 ? 'bg-emerald-50 ring-1 ring-emerald-400 p-1' : '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>{groupLabels[group]}</span>\n {chord && (\n <span\n data-testid={`chord-letter-${group}`}\n className={[\n 'font-mono text-[10px] leading-none transition',\n isChordActive ? 'text-emerald-700 font-bold' : 'text-slate-400',\n ].join(' ')}\n >\n {chord.letterForGroup(group)}\n </span>\n )}\n </h4>\n <div className=\"grid grid-cols-4 gap-1\">\n {grouped[group]!.map((t, i) => {\n const active = activeTool === t.key;\n return (\n <button\n key={t.key}\n type=\"button\"\n aria-label={t.label}\n aria-pressed={active}\n data-tool={t.key}\n title={t.label + (t.shortcut ? ` (${t.shortcut})` : '')}\n onClick={() => onToolChange(t.key)}\n onMouseEnter={(e) => showHover(e.currentTarget, t)}\n onMouseLeave={hideHover}\n onFocus={(e) => showHover(e.currentTarget, t)}\n onBlur={hideHover}\n className={[\n 'relative flex h-10 items-center justify-center rounded-md transition',\n active\n ? 'bg-emerald-600 text-white shadow-sm'\n : 'text-slate-700 hover:bg-slate-100 hover:text-slate-900',\n ].join(' ')}\n >\n {t.icon}\n {chord && (\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 active\n ? 'text-white/70'\n : isChordActive\n ? 'text-emerald-700 font-bold'\n : 'text-slate-400',\n ].join(' ')}\n >\n {i + 1}\n </span>\n )}\n </button>\n );\n })}\n </div>\n </section>\n );\n })}\n\n {chord?.activeGroup && activeGroupTools && (\n <div\n data-testid=\"chord-hint\"\n className=\"mt-1 rounded border border-emerald-200 bg-emerald-50/60 px-2 py-1 text-[11px] leading-snug text-slate-600\"\n >\n <span className=\"font-mono font-semibold text-emerald-700\">\n {chord.letterForGroup(chord.activeGroup)}\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-emerald-700\">{i + 1}</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\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","'use client';\n// src/stamps/shared/StampLeftPanel/Desktop.tsx\n//\n// Desktop layout cho StampLeftPanel. Render:\n// 1. LeftPanelShell chrome + tabs (chỉ render tablist khi có objects)\n// 2. Tab \"tools\": <AxisGridSection> + <ToolGrid> chord-aware\n// 3. Tab \"objects\": optional add buttons + <ObjectListPanel> với custom renderRow\n\nimport React, { useEffect, useState } from 'react';\nimport { LeftPanelShell } from '../../../core/scene/ui/LeftPanelShell';\nimport { ObjectListPanel } from '../../../core/scene/ui/ObjectListPanel';\nimport { AxisGridSection } from './AxisGridSection';\nimport { ToolGrid } from './ToolGrid';\nimport type { StampLeftPanelProps } from './types';\n\nexport function StampLeftPanelDesktop<TKey extends string, TGroup extends string>(\n props: StampLeftPanelProps<TKey, TGroup>,\n): React.ReactElement {\n const {\n title,\n icon,\n onClose,\n isDark,\n testId,\n tools,\n groupOrder,\n groupLabels,\n activeTool,\n onToolChange,\n view,\n history,\n chord,\n objects,\n tabs,\n } = props;\n\n const [tab, setTab] = useState<'tools' | 'objects'>('tools');\n const hasObjects = !!objects;\n\n useEffect(() => {\n if (!hasObjects && tab === 'objects') setTab('tools');\n }, [hasObjects, tab]);\n\n const tabSpecs = hasObjects\n ? [\n { key: 'tools' as const, label: tabs?.toolsLabel ?? '🧰 Công cụ', testId: 'tab-tools' },\n { key: 'objects' as const, label: tabs?.objectsLabel ?? '📐 Đối tượng', testId: 'tab-objects' },\n ]\n : undefined;\n\n return (\n <LeftPanelShell\n title={title}\n icon={icon}\n onClose={onClose}\n isDark={isDark}\n testId={testId ?? 'stamp-left-panel'}\n tabs={tabSpecs}\n activeTab={hasObjects ? tab : undefined}\n onTabChange={hasObjects ? setTab : undefined}\n >\n {(!hasObjects || tab === 'tools') ? (\n <>\n <AxisGridSection view={view} history={history} />\n <ToolGrid\n tools={tools}\n groupOrder={groupOrder}\n groupLabels={groupLabels}\n activeTool={activeTool}\n onToolChange={onToolChange}\n chord={chord}\n />\n </>\n ) : (\n <section data-testid=\"objects-panel\" className=\"flex flex-col gap-2\">\n {objects!.addButtons && objects!.addButtons.length > 0 && (\n <div className=\"flex gap-1\">\n {objects!.addButtons.map((b) => (\n <button\n key={b.label}\n type=\"button\"\n data-testid={b.testId}\n onClick={b.onClick}\n className=\"flex-1 rounded border border-slate-300 bg-slate-50 px-2 py-1 text-[11px] font-medium text-slate-700 transition hover:bg-slate-100\"\n >\n {b.label}\n </button>\n ))}\n </div>\n )}\n <ObjectListPanel\n store={objects!.store}\n selectedId={objects!.selectedObjectId}\n onSelect={objects!.onObjectSelect}\n renderRow={objects!.renderRow}\n />\n </section>\n )}\n </LeftPanelShell>\n );\n}\n","'use client';\n\nimport React from 'react';\n\n/**\n * Generic mobile tool drawer dùng chung cho geometry-2d + geometry-3d.\n *\n * Layout:\n * - Header: icon + title + close\n * - Sticky toolbar: chip switches (Trục/Lưới) + icon-actions (Reset, Undo)\n * - Body: section dọc, mỗi section là 1 nhóm tools, grid 3-col card có nhãn\n *\n * Style: soft-modern, emerald accent, khớp các class trong shared/stamp.css.\n */\n\nexport interface MobileChip {\n /** Label hiển thị + aria-label */\n label: string;\n icon: React.ReactNode;\n pressed: boolean;\n onToggle: (next: boolean) => void;\n /** data-testid optional (để test cũ chạy được) */\n testId?: string;\n}\n\nexport interface MobileActionButton {\n label: string;\n icon: React.ReactNode;\n onClick: () => void;\n disabled?: boolean;\n title?: string;\n /** data-testid optional (cho phép test target button cụ thể) */\n testId?: string;\n}\n\nexport interface MobileTool<TKey extends string> {\n key: TKey;\n label: string;\n icon: React.ReactNode;\n}\n\nexport interface MobileToolGroup<TKey extends string, TGroup extends string> {\n group: TGroup;\n groupLabel: string;\n tools: MobileTool<TKey>[];\n}\n\ninterface MobileToolDrawerProps<TKey extends string, TGroup extends string> {\n title: string;\n headerIcon: React.ReactNode;\n chips: MobileChip[];\n actions: MobileActionButton[];\n groups: MobileToolGroup<TKey, TGroup>[];\n activeTool: TKey;\n onToolSelect: (key: TKey) => void;\n drawerOpen: boolean;\n onDrawerClose: () => void;\n isDark?: boolean;\n /** data-testid trên <aside> — giữ để test cũ tìm được panel */\n testId?: string;\n /** Optional: thêm tab \"Đối tượng\" trong drawer body. */\n objectsTab?: {\n label: React.ReactNode;\n render: () => React.ReactNode;\n };\n}\n\nexport function MobileToolDrawer<TKey extends string, TGroup extends string>({\n title,\n headerIcon,\n chips,\n actions,\n groups,\n activeTool,\n onToolSelect,\n drawerOpen,\n onDrawerClose,\n isDark,\n testId,\n objectsTab,\n}: MobileToolDrawerProps<TKey, TGroup>) {\n const [mobileTab, setMobileTab] = React.useState<'tools' | 'objects'>('tools');\n const prevOpenRef = React.useRef(drawerOpen);\n React.useEffect(() => {\n if (!prevOpenRef.current && drawerOpen) setMobileTab('tools');\n prevOpenRef.current = drawerOpen;\n }, [drawerOpen]);\n\n return (\n <>\n {drawerOpen && (\n <div\n className=\"stamp-drawer-backdrop\"\n onPointerDown={onDrawerClose}\n aria-hidden=\"true\"\n />\n )}\n <aside\n role=\"complementary\"\n aria-label={title}\n aria-hidden={!drawerOpen ? 'true' : undefined}\n data-testid={testId}\n data-stamp-area=\"true\"\n data-mobile-drawer=\"true\"\n data-geo-mobile=\"true\"\n data-drawer-state={drawerOpen ? 'open' : 'closed'}\n className={[\n isDark ? 'theme--dark ' : '',\n 'stamp-drawer-mobile flex flex-col border-r border-slate-200 bg-white shadow-md',\n ].join('')}\n >\n {/* Header */}\n <header className=\"flex items-center justify-between border-b border-slate-200 bg-gradient-to-r from-slate-50 to-white px-4 py-3\">\n <h3 className=\"flex items-center gap-2 text-base font-semibold text-slate-800\">\n <span className=\"inline-flex h-7 w-7 items-center justify-center rounded-lg bg-emerald-50 text-emerald-700\">\n {headerIcon}\n </span>\n {title}\n </h3>\n <button\n type=\"button\"\n onClick={onDrawerClose}\n aria-label=\"Đóng ngăn công cụ\"\n className=\"inline-flex h-9 w-9 items-center justify-center rounded-full text-slate-500 transition hover:bg-slate-100 hover:text-slate-800\"\n >\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 </button>\n </header>\n\n {/* Sticky toolbar: chips + actions */}\n <div className=\"sticky top-0 z-10 flex items-center gap-2 border-b border-slate-200 bg-white/95 px-3 py-2 backdrop-blur\">\n {chips.map((c) => (\n <button\n key={c.label}\n type=\"button\"\n role=\"switch\"\n aria-pressed={c.pressed}\n aria-label={c.label}\n data-testid={c.testId}\n onClick={() => c.onToggle(!c.pressed)}\n className=\"geo-mobile-chip\"\n >\n {c.icon}\n {c.label}\n </button>\n ))}\n {actions.length > 0 && <div className=\"ml-auto flex items-center gap-1\">\n {actions.map((a) => (\n <button\n key={a.label}\n type=\"button\"\n onClick={a.onClick}\n disabled={a.disabled}\n aria-label={a.label}\n title={a.title ?? a.label}\n data-testid={a.testId}\n className=\"inline-flex h-9 w-9 items-center justify-center rounded-full 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 {a.icon}\n </button>\n ))}\n </div>}\n </div>\n\n {/* Tab row (chỉ render khi objectsTab được cung cấp) */}\n {objectsTab && (\n <div role=\"tablist\" className=\"flex gap-1 rounded-md bg-slate-100 p-0.5 mx-3 mt-2\">\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={mobileTab === 'tools'}\n onClick={() => setMobileTab('tools')}\n className={[\n 'flex-1 rounded px-2 py-1 text-[11px] font-medium transition',\n mobileTab === 'tools'\n ? 'bg-white text-slate-900 shadow-sm ring-1 ring-slate-200'\n : 'text-slate-500 hover:text-slate-800',\n ].join(' ')}\n >\n 🧰 Công cụ\n </button>\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={mobileTab === 'objects'}\n onClick={() => setMobileTab('objects')}\n className={[\n 'flex-1 rounded px-2 py-1 text-[11px] font-medium transition',\n mobileTab === 'objects'\n ? 'bg-white text-slate-900 shadow-sm ring-1 ring-slate-200'\n : 'text-slate-500 hover:text-slate-800',\n ].join(' ')}\n >\n {objectsTab.label}\n </button>\n </div>\n )}\n\n {/* Body: groups xếp dọc */}\n <div\n className=\"min-h-0 flex-1 overflow-y-auto\"\n style={{ paddingBottom: 'calc(0.75rem + env(safe-area-inset-bottom))' }}\n >\n {objectsTab && mobileTab === 'objects' ? (\n <div className=\"px-3 pt-3\">{objectsTab.render()}</div>\n ) : (\n groups.map((g) => (\n <section key={g.group} className=\"px-3 pt-3 pb-1\">\n <h4 className=\"mb-2 flex items-center gap-2 text-[11px] font-semibold uppercase tracking-wider text-slate-500\">\n <span className=\"h-1 w-1 rounded-full bg-emerald-500\" />\n {g.groupLabel}\n </h4>\n <div className=\"grid grid-cols-3 gap-2\">\n {g.tools.map((t) => {\n const active = activeTool === t.key;\n return (\n <button\n key={t.key}\n type=\"button\"\n aria-label={t.label}\n aria-pressed={active}\n data-tool={t.key}\n onClick={() => {\n onToolSelect(t.key);\n onDrawerClose();\n }}\n className={[\n 'flex flex-col items-center justify-center gap-1.5 rounded-2xl px-2 py-3 transition active:scale-95',\n active\n ? 'geo-mobile-tool-active'\n : 'bg-slate-50 text-slate-700 hover:bg-slate-100',\n ].join(' ')}\n >\n <span className=\"flex h-8 w-8 items-center justify-center\">{t.icon}</span>\n <span className=\"text-center text-[11px] font-medium leading-tight line-clamp-2\">\n {t.label}\n </span>\n </button>\n );\n })}\n </div>\n </section>\n ))\n )}\n </div>\n </aside>\n </>\n );\n}\n","'use client';\n// src/stamps/shared/StampLeftPanel/Mobile.tsx\n//\n// Mobile layout: wrap shared MobileToolDrawer với mapping:\n// chips = axis/grid (from view)\n// actions = undo/redo (from history)\n// groups = tools grouped by group\n// objects = objectsTab (objects.store + addButtons + custom renderRow)\n\nimport React, { useMemo } from 'react';\nimport { MobileToolDrawer, type MobileToolGroup } from '../MobileToolDrawer';\nimport { ObjectListPanel } from '../../../core/scene/ui/ObjectListPanel';\nimport type { StampLeftPanelProps } from './types';\n\nfunction AxisIcon(): React.ReactElement {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <line x1=\"4\" y1=\"20\" x2=\"20\" y2=\"20\" />\n <line x1=\"4\" y1=\"20\" x2=\"4\" y2=\"4\" />\n <polyline points=\"2 6 4 4 6 6\" />\n <polyline points=\"18 18 20 20 18 22\" />\n </svg>\n );\n}\n\nfunction GridIcon(): React.ReactElement {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"1\" />\n <line x1=\"4\" y1=\"10\" x2=\"20\" y2=\"10\" />\n <line x1=\"4\" y1=\"16\" x2=\"20\" y2=\"16\" />\n <line x1=\"10\" y1=\"4\" x2=\"10\" y2=\"20\" />\n <line x1=\"16\" y1=\"4\" x2=\"16\" y2=\"20\" />\n </svg>\n );\n}\n\nfunction UndoIcon(): React.ReactElement {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M3 10 L8 5 L8 8 L15 8 A5 5 0 0 1 20 13 L20 16\" />\n <path d=\"M3 10 L8 15 L8 12\" />\n </svg>\n );\n}\n\nfunction RedoIcon(): React.ReactElement {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M21 10 L16 5 L16 8 L9 8 A5 5 0 0 0 4 13 L4 16\" />\n <path d=\"M21 10 L16 15 L16 12\" />\n </svg>\n );\n}\n\nexport function StampLeftPanelMobile<TKey extends string, TGroup extends string>(\n props: StampLeftPanelProps<TKey, TGroup>,\n): React.ReactElement {\n const {\n title,\n icon,\n isDark,\n testId,\n tools,\n groupOrder,\n groupLabels,\n activeTool,\n onToolChange,\n view,\n history,\n objects,\n tabs,\n drawerOpen,\n onDrawerClose,\n } = props;\n\n const groups = useMemo<MobileToolGroup<TKey, TGroup>[]>(() => {\n const acc = new Map<TGroup, typeof tools[number][]>();\n for (const t of tools) {\n if (!acc.has(t.group)) acc.set(t.group, []);\n acc.get(t.group)!.push(t);\n }\n // Preserve groupOrder\n return groupOrder\n .filter((g) => acc.has(g))\n .map((group) => ({\n group,\n groupLabel: groupLabels[group],\n tools: acc.get(group)!.map((t) => ({ key: t.key, label: t.label, icon: t.icon })),\n }));\n }, [tools, groupOrder, groupLabels]);\n\n const chips = view\n ? [\n {\n label: view.axisLabel ?? 'Trục',\n icon: <AxisIcon />,\n pressed: view.showAxis,\n onToggle: view.onShowAxisChange,\n testId: 'toggle-axis',\n },\n {\n label: view.gridLabel ?? 'Lưới',\n icon: <GridIcon />,\n pressed: view.showGrid,\n onToggle: view.onShowGridChange,\n testId: 'toggle-grid',\n },\n ]\n : [];\n\n const actions = history\n ? [\n {\n label: 'Hoàn tác',\n title: 'Hoàn tác (Ctrl/Cmd+Z)',\n icon: <UndoIcon />,\n onClick: history.onUndo,\n disabled: !history.canUndo,\n testId: 'undo-btn',\n },\n {\n label: 'Làm lại',\n title: 'Làm lại (Ctrl/Cmd+Shift+Z)',\n icon: <RedoIcon />,\n onClick: history.onRedo,\n disabled: !history.canRedo,\n testId: 'redo-btn',\n },\n ]\n : [];\n\n return (\n <MobileToolDrawer\n title={title}\n headerIcon={icon}\n testId={testId ?? 'stamp-left-panel'}\n isDark={isDark}\n drawerOpen={!!drawerOpen}\n onDrawerClose={() => onDrawerClose?.()}\n chips={chips}\n actions={actions}\n groups={groups}\n activeTool={activeTool}\n onToolSelect={onToolChange}\n objectsTab={\n objects\n ? {\n label: tabs?.objectsLabel ?? '📐 Đối tượng',\n render: () => (\n <div className=\"flex flex-col gap-2 px-3\">\n {objects.addButtons && objects.addButtons.length > 0 && (\n <div className=\"flex gap-1 pt-3\">\n {objects.addButtons.map((b) => (\n <button\n key={b.label}\n type=\"button\"\n data-testid={b.testId}\n onClick={b.onClick}\n className=\"flex-1 rounded border border-slate-300 bg-slate-50 px-2 py-1 text-[11px] font-medium text-slate-700 transition hover:bg-slate-100\"\n >\n {b.label}\n </button>\n ))}\n </div>\n )}\n <ObjectListPanel\n store={objects.store}\n selectedId={objects.selectedObjectId}\n onSelect={objects.onObjectSelect}\n renderRow={objects.renderRow}\n />\n </div>\n ),\n }\n : undefined\n }\n />\n );\n}\n","'use client';\n// src/stamps/shared/StampLeftPanel/index.tsx\n//\n// Public API. Dispatch isMobile → Desktop hoặc Mobile.\n//\n// Usage:\n//\n// <StampLeftPanel\n// title=\"Hình học\"\n// icon={<GeomIcon />}\n// tools={TOOLS} // ReadonlyArray<StampToolDef>\n// groupOrder={GROUP_ORDER}\n// groupLabels={GROUP_LABELS}\n// activeTool={tool}\n// onToolChange={setTool}\n// view={{ showAxis, showGrid, onShowAxisChange, onShowGridChange }} // optional\n// history={{ onUndo, canUndo, onRedo, canRedo }} // optional\n// chord={{ activeGroup, letterForGroup }} // optional\n// objects={{ store, addButtons, renderRow, ... }} // optional\n// isMobile={isMobile}\n// drawerOpen={drawerOpen}\n// onDrawerClose={...}\n// onClose={onClose}\n// isDark={isDark}\n// />\n\nimport React from 'react';\nimport { StampLeftPanelDesktop } from './Desktop';\nimport { StampLeftPanelMobile } from './Mobile';\nimport type { StampLeftPanelProps } from './types';\n\nexport function StampLeftPanel<TKey extends string, TGroup extends string>(\n props: StampLeftPanelProps<TKey, TGroup>,\n): React.ReactElement {\n if (props.isMobile) return <StampLeftPanelMobile {...props} />;\n return <StampLeftPanelDesktop {...props} />;\n}\n\nexport type {\n StampLeftPanelProps,\n StampToolDef,\n StampLeftPanelViewProps,\n StampLeftPanelHistoryProps,\n StampLeftPanelChordProps,\n StampLeftPanelObjectsProps,\n StampLeftPanelTabs,\n HoverState,\n} from './types';\nexport { TOOLTIP_DELAY_MS } from './types';\nexport { useToolHoverTooltip } from './useToolHoverTooltip';\n","import React from 'react';\n\n// Design system:\n// - Main strokes use currentColor → respect active state (white-on-emerald).\n// - 4 accent colors stay fixed across states:\n// point → blue dot (signature từ GeoGebra)\n// construct → red dashed/solid helper line (perpendicular, bisector, parallel, tangent)\n// fill → orange polygon/area fill (light)\n// arc → emerald arc cho measurement\n// - ViewBox 24×24, stroke 1.4–1.7, round caps cho cảm giác sketch-like.\nconst C_POINT = '#2563eb';\nconst C_CONSTRUCT = '#dc2626';\nconst C_FILL = '#f59e0b';\nconst C_ARC = '#059669';\n\nexport const Icon = {\n // ===== Basic =====\n cursor: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M5 3 L5 18 L9.5 14 L12 20 L14 19.2 L11.5 13.5 L17.5 13.5 Z\"\n fill=\"currentColor\" fillOpacity=\"0.12\"\n stroke=\"currentColor\" strokeWidth=\"1.4\" strokeLinejoin=\"round\"\n />\n </svg>\n ),\n select: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinejoin=\"round\" strokeLinecap=\"round\">\n <rect x=\"2.5\" y=\"2.5\" width=\"14\" height=\"14\" rx=\"0.5\" stroke=\"currentColor\" strokeWidth=\"1.4\" strokeDasharray=\"2 1.8\"/>\n <path d=\"M10 10 L21 14.5 L14.5 16 L12.5 22 Z\" fill=\"currentColor\" fillOpacity=\"0.5\" stroke=\"currentColor\" strokeWidth=\"1.2\"/>\n </svg>\n ),\n\n // ===== Point =====\n point: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n <circle cx=\"9.5\" cy=\"14\" r=\"3.2\" fill={C_POINT}/>\n <text x=\"13.5\" y=\"10.5\" fontSize=\"9.5\" fontFamily=\"serif\" fontStyle=\"italic\" fontWeight=\"600\" fill={C_POINT}>A</text>\n </svg>\n ),\n midpoint: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinecap=\"round\">\n <line x1=\"4\" y1=\"12\" x2=\"20\" y2=\"12\" stroke=\"currentColor\" strokeWidth=\"1.5\"/>\n <circle cx=\"4\" cy=\"12\" r=\"1.8\" fill={C_POINT}/>\n <circle cx=\"20\" cy=\"12\" r=\"1.8\" fill={C_POINT}/>\n <circle cx=\"12\" cy=\"12\" r=\"2.6\" fill={C_CONSTRUCT}/>\n </svg>\n ),\n perpFoot: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinecap=\"round\">\n {/* Base line ngang (input — currentColor) */}\n <line x1=\"2\" y1=\"17\" x2=\"22\" y2=\"17\" stroke=\"currentColor\" strokeWidth=\"1.5\"/>\n {/* Vertical dashed line từ BLUE point xuống chân (construct/red) */}\n <line x1=\"9\" y1=\"5\" x2=\"9\" y2=\"17\" stroke={C_CONSTRUCT} strokeWidth=\"1.4\" strokeDasharray=\"2.5 2\"/>\n {/* Right-angle mark tại chân */}\n <rect x=\"9\" y=\"13.5\" width=\"3.5\" height=\"3.5\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1\"/>\n {/* BLUE point gốc */}\n <circle cx=\"9\" cy=\"5\" r=\"2\" fill={C_POINT}/>\n {/* RED point chân (output) */}\n <circle cx=\"9\" cy=\"17\" r=\"2.4\" fill={C_CONSTRUCT}/>\n </svg>\n ),\n intersect: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinecap=\"round\">\n <path d=\"M3 5 L21 19\" stroke=\"currentColor\" strokeWidth=\"1.6\"/>\n <path d=\"M21 5 L3 19\" stroke=\"currentColor\" strokeWidth=\"1.6\"/>\n <circle cx=\"12\" cy=\"12\" r=\"2.6\" fill={C_CONSTRUCT}/>\n </svg>\n ),\n\n // ===== Line =====\n segment: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinecap=\"round\">\n <line x1=\"5\" y1=\"18\" x2=\"19\" y2=\"6\" stroke=\"currentColor\" strokeWidth=\"1.6\"/>\n <circle cx=\"5\" cy=\"18\" r=\"2.2\" fill={C_POINT}/>\n <circle cx=\"19\" cy=\"6\" r=\"2.2\" fill={C_POINT}/>\n </svg>\n ),\n line: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinecap=\"round\">\n <line x1=\"2\" y1=\"21\" x2=\"22\" y2=\"3\" stroke=\"currentColor\" strokeWidth=\"1.6\"/>\n <circle cx=\"8.5\" cy=\"15.5\" r=\"1.9\" fill={C_POINT}/>\n <circle cx=\"15.5\" cy=\"8.5\" r=\"1.9\" fill={C_POINT}/>\n </svg>\n ),\n ray: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"5\" y1=\"19\" x2=\"22\" y2=\"2\" stroke=\"currentColor\" strokeWidth=\"1.6\"/>\n <circle cx=\"5\" cy=\"19\" r=\"2.2\" fill={C_POINT}/>\n <circle cx=\"12\" cy=\"12\" r=\"1.7\" fill={C_POINT}/>\n </svg>\n ),\n vector: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"5\" y1=\"19\" x2=\"18\" y2=\"6\"/>\n <polyline points=\"13,5 19,5 19,11\"/>\n <circle cx=\"5\" cy=\"19\" r=\"2\" fill={C_POINT} stroke=\"none\"/>\n </svg>\n ),\n\n // ===== Construct =====\n perpendicular: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinecap=\"round\">\n <line x1=\"2\" y1=\"17\" x2=\"22\" y2=\"17\" stroke=\"currentColor\" strokeWidth=\"1.5\"/>\n <line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"17\" stroke={C_CONSTRUCT} strokeWidth=\"1.5\"/>\n <rect x=\"12\" y=\"13.5\" width=\"3.5\" height=\"3.5\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1\"/>\n <circle cx=\"12\" cy=\"17\" r=\"1.8\" fill={C_POINT}/>\n </svg>\n ),\n parallel: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinecap=\"round\">\n {/* Đường đen = đã có (input). Đường đỏ = đường song song mới dựng đi qua điểm xanh. */}\n <line x1=\"2\" y1=\"9\" x2=\"22\" y2=\"6\" stroke=\"currentColor\" strokeWidth=\"1.5\"/>\n <line x1=\"2\" y1=\"19\" x2=\"22\" y2=\"16\" stroke={C_CONSTRUCT} strokeWidth=\"1.5\"/>\n <circle cx=\"12\" cy=\"17.5\" r=\"1.9\" fill={C_POINT}/>\n </svg>\n ),\n perpBisector: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinecap=\"round\">\n <line x1=\"4\" y1=\"16\" x2=\"20\" y2=\"16\" stroke=\"currentColor\" strokeWidth=\"1.5\"/>\n <line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"22\" stroke={C_CONSTRUCT} strokeWidth=\"1.4\" strokeDasharray=\"2.5 2\"/>\n <circle cx=\"4\" cy=\"16\" r=\"2\" fill={C_POINT}/>\n <circle cx=\"20\" cy=\"16\" r=\"2\" fill={C_POINT}/>\n </svg>\n ),\n bisector: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinecap=\"round\">\n <line x1=\"4\" y1=\"20\" x2=\"22\" y2=\"20\" stroke=\"currentColor\" strokeWidth=\"1.5\"/>\n <line x1=\"4\" y1=\"20\" x2=\"22\" y2=\"4\" stroke=\"currentColor\" strokeWidth=\"1.5\"/>\n <line x1=\"4\" y1=\"20\" x2=\"23\" y2=\"11\" stroke={C_CONSTRUCT} strokeWidth=\"1.4\" strokeDasharray=\"2.5 2\"/>\n </svg>\n ),\n\n // ===== Polygon =====\n polygon: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinejoin=\"round\">\n <polygon points=\"6,5 18,6 22,14 13,21 4,16\" fill={C_FILL} fillOpacity=\"0.28\" stroke={C_FILL} strokeWidth=\"1.5\"/>\n <circle cx=\"6\" cy=\"5\" r=\"1.5\" fill={C_POINT}/>\n <circle cx=\"18\" cy=\"6\" r=\"1.5\" fill={C_POINT}/>\n <circle cx=\"22\" cy=\"14\" r=\"1.5\" fill={C_POINT}/>\n <circle cx=\"13\" cy=\"21\" r=\"1.5\" fill={C_POINT}/>\n <circle cx=\"4\" cy=\"16\" r=\"1.5\" fill={C_POINT}/>\n </svg>\n ),\n regularPolygon: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinejoin=\"round\">\n <polygon points=\"12,3 20.5,8 20.5,16 12,21 3.5,16 3.5,8\" fill={C_FILL} fillOpacity=\"0.28\" stroke={C_FILL} strokeWidth=\"1.5\"/>\n <circle cx=\"12\" cy=\"3\" r=\"1.7\" fill={C_POINT}/>\n <circle cx=\"20.5\" cy=\"8\" r=\"1.7\" fill={C_POINT}/>\n </svg>\n ),\n\n // ===== Circle =====\n circleCenter: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n <circle cx=\"11\" cy=\"13\" r=\"8\" stroke=\"currentColor\" strokeWidth=\"1.5\"/>\n <circle cx=\"11\" cy=\"13\" r=\"1.7\" fill={C_POINT}/>\n <circle cx=\"19\" cy=\"13\" r=\"1.7\" fill={C_POINT}/>\n </svg>\n ),\n semicircle: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinecap=\"round\">\n {/* Nửa đường tròn emerald-arc, 2 endpoint blue ở đáy */}\n <path d=\"M 4 16 A 8 8 0 0 1 20 16\" stroke={C_ARC} strokeWidth=\"1.6\" fill=\"none\"/>\n <line x1=\"4\" y1=\"16\" x2=\"20\" y2=\"16\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeDasharray=\"2 1.6\"/>\n <circle cx=\"4\" cy=\"16\" r=\"1.9\" fill={C_POINT}/>\n <circle cx=\"20\" cy=\"16\" r=\"1.9\" fill={C_POINT}/>\n </svg>\n ),\n arcCenter: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinecap=\"round\">\n {/* Tâm blue (lớn) + cung emerald + 2 đầu cung blue (nhỏ), 2 bán kính nét đứt */}\n <path d=\"M 6 6 A 9 9 0 0 1 18 18\" stroke={C_ARC} strokeWidth=\"1.7\" fill=\"none\"/>\n <line x1=\"12\" y1=\"12\" x2=\"6\" y2=\"6\" stroke=\"currentColor\" strokeWidth=\"1\" strokeDasharray=\"1.5 1.5\" opacity=\"0.5\"/>\n <line x1=\"12\" y1=\"12\" x2=\"18\" y2=\"18\" stroke=\"currentColor\" strokeWidth=\"1\" strokeDasharray=\"1.5 1.5\" opacity=\"0.5\"/>\n <circle cx=\"12\" cy=\"12\" r=\"2\" fill={C_POINT}/>\n <circle cx=\"6\" cy=\"6\" r=\"1.4\" fill={C_POINT}/>\n <circle cx=\"18\" cy=\"18\" r=\"1.4\" fill={C_POINT}/>\n </svg>\n ),\n arc3: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinecap=\"round\">\n {/* Circle arc đi qua 3 điểm: (4,17), (12,9), (20,17). Tâm (12,17), r=8. */}\n <path d=\"M 4 17 A 8 8 0 0 1 20 17\" stroke={C_ARC} strokeWidth=\"1.8\" fill=\"none\"/>\n <circle cx=\"4\" cy=\"17\" r=\"1.9\" fill={C_POINT}/>\n <circle cx=\"12\" cy=\"9\" r=\"1.9\" fill={C_POINT}/>\n <circle cx=\"20\" cy=\"17\" r=\"1.9\" fill={C_POINT}/>\n </svg>\n ),\n sectorCenter: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinejoin=\"round\">\n {/* Tâm blue + 2 bán kính + cung emerald + fill orange */}\n <path d=\"M 12 12 L 5 7 A 8.6 8.6 0 0 1 19 7 Z\"\n fill={C_FILL} fillOpacity=\"0.25\"\n stroke={C_ARC} strokeWidth=\"1.6\"/>\n <line x1=\"12\" y1=\"12\" x2=\"5\" y2=\"7\" stroke=\"currentColor\" strokeWidth=\"1.3\"/>\n <line x1=\"12\" y1=\"12\" x2=\"19\" y2=\"7\" stroke=\"currentColor\" strokeWidth=\"1.3\"/>\n <circle cx=\"12\" cy=\"12\" r=\"1.8\" fill={C_POINT}/>\n <circle cx=\"5\" cy=\"7\" r=\"1.4\" fill={C_POINT}/>\n <circle cx=\"19\" cy=\"7\" r=\"1.4\" fill={C_POINT}/>\n </svg>\n ),\n circle3: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n <circle cx=\"12\" cy=\"13\" r=\"8\" stroke=\"currentColor\" strokeWidth=\"1.5\"/>\n <circle cx=\"12\" cy=\"5\" r=\"1.7\" fill={C_POINT}/>\n <circle cx=\"19\" cy=\"16\" r=\"1.7\" fill={C_POINT}/>\n <circle cx=\"5\" cy=\"16\" r=\"1.7\" fill={C_POINT}/>\n </svg>\n ),\n tangent: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinecap=\"round\">\n {/* Circle C=(10,13) r=5; external point P=(20,4); tangent points T1≈(14.5,15.2), T2≈(8.3,8.3) */}\n <circle cx=\"10\" cy=\"13\" r=\"5\" stroke=\"currentColor\" strokeWidth=\"1.5\"/>\n <line x1=\"20\" y1=\"4\" x2=\"14.5\" y2=\"15.2\" stroke={C_CONSTRUCT} strokeWidth=\"1.6\"/>\n <line x1=\"20\" y1=\"4\" x2=\"8.3\" y2=\"8.3\" stroke={C_CONSTRUCT} strokeWidth=\"1.6\"/>\n <circle cx=\"20\" cy=\"4\" r=\"1.9\" fill={C_POINT}/>\n <circle cx=\"14.5\" cy=\"15.2\" r=\"1.4\" fill={C_CONSTRUCT}/>\n <circle cx=\"8.3\" cy=\"8.3\" r=\"1.4\" fill={C_CONSTRUCT}/>\n </svg>\n ),\n\n // ===== Triangle centers =====\n centroid: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinejoin=\"round\">\n {/* Tam giác outline + fill orange nhạt */}\n <polygon points=\"4,20 20,20 12,4\" fill={C_FILL} fillOpacity=\"0.18\" stroke=\"currentColor\" strokeWidth=\"1.4\"/>\n {/* 3 medians: vertex → midpoint cạnh đối diện (xám dashed) */}\n <line x1=\"12\" y1=\"4\" x2=\"12\" y2=\"20\" stroke=\"#94a3b8\" strokeWidth=\"1\" strokeDasharray=\"1.5 1.5\"/>\n <line x1=\"4\" y1=\"20\" x2=\"16\" y2=\"12\" stroke=\"#94a3b8\" strokeWidth=\"1\" strokeDasharray=\"1.5 1.5\"/>\n <line x1=\"20\" y1=\"20\" x2=\"8\" y2=\"12\" stroke=\"#94a3b8\" strokeWidth=\"1\" strokeDasharray=\"1.5 1.5\"/>\n {/* 3 đỉnh BLUE */}\n <circle cx=\"4\" cy=\"20\" r=\"1.5\" fill={C_POINT}/>\n <circle cx=\"20\" cy=\"20\" r=\"1.5\" fill={C_POINT}/>\n <circle cx=\"12\" cy=\"4\" r=\"1.5\" fill={C_POINT}/>\n {/* Trọng tâm RED tại giao 3 medians */}\n <circle cx=\"12\" cy=\"14.67\" r=\"2.4\" fill={C_CONSTRUCT}/>\n </svg>\n ),\n circumcenter: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n {/* Đường tròn ngoại tiếp */}\n <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" strokeWidth=\"1.4\"/>\n {/* Tam giác nội tiếp */}\n <polygon points=\"12,3 21,16 3,16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.3\"/>\n {/* 3 đỉnh BLUE */}\n <circle cx=\"12\" cy=\"3\" r=\"1.6\" fill={C_POINT}/>\n <circle cx=\"21\" cy=\"16\" r=\"1.6\" fill={C_POINT}/>\n <circle cx=\"3\" cy=\"16\" r=\"1.6\" fill={C_POINT}/>\n {/* Tâm ngoại tiếp RED */}\n <circle cx=\"12\" cy=\"12\" r=\"2.4\" fill={C_CONSTRUCT}/>\n </svg>\n ),\n incenter: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n {/* Tam giác outline */}\n <polygon points=\"3,20 21,20 12,4\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.4\"/>\n {/* Đường tròn nội tiếp */}\n <circle cx=\"12\" cy=\"14\" r=\"4.5\" stroke=\"currentColor\" strokeWidth=\"1.3\"/>\n {/* 3 đỉnh BLUE */}\n <circle cx=\"3\" cy=\"20\" r=\"1.6\" fill={C_POINT}/>\n <circle cx=\"21\" cy=\"20\" r=\"1.6\" fill={C_POINT}/>\n <circle cx=\"12\" cy=\"4\" r=\"1.6\" fill={C_POINT}/>\n {/* Tâm nội tiếp RED */}\n <circle cx=\"12\" cy=\"14\" r=\"2.2\" fill={C_CONSTRUCT}/>\n </svg>\n ),\n orthocenter: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinecap=\"round\">\n {/* Tam giác outline */}\n <polygon points=\"3,20 21,20 8,5\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.4\"/>\n {/* 2 altitudes (dashed red) — đủ giao điểm */}\n <line x1=\"8\" y1=\"5\" x2=\"8\" y2=\"20\" stroke={C_CONSTRUCT} strokeWidth=\"1.2\" strokeDasharray=\"2 1.6\"/>\n <line x1=\"3\" y1=\"20\" x2=\"14.5\" y2=\"11.5\" stroke={C_CONSTRUCT} strokeWidth=\"1.2\" strokeDasharray=\"2 1.6\"/>\n {/* 3 đỉnh BLUE */}\n <circle cx=\"3\" cy=\"20\" r=\"1.6\" fill={C_POINT}/>\n <circle cx=\"21\" cy=\"20\" r=\"1.6\" fill={C_POINT}/>\n <circle cx=\"8\" cy=\"5\" r=\"1.6\" fill={C_POINT}/>\n {/* Trực tâm RED — giao 2 altitudes */}\n <circle cx=\"8\" cy=\"14.5\" r=\"2.4\" fill={C_CONSTRUCT}/>\n </svg>\n ),\n\n // ===== Measure =====\n angle: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"4\" y1=\"20\" x2=\"22\" y2=\"20\" stroke=\"currentColor\" strokeWidth=\"1.5\"/>\n <line x1=\"4\" y1=\"20\" x2=\"22\" y2=\"6\" stroke=\"currentColor\" strokeWidth=\"1.5\"/>\n <path d=\"M14 20 A 10 10 0 0 0 11 13.4\" stroke={C_ARC} strokeWidth=\"1.6\" fill=\"none\"/>\n <circle cx=\"4\" cy=\"20\" r=\"1.7\" fill={C_POINT}/>\n </svg>\n ),\n distance: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n <line x1=\"5\" y1=\"16\" x2=\"19\" y2=\"16\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\"/>\n <circle cx=\"5\" cy=\"16\" r=\"2\" fill={C_POINT}/>\n <circle cx=\"19\" cy=\"16\" r=\"2\" fill={C_POINT}/>\n <text x=\"8.5\" y=\"11\" fontSize=\"7\" fontFamily=\"serif\" fontStyle=\"italic\" fontWeight=\"600\" fill=\"currentColor\">cm</text>\n </svg>\n ),\n area: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinejoin=\"round\">\n <polygon points=\"4,10 14,3.5 21,12 16,21 5,18\" fill={C_FILL} fillOpacity=\"0.32\" stroke={C_FILL} strokeWidth=\"1.4\"/>\n <text x=\"1.5\" y=\"8\" fontSize=\"6.5\" fontFamily=\"serif\" fontStyle=\"italic\" fontWeight=\"600\" fill=\"currentColor\">cm²</text>\n </svg>\n ),\n\n // ===== Edit =====\n toggleLabel: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n <text x=\"1.5\" y=\"19\" fontSize=\"15\" fontFamily=\"serif\" fontWeight=\"700\" fill=\"currentColor\">A</text>\n <text x=\"12\" y=\"19\" fontSize=\"15\" fontFamily=\"serif\" fontWeight=\"700\" fill=\"currentColor\" fillOpacity=\"0.35\">A</text>\n </svg>\n ),\n toggleVisible: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n <circle cx=\"8\" cy=\"12\" r=\"3.2\" fill={C_POINT}/>\n <circle cx=\"17\" cy=\"12\" r=\"3.2\" fill=\"none\" stroke={C_POINT} strokeWidth=\"1.6\"/>\n </svg>\n ),\n trash: (\n // Eraser hình bình hành — GeoGebra dùng eraser, không phải trash bin.\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinejoin=\"round\" strokeLinecap=\"round\">\n <path d=\"M14.5 3 L21 9.5 L11.5 19 L4 19 L4 11.5 Z\" fill=\"currentColor\" fillOpacity=\"0.14\" stroke=\"currentColor\" strokeWidth=\"1.5\"/>\n <line x1=\"9.5\" y1=\"8\" x2=\"16\" y2=\"14.5\" stroke=\"currentColor\" strokeWidth=\"1.4\"/>\n </svg>\n ),\n\n // ===== Transform =====\n // Style chung: BLUE = input (điểm gốc / tâm), RED = output (ảnh sau biến hình).\n // Mảnh, ít chi tiết — focus vào quan hệ điểm gốc ↔ ảnh.\n translate: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n {/* Vector tịnh tiến rời (mũi tên đen) — START thẳng hàng dọc với chấm xanh (x=7), xuống dưới đáy icon, song song với gốc→ảnh */}\n <line x1=\"7\" y1=\"21\" x2=\"12.5\" y2=\"16.25\" stroke=\"currentColor\" strokeWidth=\"1.4\"/>\n <polyline points=\"11.94,17.85 12.5,16.25 10.83,16.57\" stroke=\"currentColor\" strokeWidth=\"1.4\" fill=\"none\"/>\n {/* Điểm gốc BLUE → mũi tên xám → ảnh RED (cùng hướng vector trên) */}\n <line x1=\"7\" y1=\"15\" x2=\"18\" y2=\"5.5\" stroke=\"#94a3b8\" strokeWidth=\"1.4\"/>\n <polyline points=\"15.54,5.97 18,5.5 17.18,7.86\" stroke=\"#94a3b8\" strokeWidth=\"1.4\" fill=\"none\"/>\n <circle cx=\"7\" cy=\"15\" r=\"2\" fill={C_POINT}/>\n <circle cx=\"18\" cy=\"5.5\" r=\"2\" fill={C_CONSTRUCT}/>\n </svg>\n ),\n rotate: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n {/* Tâm quay BLUE (lớn) ở dưới + 2 bán kính + cung α (centered tại vertex, bulge lên) + α + gốc BLUE → ảnh RED */}\n <line x1=\"12\" y1=\"18\" x2=\"20\" y2=\"6\" stroke=\"currentColor\" strokeWidth=\"1\" opacity=\"0.55\"/>\n <line x1=\"12\" y1=\"18\" x2=\"4\" y2=\"9\" stroke=\"currentColor\" strokeWidth=\"1\" opacity=\"0.55\"/>\n {/* Arc r=4 quanh vertex (12,18): start (14.22,14.67) → end (9.34,15.01), short arc bulge UP */}\n <path d=\"M 14.22 14.67 A 4 4 0 0 0 9.34 15.01\" stroke=\"currentColor\" strokeWidth=\"1.2\" fill=\"none\"/>\n <text x=\"10\" y=\"14\" fontSize=\"7\" fontFamily=\"serif\" fontStyle=\"italic\" fontWeight=\"700\" fill=\"currentColor\">α</text>\n <circle cx=\"12\" cy=\"18\" r=\"2.4\" fill={C_POINT} stroke=\"#fff\" strokeWidth=\"0.8\"/>\n <circle cx=\"20\" cy=\"6\" r=\"1.9\" fill={C_POINT}/>\n <circle cx=\"4\" cy=\"9\" r=\"1.9\" fill={C_CONSTRUCT}/>\n </svg>\n ),\n reflectLine: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n {/* Trục đối xứng (đường đen chéo) */}\n <line x1=\"3\" y1=\"21\" x2=\"21\" y2=\"3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\"/>\n {/* Điểm gốc BLUE (phía trên trục) + ảnh RED (phía dưới trục, đối xứng) */}\n <circle cx=\"5\" cy=\"11\" r=\"2\" fill={C_POINT}/>\n <circle cx=\"13\" cy=\"19\" r=\"2\" fill={C_CONSTRUCT}/>\n </svg>\n ),\n reflectPoint: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n {/* Điểm gốc BLUE + tâm BLUE (lớn hơn) + ảnh RED, thẳng hàng & cách đều */}\n <line x1=\"4\" y1=\"20\" x2=\"20\" y2=\"4\" stroke=\"currentColor\" strokeWidth=\"0.9\" strokeDasharray=\"1.5 1.5\" opacity=\"0.45\"/>\n <circle cx=\"5\" cy=\"19\" r=\"1.9\" fill={C_POINT}/>\n <circle cx=\"12\" cy=\"12\" r=\"2.6\" fill={C_POINT} stroke=\"#fff\" strokeWidth=\"0.8\"/>\n <circle cx=\"19\" cy=\"5\" r=\"1.9\" fill={C_CONSTRUCT}/>\n </svg>\n ),\n dilate: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n {/* Tâm vị tự BLUE + điểm gốc BLUE (gần tâm) + ảnh RED (xa hơn) — chừa chỗ cho k phía trên đường */}\n <line x1=\"3\" y1=\"20\" x2=\"21\" y2=\"4\" stroke=\"currentColor\" strokeWidth=\"0.9\" strokeDasharray=\"1.5 1.5\" opacity=\"0.5\"/>\n <circle cx=\"4\" cy=\"19\" r=\"2.2\" fill={C_POINT} stroke=\"#fff\" strokeWidth=\"0.8\"/>\n <circle cx=\"8\" cy=\"15.5\" r=\"1.7\" fill={C_POINT}/>\n <circle cx=\"19\" cy=\"5.7\" r=\"1.9\" fill={C_CONSTRUCT}/>\n <text x=\"10.5\" y=\"10.5\" fontSize=\"8\" fontFamily=\"serif\" fontStyle=\"italic\" fontWeight=\"700\" fill=\"currentColor\">k</text>\n </svg>\n ),\n};\n\nexport const GeometryIconHeader = (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polygon points=\"4,20 20,20 12,5\" />\n <circle cx=\"4\" cy=\"20\" r=\"1.5\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"20\" cy=\"20\" r=\"1.5\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"12\" cy=\"5\" r=\"1.5\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n);\n\nexport function UndoIcon(): React.ReactElement {\n return (\n <svg width=\"14\" height=\"14\" 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\nexport function RedoIcon(): React.ReactElement {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"21 7 21 13 15 13\" />\n <path d=\"M20.49 13a9 9 0 1 1-2.12-9.36L21 7\" />\n </svg>\n );\n}\n","import React from 'react';\n\n/**\n * Static catalog của tất cả GeomTool — không phụ thuộc board state, chỉ là\n * metadata (key, label, hint, icon SVG, group, số click cần, accept types).\n *\n * Tách khỏi MiniBoard.tsx để (1) giảm size file component và (2) dễ\n * mở rộng tool mới mà không cần đụng vào board logic.\n */\n\n// Tool keys — match GeoGebra-style toolset\nexport type GeomTool =\n | 'move'\n | 'select'\n | 'point'\n | 'midpoint'\n | 'perpFoot'\n | 'intersect'\n | 'segment'\n | 'line'\n | 'ray'\n | 'vector'\n | 'perpendicular'\n | 'parallel'\n | 'perpBisector'\n | 'angleBisector'\n | 'polygon'\n | 'regularPolygon'\n | 'circleCenter'\n | 'semicircle'\n | 'arcCenter'\n | 'arc3'\n | 'sectorCenter'\n | 'circle3'\n | 'tangent'\n | 'centroid'\n | 'circumcenter'\n | 'incenter'\n | 'orthocenter'\n | 'angle'\n | 'distance'\n | 'area'\n | 'toggleLabel'\n | 'toggleVisible'\n | 'delete'\n | 'translate'\n | 'rotate'\n | 'reflectLine'\n | 'reflectPoint'\n | 'dilate';\n\nexport interface ToolDef {\n key: GeomTool;\n label: string;\n hint: string;\n icon: React.ReactNode;\n group:\n | 'move'\n | 'point'\n | 'line'\n | 'construct'\n | 'polygon'\n | 'circle'\n | 'triangle'\n | 'measure'\n | 'edit'\n | 'transform';\n /** Số click cần trước khi action fire. -1 = mở (polygon đóng bằng click lại điểm đầu). */\n needs: number;\n /** Loại object accept ở mỗi slot. 'any' = point hoặc non-point. 'lineOrCircle' = line hoặc circle (loại trừ point). 'pointOrLine' = point hoặc line/đoạn (loại trừ circle). */\n accepts?: Array<'point' | 'line' | 'circle' | 'any' | 'lineOrCircle' | 'pointOrLine'>;\n}\n\n// ============== Tool icons — imported from icons.tsx ==============\nimport { Icon } from './icons';\n\n// ============== Tool catalog ==============\nexport const TOOLS: ToolDef[] = [\n { key: 'move', label: 'Di chuyển', hint: 'Kéo điểm hoặc xoay nền', icon: Icon.cursor, group: 'move', needs: 0 },\n { key: 'select', label: 'Chọn', hint: 'Click để chọn 1 / Shift+click để bỏ thêm / Kéo nền để khoanh vùng / DEL để xoá', icon: Icon.select, group: 'move', needs: 0 },\n { key: 'point', label: 'Điểm mới', hint: 'Click để thêm điểm', icon: Icon.point, group: 'point', needs: 1 },\n { key: 'midpoint', label: 'Trung điểm', hint: 'Click 2 điểm có sẵn', icon: Icon.midpoint, group: 'point', needs: 2, accepts: ['point', 'point'] },\n { key: 'perpFoot', label: 'Chân đường vuông góc', hint: 'Click 1 điểm + 1 đường có sẵn', icon: Icon.perpFoot, group: 'point', needs: 2, accepts: ['point', 'line'] },\n { key: 'intersect', label: 'Giao điểm của 2 đối tượng', hint: 'Click 2 đường/đường tròn có sẵn', icon: Icon.intersect, group: 'point', needs: 2, accepts: ['lineOrCircle', 'lineOrCircle'] },\n { key: 'segment', label: 'Đoạn thẳng', hint: 'Click 2 điểm', icon: Icon.segment, group: 'line', needs: 2 },\n { key: 'line', label: 'Đường thẳng qua 2 điểm', hint: 'Click 2 điểm', icon: Icon.line, group: 'line', needs: 2 },\n { key: 'ray', label: 'Tia qua 2 điểm', hint: 'Click 2 điểm', icon: Icon.ray, group: 'line', needs: 2 },\n { key: 'vector', label: 'Vector', hint: 'Click 2 điểm', icon: Icon.vector, group: 'line', needs: 2 },\n { key: 'perpendicular', label: 'Đường vuông góc', hint: 'Click 1 điểm + 1 đường có sẵn', icon: Icon.perpendicular, group: 'construct', needs: 2, accepts: ['point', 'line'] },\n { key: 'parallel', label: 'Đường song song', hint: 'Click 1 điểm + 1 đường có sẵn', icon: Icon.parallel, group: 'construct', needs: 2, accepts: ['point', 'line'] },\n { key: 'perpBisector', label: 'Đường trung trực', hint: 'Click 2 điểm có sẵn', icon: Icon.perpBisector, group: 'construct', needs: 2, accepts: ['point', 'point'] },\n { key: 'angleBisector', label: 'Đường phân giác', hint: 'Click 3 điểm (đỉnh ở giữa) hoặc 2 đường/đoạn (sẽ tạo 2 tia phân giác)', icon: Icon.bisector, group: 'construct', needs: 3, accepts: ['pointOrLine', 'pointOrLine', 'pointOrLine'] },\n { key: 'polygon', label: 'Đa giác', hint: 'Click các điểm, click lại điểm đầu để đóng', icon: Icon.polygon, group: 'polygon', needs: -1 },\n { key: 'regularPolygon', label: 'Đa giác đều', hint: 'Click 2 điểm rồi nhập số cạnh', icon: Icon.regularPolygon, group: 'polygon', needs: 2, accepts: ['point', 'point'] },\n { key: 'circleCenter', label: 'Đường tròn (tâm + điểm)', hint: 'Click tâm rồi 1 điểm trên đường tròn', icon: Icon.circleCenter, group: 'circle', needs: 2 },\n { key: 'semicircle', label: 'Nửa đường tròn (đường kính)', hint: 'Click 2 điểm — bán nguyệt qua đường kính', icon: Icon.semicircle, group: 'circle', needs: 2 },\n { key: 'arcCenter', label: 'Cung tròn (tâm + 2 điểm)', hint: 'Click tâm O → A → B (cung từ A đến B)', icon: Icon.arcCenter, group: 'circle', needs: 3 },\n { key: 'arc3', label: 'Cung tròn qua 3 điểm', hint: 'Click 3 điểm trên cung', icon: Icon.arc3, group: 'circle', needs: 3 },\n { key: 'sectorCenter', label: 'Hình quạt (tâm + 2 điểm)', hint: 'Click tâm O → A → B (quạt OAB)', icon: Icon.sectorCenter, group: 'circle', needs: 3 },\n { key: 'circle3', label: 'Đường tròn qua 3 điểm', hint: 'Click 3 điểm', icon: Icon.circle3, group: 'circle', needs: 3 },\n { key: 'tangent', label: 'Tiếp tuyến', hint: 'Click 1 điểm + 1 đường tròn có sẵn', icon: Icon.tangent, group: 'circle', needs: 2, accepts: ['point', 'circle'] },\n { key: 'centroid', label: 'Trọng tâm tam giác', hint: 'Click 3 đỉnh tam giác', icon: Icon.centroid, group: 'triangle', needs: 3, accepts: ['point', 'point', 'point'] },\n { key: 'circumcenter', label: 'Tâm đường tròn ngoại tiếp', hint: 'Click 3 đỉnh tam giác', icon: Icon.circumcenter, group: 'triangle', needs: 3, accepts: ['point', 'point', 'point'] },\n { key: 'incenter', label: 'Tâm đường tròn nội tiếp', hint: 'Click 3 đỉnh tam giác', icon: Icon.incenter, group: 'triangle', needs: 3, accepts: ['point', 'point', 'point'] },\n { key: 'orthocenter', label: 'Trực tâm tam giác', hint: 'Click 3 đỉnh tam giác', icon: Icon.orthocenter, group: 'triangle', needs: 3, accepts: ['point', 'point', 'point'] },\n { key: 'angle', label: 'Góc', hint: 'Click 3 điểm có sẵn (đỉnh ở giữa)', icon: Icon.angle, group: 'measure', needs: 3, accepts: ['point', 'point', 'point'] },\n { key: 'distance', label: 'Khoảng cách', hint: 'Click 2 điểm có sẵn', icon: Icon.distance, group: 'measure', needs: 2, accepts: ['point', 'point'] },\n { key: 'area', label: 'Diện tích', hint: 'Click các đỉnh, click lại điểm đầu để đóng', icon: Icon.area, group: 'measure', needs: -1 },\n { key: 'toggleLabel', label: 'Hiện/ẩn tên', hint: 'Click vào đối tượng', icon: Icon.toggleLabel, group: 'edit', needs: 1, accepts: ['any'] },\n { key: 'toggleVisible', label: 'Hiện/ẩn đối tượng', hint: 'Click vào đối tượng', icon: Icon.toggleVisible, group: 'edit', needs: 1, accepts: ['any'] },\n { key: 'delete', label: 'Xoá', hint: 'Click vào đối tượng', icon: Icon.trash, group: 'edit', needs: 1, accepts: ['any'] },\n { key: 'translate', label: 'Phép tịnh tiến', hint: 'Click object → 2 điểm tạo vector', icon: Icon.translate, group: 'transform', needs: 3, accepts: ['any', 'point', 'point'] },\n { key: 'rotate', label: 'Quay đối tượng', hint: 'Click object → tâm quay → nhập góc', icon: Icon.rotate, group: 'transform', needs: 2, accepts: ['any', 'point'] },\n { key: 'reflectLine', label: 'Đối xứng qua đường thẳng', hint: 'Click object → đường thẳng', icon: Icon.reflectLine, group: 'transform', needs: 2, accepts: ['any', 'line'] },\n { key: 'reflectPoint', label: 'Đối xứng qua điểm', hint: 'Click object → tâm đối xứng', icon: Icon.reflectPoint, group: 'transform', needs: 2, accepts: ['any', 'point'] },\n { key: 'dilate', label: 'Phép vị tự', hint: 'Click object → tâm → nhập tỷ số k', icon: Icon.dilate, group: 'transform', needs: 2, accepts: ['any', 'point'] },\n];\n\nexport const GROUP_LABELS: Record<ToolDef['group'], string> = {\n move: 'Cơ bản',\n point: 'Điểm',\n line: 'Đường',\n construct: 'Dựng hình',\n polygon: 'Đa giác',\n circle: 'Đường tròn',\n triangle: 'Tam giác',\n measure: 'Đo lường',\n edit: 'Chỉnh sửa',\n transform: 'Phép biến hình',\n};\n\nexport type GeomGroup = ToolDef['group'];\n\n// Positional A..I — letter shortcut cho chord 2-phím.\n// Khớp đúng thứ tự hiển thị trong LeftPanel (derive từ TOOLS phía trên).\nexport const GROUP_ORDER: GeomGroup[] = [\n 'move',\n 'point',\n 'line',\n 'construct',\n 'polygon',\n 'circle',\n 'triangle',\n 'measure',\n 'edit',\n 'transform',\n];\n\nconst A_CODE = 'A'.charCodeAt(0);\n\nexport function letterForGroup(g: GeomGroup): string {\n const idx = GROUP_ORDER.indexOf(g);\n return idx >= 0 ? String.fromCharCode(A_CODE + idx) : '';\n}\n\nexport function groupForLetter(ch: string): GeomGroup | null {\n if (ch.length !== 1) return null;\n const upper = ch.toUpperCase();\n const idx = upper.charCodeAt(0) - A_CODE;\n if (idx < 0 || idx >= GROUP_ORDER.length) return null;\n return GROUP_ORDER[idx];\n}\n\n// ============== Object-type matching ==============\n\n \ntype JxgObj = any;\n\n/** Phân loại JSXGraph element type vào nhóm dùng cho accept-matching.\n *\n * Ưu tiên `elementClass` (numeric constant do JSXGraph set đúng cho mọi derived\n * element — intersection, reflection, glider, parallelpoint, mirrorpoint, ...\n * đều trả về OBJECT_CLASS_POINT). Nếu không có (test mocks), fallback sang\n * `elType` string với danh sách mở rộng các kiểu thường gặp.\n *\n * Constants từ JSXGraph: OBJECT_CLASS_POINT=1, OBJECT_CLASS_LINE=2, OBJECT_CLASS_CIRCLE=3.\n */\nexport function objKind(obj: JxgObj): 'point' | 'line' | 'circle' | 'other' {\n if (!obj) return 'other';\n const ec = typeof obj.elementClass === 'number' ? obj.elementClass : null;\n if (ec === 1) return 'point';\n if (ec === 2) return 'line';\n if (ec === 3) return 'circle';\n const e = (obj.elType || obj.type || '').toString().toLowerCase();\n if (\n e === 'point' || e === 'glider' || e === 'midpoint' ||\n e === 'intersection' || e === 'otherintersection' ||\n e === 'reflection' || e === 'mirrorpoint' || e === 'mirrorelement' ||\n e === 'orthogonalprojection' || e === 'parallelpoint'\n ) return 'point';\n if (\n e === 'line' || e === 'segment' || e === 'arrow' || e === 'axis' ||\n e === 'normal' || e === 'parallel' || e === 'perpendicular' ||\n e === 'tangent' || e === 'bisector' || e === 'perpendicularsegment'\n ) return 'line';\n if (e === 'circle' || e === 'circumcircle') return 'circle';\n return 'other';\n}\n\nexport function acceptMatches(\n tool: ToolDef,\n slot: number,\n kind: 'point' | 'line' | 'circle' | 'other',\n): boolean {\n if (!tool.accepts) return kind === 'point' || tool.key === 'point';\n const a = tool.accepts[slot];\n if (!a) return false;\n if (a === 'any') return kind !== 'other';\n if (a === 'lineOrCircle') return kind === 'line' || kind === 'circle';\n if (a === 'pointOrLine') return kind === 'point' || kind === 'line';\n return a === kind;\n}\n","import { objKind } from '../../tools';\nimport type { HandlerCtx } from '../ctx';\n\n \nexport function handleMoveTool(ctx: HandlerCtx, e: any): void {\n const sc = ctx.screenCoordsOf(e);\n if (!sc) return;\n const [sx, sy] = sc;\n ctx.moveDownRef.current = { sx, sy };\n const cx = (e.clientX ?? e.touches?.[0]?.clientX ?? 0) as number;\n const cy = (e.clientY ?? e.touches?.[0]?.clientY ?? 0) as number;\n ctx.lastClickClientRef.current = { x: cx, y: cy };\n\n // Click-select trong move tool (chế độ cơ bản): cho phép chọn 1 / shift-add\n // mà không cần switch sang tool 'select'. Hành vi drag điểm + pan nền của\n // JSXGraph vẫn nguyên (selection chỉ là side-effect, không stopPropagation).\n const hits = ctx.objectsAt(e)\n .map(ctx.promoteLabel)\n .filter((o) => o !== ctx.axisObjsRef.current.x && o !== ctx.axisObjsRef.current.y)\n .filter((o) => ctx.jxgIdToSceneId(o) != null);\n const obj = hits.find((o) => objKind(o) === 'point') ?? ctx.findNearestPointJxg(e, 12) ?? hits[0];\n if (obj) {\n const sid = ctx.jxgIdToSceneId(obj);\n if (sid) {\n const shift = !!(e.shiftKey || e.altKey);\n ctx.toggleSelect(sid, shift);\n }\n return;\n }\n // Empty space + không additive: clear selection (popover sẽ tự đóng qua\n // selectionTick effect ở MiniBoard).\n if (!(e.shiftKey || e.altKey)) ctx.clearSelection();\n}\n","import { objKind } from '../../tools';\nimport type { HandlerCtx } from '../ctx';\n\n \nexport function handleSelectTool(ctx: HandlerCtx, e: any): void {\n const sc = ctx.screenCoordsOf(e);\n if (!sc) return;\n const [sx, sy] = sc;\n const cx = (e.clientX ?? e.touches?.[0]?.clientX ?? 0) as number;\n const cy = (e.clientY ?? e.touches?.[0]?.clientY ?? 0) as number;\n ctx.lastClickClientRef.current = { x: cx, y: cy };\n const hits = ctx.objectsAt(e)\n .map(ctx.promoteLabel)\n .filter((o) => o !== ctx.axisObjsRef.current.x && o !== ctx.axisObjsRef.current.y)\n .filter((o) => ctx.jxgIdToSceneId(o) != null);\n // Ưu tiên điểm: exact hit → nearest-within-12px → mới đến hit khác (line/circle).\n const obj = hits.find((o) => objKind(o) === 'point') ?? ctx.findNearestPointJxg(e, 12) ?? hits[0];\n if (obj) {\n const sid = ctx.jxgIdToSceneId(obj);\n if (sid) {\n const shift = !!(e.shiftKey || e.altKey);\n ctx.toggleSelect(sid, shift);\n }\n ctx.moveDownRef.current = { sx, sy };\n ctx.marqueeRef.current = null;\n return;\n }\n // Empty space: start marquee.\n ctx.marqueeRef.current = { startSx: sx, startSy: sy };\n if (!(e.shiftKey || e.altKey)) ctx.clearSelection();\n}\n","const isDev = (() => {\n try {\n return typeof process !== 'undefined' && process.env?.NODE_ENV !== 'production';\n } catch {\n return false;\n }\n})();\n\n/**\n * Wrap JSXGraph operations that can throw on stale/missing state.\n * In dev mode: log to console. In prod: silent swallow + return fallback.\n *\n * @param label Short tag for grep-ability (vd \"removeObject\", \"board.update\").\n * @param fn Operation to execute.\n * @param fallback Value to return if fn throws (default: undefined).\n */\nexport function safeJsx<T>(label: string, fn: () => T): T | undefined;\nexport function safeJsx<T>(label: string, fn: () => T, fallback: T): T;\nexport function safeJsx<T>(label: string, fn: () => T, fallback?: T): T | undefined {\n try {\n return fn();\n } catch (err) {\n if (isDev) {\n \n console.warn('[whiteboard:jsxgraph]', label, err);\n }\n return fallback;\n }\n}\n","import type { HandlerCtx } from './ctx';\n\nexport type SceneObj = {\n id: string;\n kind: string;\n label: string;\n visible: boolean;\n locked: boolean;\n layer: string;\n schemaVersion: number;\n attrs: Record<string, unknown>;\n};\n\nexport function freshId(ctx: HandlerCtx, prefix: string): string {\n const counter = ctx.store.getState().counter;\n // Loop until unique (counter is monotonic but ids may have been deleted/reused\n // in non-trivial scenarios; safer to probe).\n let n = counter + 1;\n let id = `${prefix}_${n}`;\n const objs = ctx.store.getState().objects;\n while (id in objs) {\n n += 1;\n id = `${prefix}_${n}`;\n }\n return id;\n}\n\nexport function mkSceneObj(\n id: string,\n kind: string,\n label: string,\n attrs: Record<string, unknown>,\n): SceneObj {\n return {\n id,\n kind,\n label,\n visible: true,\n locked: false,\n layer: 'default',\n schemaVersion: 1,\n attrs,\n };\n}\n\n/** Tạo point free + dispatch ADD; trả về scene id mới. */\nexport function dispatchAddFreePoint(ctx: HandlerCtx, x: number, y: number): string {\n const id = freshId(ctx, 'p');\n const label = ctx.nextLabel('point');\n const obj = mkSceneObj(id, 'point', label, { constraint: { kind: 'free', x, y } });\n ctx.store.dispatch({ type: 'ADD', payload: { obj } });\n return id;\n}\n\n/** Tạo intersection point + dispatch ADD; trả về scene id mới. */\nexport function dispatchAddIntersection(\n ctx: HandlerCtx,\n attrs: Record<string, unknown>,\n): string {\n const id = freshId(ctx, 'X');\n const label = ctx.nextLabel('intersection');\n const obj = mkSceneObj(id, 'intersection', label, attrs);\n ctx.store.dispatch({ type: 'ADD', payload: { obj } });\n return id;\n}\n","import { objKind } from '../../tools';\nimport { safeJsx } from '../../../../shared/safeJsx';\nimport type { HandlerCtx } from '../ctx';\nimport { dispatchAddFreePoint, dispatchAddIntersection } from '../utils';\n\n \ntype JxgObj = any;\n\nexport function handlePointTool(\n ctx: HandlerCtx,\n \n _e: any,\n x: number,\n y: number,\n hits: JxgObj[],\n): void {\n const curves = hits.filter((o) => objKind(o) === 'line' || objKind(o) === 'circle');\n if (curves.length >= 2) {\n const a = curves[0];\n const b = curves[1];\n const aId = ctx.jxgIdToSceneId(a);\n const bId = ctx.jxgIdToSceneId(b);\n if (aId && bId) {\n try {\n const aKind = objKind(a);\n const bKind = objKind(b);\n if (aKind === 'line' && bKind === 'line') {\n dispatchAddIntersection(ctx, { kind: 'lineLine', ref1: aId, ref2: bId });\n return;\n }\n // line-circle / circle-circle: pick branch nearest click.\n const tmp0 = ctx.boardRef.current.create('intersection', [a, b, 0], { visible: false, withLabel: false });\n const tmp1 = ctx.boardRef.current.create('intersection', [a, b, 1], { visible: false, withLabel: false });\n const d0 = Math.hypot((tmp0.X?.() ?? 0) - x, (tmp0.Y?.() ?? 0) - y);\n const d1 = Math.hypot((tmp1.X?.() ?? 0) - x, (tmp1.Y?.() ?? 0) - y);\n safeJsx('handlers.removeObject(intersect.tmp0)', () => ctx.boardRef.current.removeObject(tmp0));\n safeJsx('handlers.removeObject(intersect.tmp1)', () => ctx.boardRef.current.removeObject(tmp1));\n const branch: 0 | 1 = d0 <= d1 ? 0 : 1;\n const isLineCircle = (aKind === 'line' && bKind === 'circle') || (aKind === 'circle' && bKind === 'line');\n if (isLineCircle) {\n dispatchAddIntersection(ctx, { kind: 'lineCircle', ref1: aId, ref2: bId, branch });\n } else {\n dispatchAddIntersection(ctx, { kind: 'circleCircle', ref1: aId, ref2: bId, branch });\n }\n return;\n } catch {\n // fallback: tạo điểm tự do\n }\n }\n }\n dispatchAddFreePoint(ctx, x, y);\n}\n","import type { ToolDef, GeomTool } from '../../tools';\nimport type { HandlerCtx } from '../ctx';\n\n \ntype JxgObj = any;\n\nexport function handleSingleTargetTool(\n ctx: HandlerCtx,\n t: GeomTool,\n toolDef: ToolDef,\n \n e: any,\n bestHit: JxgObj | null,\n): boolean {\n if (!(toolDef.needs === 1 && toolDef.accepts)) return false;\n const hit = bestHit ?? ctx.findNearestPointJxg(e, 12);\n if (!hit) {\n ctx.flashWarn('Click vào một đối tượng để áp dụng');\n return true;\n }\n const sid = ctx.jxgIdToSceneId(hit);\n if (!sid) return true;\n if (t === 'delete') {\n ctx.store.dispatch({ type: 'DELETE', payload: { id: sid } });\n return true;\n }\n if (t === 'toggleLabel') {\n const obj = ctx.store.getState().objects[sid];\n if (!obj) return true;\n const cur = (obj.attrs as { showLabel?: boolean }).showLabel;\n const next = !(cur ?? false);\n ctx.store.dispatch({ type: 'UPDATE_ATTRS', payload: { id: sid, patch: { showLabel: next } } });\n return true;\n }\n if (t === 'toggleVisible') {\n const obj = ctx.store.getState().objects[sid];\n if (!obj) return true;\n ctx.store.dispatch({ type: 'UPDATE', payload: { id: sid, patch: { visible: !obj.visible } } });\n return true;\n }\n return true;\n}\n","import { objKind } from '../../tools';\nimport { safeJsx } from '../../../../shared/safeJsx';\nimport type { GeomTool, ToolDef } from '../../tools';\nimport type { HandlerCtx } from '../ctx';\nimport { dispatchAddFreePoint, freshId, mkSceneObj } from '../utils';\n\n \ntype JxgObj = any;\n\nexport function handlePolygonTool(\n ctx: HandlerCtx,\n t: GeomTool,\n toolDef: ToolDef,\n \n e: any,\n x: number,\n y: number,\n bestHit: JxgObj | null,\n): boolean {\n if (toolDef.needs !== -1) return false;\n const snappedPoint: JxgObj | null =\n bestHit && objKind(bestHit) === 'point' ? bestHit : ctx.findNearestPointJxg(e, 12);\n const snappedId = snappedPoint ? ctx.jxgIdToSceneId(snappedPoint) : null;\n // Close ring: click back on first pending point.\n if (\n ctx.pendingIdsRef.current.length >= 3 &&\n snappedId &&\n snappedId === ctx.pendingIdsRef.current[0]\n ) {\n ctx.clearPreviewSegs();\n const vertices = ctx.pendingIdsRef.current.slice();\n const isArea = t === 'area';\n const id = freshId(ctx, isArea ? 'area' : 'poly');\n const label = ctx.nextLabel('polygon');\n // Tool 'area' = polygon + showValue + fill phân biệt visual với polygon\n // thường. JSXGraph polygon.Area() live-update khi đỉnh di chuyển.\n const attrs: Record<string, unknown> = { vertices };\n if (isArea) {\n attrs.showValue = true;\n attrs.fillOpacity = 0.18;\n attrs.color = '#1d4ed8';\n }\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'polygon', label, attrs) },\n });\n ctx.clearPending();\n return true;\n }\n if (snappedId && ctx.pendingIdsRef.current.includes(snappedId)) {\n ctx.flashWarn('Đỉnh này đã có — click điểm khác hoặc click lại điểm đầu để đóng');\n return true;\n }\n // Otherwise pick (snap-to-existing or create) a new vertex.\n let pickId: string | null = snappedId;\n let pickJxg: JxgObj | null = snappedPoint;\n if (!pickId) {\n pickId = dispatchAddFreePoint(ctx, x, y);\n pickJxg = ctx.jxgFromSceneId(pickId);\n }\n // Live preview segment from previous vertex to new pick.\n if (ctx.pendingRef.current.length > 0 && ctx.boardRef.current && pickJxg) {\n const prev = ctx.pendingRef.current[ctx.pendingRef.current.length - 1];\n safeJsx('handlers.createPreviewSegment', () => {\n const seg = ctx.boardRef.current.create('segment', [prev, pickJxg], {\n strokeColor: '#3b82f6',\n strokeWidth: 1.5,\n strokeOpacity: 0.75,\n fixed: true,\n highlight: false,\n withLabel: false,\n });\n ctx.previewSegRef.current.push(seg);\n });\n }\n if (pickJxg) ctx.pendingRef.current.push(pickJxg);\n if (pickId) ctx.pendingIdsRef.current.push(pickId);\n ctx.setPendingCount(ctx.pendingIdsRef.current.length);\n return true;\n}\n"," \ntype JxgObj = any;\n\nexport type PointVsCircle = 'inside' | 'on' | 'outside';\n\n/**\n * Classify a JXG point's position relative to a JXG circle.\n *\n * Uses a relative epsilon (max(1e-9, 1e-6 * r)) for the on-circle check so\n * that user-snapped points (which may carry tiny floating-point error)\n * register as on the circle rather than just inside/outside.\n *\n * Defensive: if either argument is null/undefined, returns 'inside' so the\n * caller will refuse to draw rather than risk a wrong tangent.\n */\nexport function classifyPointVsCircle(point: JxgObj, circle: JxgObj): PointVsCircle {\n if (!point || !circle || !circle.center) return 'inside';\n const dx = point.X() - circle.center.X();\n const dy = point.Y() - circle.center.Y();\n const d = Math.hypot(dx, dy);\n const r = typeof circle.Radius === 'function' ? circle.Radius() : Number(circle.radius);\n if (!Number.isFinite(d) || !Number.isFinite(r)) return 'inside';\n const eps = Math.max(1e-9, 1e-6 * r);\n if (Math.abs(d - r) <= eps) return 'on';\n return d < r ? 'inside' : 'outside';\n}\n","import { objKind, type ToolDef } from '../tools';\nimport type { HandlerCtx } from './ctx';\nimport { dispatchAddIntersection, freshId, mkSceneObj } from './utils';\nimport { classifyPointVsCircle } from './classifyPointVsCircle';\n\n// ─── Finalize shape (dispatch ADD per tool) ──────────────────────────────────\n\n/**\n * Tìm scene id của pending pick theo `objKind`. Dùng cho tool order-flexible\n * (perpendicular, parallel, tangent): user có thể click điểm trước hay đường\n * trước, finalizeShape dò pendingRef theo kind để biết role.\n */\nfunction findPickIdByKind(ctx: HandlerCtx, kind: 'point' | 'line' | 'circle'): string | null {\n const picks = ctx.pendingRef.current;\n const ids = ctx.pendingIdsRef.current;\n for (let i = 0; i < picks.length; i += 1) {\n if (objKind(picks[i]) === kind && ids[i]) return ids[i];\n }\n return null;\n}\n\nexport function finalizeShape(ctx: HandlerCtx, toolDef: ToolDef): void {\n const ids = ctx.pendingIdsRef.current;\n const key = toolDef.key;\n switch (key) {\n case 'segment': {\n const id = freshId(ctx, 's');\n const label = ctx.nextLabel('segment');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'segment', label, { p1: ids[0], p2: ids[1] }) },\n });\n return;\n }\n case 'line': {\n const id = freshId(ctx, 'l');\n const label = ctx.nextLabel('line');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'line', label, { p1: ids[0], p2: ids[1] }) },\n });\n return;\n }\n case 'perpendicular':\n case 'parallel': {\n const throughPoint = findPickIdByKind(ctx, 'point');\n const toLine = findPickIdByKind(ctx, 'line');\n if (!throughPoint || !toLine) return;\n const id = freshId(ctx, key === 'perpendicular' ? 'perp' : 'par');\n const label = ctx.nextLabel('line');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'line', label, {\n construction: { kind: key, throughPoint, toLine },\n }) },\n });\n return;\n }\n case 'perpBisector': {\n const id = freshId(ctx, 'pb');\n const label = ctx.nextLabel('line');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'line', label, {\n construction: { kind: 'perpBisector', p1: ids[0], p2: ids[1] },\n }) },\n });\n return;\n }\n case 'angleBisector': {\n const picks = ctx.pendingRef.current;\n // Mode 2-line: 2 picks đều là line/segment → tạo 2 scene line (2 tia\n // phân giác vuông góc với nhau qua giao điểm 2 đường).\n if (picks.length === 2 && objKind(picks[0]) === 'line' && objKind(picks[1]) === 'line') {\n for (const branch of [0, 1] as const) {\n const id = freshId(ctx, 'ab');\n const label = ctx.nextLabel('line');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'line', label, {\n construction: { kind: 'angleBisectorLines', line1: ids[0], line2: ids[1], branch },\n }) },\n });\n }\n return;\n }\n // Mode 3-point: behavior cũ.\n const id = freshId(ctx, 'ab');\n const label = ctx.nextLabel('line');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'line', label, {\n construction: { kind: 'angleBisector', p1: ids[0], vertex: ids[1], p2: ids[2] },\n }) },\n });\n return;\n }\n case 'tangent': {\n const throughId = findPickIdByKind(ctx, 'point');\n const circleId = findPickIdByKind(ctx, 'circle');\n if (!throughId || !circleId) return;\n // Lấy JXG object tương ứng để classify vị trí P vs đường tròn.\n // pendingRef + pendingIdsRef cùng index → match qua indexOf id.\n const picks = ctx.pendingRef.current;\n const ids = ctx.pendingIdsRef.current;\n const through = picks[ids.indexOf(throughId)];\n const circle = picks[ids.indexOf(circleId)];\n const pos = classifyPointVsCircle(through, circle);\n if (pos === 'inside') {\n ctx.toast?.('Điểm nằm trong đường tròn — không có tiếp tuyến', {\n variant: 'warning',\n id: 'tangent-invalid-inside',\n });\n return;\n }\n if (pos === 'on') {\n const id = freshId(ctx, 't');\n const label = ctx.nextLabel('line');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'line', label, {\n construction: { kind: 'tangent', throughPoint: throughId, toCircle: circleId, branch: 'on' },\n }) },\n });\n return;\n }\n // outside → 2 scene element riêng, mỗi cái 1 nhánh tiếp tuyến.\n for (const branch of [0, 1] as const) {\n const id = freshId(ctx, 't');\n const label = ctx.nextLabel('line');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'line', label, {\n construction: { kind: 'tangent', throughPoint: throughId, toCircle: circleId, branch },\n }) },\n });\n }\n return;\n }\n case 'ray': {\n const id = freshId(ctx, 'r');\n const label = ctx.nextLabel('ray');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'ray', label, { origin: ids[0], through: ids[1] }) },\n });\n return;\n }\n case 'vector': {\n const id = freshId(ctx, 'v');\n const label = ctx.nextLabel('vector');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'vector', label, { from: ids[0], to: ids[1] }) },\n });\n return;\n }\n case 'circleCenter': {\n const id = freshId(ctx, 'c');\n const label = ctx.nextLabel('circle');\n ctx.store.dispatch({\n type: 'ADD',\n payload: {\n obj: mkSceneObj(id, 'circle', label, {\n center: ids[0],\n surfacePoint: ids[1],\n }),\n },\n });\n return;\n }\n case 'circle3': {\n const id = freshId(ctx, 'cc');\n const label = ctx.nextLabel('circle');\n ctx.store.dispatch({\n type: 'ADD',\n payload: {\n obj: mkSceneObj(id, 'circle', label, {\n construction: { kind: 'circumscribed', p1: ids[0], p2: ids[1], p3: ids[2] },\n }),\n },\n });\n return;\n }\n case 'semicircle': {\n if (ids[0] === ids[1]) {\n ctx.toast?.('Cần 2 điểm phân biệt', { variant: 'warning', id: 'semicircle-dup' });\n return;\n }\n const id = freshId(ctx, 'arc');\n const label = ctx.nextLabel('arc');\n ctx.store.dispatch({\n type: 'ADD',\n payload: {\n obj: mkSceneObj(id, 'arc', label, {\n construction: { kind: 'semicircle', p1: ids[0], p2: ids[1] },\n }),\n },\n });\n return;\n }\n case 'arcCenter': {\n if (ids[0] === ids[1] || ids[0] === ids[2] || ids[1] === ids[2]) {\n ctx.toast?.('Cần 3 điểm phân biệt', { variant: 'warning', id: 'arc-center-dup' });\n return;\n }\n const id = freshId(ctx, 'arc');\n const label = ctx.nextLabel('arc');\n ctx.store.dispatch({\n type: 'ADD',\n payload: {\n obj: mkSceneObj(id, 'arc', label, {\n construction: { kind: 'byCenter', center: ids[0], p1: ids[1], p2: ids[2] },\n }),\n },\n });\n return;\n }\n case 'arc3': {\n if (ids[0] === ids[1] || ids[0] === ids[2] || ids[1] === ids[2]) {\n ctx.toast?.('Cần 3 điểm phân biệt', { variant: 'warning', id: 'arc3-dup' });\n return;\n }\n const picks = ctx.pendingRef.current;\n const ax = picks[0].X(), ay = picks[0].Y();\n const bx = picks[1].X(), by = picks[1].Y();\n const cx = picks[2].X(), cy = picks[2].Y();\n const cross = (bx - ax) * (cy - ay) - (by - ay) * (cx - ax);\n if (Math.abs(cross) < 1e-6) {\n ctx.toast?.('Không vẽ được cung qua 3 điểm thẳng hàng', {\n variant: 'warning', id: 'arc3-collinear',\n });\n return;\n }\n const id = freshId(ctx, 'arc');\n const label = ctx.nextLabel('arc');\n ctx.store.dispatch({\n type: 'ADD',\n payload: {\n obj: mkSceneObj(id, 'arc', label, {\n construction: { kind: 'by3Points', p1: ids[0], p2: ids[1], p3: ids[2] },\n }),\n },\n });\n return;\n }\n case 'sectorCenter': {\n if (ids[0] === ids[1] || ids[0] === ids[2] || ids[1] === ids[2]) {\n ctx.toast?.('Cần 3 điểm phân biệt', { variant: 'warning', id: 'sector-center-dup' });\n return;\n }\n const id = freshId(ctx, 'sec');\n const label = ctx.nextLabel('sector');\n ctx.store.dispatch({\n type: 'ADD',\n payload: {\n obj: mkSceneObj(id, 'sector', label, {\n construction: { kind: 'byCenter', center: ids[0], p1: ids[1], p2: ids[2] },\n }),\n },\n });\n return;\n }\n case 'midpoint': {\n const id = freshId(ctx, 'mp');\n const label = ctx.nextLabel('point');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'point', label, {\n constraint: { kind: 'midpoint', p1: ids[0], p2: ids[1] },\n }) },\n });\n return;\n }\n case 'perpFoot': {\n const fromPoint = findPickIdByKind(ctx, 'point');\n const onLine = findPickIdByKind(ctx, 'line');\n if (!fromPoint || !onLine) return;\n const id = freshId(ctx, 'pf');\n const label = ctx.nextLabel('point');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'point', label, {\n constraint: { kind: 'perpFoot', from: fromPoint, onLine },\n }) },\n });\n return;\n }\n case 'centroid': {\n const id = freshId(ctx, 'g');\n const label = ctx.nextLabel('point');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'point', label, {\n constraint: { kind: 'centroid', vertices: [ids[0], ids[1], ids[2]] },\n }) },\n });\n return;\n }\n case 'circumcenter': {\n const id = freshId(ctx, 'o');\n const label = ctx.nextLabel('point');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'point', label, {\n constraint: { kind: 'circumcenter', vertices: [ids[0], ids[1], ids[2]] },\n }) },\n });\n return;\n }\n case 'incenter': {\n const id = freshId(ctx, 'i');\n const label = ctx.nextLabel('point');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'point', label, {\n constraint: { kind: 'incenter', vertices: [ids[0], ids[1], ids[2]] },\n }) },\n });\n return;\n }\n case 'orthocenter': {\n const id = freshId(ctx, 'h');\n const label = ctx.nextLabel('point');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'point', label, {\n constraint: { kind: 'orthocenter', vertices: [ids[0], ids[1], ids[2]] },\n }) },\n });\n return;\n }\n case 'angle': {\n // ids = [p1, vertex, p2] — tool def 'accepts: [\"point\", \"point\", \"point\"]'\n // và LeftPanel hint \"Click 3 điểm có sẵn (đỉnh ở giữa)\". User click theo\n // thứ tự: cạnh-A, đỉnh, cạnh-B.\n const id = freshId(ctx, 'ang');\n const label = ctx.nextLabel('angle');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'angle', label, {\n p1: ids[0], vertex: ids[1], p2: ids[2],\n }) },\n });\n return;\n }\n case 'distance': {\n const id = freshId(ctx, 'd');\n const label = ctx.nextLabel('distance');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'distance', label, { p1: ids[0], p2: ids[1] }) },\n });\n return;\n }\n case 'intersect': {\n // ids[0], ids[1] là line hoặc circle theo accept 'lineOrCircle'.\n // Resolve kind từ pendingRef để biết lineLine / lineCircle / circleCircle.\n const picks = ctx.pendingRef.current;\n const pendIds = ctx.pendingIdsRef.current;\n const aIdx = pendIds.indexOf(ids[0]);\n const bIdx = pendIds.indexOf(ids[1]);\n if (aIdx < 0 || bIdx < 0) return;\n const aKind = objKind(picks[aIdx]);\n const bKind = objKind(picks[bIdx]);\n if (aKind === 'line' && bKind === 'line') {\n dispatchAddIntersection(ctx, { kind: 'lineLine', ref1: ids[0], ref2: ids[1] });\n return;\n }\n const isLineCircle =\n (aKind === 'line' && bKind === 'circle') || (aKind === 'circle' && bKind === 'line');\n const isCircleCircle = aKind === 'circle' && bKind === 'circle';\n if (!isLineCircle && !isCircleCircle) return;\n // 2 nhánh → tạo 2 scene intersection (giống GeoGebra \"Intersect Two Objects\").\n for (const branch of [0, 1] as const) {\n dispatchAddIntersection(ctx, {\n kind: isLineCircle ? 'lineCircle' : 'circleCircle',\n ref1: ids[0],\n ref2: ids[1],\n branch,\n });\n }\n return;\n }\n default:\n return;\n }\n}\n"," \nexport type JxgObj = any;\n\nimport type { State, SceneObject } from '../../../core/scene';\n\n/**\n * Trả về danh sách id điểm \"định nghĩa\" object — dùng cho transform tools\n * (translate/rotate/reflect/dilate) cần biết các điểm gốc để clone.\n *\n * Signature: `(obj: SceneObject, state: State)`. `state` được pass để\n * forward-compatible với các kind phái sinh (vd: lookup dependentsOf cho\n * compound shapes); hiện tại chỉ đọc `obj.kind` + `obj.attrs`.\n */\nexport function getDefiningPoints(obj: SceneObject, _state: State): string[] {\n if (obj.kind === 'point' || obj.kind === 'intersection') return [obj.id];\n if (obj.kind === 'segment' || obj.kind === 'line') {\n const a = obj.attrs as { p1: string; p2: string };\n return [a.p1, a.p2];\n }\n if (obj.kind === 'ray') {\n const a = obj.attrs as { origin: string; through: string };\n return [a.origin, a.through];\n }\n if (obj.kind === 'vector') {\n const a = obj.attrs as { from: string; to: string };\n return [a.from, a.to];\n }\n if (obj.kind === 'circle') {\n const a = obj.attrs as { center: string; surfacePoint: string };\n return [a.center, a.surfacePoint];\n }\n if (obj.kind === 'polygon') {\n return [...(obj.attrs as { vertices: string[] }).vertices];\n }\n return [];\n}\n\nexport type TransformInput =\n | { kind: 'translate'; vectorPoints: [JxgObj, JxgObj] }\n | { kind: 'rotate'; center: JxgObj; angleDeg: number }\n | { kind: 'reflectLine'; line: JxgObj }\n | { kind: 'reflectPoint'; center: JxgObj }\n | { kind: 'dilate'; center: JxgObj; k: number };\n\nexport interface TransformSpec {\n params: unknown[];\n attrs: { type: 'translate' | 'rotate' | 'reflect' | 'scale' };\n /**\n * Khi `chain` được set, finalizeTransformCreate dựng từng transform trong chain\n * (theo thứ tự) rồi pass mảng vào `board.create('point', [src, [t1, t2, t3]])`.\n * Dùng cho `dilate` (scale-quanh-điểm) vì JSXGraph 'scale' không nhận center.\n */\n chain?: Array<{ params: unknown[]; attrs: { type: 'translate' | 'rotate' | 'reflect' | 'scale' } }>;\n}\n\nexport function buildTransformSpec(input: TransformInput): TransformSpec {\n switch (input.kind) {\n case 'translate': {\n // Literal dx/dy (không phải callback) để serialize qua JSON.stringify được.\n // Trade-off: transformed object không cập nhật khi user kéo điểm vector — chấp nhận.\n const [a, b] = input.vectorPoints;\n const dx = b.X() - a.X();\n const dy = b.Y() - a.Y();\n return { params: [dx, dy], attrs: { type: 'translate' } };\n }\n case 'rotate':\n return {\n params: [(input.angleDeg * Math.PI) / 180, input.center],\n attrs: { type: 'rotate' },\n };\n case 'reflectLine':\n return { params: [input.line], attrs: { type: 'reflect' } };\n case 'reflectPoint':\n // JSXGraph 'scale' chỉ nhận 2 tham số (sx, sy) và scale quanh gốc toạ độ —\n // tham số center thứ 3 bị lờ → trước đây sai. Đối xứng qua điểm = quay 180°\n // quanh điểm đó. Dùng 'rotate' (params [angle, center]) để chuẩn.\n return { params: [Math.PI, input.center], attrs: { type: 'rotate' } };\n case 'dilate':\n // JSXGraph 'scale' chỉ nhận đúng 2 tham số (sx, sy) và scale quanh gốc toạ độ —\n // tham số center thứ 3 làm constructor throw. Dilate quanh điểm c bằng tỷ số k\n // = compose 3 phép: T(-c) → S(k,k) → T(+c). Sinh ra chain (mảng spec) thay vì\n // 1 spec đơn; consumer (finalizeTransformCreate) tự nhận biết.\n return {\n params: [],\n attrs: { type: 'scale' },\n chain: [\n { params: [-input.center.X(), -input.center.Y()], attrs: { type: 'translate' as const } },\n { params: [input.k, input.k], attrs: { type: 'scale' as const } },\n { params: [input.center.X(), input.center.Y()], attrs: { type: 'translate' as const } },\n ],\n };\n }\n}\n","import type { TransformDef } from '../../../../core/scene/kinds/2d-constraint';\nimport { getDefiningPoints } from '../transforms';\nimport type { HandlerCtx, TransformToolKey } from './ctx';\nimport { freshId, mkSceneObj } from './utils';\n\nexport function finalizeTransform(\n ctx: HandlerCtx,\n tool: TransformToolKey,\n pendingIds: string[],\n value: number,\n): void {\n if (tool === 'regularPolygon') {\n const n = Math.max(3, Math.round(value));\n const id = freshId(ctx, 'rpoly');\n const label = ctx.nextLabel('polygon');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'polygon', label, {\n construction: { kind: 'regular', p1: pendingIds[0], p2: pendingIds[1], n },\n }) },\n });\n return;\n }\n\n // 5 transform tools: pendingIds[0] = source object.\n const sourceId = pendingIds[0];\n const state = ctx.store.getState();\n const source = state.objects[sourceId];\n if (!source) {\n ctx.flashWarn('Đối tượng nguồn không còn');\n return;\n }\n const defining = getDefiningPoints(source, state);\n if (defining.length === 0) {\n ctx.flashWarn('Không thể biến đổi đối tượng này');\n return;\n }\n\n let transformDef: TransformDef | null = null;\n if (tool === 'translate') {\n // pendingIds = [source, A, B]; vector = B − A. Đọc toạ độ live qua JxgObj.\n const a = ctx.jxgFromSceneId(pendingIds[1]);\n const b = ctx.jxgFromSceneId(pendingIds[2]);\n if (!a || !b || typeof a.X !== 'function' || typeof b.X !== 'function') {\n ctx.flashWarn('Không đọc được toạ độ vector');\n return;\n }\n transformDef = { kind: 'translate', dx: b.X() - a.X(), dy: b.Y() - a.Y() };\n } else if (tool === 'rotate') {\n transformDef = { kind: 'rotate', angleRad: (value * Math.PI) / 180, center: pendingIds[1] };\n } else if (tool === 'reflectLine') {\n transformDef = { kind: 'reflectLine', line: pendingIds[1] };\n } else if (tool === 'reflectPoint') {\n transformDef = { kind: 'reflectPoint', center: pendingIds[1] };\n } else if (tool === 'dilate') {\n transformDef = { kind: 'dilate', k: value, center: pendingIds[1] };\n }\n if (!transformDef) return;\n\n // Tạo N transformed point + collect ids. Dispatch tuần tự (không gom vào\n // transaction) vì freshId/nextLabel cần đọc state đã commit để cấp id+label\n // không trùng. Trade-off: undo sẽ tách thành N+1 step thay vì 1.\n const newPointIds: string[] = [];\n for (const defId of defining) {\n const newId = freshId(ctx, 'p');\n const newLabel = ctx.nextLabel('point');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(newId, 'point', newLabel, {\n constraint: { kind: 'transformed', source: defId, transform: transformDef! },\n color: '#0ea5e9',\n }) },\n });\n newPointIds.push(newId);\n }\n // Tạo wrapper cùng kind từ N point mới (point thì không cần wrapper).\n recreateFromTransformedPoints(ctx, source, newPointIds);\n}\n\n/**\n * Dựng object cùng kind với source từ N point đã transform. Tuân thủ schema\n * attrs của kind tương ứng. Không hỗ trợ kind 'point' (đã có sẵn point biến\n * hình), 'intersection' / 'angle' / 'distance' (measurement — không có ý\n * nghĩa biến hình), 'circle' với construction circumscribed.\n */\nfunction recreateFromTransformedPoints(\n ctx: HandlerCtx,\n source: { kind: string; attrs: Record<string, unknown> },\n pointIds: string[],\n): void {\n const k = source.kind;\n if (k === 'point' || k === 'intersection') return; // point đơn đã có sẵn\n\n if (k === 'segment' && pointIds.length === 2) {\n const id = freshId(ctx, 's');\n const label = ctx.nextLabel('segment');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'segment', label, { p1: pointIds[0], p2: pointIds[1], color: '#0ea5e9' }) },\n });\n return;\n }\n if (k === 'line' && pointIds.length === 2) {\n const id = freshId(ctx, 'l');\n const label = ctx.nextLabel('line');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'line', label, { p1: pointIds[0], p2: pointIds[1], color: '#0ea5e9' }) },\n });\n return;\n }\n if (k === 'ray' && pointIds.length === 2) {\n const id = freshId(ctx, 'r');\n const label = ctx.nextLabel('ray');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'ray', label, { origin: pointIds[0], through: pointIds[1], color: '#0ea5e9' }) },\n });\n return;\n }\n if (k === 'vector' && pointIds.length === 2) {\n const id = freshId(ctx, 'v');\n const label = ctx.nextLabel('vector');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'vector', label, { from: pointIds[0], to: pointIds[1], color: '#0ea5e9' }) },\n });\n return;\n }\n if (k === 'circle' && pointIds.length === 2) {\n const id = freshId(ctx, 'c');\n const label = ctx.nextLabel('circle');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'circle', label, { center: pointIds[0], surfacePoint: pointIds[1], color: '#0ea5e9' }) },\n });\n return;\n }\n if (k === 'polygon' && pointIds.length >= 3) {\n const id = freshId(ctx, 'poly');\n const label = ctx.nextLabel('polygon');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'polygon', label, { vertices: pointIds, color: '#0ea5e9' }) },\n });\n return;\n }\n // Other kinds (angle/distance/derived line constructions) — biến hình không\n // có ý nghĩa định nghĩa. Bỏ qua.\n}\n","import { objKind, type ToolDef } from '../../tools';\nimport type { HandlerCtx } from '../ctx';\nimport { dispatchAddFreePoint } from '../utils';\nimport { finalizeShape } from '../finalizeShape';\nimport { finalizeTransform } from '../transform';\n\n \ntype JxgObj = any;\n\nexport function handleMultiClickTool(\n ctx: HandlerCtx,\n toolDef: ToolDef,\n \n e: any,\n x: number,\n y: number,\n hits: JxgObj[],\n bestHit: JxgObj | null,\n): void {\n let pick: JxgObj | null = null;\n let pickId: string | null = null;\n\n if (toolDef.accepts) {\n // --- Mode A: strict, order-flexible ---\n const usedKinds = ctx.pendingRef.current.map((p) => objKind(p));\n const remaining: Array<'point' | 'line' | 'circle' | 'any' | 'lineOrCircle' | 'pointOrLine'> = [...toolDef.accepts];\n for (const u of usedKinds) {\n if (u === 'other') continue;\n // 'lineOrCircle' slot có thể được lấp bởi line hoặc circle.\n // 'pointOrLine' slot có thể được lấp bởi point hoặc line.\n let i = remaining.indexOf(u);\n if (i < 0 && (u === 'line' || u === 'circle')) i = remaining.indexOf('lineOrCircle');\n if (i < 0 && (u === 'point' || u === 'line')) i = remaining.indexOf('pointOrLine');\n if (i >= 0) remaining.splice(i, 1);\n }\n const strictPoint = hits.find((o) => objKind(o) === 'point') ?? null;\n const lineHit = hits.find((o) => objKind(o) === 'line') ?? null;\n const circleHit = hits.find((o) => objKind(o) === 'circle') ?? null;\n if (remaining.includes('point') && strictPoint) pick = strictPoint;\n else if (remaining.includes('line') && lineHit) pick = lineHit;\n else if (remaining.includes('circle') && circleHit) pick = circleHit;\n else if (remaining.includes('lineOrCircle') && (lineHit || circleHit)) {\n pick = lineHit ?? circleHit;\n }\n else if (remaining.includes('pointOrLine') && (strictPoint || lineHit)) {\n pick = strictPoint ?? lineHit;\n }\n else if (remaining.includes('any') && (strictPoint || lineHit || circleHit)) {\n pick = strictPoint ?? lineHit ?? circleHit;\n } else if (remaining.includes('point') || remaining.includes('pointOrLine')) {\n const near = ctx.findNearestPointJxg(e, 12);\n if (near) {\n pick = near;\n } else {\n // Mode A tool nhận 'point' / 'pointOrLine' + click khu vực rỗng → tự tạo\n // free point tại vị trí click. Đỡ cho user phải đổi sang tool 'point'\n // rồi quay lại (tangent / perpendicular / parallel / angleBisector ...).\n // Các slot khác (line/circle) vẫn yêu cầu hit object có sẵn.\n //\n // angleBisector: nếu lần click đầu đã là line thì cấm tạo free-point\n // (mode 2-line đã chốt) — handled by mode-consistency check phía dưới.\n //\n // pickId set trực tiếp từ return value của dispatchAddFreePoint vì\n // reverse-map (jxgIdToSceneRef) được rebuild qua store subscribe →\n // chưa sync xong tại thời điểm này; gọi jxgIdToSceneId(pick) sẽ ra null.\n if (toolDef.key === 'angleBisector' && ctx.pendingRef.current.length > 0\n && objKind(ctx.pendingRef.current[0]) === 'line') {\n ctx.flashWarn('Đã chọn đường — click thêm 1 đường/đoạn nữa để tạo 2 tia phân giác');\n return;\n }\n pickId = dispatchAddFreePoint(ctx, x, y);\n pick = ctx.jxgFromSceneId(pickId);\n }\n }\n if (!pick) {\n const needs = remaining.map((k) =>\n k === 'point' ? 'một điểm'\n : k === 'line' ? 'một đường/đoạn'\n : k === 'circle' ? 'một đường tròn'\n : k === 'lineOrCircle' ? 'một đường hoặc đường tròn'\n : k === 'pointOrLine' ? 'một điểm hoặc đường/đoạn'\n : 'một đối tượng',\n );\n ctx.flashWarn(`Còn cần click vào ${needs.join(' + ')} có sẵn`);\n return;\n }\n if (ctx.pendingRef.current.includes(pick)) {\n ctx.flashWarn('Đã chọn đối tượng này — chọn đối tượng khác');\n return;\n }\n // angleBisector: ép tính nhất quán mode (3-point ↔ 2-line) — không trộn lẫn.\n if (toolDef.key === 'angleBisector' && ctx.pendingRef.current.length > 0) {\n const firstKind = objKind(ctx.pendingRef.current[0]);\n const newKind = objKind(pick);\n if (firstKind === 'line' && newKind !== 'line') {\n ctx.flashWarn('Đã chọn đường — chỉ click thêm 1 đường/đoạn nữa');\n return;\n }\n if (firstKind === 'point' && newKind !== 'point') {\n ctx.flashWarn('Đã chọn điểm — click thêm điểm (đỉnh ở giữa)');\n return;\n }\n }\n if (!pickId) pickId = ctx.jxgIdToSceneId(pick);\n } else {\n // --- Mode B: lenient, all slots want a point ---\n const snapped = bestHit && objKind(bestHit) === 'point' ? bestHit : ctx.findNearestPointJxg(e, 12);\n if (snapped && ctx.pendingRef.current.includes(snapped)) {\n ctx.flashWarn('Đã chọn điểm này — chọn điểm khác hoặc click chỗ trống');\n return;\n }\n if (snapped) {\n pick = snapped;\n pickId = ctx.jxgIdToSceneId(snapped);\n } else {\n pickId = dispatchAddFreePoint(ctx, x, y);\n pick = ctx.jxgFromSceneId(pickId);\n }\n }\n\n if (!pick) return;\n ctx.pendingRef.current.push(pick);\n if (pickId) ctx.pendingIdsRef.current.push(pickId);\n ctx.setPendingCount(ctx.pendingIdsRef.current.length);\n\n // angleBisector 2-line mode: finalize ngay khi đủ 2 đường (không chờ 3 picks).\n if (toolDef.key === 'angleBisector'\n && ctx.pendingIdsRef.current.length === 2\n && objKind(ctx.pendingRef.current[0]) === 'line') {\n finalizeShape(ctx, toolDef);\n ctx.clearPending();\n return;\n }\n\n if (ctx.pendingIdsRef.current.length >= toolDef.needs) {\n const tk = toolDef.key;\n // 3 popover transform tools cần numeric input (góc / tỷ số / số cạnh) trước\n // khi finalize → emit info để MiniBoard show TransformParamPopover.\n if (tk === 'rotate' || tk === 'dilate' || tk === 'regularPolygon') {\n const cx = ((e.clientX ?? 0) as number) + 8;\n const cy = ((e.clientY ?? 0) as number) + 8;\n ctx.pendingTransformRef.current = {\n tool: tk,\n pendingIds: ctx.pendingIdsRef.current.slice(),\n anchorScreen: { x: cx, y: cy },\n };\n ctx.emitTransform({ tool: tk, anchor: { x: cx, y: cy } });\n // Don't clearPending — wait for confirm/cancel from MiniBoard.\n return;\n }\n // 3 no-popover transform tools (translate/reflectLine/reflectPoint):\n // finalize ngay khi đủ pick — không cần numeric param.\n if (tk === 'translate' || tk === 'reflectLine' || tk === 'reflectPoint') {\n finalizeTransform(ctx, tk, ctx.pendingIdsRef.current.slice(), 0);\n ctx.clearPending();\n return;\n }\n\n // Non-transform multi-click tools: dispatch ADD for the shape directly.\n finalizeShape(ctx, toolDef);\n ctx.clearPending();\n } else {\n ctx.refreshPreview();\n }\n}\n","import { objKind, TOOLS } from '../../tools';\nimport type { HandlerCtx } from '../ctx';\nimport { handleMoveTool } from './move';\nimport { handleSelectTool } from './select';\nimport { handlePointTool } from './point';\nimport { handleSingleTargetTool } from './singleTarget';\nimport { handlePolygonTool } from './polygon';\nimport { handleMultiClickTool } from './multiClick';\n\n \nexport function handleDown(ctx: HandlerCtx, e: any): void {\n if (!ctx.boardRef.current) return;\n const t = ctx.toolRef.current;\n\n if (t === 'move') return handleMoveTool(ctx, e);\n if (t === 'select') return handleSelectTool(ctx, e);\n\n const toolDef = TOOLS.find((td) => td.key === t);\n if (!toolDef) return;\n\n const coords = ctx.boardRef.current.getUsrCoordsOfMouse(e);\n const x = coords[0], y = coords[1];\n\n // Detect if click hits any existing object (snap target).\n // Filter hits không có scene id (vd auxiliary points của 'regularpolygon' do\n // JSXGraph tự sinh — không có id trong renderer.elements, không thể dùng làm\n // pick cho tool). Nếu không filter, aux point sẽ cướp click khỏi border/edge\n // bên cạnh, làm tool perp/parallel/... đứng yên không tiến tới needs.\n const hits = ctx.objectsAt(e)\n .map(ctx.promoteLabel)\n .filter((o) => o !== ctx.axisObjsRef.current.x && o !== ctx.axisObjsRef.current.y)\n .filter((o) => ctx.jxgIdToSceneId(o) != null);\n const bestHit = hits.find((o) => objKind(o) === 'point') ?? hits[0] ?? null;\n\n if (t === 'point') return handlePointTool(ctx, e, x, y, hits);\n if (handleSingleTargetTool(ctx, t, toolDef, e, bestHit)) return;\n if (handlePolygonTool(ctx, t, toolDef, e, x, y, bestHit)) return;\n\n handleMultiClickTool(ctx, toolDef, e, x, y, hits, bestHit);\n}\n","import { safeJsx } from '../../../shared/safeJsx';\nimport type { HandlerCtx } from './ctx';\n\n// ─── board.on('move') ────────────────────────────────────────────────────────\n\n \nexport function handleMove(ctx: HandlerCtx, e: any): void {\n // Marquee rectangle redraw while user drags with the select tool on empty space.\n if (ctx.toolRef.current === 'select' && ctx.marqueeRef.current) {\n const sc = ctx.screenCoordsOf(e);\n if (sc && ctx.boardRef.current) {\n const [sx, sy] = sc;\n const { startSx, startSy } = ctx.marqueeRef.current;\n const b = ctx.boardRef.current;\n const ux1 = b.screenCoords2userCoords?.([Math.min(startSx, sx), Math.min(startSy, sy)]) ?? null;\n const ux2 = b.screenCoords2userCoords?.([Math.max(startSx, sx), Math.max(startSy, sy)]) ?? null;\n const toUsr = (px: number, py: number): [number, number] => {\n const ox = b.origin?.scrCoords?.[1] ?? 0;\n const oy = b.origin?.scrCoords?.[2] ?? 0;\n const ux = (px - ox) / b.unitX;\n const uy = (oy - py) / b.unitY;\n return [ux, uy];\n };\n const [x1u, y1u] = ux1 && ux1.length >= 2 ? [ux1[0], ux1[1]] : toUsr(Math.min(startSx, sx), Math.min(startSy, sy));\n const [x2u, y2u] = ux2 && ux2.length >= 2 ? [ux2[0], ux2[1]] : toUsr(Math.max(startSx, sx), Math.max(startSy, sy));\n const rect = ctx.marqueeRef.current.rect;\n if (rect) {\n safeJsx('handlers.removeObject(marquee.prevRect)', () => ctx.boardRef.current.removeObject(rect));\n }\n safeJsx('handlers.createMarqueePolygon', () => {\n ctx.marqueeRef.current!.rect = ctx.boardRef.current.create('polygon', [\n [x1u, y1u], [x2u, y1u], [x2u, y2u], [x1u, y2u],\n ], {\n fillColor: '#06b6d4', fillOpacity: 0.08,\n borders: { strokeColor: '#06b6d4', strokeWidth: 1, dash: 2 },\n vertices: { visible: false },\n fixed: true, highlight: false, withLabel: false,\n });\n });\n }\n return;\n }\n const ph = ctx.phantomRef.current;\n if (!ph || !ctx.boardRef.current) return;\n if (ctx.previewRafRef.current != null) return;\n ctx.previewRafRef.current = requestAnimationFrame(() => {\n ctx.previewRafRef.current = null;\n if (!ctx.boardRef.current || !ctx.phantomRef.current) return;\n safeJsx('handlers.phantomMove', () => {\n const coords = ctx.boardRef.current.getUsrCoordsOfMouse(e);\n \n const JXG: any = ctx.jxgRef.current;\n if (!JXG) return;\n ctx.phantomRef.current.setPositionDirectly(JXG.COORDS_BY_USER, [coords[0], coords[1]]);\n ctx.boardRef.current.update();\n });\n });\n}\n"," \ntype JxgObj = any;\n\nimport { objKind } from '../tools';\nimport { safeJsx } from '../../../shared/safeJsx';\nimport type { HandlerCtx } from './ctx';\n\n// ─── board.on('up') ───────────────────────────────────────────────────────────\n\n \nexport function handleUp(ctx: HandlerCtx, e: any): void {\n const t = ctx.toolRef.current;\n if (t === 'select') {\n const mq = ctx.marqueeRef.current;\n ctx.marqueeRef.current = null;\n ctx.moveDownRef.current = null;\n if (!mq) return;\n const sc = ctx.screenCoordsOf(e);\n if (!sc) return;\n const [ex, ey] = sc;\n if (mq.rect) { safeJsx('handlers.removeObject(marquee.rect)', () => ctx.boardRef.current?.removeObject(mq.rect)); }\n if (Math.hypot(ex - mq.startSx, ey - mq.startSy) < 4) return; // not a real drag\n const x1 = Math.min(mq.startSx, ex), x2 = Math.max(mq.startSx, ex);\n const y1 = Math.min(mq.startSy, ey), y2 = Math.max(mq.startSy, ey);\n const board = ctx.boardRef.current;\n if (!board) return;\n const list = (board.objectsList || []) as JxgObj[];\n for (const o of list) {\n if (o === ctx.axisObjsRef.current.x || o === ctx.axisObjsRef.current.y) continue;\n const kind = objKind(o);\n if (kind === 'point') {\n const pc = o.coords?.scrCoords;\n if (!pc) continue;\n if (pc[1] >= x1 && pc[1] <= x2 && pc[2] >= y1 && pc[2] <= y2) {\n const sid = ctx.jxgIdToSceneId(o);\n if (sid && !ctx.selectedSetRef.current.has(sid)) {\n ctx.selectedSetRef.current.add(sid);\n }\n }\n } else if (kind === 'line' || kind === 'circle') {\n \n const defs: any[] = [o.point1, o.point2, o.center, o.midpoint, o.point3].filter(Boolean);\n const anyInside = defs.some((p) => {\n const pc = p?.coords?.scrCoords;\n return pc && pc[1] >= x1 && pc[1] <= x2 && pc[2] >= y1 && pc[2] <= y2;\n });\n if (anyInside) {\n const sid = ctx.jxgIdToSceneId(o);\n if (sid && !ctx.selectedSetRef.current.has(sid)) {\n ctx.selectedSetRef.current.add(sid);\n }\n }\n }\n }\n ctx.setSelectionTick((tt) => tt + 1);\n safeJsx('handlers.board.update(marquee)', () => board.update());\n return;\n }\n if (t !== 'move') return;\n const start = ctx.moveDownRef.current;\n ctx.moveDownRef.current = null;\n if (!start) return;\n const sc = ctx.screenCoordsOf(e);\n if (!sc) return;\n const [sx, sy] = sc;\n const moved = Math.hypot(sx - start.sx, sy - start.sy);\n if (moved > 4) return; // drag, không phải click\n const hits = ctx.objectsAt(e)\n .map(ctx.promoteLabel)\n .filter((o) => o !== ctx.axisObjsRef.current.x && o !== ctx.axisObjsRef.current.y)\n .filter((o) => ctx.jxgIdToSceneId(o) != null);\n const best: JxgObj | null =\n hits.find((o) => objKind(o) === 'point') ?? ctx.findNearestPointJxg(e, 12) ?? hits[0] ?? null;\n if (!best) {\n ctx.lastMoveClickRef.current = { id: null, time: 0 };\n return;\n }\n const bestId = ctx.jxgIdToSceneId(best);\n const now = Date.now();\n const isDouble =\n bestId !== null && ctx.lastMoveClickRef.current.id === bestId && (now - ctx.lastMoveClickRef.current.time) < 400;\n ctx.lastMoveClickRef.current = { id: bestId, time: now };\n if (!isDouble) return;\n const cx = (e.clientX ?? e.touches?.[0]?.clientX ?? 0) as number;\n const cy = (e.clientY ?? e.touches?.[0]?.clientY ?? 0) as number;\n if (!bestId) return;\n ctx.emitSelect({ id: bestId, anchorScreen: { x: cx + 8, y: cy + 8 } });\n}\n","export { handleDown } from './pointerDown';\nexport { handleMove } from './pointerMove';\nexport { handleUp } from './pointerUp';\nexport { finalizeTransform } from './transform';\nexport type { HandlerCtx, TransformToolKey } from './ctx';\n","// src/stamps/geometry-2d/editor/hitTest.ts\nimport type { State, SceneObject } from '../../../core/scene';\nimport { listObjects } from '../../../core/scene';\nimport { safeJsx } from '../../shared/safeJsx';\n\n \ntype JxgObj = any;\n\n/**\n * Tìm point gần (x, y) nhất trong state, trong vòng tol.\n *\n * Sử dụng `pointCoord(id) => [x, y] | null` để hit-test theo toạ độ JSXGraph\n * thực tế (resolve qua JxgRenderer Map). Trả về `null` nếu không có point nào\n * trong vòng tol.\n */\nexport function findNearestPoint(\n state: State,\n pointCoord: (id: string) => [number, number] | null,\n x: number,\n y: number,\n tolPx: number,\n excludeIds: Set<string> = new Set(),\n): SceneObject | null {\n let best: SceneObject | null = null;\n let bestDistSq = tolPx * tolPx;\n for (const obj of listObjects(state)) {\n if (obj.kind !== 'point' && obj.kind !== 'intersection') continue;\n if (excludeIds.has(obj.id)) continue;\n const coord = pointCoord(obj.id);\n if (!coord) continue;\n const dx = coord[0] - x;\n const dy = coord[1] - y;\n const d2 = dx * dx + dy * dy;\n if (d2 < bestDistSq) {\n bestDistSq = d2;\n best = obj;\n }\n }\n return best;\n}\n\n/**\n * Lấy screen coords (x, y px) của event dưới cursor. Ưu tiên JSXGraph's\n * `getMousePosition`; fallback về container's getBoundingClientRect (cần cho\n * touch event hoặc khi board chưa cache mouse position).\n */\nexport function screenCoordsOf(\n board: JxgObj,\n container: HTMLElement | null,\n evt: JxgObj,\n): [number, number] | null {\n if (!board) return null;\n try {\n const mp = board.getMousePosition ? board.getMousePosition(evt) : null;\n if (mp && mp.length >= 2) return [mp[0], mp[1]];\n } catch { /* fall through to container rect */ }\n if (container) {\n const rect = container.getBoundingClientRect();\n const cx = evt.clientX ?? evt.touches?.[0]?.clientX ?? 0;\n const cy = evt.clientY ?? evt.touches?.[0]?.clientY ?? 0;\n return [cx - rect.left, cy - rect.top];\n }\n return null;\n}\n\n/**\n * List JSXGraph objects whose `hasPoint(sx, sy)` chứa cursor — đã loại\n * `excludes` (vd phantom + preview shape + preview segments).\n *\n * Phantom là invisible point JSXGraph kéo theo cursor để dựng live-preview;\n * nếu không loại trừ, click chỗ trống sẽ snap trúng phantom (cách click 0px)\n * → drawing \"đứng\" vì pendingRef nhét phantom (không có scene id), tool\n * không tiến tới được `needs` threshold. (Regression từ commit 95a6c13.)\n */\nexport function objectsAt(\n board: JxgObj,\n container: HTMLElement | null,\n evt: JxgObj,\n excludes: Iterable<JxgObj>,\n): JxgObj[] {\n const sc = screenCoordsOf(board, container, evt);\n if (!board || !sc) return [];\n const [sx, sy] = sc;\n const excludeSet = new Set<JxgObj>();\n for (const e of excludes) if (e) excludeSet.add(e);\n const out: JxgObj[] = [];\n safeJsx('hitTest.objectsAt', () => {\n for (const o of (board.objectsList || [])) {\n if (excludeSet.has(o)) continue;\n if (o && typeof o.hasPoint === 'function' && o.hasPoint(sx, sy)) out.push(o);\n }\n });\n return out;\n}\n\n/**\n * Tìm JSXGraph point gần cursor (trong `tolPx` pixels). Dùng `findNearestPoint`\n * với `pointCoord` đọc từ JSXGraph's `coords.scrCoords` qua resolver `jxgFromSceneId`.\n * Trả JSXGraph object (không phải scene id) để caller dùng làm pick.\n */\nexport function findNearestJxgPoint(\n board: JxgObj,\n container: HTMLElement | null,\n state: State,\n jxgFromSceneId: (id: string) => JxgObj | null,\n evt: JxgObj,\n tolPx = 12,\n): JxgObj | null {\n const sc = screenCoordsOf(board, container, evt);\n if (!board || !sc) return null;\n const [sx, sy] = sc;\n const pointCoord = (id: string): [number, number] | null => {\n const j = jxgFromSceneId(id);\n const sc2 = j?.coords?.scrCoords;\n return sc2 ? [sc2[1], sc2[2]] : null;\n };\n const result = findNearestPoint(state, pointCoord, sx, sy, tolPx);\n return result ? jxgFromSceneId(result.id) : null;\n}\n\n/**\n * Khi user click trúng label text của một element, JSXGraph trả về text obj\n * thay vì owner. Promote về owner để properties popover hiển thị đúng\n * properties của shape, không phải của text.\n */\nexport function promoteToLabelOwner(board: JxgObj, o: JxgObj): JxgObj {\n if (!o) return o;\n const t = (o.elType || o.type || '').toString().toLowerCase();\n if (t !== 'text' || !board) return o;\n const promoted = safeJsx<JxgObj | null>('hitTest.promoteToLabelOwner', () => {\n for (const c of (board.objectsList || [])) {\n if (c.label === o) return c;\n }\n return null;\n }, null);\n return promoted ?? o;\n}\n","import { useCallback, useRef, useState } from 'react';\n\nexport type ToolStateMachine<T extends string> = {\n tool: T;\n pendingIds: string[];\n toolRef: { readonly current: T };\n pendingIdsRef: { readonly current: string[] };\n setTool: (t: T) => void;\n pushPending: (id: string) => void;\n clearPending: () => void;\n};\n\n/**\n * Tool + pending ids state machine, generic theo tool union type.\n *\n * - `setTool` clears pending — chuyển tool đang xây thì huỷ build dở.\n * - Ref + state song song để handler stable-closure read được giá trị mới\n * mà UI vẫn re-render khi giá trị đổi.\n *\n * Shared cho geometry-2d (`GeomTool`) và graph-2d (`GraphTool`); thêm consumer\n * mới chỉ cần pass union literal type.\n */\nexport function useToolStateMachine<T extends string>(initial: T): ToolStateMachine<T> {\n const [tool, setToolState] = useState<T>(initial);\n const [pendingIds, setPendingIds] = useState<string[]>([]);\n const toolRef = useRef<T>(initial);\n const pendingIdsRef = useRef<string[]>([]);\n\n const setTool = useCallback((t: T) => {\n toolRef.current = t;\n pendingIdsRef.current = [];\n setToolState(t);\n setPendingIds([]);\n }, []);\n\n const pushPending = useCallback((id: string) => {\n pendingIdsRef.current = [...pendingIdsRef.current, id];\n setPendingIds(pendingIdsRef.current);\n }, []);\n\n const clearPending = useCallback(() => {\n pendingIdsRef.current = [];\n setPendingIds([]);\n }, []);\n\n return { tool, pendingIds, toolRef, pendingIdsRef, setTool, pushPending, clearPending };\n}\n","import { safeJsx } from './safeJsx';\n\n/**\n * Minimal JSXGraph board surface that wheel-zoom logic depends on.\n * Local shape to avoid importing the (untyped) jsxgraph default export here.\n */\nexport interface JxgBoardZoomable {\n zoomIn: (x?: number, y?: number) => void;\n zoomOut: (x?: number, y?: number) => void;\n // JSXGraph older versions may not expose this — wheel still works, just\n // without cursor-anchored zoom (falls back to board-center).\n getUsrCoordsOfMouse?: (e: WheelEvent) => unknown;\n}\n\n/**\n * Attach Excalidraw-style Ctrl/Cmd + wheel zoom to a container element.\n *\n * - Khi wheel kèm Ctrl/Cmd: preventDefault + zoom in/out với anchor tại\n * con trỏ (nếu board hỗ trợ `getUsrCoordsOfMouse`).\n * - Khi wheel không kèm modifier: bỏ qua → page scroll bình thường.\n *\n * Returns cleanup fn. Caller chịu trách nhiệm gọi trong cleanup của useEffect.\n *\n * @param target Container element (`HTMLDivElement` hoặc `SVGSVGElement`).\n * @param board JSXGraph board instance đã initBoard xong.\n * @param label Tag để log dev-mode khi safeJsx swallow lỗi (vd \"MiniBoard.2d\").\n */\nexport function attachJxgWheelZoom(\n target: HTMLElement,\n board: JxgBoardZoomable,\n label = 'wheelZoom',\n): () => void {\n const onWheel = (e: WheelEvent): void => {\n if (!e.ctrlKey && !e.metaKey) return;\n e.preventDefault();\n e.stopPropagation();\n let cx: number | undefined;\n let cy: number | undefined;\n safeJsx(`${label}.coords`, () => {\n const usr = board.getUsrCoordsOfMouse?.(e);\n if (Array.isArray(usr) && usr.length >= 2\n && Number.isFinite(usr[0]) && Number.isFinite(usr[1])) {\n cx = usr[0] as number;\n cy = usr[1] as number;\n }\n });\n if (e.deltaY < 0) safeJsx(`${label}.in`, () => board.zoomIn(cx, cy));\n else if (e.deltaY > 0) safeJsx(`${label}.out`, () => board.zoomOut(cx, cy));\n };\n target.addEventListener('wheel', onWheel, { passive: false });\n return () => { target.removeEventListener('wheel', onWheel); };\n}\n","import { safeJsx } from './safeJsx';\n\n/**\n * Toggles cho common JSXGraph options. Per-stamp callsite override mặc định\n * nếu cần preserve behavior cụ thể.\n *\n * Mặc định:\n * - text.display = 'internal' (true) — bắt buộc cho clone-SVG export.\n * - text.useASCII/MathJax/Katex = false (true) — JSXGraph default rendering,\n * không load extra text engine.\n * - label.display = 'internal' (true) — point label vào trong SVG.\n * - elements.highlight = false (FALSE mặc định) — opt-in vì graph-2d cần\n * JSXGraph's default hover-highlight để phân biệt object đang hover.\n */\nexport interface JxgInitDefaults {\n textDisplayInternal?: boolean;\n disableTextEngines?: boolean;\n labelDisplayInternal?: boolean;\n disableElementHighlight?: boolean;\n}\n\nexport interface InitJxgBoardConfig {\n /** Per-MiniBoard toggle cho common defaults. */\n defaults?: JxgInitDefaults;\n /** Options pass thẳng vào `JXG.JSXGraph.initBoard(target, opts)`. */\n boardOptions: Record<string, unknown>;\n /**\n * Hook để tweak options sau khi defaults được apply. Dùng cho per-stamp\n * customization (vd themeLabel color cho 2D, axesPosition cho 3D view3d).\n */\n \n extraOptionTweaks?: (opts: any) => void;\n /** Tag cho safeJsx log (vd \"MiniBoard.2d\"). Default: \"JxgBoard\". */\n label?: string;\n}\n\nexport interface InitJxgBoardResult {\n \n JXG: any;\n \n board: any;\n /** Gọi để free JSXGraph board (safe-wrapped). */\n cleanup: () => void;\n}\n\n/**\n * Async dynamic-import JSXGraph + apply common options + initBoard + trả\n * cleanup. Centralize boilerplate shared bởi 3 MiniBoard (2D/3D/graph-2d).\n *\n * Caller vẫn handle cancellation flag, refs, và post-init setup (renderer,\n * view3d, axes, etc.) ngoài helper này.\n *\n * @throws Nếu JSXGraph load hoặc initBoard throw. Caller nên try/catch nếu\n * cần tolerate mock environments.\n */\nexport async function initJxgBoard(\n target: string | HTMLElement,\n config: InitJxgBoardConfig,\n): Promise<InitJxgBoardResult> {\n const label = config.label ?? 'JxgBoard';\n \n const JXG = (await import('jsxgraph')).default as any;\n const {\n textDisplayInternal = true,\n disableTextEngines = true,\n labelDisplayInternal = true,\n disableElementHighlight = false,\n } = config.defaults ?? {};\n safeJsx(`${label}.applyOptions`, () => {\n const opts = JXG.Options;\n if (!opts) return;\n if (textDisplayInternal || disableTextEngines) {\n opts.text = opts.text ?? {};\n if (textDisplayInternal) opts.text.display = 'internal';\n if (disableTextEngines) {\n opts.text.useASCIIMathML = false;\n opts.text.useMathJax = false;\n opts.text.useKatex = false;\n }\n }\n if (labelDisplayInternal) {\n opts.label = opts.label ?? {};\n opts.label.display = 'internal';\n }\n if (disableElementHighlight) {\n opts.elements = opts.elements ?? {};\n opts.elements.highlight = false;\n }\n config.extraOptionTweaks?.(opts);\n });\n const board = JXG.JSXGraph.initBoard(target, config.boardOptions);\n const cleanup = (): void => {\n safeJsx(`${label}.freeBoard`, () => JXG.JSXGraph.freeBoard(board));\n };\n return { JXG, board, cleanup };\n}\n","import type { State } from '../../../core/scene';\nimport type { ObjectSnapshot } from './MiniBoard.types';\n\n/**\n * Build snapshot từ scene object để PropertiesPopover render. Trả null nếu\n * object kind không hỗ trợ properties panel (vd polygon, angle, …).\n *\n * Pure function — không touch board/JSXGraph state. Caller pass anchorScreen\n * (vị trí pixel mà popover sẽ hiển thị).\n */\nexport function buildObjectSnapshot(\n state: State,\n id: string,\n anchorScreen: { x: number; y: number },\n): ObjectSnapshot | null {\n const obj = state.objects[id];\n if (!obj) return null;\n const k = obj.kind;\n if (k !== 'point' && k !== 'line' && k !== 'circle' && k !== 'segment' && k !== 'ray' && k !== 'vector') {\n return null;\n }\n const a = obj.attrs as Record<string, unknown>;\n const jKind: 'point' | 'line' | 'circle' = k === 'point' ? 'point' : (k === 'circle' ? 'circle' : 'line');\n return {\n id,\n kind: jKind,\n name: obj.label,\n color: (a.color as string) ?? '#0f172a',\n width: (a.width as number) ?? 2,\n dash: (a.dash as number) ?? 0,\n face: (a.face as ObjectSnapshot['face']) ?? 'o',\n showLabel: (a.showLabel as boolean) ?? true,\n showValue: (a.showValue as boolean) ?? false,\n screenCoords: anchorScreen,\n };\n}\n","// Pure preview-shape factory cho 2D editor — không component state, không\n// React. Dùng bởi MiniBoard.tsx `refreshPreview` mỗi khi user thay đổi\n// pending picks. Mirror legacy live-preview (commit ce78521), tách khỏi\n// MiniBoard.tsx để giảm size component file.\n\nimport { safeJsx } from '../../shared/safeJsx';\nimport { objKind, type ToolDef } from './tools';\n\n \ntype JxgObj = any;\n\nconst PREVIEW_STYLE: Record<string, unknown> = {\n strokeColor: '#3b82f6',\n strokeWidth: 1.5,\n strokeOpacity: 0.65,\n dash: 2,\n fixed: true,\n highlight: false,\n withLabel: false,\n};\n\nconst CIRCLE_PREVIEW_STYLE: Record<string, unknown> = {\n ...PREVIEW_STYLE,\n fillColor: 'none',\n fillOpacity: 0,\n};\n\n/**\n * Build transient JSXGraph object để live-preview shape user đang dựng. Trả\n * `null` khi:\n * - Tool không phải shape-tool (vd select/move).\n * - Số pick chưa đủ cho preview cụ thể.\n * - Pick types không hợp lệ với tool (vd perpendicular cần line input).\n *\n * Tất cả create calls wrap trong safeJsx để swallow exception từ JSXGraph\n * khi state stale (vd board destroyed giữa chừng).\n */\nexport function buildPreviewShape(\n board: JxgObj,\n toolDef: ToolDef,\n picks: JxgObj[],\n phantom: JxgObj,\n): JxgObj {\n if (!board) return null;\n return safeJsx<JxgObj>('preview.buildPreviewShape', () => {\n switch (toolDef.key) {\n case 'segment':\n case 'midpoint':\n case 'distance':\n return board.create('segment', [picks[0], phantom], PREVIEW_STYLE);\n case 'line':\n return board.create('line', [picks[0], phantom], PREVIEW_STYLE);\n case 'ray':\n return board.create('line', [picks[0], phantom], {\n ...PREVIEW_STYLE,\n straightFirst: false,\n straightLast: true,\n });\n case 'vector':\n return board.create('arrow', [picks[0], phantom], PREVIEW_STYLE);\n case 'circleCenter':\n return board.create('circle', [picks[0], phantom], CIRCLE_PREVIEW_STYLE);\n case 'circle3':\n if (picks.length === 1) return board.create('circle', [picks[0], phantom], CIRCLE_PREVIEW_STYLE);\n if (picks.length === 2) {\n return board.create('circumcircle', [picks[0], picks[1], phantom], CIRCLE_PREVIEW_STYLE);\n }\n return null;\n case 'angle':\n if (picks.length === 1) return board.create('segment', [picks[0], phantom], PREVIEW_STYLE);\n if (picks.length === 2) {\n return board.create('angle', [picks[0], picks[1], phantom], {\n ...PREVIEW_STYLE,\n radius: 1,\n fillColor: '#22c55e',\n fillOpacity: 0.15,\n });\n }\n return null;\n case 'perpBisector':\n return board.create('segment', [picks[0], phantom], PREVIEW_STYLE);\n case 'angleBisector':\n if (picks.length === 1) return board.create('segment', [picks[0], phantom], PREVIEW_STYLE);\n if (picks.length === 2) return board.create('bisector', [picks[0], picks[1], phantom], PREVIEW_STYLE);\n return null;\n case 'perpendicular':\n case 'parallel':\n case 'tangent': {\n if (picks.length !== 1) return null;\n const k = objKind(picks[0]);\n if (k === 'line' && toolDef.key !== 'tangent') {\n return board.create(toolDef.key, [picks[0], phantom], PREVIEW_STYLE);\n }\n if (k === 'circle' && toolDef.key === 'tangent') {\n const glider = board.create('glider', [phantom.X(), phantom.Y(), picks[0]], {\n visible: false,\n withLabel: false,\n });\n return board.create('tangent', [glider], PREVIEW_STYLE);\n }\n return null;\n }\n default:\n return null;\n }\n }, null);\n}\n\n/**\n * Tạo phantom point (invisible, fixed) làm endpoint kéo theo cursor cho\n * live-preview. Trả `null` nếu board không sẵn sàng (mock/test path).\n */\nexport function createPhantomPoint(board: JxgObj): JxgObj {\n if (!board) return null;\n return safeJsx<JxgObj>('preview.createPhantomPoint', () => board.create('point', [0, 0], {\n visible: false,\n fixed: true,\n withLabel: false,\n name: '',\n }), null);\n}\n","import { safeJsx } from '../../shared/safeJsx';\nimport { buildPreviewShape, createPhantomPoint } from './preview';\nimport { TOOLS } from './tools';\nimport type { ToolStateMachine } from '../../shared/useToolStateMachine';\nimport type { GeomTool } from './tools';\n\n \ntype JxgObj = any;\n\nexport interface PreviewRefs {\n previewSegRef: { current: JxgObj[] };\n phantomRef: { current: JxgObj };\n previewShapeRef: { current: JxgObj };\n pendingRef: { current: JxgObj[] };\n}\n\n/**\n * Xoá tất cả preview segment objects (preview vertex-by-vertex của polygon\n * tool). Reset previewSegRef.current về mảng rỗng.\n */\nexport function clearPreviewSegs(\n board: JxgObj,\n previewSegRef: { current: JxgObj[] },\n): void {\n if (!board) return;\n for (const s of previewSegRef.current) {\n safeJsx('previewActions.removePreviewSeg', () => board.removeObject(s));\n }\n previewSegRef.current = [];\n}\n\n/**\n * Xoá phantom point + preview shape (cả 2 đều transient, không nằm trong\n * scene store). Phantom là invisible point JSXGraph theo cursor; preview\n * shape là live-preview của shape user đang dựng.\n */\nexport function removePhantom(\n board: JxgObj,\n refs: { previewShapeRef: { current: JxgObj }; phantomRef: { current: JxgObj } },\n): void {\n if (!board) return;\n if (refs.previewShapeRef.current) {\n safeJsx('previewActions.removePreviewShape', () => board.removeObject(refs.previewShapeRef.current));\n refs.previewShapeRef.current = null;\n }\n if (refs.phantomRef.current) {\n safeJsx('previewActions.removePhantom', () => board.removeObject(refs.phantomRef.current));\n refs.phantomRef.current = null;\n }\n}\n\n/**\n * Tear down old preview shape và build fresh từ current picks + phantom.\n * Phantom được tạo lazily — không spawn hidden point trước khi user có ít\n * nhất 1 real pick. Skip nếu tool variable-length (polygon: needs === -1)\n * vì handlers.ts emit per-vertex segments riêng qua previewSegRef.\n */\nexport function refreshPreviewShape(\n board: JxgObj,\n toolSM: ToolStateMachine<GeomTool>,\n refs: PreviewRefs,\n): void {\n if (!board) return;\n if (refs.previewShapeRef.current) {\n safeJsx('previewActions.removePreviewShape', () => board.removeObject(refs.previewShapeRef.current));\n refs.previewShapeRef.current = null;\n }\n const t = toolSM.toolRef.current;\n const toolDef = TOOLS.find((td) => td.key === t);\n if (!toolDef) return;\n const picks = refs.pendingRef.current;\n if (picks.length === 0 || toolDef.needs <= 0) return;\n if (picks.length >= toolDef.needs) return;\n if (!refs.phantomRef.current) {\n refs.phantomRef.current = createPhantomPoint(board);\n if (!refs.phantomRef.current) return;\n }\n refs.previewShapeRef.current = buildPreviewShape(board, toolDef, picks, refs.phantomRef.current);\n}\n","import type { Store } from '../../../core/scene/store';\n\nexport interface MutatePatch {\n attrs?: Record<string, unknown>;\n remove?: boolean;\n}\n\n/**\n * Áp patch từ PropertiesPopover lên scene store.\n *\n * PropertiesPopover phát attrs theo tên JSXGraph (strokeColor, strokeWidth,\n * withLabel, name, …). Scene attrs dùng tên ngắn gọn (color, width,\n * showLabel, …) và `label` là field top-level của SceneObject (không nằm\n * trong attrs). Map ở đây để popover khỏi cần biết shape của scene.\n *\n * - `remove: true` → dispatch DELETE.\n * - `attrs.name` (string) → dispatch UPDATE với `label` patch.\n * - JSXGraph attr names → scene names (strokeColor → color, strokeWidth →\n * width, withLabel → showLabel). `fillColor` cũng map sang `color` (fallback\n * khi popover không truyền strokeColor).\n */\nexport function applyMutatePatch(store: Store, id: string, patch: MutatePatch): void {\n if (patch.remove) {\n store.dispatch({ type: 'DELETE', payload: { id } });\n return;\n }\n if (!patch.attrs) return;\n const { name, withLabel, strokeColor, fillColor, strokeWidth, ...rest } = patch.attrs as {\n name?: unknown;\n withLabel?: unknown;\n strokeColor?: unknown;\n fillColor?: unknown;\n strokeWidth?: unknown;\n [k: string]: unknown;\n };\n if (typeof name === 'string') {\n store.dispatch({ type: 'UPDATE', payload: { id, patch: { label: name } } });\n }\n const mapped: Record<string, unknown> = { ...rest };\n // strokeColor / fillColor cùng đại diện cho cùng 1 thuộc tính `color` ở\n // scene. PropertiesPopover thường thêm sẵn `color` cùng strokeColor —\n // ưu tiên `color` (đã có trong rest); fallback strokeColor → fillColor.\n if (strokeColor !== undefined && mapped.color === undefined) mapped.color = strokeColor;\n if (fillColor !== undefined && mapped.color === undefined) mapped.color = fillColor;\n if (strokeWidth !== undefined && mapped.width === undefined) mapped.width = strokeWidth;\n if (withLabel !== undefined && mapped.showLabel === undefined) mapped.showLabel = withLabel;\n if (Object.keys(mapped).length > 0) {\n store.dispatch({ type: 'UPDATE_ATTRS', payload: { id, patch: mapped } });\n }\n}\n","import { listObjects } from '../../../core/scene';\nimport type { Store } from '../../../core/scene/store';\nimport type { JxgRenderer } from '../../../core/scene/render/JxgRenderer';\nimport { safeJsx } from '../../shared/safeJsx';\nimport { applyMutatePatch } from './attrMapping';\nimport { finalizeTransform, type HandlerCtx, type TransformToolKey } from './handlers';\nimport type {\n MiniBoardHandle,\n ObjectSnapshot,\n SelectionStateSnapshot,\n TransformPopoverInfo,\n} from './MiniBoard.types';\nimport { buildObjectSnapshot } from './snapshot';\n\n \ntype JxgObj = any;\n\nexport interface BuildHandleDeps {\n // refs\n containerRef: { readonly current: HTMLDivElement | null };\n boardRef: { readonly current: JxgObj };\n rendererRef: { readonly current: JxgRenderer | null };\n selectSubsRef: { readonly current: Set<(snap: ObjectSnapshot) => void> };\n transformSubsRef: { readonly current: Set<(info: TransformPopoverInfo) => void> };\n selectionStateSubsRef: { readonly current: Set<(snap: SelectionStateSnapshot | null) => void> };\n selectedSetRef: { readonly current: Set<string> };\n \n pendingTransformRef: { current: any };\n ctxRef: { readonly current: HandlerCtx | null };\n // callbacks / values\n store: Store;\n clearPending: () => void;\n clearSelection: () => void;\n deleteSelection: () => void;\n emitTransform: (info: TransformPopoverInfo) => void;\n}\n\n/**\n * Build MiniBoardHandle object cho `useImperativeHandle`. Methods read refs\n * trực tiếp nên handle có thể tạo trước khi board boot xong; gọi method\n * trước onReady?.() có thể trả stale refs.\n *\n * Tách ra file riêng để giảm size MiniBoard.tsx — handle có 25+ methods,\n * chiếm ~60 dòng object literal.\n */\nexport function buildMiniBoardHandle(d: BuildHandleDeps): MiniBoardHandle {\n return {\n getContainer: () => d.containerRef.current,\n getBbox: () => d.boardRef.current?.getBoundingBox() ?? [-10, 10, 10, -10],\n getState: () => d.store.getState(),\n getStore: () => d.store,\n highlight: (id) => { d.rendererRef.current?.highlight(id); },\n snapshotObject: (id, anchorScreen) => buildObjectSnapshot(d.store.getState(), id, anchorScreen),\n mutateObject: (id, patch) => applyMutatePatch(d.store, id, patch),\n getAllPointNames: () => listObjects(d.store.getState())\n .filter((o) => o.kind === 'point' || o.kind === 'intersection')\n .map((o) => o.label),\n onSelect: (cb) => {\n d.selectSubsRef.current.add(cb);\n return () => { d.selectSubsRef.current.delete(cb); };\n },\n onTransformParam: (cb) => {\n d.transformSubsRef.current.add(cb);\n return () => { d.transformSubsRef.current.delete(cb); };\n },\n onSelectionState: (cb) => {\n d.selectionStateSubsRef.current.add(cb);\n return () => { d.selectionStateSubsRef.current.delete(cb); };\n },\n confirmTransformParam: (value: number) => {\n const info = d.pendingTransformRef.current as\n | { tool: TransformToolKey; pendingIds: string[]; anchorScreen: { x: number; y: number } }\n | null;\n if (info && d.ctxRef.current) {\n safeJsx('buildHandle.finalizeTransform', () =>\n finalizeTransform(d.ctxRef.current!, info.tool, info.pendingIds, value),\n );\n }\n d.pendingTransformRef.current = null;\n d.emitTransform(null);\n d.clearPending();\n },\n cancelTransformParam: () => {\n d.pendingTransformRef.current = null;\n d.emitTransform(null);\n d.clearPending();\n },\n getSelectionSize: () => d.selectedSetRef.current.size,\n clearSelection: d.clearSelection,\n deleteSelection: d.deleteSelection,\n };\n}\n","import type { JxgRenderer } from '../../../core/scene/render/JxgRenderer';\n\n \ntype JxgObj = any;\n\n/**\n * Resolve scene id → JSXGraph object qua renderer's elements map.\n *\n * Synthetic \"<polyId>:border:<N>\" → polygon.borders[N]: cho phép preview\n * shape của tool perpendicular/parallel/tangent kéo theo cạnh đa giác làm\n * parent (border là sub-segment auto-tạo, không có scene id riêng).\n */\nexport function jxgFromSceneId(renderer: JxgRenderer | null, id: string): JxgObj {\n if (!renderer) return null;\n \n const elements = (renderer as any).elements as Map<string, JxgObj> | undefined;\n if (!elements) return null;\n const m = /^(.+):border:(\\d+)$/.exec(id);\n if (m) {\n \n const poly = elements.get(m[1]) as any;\n const idx = parseInt(m[2], 10);\n const borders = poly?.borders;\n if (Array.isArray(borders) && borders[idx]) return borders[idx];\n return null;\n }\n return elements.get(id) ?? null;\n}\n\n/**\n * Resolve JSXGraph object → scene id. Trước hết check reverse-map (cached),\n * sau đó dò polygon borders để trả synthetic \"<polyId>:border:<idx>\" cho\n * construct tools dùng cạnh đa giác như line input.\n */\nexport function jxgIdToSceneId(\n renderer: JxgRenderer | null,\n idMap: Map<string, string>,\n jxgObj: JxgObj,\n): string | null {\n if (!jxgObj?.id) return null;\n const direct = idMap.get(String(jxgObj.id));\n if (direct) return direct;\n if (!renderer) return null;\n \n const elements = (renderer as any).elements as Map<string, JxgObj> | undefined;\n if (!elements) return null;\n // Direct fallback: idMap rebuild qua store.subscribe có thể chạy TRƯỚC\n // JxgRenderer subscriber (cùng store, đăng ký theo order useEffect), nên\n // idMap luôn thiếu entry của object vừa được renderer tạo trong dispatch\n // hiện tại. Walk renderer.elements để bù.\n for (const [sid, el] of elements) {\n if (el === jxgObj) return sid;\n \n const borders = (el as any)?.borders;\n if (Array.isArray(borders)) {\n const idx = borders.indexOf(jxgObj);\n if (idx >= 0) return `${sid}:border:${idx}`;\n }\n }\n return null;\n}\n","import { useEffect } from 'react';\nimport { safeJsx } from '../../shared/safeJsx';\nimport { themeAxis, themeGrid } from './theme';\n\n \ntype JxgObj = any;\n\ninterface Params {\n boardRef: { readonly current: JxgObj };\n /** Refs giữ axis x/y JSXGraph objects để cleanup khi toggle off. */\n axisObjsRef: { current: { x?: JxgObj; y?: JxgObj } };\n isDarkRef: { readonly current: boolean };\n showAxis: boolean;\n showGrid: boolean;\n}\n\n/**\n * Sync hiển thị axis + grid khi user toggle qua LeftPanel.\n *\n * - Axis: tự tạo/xoá 2 axis object qua `boardRef.current.create('axis', ...)`.\n * - Grid: xoá grid cũ trong `board.objects` rồi tạo mới khi enable. Match\n * theme color (axis/grid) theo `isDarkRef.current`.\n *\n * Mỗi effect chạy độc lập theo `showAxis` / `showGrid` để switch nhanh\n * không re-do cả 2 mỗi lần toggle 1.\n */\nexport function useAxisGridSync({\n boardRef,\n axisObjsRef,\n isDarkRef,\n showAxis,\n showGrid,\n}: Params): void {\n useEffect(() => {\n const b = boardRef.current;\n if (!b) return;\n safeJsx('useAxisGridSync.toggleAxis', () => {\n if (axisObjsRef.current.x) {\n safeJsx('useAxisGridSync.removeAxisX', () => b.removeObject(axisObjsRef.current.x));\n axisObjsRef.current.x = undefined;\n }\n if (axisObjsRef.current.y) {\n safeJsx('useAxisGridSync.removeAxisY', () => b.removeObject(axisObjsRef.current.y));\n axisObjsRef.current.y = undefined;\n }\n if (showAxis) {\n axisObjsRef.current.x = b.create('axis', [[0, 0], [1, 0]], { strokeColor: themeAxis(isDarkRef.current), name: '', withLabel: false });\n axisObjsRef.current.y = b.create('axis', [[0, 0], [0, 1]], { strokeColor: themeAxis(isDarkRef.current), name: '', withLabel: false });\n }\n b.update();\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [showAxis]);\n\n useEffect(() => {\n const b = boardRef.current;\n if (!b) return;\n safeJsx('useAxisGridSync.toggleGrid', () => {\n for (const o of Object.values(b.objects || {}) as JxgObj[]) {\n if (o && (o.elType === 'grid' || o.type === 'grid' || (o.visProp && o.visProp.type === 'grid'))) {\n safeJsx('useAxisGridSync.removeGrid', () => b.removeObject(o));\n }\n }\n if (showGrid) b.create('grid', [], { strokeColor: themeGrid(isDarkRef.current), strokeOpacity: 1 });\n b.update();\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [showGrid]);\n}\n","import { useEffect } from 'react';\nimport type { Store } from '../../../core/scene/store';\n\ninterface Params {\n store: Store;\n /** Pending picks (chưa commit) — Esc xoá khi length > 0. */\n pendingIdsRef: { readonly current: string[] };\n /** Current selection ids — Esc/Delete/Backspace act on. */\n selectedSetRef: { readonly current: Set<string> };\n clearPending: () => void;\n clearSelection: () => void;\n deleteSelection: () => void;\n}\n\n/**\n * Capture-phase keyboard shortcuts cho 2D editor:\n *\n * - Ctrl/Cmd+Z → undo\n * - Ctrl/Cmd+Shift+Z / Ctrl/Cmd+Y → redo\n * - Esc → clear pending picks + clear selection\n * - Delete/Backspace → delete selection\n *\n * Capture phase + stopPropagation để win với Excalidraw's bubble handlers\n * (vốn nắm các phím tương tự). Ignore khi focus đang ở input/textarea/contentEditable.\n */\nexport function useEditorShortcuts({\n store,\n pendingIdsRef,\n selectedSetRef,\n clearPending,\n clearSelection,\n deleteSelection,\n}: Params): void {\n useEffect(() => {\n const onKey = (e: KeyboardEvent): void => {\n const ae = document.activeElement as HTMLElement | null;\n const inField = !!(ae && (ae.tagName === 'INPUT' || ae.tagName === 'TEXTAREA' || ae.isContentEditable));\n const lk = e.key.toLowerCase();\n if ((e.metaKey || e.ctrlKey) && lk === 'z' && !e.shiftKey) {\n if (inField) return;\n e.preventDefault(); e.stopPropagation(); store.undo(); return;\n }\n if ((e.metaKey || e.ctrlKey) && ((lk === 'z' && e.shiftKey) || (lk === 'y' && !e.shiftKey))) {\n if (inField) return;\n e.preventDefault(); e.stopPropagation(); store.redo(); return;\n }\n if (e.key === 'Escape' && !inField) {\n if (pendingIdsRef.current.length > 0) {\n e.preventDefault(); e.stopPropagation(); clearPending();\n }\n if (selectedSetRef.current.size > 0) {\n e.preventDefault(); e.stopPropagation(); clearSelection();\n }\n }\n if ((e.key === 'Delete' || e.key === 'Backspace') && !inField && selectedSetRef.current.size > 0) {\n e.preventDefault(); e.stopPropagation(); deleteSelection();\n }\n };\n window.addEventListener('keydown', onKey, { capture: true });\n return () => window.removeEventListener('keydown', onKey, { capture: true });\n }, [store, pendingIdsRef, selectedSetRef, clearPending, clearSelection, deleteSelection]);\n}\n","import { useEffect, useRef } from 'react';\nimport type { Store } from '../../../core/scene/store';\nimport type { JxgRenderer } from '../../../core/scene/render/JxgRenderer';\n\n \ntype JxgObj = any;\n\ninterface Params {\n store: Store;\n rendererRef: { readonly current: JxgRenderer | null };\n}\n\ninterface Result {\n /** Reverse map: JSXGraph internal id (string) → scene id. */\n jxgIdToSceneRef: { readonly current: Map<string, string> };\n}\n\n/**\n * Maintain a reverse lookup `JSXGraph internal id → scene id`, rebuilt every\n * time store dispatches. Cần thiết vì JSXGraph events nắm element ref nhưng\n * scene logic chỉ biết scene id; map này cho phép translate ngược.\n *\n * Renderer's `elements` map (scene-id → JxgObj) là source of truth — hook\n * subscribe store + rebuild map mỗi event.\n */\nexport function useJxgSceneIdMap({ store, rendererRef }: Params): Result {\n const jxgIdToSceneRef = useRef<Map<string, string>>(new Map());\n useEffect(() => {\n const rebuild = (): void => {\n const r = rendererRef.current;\n if (!r) return;\n \n const elements: Map<string, JxgObj> | undefined = (r as any).elements;\n const next = new Map<string, string>();\n if (elements) {\n for (const [sid, jxg] of elements) {\n \n const jid = (jxg as any)?.id;\n if (jid) next.set(String(jid), sid);\n }\n }\n jxgIdToSceneRef.current = next;\n };\n rebuild();\n return store.subscribe(() => rebuild());\n }, [store, rendererRef]);\n return { jxgIdToSceneRef };\n}\n","'use client';\n/**\n * MiniBoard.tsx — JSXGraph mini-board cho geometry-2d editor.\n *\n * Sau Sub-PR 2.3.3 (Scene v2 Phase 2):\n * - Scene state qua `core/scene` Store + JxgRenderer (diff subscribe).\n * - Pointer handlers (handleDown/Up/Move) dispatch ADD/DELETE/UPDATE_ATTRS.\n * - Tool + pending picks qua `useToolStateMachine`.\n * - Selection = Set<sceneId> (UI state).\n * - Undo/Redo qua store (immer snapshot stack).\n *\n * EditorPanel/host/render.ts vẫn dùng API cũ — clean ở 2.3.4 / 2.3.7.\n */\n\nimport React, {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react';\nimport {\n nextLabel as sceneNextLabel,\n type Store,\n} from '../../../core/scene';\nimport { JxgRenderer } from '../../../core/scene/render/JxgRenderer';\nimport { DEFAULT_VIEW_2D } from '../../../core/scene/types';\nimport { handleDown, handleMove, handleUp, type HandlerCtx } from './handlers';\nimport {\n findNearestJxgPoint,\n objectsAt as objectsAtImpl,\n promoteToLabelOwner,\n screenCoordsOf as screenCoordsOfImpl,\n} from './hitTest';\nimport { paletteFor, themeAxis, themeGrid, themeLabel } from './theme';\nimport { GROUP_LABELS, TOOLS, type GeomTool, type ToolDef } from './tools';\nimport { useToolStateMachine } from '../../shared/useToolStateMachine';\nimport { safeJsx } from '../../shared/safeJsx';\nimport { attachJxgWheelZoom } from '../../shared/attachJxgWheelZoom';\nimport { initJxgBoard } from '../../shared/initJxgBoard';\nimport { buildObjectSnapshot } from './snapshot';\nimport {\n clearPreviewSegs as clearPreviewSegsImpl,\n removePhantom as removePhantomImpl,\n refreshPreviewShape,\n} from './previewActions';\nimport { buildMiniBoardHandle } from './buildHandle';\nimport {\n jxgFromSceneId as jxgFromSceneIdImpl,\n jxgIdToSceneId as jxgIdToSceneIdImpl,\n} from './idResolvers';\nimport { useAxisGridSync } from './useAxisGridSync';\nimport { useEditorShortcuts } from './useEditorShortcuts';\nimport { useJxgSceneIdMap } from './useJxgSceneIdMap';\n\nimport type { MiniBoardHandle, ObjectSnapshot, SelectionStateSnapshot, TransformPopoverInfo } from './MiniBoard.types';\n\nexport { TOOLS, GROUP_LABELS };\nexport type { GeomTool, ToolDef };\nexport type { ObjectSnapshot, SelectionStateSnapshot, TransformPopoverInfo, MiniBoardHandle } from './MiniBoard.types';\n\ntype JxgObj = any;\n\ninterface Props {\n /** Signal \"board boot xong\" — parent gọi handle methods qua ref sau khi nhận. */\n onReady?: () => void;\n /** Scene store do Host tạo qua `useStampStore`. View info đọc từ `store.getState().meta.view`. */\n store: Store;\n /** Tool hiện tại — host owns state (Tier 2 F). */\n selectedTool: GeomTool;\n /** Hiển thị axis — host owns state (Tier 2 F). */\n showAxis: boolean;\n /** Hiển thị grid — host owns state (Tier 2 F). */\n showGrid: boolean;\n isDark?: boolean;\n /** Toast hook từ EditorPanel ToastProvider — handlers dùng cho invalid construction. */\n toast?: import('../../shared/Toast').ShowToastFn;\n}\n\nexport const MiniBoard2D = forwardRef<MiniBoardHandle, Props>(function MiniBoard2D(\n { onReady, store, selectedTool, showAxis, showGrid, isDark, toast },\n ref,\n) {\n const isDarkRef = useRef(!!isDark); isDarkRef.current = !!isDark;\n const containerId = useId().replace(/:/g, '_') + '_jxgmini';\n const containerRef = useRef<HTMLDivElement>(null);\n const boardRef = useRef<JxgObj>(null);\n const jxgRef = useRef<JxgObj>(null);\n const rendererRef = useRef<JxgRenderer | null>(null);\n const axisObjsRef = useRef<{ x?: JxgObj; y?: JxgObj }>({});\n\n const toolSM = useToolStateMachine<GeomTool>(selectedTool);\n\n // bbox init đọc 1 lần lúc mount từ store.meta.view; axis/grid drive bằng prop.\n const initialMeta = store.getState().meta;\n const initialView = initialMeta.domain === '2d' ? initialMeta.view : DEFAULT_VIEW_2D;\n const showAxisRef = useRef(showAxis); showAxisRef.current = showAxis;\n const showGridRef = useRef(showGrid); showGridRef.current = showGrid;\n\n const selectedSetRef = useRef<Set<string>>(new Set());\n const [selectionTick, setSelectionTick] = useState(0);\n\n // Sync selection halo overlay + emit selection state snapshot khi\n // selectedSetRef đổi. Dùng tick để notify (selectedSetRef là ref nên\n // React không track trực tiếp).\n useEffect(() => {\n const ids = [...selectedSetRef.current];\n rendererRef.current?.highlight(ids);\n const anchor = lastClickClientRef.current ?? { x: 0, y: 0 };\n const snap: SelectionStateSnapshot | null =\n ids.length === 0 ? null : { ids, anchor: { x: anchor.x + 8, y: anchor.y + 8 } };\n selectionStateSubsRef.current.forEach((cb) =>\n safeJsx('MiniBoard.emitSelectionState.cb', () => cb(snap)),\n );\n }, [selectionTick]);\n\n // Pending / preview / marquee state.\n const pendingRef = useRef<JxgObj[]>([]);\n const previewSegRef = useRef<JxgObj[]>([]);\n const phantomRef = useRef<JxgObj>(null);\n const previewShapeRef = useRef<JxgObj>(null);\n const previewRafRef = useRef<number | null>(null);\n const marqueeRef = useRef<{ startSx: number; startSy: number; rect?: JxgObj } | null>(null);\n const moveDownRef = useRef<{ sx: number; sy: number } | null>(null);\n const lastMoveClickRef = useRef<{ id: string | null; time: number }>({ id: null, time: 0 });\n const lastClickClientRef = useRef<{ x: number; y: number } | null>(null);\n const pendingTransformRef = useRef<any>(null);\n\n // Subscribers cho popover (select + transform). Store-level changes propagate\n // qua `useEditorState` ở EditorPanel level — MiniBoard không owns store\n // subscription nữa (Tier 2 F).\n const selectSubsRef = useRef<Set<(snap: ObjectSnapshot) => void>>(new Set());\n const transformSubsRef = useRef<Set<(info: TransformPopoverInfo) => void>>(new Set());\n const selectionStateSubsRef = useRef<Set<(snap: SelectionStateSnapshot | null) => void>>(new Set());\n\n const { jxgIdToSceneRef } = useJxgSceneIdMap({ store, rendererRef });\n\n const jxgFromSceneId = useCallback(\n (id: string) => jxgFromSceneIdImpl(rendererRef.current, id),\n [],\n );\n const jxgIdToSceneId = useCallback(\n (jxgObj: JxgObj) => jxgIdToSceneIdImpl(rendererRef.current, jxgIdToSceneRef.current, jxgObj),\n [jxgIdToSceneRef],\n );\n\n // ─── Hit-test helpers ──────────────────────────────────────────────────────\n // Mỗi callback wrap pure function ở hitTest.ts, gom refs vào tham số.\n const screenCoordsOf = useCallback(\n (evt: JxgObj) => screenCoordsOfImpl(boardRef.current, containerRef.current, evt),\n [],\n );\n const objectsAt = useCallback(\n (evt: JxgObj) => objectsAtImpl(boardRef.current, containerRef.current, evt, [\n phantomRef.current,\n previewShapeRef.current,\n ...previewSegRef.current,\n ]),\n [],\n );\n const findNearestPointJxg = useCallback(\n (evt: JxgObj, tolPx = 12) =>\n findNearestJxgPoint(boardRef.current, containerRef.current, store.getState(), jxgFromSceneId, evt, tolPx),\n [jxgFromSceneId, store],\n );\n const promoteLabel = useCallback(\n (o: JxgObj) => promoteToLabelOwner(boardRef.current, o),\n [],\n );\n\n // ─── Selection / pending / preview actions ─────────────────────────────────\n const toggleSelect = useCallback((id: string, additive: boolean) => {\n if (!additive) { selectedSetRef.current.clear(); selectedSetRef.current.add(id); }\n else if (selectedSetRef.current.has(id)) selectedSetRef.current.delete(id);\n else selectedSetRef.current.add(id);\n rendererRef.current?.highlight([...selectedSetRef.current]);\n setSelectionTick((t) => t + 1);\n }, []);\n const clearSelection = useCallback(() => {\n selectedSetRef.current.clear();\n rendererRef.current?.highlight(null);\n setSelectionTick((t) => t + 1);\n }, []);\n const deleteSelection = useCallback(() => {\n if (selectedSetRef.current.size === 0) return;\n store.transaction((dispatch) => {\n for (const id of selectedSetRef.current) dispatch({ type: 'DELETE', payload: { id } });\n });\n selectedSetRef.current.clear();\n rendererRef.current?.highlight(null);\n setSelectionTick((t) => t + 1);\n }, [store]);\n\n const clearPreviewSegs = useCallback(\n () => clearPreviewSegsImpl(boardRef.current, previewSegRef),\n [],\n );\n const removePhantom = useCallback(\n () => removePhantomImpl(boardRef.current, { previewShapeRef, phantomRef }),\n [],\n );\n const clearPending = useCallback(() => {\n removePhantom();\n clearPreviewSegs();\n pendingRef.current = [];\n toolSM.clearPending();\n }, [clearPreviewSegs, removePhantom, toolSM]);\n const refreshPreview = useCallback(\n () => refreshPreviewShape(boardRef.current, toolSM, {\n previewSegRef, phantomRef, previewShapeRef, pendingRef,\n }),\n [toolSM],\n );\n\n // ─── Warning flash ─────────────────────────────────────────────────────────\n const [, setWarn] = useState<string | null>(null);\n const warnTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const flashWarn = useCallback((msg: string) => {\n if (warnTimerRef.current) clearTimeout(warnTimerRef.current);\n setWarn(msg);\n warnTimerRef.current = setTimeout(() => setWarn(null), 1800);\n }, []);\n useEffect(() => () => { if (warnTimerRef.current) clearTimeout(warnTimerRef.current); }, []);\n\n const nextLabelFor = useCallback(\n (kind: string): string => sceneNextLabel(store.getState(), kind),\n [store],\n );\n\n // ─── Snapshot + emit helpers ───────────────────────────────────────────────\n const buildSnapshot = useCallback(\n (id: string, anchorScreen: { x: number; y: number }): ObjectSnapshot | null =>\n buildObjectSnapshot(store.getState(), id, anchorScreen),\n [store],\n );\n const emitSelect = useCallback((info: { id: string; anchorScreen: { x: number; y: number } }) => {\n const snap = buildSnapshot(info.id, info.anchorScreen);\n if (!snap) return;\n selectSubsRef.current.forEach((cb) => safeJsx('MiniBoard.emitSelect.cb', () => cb(snap)));\n }, [buildSnapshot]);\n const emitTransform = useCallback((info: TransformPopoverInfo) => {\n transformSubsRef.current.forEach((cb) => safeJsx('MiniBoard.emitTransform.cb', () => cb(info)));\n }, []);\n\n // ─── Handler context (read latest refs at call time) ───────────────────────\n const ctxRef = useRef<HandlerCtx | null>(null);\n ctxRef.current = {\n boardRef,\n toolRef: toolSM.toolRef as { current: GeomTool },\n pendingRef,\n pendingIdsRef: toolSM.pendingIdsRef as { current: string[] },\n previewSegRef,\n axisObjsRef,\n selectedSetRef,\n marqueeRef,\n moveDownRef,\n lastMoveClickRef,\n lastClickClientRef,\n pendingTransformRef,\n phantomRef,\n previewShapeRef,\n previewRafRef,\n jxgRef,\n store,\n jxgIdToSceneId,\n jxgFromSceneId,\n screenCoordsOf,\n objectsAt,\n promoteLabel,\n findNearestPointJxg,\n toggleSelect,\n clearSelection,\n nextLabel: nextLabelFor,\n clearPending,\n clearPreviewSegs,\n refreshPreview,\n flashWarn,\n toast,\n emitTransform: emitTransform as HandlerCtx['emitTransform'],\n emitSelect: emitSelect as HandlerCtx['emitSelect'],\n setPendingCount: () => { /* derived from toolSM */ },\n setSelectionTick: (fn) => setSelectionTick(fn),\n };\n\n useEditorShortcuts({\n store,\n pendingIdsRef: toolSM.pendingIdsRef,\n selectedSetRef,\n clearPending,\n clearSelection,\n deleteSelection,\n });\n useAxisGridSync({ boardRef, axisObjsRef, isDarkRef, showAxis, showGrid });\n\n const handleToolChange = useCallback((t: GeomTool) => {\n clearPending();\n toolSM.setTool(t);\n const b = boardRef.current;\n if (b) safeJsx('MiniBoard.setPanForTool', () => {\n if (b.attr?.pan) b.attr.pan.enabled = (t !== 'select');\n });\n }, [clearPending, toolSM]);\n\n // Tier 2 F — host owns `selectedTool`. Sync prop → internal toolSM khi đổi.\n useEffect(() => {\n if (toolSM.toolRef.current !== selectedTool) handleToolChange(selectedTool);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedTool]);\n\n // ─── Board init (async JSXGraph load) ───────────────────────────────────────\n useEffect(() => {\n if (typeof window === 'undefined' || !containerRef.current) return;\n let cancelled = false;\n let wheelCleanup: (() => void) | null = null;\n let freeBoard: (() => void) | null = null;\n void (async () => {\n const { JXG, board, cleanup } = await initJxgBoard(containerId, {\n label: 'MiniBoard.2d',\n defaults: { disableElementHighlight: true },\n boardOptions: {\n boundingbox: initialView.bbox as [number, number, number, number],\n axis: false, grid: false,\n showCopyright: false, showNavigation: true,\n keepAspectRatio: true,\n pan: { enabled: true, needShift: false },\n zoom: { wheel: false },\n precision: { hasPoint: 8, mouse: 4, touch: 16 },\n },\n extraOptionTweaks: (opts) => {\n // Apply theme label/text stroke color sau common defaults. Selection\n // highlight (đỏ) chủ động qua JxgRenderer.highlight() — đã disable\n // JSXGraph hover-highlight qua defaults.disableElementHighlight.\n if (opts.label) opts.label.strokeColor = themeLabel(isDarkRef.current);\n if (opts.text) opts.text.strokeColor = themeLabel(isDarkRef.current);\n },\n });\n if (cancelled || !containerRef.current) { cleanup(); return; }\n jxgRef.current = JXG;\n boardRef.current = board;\n freeBoard = cleanup;\n\n rendererRef.current = new JxgRenderer(store, board, {\n theme: paletteFor(isDarkRef.current),\n });\n\n // Ctrl/Cmd + wheel zoom (Excalidraw-style).\n if (containerRef.current) {\n wheelCleanup = attachJxgWheelZoom(containerRef.current, board, 'MiniBoard.2d');\n }\n\n if (showAxisRef.current) safeJsx('MiniBoard.initAxes', () => {\n axisObjsRef.current.x = board.create('axis', [[0, 0], [1, 0]], { strokeColor: themeAxis(isDarkRef.current), name: '', withLabel: false });\n axisObjsRef.current.y = board.create('axis', [[0, 0], [0, 1]], { strokeColor: themeAxis(isDarkRef.current), name: '', withLabel: false });\n });\n if (showGridRef.current) safeJsx('MiniBoard.initGrid', () =>\n board.create('grid', [], { strokeColor: themeGrid(isDarkRef.current), strokeOpacity: 1 }),\n );\n\n const fire = (h: (ctx: HandlerCtx, e: JxgObj) => void) =>\n (e: JxgObj) => { if (ctxRef.current) h(ctxRef.current, e); };\n board.on('down', fire(handleDown));\n board.on('up', fire(handleUp));\n board.on('move', fire(handleMove));\n\n // Hover cursor: pointer khi di chuột qua bất kỳ object có scene id (loại\n // phantom + preview transient). Apply mọi tool — drag (move), snap target\n // (drawing tools), click-to-select (select). Reset về '' khi rời object.\n board.on('move', (e: JxgObj) => {\n const container = containerRef.current;\n if (!container) return;\n const hits = objectsAtImpl(boardRef.current, container, e, [\n phantomRef.current,\n previewShapeRef.current,\n ...previewSegRef.current,\n ]);\n container.style.cursor = hits.length > 0 ? 'pointer' : '';\n });\n\n onReady?.();\n })();\n return () => {\n cancelled = true;\n if (wheelCleanup) { wheelCleanup(); wheelCleanup = null; }\n if (previewRafRef.current != null) { cancelAnimationFrame(previewRafRef.current); previewRafRef.current = null; }\n rendererRef.current?.dispose();\n rendererRef.current = null;\n if (freeBoard) { freeBoard(); freeBoard = null; }\n boardRef.current = null;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [containerId]);\n\n // Handle delivery qua ref. Methods đọc trực tiếp từ refs — handle có thể\n // tạo trước khi board boot xong; gọi method trước onReady?.() sẽ trả stale\n // refs. Object literal được build ở `buildHandle.ts` để giảm size file.\n useImperativeHandle(\n ref,\n () => buildMiniBoardHandle({\n containerRef, boardRef, rendererRef,\n selectSubsRef, transformSubsRef, selectionStateSubsRef,\n selectedSetRef, pendingTransformRef, ctxRef,\n store,\n clearPending, clearSelection, deleteSelection,\n emitTransform,\n }),\n \n [store, clearSelection, deleteSelection, clearPending, emitTransform],\n );\n\n return (\n <div\n ref={containerRef}\n id={containerId}\n data-testid=\"jxgmini-container\"\n className=\"h-full min-h-0 bg-white\"\n style={{ touchAction: 'none' }}\n />\n );\n});\n","// 8 màu chính lấy từ Excalidraw DEFAULT_ELEMENT_STROKE_COLOR_PALETTE.\n// Nguồn: @excalidraw/excalidraw — packages/excalidraw/colors.ts (top row chuẩn).\n// Cần đồng bộ tay nếu Excalidraw đổi palette ở major bump.\nexport const STROKE_PALETTE = [\n '#1e1e1e', // black\n '#e03131', // red\n '#e8590c', // orange\n '#f08c00', // yellow\n '#2f9e44', // green\n '#1971c2', // blue\n '#9c36b5', // grape\n '#868e96', // gray\n] as const;\n\nexport type StrokeColor = (typeof STROKE_PALETTE)[number];\n","'use client';\n\nimport { useEffect, useState } from 'react';\n\nconst MOBILE_QUERY = '(max-width: 768px)';\nconst NO_HOVER_QUERY = '(hover: none)';\n\nexport interface MobileState {\n /** Viewport ≤ 768px — dùng để chuyển full-screen modal + drawer. */\n isMobile: boolean;\n /** Device không có hover (touch-only) — dùng để ẩn hover tooltips. */\n isTouchOnly: boolean;\n}\n\nfunction readMatch(query: string): boolean {\n if (typeof window === 'undefined' || !window.matchMedia) return false;\n try {\n return window.matchMedia(query).matches;\n } catch {\n return false;\n }\n}\n\n/**\n * SSR-safe mobile detection qua matchMedia. Trả về `{ isMobile, isTouchOnly }`.\n * Re-render khi viewport resize hoặc input modality đổi (e.g., gắn Bluetooth mouse).\n */\nexport function useIsMobile(): MobileState {\n const [state, setState] = useState<MobileState>(() => ({\n isMobile: readMatch(MOBILE_QUERY),\n isTouchOnly: readMatch(NO_HOVER_QUERY),\n }));\n\n useEffect(() => {\n if (typeof window === 'undefined' || !window.matchMedia) return;\n const mql = window.matchMedia(MOBILE_QUERY);\n const tql = window.matchMedia(NO_HOVER_QUERY);\n const update = () => {\n setState({ isMobile: mql.matches, isTouchOnly: tql.matches });\n };\n update();\n mql.addEventListener('change', update);\n tql.addEventListener('change', update);\n return () => {\n mql.removeEventListener('change', update);\n tql.removeEventListener('change', update);\n };\n }, []);\n\n return state;\n}\n","'use client';\nimport React, { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { STROKE_PALETTE } from '../../shared/excalidrawPalette';\nimport { useIsMobile } from '../../shared/useIsMobile';\n\nexport type ObjKind = 'point' | 'line' | 'circle';\nexport type PointFace = 'o' | 'circle' | 'cross' | 'plus';\n\nexport interface PropertyPatch {\n attrs?: Record<string, unknown>;\n remove?: boolean;\n /** Bật/tắt value-label động (độ dài segment / bán kính circle). */\n valueLabel?: boolean;\n}\n\ninterface CommonProps {\n anchor: { x: number; y: number };\n onClose: () => void;\n onMutate: (patch: PropertyPatch) => void;\n isDark?: boolean;\n /** Trả về danh sách tên point hiện có (để rename auto-disambiguate). */\n getAllNames?: () => string[];\n}\n\ninterface PointProps extends CommonProps {\n kind: 'point';\n currentName: string;\n currentColor: string;\n currentDash: number;\n currentWidth: number;\n currentFace: PointFace;\n /** Có đang hiện label tên không. */\n currentShowLabel?: boolean;\n}\n\ninterface LineOrCircleProps extends CommonProps {\n kind: 'line' | 'circle';\n currentName: string;\n currentColor: string;\n currentDash: number;\n currentWidth: number;\n /** Có đang hiện label tên không. */\n currentShowLabel?: boolean;\n /** Có đang hiện value-label động không. */\n currentShowValue?: boolean;\n}\n\ntype Props = PointProps | LineOrCircleProps;\n\nconst DASH_OPTIONS: Array<{ value: number; label: string }> = [\n { value: 0, label: 'Nét liền' },\n { value: 2, label: 'Nét đứt' },\n { value: 1, label: 'Nét chấm' },\n];\n\nconst WIDTH_OPTIONS = [1, 2, 3];\n\nconst FACE_OPTIONS: Array<{ value: PointFace; symbol: string }> = [\n { value: 'o', symbol: '●' },\n { value: 'circle', symbol: '◯' },\n { value: 'cross', symbol: '✕' },\n { value: 'plus', symbol: '✚' },\n];\n\n// Unicode subscript digits — dùng để tự đặt tên duy nhất khi user nhập trùng.\n// Lưu dưới dạng ký tự subscript thì JSXGraph SVG <text> render đúng \"B₂\"\n// như label một glyph, không cần MathJax/KaTeX.\nconst SUB_DIGITS = ['₀', '₁', '₂', '₃', '₄', '₅', '₆', '₇', '₈', '₉'];\nconst SUB_SET = new Set(SUB_DIGITS);\n\nfunction toSubscript(n: number): string {\n return String(n).split('').map((d) => SUB_DIGITS[+d] ?? d).join('');\n}\n\nfunction stripTrailingSubscript(s: string): string {\n let i = s.length;\n while (i > 0 && SUB_SET.has(s[i - 1])) i--;\n return s.slice(0, i);\n}\n\nfunction disambiguateName(name: string, existing: Set<string>): string {\n if (!name) return name;\n if (!existing.has(name)) return name;\n const base = stripTrailingSubscript(name) || name;\n for (let n = 2; n < 1000; n++) {\n const candidate = base + toSubscript(n);\n if (!existing.has(candidate)) return candidate;\n }\n return name;\n}\n\ntype Section = 'color' | 'style' | 'size' | 'name' | null;\n\n// Inline icons (small, monochrome) — match the visual weight of Excalidraw's\n// floating action bar in the screenshot. All 16px viewBox 24x24.\nconst Icons = {\n color: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M19 11 L11 3 L3 11 L11 19 Z\" />\n <path d=\"M19 11 L21 16 a2 2 0 1 1 -4 0 Z\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n ),\n style: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"5\" fill=\"currentColor\" /></svg>\n ),\n size: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\"><line x1=\"4\" y1=\"9\" x2=\"20\" y2=\"9\" strokeWidth=\"1\" /><line x1=\"4\" y1=\"13\" x2=\"20\" y2=\"13\" strokeWidth=\"2\" /><line x1=\"4\" y1=\"17\" x2=\"20\" y2=\"17\" strokeWidth=\"3.2\" /></svg>\n ),\n name: (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><text x=\"2\" y=\"17\" fontSize=\"14\" fontFamily=\"serif\" fontWeight=\"700\">A</text><text x=\"12\" y=\"17\" fontSize=\"11\" fontFamily=\"serif\" fontWeight=\"700\">a</text></svg>\n ),\n trash: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><polyline points=\"3,6 5,6 21,6\" /><path d=\"M19 6 l-1 14 a 2 2 0 0 1 -2 2 H 8 a 2 2 0 0 1 -2 -2 l-1 -14\" /><line x1=\"10\" y1=\"11\" x2=\"10\" y2=\"17\" /><line x1=\"14\" y1=\"11\" x2=\"14\" y2=\"17\" /></svg>\n ),\n};\n\nexport const PropertiesPopover: React.FC<Props> = (props) => {\n const { anchor, onClose, onMutate, isDark, getAllNames } = props;\n const rootRef = useRef<HTMLDivElement>(null);\n const [section, setSection] = useState<Section>(null);\n const { isMobile } = useIsMobile();\n // Clamp anchor vào viewport sau khi render (measure actual rect).\n // Trên mobile, force bottom-center thay vì follow anchor (anchor có thể nằm\n // sát mép màn hình hoặc dưới ngón tay user → khó tap).\n const [clamped, setClamped] = useState<{ left: number; top: number } | null>(null);\n useLayoutEffect(() => {\n if (typeof window === 'undefined') return;\n const margin = 8;\n if (isMobile) {\n // Bottom-center, 12px above bottom safe area.\n const rect = rootRef.current?.getBoundingClientRect();\n const w = rect?.width ?? 280;\n const left = Math.max(margin, (window.innerWidth - w) / 2);\n const top = window.innerHeight - (rect?.height ?? 80) - margin - 12;\n setClamped({ left, top: Math.max(margin, top) });\n return;\n }\n const rect = rootRef.current?.getBoundingClientRect();\n const w = rect?.width ?? 280;\n const h = rect?.height ?? 80;\n const left = Math.max(margin, Math.min(anchor.x, window.innerWidth - w - margin));\n const top = Math.max(margin, Math.min(anchor.y, window.innerHeight - h - margin));\n setClamped({ left, top });\n }, [anchor.x, anchor.y, isMobile, section]);\n\n const initialName =\n props.kind === 'point' ? props.currentName : (props.kind === 'line' || props.kind === 'circle') ? props.currentName : '';\n const [name, setName] = useState<string>(initialName);\n // Khi popover mở lại trên đối tượng khác, đồng bộ name input.\n useEffect(() => {\n setName(initialName);\n \n }, [initialName]);\n\n useEffect(() => {\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') { e.preventDefault(); onClose(); }\n };\n // PointerDown covers mouse + touch + pen — replaces legacy mousedown listener\n // which excluded touch/pen and broke click-outside trên mobile.\n const onPointerDown = (e: PointerEvent) => {\n if (!rootRef.current?.contains(e.target as Node)) onClose();\n };\n document.addEventListener('keydown', onKey);\n document.addEventListener('pointerdown', onPointerDown, { capture: true });\n return () => {\n document.removeEventListener('keydown', onKey);\n document.removeEventListener('pointerdown', onPointerDown, { capture: true } as EventListenerOptions);\n };\n }, [onClose]);\n\n const pickColor = (c: string) => {\n onMutate({ attrs: { strokeColor: c, fillColor: props.kind === 'circle' ? 'none' : c, color: c } });\n };\n const pickDash = (d: number) => onMutate({ attrs: { dash: d } });\n const pickWidth = (w: number) => onMutate({ attrs: { strokeWidth: w } });\n const pickFace = (f: PointFace) => onMutate({ attrs: { face: f } });\n\n const currentName = (props.kind === 'point' || props.kind === 'line' || props.kind === 'circle') ? props.currentName : '';\n const commitName = () => {\n const trimmed = name.trim();\n if (trimmed === currentName) return;\n // Cho phép xoá tên (empty); chỉ disambiguate khi user nhập 1 cái gì đó.\n let final = trimmed;\n if (trimmed) {\n const others = new Set((getAllNames?.() ?? []).filter((n) => n !== currentName));\n final = disambiguateName(trimmed, others);\n }\n if (final !== name) setName(final);\n onMutate({ attrs: { name: final } });\n };\n\n const toggleShowLabel = (next: boolean) => onMutate({ attrs: { withLabel: next } });\n const toggleShowValue = (next: boolean) => onMutate({ valueLabel: next });\n\n const doDelete = () => { onMutate({ remove: true }); onClose(); };\n\n const toggleSection = (s: Section) => setSection((cur) => (cur === s ? null : s));\n\n const currentColor = props.currentColor;\n const currentDash = props.currentDash;\n const currentWidth = props.currentWidth;\n\n // Hooks must be called unconditionally — before any early return\n const colorIndicatorTint = useMemo(() => currentColor, [currentColor]);\n\n if (typeof document === 'undefined') return null;\n\n // Pill toolbar: row of icon buttons, separator before trash. Click một icon\n // để bung panel chi tiết bên dưới. Trash xoá ngay (không có panel).\n const PillBtn = ({ id, label, icon, active, onClick, indicatorColor }: {\n id: string; label: string; icon: React.ReactNode; active?: boolean;\n onClick: () => void; indicatorColor?: string;\n }) => (\n <button\n type=\"button\"\n data-section={id}\n data-pill-btn={id}\n aria-label={label}\n aria-pressed={!!active}\n onClick={onClick}\n className={`relative flex h-8 w-8 items-center justify-center rounded-md transition ${\n active ? 'bg-slate-200 text-slate-900' : 'text-slate-700 hover:bg-slate-100'\n }`}\n >\n {icon}\n {indicatorColor && (\n <span\n aria-hidden\n className=\"absolute bottom-0.5 left-1/2 -translate-x-1/2 h-1 w-4 rounded-full\"\n style={{ background: indicatorColor }}\n />\n )}\n </button>\n );\n\n const pos = clamped ?? { left: anchor.x, top: anchor.y };\n const node = (\n <div\n ref={rootRef}\n data-stamp-area=\"true\"\n className={`${isDark ? 'theme--dark ' : ''}fixed z-[2147483600] flex flex-col gap-1.5`}\n style={{ left: pos.left, top: pos.top }}\n role=\"dialog\"\n aria-label=\"Thuộc tính đối tượng\"\n >\n {/* Pill toolbar */}\n <div className=\"flex items-center gap-1 rounded-full border border-slate-300 bg-white px-1.5 py-1 shadow-lg ring-1 ring-black/5\">\n <PillBtn id=\"color\" label=\"Màu\" icon={Icons.color} active={section === 'color'} onClick={() => toggleSection('color')} indicatorColor={colorIndicatorTint} />\n <PillBtn id=\"style\" label=\"Kiểu\" icon={Icons.style} active={section === 'style'} onClick={() => toggleSection('style')} />\n <PillBtn id=\"size\" label=\"Độ dày\" icon={Icons.size} active={section === 'size'} onClick={() => toggleSection('size')} />\n <PillBtn id=\"name\" label=\"Tên\" icon={Icons.name} active={section === 'name'} onClick={() => toggleSection('name')} />\n <span aria-hidden className=\"mx-0.5 h-5 w-px bg-slate-200\" />\n <PillBtn id=\"delete\" label=\"Xoá\" icon={Icons.trash} onClick={doDelete} />\n </div>\n\n {/* Sub-panel — chỉ hiện khi user chọn 1 icon */}\n {section && (\n <div className=\"w-[220px] rounded-lg border border-slate-300 bg-white p-3 shadow-2xl ring-1 ring-black/5\">\n {section === 'color' && (\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-[11px] font-medium text-slate-500\">Màu</span>\n <div className=\"flex flex-wrap gap-1\">\n {STROKE_PALETTE.map((c) => (\n <button\n key={c}\n aria-label={`Màu ${c}`}\n onClick={() => pickColor(c)}\n className={`h-6 w-6 rounded border ${currentColor === c ? 'border-emerald-500 ring-2 ring-emerald-300' : 'border-slate-200'}`}\n style={{ background: c }}\n />\n ))}\n </div>\n </div>\n )}\n\n {section === 'style' && (\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-[11px] font-medium text-slate-500\">Kiểu</span>\n {props.kind === 'point' ? (\n <div className=\"flex gap-1\">\n {FACE_OPTIONS.map((f) => (\n <button\n key={f.value}\n aria-label={`Hình ${f.value}`}\n onClick={() => pickFace(f.value)}\n className={`h-7 w-7 rounded border text-sm ${(props as PointProps).currentFace === f.value ? 'border-emerald-500 bg-emerald-50' : 'border-slate-300 bg-white'}`}\n >\n {f.symbol}\n </button>\n ))}\n </div>\n ) : (\n <div className=\"flex gap-1\">\n {DASH_OPTIONS.map((d) => (\n <button\n key={d.value}\n aria-label={`Kiểu ${d.label.toLowerCase()}`}\n onClick={() => pickDash(d.value)}\n className={`flex-1 rounded border px-1 py-1 text-[11px] ${currentDash === d.value ? 'border-emerald-500 bg-emerald-50' : 'border-slate-300 bg-white'}`}\n >\n {d.label}\n </button>\n ))}\n </div>\n )}\n </div>\n )}\n\n {section === 'size' && (\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-[11px] font-medium text-slate-500\">Độ dày</span>\n <div className=\"flex gap-1\">\n {WIDTH_OPTIONS.map((w) => (\n <button\n key={w}\n aria-label={`Độ dày ${w}`}\n onClick={() => pickWidth(w)}\n className={`flex-1 rounded border py-1 ${currentWidth === w ? 'border-emerald-500 bg-emerald-50' : 'border-slate-300 bg-white'}`}\n >\n <span className=\"inline-block rounded bg-slate-800\" style={{ width: 30, height: w }} />\n </button>\n ))}\n </div>\n </div>\n )}\n\n {section === 'name' && (\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-[11px] font-medium text-slate-500\">Tên</span>\n <input\n value={name}\n onChange={(e) => setName(e.target.value)}\n onBlur={commitName}\n onKeyDown={(e) => { if (e.key === 'Enter') { e.preventDefault(); commitName(); } }}\n autoFocus\n placeholder={props.kind === 'point' ? 'A, B, …' : props.kind === 'line' ? 'a, b, f, …' : 'O, c, …'}\n className=\"rounded border border-slate-300 bg-white px-2 py-1 text-sm text-slate-800\"\n />\n <span className=\"text-[10px] text-slate-400\">Trùng tên sẽ tự thêm chỉ số (B → B₂)</span>\n </div>\n\n <label className=\"flex items-center justify-between gap-2 text-[12px] text-slate-700\">\n <span>Hiển thị tên</span>\n <input\n type=\"checkbox\"\n checked={props.currentShowLabel !== false}\n onChange={(e) => toggleShowLabel(e.target.checked)}\n aria-label=\"Hiển thị tên\"\n />\n </label>\n\n {(props.kind === 'line' || props.kind === 'circle') && (\n <label className=\"flex items-center justify-between gap-2 text-[12px] text-slate-700\">\n <span>Hiển thị giá trị</span>\n <input\n type=\"checkbox\"\n checked={!!(props as LineOrCircleProps).currentShowValue}\n onChange={(e) => toggleShowValue(e.target.checked)}\n aria-label=\"Hiển thị giá trị\"\n />\n </label>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n );\n\n return createPortal(node, document.body);\n};\n","'use client';\n/**\n * MultiPropertiesPopover — popover compact cho multi-select (≥2 đối tượng).\n *\n * Khác với PropertiesPopover (single-select): chỉ phơi ra các action chung\n * cho mọi kind — đổi màu + xóa. Các trường kind-specific (face, dash, name,\n * showValue) bị ẩn vì không có ngữ nghĩa nhất quán trên selection nhiều kind\n * khác nhau.\n *\n * EditorPanel gọi `onColor(c)` cho mỗi id selected; `onDelete()` xóa tất cả.\n */\nimport React, { useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { STROKE_PALETTE } from '../../shared/excalidrawPalette';\nimport { useIsMobile } from '../../shared/useIsMobile';\n\ntype Section = 'color' | null;\n\nconst Icons = {\n color: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M19 11 L11 3 L3 11 L11 19 Z\" />\n <path d=\"M19 11 L21 16 a2 2 0 1 1 -4 0 Z\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n ),\n trash: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"3,6 5,6 21,6\" />\n <path d=\"M19 6 l-1 14 a 2 2 0 0 1 -2 2 H 8 a 2 2 0 0 1 -2 -2 l-1 -14\" />\n <line x1=\"10\" y1=\"11\" x2=\"10\" y2=\"17\" />\n <line x1=\"14\" y1=\"11\" x2=\"14\" y2=\"17\" />\n </svg>\n ),\n};\n\nexport interface MultiPropertiesPopoverProps {\n anchor: { x: number; y: number };\n count: number;\n isDark?: boolean;\n onColor: (color: string) => void;\n onDelete: () => void;\n onClose: () => void;\n}\n\nexport const MultiPropertiesPopover: React.FC<MultiPropertiesPopoverProps> = (props) => {\n const { anchor, count, isDark, onColor, onDelete, onClose } = props;\n const rootRef = useRef<HTMLDivElement>(null);\n const [section, setSection] = useState<Section>(null);\n const { isMobile } = useIsMobile();\n const [clamped, setClamped] = useState<{ left: number; top: number } | null>(null);\n\n useLayoutEffect(() => {\n if (typeof window === 'undefined') return;\n const margin = 8;\n if (isMobile) {\n const rect = rootRef.current?.getBoundingClientRect();\n const w = rect?.width ?? 220;\n const left = Math.max(margin, (window.innerWidth - w) / 2);\n const top = window.innerHeight - (rect?.height ?? 80) - margin - 12;\n setClamped({ left, top: Math.max(margin, top) });\n return;\n }\n const rect = rootRef.current?.getBoundingClientRect();\n const w = rect?.width ?? 220;\n const h = rect?.height ?? 80;\n const left = Math.max(margin, Math.min(anchor.x, window.innerWidth - w - margin));\n const top = Math.max(margin, Math.min(anchor.y, window.innerHeight - h - margin));\n setClamped({ left, top });\n }, [anchor.x, anchor.y, isMobile, section]);\n\n useEffect(() => {\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') { e.preventDefault(); onClose(); }\n };\n const onPointerDown = (e: PointerEvent) => {\n if (!rootRef.current?.contains(e.target as Node)) onClose();\n };\n document.addEventListener('keydown', onKey);\n document.addEventListener('pointerdown', onPointerDown, { capture: true });\n return () => {\n document.removeEventListener('keydown', onKey);\n document.removeEventListener('pointerdown', onPointerDown, { capture: true } as EventListenerOptions);\n };\n }, [onClose]);\n\n const toggleSection = (s: Section) => setSection((cur) => (cur === s ? null : s));\n const doDelete = () => { onDelete(); onClose(); };\n\n if (typeof document === 'undefined') return null;\n\n const PillBtn = ({ id, label, icon, active, onClick }: {\n id: string; label: string; icon: React.ReactNode; active?: boolean; onClick: () => void;\n }) => (\n <button\n type=\"button\"\n data-section={id}\n data-pill-btn={id}\n aria-label={label}\n aria-pressed={!!active}\n onClick={onClick}\n className={`relative flex h-8 w-8 items-center justify-center rounded-md transition ${\n active ? 'bg-slate-200 text-slate-900' : 'text-slate-700 hover:bg-slate-100'\n }`}\n >\n {icon}\n </button>\n );\n\n const pos = clamped ?? { left: anchor.x, top: anchor.y };\n const node = (\n <div\n ref={rootRef}\n data-stamp-area=\"true\"\n data-testid=\"multi-properties-popover\"\n className={`${isDark ? 'theme--dark ' : ''}fixed z-[2147483600] flex flex-col gap-1.5`}\n style={{ left: pos.left, top: pos.top }}\n role=\"dialog\"\n aria-label={`Thuộc tính (${count} đối tượng)`}\n >\n <div className=\"flex items-center gap-1 rounded-full border border-slate-300 bg-white px-1.5 py-1 shadow-lg ring-1 ring-black/5\">\n <span className=\"px-1 text-[11px] font-medium text-slate-500\">{count} đã chọn</span>\n <span aria-hidden className=\"mx-0.5 h-5 w-px bg-slate-200\" />\n <PillBtn id=\"color\" label=\"Đổi màu\" icon={Icons.color} active={section === 'color'} onClick={() => toggleSection('color')} />\n <span aria-hidden className=\"mx-0.5 h-5 w-px bg-slate-200\" />\n <PillBtn id=\"delete\" label=\"Xoá tất cả\" icon={Icons.trash} onClick={doDelete} />\n </div>\n\n {section === 'color' && (\n <div className=\"w-[220px] rounded-lg border border-slate-300 bg-white p-3 shadow-2xl ring-1 ring-black/5\">\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-[11px] font-medium text-slate-500\">Màu (áp cho {count} đối tượng)</span>\n <div className=\"flex flex-wrap gap-1\">\n {STROKE_PALETTE.map((c) => (\n <button\n key={c}\n aria-label={`Màu ${c}`}\n onClick={() => onColor(c)}\n className=\"h-6 w-6 rounded border border-slate-200\"\n style={{ background: c }}\n />\n ))}\n </div>\n </div>\n </div>\n )}\n </div>\n );\n\n return createPortal(node, document.body);\n};\n","'use client';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nexport type ParamKind = 'rotate' | 'dilate' | 'regularPolygon';\n\ninterface Props {\n kind: ParamKind;\n anchor: { x: number; y: number };\n defaultValue: number;\n onConfirm: (value: number) => void;\n onCancel: () => void;\n isDark?: boolean;\n}\n\nconst LABELS: Record<ParamKind, { aria: string; label: string; step: number; min?: number }> = {\n rotate: { aria: 'Góc quay', label: 'Góc (°)', step: 15 },\n dilate: { aria: 'Tỷ số k', label: 'Tỷ số k', step: 0.5 },\n regularPolygon: { aria: 'Số cạnh đa giác đều', label: 'Số cạnh (n ≥ 3)', step: 1, min: 3 },\n};\n\nexport const TransformParamPopover: React.FC<Props> = ({ kind, anchor, defaultValue, onConfirm, onCancel, isDark }) => {\n const [value, setValue] = useState<number>(defaultValue);\n const inputRef = useRef<HTMLInputElement>(null);\n const meta = LABELS[kind];\n\n useEffect(() => { inputRef.current?.focus(); inputRef.current?.select(); }, []);\n\n const submit = () => {\n let v = Number.isFinite(value) ? value : defaultValue;\n if (kind === 'regularPolygon') {\n v = Math.max(3, Math.round(v));\n }\n onConfirm(v);\n };\n\n if (typeof document === 'undefined') return null;\n\n const node = (\n <div\n data-stamp-area=\"true\"\n className={`${isDark ? 'theme--dark ' : ''}fixed z-[2147483600] flex flex-col gap-2 rounded-lg border border-slate-300 bg-white p-3 shadow-2xl ring-1 ring-black/5`}\n style={{ left: anchor.x, top: anchor.y, minWidth: 180 }}\n role=\"dialog\"\n aria-label={meta.aria}\n >\n <label className=\"text-xs font-medium text-slate-700\">{meta.label}</label>\n <input\n ref={inputRef}\n type=\"number\"\n value={value}\n step={meta.step}\n min={meta.min}\n onChange={(e) => setValue(parseFloat(e.target.value))}\n onKeyDown={(e) => {\n if (e.key === 'Enter') { e.preventDefault(); submit(); }\n else if (e.key === 'Escape') { e.preventDefault(); onCancel(); }\n }}\n className=\"rounded border border-slate-300 bg-white px-2 py-1 text-sm text-slate-800\"\n />\n <div className=\"flex justify-end gap-2\">\n <button\n onClick={onCancel}\n className=\"rounded border border-slate-300 bg-white px-2 py-1 text-xs text-slate-700 hover:bg-slate-100\"\n >\n Huỷ\n </button>\n <button\n onClick={submit}\n className=\"rounded bg-emerald-600 px-2 py-1 text-xs font-medium text-white hover:bg-emerald-700\"\n >\n Áp dụng\n </button>\n </div>\n </div>\n );\n\n return createPortal(node, document.body);\n};\n","// src/stamps/shared/StampLeftPanel/constants.ts\n//\n// Desktop popover sizing chia sẻ giữa 3 stamp editor (geometry-2d, geometry-3d,\n// graph-2d). Trước đây mỗi EditorPanel hardcode size riêng (640×540 cho 2D/graph,\n// 800×600 cho 3D) → kích thước canvas nhỏ + không nhất quán. Gom vào constant\n// 880×700 + cap responsive để dùng được trên màn nhỏ.\n\n/** Tailwind class string áp cho outer popover của stamp editor (desktop). */\nexport const STAMP_PANEL_DESKTOP =\n 'h-[700px] w-[880px] max-h-[85vh] max-w-[calc(100vw-280px)]';\n","import React, {\n createContext,\n useCallback,\n useEffect,\n useMemo,\n useReducer,\n useRef,\n} from 'react';\nimport type { ShowToastFn, DismissToastFn, ToastItem, ToastOptions } from './types';\n\nexport interface ToastContextValue {\n items: ToastItem[];\n showToast: ShowToastFn;\n dismiss: DismissToastFn;\n}\n\nexport const ToastContext = createContext<ToastContextValue | null>(null);\n\ntype Action =\n | { type: 'PUSH'; item: ToastItem; maxVisible: number }\n | { type: 'REPLACE'; item: ToastItem }\n | { type: 'DISMISS'; id: string };\n\nfunction reducer(state: ToastItem[], action: Action): ToastItem[] {\n switch (action.type) {\n case 'PUSH': {\n const next = [...state, action.item];\n return next.length > action.maxVisible ? next.slice(next.length - action.maxVisible) : next;\n }\n case 'REPLACE':\n return state.map((it) => (it.id === action.item.id ? action.item : it));\n case 'DISMISS':\n return state.filter((it) => it.id !== action.id);\n }\n}\n\ninterface ToastProviderProps {\n children: React.ReactNode;\n /** Max simultaneously visible toasts. Default: 3. Pushing more drops oldest. */\n maxVisible?: number;\n}\n\nlet autoIdCounter = 0;\n\nexport function ToastProvider({ children, maxVisible = 3 }: ToastProviderProps) {\n const [items, dispatch] = useReducer(reducer, [] as ToastItem[]);\n const timersRef = useRef<Map<string, ReturnType<typeof setTimeout>>>(new Map());\n const itemsRef = useRef(items);\n itemsRef.current = items;\n\n const clearTimer = useCallback((id: string) => {\n const t = timersRef.current.get(id);\n if (t) {\n clearTimeout(t);\n timersRef.current.delete(id);\n }\n }, []);\n\n const dismiss = useCallback<DismissToastFn>((id) => {\n clearTimer(id);\n dispatch({ type: 'DISMISS', id });\n }, [clearTimer]);\n\n const scheduleAutoDismiss = useCallback((id: string, duration: number) => {\n if (duration <= 0) return;\n const t = setTimeout(() => dismiss(id), duration);\n timersRef.current.set(id, t);\n }, [dismiss]);\n\n const showToast = useCallback<ShowToastFn>((message, opts: ToastOptions = {}) => {\n const variant = opts.variant ?? 'info';\n const duration = opts.duration ?? 3000;\n const id = opts.id ?? `toast-${++autoIdCounter}`;\n const item: ToastItem = { id, message, variant, duration };\n const existing = itemsRef.current.find((it) => it.id === id);\n if (existing) {\n clearTimer(id);\n dispatch({ type: 'REPLACE', item });\n } else {\n dispatch({ type: 'PUSH', item, maxVisible });\n }\n scheduleAutoDismiss(id, duration);\n }, [clearTimer, maxVisible, scheduleAutoDismiss]);\n\n useEffect(() => () => {\n timersRef.current.forEach((t) => clearTimeout(t));\n timersRef.current.clear();\n }, []);\n\n const value = useMemo(() => ({ items, showToast, dismiss }), [items, showToast, dismiss]);\n return <ToastContext.Provider value={value}>{children}</ToastContext.Provider>;\n}\n","import React from 'react';\nimport type { ToastVariant } from './types';\n\nconst VARIANT_CLASS: Record<ToastVariant, string> = {\n info: 'border-l-sky-500',\n warning: 'border-l-amber-500',\n error: 'border-l-rose-500',\n};\n\nconst VARIANT_ICON: Record<ToastVariant, React.ReactNode> = {\n info: (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden>\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n ),\n warning: (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden>\n <path d=\"M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n ),\n error: (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden>\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\" />\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\" />\n </svg>\n ),\n};\n\ninterface ToastProps {\n id: string;\n message: string;\n variant: ToastVariant;\n onDismiss: (id: string) => void;\n}\n\nexport function Toast({ id, message, variant, onDismiss }: ToastProps) {\n return (\n <div\n role=\"status\"\n className={[\n 'pointer-events-auto flex max-w-sm items-start gap-2 rounded-lg border-l-4 bg-white px-3 py-2 text-sm text-slate-800 shadow-md ring-1 ring-black/5',\n VARIANT_CLASS[variant],\n ].join(' ')}\n >\n <span className=\"mt-0.5 shrink-0 text-slate-500\">{VARIANT_ICON[variant]}</span>\n <span className=\"flex-1 leading-snug\">{message}</span>\n <button\n type=\"button\"\n aria-label=\"Đóng thông báo\"\n onClick={() => onDismiss(id)}\n className=\"-mr-1 ml-1 inline-flex h-5 w-5 shrink-0 items-center justify-center rounded text-slate-400 hover:bg-slate-100 hover:text-slate-700\"\n >\n ×\n </button>\n </div>\n );\n}\n","import { useContext } from 'react';\nimport { ToastContext } from './ToastProvider';\n\nexport function useToast() {\n const ctx = useContext(ToastContext);\n if (!ctx) {\n throw new Error('useToast must be used inside <ToastProvider>');\n }\n return ctx;\n}\n","import React from 'react';\nimport { Toast } from './Toast';\nimport { useToast } from './useToast';\n\n/**\n * Renders the active toast queue. Mount once near the root of each stamp\n * EditorPanel (inside ToastProvider). Positions itself absolutely at\n * bottom-center of the nearest positioned ancestor.\n */\nexport function ToastHost() {\n const { items, dismiss } = useToast();\n if (items.length === 0) return null;\n return (\n <div\n aria-live=\"polite\"\n className=\"pointer-events-none absolute inset-x-0 bottom-3 z-50 flex flex-col items-center gap-2\"\n >\n {items.map((it) => (\n <Toast key={it.id} id={it.id} message={it.message} variant={it.variant} onDismiss={dismiss} />\n ))}\n </div>\n );\n}\n","export { ToastProvider } from './ToastProvider';\nexport { ToastHost } from './ToastHost';\nexport { Toast } from './Toast';\nexport { useToast } from './useToast';\nexport type {\n ToastVariant,\n ToastOptions,\n ToastItem,\n ShowToastFn,\n DismissToastFn,\n} from './types';\n","'use client';\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport type { State } from '../../../core/scene';\nimport type { GenerateGeometryFigure } from '../../shared/types';\n\nexport interface UseAiFigureResult {\n prompt: string;\n setPrompt: (value: string) => void;\n isLoading: boolean;\n error: string | null;\n submit: () => Promise<State | null>;\n}\n\nexport function useAiFigure(generator?: GenerateGeometryFigure): UseAiFigureResult {\n const [prompt, setPrompt] = useState('');\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const abortRef = useRef<AbortController | null>(null);\n const requestIdRef = useRef(0);\n\n useEffect(() => () => abortRef.current?.abort(), []);\n\n const submit = useCallback(async (): Promise<State | null> => {\n const problem = prompt.trim();\n if (!problem) {\n setError('Nhập đề bài cần dựng hình.');\n return null;\n }\n if (!generator) {\n setError('Tính năng dựng hình AI chưa được cấu hình.');\n return null;\n }\n\n abortRef.current?.abort();\n const controller = new AbortController();\n const requestId = ++requestIdRef.current;\n abortRef.current = controller;\n setIsLoading(true);\n setError(null);\n\n try {\n const generated = await generator(problem, { signal: controller.signal });\n if (controller.signal.aborted || requestId !== requestIdRef.current) return null;\n if (!generated.ok) {\n setError(generated.message);\n return null;\n }\n return generated.state;\n } catch (caught) {\n if (controller.signal.aborted || (caught instanceof DOMException && caught.name === 'AbortError')) {\n return null;\n }\n if (requestId === requestIdRef.current) {\n setError(caught instanceof Error && caught.message\n ? caught.message\n : 'Không thể dựng hình bằng AI.');\n }\n return null;\n } finally {\n if (requestId === requestIdRef.current) {\n abortRef.current = null;\n setIsLoading(false);\n }\n }\n }, [generator, prompt]);\n\n return { prompt, setPrompt, isLoading, error, submit };\n}\n","'use client';\n\nimport React, { useCallback } from 'react';\nimport type { State } from '../../../core/scene';\nimport type { GenerateGeometryFigure } from '../../shared/types';\nimport { useAiFigure } from './useAiFigure';\n\ninterface Props {\n generator: GenerateGeometryFigure;\n onGenerated: (state: State) => void;\n}\n\nexport function AiFigurePrompt({ generator, onGenerated }: Props) {\n const {\n prompt,\n setPrompt,\n isLoading,\n error,\n submit,\n } = useAiFigure(generator);\n\n const handleSubmit = useCallback(async (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n const generated = await submit();\n if (generated) onGenerated(generated);\n }, [onGenerated, submit]);\n\n return (\n <form\n data-testid=\"geometry-ai-form\"\n onSubmit={(event) => { void handleSubmit(event); }}\n className=\"border-b border-slate-200 bg-slate-50 px-3 py-2\"\n >\n <label htmlFor=\"geometry-ai-prompt\" className=\"mb-1 block text-xs font-medium text-slate-600\">\n Dựng hình bằng AI\n </label>\n <div className=\"flex items-start gap-2\">\n <textarea\n id=\"geometry-ai-prompt\"\n aria-label=\"Đề bài cho AI\"\n value={prompt}\n onChange={(event) => setPrompt(event.target.value)}\n disabled={isLoading}\n rows={2}\n placeholder=\"Ví dụ: Cho tam giác ABC, dựng đường cao AH.\"\n className=\"min-h-12 flex-1 resize-none rounded border border-slate-300 bg-white px-2 py-1.5 text-xs text-slate-800 outline-none focus:border-emerald-500 disabled:opacity-60\"\n />\n <button\n type=\"submit\"\n disabled={isLoading || !prompt.trim()}\n className=\"rounded bg-emerald-600 px-3 py-2 text-xs font-medium text-white transition hover:bg-emerald-700 disabled:opacity-50\"\n >\n {isLoading ? 'Đang dựng...' : 'Dựng bằng AI'}\n </button>\n </div>\n {error && (\n <p role=\"alert\" className=\"mt-1 text-xs text-red-600\">{error}</p>\n )}\n </form>\n );\n}\n","'use client';\nimport React, { forwardRef, useCallback, useEffect, useImperativeHandle, useRef, useState } from 'react';\nimport { MiniBoard2D, type MiniBoardHandle, type GeomTool, type ObjectSnapshot, type SelectionStateSnapshot, type TransformPopoverInfo } from './MiniBoard';\nimport { serializeBoard } from '../serialize';\nimport { renderGeometrySvgFromState } from '../render';\nimport { PropertiesPopover } from './PropertiesPopover';\nimport { MultiPropertiesPopover } from './MultiPropertiesPopover';\nimport { TransformParamPopover } from './TransformParamPopover';\nimport { buildObjectSnapshot } from './snapshot';\nimport { UndoIcon, RedoIcon } from './icons';\nimport { useEditorState, type State, type Store } from '../../../core/scene';\nimport { STAMP_PANEL_DESKTOP } from '../../shared/StampLeftPanel/constants';\nimport { ToastProvider, ToastHost, useToast } from '../../shared/Toast';\nimport type { GenerateGeometryFigure } from '../../shared/types';\nimport { AiFigurePrompt } from './AiFigurePrompt';\n\ninterface Props {\n /** Scene store do Host tạo qua `useStampStore`. View info đã ở store.meta.view. */\n store: Store;\n onInsert: (jsonState: string, svgString: string) => void;\n onClose: () => void;\n /** Khi true, panel position offset left để chừa chỗ cho StampLeftPanel (240px). */\n withLeftPanel?: boolean;\n /** Controlled prop — host owns (Tier 2 F). */\n selectedTool: GeomTool;\n /** Controlled prop — host owns (Tier 2 F). */\n showAxis: boolean;\n /** Controlled prop — host owns (Tier 2 F). */\n showGrid: boolean;\n /** Notify host về canUndo/canRedo qua store subscribe (Tier 2 F). */\n onHistoryChange?: (canUndo: boolean, canRedo: boolean) => void;\n isDark?: boolean;\n /** Mobile mode: full-screen + hamburger header. */\n isMobile?: boolean;\n /** Click hamburger trên mobile để mở LeftPanel drawer. */\n onOpenDrawer?: () => void;\n /** Mobile header: undo/redo. Bypass LeftPanel để user truy cập nhanh. */\n onUndo?: () => void;\n onRedo?: () => void;\n canUndo?: boolean;\n canRedo?: boolean;\n /** Báo lên Host khi selection đổi qua action trong editor. */\n onSelectionChange?: (id: string | undefined) => void;\n /** Client-safe bridge to a server-side AI generation call. */\n generateGeometryFigure?: GenerateGeometryFigure;\n}\n\nexport interface GeometryEditorPanelHandle {\n /** Trigger Chèn programmatically (cho auto-insert khi click outside). */\n insert: () => boolean;\n /** Có nội dung để chèn không? */\n hasContent: () => boolean;\n /** Highlight object theo id từ bên ngoài (ObjectListPanel trong Host). */\n selectObject: (id: string | null) => void;\n}\n\nconst GeometryEditorPanelInner = forwardRef<GeometryEditorPanelHandle, Props>(\n function GeometryEditorPanelInner(\n {\n store,\n onInsert,\n onClose,\n withLeftPanel = false,\n selectedTool,\n showAxis,\n showGrid,\n onHistoryChange,\n isDark,\n isMobile = false,\n onOpenDrawer,\n onUndo,\n onRedo,\n canUndo,\n canRedo,\n onSelectionChange,\n generateGeometryFigure,\n },\n ref,\n ) {\n const { showToast } = useToast();\n const handleRef = useRef<MiniBoardHandle | null>(null);\n const [ready, setReady] = useState(false);\n const [hasContent, setHasContent] = useState(false);\n const [propsPopover, setPropsPopover] = useState<ObjectSnapshot | null>(null);\n /** Multi-select snapshot — render compact popover khi ids.length > 1. */\n const [multiSelection, setMultiSelection] = useState<SelectionStateSnapshot | null>(null);\n // Handlers emit cả 6 transform tool (rotate/dilate/regularPolygon/translate/\n // reflectLine/reflectPoint); TransformParamPopover chỉ render 3 tool có\n // numeric param — guard ở chỗ render.\n const [transformPopover, setTransformPopover] = useState<TransformPopoverInfo>(null);\n const onSelectionChangeRef = useRef(onSelectionChange);\n useEffect(() => { onSelectionChangeRef.current = onSelectionChange; }, [onSelectionChange]);\n\n // Tier 2 F — propagate canUndo/canRedo + keyboard shortcuts qua shared hook.\n useEditorState({ store, onHistoryChange });\n\n // hasContent: track store size để gate Insert button.\n useEffect(() => {\n const sync = () => setHasContent(Object.keys(store.getState().objects).length > 0);\n sync();\n return store.subscribe(sync);\n }, [store]);\n\n const handleReady = useCallback(() => {\n const h = handleRef.current;\n if (!h) return;\n setReady(true);\n h.onSelect((snap: ObjectSnapshot) => {\n setPropsPopover(snap);\n setMultiSelection(null);\n onSelectionChangeRef.current?.(snap.id);\n });\n h.onTransformParam((info) => setTransformPopover(info));\n // selection-state channel: fire mỗi khi selectedSetRef đổi (click,\n // shift-click, marquee, clearSelection). Derive popover từ size:\n // 0 → ẩn cả 2 popover\n // 1 → single PropertiesPopover (derive ObjectSnapshot từ store)\n // ≥2 → MultiPropertiesPopover (compact: color + delete)\n h.onSelectionState((snap) => {\n if (!snap || snap.ids.length === 0) {\n setPropsPopover(null);\n setMultiSelection(null);\n onSelectionChangeRef.current?.(undefined);\n return;\n }\n if (snap.ids.length === 1) {\n const id = snap.ids[0];\n const single = buildObjectSnapshot(store.getState(), id, snap.anchor);\n if (single) {\n setPropsPopover(single);\n setMultiSelection(null);\n onSelectionChangeRef.current?.(id);\n }\n return;\n }\n setMultiSelection(snap);\n setPropsPopover(null);\n onSelectionChangeRef.current?.(undefined);\n });\n }, [store]);\n\n const dismissPropsPopover = useCallback(() => {\n setPropsPopover(null);\n onSelectionChangeRef.current?.(undefined);\n }, []);\n\n const dismissMultiPopover = useCallback(() => {\n setMultiSelection(null);\n handleRef.current?.clearSelection();\n onSelectionChangeRef.current?.(undefined);\n }, []);\n\n const applyMultiColor = useCallback((color: string) => {\n const ids = multiSelection?.ids ?? [];\n const h = handleRef.current;\n if (!h) return;\n for (const id of ids) {\n h.mutateObject(id, { attrs: { strokeColor: color, color } });\n }\n }, [multiSelection]);\n\n const applyMultiDelete = useCallback(() => {\n const ids = multiSelection?.ids ?? [];\n const h = handleRef.current;\n if (!h) return;\n for (const id of ids) {\n h.mutateObject(id, { remove: true });\n }\n h.clearSelection();\n setMultiSelection(null);\n onSelectionChangeRef.current?.(undefined);\n }, [multiSelection]);\n\n // Build serialized state (format v2) — async vì SVG render offscreen\n // với light palette để Excalidraw filter tự đảo khi dark mode.\n const performInsert = useCallback((): boolean => {\n if (!handleRef.current) return false;\n const h = handleRef.current;\n const state = h.getState();\n if (Object.keys(state.objects).length === 0) return false;\n const bbox = h.getBbox();\n const jsonState = serializeBoard(state, { bbox, showAxis, showGrid });\n // Fire-and-forget. Caller (`tryInsert`) chỉ cần biết có nội dung không.\n void (async () => {\n try {\n const svgString = await renderGeometrySvgFromState(jsonState);\n onInsert(jsonState, svgString);\n } catch (err) {\n console.error('Geometry insert failed:', err);\n }\n })();\n return true;\n }, [onInsert, showAxis, showGrid]);\n\n const handleInsert = useCallback(() => {\n performInsert();\n }, [performInsert]);\n\n const loadAiFigure = useCallback((generated: State) => {\n handleRef.current?.clearSelection();\n setPropsPopover(null);\n setMultiSelection(null);\n setTransformPopover(null);\n onSelectionChangeRef.current?.(undefined);\n const current = store.getState();\n store.dispatch({\n type: 'LOAD',\n payload: { state: { ...generated, meta: current.meta } },\n });\n }, [store]);\n\n useImperativeHandle(ref, () => ({\n insert: performInsert,\n hasContent: () => Object.keys(handleRef.current?.getState().objects ?? {}).length > 0,\n selectObject: (id) => handleRef.current?.highlight(id),\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\"\n data-testid=\"geometry-editor-panel\"\n data-stamp-area=\"true\"\n data-mobile-editor={isMobile ? 'true' : undefined}\n style={wrapperStyle}\n className={[\n isDark ? 'theme--dark ' : '',\n 'relative flex flex-col overflow-hidden bg-white',\n isMobile\n ? 'h-full w-full'\n : `${STAMP_PANEL_DESKTOP} 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-emerald-600 to-teal-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 <polygon points=\"3,18 12,3 21,18\" />\n <circle cx=\"12\" cy=\"3\" r=\"1.5\" fill=\"currentColor\" />\n <circle cx=\"3\" cy=\"18\" r=\"1.5\" fill=\"currentColor\" />\n <circle cx=\"21\" cy=\"18\" r=\"1.5\" fill=\"currentColor\" />\n </svg>\n Dựng hình học\n </h3>\n {isMobile && (\n <>\n <button\n type=\"button\"\n onClick={onUndo}\n disabled={!canUndo}\n aria-label=\"Hoàn tác\"\n title=\"Hoàn tác (Ctrl/Cmd+Z)\"\n data-testid=\"undo-btn-mobile\"\n className=\"inline-flex h-9 w-9 items-center justify-center rounded transition hover:bg-white/15 disabled:opacity-40\"\n >\n <UndoIcon />\n </button>\n <button\n type=\"button\"\n onClick={onRedo}\n disabled={!canRedo}\n aria-label=\"Làm lại\"\n title=\"Làm lại (Ctrl/Cmd+Shift+Z)\"\n data-testid=\"redo-btn-mobile\"\n className=\"inline-flex h-9 w-9 items-center justify-center rounded transition hover:bg-white/15 disabled:opacity-40\"\n >\n <RedoIcon />\n </button>\n <button\n type=\"button\"\n onClick={handleInsert}\n disabled={!ready || !hasContent}\n title={!hasContent ? 'Vẽ ít nhất một đối tượng trước khi chèn' : undefined}\n data-testid=\"geometry-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 )}\n <button onClick={onClose} aria-label=\"Đóng\" className=\"inline-flex h-9 w-9 items-center justify-center rounded transition hover:bg-white/15\">\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 {generateGeometryFigure && (\n <AiFigurePrompt generator={generateGeometryFigure} onGenerated={loadAiFigure} />\n )}\n <div className=\"flex min-h-0 flex-1\">\n <div className=\"flex-1\">\n <MiniBoard2D\n ref={handleRef}\n store={store}\n selectedTool={selectedTool}\n showAxis={showAxis}\n showGrid={showGrid}\n onReady={handleReady}\n isDark={isDark}\n toast={showToast}\n />\n </div>\n </div>\n {propsPopover && (\n propsPopover.kind === 'point' ? (\n <PropertiesPopover\n kind=\"point\"\n anchor={propsPopover.screenCoords}\n isDark={isDark}\n currentName={propsPopover.name}\n currentColor={propsPopover.color}\n currentDash={propsPopover.dash}\n currentWidth={propsPopover.width}\n currentFace={propsPopover.face}\n currentShowLabel={propsPopover.showLabel}\n getAllNames={() => handleRef.current?.getAllPointNames() ?? []}\n onClose={dismissPropsPopover}\n onMutate={(patch) => {\n handleRef.current?.mutateObject(propsPopover.id, patch);\n if (patch.remove) dismissPropsPopover();\n // Refresh snapshot để UI checkbox phản ánh state mới\n if (typeof patch.valueLabel === 'boolean' || patch.attrs) {\n setPropsPopover((cur) => cur ? { ...cur, showValue: patch.valueLabel ?? cur.showValue } : cur);\n }\n }}\n />\n ) : (\n <PropertiesPopover\n kind={propsPopover.kind}\n anchor={propsPopover.screenCoords}\n isDark={isDark}\n currentName={propsPopover.name}\n currentColor={propsPopover.color}\n currentDash={propsPopover.dash}\n currentWidth={propsPopover.width}\n currentShowLabel={propsPopover.showLabel}\n currentShowValue={propsPopover.showValue}\n getAllNames={() => handleRef.current?.getAllPointNames() ?? []}\n onClose={dismissPropsPopover}\n onMutate={(patch) => {\n handleRef.current?.mutateObject(propsPopover.id, patch);\n if (patch.remove) dismissPropsPopover();\n if (typeof patch.valueLabel === 'boolean') {\n setPropsPopover((cur) => cur ? { ...cur, showValue: patch.valueLabel ?? cur.showValue } : cur);\n }\n if (patch.attrs && 'withLabel' in patch.attrs) {\n setPropsPopover((cur) => cur ? { ...cur, showLabel: !!patch.attrs?.withLabel } : cur);\n }\n }}\n />\n )\n )}\n\n {multiSelection && multiSelection.ids.length > 1 && (\n <MultiPropertiesPopover\n anchor={multiSelection.anchor}\n count={multiSelection.ids.length}\n isDark={isDark}\n onColor={applyMultiColor}\n onDelete={applyMultiDelete}\n onClose={dismissMultiPopover}\n />\n )}\n\n {transformPopover && (transformPopover.tool === 'rotate' || transformPopover.tool === 'dilate' || transformPopover.tool === 'regularPolygon') && (\n <TransformParamPopover\n kind={transformPopover.tool}\n anchor={transformPopover.anchor}\n defaultValue={\n transformPopover.tool === 'rotate' ? 90\n : transformPopover.tool === 'dilate' ? 2\n : 6\n }\n isDark={isDark}\n onConfirm={(v) => { handleRef.current?.confirmTransformParam(v); setTransformPopover(null); }}\n onCancel={() => { handleRef.current?.cancelTransformParam(); setTransformPopover(null); }}\n />\n )}\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 || !hasContent}\n title={!hasContent ? 'Vẽ ít nhất một đối tượng trước khi chèn' : undefined}\n data-testid=\"geometry-insert-btn\"\n className=\"rounded bg-emerald-600 px-3 py-1 text-xs font-medium text-white transition hover:bg-emerald-700 disabled:opacity-50\"\n >\n Chèn\n </button>\n </div>\n </footer>\n )}\n <ToastHost />\n </div>\n );\n },\n);\n\nexport const GeometryEditorPanel = forwardRef<GeometryEditorPanelHandle, Props>(\n function GeometryEditorPanel(props, ref) {\n return (\n <ToastProvider>\n <GeometryEditorPanelInner {...props} ref={ref} />\n </ToastProvider>\n );\n },\n);\n","import { useCallback, useEffect, useRef, useState } from 'react';\n\ninterface UseChordShortcutArgs<G extends string> {\n groupOrder: readonly G[];\n tools: ReadonlyArray<{ key: string; group: G }>;\n onSelect: (toolKey: string) => void;\n enabled: boolean;\n}\n\ninterface UseChordShortcutResult<G extends string> {\n chordGroup: G | null;\n cancel: () => void;\n}\n\nconst A_CODE = 'a'.charCodeAt(0);\n\nfunction isFieldFocused(): boolean {\n const ae = (typeof document !== 'undefined'\n ? (document.activeElement as HTMLElement | null)\n : null);\n return !!(\n ae &&\n (ae.tagName === 'INPUT' ||\n ae.tagName === 'TEXTAREA' ||\n ae.isContentEditable)\n );\n}\n\nexport function useChordShortcut<G extends string>(\n args: UseChordShortcutArgs<G>,\n): UseChordShortcutResult<G> {\n const { groupOrder, tools, onSelect, enabled } = args;\n\n const [chordGroup, setChordGroup] = useState<G | null>(null);\n\n const groupOrderRef = useRef(groupOrder);\n const toolsRef = useRef(tools);\n const onSelectRef = useRef(onSelect);\n const chordGroupRef = useRef<G | null>(null);\n\n groupOrderRef.current = groupOrder;\n toolsRef.current = tools;\n onSelectRef.current = onSelect;\n // chordGroupRef được sync ngay trong handler (xem `setChord` dưới đây)\n // thay vì ghi từ render body — nếu ghi ở body sẽ bị React batch hoá khi\n // hai event xảy ra trong cùng một act() (event sau đọc giá trị cũ).\n\n const cancel = useCallback(() => {\n chordGroupRef.current = null;\n setChordGroup(null);\n }, []);\n\n useEffect(() => {\n if (!enabled) return;\n\n const setChord = (next: G | null) => {\n chordGroupRef.current = next;\n setChordGroup(next);\n };\n\n const onKey = (e: KeyboardEvent) => {\n if (e.metaKey || e.ctrlKey || e.altKey) return;\n if (isFieldFocused()) return;\n\n const key = e.key;\n const lower = key.length === 1 ? key.toLowerCase() : key;\n\n if (key === 'Escape') {\n if (chordGroupRef.current !== null) {\n e.preventDefault();\n e.stopPropagation();\n setChord(null);\n }\n return;\n }\n\n if (lower.length === 1 && lower >= 'a' && lower <= 'z') {\n const idx = lower.charCodeAt(0) - A_CODE;\n if (idx < groupOrderRef.current.length) {\n e.preventDefault();\n e.stopPropagation();\n setChord(groupOrderRef.current[idx]);\n }\n return;\n }\n\n if (key >= '1' && key <= '9') {\n const active = chordGroupRef.current;\n if (active === null) return;\n const n = key.charCodeAt(0) - '1'.charCodeAt(0); // 0-indexed\n const toolsInGroup = toolsRef.current.filter(\n (t) => t.group === active,\n );\n e.preventDefault();\n e.stopPropagation();\n if (n < toolsInGroup.length) {\n onSelectRef.current(toolsInGroup[n].key);\n }\n setChord(null);\n return;\n }\n };\n\n window.addEventListener('keydown', onKey, { capture: true });\n return () => {\n window.removeEventListener('keydown', onKey, { capture: true });\n };\n }, [enabled]);\n\n return { chordGroup, cancel };\n}\n","import { createStampFile } from './svgToStampFile';\nimport type { ExcalidrawElement } from '../../types';\n\n// Excalidraw imperative API — không có public type chính xác. Giữ untyped ở\n// boundary và yêu cầu caller pass đúng instance.\n \ntype ExApi = any;\n\nexport interface InsertStampImageOptions {\n /** SVG string sẵn sàng render (geometry export hoặc katex render). */\n svgString: string;\n /**\n * Factory tạo customData. Mỗi stamp tự define shape (kind, version, jsonState).\n * width/height của element đã được Excalidraw track riêng — không cần lưu\n * trong customData (drop tại Tier D cleanup v0.20).\n */\n makeCustomData: () => unknown;\n /** Nếu đang re-edit, id của element cũ — sẽ update thay vì tạo mới. */\n editingElementId?: string | null;\n /** Vị trí gốc (lúc tạo mới). Bỏ qua khi đang re-edit. */\n position?: { x?: number; y?: number };\n}\n\nexport interface InsertStampImageResult {\n fileId: string;\n width: number;\n height: number;\n /** Element id (mới hoặc cũ tuỳ flow). */\n elementId: string;\n}\n\n// Bỏ qua appState (selectedElementIds + croppingElementId) sau khi insert để\n// Excalidraw không tự động bật crop mode cho element vừa thêm → tránh trigger\n// crop intercept handler vô tận.\n \nconst clearAppStateAfterInsert = (): any => ({\n selectedElementIds: {},\n croppingElementId: null,\n});\n\nfunction buildStampImageElement(\n api: ExApi,\n fileId: string,\n width: number,\n height: number,\n customData: unknown,\n x?: number,\n y?: number,\n) {\n const appState =\n api?.getAppState() ?? { scrollX: 0, scrollY: 0, width: 800, height: 600, zoom: { value: 1 } };\n const cx =\n x ?? appState.scrollX + (appState.width ?? 800) / 2 / (appState.zoom?.value ?? 1) - width / 2;\n const cy =\n y ?? appState.scrollY + (appState.height ?? 600) / 2 / (appState.zoom?.value ?? 1) - height / 2;\n return {\n type: 'image' as const,\n id: 'stamp_' + Date.now() + '_' + Math.random().toString(36).slice(2, 8),\n x: cx,\n y: cy,\n width,\n height,\n fileId,\n customData,\n angle: 0,\n strokeColor: 'transparent',\n backgroundColor: 'transparent',\n fillStyle: 'solid',\n strokeWidth: 1,\n strokeStyle: 'solid',\n roughness: 0,\n opacity: 100,\n groupIds: [],\n roundness: null,\n seed: Math.floor(Math.random() * 1e9),\n versionNonce: 0,\n version: 1,\n isDeleted: false,\n boundElements: null,\n updated: Date.now(),\n link: null,\n locked: false,\n status: 'saved',\n scale: [1, 1],\n };\n}\n\n/**\n * Chèn (hoặc thay thế) một stamp image vào Excalidraw scene.\n *\n * Flow:\n * 1. createStampFile(svg) → fileId + dataURL + kích thước\n * 2. api.addFiles([...]) — đăng ký SVG dưới fileId\n * 3. Nếu editingElementId → update element cũ (giữ position, đổi fileId+customData+size)\n * Còn lại → tạo image element mới ở giữa viewport (hoặc position truyền vào)\n *\n * Đoạn này trước đây nằm 2 chỗ (handleGeometryInsert + handleLatexInsert),\n * chỉ khác customData. Gộp lại để: thêm stamp type mới chỉ cần truyền\n * `makeCustomData`.\n */\nexport async function insertStampImage(\n api: ExApi,\n opts: InsertStampImageOptions,\n): Promise<InsertStampImageResult> {\n const { dataURL, fileId, width, height, mimeType } = await createStampFile(opts.svgString);\n api.addFiles([{ id: fileId, dataURL, mimeType, created: Date.now() }]);\n const customData = opts.makeCustomData();\n\n const elements = api.getSceneElements() as readonly ExcalidrawElement[];\n const editingId = opts.editingElementId ?? null;\n\n if (editingId) {\n const updated = elements.map((e) =>\n e.id === editingId ? { ...e, fileId, customData, width, height } : e,\n );\n api.updateScene({ elements: updated, appState: clearAppStateAfterInsert() });\n return { fileId, width, height, elementId: editingId };\n }\n\n const newElement = buildStampImageElement(\n api,\n fileId,\n width,\n height,\n customData,\n opts.position?.x,\n opts.position?.y,\n );\n api.updateScene({\n elements: [...elements, newElement],\n appState: clearAppStateAfterInsert(),\n });\n return { fileId, width, height, elementId: newElement.id };\n}\n","// Hook tạo + giữ scene store tại Host level cho mọi stamp interactive\n// (geometry-2d, geometry-3d, graph-2d).\n//\n// Trước đây mỗi stamp dùng pattern riêng:\n// - 3D: useRef + createStore(createEmptyState('3d')) inline tại host.\n// - 2D + graph-2d: useState<Store|null> + callback `onStoreReady` từ editor.\n//\n// Hook này hợp nhất về 1 mental model: store sống ở host, identity stable,\n// pre-load từ customData ngay frame đầu → bỏ ternary `store ? ... : undefined`\n// + bỏ flash 1 frame trên 2D + graph-2d.\n//\n// Roundtrip edit: khi double-click stamp existing element, `editingElement`\n// được pass vào, hook gọi `parseInitial(customData)` để extract State trước\n// khi createStore. Stamp tự define parseInitial vì format customData khác nhau.\n\nimport { useRef } from 'react';\nimport { createStore, createEmptyState, type Store } from '../../core/scene';\nimport type { State } from '../../core/scene/types';\nimport type { StampHostProps } from './types';\n\nexport type StampDomain = '2d' | '3d' | 'graph2d';\n\nexport type ParseInitialStateFn = (customData: unknown) => State | null;\n\nexport function useStampStore(\n domain: StampDomain,\n editingElement: StampHostProps['editingElement'],\n parseInitial: ParseInitialStateFn,\n): Store {\n const ref = useRef<Store | null>(null);\n if (!ref.current) {\n const initial = editingElement?.customData\n ? parseInitial(editingElement.customData) ?? createEmptyState(domain)\n : createEmptyState(domain);\n ref.current = createStore(initial);\n }\n return ref.current;\n}\n","'use client';\n\nimport {\n forwardRef,\n useCallback,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react';\nimport { StampLeftPanel } from '../shared/StampLeftPanel';\nimport { GeometryIconHeader } from './editor/icons';\nimport {\n GeometryEditorPanel,\n type GeometryEditorPanelHandle,\n} from './editor/EditorPanel';\nimport type { GeomTool } from './editor/MiniBoard';\nimport { GROUP_ORDER, GROUP_LABELS, TOOLS, letterForGroup, type GeomGroup } from './editor/tools';\nimport { useChordShortcut } from '../shared/useChordShortcut';\nimport { insertStampImage } from '../shared/insertImage';\nimport { deserializeBoard } from './serialize';\nimport { isGeometryCustomData, type GeometryCustomData } from './types';\nimport { DEFAULT_VIEW_2D, type State } from '../../core/scene';\nimport type {\n StampHostProps,\n StampHostHandle,\n} from '../shared/types';\nimport { useIsMobile } from '../shared/useIsMobile';\nimport { useStampStore } from '../shared/useStampStore';\n\nfunction parseInitialState(data: unknown): State | null {\n if (!isGeometryCustomData(data)) return null;\n return deserializeBoard(data.jsonState);\n}\n\nexport const GeometryStampHost = forwardRef<StampHostHandle, StampHostProps>(\n function GeometryStampHost({ api, editingElement, onClose, isDark, generateGeometryFigure }, ref) {\n const panelRef = useRef<GeometryEditorPanelHandle | null>(null);\n const { isMobile } = useIsMobile();\n const [drawerOpen, setDrawerOpen] = useState(false);\n const sceneStore = useStampStore('2d', editingElement, parseInitialState);\n\n // Tier 2 F — host owns editor UI state.\n const initialMeta = sceneStore.getState().meta;\n const initialView = initialMeta.domain === '2d' ? initialMeta.view : DEFAULT_VIEW_2D;\n const [selectedTool, setSelectedTool] = useState<GeomTool>('move');\n const [showAxis, setShowAxis] = useState<boolean>(initialView.showAxis);\n const [showGrid, setShowGrid] = useState<boolean>(initialView.showGrid);\n const [canUndo, setCanUndo] = useState<boolean>(false);\n const [canRedo, setCanRedo] = useState<boolean>(false);\n const [selectedObjectId, setSelectedObjectId] = useState<string | undefined>(undefined);\n\n const handleHistoryChange = useCallback((u: boolean, r: boolean) => {\n setCanUndo(u);\n setCanRedo(r);\n }, []);\n\n const handleUndo = useCallback(() => sceneStore.undo(), [sceneStore]);\n const handleRedo = useCallback(() => sceneStore.redo(), [sceneStore]);\n\n const { chordGroup } = useChordShortcut({\n groupOrder: GROUP_ORDER,\n tools: TOOLS,\n onSelect: (key) => setSelectedTool(key as GeomTool),\n enabled: !isMobile,\n });\n\n const handleInsert = useCallback(\n async (jsonState: string, svgString: string) => {\n if (!api) return;\n try {\n await insertStampImage(api, {\n svgString,\n makeCustomData: (): GeometryCustomData => ({\n kind: 'geometry',\n version: 1,\n jsonState,\n }),\n editingElementId: editingElement?.id ?? null,\n });\n } catch (err) {\n console.error('Geometry insert failed:', err);\n }\n onClose();\n },\n [api, editingElement?.id, onClose],\n );\n\n useImperativeHandle(\n ref,\n () => ({\n tryInsert: () => panelRef.current?.insert() ?? false,\n hasContent: () => panelRef.current?.hasContent() ?? false,\n }),\n [],\n );\n\n return (\n <>\n <StampLeftPanel<GeomTool, GeomGroup>\n title=\"Hình học\"\n icon={GeometryIconHeader}\n onClose={onClose}\n isDark={isDark}\n testId=\"stamp-left-panel\"\n tools={TOOLS}\n groupOrder={GROUP_ORDER}\n groupLabels={GROUP_LABELS}\n activeTool={selectedTool}\n onToolChange={setSelectedTool}\n view={{\n showAxis,\n showGrid,\n onShowAxisChange: setShowAxis,\n onShowGridChange: setShowGrid,\n }}\n history={{\n onUndo: handleUndo,\n canUndo,\n onRedo: handleRedo,\n canRedo,\n }}\n chord={{ activeGroup: chordGroup, letterForGroup }}\n objects={{\n store: sceneStore,\n selectedObjectId,\n onObjectSelect: (id) => {\n setSelectedObjectId(id ?? undefined);\n panelRef.current?.selectObject(id);\n },\n }}\n isMobile={isMobile}\n drawerOpen={drawerOpen}\n onDrawerClose={() => setDrawerOpen(false)}\n />\n <GeometryEditorPanel\n ref={panelRef}\n store={sceneStore}\n onInsert={handleInsert}\n onClose={onClose}\n selectedTool={selectedTool}\n showAxis={showAxis}\n showGrid={showGrid}\n onHistoryChange={handleHistoryChange}\n withLeftPanel={!isMobile}\n isDark={isDark}\n isMobile={isMobile}\n onOpenDrawer={() => setDrawerOpen(true)}\n onUndo={handleUndo}\n onRedo={handleRedo}\n canUndo={canUndo}\n canRedo={canRedo}\n onSelectionChange={setSelectedObjectId}\n generateGeometryFigure={generateGeometryFigure}\n />\n </>\n );\n },\n);\n","'use client';\n\nimport { lazy, type ReactNode } from 'react';\nimport { renderGeometrySvgFromState } from './render';\nimport type {\n RestoredStampFile,\n StampType,\n} from '../shared/types';\nimport { svgToStampFile } from '../shared/svgToStampFile';\nimport {\n isGeometryCustomData,\n type GeometryCustomData,\n} from './types';\n\nexport type { GeometryCustomData };\n\nconst GeometryStampHost = lazy(() =>\n import('./host').then((m) => ({ default: m.GeometryStampHost })),\n);\n\nconst GeometryIcon: ReactNode = (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <polygon points=\"4,20 20,20 12,5\" />\n <circle cx=\"4\" cy=\"20\" r=\"1.4\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"20\" cy=\"20\" r=\"1.4\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"12\" cy=\"5\" r=\"1.4\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n);\n\nexport const geometryStamp: StampType<GeometryCustomData> = {\n kind: 'geometry',\n shortcutKey: 'g',\n toolbarLabel: 'G',\n toolbarTitle: 'Chèn hình học (G)',\n toolbarIcon: GeometryIcon,\n toolbarTestId: 'stamp-toolbar-geometry',\n matchesCustomData: isGeometryCustomData,\n async renderSvgFromCustomData(data) {\n if (!isGeometryCustomData(data)) {\n throw new Error('geometryStamp.renderSvgFromCustomData: customData không phải geometry');\n }\n return renderGeometrySvgFromState(data.jsonState);\n },\n async restoreFileFromCustomData(element): Promise<RestoredStampFile | null> {\n const data = element.customData as GeometryCustomData | undefined;\n const fileId = (element as { fileId?: string | null }).fileId;\n if (!data || !fileId || !isGeometryCustomData(data)) return null;\n const svgString = await renderGeometrySvgFromState(data.jsonState);\n return svgToStampFile(svgString, fileId);\n },\n Host: GeometryStampHost,\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/scene/types.ts","../src/core/scene/registry.ts","../src/core/scene/reducer.ts","../src/core/scene/store.ts","../src/core/scene/selectors.ts","../src/core/scene/hooks/useEditorState.ts","../src/core/scene/hooks/index.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-constraints/_types.ts","../src/core/scene/kinds/point-constraints/free.ts","../src/core/scene/kinds/point-constraints/onAxis.ts","../src/core/scene/kinds/point-constraints/midpoint.ts","../src/core/scene/kinds/point-constraints/perpFoot.ts","../src/core/scene/kinds/point-constraints/circumcenter.ts","../src/core/scene/kinds/point-constraints/incenter.ts","../src/core/scene/kinds/point-constraints/onLine.ts","../src/core/scene/kinds/point-constraints/onSegment.ts","../src/core/scene/kinds/point-constraints/onCircle.ts","../src/core/scene/kinds/point-constraints/onPolygon.ts","../src/core/scene/kinds/point-constraints/centroid.ts","../src/core/scene/kinds/pointConstructions.ts","../src/core/scene/kinds/point-constraints/arcMidpoint.ts","../src/core/scene/kinds/point-constraints/excenter.ts","../src/core/scene/kinds/point-constraints/shared.ts","../src/core/scene/kinds/point-constraints/pointAtDistance.ts","../src/core/scene/kinds/point-constraints/circleIntersection.ts","../src/core/scene/kinds/point-constraints/circleSecondIntersection.ts","../src/core/scene/kinds/point-constraints/secondIntersection.ts","../src/core/scene/kinds/point-constraints/tangencyPoint.ts","../src/core/scene/kinds/point-constraints/transformed.ts","../src/core/scene/kinds/point-constraints/orthocenter.ts","../src/core/scene/kinds/point-constraints/onPerpendicular.ts","../src/core/scene/kinds/point-constraints/onPerpBisector.ts","../src/core/scene/kinds/point-constraints/onCircleAroundPoint.ts","../src/core/scene/kinds/point-constraints/tangentPointExt.ts","../src/core/scene/kinds/point-constraints/registry.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/expressions/parser.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/core/scene/kinds/index.ts","../src/core/scene/index.ts","../src/stamps/shared/serializeScene.ts","../src/stamps/geometry-2d/serialize.ts","../src/stamps/geometry-2d/editor/theme.ts","../src/core/scene/render/types2d.ts","../src/core/scene/render/JxgRenderer.ts","../src/stamps/shared/jxgOffscreenRender.ts","../src/stamps/geometry-2d/autoFitBbox.ts","../src/stamps/geometry-2d/labelLayout.ts","../src/stamps/geometry-2d/render.ts","../src/stamps/shared/svgToStampFile.ts","../src/stamps/geometry-2d/types.ts","../src/core/scene/ui/LeftPanelShell.tsx","../src/core/scene/ui/kindMeta.ts","../src/core/scene/ui/ObjectRowMenu.tsx","../src/core/scene/ui/ObjectRow.tsx","../src/core/scene/ui/ObjectListPanel.tsx","../src/stamps/shared/StampLeftPanel/AxisGridSection.tsx","../src/stamps/shared/StampLeftPanel/types.ts","../src/stamps/shared/StampLeftPanel/useToolHoverTooltip.ts","../src/stamps/shared/StampLeftPanel/ToolGrid.tsx","../src/stamps/shared/StampLeftPanel/Desktop.tsx","../src/stamps/shared/MobileToolDrawer.tsx","../src/stamps/shared/StampLeftPanel/Mobile.tsx","../src/stamps/shared/StampLeftPanel/index.tsx","../src/stamps/geometry-2d/editor/icons.tsx","../src/stamps/geometry-2d/editor/tools.tsx","../src/stamps/geometry-2d/editor/handlers/pointerDown/move.ts","../src/stamps/geometry-2d/editor/handlers/pointerDown/select.ts","../src/stamps/shared/safeJsx.ts","../src/stamps/geometry-2d/editor/handlers/utils.ts","../src/stamps/geometry-2d/editor/handlers/pointerDown/point.ts","../src/stamps/geometry-2d/editor/handlers/pointerDown/singleTarget.ts","../src/stamps/geometry-2d/editor/handlers/pointerDown/polygon.ts","../src/stamps/geometry-2d/editor/handlers/classifyPointVsCircle.ts","../src/stamps/geometry-2d/editor/handlers/finalize/shared.ts","../src/stamps/geometry-2d/editor/handlers/finalize/lines.ts","../src/stamps/geometry-2d/editor/handlers/finalize/circles.ts","../src/stamps/geometry-2d/editor/handlers/finalize/points.ts","../src/stamps/geometry-2d/editor/handlers/finalize/polygons.ts","../src/stamps/geometry-2d/editor/handlers/finalize/measure.ts","../src/stamps/geometry-2d/editor/handlers/finalize/registry.ts","../src/stamps/geometry-2d/editor/handlers/finalizeShape.ts","../src/stamps/geometry-2d/editor/transforms.ts","../src/stamps/geometry-2d/editor/handlers/transform.ts","../src/stamps/geometry-2d/editor/handlers/pointerDown/multiClick.ts","../src/stamps/geometry-2d/editor/handlers/pointerDown/index.ts","../src/stamps/geometry-2d/editor/handlers/pointerMove.ts","../src/stamps/geometry-2d/editor/handlers/pointerUp.ts","../src/stamps/geometry-2d/editor/handlers/index.ts","../src/stamps/geometry-2d/editor/hitTest.ts","../src/stamps/shared/useToolStateMachine.ts","../src/stamps/shared/attachJxgWheelZoom.ts","../src/stamps/shared/initJxgBoard.ts","../src/stamps/geometry-2d/editor/snapshot.ts","../src/stamps/geometry-2d/editor/preview.ts","../src/stamps/geometry-2d/editor/previewActions.ts","../src/stamps/geometry-2d/editor/attrMapping.ts","../src/stamps/geometry-2d/editor/buildHandle.ts","../src/stamps/geometry-2d/editor/idResolvers.ts","../src/stamps/geometry-2d/editor/useAxisGridSync.ts","../src/stamps/geometry-2d/editor/useEditorShortcuts.ts","../src/stamps/geometry-2d/editor/useJxgSceneIdMap.ts","../src/stamps/geometry-2d/editor/MiniBoard.tsx","../src/stamps/shared/excalidrawPalette.ts","../src/stamps/shared/useIsMobile.ts","../src/stamps/geometry-2d/editor/PropertiesPopover.tsx","../src/stamps/geometry-2d/editor/MultiPropertiesPopover.tsx","../src/stamps/geometry-2d/editor/TransformParamPopover.tsx","../src/stamps/shared/StampLeftPanel/constants.ts","../src/stamps/shared/Toast/ToastProvider.tsx","../src/stamps/shared/Toast/Toast.tsx","../src/stamps/shared/Toast/useToast.ts","../src/stamps/shared/Toast/ToastHost.tsx","../src/stamps/shared/Toast/index.ts","../src/stamps/geometry-2d/dsl/names.ts","../src/stamps/geometry-2d/dsl/kinds/_types.ts","../src/stamps/geometry-2d/dsl/kinds/_shared.ts","../src/stamps/geometry-2d/dsl/kinds/points/free.ts","../src/stamps/geometry-2d/dsl/kinds/points/midpoint.ts","../src/stamps/geometry-2d/dsl/kinds/points/onSegment.ts","../src/stamps/geometry-2d/dsl/kinds/points/onLine.ts","../src/stamps/geometry-2d/dsl/kinds/points/onCircle.ts","../src/stamps/geometry-2d/dsl/kinds/points/perpFoot.ts","../src/stamps/geometry-2d/dsl/kinds/points/circumcenter.ts","../src/stamps/geometry-2d/dsl/kinds/points/incenter.ts","../src/stamps/geometry-2d/dsl/kinds/points/centroid.ts","../src/stamps/geometry-2d/dsl/kinds/points/orthocenter.ts","../src/stamps/geometry-2d/dsl/kinds/points/intersection.ts","../src/stamps/geometry-2d/dsl/kinds/lines/segment.ts","../src/stamps/geometry-2d/dsl/kinds/lines/line.ts","../src/stamps/geometry-2d/dsl/kinds/lines/ray.ts","../src/stamps/geometry-2d/dsl/kinds/lines/perpendicular.ts","../src/stamps/geometry-2d/dsl/kinds/lines/parallel.ts","../src/stamps/geometry-2d/dsl/kinds/lines/perpBisector.ts","../src/stamps/geometry-2d/dsl/kinds/lines/angleBisector.ts","../src/stamps/geometry-2d/dsl/kinds/lines/lineThrough.ts","../src/stamps/geometry-2d/dsl/kinds/lines/radicalAxis.ts","../src/stamps/geometry-2d/dsl/kinds/lines/tangent.ts","../src/stamps/geometry-2d/dsl/kinds/polygons/polygon.ts","../src/stamps/geometry-2d/dsl/kinds/circles/circleCP.ts","../src/stamps/geometry-2d/dsl/kinds/circles/circle3.ts","../src/stamps/geometry-2d/dsl/kinds/circles/circleDiameter.ts","../src/stamps/geometry-2d/dsl/kinds/points/secondIntersection.ts","../src/stamps/geometry-2d/dsl/kinds/points/circleIntersection.ts","../src/stamps/geometry-2d/dsl/kinds/points/circleSecondIntersection.ts","../src/stamps/geometry-2d/dsl/kinds/points/tangencyPoint.ts","../src/stamps/geometry-2d/dsl/kinds/points/tangentPointExt.ts","../src/stamps/geometry-2d/dsl/kinds/circles/circleCR.ts","../src/stamps/geometry-2d/dsl/kinds/circles/incircle.ts","../src/stamps/geometry-2d/dsl/kinds/circles/excircle.ts","../src/stamps/geometry-2d/dsl/kinds/points/arcMidpoint.ts","../src/stamps/geometry-2d/dsl/kinds/points/excenter.ts","../src/stamps/geometry-2d/dsl/kinds/points/reflectPoint.ts","../src/stamps/geometry-2d/dsl/kinds/points/reflectLine.ts","../src/stamps/geometry-2d/dsl/kinds/points/pointAtDistance.ts","../src/stamps/geometry-2d/dsl/registry.ts","../src/stamps/geometry-2d/dsl/serialize.ts","../src/stamps/geometry-2d/editor/useAiFigure.ts","../src/stamps/geometry-2d/ai/providers/anthropic.ts","../src/stamps/geometry-2d/ai/providers/claude-agent-sdk.ts","../src/stamps/geometry-2d/ai/providers/claude-cli.ts","../src/stamps/geometry-2d/ai/providers/ollama.ts","../src/stamps/geometry-2d/ai/providers/index.ts","../src/stamps/geometry-2d/ai/vision/envelope.ts","../src/stamps/geometry-2d/ai/vision/prompt.ts","../src/stamps/geometry-2d/ai/vision/tesseract.ts","../src/stamps/geometry-2d/ai/vision/extractProblem.ts","../src/stamps/geometry-2d/ai/handleExtractProblem.ts","../src/stamps/geometry-2d/ai/vision/preprocess.ts","../src/stamps/geometry-2d/editor/AiFigurePrompt.tsx","../src/stamps/geometry-2d/editor/EditorPanel.tsx","../src/stamps/shared/useChordShortcut.ts","../src/stamps/shared/insertImage.ts","../src/stamps/shared/useStampStore.ts","../src/stamps/geometry-2d/dsl/describeDsl.ts","../src/stamps/geometry-2d/editor/dslRenderRow.tsx","../src/stamps/geometry-2d/host.tsx","../src/stamps/geometry-2d/index.tsx"],"names":["def","produce","React","CURVED_SEGMENTS","init_d_constraint","init_types","init_registry","tangent","constructionRefs","center","A","B","labels","poly","jsx","React2","jsxs","React3","React4","Fragment","useState","useRef","useEffect","useCallback","useMemo","createPortal","UndoIcon","RedoIcon","init_point","init_polygon","init_shared","id","label","ALL","sc","jxgFromSceneId","forwardRef","MiniBoard2D","useId","jxgIdToSceneId","screenCoordsOf","objectsAt","clearPreviewSegs","removePhantom","useImperativeHandle","useLayoutEffect","rect","w","left","top","Icons","useReducer","createContext","useContext","init_Toast","z","init_free","init_midpoint","init_onSegment","init_onLine","init_onCircle","init_perpFoot","init_circumcenter","init_incenter","init_centroid","init_orthocenter","init_intersection","init_segment","init_line","init_ray","init_secondIntersection","init_circleIntersection","init_circleSecondIntersection","init_tangencyPoint","init_tangentPointExt","init_arcMidpoint","init_excenter","init_pointAtDistance","labelOf","refs","init_serialize","unsupported","Anthropic","toUsage","DEFAULT_MODEL","zodToJsonSchema","readEnv","GeometryEditorPanelInner","useSyncExternalStore","GeometryEditorPanel","A_CODE","GeometryStampHost","lazy"],"mappings":"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","file":"geometry-2d.js","sourcesContent":["// src/core/scene/types.ts\n\nexport type SceneObject<A = Record<string, unknown>> = {\n id: string;\n kind: string;\n label: string;\n visible: boolean;\n locked: boolean;\n layer: string;\n schemaVersion: number;\n attrs: A;\n};\n\n// View per domain — narrow theo `state.meta.domain`.\nexport type View2D = {\n readonly bbox: readonly [number, number, number, number]; // [xmin, ymax, xmax, ymin]\n readonly showAxis: boolean;\n readonly showGrid: boolean;\n};\n\nexport type View3D = {\n readonly bbox3D: readonly [number, number, number, number, number, number]; // [xmin, xmax, ymin, ymax, zmin, zmax]\n readonly azimuth: number;\n readonly elevation: number;\n};\n\nexport type ViewGraph2D = {\n readonly xMin: number;\n readonly xMax: number;\n readonly yMin: number;\n readonly yMax: number;\n readonly showAxis: boolean;\n readonly showGrid: boolean;\n};\n\n// Union of all view shapes — narrow qua state.meta.domain.\nexport type SceneView = View2D | View3D | ViewGraph2D;\n\n// Discriminated union: domain narrow → view shape narrow.\nexport type StateMeta =\n | { readonly domain: '2d'; readonly version: number; readonly view: View2D }\n | { readonly domain: '3d'; readonly version: number; readonly view: View3D }\n | { readonly domain: 'graph2d'; readonly version: number; readonly view: ViewGraph2D };\n\nexport type Domain = StateMeta['domain'];\n\n// Backward-compat alias: UPDATE_VIEW patch dùng graph-2d shape (chỉ graph-2d\n// dispatch action này hiện tại).\nexport type ViewSettings = ViewGraph2D;\n\nexport type State = {\n readonly objects: Readonly<Record<string, SceneObject>>;\n readonly order: readonly string[];\n readonly counter: number;\n readonly meta: StateMeta;\n};\n\nexport type Action =\n | { type: 'ADD'; payload: { obj: SceneObject } }\n | { type: 'UPDATE'; payload: { id: string; patch: Partial<Omit<SceneObject, 'id' | 'kind' | 'attrs'>> } }\n | { type: 'UPDATE_ATTRS'; payload: { id: string; patch: Record<string, unknown> } }\n | { type: 'DELETE'; payload: { id: string } }\n | { type: 'RESET' }\n | { type: 'LOAD'; payload: { state: State } }\n | { type: 'TRANSACTION'; payload: { actions: Action[] } }\n | { type: 'UPDATE_VIEW'; payload: { patch: Partial<ViewSettings> } };\n\nexport type RenderCtx = {\n jxg: unknown;\n resolveRef: (id: string) => unknown;\n defaults: Readonly<Record<string, unknown>>;\n /** Map tham số (parameter.label → parameter.value). Chỉ graph2d dùng. */\n paramMap?: Readonly<Record<string, number>>;\n};\n\nexport type KindDef<A = Record<string, unknown>> = {\n type: string;\n schemaVersion: number;\n migrate: Record<number, (prev: any) => any>;\n validate?: (attrs: A) => void;\n dependsOn: (attrs: A) => string[];\n describe: (obj: SceneObject<A>, state?: State) => string;\n measure?: (obj: SceneObject<A>, state: State) =>\n | { label: string; value: number }[]\n | null;\n render: (obj: SceneObject<A>, ctx: RenderCtx) => unknown;\n update?: (\n obj: SceneObject<A>,\n prev: SceneObject<A>,\n ctx: RenderCtx,\n existing: unknown,\n ) => void;\n};\n\nexport const DEFAULT_VIEW_2D: View2D = {\n bbox: [-10, 10, 10, -10],\n showAxis: false,\n showGrid: false,\n};\n\nexport const DEFAULT_VIEW_3D: View3D = {\n bbox3D: [-5, 5, -5, 5, -5, 5],\n azimuth: 60,\n elevation: 30,\n};\n\nexport const DEFAULT_VIEW_GRAPH2D: ViewGraph2D = {\n xMin: -10, xMax: 10, yMin: -10, yMax: 10,\n showAxis: true, showGrid: true,\n};\n\n// EMPTY_STATE giữ shape '3d' (legacy default). Dùng `createEmptyState(domain)`\n// khi cần state cụ thể cho domain — đảm bảo meta.view khớp domain.\nexport const EMPTY_STATE: State = {\n objects: {},\n order: [],\n counter: 0,\n meta: { domain: '3d', version: 1, view: DEFAULT_VIEW_3D },\n};\n\nexport function createEmptyState(domain: Domain): State {\n const base = { objects: {}, order: [], counter: 0 } as const;\n switch (domain) {\n case '2d':\n return { ...base, meta: { domain: '2d', version: 1, view: DEFAULT_VIEW_2D } };\n case '3d':\n return { ...base, meta: { domain: '3d', version: 1, view: DEFAULT_VIEW_3D } };\n case 'graph2d':\n return { ...base, meta: { domain: 'graph2d', version: 1, view: DEFAULT_VIEW_GRAPH2D } };\n }\n}\n","// src/core/scene/registry.ts\nimport type { KindDef } from './types';\n\nconst registry = new Map<string, KindDef>();\n\nexport function registerKind<A = Record<string, unknown>>(def: KindDef<A>): void {\n if (registry.has(def.type)) {\n console.warn(`[scene] kind \"${def.type}\" đã được đăng ký — ghi đè định nghĩa cũ`);\n }\n registry.set(def.type, def as unknown as KindDef);\n}\n\nexport function getKind(type: string): KindDef {\n const def = registry.get(type);\n if (!def) throw new Error(`[scene] unknown kind: ${type}`);\n return def;\n}\n\nexport function listKinds(): KindDef[] {\n return Array.from(registry.values());\n}\n\n// Chỉ dùng cho test — reset registry giữa các test case.\nexport function __clearRegistryForTests(): void {\n registry.clear();\n}\n","// src/core/scene/reducer.ts\nimport type { Draft } from 'immer';\nimport type { Action, State, SceneObject } from './types';\nimport { getKind } from './registry';\n\nfunction collectDependents(state: Draft<State> | State, rootId: string): Set<string> {\n const dependents = new Set<string>([rootId]);\n let grew = true;\n while (grew) {\n grew = false;\n for (const obj of Object.values(state.objects) as SceneObject[]) {\n if (dependents.has(obj.id)) continue;\n let kindDef;\n try { kindDef = getKind(obj.kind); } catch { continue; }\n const refs = kindDef.dependsOn(obj.attrs as never);\n if (refs.some(r => dependents.has(r))) {\n dependents.add(obj.id);\n grew = true;\n }\n }\n }\n return dependents;\n}\n\nexport function reduce(draft: Draft<State>, action: Action): void {\n switch (action.type) {\n case 'ADD': {\n const { obj } = action.payload;\n if (draft.objects[obj.id]) throw new Error(`[scene] id \"${obj.id}\" đã tồn tại`);\n const kindDef = getKind(obj.kind);\n kindDef.validate?.(obj.attrs as never);\n draft.objects[obj.id] = obj;\n draft.order.push(obj.id);\n draft.counter += 1;\n return;\n }\n case 'UPDATE': {\n const { id, patch } = action.payload;\n const obj = draft.objects[id];\n if (!obj) return;\n Object.assign(obj, patch);\n return;\n }\n case 'UPDATE_ATTRS': {\n const { id, patch } = action.payload;\n const obj = draft.objects[id];\n if (!obj) return;\n const kindDef = getKind(obj.kind);\n const nextAttrs = { ...(obj.attrs as object), ...patch };\n kindDef.validate?.(nextAttrs as never);\n obj.attrs = nextAttrs;\n return;\n }\n case 'DELETE': {\n const { id } = action.payload;\n if (!draft.objects[id]) return;\n const toDelete = collectDependents(draft, id);\n for (const delId of toDelete) {\n delete draft.objects[delId];\n }\n draft.order = draft.order.filter(x => !toDelete.has(x));\n return;\n }\n case 'RESET': {\n draft.objects = {};\n draft.order = [];\n draft.counter = 0;\n return;\n }\n case 'LOAD': {\n const { state } = action.payload;\n draft.objects = { ...state.objects };\n draft.order = [...state.order];\n draft.counter = state.counter;\n // Cast qua Draft<State['meta']> — immer chấp nhận structurally\n // identical shape, chỉ stricter readonly.\n draft.meta = { ...state.meta } as typeof draft.meta;\n return;\n }\n case 'TRANSACTION': {\n for (const sub of action.payload.actions) {\n reduce(draft, sub);\n }\n return;\n }\n case 'UPDATE_VIEW': {\n // Action payload typed cho graph-2d ViewSettings. Bỏ qua nếu domain\n // khác (view shape không tương thích — 2d dùng bbox, 3d dùng bbox3D).\n if (draft.meta.domain !== 'graph2d') return;\n Object.assign(draft.meta.view, action.payload.patch);\n return;\n }\n }\n}\n","// src/core/scene/store.ts\nimport { produce } from 'immer';\nimport { reduce } from './reducer';\nimport type { Action, State } from './types';\n\nexport type StoreListener = (next: State, prev: State, action: Action) => void;\n\nexport interface Store {\n getState(): State;\n dispatch(action: Action): void;\n subscribe(listener: StoreListener): () => void;\n undo(): void;\n redo(): void;\n canUndo(): boolean;\n canRedo(): boolean;\n transaction(fn: (dispatch: (a: Action) => void) => void): void;\n withoutHistory(fn: () => void): void;\n}\n\nexport type StoreOptions = { historyLimit?: number };\n\nconst HISTORY_DEFAULT = 100;\n\nconst UNDO_ACTION: Action = { type: 'TRANSACTION', payload: { actions: [] } };\nconst REDO_ACTION: Action = { type: 'TRANSACTION', payload: { actions: [] } };\n\nexport function createStore(initial: State, options: StoreOptions = {}): Store {\n const limit = options.historyLimit ?? HISTORY_DEFAULT;\n let state = initial;\n const past: State[] = [];\n const future: State[] = [];\n const listeners = new Set<StoreListener>();\n let dispatching = false;\n let suspendHistory = false;\n let transactionActions: Action[] | null = null;\n\n function notify(prev: State, action: Action): void {\n listeners.forEach(l => l(state, prev, action));\n }\n\n function pushHistory(prev: State): void {\n if (suspendHistory) return;\n past.push(prev);\n if (past.length > limit) past.shift();\n future.length = 0;\n }\n\n function applyAction(action: Action): void {\n const prev = state;\n state = produce(state, draft => { reduce(draft, action); });\n if (state !== prev) {\n pushHistory(prev);\n notify(prev, action);\n }\n }\n\n return {\n getState: () => state,\n\n dispatch(action: Action) {\n if (dispatching) throw new Error('[scene] không được dispatch trong subscriber');\n if (transactionActions) {\n transactionActions.push(action);\n return;\n }\n dispatching = true;\n try { applyAction(action); } finally { dispatching = false; }\n },\n\n subscribe(listener) {\n listeners.add(listener);\n return () => { listeners.delete(listener); };\n },\n\n undo() {\n const prev = past.pop();\n if (!prev) return;\n future.push(state);\n const old = state;\n state = prev;\n notify(old, UNDO_ACTION);\n },\n\n redo() {\n const next = future.pop();\n if (!next) return;\n past.push(state);\n if (past.length > limit) past.shift();\n const old = state;\n state = next;\n notify(old, REDO_ACTION);\n },\n\n canUndo: () => past.length > 0,\n canRedo: () => future.length > 0,\n\n transaction(fn) {\n if (transactionActions) throw new Error('[scene] transaction lồng nhau không hỗ trợ');\n transactionActions = [];\n try { fn((a) => { transactionActions!.push(a); }); }\n finally {\n const actions = transactionActions;\n transactionActions = null;\n if (actions.length > 0) {\n applyAction({ type: 'TRANSACTION', payload: { actions } });\n }\n }\n },\n\n withoutHistory(fn) {\n const prevSuspend = suspendHistory;\n suspendHistory = true;\n try { fn(); } finally { suspendHistory = prevSuspend; }\n },\n };\n}\n","// 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/hooks/index.ts\nexport { useSceneStore } from './useSceneStore';\nexport type { SceneStoreApi } from './useSceneStore';\nexport { useEditorState } from './useEditorState';\nexport type { UseEditorStateOptions } from './useEditorState';\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\n/**\n * Nguồn khoảng cách cho pointAtDistance. ids là scene-object id (string).\n *\n * Khoảng cách hiệu dụng: d = scale·base + offset (scale mặc định 1, offset mặc\n * định 0). base ∈ {circleRadius=Radius, segmentLength=|p1p2|, literal=value}.\n * scale/offset OPTIONAL → spec cũ (absent) tính d = base Y HỆT trước (additive).\n * Issue #46 nhóm C (hệ số/bội: \"BD = 2R\", \"BD = 2·AB\", \"BD = R+1\").\n */\nexport type ConstraintDistanceSpec =\n | { kind: 'circleRadius'; circle: string; scale?: number; offset?: number }\n | { kind: 'segmentLength'; p1: string; p2: string; scale?: number; offset?: number }\n | { kind: 'literal'; value: number; scale?: number; offset?: number };\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 | { kind: 'onPerpendicular'; through: string; perpToA: string; perpToB: string; t: number }\n | { kind: 'onPerpBisector'; p1: string; p2: string; t: number }\n | { kind: 'onCircleAroundPoint'; center: string; radiusPoint: string; theta: number }\n // Tiếp điểm khi vẽ 2 tiếp tuyến từ điểm ngoài đường tròn.\n // `which` chọn 1 trong 2 nhánh (0 = nhánh dương theo Thales, 1 = nhánh âm).\n | { kind: 'tangentPointExt'; from: string; circle: string; which: 0 | 1 }\n // Giao điểm của 2 đường tròn (c1, c2). `which` chọn 1 trong 2 nghiệm.\n | { kind: 'circleIntersection'; c1: string; c2: string; which: 0 | 1 }\n // Giao điểm THỨ HAI của 2 đường tròn (c1, c2), biết điểm chung `exclude`.\n // JSXGraph 'otherintersection' trả nghiệm KHÁC `exclude` — dùng cho đề\n // \"đường tròn đường kính AB, AC đôi một cắt nhau lần thứ hai\" (điểm chung A).\n | { kind: 'circleSecondIntersection'; c1: string; c2: string; exclude: string }\n // Giao điểm THỨ HAI của đường thẳng `line` với đường tròn `circle`, biết\n // giao điểm thứ nhất là `other`.\n | { kind: 'secondIntersection'; line: string; circle: string; other: string }\n // Tiếp điểm của đường thẳng `onLine` (đã tiếp xúc) với đường tròn `circle`\n // = chân vuông góc hạ từ tâm xuống đường thẳng.\n | { kind: 'tangencyPoint'; circle: string; onLine: string }\n // Trung điểm cung AB của đường tròn `circle`, ở cung KHÔNG chứa `notContaining`.\n | { kind: 'arcMidpoint'; circle: string; a: string; b: string; notContaining: string }\n // Điểm trên tia from→through kéo dài qua through, cách through khoảng `distance`.\n | { kind: 'pointAtDistance'; from: string; through: string; distance: ConstraintDistanceSpec }\n // Tâm bàng tiếp tam giác `vertices` đối diện đỉnh `opposite`.\n // `opposite` LUÔN là một phần tử của `vertices` (vì vậy constraintRefs2D không cần thêm nó).\n | { kind: 'excenter'; vertices: [string, string, string]; opposite: 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 case 'onPerpendicular': return [c.through, c.perpToA, c.perpToB];\n case 'onPerpBisector': return [c.p1, c.p2];\n case 'onCircleAroundPoint': return [c.center, c.radiusPoint];\n case 'tangentPointExt': return [c.from, c.circle];\n case 'circleIntersection': return [c.c1, c.c2];\n case 'circleSecondIntersection': return [c.c1, c.c2, c.exclude];\n case 'secondIntersection': return [c.line, c.circle, c.other];\n case 'tangencyPoint': return [c.circle, c.onLine];\n case 'arcMidpoint': return [c.circle, c.a, c.b, c.notContaining];\n case 'pointAtDistance': {\n const d = c.distance;\n const extra = d.kind === 'circleRadius' ? [d.circle]\n : d.kind === 'segmentLength' ? [d.p1, d.p2] : [];\n return [c.from, c.through, ...extra];\n }\n case 'excenter': return [c.vertices[0], c.vertices[1], c.vertices[2]];\n default: return [];\n }\n}\n","// point-constraints/_types.ts\nimport type { RenderCtx, SceneObject, State } from '../../types';\nimport type { Constraint2D } from '../2d-constraint';\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\ntype C<K extends Constraint2D['kind']> = Extract<Constraint2D, { kind: K }>;\n\nexport interface PointConstraintModule<K extends Constraint2D['kind'] = Constraint2D['kind']> {\n kind: K;\n validate?: (c: C<K>) => void;\n describe: (obj: SceneObject<PointAttrs>, state: State | undefined, c: C<K>) => string;\n render: (obj: SceneObject<PointAttrs>, ctx: RenderCtx, c: C<K>, opts: Record<string, unknown>) => unknown;\n}\n\n/** Factory widen typed module → generic cho registry (giống defineModule). */\nexport function definePointConstraint<K extends Constraint2D['kind']>(\n m: PointConstraintModule<K>,\n): PointConstraintModule {\n return m as unknown as PointConstraintModule;\n}\n","// point-constraints/free.ts\nimport { definePointConstraint } from './_types';\n\nexport const freeConstraint = definePointConstraint({\n kind: 'free',\n describe: (obj) => `Điểm ${obj.label}`,\n render: (obj, ctx, c, opts) => {\n const board = ctx.jxg as any;\n return board.create('point', [c.x, c.y], opts);\n },\n});\n","// point-constraints/onAxis.ts\nimport { definePointConstraint } from './_types';\n\nexport const onAxisConstraint = definePointConstraint({\n kind: 'onAxis',\n describe: (obj, _state, c) => `${obj.label} trên trục ${c.axis}`,\n render: (obj, ctx, c, opts) => {\n const board = ctx.jxg as any;\n const coords: [number, number] = c.axis === 'x' ? [c.t, 0] : [0, c.t];\n return board.create('point', coords, opts);\n },\n});\n","// point-constraints/midpoint.ts\nimport { definePointConstraint } from './_types';\n\nexport const midpointConstraint = definePointConstraint({\n kind: 'midpoint',\n describe: (obj, state, c) => {\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 render: (obj, ctx, c, opts) => {\n const board = ctx.jxg as any;\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});\n","// point-constraints/perpFoot.ts\nimport { definePointConstraint } from './_types';\n\nexport const perpFootConstraint = definePointConstraint({\n kind: 'perpFoot',\n validate: (c) => {\n if (!c.from || !c.onLine) {\n throw new Error('point.perpFoot: from và onLine bắt buộc');\n }\n },\n describe: (obj, state, c) => {\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 render: (obj, ctx, c, opts) => {\n const board = ctx.jxg as any;\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});\n","// point-constraints/circumcenter.ts\nimport { definePointConstraint } from './_types';\n\nexport const circumcenterConstraint = definePointConstraint({\n kind: 'circumcenter',\n validate: (c) => {\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 describe: (obj, state, c) => {\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 render: (obj, ctx, c, opts) => {\n const board = ctx.jxg as any;\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});\n","// point-constraints/incenter.ts\nimport { definePointConstraint } from './_types';\n\nexport const incenterConstraint = definePointConstraint({\n kind: 'incenter',\n validate: (c) => {\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 describe: (obj, state, c) => {\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 render: (obj, ctx, c, opts) => {\n const board = ctx.jxg as any;\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});\n","// point-constraints/onLine.ts\nimport { definePointConstraint } from './_types';\n\nexport const onLineConstraint = definePointConstraint({\n kind: 'onLine',\n describe: (obj, state, c) => `${obj.label} trên đường ${state?.objects[c.lineId]?.label ?? c.lineId}`,\n render: (obj, ctx, c, opts) => {\n const board = ctx.jxg as any;\n const line = ctx.resolveRef(c.lineId) as any;\n const p1 = line.point1; const p2 = line.point2;\n const sx = (p1 && p2) ? p1.X() + c.t * (p2.X() - p1.X()) : c.t;\n const sy = (p1 && p2) ? p1.Y() + c.t * (p2.Y() - p1.Y()) : c.t;\n return board.create('glider', [sx, sy, line], opts);\n },\n});\n","// point-constraints/onSegment.ts\nimport { definePointConstraint } from './_types';\n\nexport const onSegmentConstraint = definePointConstraint({\n kind: 'onSegment',\n describe: (obj, state, c) => `${obj.label} trên đoạn ${state?.objects[c.segmentId]?.label ?? c.segmentId}`,\n render: (obj, ctx, c, opts) => {\n const board = ctx.jxg as any;\n const seg = ctx.resolveRef(c.segmentId) as any;\n const p1 = seg.point1; const p2 = seg.point2;\n const sx = (p1 && p2) ? p1.X() + c.t * (p2.X() - p1.X()) : c.t;\n const sy = (p1 && p2) ? p1.Y() + c.t * (p2.Y() - p1.Y()) : c.t;\n return board.create('glider', [sx, sy, seg], opts);\n },\n});\n","// point-constraints/onCircle.ts\nimport { definePointConstraint } from './_types';\n\nexport const onCircleConstraint = definePointConstraint({\n kind: 'onCircle',\n describe: (obj, state, c) => `${obj.label} trên đường tròn ${state?.objects[c.circleId]?.label ?? c.circleId}`,\n render: (obj, ctx, c, opts) => {\n const board = ctx.jxg as any;\n const circle = ctx.resolveRef(c.circleId) as any;\n const O = circle.center ?? circle.midpoint;\n const ox = O ? O.X() : 0; const oy = O ? O.Y() : 0;\n return board.create('glider', [ox + Math.cos(c.theta), oy + Math.sin(c.theta), circle], opts);\n },\n});\n","// point-constraints/onPolygon.ts\nimport { definePointConstraint } from './_types';\n\nexport const onPolygonConstraint = definePointConstraint({\n kind: 'onPolygon',\n describe: (obj, state, c) => `${obj.label} trên đa giác ${state?.objects[c.polygonId]?.label ?? c.polygonId}`,\n render: (obj, ctx, c, opts) => {\n const board = ctx.jxg as any;\n const poly = ctx.resolveRef(c.polygonId) as any;\n return board.create('glider', [c.u, c.v, poly], opts);\n },\n});\n","// point-constraints/centroid.ts\nimport { definePointConstraint } from './_types';\n\nexport const centroidConstraint = definePointConstraint({\n kind: 'centroid',\n validate: (c) => {\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 describe: (obj, state, c) => {\n const labels = c.vertices.map((id) => state?.objects[id]?.label ?? id).join('');\n return `${obj.label} = trọng tâm Δ${labels}`;\n },\n render: (obj, ctx, c, opts) => {\n const board = ctx.jxg as any;\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});\n","// src/core/scene/kinds/pointConstructions.ts\n//\n// Toán dựng hình thuần (không phụ thuộc JSXGraph) cho các point-constraint mới.\n// Renderer point.ts gọi qua function-coordinate points để reactive khi user kéo.\n\nexport type XY = readonly [number, number];\n\nfunction dist(p: XY, q: XY): number {\n return Math.hypot(p[0] - q[0], p[1] - q[1]);\n}\n\n/** Dấu của (B-A) × (P-A): >0 trái, <0 phải, 0 thẳng hàng với AB. */\nfunction sideOf(a: XY, b: XY, p: XY): number {\n return (b[0] - a[0]) * (p[1] - a[1]) - (b[1] - a[1]) * (p[0] - a[0]);\n}\n\n/**\n * Trung điểm cung AB của đường tròn (center, radius), nằm ở cung KHÔNG chứa\n * `notContaining`. Trả về toạ độ [x, y].\n *\n * Hai ứng viên = giao của đường thẳng (center → trung điểm dây AB) với đường\n * tròn. Cung không chứa notContaining nằm KHÁC PHÍA dây AB so với notContaining,\n * nên chọn ứng viên có dấu side khác dấu side của notContaining.\n */\nexport function arcMidpoint(\n center: XY, radius: number, a: XY, b: XY, notContaining: XY,\n): XY {\n const mcx = (a[0] + b[0]) / 2;\n const mcy = (a[1] + b[1]) / 2;\n let ux = mcx - center[0];\n let uy = mcy - center[1];\n let len = Math.hypot(ux, uy);\n if (len < 1e-9) {\n // AB là đường kính → hướng từ tâm tới dây suy biến. Dùng pháp tuyến của AB.\n ux = -(b[1] - a[1]);\n uy = b[0] - a[0];\n len = Math.hypot(ux, uy) || 1;\n }\n ux /= len; uy /= len;\n const cand1: XY = [center[0] + radius * ux, center[1] + radius * uy];\n const cand2: XY = [center[0] - radius * ux, center[1] - radius * uy];\n\n const sN = sideOf(a, b, notContaining);\n if (Math.abs(sN) < 1e-9) {\n // notContaining nằm trên đường AB → side-test suy biến: chọn ứng viên xa notContaining hơn.\n return dist(cand1, notContaining) >= dist(cand2, notContaining) ? cand1 : cand2;\n }\n const s1 = sideOf(a, b, cand1);\n // Khác phía ⇔ tích dấu < 0.\n return s1 * sN < 0 ? cand1 : cand2;\n}\n\n/**\n * Tâm bàng tiếp tam giác `vertices` đối diện đỉnh index `oppositeIndex` (0|1|2).\n * Công thức trọng tâm có dấu: trọng số = độ dài cạnh đối mỗi đỉnh, lật dấu ở\n * đỉnh đối diện. I = Σ wᵢ·Vᵢ / Σ wᵢ.\n */\nexport function excenter(\n vertices: readonly [XY, XY, XY], oppositeIndex: 0 | 1 | 2,\n): XY {\n const [A, B, C] = vertices;\n const a = dist(B, C); // cạnh đối A\n const b = dist(C, A); // cạnh đối B\n const c = dist(A, B); // cạnh đối C\n const w: [number, number, number] = [a, b, c];\n w[oppositeIndex] = -w[oppositeIndex];\n const sum = w[0] + w[1] + w[2];\n if (Math.abs(sum) < 1e-9) return A; // tam giác suy biến — fallback\n return [\n (w[0] * A[0] + w[1] * B[0] + w[2] * C[0]) / sum,\n (w[0] * A[1] + w[1] * B[1] + w[2] * C[1]) / sum,\n ];\n}\n\n/**\n * Điểm trên tia `from → through` kéo dài QUA `through`, cách `through` khoảng `d`.\n * C = through + d · (through − from)/|through − from|.\n * `from ≡ through` (hướng suy biến) → trả về chính `through` (d bị nuốt vì len=1 guard).\n */\nexport function pointAtDistanceCoord(from: XY, through: XY, d: number): XY {\n const dx = through[0] - from[0];\n const dy = through[1] - from[1];\n const len = Math.hypot(dx, dy) || 1;\n return [through[0] + (d * dx) / len, through[1] + (d * dy) / len];\n}\n\n/**\n * Chân trục đẳng phương 2 đường tròn (o1,r1),(o2,r2) trên đường nối tâm O₁O₂.\n * F = O₁ + t·(O₂−O₁), t = (d²+r₁²−r₂²)/(2d²). Đồng tâm (d≈0) → trả o1 (suy biến,\n * caller escalate trước khi tới đây).\n */\nexport function radicalAxisFoot(o1: XY, r1: number, o2: XY, r2: number): XY {\n const dx = o2[0] - o1[0], dy = o2[1] - o1[1];\n const d2 = dx * dx + dy * dy;\n if (d2 < 1e-12) return o1;\n const t = (d2 + r1 * r1 - r2 * r2) / (2 * d2);\n return [o1[0] + t * dx, o1[1] + t * dy];\n}\n","// point-constraints/arcMidpoint.ts\nimport { arcMidpoint } from '../pointConstructions';\nimport { definePointConstraint } from './_types';\n\nexport const arcMidpointConstraint = definePointConstraint({\n kind: 'arcMidpoint',\n validate: (c) => {\n if (!c.circle || !c.a || !c.b || !c.notContaining) {\n throw new Error('point.arcMidpoint: circle, a, b, notContaining bắt buộc');\n }\n },\n describe: (obj, state, c) => {\n const al = state?.objects[c.a]?.label ?? c.a;\n const bl = state?.objects[c.b]?.label ?? c.b;\n const nl = state?.objects[c.notContaining]?.label ?? c.notContaining;\n return `${obj.label} = trung điểm cung ${al}${bl} (không chứa ${nl})`;\n },\n render: (obj, ctx, c, opts) => {\n const board = ctx.jxg as any;\n const circle: any = ctx.resolveRef(c.circle);\n const A: any = ctx.resolveRef(c.a);\n const B: any = ctx.resolveRef(c.b);\n const N: any = ctx.resolveRef(c.notContaining);\n const O = circle?.center ?? circle?.midpoint ?? circle;\n const am = () => arcMidpoint(\n [O.X(), O.Y()], circle.Radius(),\n [A.X(), A.Y()], [B.X(), B.Y()], [N.X(), N.Y()],\n );\n return board.create('point', [() => am()[0], () => am()[1]], opts);\n },\n});\n","// point-constraints/excenter.ts\nimport { excenter } from '../pointConstructions';\nimport { definePointConstraint } from './_types';\n\nexport const excenterConstraint = definePointConstraint({\n kind: 'excenter',\n validate: (c) => {\n if (!Array.isArray(c.vertices) || c.vertices.length !== 3) {\n throw new Error('point.excenter: vertices phải là tuple 3 id');\n }\n if (!c.opposite) throw new Error('point.excenter: opposite bắt buộc');\n if (!c.vertices[0] || !c.vertices[1] || !c.vertices[2]) {\n throw new Error('point.excenter: 3 vertex id phải non-empty');\n }\n if (!c.vertices.includes(c.opposite)) {\n throw new Error('point.excenter: opposite phải là một trong vertices');\n }\n },\n describe: (obj, state, c) => {\n const labels = c.vertices.map((id) => state?.objects[id]?.label ?? id).join('');\n const opp = state?.objects[c.opposite]?.label ?? c.opposite;\n return `${obj.label} = tâm bàng tiếp Δ${labels} đối diện ${opp}`;\n },\n render: (obj, ctx, c, opts) => {\n const board = ctx.jxg as any;\n const a: any = ctx.resolveRef(c.vertices[0]);\n const b: any = ctx.resolveRef(c.vertices[1]);\n const c3: any = ctx.resolveRef(c.vertices[2]);\n const oppIdx = c.vertices.indexOf(c.opposite) as 0 | 1 | 2;\n const idx = (oppIdx < 0 ? 0 : oppIdx) as 0 | 1 | 2;\n const ex = () => excenter(\n [[a.X(), a.Y()], [b.X(), b.Y()], [c3.X(), c3.Y()]], idx,\n );\n return board.create('point', [() => ex()[0], () => ex()[1]], opts);\n },\n});\n","// point-constraints/shared.ts\nimport type { RenderCtx, SceneObject } from '../../types';\nimport type { ConstraintDistanceSpec, TransformDef } from '../2d-constraint';\nimport type { PointAttrs } from './_types';\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\nexport function 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\n/**\n * Trả hàm tính khoảng cách `d` reactive cho pointAtDistance.\n * d = scale·base + offset (scale mặc định 1, offset mặc định 0). Spec cũ không\n * có scale/offset → d = base Y HỆT trước (additive).\n */\nexport function makeDistanceFn(ctx: RenderCtx, d: ConstraintDistanceSpec): () => number {\n const scale = d.scale ?? 1;\n const offset = d.offset ?? 0;\n if (d.kind === 'literal') {\n const v = d.value;\n return () => scale * v + offset;\n }\n if (d.kind === 'segmentLength') {\n const p = ctx.resolveRef(d.p1) as any;\n const q = ctx.resolveRef(d.p2) as any;\n return () => scale * Math.hypot(p.X() - q.X(), p.Y() - q.Y()) + offset;\n }\n const circle = ctx.resolveRef(d.circle) as any;\n return () => scale * circle.Radius() + offset;\n}\n\n/** opts y hệt point.ts render hiện tại (defaults #1e40af / 'o' / 4). */\nexport function buildPointOpts(obj: SceneObject<PointAttrs>): Record<string, unknown> {\n return {\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}\n","// point-constraints/pointAtDistance.ts\nimport { pointAtDistanceCoord } from '../pointConstructions';\nimport { definePointConstraint } from './_types';\nimport { makeDistanceFn } from './shared';\n\nexport const pointAtDistanceConstraint = definePointConstraint({\n kind: 'pointAtDistance',\n describe: (obj, state, c) => {\n const fromL = state?.objects[c.from]?.label ?? c.from;\n const thrL = state?.objects[c.through]?.label ?? c.through;\n const d = c.distance;\n const dLabel = d.kind === 'literal' ? `${d.value}`\n : d.kind === 'segmentLength'\n ? `${state?.objects[d.p1]?.label ?? d.p1}${state?.objects[d.p2]?.label ?? d.p2}`\n : `bán kính (${state?.objects[d.circle]?.label ?? d.circle})`;\n return `${obj.label} = trên tia ${fromL}${thrL} kéo dài, cách ${thrL} khoảng ${dLabel}`;\n },\n render: (obj, ctx, c, opts) => {\n const board = ctx.jxg as any;\n const A: any = ctx.resolveRef(c.from);\n const B: any = ctx.resolveRef(c.through);\n const dFn = makeDistanceFn(ctx, c.distance);\n const pc = () => pointAtDistanceCoord([A.X(), A.Y()], [B.X(), B.Y()], dFn());\n return board.create('point', [() => pc()[0], () => pc()[1]], opts);\n },\n});\n","// point-constraints/circleIntersection.ts\nimport { definePointConstraint } from './_types';\n\nexport const circleIntersectionConstraint = definePointConstraint({\n kind: 'circleIntersection',\n // Không có describe-arm riêng trong point.ts → giữ fallback `Điểm ${label}`.\n describe: (obj) => `Điểm ${obj.label}`,\n render: (obj, ctx, c, opts) => {\n const board = ctx.jxg as any;\n // Giao 2 đường tròn — JSXGraph 'intersection' nhận branch 0/1.\n\n const k1: any = ctx.resolveRef(c.c1);\n\n const k2: any = ctx.resolveRef(c.c2);\n return board.create('intersection', [k1, k2, c.which], opts);\n },\n});\n","// point-constraints/circleSecondIntersection.ts\nimport { definePointConstraint } from './_types';\n\nexport const circleSecondIntersectionConstraint = definePointConstraint({\n kind: 'circleSecondIntersection',\n // Không có describe-arm riêng trong point.ts → giữ fallback `Điểm ${label}`.\n describe: (obj) => `Điểm ${obj.label}`,\n render: (obj, ctx, c, opts) => {\n const board = ctx.jxg as any;\n // Giao điểm THỨ HAI của 2 đường tròn (c1 ∩ c2), biết điểm chung `exclude`.\n // JSXGraph 'otherintersection' nhận [curve1, curve2, knownPoint] → nghiệm còn lại.\n\n const k1: any = ctx.resolveRef(c.c1);\n\n const k2: any = ctx.resolveRef(c.c2);\n\n const ex: any = ctx.resolveRef(c.exclude);\n return board.create('otherintersection', [k1, k2, ex], opts);\n },\n});\n","// point-constraints/secondIntersection.ts\nimport { definePointConstraint } from './_types';\n\nexport const secondIntersectionConstraint = definePointConstraint({\n kind: 'secondIntersection',\n // Không có describe-arm riêng trong point.ts → giữ fallback `Điểm ${label}`.\n describe: (obj) => `Điểm ${obj.label}`,\n render: (obj, ctx, c, opts) => {\n const board = ctx.jxg as any;\n // Giao điểm thứ hai của line ∩ circle, biết giao điểm thứ nhất `other`.\n // JSXGraph 'otherintersection' nhận [curve, line, knownPoint].\n\n const line: any = ctx.resolveRef(c.line);\n\n const circle: any = ctx.resolveRef(c.circle);\n\n const other: any = ctx.resolveRef(c.other);\n return board.create('otherintersection', [circle, line, other], opts);\n },\n});\n","// point-constraints/tangencyPoint.ts\nimport { definePointConstraint } from './_types';\n\nexport const tangencyPointConstraint = definePointConstraint({\n kind: 'tangencyPoint',\n // Không có describe-arm riêng trong point.ts → giữ fallback `Điểm ${label}`.\n describe: (obj) => `Điểm ${obj.label}`,\n render: (obj, ctx, c, opts) => {\n const board = ctx.jxg as any;\n // Tiếp điểm = chân vuông góc hạ từ tâm đường tròn xuống đường tiếp tuyến.\n\n const circle: any = ctx.resolveRef(c.circle);\n\n const line: any = ctx.resolveRef(c.onLine);\n const O = circle?.center ?? circle?.midpoint ?? circle;\n return board.create('perpendicularpoint', [line, O], opts);\n },\n});\n","// point-constraints/transformed.ts\nimport { definePointConstraint } from './_types';\nimport { buildJxgTransforms } from './shared';\n\nexport const transformedConstraint = definePointConstraint({\n kind: 'transformed',\n describe: (obj, state, c) => {\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 render: (obj, ctx, c, opts) => {\n const board = ctx.jxg as any;\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});\n","// point-constraints/orthocenter.ts\nimport { definePointConstraint } from './_types';\n\nexport const orthocenterConstraint = definePointConstraint({\n kind: 'orthocenter',\n validate: (c) => {\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 describe: (obj, state, c) => {\n const labels = c.vertices.map((id) => state?.objects[id]?.label ?? id).join('');\n return `${obj.label} = trực tâm Δ${labels}`;\n },\n render: (obj, ctx, c, opts) => {\n const board = ctx.jxg as any;\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});\n","// point-constraints/onPerpendicular.ts\nimport { definePointConstraint } from './_types';\n\nexport const onPerpendicularConstraint = definePointConstraint({\n kind: 'onPerpendicular',\n describe: (obj) => `Điểm ${obj.label}`,\n render: (obj, ctx, c, opts) => {\n const board = ctx.jxg as any;\n // Glider trên đường vuông góc qua `through`, vuông góc với line(perpToA, perpToB).\n // Aux line + perp line hidden; glider parent = perp line.\n\n const T: any = ctx.resolveRef(c.through);\n\n const A: any = ctx.resolveRef(c.perpToA);\n\n const B: any = ctx.resolveRef(c.perpToB);\n const hide = { visible: false, withLabel: false, fixed: true, name: '' };\n const refLine = board.create('line', [A, B], hide);\n const perpLine = board.create('perpendicular', [refLine, T], hide);\n // Initial coords: T + t * unit(perp(A→B))\n const dx = B.X() - A.X();\n const dy = B.Y() - A.Y();\n const len = Math.hypot(dx, dy) || 1;\n const ux = -dy / len;\n const uy = dx / len;\n const x0 = T.X() + c.t * ux;\n const y0 = T.Y() + c.t * uy;\n\n const gl: any = board.create('glider', [x0, y0, perpLine], opts);\n gl._helpers = [refLine, perpLine];\n return gl;\n },\n});\n","// point-constraints/onPerpBisector.ts\nimport { definePointConstraint } from './_types';\n\nexport const onPerpBisectorConstraint = definePointConstraint({\n kind: 'onPerpBisector',\n describe: (obj) => `Điểm ${obj.label}`,\n render: (obj, ctx, c, opts) => {\n const board = ctx.jxg as any;\n // Glider trên trung trực của (p1, p2). Build từ midpoint + perpendicular\n // (cùng pattern với line.ts perpBisector — JSXGraph 'perpendicular' trả\n // về line infinite, dùng làm parent cho glider an toàn hơn so với\n // 'perpendicularsegment').\n\n const A: any = ctx.resolveRef(c.p1);\n\n const B: any = ctx.resolveRef(c.p2);\n const hide = { visible: false, withLabel: false, fixed: true, name: '' };\n const refLine = board.create('line', [A, B], hide);\n const mid = board.create('midpoint', [A, B], hide);\n const bisLine = board.create('perpendicular', [refLine, mid], hide);\n const Mx = (A.X() + B.X()) / 2;\n const My = (A.Y() + B.Y()) / 2;\n const dx = B.X() - A.X();\n const dy = B.Y() - A.Y();\n const len = Math.hypot(dx, dy) || 1;\n const ux = -dy / len;\n const uy = dx / len;\n const x0 = Mx + c.t * ux;\n const y0 = My + c.t * uy;\n\n const gl: any = board.create('glider', [x0, y0, bisLine], opts);\n gl._helpers = [refLine, mid, bisLine];\n return gl;\n },\n});\n","// point-constraints/onCircleAroundPoint.ts\nimport { definePointConstraint } from './_types';\n\nexport const onCircleAroundPointConstraint = definePointConstraint({\n kind: 'onCircleAroundPoint',\n describe: (obj) => `Điểm ${obj.label}`,\n render: (obj, ctx, c, opts) => {\n const board = ctx.jxg as any;\n // Glider trên vòng tròn tâm `center`, qua `radiusPoint`.\n\n const C: any = ctx.resolveRef(c.center);\n\n const R: any = ctx.resolveRef(c.radiusPoint);\n const hide = { visible: false, withLabel: false, fixed: true, name: '' };\n const auxCircle = board.create('circle', [C, R], hide);\n const r = Math.hypot(R.X() - C.X(), R.Y() - C.Y());\n const x0 = C.X() + r * Math.cos(c.theta);\n const y0 = C.Y() + r * Math.sin(c.theta);\n\n const gl: any = board.create('glider', [x0, y0, auxCircle], opts);\n gl._helpers = [auxCircle];\n return gl;\n },\n});\n","// point-constraints/tangentPointExt.ts\nimport { definePointConstraint } from './_types';\n\nexport const tangentPointExtConstraint = definePointConstraint({\n kind: 'tangentPointExt',\n describe: (obj, state, c) => {\n const fromLabel = state?.objects[c.from]?.label ?? c.from;\n const circleLabel = state?.objects[c.circle]?.label ?? c.circle;\n return `${obj.label} = tiếp điểm của (${circleLabel}) với tiếp tuyến từ ${fromLabel}`;\n },\n render: (obj, ctx, c, opts) => {\n const board = ctx.jxg as any;\n // Tiếp điểm của tiếp tuyến vẽ từ điểm ngoài `from` tới đường tròn `circle`.\n // Construction: lấy O = tâm đường tròn → mid = trung điểm(from, O) → Thales\n // = đường tròn đường kính from-O (do góc nội tiếp 90° = tiếp tuyến vuông\n // góc với bán kính tại tiếp điểm). Tiếp điểm = giao của Thales với circle,\n // nhánh 0/1 chọn 1 trong 2 nghiệm.\n\n const P: any = ctx.resolveRef(c.from);\n const K: any = ctx.resolveRef(c.circle);\n const O: any = K.center ?? K.midpoint;\n const hide = { visible: false, withLabel: false, fixed: true, name: '' };\n const mid = board.create('midpoint', [P, O], hide);\n const thales = board.create('circle', [mid, P], hide);\n const inter: any = board.create('intersection', [thales, K, c.which], opts);\n inter._helpers = [mid, thales];\n return inter;\n },\n});\n","// point-constraints/registry.ts\nimport type { PointConstraintModule } from './_types';\n// Batch 1 — native/glider kinds\nimport { freeConstraint } from './free';\nimport { onAxisConstraint } from './onAxis';\nimport { midpointConstraint } from './midpoint';\nimport { perpFootConstraint } from './perpFoot';\nimport { circumcenterConstraint } from './circumcenter';\nimport { incenterConstraint } from './incenter';\nimport { onLineConstraint } from './onLine';\nimport { onSegmentConstraint } from './onSegment';\nimport { onCircleConstraint } from './onCircle';\nimport { onPolygonConstraint } from './onPolygon';\n// Batch 2 — function-coords / native intersection kinds\nimport { centroidConstraint } from './centroid';\nimport { arcMidpointConstraint } from './arcMidpoint';\nimport { excenterConstraint } from './excenter';\nimport { pointAtDistanceConstraint } from './pointAtDistance';\nimport { circleIntersectionConstraint } from './circleIntersection';\nimport { circleSecondIntersectionConstraint } from './circleSecondIntersection';\nimport { secondIntersectionConstraint } from './secondIntersection';\nimport { tangencyPointConstraint } from './tangencyPoint';\n// Batch 3 — aux/_helpers/drag-sync kinds\nimport { transformedConstraint } from './transformed';\nimport { orthocenterConstraint } from './orthocenter';\nimport { onPerpendicularConstraint } from './onPerpendicular';\nimport { onPerpBisectorConstraint } from './onPerpBisector';\nimport { onCircleAroundPointConstraint } from './onCircleAroundPoint';\nimport { tangentPointExtConstraint } from './tangentPointExt';\n\nconst ALL: PointConstraintModule[] = [\n freeConstraint,\n onAxisConstraint,\n midpointConstraint,\n perpFootConstraint,\n circumcenterConstraint,\n incenterConstraint,\n onLineConstraint,\n onSegmentConstraint,\n onCircleConstraint,\n onPolygonConstraint,\n centroidConstraint,\n arcMidpointConstraint,\n excenterConstraint,\n pointAtDistanceConstraint,\n circleIntersectionConstraint,\n circleSecondIntersectionConstraint,\n secondIntersectionConstraint,\n tangencyPointConstraint,\n transformedConstraint,\n orthocenterConstraint,\n onPerpendicularConstraint,\n onPerpBisectorConstraint,\n onCircleAroundPointConstraint,\n tangentPointExtConstraint,\n];\nexport const POINT_CONSTRAINTS: ReadonlyMap<string, PointConstraintModule> =\n new Map(ALL.map((m) => [m.kind, m]));\n","// src/core/scene/kinds/point.ts\nimport { registerKind } from '../registry';\nimport type { KindDef } from '../types';\nimport { constraintRefs2D } from './2d-constraint';\nimport { POINT_CONSTRAINTS } from './point-constraints/registry';\nimport { buildPointOpts } from './point-constraints/shared';\n\nexport type { PointAttrs } from './point-constraints/_types';\nimport type { PointAttrs } from './point-constraints/_types';\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 POINT_CONSTRAINTS.get(c.kind)?.validate?.(c as never);\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 const mod = POINT_CONSTRAINTS.get(c.kind);\n if (mod) return mod.describe(obj, state, c as never);\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 = buildPointOpts(obj);\n const mod = POINT_CONSTRAINTS.get(c.kind);\n if (mod) return mod.render(obj, ctx, c as never, opts);\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';\nimport { radicalAxisFoot } from './pointConstructions';\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: 'lineThrough'; points: string[] }\n | { kind: 'radicalAxis'; circle1: string; circle2: string }\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 'lineThrough':\n return [...c.points];\n case 'radicalAxis':\n return [c.circle1, c.circle2];\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 'lineThrough': return `${obj.label}: đường qua ${c.points.map(L).join('')}`;\n case 'radicalAxis': return `${obj.label}: trục đẳng phương ${L(c.circle1)} & ${L(c.circle2)}`;\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 'lineThrough': {\n const pts = c.points.map((id) => ctx.resolveRef(id) as any);\n // Chọn 2 điểm xa nhau nhất (ổn định số học; mọi điểm đồng tuyến nên đường\n // qua 2 điểm bất kỳ là như nhau, nhưng cặp xa nhất tránh suy biến gần-trùng).\n let bi = 0, bj = 1, best = -1;\n for (let i = 0; i < pts.length; i++) {\n for (let j = i + 1; j < pts.length; j++) {\n const dx = pts[i].X() - pts[j].X();\n const dy = pts[i].Y() - pts[j].Y();\n const d = dx * dx + dy * dy;\n if (d > best) { best = d; bi = i; bj = j; }\n }\n }\n return board.create('line', [pts[bi], pts[bj]], {\n ...baseOpts, straightFirst: true, straightLast: true,\n });\n }\n case 'radicalAxis': {\n\n const k1 = ctx.resolveRef(c.circle1) as any;\n\n const k2 = ctx.resolveRef(c.circle2) as any;\n const o1 = (): [number, number] => [k1.center.X(), k1.center.Y()];\n const o2 = (): [number, number] => [k2.center.X(), k2.center.Y()];\n const foot = () => radicalAxisFoot(o1(), k1.Radius(), o2(), k2.Radius());\n const hide = { visible: false, withLabel: false, fixed: true, name: '' };\n const f1 = board.create('point', [() => foot()[0], () => foot()[1]], hide);\n // điểm thứ 2 = foot + pháp tuyến của O₁O₂ → đường ⊥ đường nối tâm.\n const f2 = board.create('point', [\n () => foot()[0] - (o2()[1] - o1()[1]),\n () => foot()[1] + (o2()[0] - o1()[0]),\n ], hide);\n const line = board.create('line', [f1, f2], {\n ...baseOpts, straightFirst: true, straightLast: true,\n });\n (line as Record<string, unknown>)._helpers = [f1, f2];\n return line;\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';\nimport { excenter } from './pointConstructions';\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 | { kind: 'incircle'; p1: string; p2: string; p3: string }\n | { kind: 'excircle'; p1: string; p2: string; p3: string; opposite: string }\n // Đường tròn đường kính p1p2: tâm = trung điểm p1p2, bán kính = |p1p2|/2.\n | { kind: 'diameter'; p1: string; p2: string };\n\nexport type CircleAttrs = {\n /** Hai-điểm fallback — bắt buộc khi không có `construction` / `radius`. */\n center?: string;\n surfacePoint?: string;\n /** Số bán kính (mode `center + radius`, DSL `circleCR`). */\n radius?: number;\n construction?: CircleConstruction;\n color?: string;\n width?: number;\n dash?: number;\n showLabel?: boolean;\n showValue?: boolean;\n};\n\nfunction asConstruction(a: CircleAttrs): CircleConstruction | undefined {\n if (a.construction) return a.construction;\n const raw = a as CircleAttrs & { kind?: string; vertices?: [string, string, string] };\n if (raw.kind === 'incircle' && raw.vertices) {\n return {\n kind: 'incircle',\n p1: raw.vertices[0],\n p2: raw.vertices[1],\n p3: raw.vertices[2],\n };\n }\n return undefined;\n}\n\nfunction constructionRefs(c: CircleConstruction): string[] {\n switch (c.kind) {\n case 'circumscribed': return [c.p1, c.p2, c.p3];\n case 'incircle': return [c.p1, c.p2, c.p3];\n case 'excircle': return [c.p1, c.p2, c.p3];\n case 'diameter': return [c.p1, c.p2];\n }\n}\n\nconst def: KindDef<CircleAttrs> = {\n type: 'circle',\n schemaVersion: 1,\n migrate: {},\n validate: (a) => {\n if (asConstruction(a)) return;\n if (typeof a?.radius === 'number') {\n if (!a.center) throw new Error('circle: center bắt buộc khi dùng radius');\n if (!(a.radius > 0)) throw new Error('circle: radius phải > 0');\n return;\n }\n if (!a?.center || !a?.surfacePoint) {\n throw new Error('circle: center và surfacePoint bắt buộc (hoặc construction / radius)');\n }\n },\n dependsOn: (a) => {\n const c = asConstruction(a);\n if (c) return constructionRefs(c);\n if (typeof a.radius === 'number') return [a.center!];\n return [a.center!, a.surfacePoint!];\n },\n measure: (obj, state) => {\n // Circumscribed circles need full geometric derivation — skip for now.\n if (asConstruction(obj.attrs)) return null;\n if (typeof obj.attrs.radius === 'number') {\n return [{ label: 'r', value: obj.attrs.radius }];\n }\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 = asConstruction(obj.attrs);\n if (c?.kind === 'circumscribed') {\n return `Đường tròn đi qua ${L(c.p1)}${L(c.p2)}${L(c.p3)}`;\n }\n if (c?.kind === 'incircle') {\n return `Đường tròn nội tiếp Δ${L(c.p1)}${L(c.p2)}${L(c.p3)}`;\n }\n if (c?.kind === 'excircle') {\n return `Đường tròn bàng tiếp Δ${L(c.p1)}${L(c.p2)}${L(c.p3)} đối diện ${L(c.opposite)}`;\n }\n if (c?.kind === 'diameter') {\n return `Đường tròn đường kính ${L(c.p1)}${L(c.p2)}`;\n }\n if (typeof obj.attrs.radius === 'number') {\n return `Đường tròn tâm ${L(obj.attrs.center!)} bán kính ${obj.attrs.radius}`;\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 = asConstruction(obj.attrs);\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 if (c?.kind === 'incircle') {\n const p1 = ctx.resolveRef(c.p1);\n const p2 = ctx.resolveRef(c.p2);\n const p3 = ctx.resolveRef(c.p3);\n const center = board.create('incenter', [p1, p2, p3], {\n visible: obj.visible,\n withLabel: true,\n fixed: true,\n name: obj.label,\n });\n const circ: any = board.create('incircle', [p1, p2, p3], baseOpts);\n circ.center = circ.center ?? center;\n circ._helpers = [center];\n return circ;\n }\n if (c?.kind === 'excircle') {\n\n const P = [ctx.resolveRef(c.p1), ctx.resolveRef(c.p2), ctx.resolveRef(c.p3)] as any[];\n const ids = [c.p1, c.p2, c.p3];\n const oppIdx = Math.max(0, ids.indexOf(c.opposite)) as 0 | 1 | 2;\n const verts = (): [[number, number], [number, number], [number, number]] => [\n [P[0].X(), P[0].Y()], [P[1].X(), P[1].Y()], [P[2].X(), P[2].Y()],\n ];\n const ctr = () => excenter(verts(), oppIdx);\n const radius = () => {\n const I = ctr();\n const others = [0, 1, 2].filter((i) => i !== oppIdx);\n const v = verts();\n const a = v[others[0]]; const b = v[others[1]];\n const dx = b[0] - a[0]; const dy = b[1] - a[1];\n const len = Math.hypot(dx, dy) || 1;\n return Math.abs((I[0] - a[0]) * dy - (I[1] - a[1]) * dx) / len;\n };\n const center = board.create('point', [() => ctr()[0], () => ctr()[1]], { visible: false, withLabel: false, fixed: true, name: '' });\n\n const circ: any = board.create('circle', [center, () => radius()], baseOpts);\n circ._helpers = [center];\n return circ;\n }\n if (c?.kind === 'diameter') {\n const p1 = ctx.resolveRef(c.p1);\n const p2 = ctx.resolveRef(c.p2);\n // Tâm = trung điểm p1p2 (ẩn); circle qua p2 → bán kính = |tâm p2| = |p1p2|/2.\n const center = board.create('midpoint', [p1, p2], { visible: false, withLabel: false, fixed: true, name: '' });\n const circ: any = board.create('circle', [center, p2], baseOpts);\n circ._helpers = [center];\n return circ;\n }\n if (typeof obj.attrs.radius === 'number') {\n const center = ctx.resolveRef(obj.attrs.center!);\n return board.create('circle', [center, obj.attrs.radius], 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 * - square: 2 đỉnh kề, render qua 'regularpolygon' n=4.\n * - rectangle/rhombus/parallelogram: 3 đỉnh; D = A + (C − B) suy ngầm trong\n * render. rectangle: p3 nằm trên ⟂ tại p2 ⟂ AB. rhombus: p3 trên vòng tròn\n * tâm p2 bán kính |AB|. parallelogram: p3 free.\n * - isoTrapezoid: 3 đỉnh; đỉnh thứ 4 = ảnh phản chiếu p3 qua trung trực AB.\n * - isoTriangle: 3 đỉnh; apex nằm trên trung trực (base1, base2).\n * - rightTriangle: 3 đỉnh; leg2End nằm trên ⟂ qua rightAngle ⟂ (rightAngle, leg1End).\n */\nexport type PolygonConstruction =\n | { kind: 'regular'; p1: string; p2: string; n: number }\n | { kind: 'square'; p1: string; p2: string }\n | { kind: 'rectangle'; p1: string; p2: string; p3: string }\n | { kind: 'rhombus'; p1: string; p2: string; p3: string }\n | { kind: 'parallelogram'; p1: string; p2: string; p3: string }\n | { kind: 'isoTrapezoid'; p1: string; p2: string; p3: string }\n | { kind: 'isoTriangle'; base1: string; base2: string; apex: string }\n | { kind: 'rightTriangle'; rightAngle: string; leg1End: string; leg2End: string };\n\nfunction specialShapeName(kind: PolygonConstruction['kind']): string {\n switch (kind) {\n case 'square': return 'Hình vuông';\n case 'rectangle': return 'Hình chữ nhật';\n case 'rhombus': return 'Hình thoi';\n case 'parallelogram': return 'Hình bình hành';\n case 'isoTrapezoid': return 'Hình thang cân';\n case 'isoTriangle': return 'Tam giác cân';\n case 'rightTriangle': return 'Tam giác vuông';\n case 'regular': return '';\n }\n}\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 const c = a.construction;\n if (c.kind === 'regular') {\n if (!c.p1 || !c.p2) throw new Error('polygon (regular): p1 và p2 bắt buộc');\n if (!Number.isFinite(c.n) || c.n < 3) throw new Error('polygon (regular): n ≥ 3');\n return;\n }\n if (c.kind === 'square') {\n if (!c.p1 || !c.p2) throw new Error('polygon (square): p1 và p2 bắt buộc');\n return;\n }\n if (c.kind === 'rectangle' || c.kind === 'rhombus' || c.kind === 'parallelogram' || c.kind === 'isoTrapezoid') {\n if (!c.p1 || !c.p2 || !c.p3) throw new Error(`polygon (${c.kind}): p1, p2, p3 bắt buộc`);\n return;\n }\n if (c.kind === 'isoTriangle') {\n if (!c.base1 || !c.base2 || !c.apex) throw new Error('polygon (isoTriangle): base1, base2, apex bắt buộc');\n return;\n }\n if (c.kind === 'rightTriangle') {\n if (!c.rightAngle || !c.leg1End || !c.leg2End) throw new Error('polygon (rightTriangle): rightAngle, leg1End, leg2End bắt buộc');\n return;\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 const c = a.construction;\n if (!c) return [...(a.vertices ?? [])];\n switch (c.kind) {\n case 'regular': return [c.p1, c.p2];\n case 'square': return [c.p1, c.p2];\n case 'rectangle':\n case 'rhombus':\n case 'parallelogram':\n case 'isoTrapezoid': return [c.p1, c.p2, c.p3];\n case 'isoTriangle': return [c.base1, c.base2, c.apex];\n case 'rightTriangle': return [c.rightAngle, c.leg1End, c.leg2End];\n }\n },\n describe: (obj, state) => {\n const c = obj.attrs.construction;\n if (c) {\n if (c.kind === 'regular') {\n const labels = regularVertexLabels(labelOf(c.p1, state), labelOf(c.p2, state), c.n);\n return `${regularPolygonName(c.n)} ${labels}`;\n }\n const name = specialShapeName(c.kind);\n let labels: string[] = [];\n switch (c.kind) {\n case 'square':\n labels = [labelOf(c.p1, state), labelOf(c.p2, state)];\n break;\n case 'rectangle':\n case 'rhombus':\n case 'parallelogram':\n case 'isoTrapezoid':\n labels = [labelOf(c.p1, state), labelOf(c.p2, state), labelOf(c.p3, state)];\n break;\n case 'isoTriangle':\n labels = [labelOf(c.apex, state), labelOf(c.base1, state), labelOf(c.base2, state)];\n break;\n case 'rightTriangle':\n labels = [labelOf(c.rightAngle, state), labelOf(c.leg1End, state), labelOf(c.leg2End, state)];\n break;\n }\n return `${name} ${labels.join('')}`;\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 const cons = obj.attrs.construction;\n const commonAttrs = {\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 // Construction 'regular' / 'square': dùng JSXGraph 'regularpolygon'.\n if (cons?.kind === 'regular') {\n const p1 = ctx.resolveRef(cons.p1);\n const p2 = ctx.resolveRef(cons.p2);\n return board.create('regularpolygon', [p1, p2, cons.n], commonAttrs);\n }\n if (cons?.kind === 'square') {\n const p1 = ctx.resolveRef(cons.p1);\n const p2 = ctx.resolveRef(cons.p2);\n return board.create('regularpolygon', [p1, p2, 4], commonAttrs);\n }\n\n // rectangle / rhombus / parallelogram: D = A + (C − B) (derived in-render).\n // - rectangle/parallelogram: same formula; rectangle's right-angle invariant\n // được đảm bảo bởi onPerpendicular constraint trên p3.\n // - rhombus: cùng formula; |AB|=|BC| được đảm bảo bởi onCircleAroundPoint.\n if (cons?.kind === 'rectangle' || cons?.kind === 'rhombus' || cons?.kind === 'parallelogram') {\n const A: any = ctx.resolveRef(cons.p1);\n const B: any = ctx.resolveRef(cons.p2);\n const C: any = ctx.resolveRef(cons.p3);\n const D = board.create(\n 'point',\n [() => A.X() + C.X() - B.X(), () => A.Y() + C.Y() - B.Y()],\n { visible: false, withLabel: false, fixed: true, name: '' },\n );\n const poly: any = board.create('polygon', [A, B, C, D], commonAttrs);\n poly._helpers = [D];\n return poly;\n }\n\n // isoTrapezoid: D = phản chiếu C qua trung trực AB.\n // Công thức: D = C − 2 * proj(C-M, u_AB) * u_AB\n if (cons?.kind === 'isoTrapezoid') {\n const A: any = ctx.resolveRef(cons.p1);\n const B: any = ctx.resolveRef(cons.p2);\n const C: any = ctx.resolveRef(cons.p3);\n const Dx = () => {\n const Mx = (A.X() + B.X()) / 2;\n const My = (A.Y() + B.Y()) / 2;\n const ux = B.X() - A.X();\n const uy = B.Y() - A.Y();\n const len2 = ux * ux + uy * uy || 1;\n const proj = ((C.X() - Mx) * ux + (C.Y() - My) * uy) / len2;\n return C.X() - 2 * proj * ux;\n };\n const Dy = () => {\n const Mx = (A.X() + B.X()) / 2;\n const My = (A.Y() + B.Y()) / 2;\n const ux = B.X() - A.X();\n const uy = B.Y() - A.Y();\n const len2 = ux * ux + uy * uy || 1;\n const proj = ((C.X() - Mx) * ux + (C.Y() - My) * uy) / len2;\n return C.Y() - 2 * proj * uy;\n };\n const D = board.create('point', [Dx, Dy], {\n visible: false,\n withLabel: false,\n fixed: true,\n name: '',\n });\n const poly: any = board.create('polygon', [A, B, C, D], commonAttrs);\n poly._helpers = [D];\n return poly;\n }\n\n // isoTriangle: apex, base1, base2 (apex constrained onPerpBisector).\n if (cons?.kind === 'isoTriangle') {\n const Apex = ctx.resolveRef(cons.apex);\n const B1 = ctx.resolveRef(cons.base1);\n const B2 = ctx.resolveRef(cons.base2);\n return board.create('polygon', [Apex, B1, B2], commonAttrs);\n }\n\n // rightTriangle: R, leg1End, leg2End (leg2End constrained onPerpendicular).\n if (cons?.kind === 'rightTriangle') {\n const R = ctx.resolveRef(cons.rightAngle);\n const P = ctx.resolveRef(cons.leg1End);\n const Q = ctx.resolveRef(cons.leg2End);\n return board.create('polygon', [R, P, Q], commonAttrs);\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/expressions/parser.ts\n// Pure expression parser cho function2d kind. Không import JSXGraph/React.\n\nexport const ALLOWED_CONSTANTS = ['pi', 'e'] as const;\nexport const ALLOWED_FUNCTIONS = [\n 'sin', 'cos', 'tan',\n 'asin', 'acos', 'atan', 'atan2',\n 'sinh', 'cosh', 'tanh',\n 'exp', 'log', 'log10', 'ln',\n 'sqrt', 'cbrt', 'abs',\n 'floor', 'ceil', 'round',\n 'min', 'max', 'pow',\n] as const;\n\nconst ID_RE = /[A-Za-z_][A-Za-z0-9_]*/g;\nconst UNSAFE_RE = /[=;{}]|\\beval\\b|\\bnew\\b|\\breturn\\b|\\bthis\\b|\\bwindow\\b|\\bdocument\\b|\\bglobal\\b|\\bprocess\\b/;\n\nconst NUMBER_RE = /^[+-]?(\\d+\\.?\\d*|\\.\\d+)([eE][+-]?\\d+)?$/;\n\nexport type ValidateResult = { ok: true } | { ok: false; error: string };\n\n// Detect identifiers used as function calls (followed by '(')\nconst FUNC_CALL_RE = /([A-Za-z_][A-Za-z0-9_]*)\\s*\\(/g;\n\n/** Kiểm tra expression có hợp lệ không. */\nexport function validate(expression: string): ValidateResult {\n const trimmed = expression.trim();\n if (!trimmed) return { ok: false, error: 'Biểu thức rỗng' };\n if (UNSAFE_RE.test(trimmed)) return { ok: false, error: 'Biểu thức chứa toán tử hoặc identifier không cho phép' };\n\n // Replace ^ với ** (JS không có ^)\n const jsExpr = trimmed.replace(/\\^/g, '**');\n\n // Check function call identifiers — must be in ALLOWED_FUNCTIONS\n let fm: RegExpExecArray | null;\n FUNC_CALL_RE.lastIndex = 0;\n while ((fm = FUNC_CALL_RE.exec(jsExpr)) !== null) {\n const fnName = fm[1];\n if (!(ALLOWED_FUNCTIONS as readonly string[]).includes(fnName)) {\n return { ok: false, error: `Hàm không hợp lệ: ${fnName}` };\n }\n }\n\n // Check identifiers\n const ids = new Set<string>();\n let m: RegExpExecArray | null;\n ID_RE.lastIndex = 0;\n while ((m = ID_RE.exec(jsExpr)) !== null) ids.add(m[0]);\n\n for (const id of ids) {\n if (id === 'x') continue;\n if ((ALLOWED_CONSTANTS as readonly string[]).includes(id)) continue;\n if ((ALLOWED_FUNCTIONS as readonly string[]).includes(id)) continue;\n // Remaining identifiers treat as parameter — OK at validate time.\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(id)) {\n return { ok: false, error: `Identifier không hợp lệ: ${id}` };\n }\n }\n\n // Try syntactic compile (with dummy params) to catch syntax errors.\n try {\n buildFunctionBody(jsExpr, Array.from(ids).filter(\n (id) => id !== 'x' && !(ALLOWED_CONSTANTS as readonly string[]).includes(id) && !(ALLOWED_FUNCTIONS as readonly string[]).includes(id),\n ));\n } catch (err) {\n return { ok: false, error: `Cú pháp lỗi: ${(err as Error).message}` };\n }\n\n return { ok: true };\n}\n\n/**\n * Compile expression thành function (x: number) => number.\n * - `params` map từ identifier → value để inline vào closure.\n * - Trả string error nếu invalid.\n */\nexport function compile(\n expression: string,\n params: Record<string, number>,\n): ((x: number) => number) | string {\n const v = validate(expression);\n if (!v.ok) return v.error;\n const jsExpr = expression.trim().replace(/\\^/g, '**');\n\n const ids = new Set<string>();\n let m: RegExpExecArray | null;\n ID_RE.lastIndex = 0;\n while ((m = ID_RE.exec(jsExpr)) !== null) ids.add(m[0]);\n\n const paramNames: string[] = [];\n for (const id of ids) {\n if (id === 'x') continue;\n if ((ALLOWED_CONSTANTS as readonly string[]).includes(id)) continue;\n if ((ALLOWED_FUNCTIONS as readonly string[]).includes(id)) continue;\n paramNames.push(id);\n }\n\n try {\n const body = buildFunctionBody(jsExpr, paramNames);\n \n const fn = new Function('x', ...paramNames, body) as (\n x: number,\n ...args: number[]\n ) => number;\n const args = paramNames.map((name) => params[name] ?? NaN);\n return (x: number) => fn(x, ...args);\n } catch (err) {\n return `Compile error: ${(err as Error).message}`;\n }\n}\n\nfunction buildFunctionBody(jsExpr: string, _paramNames: string[]): string {\n // Inline Math constants and functions.\n // sin → Math.sin, pi → Math.PI, e → Math.E, ln → Math.log.\n let body = jsExpr;\n body = body.replace(/\\bln\\b/g, 'Math.log');\n body = body.replace(/\\blog\\b/g, 'Math.log10');\n body = body.replace(/\\bpi\\b/g, '(Math.PI)');\n body = body.replace(/\\be\\b(?!\\w)/g, '(Math.E)');\n for (const fn of ALLOWED_FUNCTIONS) {\n if (fn === 'log' || fn === 'log10') continue; // already handled\n body = body.replace(new RegExp(`\\\\b${fn}\\\\b`, 'g'), `Math.${fn}`);\n }\n return `\"use strict\"; return (${body});`;\n}\n\n/** Liệt kê free identifiers (≠ x, ≠ allowed const/func). */\nexport function collectFreeVars(expression: string): string[] {\n const v = validate(expression);\n if (!v.ok) return [];\n const ids = new Set<string>();\n let m: RegExpExecArray | null;\n ID_RE.lastIndex = 0;\n while ((m = ID_RE.exec(expression)) !== null) ids.add(m[0]);\n const out: string[] = [];\n for (const id of ids) {\n if (id === 'x') continue;\n if ((ALLOWED_CONSTANTS as readonly string[]).includes(id)) continue;\n if ((ALLOWED_FUNCTIONS as readonly string[]).includes(id)) continue;\n if (NUMBER_RE.test(id)) continue;\n out.push(id);\n }\n return out.sort();\n}\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","// src/core/scene/kinds/index.ts\nimport './point3d';\nimport './segment3d';\nimport './line3d';\nimport './ray3d';\nimport './vector3d';\nimport './plane3d';\nimport './polygon3d';\nimport './sphere3d';\nimport './polyhedron3d';\nimport './cylinder3d';\nimport './cone3d';\nimport './point';\nimport './segment';\nimport './line';\nimport './ray';\nimport './vector';\nimport './circle';\nimport './arc';\nimport './sector';\nimport './polygon';\nimport './intersection';\nimport './angle';\nimport './distance';\nimport './function2d';\nimport './parameter';\nimport './pointOnCurve';\nimport './tangent2d';\nimport './extremum2d';\nimport './root2d';\nimport './slope2d';\nexport {};\n","// src/core/scene/index.ts\nexport type {\n SceneObject,\n State,\n StateMeta,\n Domain,\n SceneView,\n View2D,\n View3D,\n ViewGraph2D,\n ViewSettings,\n Action,\n KindDef,\n RenderCtx,\n} from './types';\nexport {\n EMPTY_STATE,\n DEFAULT_VIEW_2D,\n DEFAULT_VIEW_3D,\n DEFAULT_VIEW_GRAPH2D,\n createEmptyState,\n} from './types';\nexport { createStore } from './store';\nexport type { Store, StoreListener, StoreOptions } from './store';\nexport { reduce } from './reducer';\nexport { registerKind, getKind, listKinds } from './registry';\nexport { listObjects, byKind, dependentsOf, nextLabel } from './selectors';\nexport { migrateState } from './migrations/runMigrations';\nexport { registerStateMigration, CURRENT_STATE_VERSION } from './migrations/state';\n\nexport { useSceneStore, useEditorState } from './hooks';\nexport type { SceneStoreApi, UseEditorStateOptions } from './hooks';\n\n// IMPORTANT: import kinds barrel để side-effect register chạy.\nimport './kinds';\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","// src/stamps/geometry-2d/serialize.ts\n//\n// Sau Tier D PR 3: customData.jsonState chỉ chứa `JSON.stringify(state)`\n// (không còn envelope `{version, bbox, state, showAxis, showGrid}`).\n// View info (bbox/axis/grid) nằm trong `state.meta.view` (View2D shape).\n\nimport { serializeScene, deserializeScene } from '../shared/serializeScene';\nimport type { State, View2D } from '../../core/scene';\n\nexport function serializeBoard(state: State, view: View2D): string {\n const withView: State = {\n ...state,\n meta: { domain: '2d', version: state.meta.version, view },\n };\n return serializeScene(withView);\n}\n\nexport function deserializeBoard(raw: string): State {\n return deserializeScene('2d', raw);\n}\n","// Theme-aware palette cho geometry stamps.\n//\n// Dùng `Theme2D` từ `core/scene/render/types2d` (cùng abstraction graph-2d).\n// JxgRenderer nhận theme qua constructor options và phân phối qua RenderCtx\n// đến mỗi kind handler — không cần sentinel string trong attrs nữa.\n\nimport { type Theme2D } from '../../../core/scene/render/types2d';\n\nexport const themeStroke = (dark: boolean): string => (dark ? '#e2e8f0' : '#0f172a');\nexport const themeAxis = (dark: boolean): string => (dark ? '#cbd5e1' : '#94a3b8');\nexport const themeGrid = (dark: boolean): string => (dark ? '#475569' : '#e2e8f0');\nexport const themeLabel = (dark: boolean): string => (dark ? '#e2e8f0' : '#000000');\n\nexport function paletteFor(isDark: boolean): Theme2D {\n const stroke = themeStroke(isDark);\n return {\n stroke,\n fill: '#60a5fa',\n axis: themeAxis(isDark),\n grid: themeGrid(isDark),\n label: themeLabel(isDark),\n // Geometry-2d điểm fill = stroke color (đồng bộ chấm điểm với nét vẽ).\n pointFill: stroke,\n };\n}\n","// src/core/scene/render/types2d.ts\nimport type { RenderCtx } from '../types';\n\nexport type Theme2D = {\n stroke: string;\n fill: string;\n label: string;\n axis: string;\n grid: string;\n pointFill: string;\n};\n\nexport const DEFAULT_THEME_2D: Theme2D = {\n stroke: '#0f172a',\n fill: '#60a5fa',\n label: '#0f172a',\n axis: '#94a3b8',\n grid: '#e2e8f0',\n pointFill: '#1e40af',\n};\n\nexport type RenderCtx2D = RenderCtx & {\n theme: Theme2D;\n};\n","// src/core/scene/render/JxgRenderer.ts\nimport type { Store } from '../store';\nimport type { State, SceneObject, RenderCtx } from '../types';\nimport { getKind } from '../registry';\nimport { DEFAULT_THEME_2D, type Theme2D } from './types2d';\nimport { collectFreeVars } from '../expressions/parser';\n\nexport type JxgRendererOptions = { theme?: Theme2D };\n\nexport class JxgRenderer {\n private board: unknown;\n private store: Store;\n private theme: Theme2D;\n private elements = new Map<string, unknown>();\n private unsubscribe: () => void;\n private disposed = false;\n\n /** Chỉ dùng cho domain='graph2d': parameter.label → parameter.value */\n private paramMap: Record<string, number> = {};\n /** Chỉ dùng cho domain='graph2d': function2d.id → expression string */\n private functionExpr: Record<string, string> = {};\n\n constructor(store: Store, board: unknown, options: JxgRendererOptions = {}) {\n this.store = store;\n this.board = board;\n this.theme = options.theme ?? DEFAULT_THEME_2D;\n this.unsubscribe = store.subscribe((next, prev) => this.applyDiff(prev, next));\n // Render state hiện tại (vd LOAD chạy trước khi subscribe).\n this.applyDiff(undefined, store.getState());\n }\n\n private ctx(): RenderCtx {\n return {\n jxg: this.board,\n resolveRef: (id: string) => {\n // Synthetic \"<polyId>:border:<N>\" → polygon.borders[N]. Polygon edges\n // là sub-segment do JSXGraph auto-tạo bên trong polygon; chúng không\n // có scene id riêng. Synthetic id cho phép construct tools (vd\n // perpendicular qua một cạnh đa giác) tham chiếu cạnh như một line.\n const m = /^(.+):border:(\\d+)$/.exec(id);\n if (m) {\n const poly = this.elements.get(m[1]) as { borders?: unknown[] } | undefined;\n if (!poly) throw new Error(`[scene/2d] resolveRef: chưa render polygon id=\"${m[1]}\"`);\n const borders = poly.borders;\n const idx = parseInt(m[2], 10);\n if (!Array.isArray(borders) || !borders[idx]) {\n throw new Error(`[scene/2d] resolveRef: polygon \"${m[1]}\" không có border[${idx}]`);\n }\n return borders[idx];\n }\n const el = this.elements.get(id);\n if (!el) throw new Error(`[scene/2d] resolveRef: chưa render id=\"${id}\"`);\n return el;\n },\n defaults: { theme: this.theme, _functionExpr: this.functionExpr },\n paramMap: this.paramMap,\n };\n }\n\n /**\n * Rebuild `paramMap` và `functionExpr` từ state hiện tại.\n * Chỉ chạy khi domain='graph2d'. Chi phí thấp vì parameters thường ≤ 8.\n */\n private rebuildGraphMaps(state: State): void {\n if (state.meta.domain !== 'graph2d') return;\n const params: Record<string, number> = {};\n const fns: Record<string, string> = {};\n for (const id of state.order) {\n const obj = state.objects[id];\n if (obj.kind === 'parameter') {\n params[obj.label] = (obj.attrs as { value: number }).value;\n } else if (obj.kind === 'function2d') {\n fns[obj.id] = (obj.attrs as { expression: string }).expression;\n }\n }\n this.paramMap = params;\n this.functionExpr = fns;\n }\n\n private create(obj: SceneObject): void {\n try {\n const def = getKind(obj.kind);\n const el = def.render(obj, this.ctx());\n this.elements.set(obj.id, el);\n this.attachFreePointDragSync(obj, el);\n this.attachGliderDragSync(obj, el);\n } catch (err) {\n console.warn(`[scene/render/2d] không render được ${obj.kind} id=\"${obj.id}\":`, err);\n }\n }\n\n /**\n * Sync vị trí glider của 3 constraint mới (onPerpendicular / onPerpBisector /\n * onCircleAroundPoint) — kéo → recompute t/theta dựa trên ref points + vị trí\n * glider hiện tại → UPDATE_ATTRS. Không đụng onLine/onSegment/onCircle hiện\n * tại (giữ behavior cũ).\n */\n private attachGliderDragSync(obj: SceneObject, el: unknown): void {\n if (obj.kind !== 'point') return;\n const c = (obj.attrs as { constraint?: { kind?: string } }).constraint as\n | { kind: string; [k: string]: unknown }\n | undefined;\n if (!c) return;\n if (\n c.kind !== 'onPerpendicular' &&\n c.kind !== 'onPerpBisector' &&\n c.kind !== 'onCircleAroundPoint'\n ) {\n return;\n }\n\n const point = el as { on?: (ev: string, cb: () => void) => void; X?: () => number; Y?: () => number };\n if (typeof point.on !== 'function') return;\n const sceneId = obj.id;\n\n point.on('up', () => {\n if (this.disposed) return;\n const cur = this.store.getState().objects[sceneId];\n if (!cur) return;\n const curC = (cur.attrs as { constraint?: { kind?: string; [k: string]: unknown } }).constraint as\n | { kind: string; [k: string]: unknown }\n | undefined;\n if (!curC) return;\n if (typeof point.X !== 'function' || typeof point.Y !== 'function') return;\n const x = point.X();\n const y = point.Y();\n if (!Number.isFinite(x) || !Number.isFinite(y)) return;\n\n if (curC.kind === 'onPerpendicular') {\n const T = this.elements.get(curC.through as string) as { X: () => number; Y: () => number } | null;\n const A = this.elements.get(curC.perpToA as string) as { X: () => number; Y: () => number } | null;\n const B = this.elements.get(curC.perpToB as string) as { X: () => number; Y: () => number } | null;\n if (!T || !A || !B) return;\n const dx = B.X() - A.X();\n const dy = B.Y() - A.Y();\n const len = Math.hypot(dx, dy) || 1;\n const ux = -dy / len;\n const uy = dx / len;\n const newT = (x - T.X()) * ux + (y - T.Y()) * uy;\n if (Math.abs(newT - (curC.t as number)) < 1e-9) return;\n this.store.dispatch({\n type: 'UPDATE_ATTRS',\n payload: { id: sceneId, patch: { constraint: { ...curC, t: newT } } },\n });\n return;\n }\n\n if (curC.kind === 'onPerpBisector') {\n const A = this.elements.get(curC.p1 as string) as { X: () => number; Y: () => number } | null;\n const B = this.elements.get(curC.p2 as string) as { X: () => number; Y: () => number } | null;\n if (!A || !B) return;\n const Mx = (A.X() + B.X()) / 2;\n const My = (A.Y() + B.Y()) / 2;\n const dx = B.X() - A.X();\n const dy = B.Y() - A.Y();\n const len = Math.hypot(dx, dy) || 1;\n const ux = -dy / len;\n const uy = dx / len;\n const newT = (x - Mx) * ux + (y - My) * uy;\n if (Math.abs(newT - (curC.t as number)) < 1e-9) return;\n this.store.dispatch({\n type: 'UPDATE_ATTRS',\n payload: { id: sceneId, patch: { constraint: { ...curC, t: newT } } },\n });\n return;\n }\n\n if (curC.kind === 'onCircleAroundPoint') {\n const C = this.elements.get(curC.center as string) as { X: () => number; Y: () => number } | null;\n if (!C) return;\n const newTheta = Math.atan2(y - C.Y(), x - C.X());\n if (Math.abs(newTheta - (curC.theta as number)) < 1e-9) return;\n this.store.dispatch({\n type: 'UPDATE_ATTRS',\n payload: { id: sceneId, patch: { constraint: { ...curC, theta: newTheta } } },\n });\n return;\n }\n });\n }\n\n /**\n * Đồng bộ toạ độ live của free point về scene.constraint khi user kéo bằng\n * tay (Move tool / mobile drag). JSXGraph mutate obj.X()/Y() ngay nhưng\n * constraint vẫn giữ giá trị lúc tạo → serialize sẽ ra SVG y hệt cũ →\n * fileId SHA-256 trùng → Excalidraw bỏ qua refresh. (Regression từ\n * commit f41f366 sau scene v2 port.)\n *\n * Chỉ áp dụng cho free point — glider/intersection/midpoint không drag được\n * trực tiếp (toạ độ derived từ ref khác).\n */\n private attachFreePointDragSync(obj: SceneObject, el: unknown): void {\n if (obj.kind !== 'point') return;\n const c = (obj.attrs as { constraint?: { kind?: string } }).constraint;\n if (!c || c.kind !== 'free') return;\n \n const point = el as any;\n if (typeof point.on !== 'function') return;\n const sceneId = obj.id;\n point.on('up', () => {\n if (this.disposed) return;\n if (typeof point.X !== 'function' || typeof point.Y !== 'function') return;\n const x = point.X();\n const y = point.Y();\n if (!Number.isFinite(x) || !Number.isFinite(y)) return;\n const cur = this.store.getState().objects[sceneId];\n if (!cur) return;\n const curC = (cur.attrs as { constraint?: { kind?: string; x?: number; y?: number } }).constraint;\n if (!curC || curC.kind !== 'free') return;\n if (curC.x === x && curC.y === y) return;\n this.store.dispatch({\n type: 'UPDATE_ATTRS',\n payload: { id: sceneId, patch: { constraint: { kind: 'free', x, y } } },\n });\n });\n }\n\n private remove(id: string): void {\n // Selection halo (nếu có) phải bị xoá TRƯỚC element gốc — halo tham chiếu\n // tới point1/point2/center/vertices của element gốc qua lambda; xoá element\n // gốc trước sẽ làm halo dangling.\n this.removeHalo(id);\n this.selectedIds.delete(id);\n const el = this.elements.get(id);\n if (!el) return;\n try {\n const helpers = (el as Record<string, unknown>)._helpers;\n // Element chính bị remove trước, sau đó helpers (glider phụ trợ cho\n // tangent ...). Helpers thường là parent của element chính — nếu xoá\n // parent trước, JSXGraph có thể phàn nàn dangling reference.\n (this.board as { removeObject?: (e: unknown) => void }).removeObject?.(el);\n if (Array.isArray(helpers)) {\n for (const h of helpers) {\n try {\n (this.board as { removeObject?: (e: unknown) => void }).removeObject?.(h);\n } catch { /* ignore */ }\n }\n }\n } catch (err) {\n console.warn(`[scene/render/2d] không remove được id=\"${id}\":`, err);\n }\n this.elements.delete(id);\n }\n\n private applyDiff(prev: State | undefined, next: State): void {\n if (this.disposed) return;\n\n // Rebuild paramMap + functionExpr TRƯỚC khi diff, để ctx() có đúng\n // paramMap khi render lần đầu tiên.\n this.rebuildGraphMaps(next);\n\n const prevObjs = prev?.objects ?? {};\n const nextObjs = next.objects;\n\n // Xoá ids biến mất.\n for (const id of Object.keys(prevObjs)) {\n if (!(id in nextObjs)) this.remove(id);\n }\n\n // Thêm/cập nhật theo state.order — đảm bảo refs có trước.\n for (const id of next.order) {\n const cur = nextObjs[id];\n const old = prevObjs[id] as SceneObject | undefined;\n if (!old) {\n this.create(cur);\n continue;\n }\n if (Object.is(old, cur)) continue;\n const def = getKind(cur.kind);\n const existing = this.elements.get(id);\n if (def.update && existing) {\n try { def.update(cur, old, this.ctx(), existing); continue; }\n catch (err) { console.warn(`[scene/render/2d] update fail, recreate:`, err); }\n }\n this.remove(id);\n this.create(cur);\n }\n\n // Sau diff bình thường: nếu domain='graph2d', detect parameter value changes\n // và force re-render các function2d phụ thuộc.\n if (next.meta.domain === 'graph2d' && prev) {\n const changedParams = new Set<string>();\n for (const id of next.order) {\n const cur = next.objects[id];\n const old = prev.objects[id] as SceneObject | undefined;\n if (cur.kind !== 'parameter' || old?.kind !== 'parameter') continue;\n if ((cur.attrs as { value: number }).value !== (old.attrs as { value: number }).value) {\n changedParams.add(cur.label);\n }\n }\n if (changedParams.size > 0) {\n for (const id of next.order) {\n const obj = next.objects[id];\n if (obj.kind !== 'function2d') continue;\n const expr = (obj.attrs as { expression: string }).expression;\n const refs = collectFreeVars(expr);\n if (refs.some((r) => changedParams.has(r))) {\n this.remove(id);\n this.create(obj);\n }\n }\n }\n }\n }\n\n dispose(): void {\n if (this.disposed) return;\n this.unsubscribe();\n for (const id of Array.from(this.elements.keys())) this.remove(id);\n this.disposed = true;\n }\n\n /** Return the rendered JSXGraph element for a scene id, or null if not found. */\n getElement(id: string): unknown {\n return this.elements.get(id) ?? null;\n }\n\n /** Return a read-only view of the scene id → JSXGraph element map (for hit-test). */\n listElements(): Map<string, unknown> {\n return this.elements;\n }\n\n // Selection halo overlay model: thay vì đổi màu element gốc thành đỏ, tạo\n // một halo element gray phía sau (lower layer) → giữ nguyên màu gốc. Hỗ\n // trợ multi-select cho cả canvas click-selection lẫn ObjectListPanel.\n private selectedIds: Set<string> = new Set();\n private haloMap: Map<string, unknown[]> = new Map();\n\n highlight(ids: string | string[] | null): void {\n if (this.disposed) return;\n const newIds = new Set<string>(\n ids == null ? [] : Array.isArray(ids) ? ids : [ids],\n );\n // Remove halos cho ids đã bị bỏ chọn.\n for (const id of this.selectedIds) {\n if (!newIds.has(id)) this.removeHalo(id);\n }\n // Add halos cho ids mới chọn.\n for (const id of newIds) {\n if (!this.selectedIds.has(id) && this.elements.has(id)) this.addHalo(id);\n }\n this.selectedIds = newIds;\n try {\n (this.board as { update?: () => void }).update?.();\n } catch { /* ignore */ }\n }\n\n private removeHalo(id: string): void {\n const halos = this.haloMap.get(id);\n if (!halos) return;\n const board = this.board as { removeObject?: (e: unknown) => void };\n for (const h of halos) {\n try { board.removeObject?.(h); } catch { /* ignore */ }\n }\n this.haloMap.delete(id);\n }\n\n private addHalo(id: string): void {\n const el = this.elements.get(id) as\n | {\n elType?: string;\n getAttribute?: (k: string) => unknown;\n X?: () => number;\n Y?: () => number;\n point1?: unknown;\n point2?: unknown;\n center?: unknown;\n Radius?: () => number;\n vertices?: unknown[];\n }\n | undefined;\n if (!el) return;\n const board = this.board as {\n create?: (kind: string, parents: unknown[], attrs?: unknown) => unknown;\n };\n if (!board.create) return;\n\n // Selection palette — gray fill + darker gray border (xem\n // tham chiếu /tmp/ss.png).\n const SEL_STROKE = '#475569'; // slate-600\n const SEL_FILL = '#cbd5e1'; // slate-300\n const haloBase = {\n strokeColor: SEL_STROKE,\n strokeOpacity: 0.55,\n fillColor: SEL_FILL,\n fillOpacity: 0.3,\n fixed: true,\n withLabel: false,\n name: '',\n highlight: false,\n layer: 4,\n needsRegularUpdate: true,\n };\n const halos: unknown[] = [];\n try {\n switch (el.elType) {\n case 'point':\n case 'glider':\n case 'intersection': {\n const baseSize = (el.getAttribute?.('size') as number | undefined) ?? 4;\n const halo = board.create('point', [\n () => el.X?.() ?? 0,\n () => el.Y?.() ?? 0,\n ], {\n ...haloBase,\n size: baseSize + 6,\n face: 'o',\n strokeWidth: 2,\n strokeOpacity: 0.75,\n fillOpacity: 0.25,\n });\n halos.push(halo);\n break;\n }\n case 'segment': {\n if (el.point1 && el.point2) {\n const halo = board.create('segment', [el.point1, el.point2], {\n ...haloBase,\n strokeWidth: 9,\n straightFirst: false,\n straightLast: false,\n });\n halos.push(halo);\n }\n break;\n }\n case 'line':\n case 'arrow':\n case 'ray':\n case 'vector':\n case 'tangent':\n case 'normal':\n case 'parallel':\n case 'perpendicular':\n case 'bisector': {\n if (el.point1 && el.point2) {\n const halo = board.create('line', [el.point1, el.point2], {\n ...haloBase,\n strokeWidth: 9,\n });\n halos.push(halo);\n }\n break;\n }\n case 'circle': {\n if (el.center && typeof el.Radius === 'function') {\n const halo = board.create('circle', [el.center, () => el.Radius?.() ?? 0], {\n ...haloBase,\n strokeWidth: 9,\n fillOpacity: 0,\n });\n halos.push(halo);\n }\n break;\n }\n case 'polygon': {\n if (Array.isArray(el.vertices) && el.vertices.length >= 3) {\n // JSXGraph polygon.vertices có thể append vertex đầu lặp lại ở\n // cuối để đóng path — trim cho an toàn.\n const last = el.vertices.length - 1;\n const verts = el.vertices[last] === el.vertices[0]\n ? el.vertices.slice(0, last)\n : el.vertices.slice();\n const halo = board.create('polygon', verts, {\n ...haloBase,\n fillOpacity: 0.2,\n borders: {\n strokeColor: SEL_STROKE,\n strokeWidth: 7,\n strokeOpacity: 0.55,\n highlight: false,\n },\n });\n halos.push(halo);\n }\n break;\n }\n default:\n // Các kind khác (curve, arc, sector, angle, ...) — chưa hỗ trợ halo.\n break;\n }\n } catch (err) {\n console.warn('[scene/render/2d] halo create fail:', err);\n }\n if (halos.length) this.haloMap.set(id, halos);\n }\n}\n","/**\n * Shared offscreen JSXGraph render pipeline.\n *\n * Each JSXGraph stamp (geometry-2d, geometry-3d, graph-2d) needs the same\n * boilerplate to dump SVG offscreen: lazy import JSXGraph, create a hidden\n * DIV with explicit pixel dimensions, initBoard, attach a scene-store renderer\n * (or create a view3d), force update, clone the SVG node, add xmlns, serialize,\n * then tear everything down. This helper owns that lifecycle so each stamp\n * only writes the unique part — what to render — inside `setup`.\n *\n * Intrinsic SVG resolution matters: Excalidraw loads stamp SVGs via <img> then\n * drawImage onto canvas. The browser rasterizes SVG at its intrinsic\n * width/height, so dims passed here should be generous enough that the bitmap\n * downscales (sharp) instead of upscales (blurry) when the user zooms or views\n * on a retina display.\n */\n \ntype JxgModule = any;\n\nexport interface JxgOffscreenRenderOpts {\n /** JSXGraph bounding box: [xmin, ymax, xmax, ymin]. */\n bbox: [number, number, number, number];\n /** Offscreen container size in CSS pixels. Becomes SVG intrinsic size. */\n dims: { width: number; height: number };\n axis?: boolean;\n grid?: boolean;\n keepAspectRatio?: boolean;\n /** Mutate JXG.Options before initBoard (e.g. text.display='internal', palette). */\n applyOptions?: (JXG: JxgModule) => void;\n /**\n * Build the scene on the board. Return a disposable (typically the\n * `JxgRenderer` or `JxgRenderer3D` instance) — its `dispose()` is invoked\n * during teardown before `freeBoard`.\n */\n setup: (board: unknown, JXG: JxgModule) => { dispose: () => void } | Promise<{ dispose: () => void }>;\n /** Optional mutation on the cloned <svg> before serialization. */\n postProcessSvg?: (clone: SVGElement) => void;\n}\n\nexport interface JxgOffscreenRenderResult {\n svgString: string;\n width: number;\n height: number;\n}\n\nexport async function renderJsxgOffscreen(\n opts: JxgOffscreenRenderOpts,\n): Promise<JxgOffscreenRenderResult> {\n const { bbox, dims, axis = false, grid = false, keepAspectRatio = true } = opts;\n const JXG: JxgModule = (await import('jsxgraph')).default;\n\n if (opts.applyOptions) {\n try {\n opts.applyOptions(JXG);\n } catch {\n /* swallow option-apply errors */\n }\n }\n\n const containerId =\n 'jxg_offscreen_' + Date.now() + '_' + Math.random().toString(36).slice(2, 8);\n const container = document.createElement('div');\n container.id = containerId;\n container.style.cssText =\n `position:absolute;top:-99999px;left:-99999px;` +\n `width:${dims.width}px;height:${dims.height}px;` +\n `visibility:hidden;pointer-events:none;`;\n document.body.appendChild(container);\n\n let board: unknown = null;\n let disposable: { dispose: () => void } | null = null;\n try {\n board = JXG.JSXGraph.initBoard(containerId, {\n boundingbox: bbox,\n axis,\n grid,\n keepAspectRatio,\n showCopyright: false,\n showNavigation: false,\n });\n disposable = await opts.setup(board, JXG);\n try {\n \n (board as any)?.update?.();\n } catch {\n /* ignore — board may already be in valid state */\n }\n\n const svgEl = container.querySelector('svg');\n if (!svgEl) throw new Error('renderJsxgOffscreen: no SVG produced by JSXGraph');\n const clone = svgEl.cloneNode(true) as SVGElement;\n if (!clone.getAttribute('xmlns')) {\n clone.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n }\n if (opts.postProcessSvg) opts.postProcessSvg(clone);\n const svgString = new XMLSerializer().serializeToString(clone);\n return { svgString, width: dims.width, height: dims.height };\n } finally {\n try {\n disposable?.dispose();\n } catch {\n /* ignore */\n }\n try {\n if (board) JXG.JSXGraph.freeBoard(board);\n } catch {\n /* ignore */\n }\n if (container.parentNode) container.parentNode.removeChild(container);\n }\n}\n","// Pure geometry helpers for auto-fitting an AI-generated figure into a viewport.\n//\n// Two concerns, both visual-quality fixes:\n// 1. Outlier-robust extent — a single far-flung point or an oversized circle\n// must not compress the main cluster into a sliver (eval cau-13, cau-04).\n// We use Tukey IQR fences per axis to trim statistical outliers.\n// 2. Aspect correction — the offscreen container is sized from the DEFAULT\n// square bbox, so the fitted bbox must be expanded to the same aspect or\n// JSXGraph's setBoundingBox stretches the units → circles become ellipses\n// (eval cau-08). We grow the shorter axis (never shrink) so everything in\n// the robust extent stays visible.\n\n/**\n * Robust [min, max] of a sample using Tukey fences (Q1 - k·IQR, Q3 + k·IQR).\n * Values outside the fence are dropped before taking min/max. With no outliers\n * this returns the raw [min, max]. For < 4 samples IQR is meaningless → raw range.\n */\nexport function robustRange(values: number[], k = 1.5): [number, number] {\n const n = values.length;\n if (n === 0) return [0, 0];\n const sorted = [...values].sort((a, b) => a - b);\n if (n < 4) return [sorted[0], sorted[n - 1]];\n const quantile = (p: number): number => {\n const idx = (n - 1) * p;\n const lo = Math.floor(idx);\n const hi = Math.ceil(idx);\n if (lo === hi) return sorted[lo];\n return sorted[lo] + (sorted[hi] - sorted[lo]) * (idx - lo);\n };\n const q1 = quantile(0.25);\n const q3 = quantile(0.75);\n const iqr = q3 - q1;\n const fenceLo = q1 - k * iqr;\n const fenceHi = q3 + k * iqr;\n let min = Infinity;\n let max = -Infinity;\n for (const v of sorted) {\n if (v < fenceLo || v > fenceHi) continue;\n if (v < min) min = v;\n if (v > max) max = v;\n }\n if (!Number.isFinite(min) || !Number.isFinite(max)) return [sorted[0], sorted[n - 1]];\n return [min, max];\n}\n\nexport interface CircleExtent {\n cx: number;\n cy: number;\n r: number;\n}\n\n// A circle whose radius exceeds this multiple of the point-cluster diagonal is\n// treated as an oversized outlier and excluded from the fit (it still draws,\n// just clipped). Keeps a normal circumcircle in-frame while preventing a single\n// degenerate giant circle from compressing the whole figure (eval cau-13).\nconst CIRCLE_MAX_FACTOR = 1.0;\n\n/**\n * Compute a JSXGraph bbox `[xmin, ymax, xmax, ymin]` fitted to the figure.\n *\n * Points are reduced to a robust extent via Tukey IQR fences (trims stray\n * intersection points that fly off to huge coords). Circles are included WHOLE\n * (never per-edge trimmed — a clipped circle looks broken) unless a circle is\n * egregiously larger than the point cluster, in which case it is excluded. The\n * result is padded and expanded to `aspect` (= container width / height) so\n * units stay square (round circles). Returns null when there is no geometry.\n */\nexport function computeAutoFitBbox(\n points: ReadonlyArray<readonly [number, number]>,\n circles: ReadonlyArray<CircleExtent>,\n aspect: number,\n padPct = 0.12,\n): [number, number, number, number] | null {\n const xs = points.map((p) => p[0]).filter(Number.isFinite);\n const ys = points.map((p) => p[1]).filter(Number.isFinite);\n\n let xmin = Infinity, xmax = -Infinity, ymin = Infinity, ymax = -Infinity;\n let clusterDiag = 0;\n if (xs.length >= 2 && ys.length >= 2) {\n [xmin, xmax] = robustRange(xs);\n [ymin, ymax] = robustRange(ys);\n clusterDiag = Math.hypot(xmax - xmin, ymax - ymin);\n }\n\n for (const c of circles) {\n if (!Number.isFinite(c.cx) || !Number.isFinite(c.cy) || !Number.isFinite(c.r)) continue;\n // Exclude an oversized circle only when we have a point cluster to compare to.\n if (clusterDiag > 0 && c.r > CIRCLE_MAX_FACTOR * clusterDiag) continue;\n xmin = Math.min(xmin, c.cx - c.r); xmax = Math.max(xmax, c.cx + c.r);\n ymin = Math.min(ymin, c.cy - c.r); ymax = Math.max(ymax, c.cy + c.r);\n }\n\n if (!Number.isFinite(xmin) || !Number.isFinite(xmax) || !Number.isFinite(ymin) || !Number.isFinite(ymax)) {\n return null;\n }\n let w = xmax - xmin;\n let h = ymax - ymin;\n\n // Degenerate (all coincident / fully collinear on one axis): floor to 1 unit.\n if (w < 0.5) { const cx = (xmin + xmax) / 2; xmin = cx - 0.5; xmax = cx + 0.5; w = 1; }\n if (h < 0.5) { const cy = (ymin + ymax) / 2; ymin = cy - 0.5; ymax = cy + 0.5; h = 1; }\n\n const padX = w * padPct;\n const padY = h * padPct;\n xmin -= padX; xmax += padX; ymin -= padY; ymax += padY;\n w = xmax - xmin; h = ymax - ymin;\n\n // Expand the shorter axis so width/height matches the container aspect.\n const curAspect = w / h;\n if (curAspect < aspect) {\n const newW = h * aspect;\n const cx = (xmin + xmax) / 2;\n xmin = cx - newW / 2; xmax = cx + newW / 2;\n } else if (curAspect > aspect) {\n const newH = w / aspect;\n const cy = (ymin + ymax) / 2;\n ymin = cy - newH / 2; ymax = cy + newH / 2;\n }\n\n return [xmin, ymax, xmax, ymin];\n}\n","// Anti-collision label placement for AI-generated figures.\n//\n// JSXGraph places every point label at a fixed [10,10] pixel offset (up-right).\n// When points cluster, labels overlap and overlap interior lines. We push each\n// label radially OUTWARD from the figure centroid: points on the left get a\n// left offset, points on the right get a right offset, etc. Offsets are in the\n// SAME sign convention as JSXGraph's label `offset` attribute (it negates the\n// y internally for screen space), so [dirX·R, dirY·R] in math coords maps\n// directly to a screen offset away from the centroid.\n\nexport interface LabeledPoint {\n id: string;\n x: number;\n y: number;\n}\n\nexport function radialLabelOffsets(\n points: LabeledPoint[],\n R = 14,\n): Map<string, [number, number]> {\n const out = new Map<string, [number, number]>();\n if (points.length < 2) return out;\n\n const cx = points.reduce((s, p) => s + p.x, 0) / points.length;\n const cy = points.reduce((s, p) => s + p.y, 0) / points.length;\n\n for (const p of points) {\n let dx = p.x - cx;\n let dy = p.y - cy;\n const len = Math.hypot(dx, dy);\n if (len < 1e-9) {\n // Point sits on the centroid → no meaningful direction; push up.\n dx = 0;\n dy = 1;\n } else {\n dx /= len;\n dy /= len;\n }\n out.set(p.id, [Math.round(dx * R), Math.round(dy * R)]);\n }\n return out;\n}\n","import { deserializeBoard } from './serialize';\nimport { paletteFor } from './editor/theme';\nimport { createStore } from '../../core/scene';\nimport { DEFAULT_VIEW_2D } from '../../core/scene/types';\nimport { JxgRenderer } from '../../core/scene/render/JxgRenderer';\nimport { renderJsxgOffscreen } from '../shared/jxgOffscreenRender';\nimport { computeAutoFitBbox } from './autoFitBbox';\nimport { radialLabelOffsets } from './labelLayout';\n\n/**\n * Re-render geometry SVG từ jsonState đã serialize. Dùng cho:\n * 1. Restore math-stamp file sau khi reload page (Excalidraw mất binary files).\n * 2. Generate SVG lúc INSERT (thay vì clone DOM với màu theo theme editor).\n *\n * LƯU Ý quan trọng — luôn dùng LIGHT palette (nét đậm). Excalidraw apply CSS\n * `filter: invert(93%) hue-rotate(180deg)` lên canvas trong dark mode → nét\n * đậm tự đảo thành sáng. Nếu ta bake nét sáng vào SVG cho dark mode, filter\n * sẽ đảo thành đậm → chìm vào nền tối. Giải pháp: luôn dùng nét đậm + để\n * Excalidraw tự lo invert.\n *\n * Implementation: tạo 1 div ẩn (off-screen, real dimensions để JSXGraph render\n * chuẩn), initBoard, replay creation log từ jsonState, dump SVG, dọn dẹp.\n *\n * Container dimensions phải MATCH aspect ratio của bbox (đã được editor lưu\n * sau khi JSXGraph adjust với keepAspectRatio:true). Trước đây hardcode\n * 400×300 + keepAspectRatio:false làm shape bị kéo dãn (circle thành ellipse,\n * góc vuông lệch) khi bbox không 4:3 → ảnh hiển thị khác với editor lúc\n * double-click. Fix: tính container W/H từ bbox + keepAspectRatio:true để\n * SVG output khớp với view trong editor.\n *\n * Lý do JXG.Options.text.display = 'internal': JSXGraph mặc định render\n * label bằng HTML <div> overlay → clone SVG export sẽ thiếu label.\n */\n\nconst PIXELS_PER_UNIT = 20;\nconst MIN_DIM = 100;\nconst MAX_DIM = 1200;\nconst FALLBACK_W = 400;\nconst FALLBACK_H = 300;\n\nexport function containerDimsForBbox(bbox: [number, number, number, number]): { width: number; height: number } {\n const [xmin, ymax, xmax, ymin] = bbox;\n const w = Math.abs(xmax - xmin);\n const h = Math.abs(ymax - ymin);\n if (!Number.isFinite(w) || !Number.isFinite(h) || w <= 0 || h <= 0) {\n return { width: FALLBACK_W, height: FALLBACK_H };\n }\n let width = w * PIXELS_PER_UNIT;\n let height = h * PIXELS_PER_UNIT;\n const maxAxis = Math.max(width, height);\n if (maxAxis > MAX_DIM) {\n const ratio = MAX_DIM / maxAxis;\n width *= ratio;\n height *= ratio;\n }\n const minAxis = Math.min(width, height);\n if (minAxis < MIN_DIM) {\n const ratio = MIN_DIM / minAxis;\n width *= ratio;\n height *= ratio;\n }\n return { width: Math.round(width), height: Math.round(height) };\n}\n\n/**\n * Auto-fit board bbox sau khi entities đã render. Thu thập toạ độ point + 4\n * điểm biên của mỗi circle, đưa qua `computeAutoFitBbox` (Tukey IQR trim\n * outlier + expand theo aspect container) rồi gọi setBoundingBox.\n *\n * Áp dụng khi state.meta.view.bbox còn là DEFAULT_VIEW_2D — i.e. AI-generated\n * figure chưa được editor zoom/pan. Stamp đã edit có bbox riêng của user, giữ\n * nguyên (consumer expectation: re-render khớp với view editor lúc save).\n *\n * `aspect` = container width/height. computeAutoFitBbox expand bbox về đúng\n * aspect này nên setBoundingBox (keepAspectRatio mặc định) cho units vuông →\n * circle tròn (không méo thành ellipse).\n */\nfunction autoFitBboxFromBoard(board: any, aspect: number): void {\n const objs = board?.objectsList;\n if (!Array.isArray(objs)) return;\n const points: [number, number][] = [];\n const circles: { cx: number; cy: number; r: number }[] = [];\n for (const o of objs) {\n // OBJECT_CLASS_POINT = 1\n if (o?.elementClass === 1 && typeof o.X === 'function' && typeof o.Y === 'function') {\n const x = o.X(), y = o.Y();\n if (Number.isFinite(x) && Number.isFinite(y)) points.push([x, y]);\n } else if (o?.elementClass === 3 && o.center?.X && typeof o.Radius === 'function') {\n // OBJECT_CLASS_CIRCLE\n const cx = o.center.X(), cy = o.center.Y(), r = o.Radius();\n if (Number.isFinite(cx) && Number.isFinite(cy) && Number.isFinite(r)) {\n circles.push({ cx, cy, r });\n }\n }\n }\n const bbox = computeAutoFitBbox(points, circles, aspect);\n if (!bbox) return;\n try {\n board.setBoundingBox(bbox);\n if (typeof board.update === 'function') board.update();\n if (typeof board.fullUpdate === 'function') board.fullUpdate();\n } catch { /* ignore */ }\n}\n\n/**\n * Đẩy label điểm ra xa centroid (radial) để giảm chồng nhãn. Chỉ chạy cho\n * AI-generated figure (shouldAutoFit) — stamp user-edit giữ layout nhãn mặc định.\n */\nfunction applyRadialLabelOffsets(board: any): void {\n const objs = board?.objectsList;\n if (!Array.isArray(objs)) return;\n const pts: { id: string; x: number; y: number; el: any }[] = [];\n for (const o of objs) {\n if (o?.elementClass === 1 && typeof o.X === 'function' && o.label) {\n const x = o.X(), y = o.Y();\n if (Number.isFinite(x) && Number.isFinite(y)) pts.push({ id: o.id, x, y, el: o });\n }\n }\n const offsets = radialLabelOffsets(pts.map((p) => ({ id: p.id, x: p.x, y: p.y })));\n if (offsets.size === 0) return;\n for (const p of pts) {\n const off = offsets.get(p.id);\n if (!off) continue;\n try { p.el.setAttribute({ label: { offset: off } }); } catch { /* ignore */ }\n }\n try {\n if (typeof board.update === 'function') board.update();\n } catch { /* ignore */ }\n}\n\nfunction isDefaultBbox(bbox: readonly number[]): boolean {\n const d = DEFAULT_VIEW_2D.bbox;\n return bbox.length === 4 && bbox[0] === d[0] && bbox[1] === d[1] && bbox[2] === d[2] && bbox[3] === d[3];\n}\n\nexport async function renderGeometrySvgFromState(jsonState: string): Promise<string> {\n const state = deserializeBoard(jsonState);\n const view = state.meta.domain === '2d' ? state.meta.view : DEFAULT_VIEW_2D;\n const bbox = view.bbox as [number, number, number, number];\n const shouldAutoFit = isDefaultBbox(bbox);\n // Stamps inserted vào Excalidraw canvas → luôn dùng light palette.\n // Excalidraw's THEME_FILTER tự đảo nét trong dark mode.\n const palette = paletteFor(false);\n const dims = containerDimsForBbox(bbox);\n const { svgString } = await renderJsxgOffscreen({\n bbox,\n dims,\n axis: view.showAxis,\n grid: view.showGrid,\n keepAspectRatio: true,\n applyOptions: (JXG) => {\n \n const opts = (JXG as any).Options;\n if (!opts) return;\n opts.text = opts.text || {};\n opts.text.display = 'internal';\n opts.text.useASCIIMathML = false;\n opts.text.useMathJax = false;\n opts.text.useKatex = false;\n opts.text.strokeColor = palette.label;\n opts.label = opts.label || {};\n opts.label.display = 'internal';\n opts.label.strokeColor = palette.label;\n opts.axis = opts.axis || {};\n opts.axis.strokeColor = palette.axis;\n opts.grid = opts.grid || {};\n opts.grid.strokeColor = palette.grid;\n },\n setup: (board) => {\n const store = createStore(state);\n const renderer = new JxgRenderer(store, board);\n if (shouldAutoFit) {\n autoFitBboxFromBoard(board, dims.width / dims.height);\n applyRadialLabelOffsets(board);\n }\n return renderer;\n },\n });\n return svgString;\n}\n","// SVG inline base64 helper dùng chung cho 3 stamp (geometry-2d, geometry-3d,\n// graph-2d):\n//\n// - `svgToStampFile(svg, fileId)` — sync, dùng cho `restoreFileFromCustomData`\n// khi caller đã có fileId từ element.\n// - `createStampFile(svg)` — async, dùng cho insert path khi cần generate\n// fileId mới từ hash SVG content.\n//\n// Output luôn là SVG inline base64 — Excalidraw render native + tự đảo màu\n// trong dark mode qua CSS filter. KHÔNG raster sang PNG.\n\nconst DEFAULT_WIDTH = 200;\nconst DEFAULT_HEIGHT = 100;\n\nexport interface StampFileResult {\n fileId: string;\n dataURL: string;\n mimeType: 'image/svg+xml';\n width: number;\n height: number;\n}\n\nasync function hashSvgToFileId(input: string): Promise<string> {\n if (typeof crypto !== 'undefined' && crypto.subtle) {\n const buf = new TextEncoder().encode(input);\n const digest = await crypto.subtle.digest('SHA-256', buf);\n return Array.from(new Uint8Array(digest))\n .slice(0, 16)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n }\n // Double-hash FNV-1a (32-bit chained) → 16 hex chars. Fallback Node/jsdom.\n let h1 = 0x811c9dc5;\n let h2 = 0xcbf29ce4;\n for (let i = 0; i < input.length; i++) {\n const c = input.charCodeAt(i);\n h1 ^= c;\n h1 = Math.imul(h1, 0x01000193);\n h2 ^= c + i;\n h2 = Math.imul(h2, 0x100000001b3 & 0xffffffff);\n }\n return (\n (h1 >>> 0).toString(16).padStart(8, '0') +\n (h2 >>> 0).toString(16).padStart(8, '0')\n );\n}\n\nfunction parseDim(svg: string, attr: 'width' | 'height'): number {\n const re = new RegExp(`<svg[^>]*\\\\s${attr}=\"(\\\\d+(?:\\\\.\\\\d+)?)`, 'i');\n const m = svg.match(re);\n if (m) return Math.max(1, Math.round(parseFloat(m[1])));\n const vb = svg.match(/viewBox=\"([\\d.\\s-]+)\"/i);\n if (vb) {\n const parts = vb[1].trim().split(/\\s+/).map(parseFloat);\n if (parts.length === 4) {\n return Math.max(1, Math.round(attr === 'width' ? parts[2] : parts[3]));\n }\n }\n return attr === 'width' ? DEFAULT_WIDTH : DEFAULT_HEIGHT;\n}\n\nexport function parseSvgDims(svg: string): { width: number; height: number } {\n return { width: parseDim(svg, 'width'), height: parseDim(svg, 'height') };\n}\n\nexport function svgToStampFile(svgString: string, fileId: string): StampFileResult {\n const { width, height } = parseSvgDims(svgString);\n const utf8 = unescape(encodeURIComponent(svgString));\n const base64 = typeof btoa !== 'undefined'\n ? btoa(utf8)\n : Buffer.from(utf8, 'binary').toString('base64');\n return {\n fileId,\n dataURL: `data:image/svg+xml;base64,${base64}`,\n mimeType: 'image/svg+xml',\n width,\n height,\n };\n}\n\n// Async variant cho insert path: hash SVG → fileId rồi gọi svgToStampFile.\n// Identical SVG content → identical fileId (Excalidraw addFiles dedupe).\nexport async function createStampFile(svgString: string): Promise<StampFileResult> {\n const fileId = await hashSvgToFileId(svgString);\n return svgToStampFile(svgString, fileId);\n}\n","import type { BaseStampCustomData } from '../shared/types';\n\nexport interface GeometryCustomData extends BaseStampCustomData {\n kind: 'geometry';\n version: 1;\n jsonState: string;\n}\n\nexport function isGeometryCustomData(data: unknown): data is GeometryCustomData {\n if (!data || typeof data !== 'object') return false;\n const d = data as Partial<GeometryCustomData>;\n return d.kind === 'geometry' && d.version === 1 && typeof d.jsonState === 'string';\n}\n","'use client';\nimport * as React from 'react';\n\nexport interface TabSpec<K extends string = string> {\n key: K;\n label: React.ReactNode;\n testId?: string;\n}\n\nexport interface LeftPanelShellProps<K extends string = string> {\n title: string;\n icon: React.ReactNode;\n onClose: () => void;\n isDark?: boolean;\n tabs?: readonly TabSpec<K>[];\n activeTab?: K;\n onTabChange?: (k: K) => void;\n /** data-testid trên <aside> root. Mặc định \"left-panel\". */\n testId?: string;\n /** Opt-in: cho phép kéo viền phải để đổi width. */\n resizable?: boolean;\n /** Key localStorage để persist width khi resizable=true. */\n widthStorageKey?: string;\n /** Width mặc định khi resizable. Default 240 (≈ w-60). */\n defaultWidth?: number;\n minWidth?: number;\n maxWidth?: number;\n children: React.ReactNode;\n}\n\nconst FALLBACK_DEFAULT_WIDTH = 240;\nconst FALLBACK_MIN_WIDTH = 220;\nconst FALLBACK_MAX_WIDTH = 480;\n\nfunction clamp(n: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, n));\n}\n\nfunction readStoredWidth(\n key: string | undefined,\n fallback: number,\n min: number,\n max: number,\n): number {\n if (!key || typeof window === 'undefined') return fallback;\n try {\n const raw = window.localStorage.getItem(key);\n if (!raw) return fallback;\n const n = parseInt(raw, 10);\n if (Number.isFinite(n)) return clamp(n, min, max);\n } catch {\n /* SSR or storage disabled */\n }\n return fallback;\n}\n\nfunction CloseIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\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\nexport function LeftPanelShell<K extends string>(props: LeftPanelShellProps<K>): React.ReactElement {\n const {\n title,\n icon,\n onClose,\n isDark,\n tabs,\n activeTab,\n onTabChange,\n testId,\n resizable,\n widthStorageKey,\n defaultWidth,\n minWidth,\n maxWidth,\n children,\n } = props;\n const showTabs = !!tabs && tabs.length >= 2;\n\n const min = minWidth ?? FALLBACK_MIN_WIDTH;\n const max = maxWidth ?? FALLBACK_MAX_WIDTH;\n const initial = clamp(defaultWidth ?? FALLBACK_DEFAULT_WIDTH, min, max);\n\n const [width, setWidth] = React.useState<number>(() =>\n resizable ? readStoredWidth(widthStorageKey, initial, min, max) : initial,\n );\n const widthRef = React.useRef(width);\n widthRef.current = width;\n\n React.useEffect(() => {\n if (!resizable || !widthStorageKey || typeof window === 'undefined') return;\n try {\n window.localStorage.setItem(widthStorageKey, String(width));\n } catch {\n /* storage disabled */\n }\n }, [resizable, widthStorageKey, width]);\n\n const onResizeStart = React.useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n if (!resizable) return;\n e.preventDefault();\n const startX = e.clientX;\n const startW = widthRef.current;\n const onMove = (ev: MouseEvent) => {\n setWidth(clamp(startW + (ev.clientX - startX), min, max));\n };\n const onUp = () => {\n window.removeEventListener('mousemove', onMove);\n window.removeEventListener('mouseup', onUp);\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n };\n window.addEventListener('mousemove', onMove);\n window.addEventListener('mouseup', onUp);\n document.body.style.cursor = 'ew-resize';\n document.body.style.userSelect = 'none';\n },\n [resizable, min, max],\n );\n\n const onResizeDoubleClick = React.useCallback(() => {\n if (!resizable) return;\n setWidth(initial);\n }, [resizable, initial]);\n\n return (\n <aside\n role=\"complementary\"\n aria-label={title}\n data-testid={testId ?? 'left-panel'}\n data-stamp-area=\"true\"\n style={resizable ? { width: `${width}px` } : undefined}\n className={[\n isDark ? 'theme--dark ' : '',\n 'absolute left-0 top-0 z-30 flex h-full flex-col border-r border-slate-200 bg-white shadow-md animate-in slide-in-from-left duration-200',\n resizable ? '' : 'w-60',\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 type=\"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\n {showTabs && (\n <div role=\"tablist\" className=\"flex gap-1 rounded-md bg-slate-100 p-0.5 mx-3 mt-3\">\n {tabs!.map((t) => (\n <TabPill\n key={t.key}\n active={t.key === activeTab}\n onClick={() => onTabChange?.(t.key)}\n testId={t.testId}\n >\n {t.label}\n </TabPill>\n ))}\n </div>\n )}\n\n <div\n {...(showTabs ? { role: 'tabpanel' } : {})}\n className=\"min-h-0 flex-1 overflow-y-auto p-3 space-y-3\"\n >\n {children}\n </div>\n\n {resizable && (\n <div\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label=\"Kéo để đổi rộng panel\"\n data-testid=\"left-panel-resizer\"\n onMouseDown={onResizeStart}\n onDoubleClick={onResizeDoubleClick}\n className=\"group absolute right-0 top-0 z-40 h-full w-1.5 -mr-0.5 cursor-ew-resize select-none\"\n title=\"Kéo để đổi rộng (double-click để reset)\"\n >\n <div className=\"pointer-events-none absolute inset-y-0 right-0 w-px bg-slate-200 transition group-hover:bg-emerald-400 group-hover:w-0.5 group-active:bg-emerald-500 group-active:w-0.5\" />\n </div>\n )}\n </aside>\n );\n}\n\nexport function TabPill(props: {\n active: boolean;\n onClick: () => void;\n testId?: string;\n children: React.ReactNode;\n}): React.ReactElement {\n const { active, onClick, testId, children } = props;\n return (\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={active}\n onClick={onClick}\n data-testid={testId}\n className={[\n 'flex-1 rounded px-2 py-1 text-[11px] font-medium transition',\n active\n ? 'bg-white text-slate-900 shadow-sm ring-1 ring-slate-200'\n : 'text-slate-500 hover:text-slate-800',\n ].join(' ')}\n >\n {children}\n </button>\n );\n}\n\nexport function Section(props: { label: string; children: React.ReactNode }): React.ReactElement {\n return (\n <section>\n <h4 className=\"mb-1.5 text-[10px] font-semibold uppercase tracking-wider text-slate-500\">\n {props.label}\n </h4>\n {props.children}\n </section>\n );\n}\n","// src/core/scene/ui/kindMeta.ts\nexport interface KindUiMeta {\n displayName: string;\n icon: string;\n /** Fallback color khi obj.attrs.color không có. Phải khớp default ở renderer. */\n defaultColor: string;\n}\n\n// Default colors:\n// - Points: blue (#1e40af)\n// - Curves / shapes: dark slate (#0f172a)\n// - 3D planes / spheres: light blue (#60a5fa)\nconst POINT_COLOR = '#1e40af';\nconst CURVE_COLOR = '#0f172a';\nconst PLANE_COLOR = '#60a5fa';\n\nexport const KIND_UI_META: Readonly<Record<string, KindUiMeta>> = {\n // 2D\n point: { displayName: 'Điểm', icon: '·', defaultColor: POINT_COLOR },\n segment: { displayName: 'Đoạn thẳng', icon: '—', defaultColor: CURVE_COLOR },\n line: { displayName: 'Đường thẳng', icon: '/', defaultColor: CURVE_COLOR },\n ray: { displayName: 'Tia', icon: '→', defaultColor: CURVE_COLOR },\n vector: { displayName: 'Vector', icon: '↗', defaultColor: CURVE_COLOR },\n circle: { displayName: 'Đường tròn', icon: '○', defaultColor: CURVE_COLOR },\n polygon: { displayName: 'Đa giác', icon: '◇', defaultColor: CURVE_COLOR },\n intersection: { displayName: 'Giao điểm', icon: '✕', defaultColor: POINT_COLOR },\n angle: { displayName: 'Góc', icon: '∠', defaultColor: '#16a34a' },\n distance: { displayName: 'Khoảng cách', icon: '↔', defaultColor: '#dc2626' },\n // 3D\n point3d: { displayName: 'Điểm', icon: '·', defaultColor: POINT_COLOR },\n segment3d: { displayName: 'Đoạn thẳng', icon: '—', defaultColor: CURVE_COLOR },\n line3d: { displayName: 'Đường thẳng', icon: '/', defaultColor: CURVE_COLOR },\n ray3d: { displayName: 'Tia', icon: '→', defaultColor: CURVE_COLOR },\n vector3d: { displayName: 'Vector', icon: '↗', defaultColor: CURVE_COLOR },\n plane3d: { displayName: 'Mặt phẳng', icon: '▱', defaultColor: PLANE_COLOR },\n polygon3d: { displayName: 'Đa giác', icon: '◇', defaultColor: CURVE_COLOR },\n sphere3d: { displayName: 'Mặt cầu', icon: '◯', defaultColor: PLANE_COLOR },\n polyhedron3d: { displayName: 'Đa diện', icon: '⬢', defaultColor: PLANE_COLOR },\n cylinder3d: { displayName: 'Hình trụ', icon: '⌭', defaultColor: PLANE_COLOR },\n cone3d: { displayName: 'Hình nón', icon: '▲', defaultColor: PLANE_COLOR },\n // Graph 2D\n function2d: { displayName: 'Hàm số', icon: 'ƒ', defaultColor: CURVE_COLOR },\n parameter: { displayName: 'Tham số', icon: 'α', defaultColor: '#7c3aed' },\n pointOnCurve: { displayName: 'Điểm trên đồ thị', icon: '◉', defaultColor: POINT_COLOR },\n tangent2d: { displayName: 'Tiếp tuyến', icon: '╱', defaultColor: CURVE_COLOR },\n extremum2d: { displayName: 'Cực trị', icon: '∧', defaultColor: POINT_COLOR },\n root2d: { displayName: 'Nghiệm', icon: '0', defaultColor: POINT_COLOR },\n slope2d: { displayName: 'Hệ số góc', icon: '△', defaultColor: '#dc2626' },\n};\n\nexport function getKindUiMeta(kind: string): KindUiMeta {\n return KIND_UI_META[kind] ?? { displayName: kind, icon: '?', defaultColor: '#888888' };\n}\n","'use client';\nimport * as React from 'react';\n\nexport interface ObjectRowMenuProps {\n locked: boolean;\n onToggleLocked: () => void;\n onRename: () => void;\n onChangeColor: () => void;\n onDelete: () => void;\n}\n\nexport function ObjectRowMenu(props: ObjectRowMenuProps): React.ReactElement {\n const { locked, onToggleLocked, onRename, onChangeColor, onDelete } = props;\n const [open, setOpen] = React.useState(false);\n\n return (\n <div className=\"relative inline-block\">\n <button\n type=\"button\"\n aria-label=\"Row menu\"\n onClick={(e) => { e.stopPropagation(); setOpen((v) => !v); }}\n className=\"rounded px-1.5 text-black\"\n >\n ⋮\n </button>\n {open ? (\n <div\n role=\"menu\"\n className=\"absolute right-0 z-10 mt-1 w-40 rounded-md border border-zinc-200 bg-white py-1 text-xs shadow-lg dark:border-zinc-700 dark:bg-zinc-900\"\n onClick={(e) => e.stopPropagation()}\n >\n <MenuItem onClick={() => { setOpen(false); onRename(); }}>Đổi tên</MenuItem>\n <MenuItem onClick={() => { setOpen(false); onChangeColor(); }}>Đổi màu</MenuItem>\n <MenuItem onClick={() => { setOpen(false); onToggleLocked(); }}>\n {locked ? 'Mở khoá' : 'Khoá'}\n </MenuItem>\n <MenuItem\n onClick={() => { setOpen(false); onDelete(); }}\n className=\"text-red-600 dark:text-red-400\"\n >\n Xoá\n </MenuItem>\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction MenuItem({\n children,\n onClick,\n className,\n}: React.PropsWithChildren<{ onClick: () => void; className?: string }>) {\n return (\n <button\n type=\"button\"\n role=\"menuitem\"\n onClick={onClick}\n className={`block w-full px-3 py-1 text-left text-black ${className ?? ''}`}\n >\n {children}\n </button>\n );\n}\n","'use client';\nimport * as React from 'react';\nimport type { SceneObject, State } from '../types';\nimport { getKind } from '../registry';\nimport { getKindUiMeta } from './kindMeta';\nimport { ObjectRowMenu } from './ObjectRowMenu';\n\nexport interface ObjectRowProps {\n obj: SceneObject;\n state: State;\n selected: boolean;\n onSelect: (id: string) => void;\n onToggleVisible: (id: string) => void;\n onToggleLocked: (id: string) => void;\n onRename: (id: string) => void;\n onChangeColor: (id: string) => void;\n onDelete: (id: string) => void;\n /**\n * Override mô tả title của row. Mặc định dùng `getKind(obj.kind).describe()`.\n * Stamp consumer (vd geometry-2d) có thể inject DSL-style description.\n */\n describe?: (obj: SceneObject, state: State) => string;\n}\n\nfunction formatMeasure(items: { label: string; value: number }[]): string {\n return items.map((it) => `${it.label} = ${it.value.toFixed(2)}`).join(', ');\n}\n\nexport function ObjectRow(props: ObjectRowProps): React.ReactElement {\n const { obj, state, selected, onSelect, onToggleVisible, onToggleLocked, onRename, onChangeColor, onDelete, describe } = props;\n\n const meta = getKindUiMeta(obj.kind);\n\n let title = '';\n try {\n title = describe\n ? describe(obj, state)\n : getKind(obj.kind).describe(obj, state);\n } catch {\n title = `${meta.displayName} ${obj.label}`;\n }\n\n let measureText: string | null = null;\n if (selected) {\n try {\n const m = getKind(obj.kind).measure?.(obj, state);\n if (m && m.length > 0) measureText = formatMeasure(m);\n } catch {\n measureText = null;\n }\n }\n\n const color = (obj.attrs as { color?: string }).color ?? meta.defaultColor;\n\n return (\n <li\n data-testid={`object-row-${obj.id}`}\n aria-selected={selected}\n onClick={() => onSelect(obj.id)}\n className={\n 'flex flex-col border-b border-zinc-100 cursor-pointer dark:border-zinc-800 ' +\n (selected ? 'bg-slate-200' : '')\n }\n >\n <div className=\"flex items-center gap-2 px-3 py-1.5 text-xs\">\n <button\n type=\"button\"\n aria-label=\"Toggle visibility\"\n aria-pressed={!obj.visible}\n onClick={(e) => { e.stopPropagation(); onToggleVisible(obj.id); }}\n className=\"h-4 w-4 shrink-0 rounded-full border-2 transition\"\n style={{\n backgroundColor: obj.visible ? color : 'transparent',\n borderColor: color,\n }}\n />\n <span className=\"flex-1 truncate text-black\">\n {title}\n </span>\n <ObjectRowMenu\n locked={obj.locked}\n onToggleLocked={() => onToggleLocked(obj.id)}\n onRename={() => onRename(obj.id)}\n onChangeColor={() => onChangeColor(obj.id)}\n onDelete={() => onDelete(obj.id)}\n />\n </div>\n {selected && measureText && (\n <div\n data-testid={`object-row-detail-${obj.id}`}\n className=\"pl-9 pr-3 pb-1.5 text-[11px] text-black\"\n >\n {measureText}\n </div>\n )}\n </li>\n );\n}\n","'use client';\nimport * as React from 'react';\nimport type { Store } from '../store';\nimport type { SceneObject } from '../types';\nimport { listObjects } from '../selectors';\nimport { ObjectRow } from './ObjectRow';\n\nexport interface ObjectListPanelProps {\n store: Store;\n selectedId?: string;\n /**\n * Called when user clicks a row. Receives the row id, or `null` when the\n * user clicks the already-selected row (toggle off — request to deselect).\n * Parent should treat `null` as \"clear selection\".\n */\n onSelect?: (id: string | null) => void;\n /**\n * Optional per-kind row renderer. Called with the SceneObject and default props\n * (selected, onClick). Return a ReactNode to override the default ObjectRow.\n * Return null/undefined to fall back to the default ObjectRow.\n */\n renderRow?: (\n obj: SceneObject,\n defaults: { selected: boolean; onClick: () => void },\n ) => React.ReactNode;\n}\n\nexport function ObjectListPanel(props: ObjectListPanelProps): React.ReactElement {\n const { store, selectedId, onSelect, renderRow } = props;\n // useSyncExternalStore expects subscribe to receive () => void callback,\n // but Store.subscribe takes (next, prev, action) => void. Wrap to adapt.\n const subscribe = React.useCallback(\n (cb: () => void) => store.subscribe(() => cb()),\n [store],\n );\n const state = React.useSyncExternalStore(subscribe, store.getState, store.getState);\n const objects = listObjects(state);\n\n function handleSelect(id: string) {\n // Toggle: click vào row đang selected → deselect (collapse detail + tắt highlight).\n onSelect?.(id === selectedId ? null : id);\n }\n\n function handleToggleVisible(id: string) {\n const obj = state.objects[id];\n if (!obj) return;\n store.dispatch({ type: 'UPDATE', payload: { id, patch: { visible: !obj.visible } } });\n }\n\n function handleToggleLocked(id: string) {\n const obj = state.objects[id];\n if (!obj) return;\n store.dispatch({ type: 'UPDATE', payload: { id, patch: { locked: !obj.locked } } });\n }\n\n function handleDelete(id: string) {\n store.dispatch({ type: 'DELETE', payload: { id } });\n }\n\n function noop() { /* rename + change color stubbed for Phase 3 */ }\n\n return (\n <ul\n data-testid=\"object-list-panel\"\n className=\"flex max-h-[calc(100vh-200px)] flex-col overflow-y-auto\"\n >\n {objects.length === 0 ? (\n <li className=\"px-3 py-4 text-center text-xs text-zinc-500\">Chưa có đối tượng nào</li>\n ) : (\n objects.map((obj) => {\n const selected = obj.id === selectedId;\n const onClick = () => handleSelect(obj.id);\n if (renderRow) {\n const custom = renderRow(obj, { selected, onClick });\n if (custom != null) {\n return <React.Fragment key={obj.id}>{custom}</React.Fragment>;\n }\n }\n return (\n <ObjectRow\n key={obj.id}\n obj={obj}\n state={state}\n selected={selected}\n onSelect={handleSelect}\n onToggleVisible={handleToggleVisible}\n onToggleLocked={handleToggleLocked}\n onRename={noop}\n onChangeColor={noop}\n onDelete={handleDelete}\n />\n );\n })\n )}\n </ul>\n );\n}\n","'use client';\n// src/stamps/shared/StampLeftPanel/AxisGridSection.tsx\n//\n// Section \"Bố cục\" / \"Góc nhìn\": 2 checkbox axis/grid + (optional) undo/redo\n// button ở mép phải. Render khi có ít nhất 1 trong (view, history).\n// Skip toàn bộ section khi cả 2 đều undefined.\n\nimport React from 'react';\nimport { Section } from '../../../core/scene/ui/LeftPanelShell';\nimport type {\n StampLeftPanelHistoryProps,\n StampLeftPanelViewProps,\n} from './types';\n\nexport interface AxisGridSectionProps {\n view?: StampLeftPanelViewProps;\n history?: StampLeftPanelHistoryProps;\n}\n\nfunction UndoIcon(): React.ReactElement {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M3 10 L8 5 L8 8 L15 8 A5 5 0 0 1 20 13 L20 16\" />\n <path d=\"M3 10 L8 15 L8 12\" />\n </svg>\n );\n}\n\nfunction RedoIcon(): React.ReactElement {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M21 10 L16 5 L16 8 L9 8 A5 5 0 0 0 4 13 L4 16\" />\n <path d=\"M21 10 L16 15 L16 12\" />\n </svg>\n );\n}\n\nexport function AxisGridSection(props: AxisGridSectionProps): React.ReactElement | null {\n const { view, history } = props;\n if (!view && !history) return null;\n\n const sectionLabel = view?.sectionLabel ?? 'Bố cục';\n const axisLabel = view?.axisLabel ?? 'Trục';\n const gridLabel = view?.gridLabel ?? 'Lưới';\n\n return (\n <Section label={sectionLabel}>\n <div className=\"flex items-center gap-3 text-[11px] text-slate-700\">\n {view && (\n <>\n <label className=\"inline-flex select-none items-center gap-1.5\">\n <input\n type=\"checkbox\"\n checked={view.showAxis}\n onChange={(e) => view.onShowAxisChange(e.target.checked)}\n data-testid=\"toggle-axis\"\n />\n {axisLabel}\n </label>\n <label className=\"inline-flex select-none items-center gap-1.5\">\n <input\n type=\"checkbox\"\n checked={view.showGrid}\n onChange={(e) => view.onShowGridChange(e.target.checked)}\n data-testid=\"toggle-grid\"\n />\n {gridLabel}\n </label>\n </>\n )}\n {history && (\n <div className=\"ml-auto flex items-center gap-0.5\">\n <button\n type=\"button\"\n onClick={history.onUndo}\n disabled={!history.canUndo}\n title=\"Hoàn tác (Ctrl/Cmd+Z)\"\n aria-label=\"Hoàn tác\"\n data-testid=\"undo-btn\"\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 <button\n type=\"button\"\n onClick={history.onRedo}\n disabled={!history.canRedo}\n title=\"Làm lại (Ctrl/Cmd+Shift+Z)\"\n aria-label=\"Làm lại\"\n data-testid=\"redo-btn\"\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 <RedoIcon />\n </button>\n </div>\n )}\n </div>\n </Section>\n );\n}\n","// src/stamps/shared/StampLeftPanel/types.ts\n//\n// Shared types cho StampLeftPanel template. Dùng generic TKey/TGroup để\n// preserve type safety tại call site (host của từng stamp truyền union type\n// riêng); internal cài theo string là OK.\n\nimport type { ReactNode } from 'react';\nimport type { Store } from '../../../core/scene/store';\nimport type { SceneObject } from '../../../core/scene/types';\n\nexport const TOOLTIP_DELAY_MS = 400;\nexport type HoverState = { label: string; hint?: string; x: number; y: number } | null;\n\n/** Tool descriptor unified cho 3 stamp editor. */\nexport interface StampToolDef<TKey extends string = string, TGroup extends string = string> {\n key: TKey;\n label: string;\n hint?: string;\n icon: ReactNode;\n group: TGroup;\n shortcut?: string;\n}\n\nexport interface StampLeftPanelTabs {\n /** Label tab \"Đối tượng\" (default \"📐 Đối tượng\"). */\n objectsLabel?: ReactNode;\n /** Label tab \"Công cụ\" (default \"🧰 Công cụ\"). */\n toolsLabel?: ReactNode;\n}\n\nexport interface StampLeftPanelViewProps {\n /** Section header label, default \"Bố cục\". */\n sectionLabel?: string;\n /** Checkbox label cho axis, default \"Trục\". */\n axisLabel?: string;\n /** Checkbox label cho grid, default \"Lưới\". */\n gridLabel?: string;\n showAxis: boolean;\n showGrid: boolean;\n onShowAxisChange: (b: boolean) => void;\n onShowGridChange: (b: boolean) => void;\n}\n\nexport interface StampLeftPanelHistoryProps {\n onUndo: () => void;\n canUndo: boolean;\n onRedo: () => void;\n canRedo: boolean;\n}\n\nexport interface StampLeftPanelChordProps<TGroup extends string = string> {\n /** Group đang được focus sau khi user bấm letter. null = không active. */\n activeGroup: TGroup | null;\n /** Mapping group → letter hint (vd \"P\" cho group \"point\"). */\n letterForGroup: (g: TGroup) => string;\n}\n\nexport interface StampLeftPanelObjectsProps {\n store: Store;\n selectedObjectId?: string;\n onObjectSelect?: (id: string | null) => void;\n /** Custom row render (vd graph-2d cần FunctionRow/ParameterRow). Trả null để fallback default ObjectRow. */\n renderRow?: (\n obj: SceneObject,\n defaults: { selected: boolean; onClick: () => void },\n ) => ReactNode | null;\n /** Optional buttons phía trên ObjectListPanel (vd graph-2d \"+Hàm\" \"+Tham số\"). */\n addButtons?: ReadonlyArray<{ label: string; testId?: string; onClick: () => void }>;\n}\n\nexport interface StampLeftPanelProps<\n TKey extends string = string,\n TGroup extends string = string,\n> {\n // Header\n title: string;\n icon: ReactNode;\n onClose: () => void;\n isDark?: boolean;\n /** data-testid trên <aside> root. Default \"stamp-left-panel\". */\n testId?: string;\n\n // Tools (required)\n tools: ReadonlyArray<StampToolDef<TKey, TGroup>>;\n groupOrder: ReadonlyArray<TGroup>;\n groupLabels: Record<TGroup, string>;\n activeTool: TKey;\n onToolChange: (k: TKey) => void;\n\n // Optional sections\n view?: StampLeftPanelViewProps;\n history?: StampLeftPanelHistoryProps;\n chord?: StampLeftPanelChordProps<TGroup>;\n objects?: StampLeftPanelObjectsProps;\n tabs?: StampLeftPanelTabs;\n\n // Mobile\n isMobile?: boolean;\n drawerOpen?: boolean;\n onDrawerClose?: () => void;\n}\n","// src/stamps/shared/StampLeftPanel/useToolHoverTooltip.ts\n//\n// Generic hover tooltip hook. Trả về { hover, portalReady, showHover, hideHover }\n// để consumer render tooltip qua createPortal. Delay 400ms tránh flash.\n//\n// Generic theo StampToolDef → 3 stamp dùng chung. Moved từ\n// geometry-2d/editor/LeftPanel/useToolHoverTooltip.ts (Phase 1.2).\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { TOOLTIP_DELAY_MS, type HoverState, type StampToolDef } from './types';\n\nexport function 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: StampToolDef) => {\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","'use client';\n// src/stamps/shared/StampLeftPanel/ToolGrid.tsx\n//\n// Tool button grid với:\n// - Search input ở đầu (filter theo label/hint, ignore diacritics + case).\n// - Group section render 4-col icon button.\n// - Khi chord.activeGroup set: section đó highlight (ring emerald + bg),\n// section khác dimmed. KHÔNG render letter / number badge / hint footer\n// nữa (đã bỏ phím tắt visual ở v0.27).\n\nimport React, { useMemo, useState } from 'react';\nimport type {\n StampLeftPanelChordProps,\n StampToolDef,\n} from './types';\nimport { useToolHoverTooltip } from './useToolHoverTooltip';\nimport { createPortal } from 'react-dom';\n\nexport interface ToolGridProps<TKey extends string, TGroup extends string> {\n tools: ReadonlyArray<StampToolDef<TKey, TGroup>>;\n groupOrder: ReadonlyArray<TGroup>;\n groupLabels: Record<TGroup, string>;\n activeTool: TKey;\n onToolChange: (k: TKey) => void;\n chord?: StampLeftPanelChordProps<TGroup>;\n}\n\nfunction normalize(s: string): string {\n return s\n .toLowerCase()\n .normalize('NFD')\n .replace(/[̀-ͯ]/g, '')\n .replace(/đ/g, 'd')\n .replace(/Đ/g, 'd');\n}\n\nfunction SearchIcon(): React.ReactElement {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <circle cx=\"11\" cy=\"11\" r=\"7\" />\n <line x1=\"20\" y1=\"20\" x2=\"16.5\" y2=\"16.5\" />\n </svg>\n );\n}\n\nfunction ClearIcon(): React.ReactElement {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\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 ToolResultList<TKey extends string, TGroup extends string>(props: {\n tools: ReadonlyArray<StampToolDef<TKey, TGroup>>;\n activeTool: TKey;\n onToolChange: (k: TKey) => void;\n}): React.ReactElement {\n const { tools, activeTool, onToolChange } = props;\n return (\n <div className=\"flex flex-col gap-0.5\" data-testid=\"tool-result-list\">\n {tools.map((t) => {\n const active = activeTool === t.key;\n return (\n <button\n key={t.key}\n type=\"button\"\n data-tool={t.key}\n aria-label={t.label}\n aria-pressed={active}\n onClick={() => onToolChange(t.key)}\n className={[\n 'flex items-center gap-2 rounded-md px-2 py-1.5 text-left transition',\n active ? 'bg-emerald-600 text-white' : 'text-slate-700 hover:bg-slate-100',\n ].join(' ')}\n >\n <span className=\"flex h-6 w-6 shrink-0 items-center justify-center\">{t.icon}</span>\n <span className=\"min-w-0\">\n <span className=\"block truncate text-[12px] font-medium leading-tight\">{t.label}</span>\n {t.hint && (\n <span className={['block truncate text-[10px] leading-tight', active ? 'text-emerald-50' : 'text-slate-400'].join(' ')}>\n {t.hint}\n </span>\n )}\n </span>\n </button>\n );\n })}\n </div>\n );\n}\n\nexport function ToolGrid<TKey extends string, TGroup extends string>(\n props: ToolGridProps<TKey, TGroup>,\n): React.ReactElement {\n const { tools, groupOrder, groupLabels, activeTool, onToolChange, chord } = props;\n const { hover, portalReady, showHover, hideHover } = useToolHoverTooltip();\n\n const [query, setQuery] = useState('');\n const normalizedQuery = useMemo(() => normalize(query.trim()), [query]);\n\n const filteredTools = useMemo(() => {\n if (!normalizedQuery) return tools;\n return tools.filter((t) => {\n if (normalize(t.label).includes(normalizedQuery)) return true;\n if (t.hint && normalize(t.hint).includes(normalizedQuery)) return true;\n return false;\n });\n }, [tools, normalizedQuery]);\n\n const grouped = useMemo(() => {\n const acc: Partial<Record<TGroup, StampToolDef<TKey, TGroup>[]>> = {};\n for (const t of filteredTools) {\n (acc[t.group] ??= []).push(t);\n }\n return acc;\n }, [filteredTools]);\n\n const groupKeys = useMemo(\n () => groupOrder.filter((g) => grouped[g] && grouped[g]!.length > 0),\n [grouped, groupOrder],\n );\n\n const noMatch = normalizedQuery !== '' && groupKeys.length === 0;\n\n return (\n <>\n <div className=\"relative\">\n <span className=\"pointer-events-none absolute left-2 top-1/2 -translate-y-1/2 text-slate-400\">\n <SearchIcon />\n </span>\n <input\n type=\"search\"\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder=\"Tìm công cụ…\"\n aria-label=\"Tìm công cụ\"\n data-testid=\"tool-search-input\"\n className=\"w-full rounded-md border border-slate-200 bg-slate-50 py-1.5 pl-7 pr-7 text-[12px] text-slate-800 placeholder:text-slate-400 focus:border-emerald-400 focus:bg-white focus:outline-none focus:ring-1 focus:ring-emerald-300\"\n />\n {query && (\n <button\n type=\"button\"\n onClick={() => setQuery('')}\n aria-label=\"Xoá tìm kiếm\"\n data-testid=\"tool-search-clear\"\n className=\"absolute right-1.5 top-1/2 -translate-y-1/2 rounded p-0.5 text-slate-400 transition hover:bg-slate-200 hover:text-slate-700\"\n >\n <ClearIcon />\n </button>\n )}\n </div>\n\n {noMatch && (\n <div\n data-testid=\"tool-search-empty\"\n className=\"rounded-md border border-dashed border-slate-200 bg-slate-50 px-3 py-4 text-center text-[11px] text-slate-500\"\n >\n Không có công cụ nào khớp “{query.trim()}”.\n </div>\n )}\n\n {normalizedQuery !== '' && !noMatch ? (\n <ToolResultList tools={filteredTools} activeTool={activeTool} onToolChange={onToolChange} />\n ) : (\n groupKeys.map((group) => {\n const isChordActive = chord?.activeGroup === group;\n const dimmed = chord?.activeGroup != 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 ? 'bg-emerald-50 ring-1 ring-emerald-400 p-1' : 'p-0',\n dimmed ? 'opacity-55' : 'opacity-100',\n ].join(' ')}\n >\n <h4 className=\"mb-1.5 text-[10px] font-semibold uppercase tracking-wider text-slate-500\">\n {groupLabels[group]}\n </h4>\n <div className=\"grid grid-cols-4 gap-1\">\n {grouped[group]!.map((t) => {\n const active = activeTool === t.key;\n return (\n <button\n key={t.key}\n type=\"button\"\n aria-label={t.label}\n aria-pressed={active}\n data-tool={t.key}\n title={t.label + (t.shortcut ? ` (${t.shortcut})` : '')}\n onClick={() => onToolChange(t.key)}\n onMouseEnter={(e) => showHover(e.currentTarget, t)}\n onMouseLeave={hideHover}\n onFocus={(e) => showHover(e.currentTarget, t)}\n onBlur={hideHover}\n className={[\n 'relative flex h-10 items-center justify-center rounded-md transition',\n active\n ? 'bg-emerald-600 text-white shadow-sm'\n : 'text-slate-700 hover:bg-slate-100 hover:text-slate-900',\n ].join(' ')}\n >\n {t.icon}\n </button>\n );\n })}\n </div>\n </section>\n );\n })\n )}\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","'use client';\n// src/stamps/shared/StampLeftPanel/Desktop.tsx\n//\n// Desktop layout cho StampLeftPanel. Render:\n// 1. LeftPanelShell chrome + tabs (chỉ render tablist khi có objects)\n// 2. Tab \"tools\": <AxisGridSection> + <ToolGrid> chord-aware\n// 3. Tab \"objects\": optional add buttons + <ObjectListPanel> với custom renderRow\n\nimport React, { useEffect, useState } from 'react';\nimport { LeftPanelShell } from '../../../core/scene/ui/LeftPanelShell';\nimport { ObjectListPanel } from '../../../core/scene/ui/ObjectListPanel';\nimport { AxisGridSection } from './AxisGridSection';\nimport { ToolGrid } from './ToolGrid';\nimport type { StampLeftPanelProps } from './types';\n\nexport function StampLeftPanelDesktop<TKey extends string, TGroup extends string>(\n props: StampLeftPanelProps<TKey, TGroup>,\n): React.ReactElement {\n const {\n title,\n icon,\n onClose,\n isDark,\n testId,\n tools,\n groupOrder,\n groupLabels,\n activeTool,\n onToolChange,\n view,\n history,\n chord,\n objects,\n tabs,\n } = props;\n\n const [tab, setTab] = useState<'tools' | 'objects'>('tools');\n const hasObjects = !!objects;\n\n useEffect(() => {\n if (!hasObjects && tab === 'objects') setTab('tools');\n }, [hasObjects, tab]);\n\n const tabSpecs = hasObjects\n ? [\n { key: 'tools' as const, label: tabs?.toolsLabel ?? '🧰 Công cụ', testId: 'tab-tools' },\n { key: 'objects' as const, label: tabs?.objectsLabel ?? '📐 Đối tượng', testId: 'tab-objects' },\n ]\n : undefined;\n\n return (\n <LeftPanelShell\n title={title}\n icon={icon}\n onClose={onClose}\n isDark={isDark}\n testId={testId ?? 'stamp-left-panel'}\n tabs={tabSpecs}\n activeTab={hasObjects ? tab : undefined}\n onTabChange={hasObjects ? setTab : undefined}\n resizable\n widthStorageKey=\"xom11.stamp-left-panel.width\"\n >\n {(!hasObjects || tab === 'tools') ? (\n <>\n <AxisGridSection view={view} history={history} />\n <ToolGrid\n tools={tools}\n groupOrder={groupOrder}\n groupLabels={groupLabels}\n activeTool={activeTool}\n onToolChange={onToolChange}\n chord={chord}\n />\n </>\n ) : (\n <section data-testid=\"objects-panel\" className=\"flex flex-col gap-2\">\n {objects!.addButtons && objects!.addButtons.length > 0 && (\n <div className=\"flex gap-1\">\n {objects!.addButtons.map((b) => (\n <button\n key={b.label}\n type=\"button\"\n data-testid={b.testId}\n onClick={b.onClick}\n className=\"flex-1 rounded border border-slate-300 bg-slate-50 px-2 py-1 text-[11px] font-medium text-slate-700 transition hover:bg-slate-100\"\n >\n {b.label}\n </button>\n ))}\n </div>\n )}\n <ObjectListPanel\n store={objects!.store}\n selectedId={objects!.selectedObjectId}\n onSelect={objects!.onObjectSelect}\n renderRow={objects!.renderRow}\n />\n </section>\n )}\n </LeftPanelShell>\n );\n}\n","'use client';\n\nimport React from 'react';\n\n/**\n * Generic mobile tool drawer dùng chung cho geometry-2d + geometry-3d.\n *\n * Layout:\n * - Header: icon + title + close\n * - Sticky toolbar: chip switches (Trục/Lưới) + icon-actions (Reset, Undo)\n * - Body: section dọc, mỗi section là 1 nhóm tools, grid 3-col card có nhãn\n *\n * Style: soft-modern, emerald accent, khớp các class trong shared/stamp.css.\n */\n\nexport interface MobileChip {\n /** Label hiển thị + aria-label */\n label: string;\n icon: React.ReactNode;\n pressed: boolean;\n onToggle: (next: boolean) => void;\n /** data-testid optional (để test cũ chạy được) */\n testId?: string;\n}\n\nexport interface MobileActionButton {\n label: string;\n icon: React.ReactNode;\n onClick: () => void;\n disabled?: boolean;\n title?: string;\n /** data-testid optional (cho phép test target button cụ thể) */\n testId?: string;\n}\n\nexport interface MobileTool<TKey extends string> {\n key: TKey;\n label: string;\n icon: React.ReactNode;\n}\n\nexport interface MobileToolGroup<TKey extends string, TGroup extends string> {\n group: TGroup;\n groupLabel: string;\n tools: MobileTool<TKey>[];\n}\n\ninterface MobileToolDrawerProps<TKey extends string, TGroup extends string> {\n title: string;\n headerIcon: React.ReactNode;\n chips: MobileChip[];\n actions: MobileActionButton[];\n groups: MobileToolGroup<TKey, TGroup>[];\n activeTool: TKey;\n onToolSelect: (key: TKey) => void;\n drawerOpen: boolean;\n onDrawerClose: () => void;\n isDark?: boolean;\n /** data-testid trên <aside> — giữ để test cũ tìm được panel */\n testId?: string;\n /** Optional: thêm tab \"Đối tượng\" trong drawer body. */\n objectsTab?: {\n label: React.ReactNode;\n render: () => React.ReactNode;\n };\n}\n\nexport function MobileToolDrawer<TKey extends string, TGroup extends string>({\n title,\n headerIcon,\n chips,\n actions,\n groups,\n activeTool,\n onToolSelect,\n drawerOpen,\n onDrawerClose,\n isDark,\n testId,\n objectsTab,\n}: MobileToolDrawerProps<TKey, TGroup>) {\n const [mobileTab, setMobileTab] = React.useState<'tools' | 'objects'>('tools');\n const prevOpenRef = React.useRef(drawerOpen);\n React.useEffect(() => {\n if (!prevOpenRef.current && drawerOpen) setMobileTab('tools');\n prevOpenRef.current = drawerOpen;\n }, [drawerOpen]);\n\n return (\n <>\n {drawerOpen && (\n <div\n className=\"stamp-drawer-backdrop\"\n onPointerDown={onDrawerClose}\n aria-hidden=\"true\"\n />\n )}\n <aside\n role=\"complementary\"\n aria-label={title}\n aria-hidden={!drawerOpen ? 'true' : undefined}\n data-testid={testId}\n data-stamp-area=\"true\"\n data-mobile-drawer=\"true\"\n data-geo-mobile=\"true\"\n data-drawer-state={drawerOpen ? 'open' : 'closed'}\n className={[\n isDark ? 'theme--dark ' : '',\n 'stamp-drawer-mobile flex flex-col border-r border-slate-200 bg-white shadow-md',\n ].join('')}\n >\n {/* Header */}\n <header className=\"flex items-center justify-between border-b border-slate-200 bg-gradient-to-r from-slate-50 to-white px-4 py-3\">\n <h3 className=\"flex items-center gap-2 text-base font-semibold text-slate-800\">\n <span className=\"inline-flex h-7 w-7 items-center justify-center rounded-lg bg-emerald-50 text-emerald-700\">\n {headerIcon}\n </span>\n {title}\n </h3>\n <button\n type=\"button\"\n onClick={onDrawerClose}\n aria-label=\"Đóng ngăn công cụ\"\n className=\"inline-flex h-9 w-9 items-center justify-center rounded-full text-slate-500 transition hover:bg-slate-100 hover:text-slate-800\"\n >\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 </button>\n </header>\n\n {/* Sticky toolbar: chips + actions */}\n <div className=\"sticky top-0 z-10 flex items-center gap-2 border-b border-slate-200 bg-white/95 px-3 py-2 backdrop-blur\">\n {chips.map((c) => (\n <button\n key={c.label}\n type=\"button\"\n role=\"switch\"\n aria-pressed={c.pressed}\n aria-label={c.label}\n data-testid={c.testId}\n onClick={() => c.onToggle(!c.pressed)}\n className=\"geo-mobile-chip\"\n >\n {c.icon}\n {c.label}\n </button>\n ))}\n {actions.length > 0 && <div className=\"ml-auto flex items-center gap-1\">\n {actions.map((a) => (\n <button\n key={a.label}\n type=\"button\"\n onClick={a.onClick}\n disabled={a.disabled}\n aria-label={a.label}\n title={a.title ?? a.label}\n data-testid={a.testId}\n className=\"inline-flex h-9 w-9 items-center justify-center rounded-full 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 {a.icon}\n </button>\n ))}\n </div>}\n </div>\n\n {/* Tab row (chỉ render khi objectsTab được cung cấp) */}\n {objectsTab && (\n <div role=\"tablist\" className=\"flex gap-1 rounded-md bg-slate-100 p-0.5 mx-3 mt-2\">\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={mobileTab === 'tools'}\n onClick={() => setMobileTab('tools')}\n className={[\n 'flex-1 rounded px-2 py-1 text-[11px] font-medium transition',\n mobileTab === 'tools'\n ? 'bg-white text-slate-900 shadow-sm ring-1 ring-slate-200'\n : 'text-slate-500 hover:text-slate-800',\n ].join(' ')}\n >\n 🧰 Công cụ\n </button>\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={mobileTab === 'objects'}\n onClick={() => setMobileTab('objects')}\n className={[\n 'flex-1 rounded px-2 py-1 text-[11px] font-medium transition',\n mobileTab === 'objects'\n ? 'bg-white text-slate-900 shadow-sm ring-1 ring-slate-200'\n : 'text-slate-500 hover:text-slate-800',\n ].join(' ')}\n >\n {objectsTab.label}\n </button>\n </div>\n )}\n\n {/* Body: groups xếp dọc */}\n <div\n className=\"min-h-0 flex-1 overflow-y-auto\"\n style={{ paddingBottom: 'calc(0.75rem + env(safe-area-inset-bottom))' }}\n >\n {objectsTab && mobileTab === 'objects' ? (\n <div className=\"px-3 pt-3\">{objectsTab.render()}</div>\n ) : (\n groups.map((g) => (\n <section key={g.group} className=\"px-3 pt-3 pb-1\">\n <h4 className=\"mb-2 flex items-center gap-2 text-[11px] font-semibold uppercase tracking-wider text-slate-500\">\n <span className=\"h-1 w-1 rounded-full bg-emerald-500\" />\n {g.groupLabel}\n </h4>\n <div className=\"grid grid-cols-3 gap-2\">\n {g.tools.map((t) => {\n const active = activeTool === t.key;\n return (\n <button\n key={t.key}\n type=\"button\"\n aria-label={t.label}\n aria-pressed={active}\n data-tool={t.key}\n onClick={() => {\n onToolSelect(t.key);\n onDrawerClose();\n }}\n className={[\n 'flex flex-col items-center justify-center gap-1.5 rounded-2xl px-2 py-3 transition active:scale-95',\n active\n ? 'geo-mobile-tool-active'\n : 'bg-slate-50 text-slate-700 hover:bg-slate-100',\n ].join(' ')}\n >\n <span className=\"flex h-8 w-8 items-center justify-center\">{t.icon}</span>\n <span className=\"text-center text-[11px] font-medium leading-tight line-clamp-2\">\n {t.label}\n </span>\n </button>\n );\n })}\n </div>\n </section>\n ))\n )}\n </div>\n </aside>\n </>\n );\n}\n","'use client';\n// src/stamps/shared/StampLeftPanel/Mobile.tsx\n//\n// Mobile layout: wrap shared MobileToolDrawer với mapping:\n// chips = axis/grid (from view)\n// actions = undo/redo (from history)\n// groups = tools grouped by group\n// objects = objectsTab (objects.store + addButtons + custom renderRow)\n\nimport React, { useMemo } from 'react';\nimport { MobileToolDrawer, type MobileToolGroup } from '../MobileToolDrawer';\nimport { ObjectListPanel } from '../../../core/scene/ui/ObjectListPanel';\nimport type { StampLeftPanelProps } from './types';\n\nfunction AxisIcon(): React.ReactElement {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <line x1=\"4\" y1=\"20\" x2=\"20\" y2=\"20\" />\n <line x1=\"4\" y1=\"20\" x2=\"4\" y2=\"4\" />\n <polyline points=\"2 6 4 4 6 6\" />\n <polyline points=\"18 18 20 20 18 22\" />\n </svg>\n );\n}\n\nfunction GridIcon(): React.ReactElement {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"1\" />\n <line x1=\"4\" y1=\"10\" x2=\"20\" y2=\"10\" />\n <line x1=\"4\" y1=\"16\" x2=\"20\" y2=\"16\" />\n <line x1=\"10\" y1=\"4\" x2=\"10\" y2=\"20\" />\n <line x1=\"16\" y1=\"4\" x2=\"16\" y2=\"20\" />\n </svg>\n );\n}\n\nfunction UndoIcon(): React.ReactElement {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M3 10 L8 5 L8 8 L15 8 A5 5 0 0 1 20 13 L20 16\" />\n <path d=\"M3 10 L8 15 L8 12\" />\n </svg>\n );\n}\n\nfunction RedoIcon(): React.ReactElement {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M21 10 L16 5 L16 8 L9 8 A5 5 0 0 0 4 13 L4 16\" />\n <path d=\"M21 10 L16 15 L16 12\" />\n </svg>\n );\n}\n\nexport function StampLeftPanelMobile<TKey extends string, TGroup extends string>(\n props: StampLeftPanelProps<TKey, TGroup>,\n): React.ReactElement {\n const {\n title,\n icon,\n isDark,\n testId,\n tools,\n groupOrder,\n groupLabels,\n activeTool,\n onToolChange,\n view,\n history,\n objects,\n tabs,\n drawerOpen,\n onDrawerClose,\n } = props;\n\n const groups = useMemo<MobileToolGroup<TKey, TGroup>[]>(() => {\n const acc = new Map<TGroup, typeof tools[number][]>();\n for (const t of tools) {\n if (!acc.has(t.group)) acc.set(t.group, []);\n acc.get(t.group)!.push(t);\n }\n // Preserve groupOrder\n return groupOrder\n .filter((g) => acc.has(g))\n .map((group) => ({\n group,\n groupLabel: groupLabels[group],\n tools: acc.get(group)!.map((t) => ({ key: t.key, label: t.label, icon: t.icon })),\n }));\n }, [tools, groupOrder, groupLabels]);\n\n const chips = view\n ? [\n {\n label: view.axisLabel ?? 'Trục',\n icon: <AxisIcon />,\n pressed: view.showAxis,\n onToggle: view.onShowAxisChange,\n testId: 'toggle-axis',\n },\n {\n label: view.gridLabel ?? 'Lưới',\n icon: <GridIcon />,\n pressed: view.showGrid,\n onToggle: view.onShowGridChange,\n testId: 'toggle-grid',\n },\n ]\n : [];\n\n const actions = history\n ? [\n {\n label: 'Hoàn tác',\n title: 'Hoàn tác (Ctrl/Cmd+Z)',\n icon: <UndoIcon />,\n onClick: history.onUndo,\n disabled: !history.canUndo,\n testId: 'undo-btn',\n },\n {\n label: 'Làm lại',\n title: 'Làm lại (Ctrl/Cmd+Shift+Z)',\n icon: <RedoIcon />,\n onClick: history.onRedo,\n disabled: !history.canRedo,\n testId: 'redo-btn',\n },\n ]\n : [];\n\n return (\n <MobileToolDrawer\n title={title}\n headerIcon={icon}\n testId={testId ?? 'stamp-left-panel'}\n isDark={isDark}\n drawerOpen={!!drawerOpen}\n onDrawerClose={() => onDrawerClose?.()}\n chips={chips}\n actions={actions}\n groups={groups}\n activeTool={activeTool}\n onToolSelect={onToolChange}\n objectsTab={\n objects\n ? {\n label: tabs?.objectsLabel ?? '📐 Đối tượng',\n render: () => (\n <div className=\"flex flex-col gap-2 px-3\">\n {objects.addButtons && objects.addButtons.length > 0 && (\n <div className=\"flex gap-1 pt-3\">\n {objects.addButtons.map((b) => (\n <button\n key={b.label}\n type=\"button\"\n data-testid={b.testId}\n onClick={b.onClick}\n className=\"flex-1 rounded border border-slate-300 bg-slate-50 px-2 py-1 text-[11px] font-medium text-slate-700 transition hover:bg-slate-100\"\n >\n {b.label}\n </button>\n ))}\n </div>\n )}\n <ObjectListPanel\n store={objects.store}\n selectedId={objects.selectedObjectId}\n onSelect={objects.onObjectSelect}\n renderRow={objects.renderRow}\n />\n </div>\n ),\n }\n : undefined\n }\n />\n );\n}\n","'use client';\n// src/stamps/shared/StampLeftPanel/index.tsx\n//\n// Public API. Dispatch isMobile → Desktop hoặc Mobile.\n//\n// Usage:\n//\n// <StampLeftPanel\n// title=\"Hình học\"\n// icon={<GeomIcon />}\n// tools={TOOLS} // ReadonlyArray<StampToolDef>\n// groupOrder={GROUP_ORDER}\n// groupLabels={GROUP_LABELS}\n// activeTool={tool}\n// onToolChange={setTool}\n// view={{ showAxis, showGrid, onShowAxisChange, onShowGridChange }} // optional\n// history={{ onUndo, canUndo, onRedo, canRedo }} // optional\n// chord={{ activeGroup, letterForGroup }} // optional\n// objects={{ store, addButtons, renderRow, ... }} // optional\n// isMobile={isMobile}\n// drawerOpen={drawerOpen}\n// onDrawerClose={...}\n// onClose={onClose}\n// isDark={isDark}\n// />\n\nimport React from 'react';\nimport { StampLeftPanelDesktop } from './Desktop';\nimport { StampLeftPanelMobile } from './Mobile';\nimport type { StampLeftPanelProps } from './types';\n\nexport function StampLeftPanel<TKey extends string, TGroup extends string>(\n props: StampLeftPanelProps<TKey, TGroup>,\n): React.ReactElement {\n if (props.isMobile) return <StampLeftPanelMobile {...props} />;\n return <StampLeftPanelDesktop {...props} />;\n}\n\nexport type {\n StampLeftPanelProps,\n StampToolDef,\n StampLeftPanelViewProps,\n StampLeftPanelHistoryProps,\n StampLeftPanelChordProps,\n StampLeftPanelObjectsProps,\n StampLeftPanelTabs,\n HoverState,\n} from './types';\nexport { TOOLTIP_DELAY_MS } from './types';\nexport { useToolHoverTooltip } from './useToolHoverTooltip';\n","import React from 'react';\n\n// Design system:\n// - Main strokes use currentColor → respect active state (white-on-emerald).\n// - 4 accent colors stay fixed across states:\n// point → blue dot (signature từ GeoGebra)\n// construct → red dashed/solid helper line (perpendicular, bisector, parallel, tangent)\n// fill → orange polygon/area fill (light)\n// arc → emerald arc cho measurement\n// - ViewBox 24×24, stroke 1.4–1.7, round caps cho cảm giác sketch-like.\nconst C_POINT = '#2563eb';\nconst C_CONSTRUCT = '#dc2626';\nconst C_FILL = '#f59e0b';\nconst C_ARC = '#059669';\n\nexport const Icon = {\n // ===== Basic =====\n cursor: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M5 3 L5 18 L9.5 14 L12 20 L14 19.2 L11.5 13.5 L17.5 13.5 Z\"\n fill=\"currentColor\" fillOpacity=\"0.12\"\n stroke=\"currentColor\" strokeWidth=\"1.4\" strokeLinejoin=\"round\"\n />\n </svg>\n ),\n select: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinejoin=\"round\" strokeLinecap=\"round\">\n <rect x=\"2.5\" y=\"2.5\" width=\"14\" height=\"14\" rx=\"0.5\" stroke=\"currentColor\" strokeWidth=\"1.4\" strokeDasharray=\"2 1.8\"/>\n <path d=\"M10 10 L21 14.5 L14.5 16 L12.5 22 Z\" fill=\"currentColor\" fillOpacity=\"0.5\" stroke=\"currentColor\" strokeWidth=\"1.2\"/>\n </svg>\n ),\n\n // ===== Point =====\n point: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n <circle cx=\"9.5\" cy=\"14\" r=\"3.2\" fill={C_POINT}/>\n <text x=\"13.5\" y=\"10.5\" fontSize=\"9.5\" fontFamily=\"serif\" fontStyle=\"italic\" fontWeight=\"600\" fill={C_POINT}>A</text>\n </svg>\n ),\n midpoint: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinecap=\"round\">\n <line x1=\"4\" y1=\"12\" x2=\"20\" y2=\"12\" stroke=\"currentColor\" strokeWidth=\"1.5\"/>\n <circle cx=\"4\" cy=\"12\" r=\"1.8\" fill={C_POINT}/>\n <circle cx=\"20\" cy=\"12\" r=\"1.8\" fill={C_POINT}/>\n <circle cx=\"12\" cy=\"12\" r=\"2.6\" fill={C_CONSTRUCT}/>\n </svg>\n ),\n perpFoot: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinecap=\"round\">\n {/* Base line ngang (input — currentColor) */}\n <line x1=\"2\" y1=\"17\" x2=\"22\" y2=\"17\" stroke=\"currentColor\" strokeWidth=\"1.5\"/>\n {/* Vertical dashed line từ BLUE point xuống chân (construct/red) */}\n <line x1=\"9\" y1=\"5\" x2=\"9\" y2=\"17\" stroke={C_CONSTRUCT} strokeWidth=\"1.4\" strokeDasharray=\"2.5 2\"/>\n {/* Right-angle mark tại chân */}\n <rect x=\"9\" y=\"13.5\" width=\"3.5\" height=\"3.5\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1\"/>\n {/* BLUE point gốc */}\n <circle cx=\"9\" cy=\"5\" r=\"2\" fill={C_POINT}/>\n {/* RED point chân (output) */}\n <circle cx=\"9\" cy=\"17\" r=\"2.4\" fill={C_CONSTRUCT}/>\n </svg>\n ),\n intersect: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinecap=\"round\">\n <path d=\"M3 5 L21 19\" stroke=\"currentColor\" strokeWidth=\"1.6\"/>\n <path d=\"M21 5 L3 19\" stroke=\"currentColor\" strokeWidth=\"1.6\"/>\n <circle cx=\"12\" cy=\"12\" r=\"2.6\" fill={C_CONSTRUCT}/>\n </svg>\n ),\n\n // ===== Line =====\n segment: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinecap=\"round\">\n <line x1=\"5\" y1=\"18\" x2=\"19\" y2=\"6\" stroke=\"currentColor\" strokeWidth=\"1.6\"/>\n <circle cx=\"5\" cy=\"18\" r=\"2.2\" fill={C_POINT}/>\n <circle cx=\"19\" cy=\"6\" r=\"2.2\" fill={C_POINT}/>\n </svg>\n ),\n line: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinecap=\"round\">\n <line x1=\"2\" y1=\"21\" x2=\"22\" y2=\"3\" stroke=\"currentColor\" strokeWidth=\"1.6\"/>\n <circle cx=\"8.5\" cy=\"15.5\" r=\"1.9\" fill={C_POINT}/>\n <circle cx=\"15.5\" cy=\"8.5\" r=\"1.9\" fill={C_POINT}/>\n </svg>\n ),\n ray: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"5\" y1=\"19\" x2=\"22\" y2=\"2\" stroke=\"currentColor\" strokeWidth=\"1.6\"/>\n <circle cx=\"5\" cy=\"19\" r=\"2.2\" fill={C_POINT}/>\n <circle cx=\"12\" cy=\"12\" r=\"1.7\" fill={C_POINT}/>\n </svg>\n ),\n vector: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"5\" y1=\"19\" x2=\"18\" y2=\"6\"/>\n <polyline points=\"13,5 19,5 19,11\"/>\n <circle cx=\"5\" cy=\"19\" r=\"2\" fill={C_POINT} stroke=\"none\"/>\n </svg>\n ),\n\n // ===== Construct =====\n perpendicular: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinecap=\"round\">\n <line x1=\"2\" y1=\"17\" x2=\"22\" y2=\"17\" stroke=\"currentColor\" strokeWidth=\"1.5\"/>\n <line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"17\" stroke={C_CONSTRUCT} strokeWidth=\"1.5\"/>\n <rect x=\"12\" y=\"13.5\" width=\"3.5\" height=\"3.5\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1\"/>\n <circle cx=\"12\" cy=\"17\" r=\"1.8\" fill={C_POINT}/>\n </svg>\n ),\n parallel: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinecap=\"round\">\n {/* Đường đen = đã có (input). Đường đỏ = đường song song mới dựng đi qua điểm xanh. */}\n <line x1=\"2\" y1=\"9\" x2=\"22\" y2=\"6\" stroke=\"currentColor\" strokeWidth=\"1.5\"/>\n <line x1=\"2\" y1=\"19\" x2=\"22\" y2=\"16\" stroke={C_CONSTRUCT} strokeWidth=\"1.5\"/>\n <circle cx=\"12\" cy=\"17.5\" r=\"1.9\" fill={C_POINT}/>\n </svg>\n ),\n perpBisector: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinecap=\"round\">\n <line x1=\"4\" y1=\"16\" x2=\"20\" y2=\"16\" stroke=\"currentColor\" strokeWidth=\"1.5\"/>\n <line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"22\" stroke={C_CONSTRUCT} strokeWidth=\"1.4\" strokeDasharray=\"2.5 2\"/>\n <circle cx=\"4\" cy=\"16\" r=\"2\" fill={C_POINT}/>\n <circle cx=\"20\" cy=\"16\" r=\"2\" fill={C_POINT}/>\n </svg>\n ),\n bisector: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinecap=\"round\">\n <line x1=\"4\" y1=\"20\" x2=\"22\" y2=\"20\" stroke=\"currentColor\" strokeWidth=\"1.5\"/>\n <line x1=\"4\" y1=\"20\" x2=\"22\" y2=\"4\" stroke=\"currentColor\" strokeWidth=\"1.5\"/>\n <line x1=\"4\" y1=\"20\" x2=\"23\" y2=\"11\" stroke={C_CONSTRUCT} strokeWidth=\"1.4\" strokeDasharray=\"2.5 2\"/>\n </svg>\n ),\n\n // ===== Polygon =====\n polygon: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinejoin=\"round\">\n <polygon points=\"6,5 18,6 22,14 13,21 4,16\" fill={C_FILL} fillOpacity=\"0.28\" stroke={C_FILL} strokeWidth=\"1.5\"/>\n <circle cx=\"6\" cy=\"5\" r=\"1.5\" fill={C_POINT}/>\n <circle cx=\"18\" cy=\"6\" r=\"1.5\" fill={C_POINT}/>\n <circle cx=\"22\" cy=\"14\" r=\"1.5\" fill={C_POINT}/>\n <circle cx=\"13\" cy=\"21\" r=\"1.5\" fill={C_POINT}/>\n <circle cx=\"4\" cy=\"16\" r=\"1.5\" fill={C_POINT}/>\n </svg>\n ),\n regularPolygon: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinejoin=\"round\">\n <polygon points=\"12,3 20.5,8 20.5,16 12,21 3.5,16 3.5,8\" fill={C_FILL} fillOpacity=\"0.28\" stroke={C_FILL} strokeWidth=\"1.5\"/>\n <circle cx=\"12\" cy=\"3\" r=\"1.7\" fill={C_POINT}/>\n <circle cx=\"20.5\" cy=\"8\" r=\"1.7\" fill={C_POINT}/>\n </svg>\n ),\n\n // ===== Circle =====\n circleCenter: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n <circle cx=\"11\" cy=\"13\" r=\"8\" stroke=\"currentColor\" strokeWidth=\"1.5\"/>\n <circle cx=\"11\" cy=\"13\" r=\"1.7\" fill={C_POINT}/>\n <circle cx=\"19\" cy=\"13\" r=\"1.7\" fill={C_POINT}/>\n </svg>\n ),\n semicircle: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinecap=\"round\">\n {/* Nửa đường tròn emerald-arc, 2 endpoint blue ở đáy */}\n <path d=\"M 4 16 A 8 8 0 0 1 20 16\" stroke={C_ARC} strokeWidth=\"1.6\" fill=\"none\"/>\n <line x1=\"4\" y1=\"16\" x2=\"20\" y2=\"16\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeDasharray=\"2 1.6\"/>\n <circle cx=\"4\" cy=\"16\" r=\"1.9\" fill={C_POINT}/>\n <circle cx=\"20\" cy=\"16\" r=\"1.9\" fill={C_POINT}/>\n </svg>\n ),\n arcCenter: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinecap=\"round\">\n {/* Tâm blue (lớn) + cung emerald + 2 đầu cung blue (nhỏ), 2 bán kính nét đứt */}\n <path d=\"M 6 6 A 9 9 0 0 1 18 18\" stroke={C_ARC} strokeWidth=\"1.7\" fill=\"none\"/>\n <line x1=\"12\" y1=\"12\" x2=\"6\" y2=\"6\" stroke=\"currentColor\" strokeWidth=\"1\" strokeDasharray=\"1.5 1.5\" opacity=\"0.5\"/>\n <line x1=\"12\" y1=\"12\" x2=\"18\" y2=\"18\" stroke=\"currentColor\" strokeWidth=\"1\" strokeDasharray=\"1.5 1.5\" opacity=\"0.5\"/>\n <circle cx=\"12\" cy=\"12\" r=\"2\" fill={C_POINT}/>\n <circle cx=\"6\" cy=\"6\" r=\"1.4\" fill={C_POINT}/>\n <circle cx=\"18\" cy=\"18\" r=\"1.4\" fill={C_POINT}/>\n </svg>\n ),\n arc3: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinecap=\"round\">\n {/* Circle arc đi qua 3 điểm: (4,17), (12,9), (20,17). Tâm (12,17), r=8. */}\n <path d=\"M 4 17 A 8 8 0 0 1 20 17\" stroke={C_ARC} strokeWidth=\"1.8\" fill=\"none\"/>\n <circle cx=\"4\" cy=\"17\" r=\"1.9\" fill={C_POINT}/>\n <circle cx=\"12\" cy=\"9\" r=\"1.9\" fill={C_POINT}/>\n <circle cx=\"20\" cy=\"17\" r=\"1.9\" fill={C_POINT}/>\n </svg>\n ),\n sectorCenter: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinejoin=\"round\">\n {/* Tâm blue + 2 bán kính + cung emerald + fill orange */}\n <path d=\"M 12 12 L 5 7 A 8.6 8.6 0 0 1 19 7 Z\"\n fill={C_FILL} fillOpacity=\"0.25\"\n stroke={C_ARC} strokeWidth=\"1.6\"/>\n <line x1=\"12\" y1=\"12\" x2=\"5\" y2=\"7\" stroke=\"currentColor\" strokeWidth=\"1.3\"/>\n <line x1=\"12\" y1=\"12\" x2=\"19\" y2=\"7\" stroke=\"currentColor\" strokeWidth=\"1.3\"/>\n <circle cx=\"12\" cy=\"12\" r=\"1.8\" fill={C_POINT}/>\n <circle cx=\"5\" cy=\"7\" r=\"1.4\" fill={C_POINT}/>\n <circle cx=\"19\" cy=\"7\" r=\"1.4\" fill={C_POINT}/>\n </svg>\n ),\n circle3: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n <circle cx=\"12\" cy=\"13\" r=\"8\" stroke=\"currentColor\" strokeWidth=\"1.5\"/>\n <circle cx=\"12\" cy=\"5\" r=\"1.7\" fill={C_POINT}/>\n <circle cx=\"19\" cy=\"16\" r=\"1.7\" fill={C_POINT}/>\n <circle cx=\"5\" cy=\"16\" r=\"1.7\" fill={C_POINT}/>\n </svg>\n ),\n tangent: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinecap=\"round\">\n {/* Circle C=(10,13) r=5; external point P=(20,4); tangent points T1≈(14.5,15.2), T2≈(8.3,8.3) */}\n <circle cx=\"10\" cy=\"13\" r=\"5\" stroke=\"currentColor\" strokeWidth=\"1.5\"/>\n <line x1=\"20\" y1=\"4\" x2=\"14.5\" y2=\"15.2\" stroke={C_CONSTRUCT} strokeWidth=\"1.6\"/>\n <line x1=\"20\" y1=\"4\" x2=\"8.3\" y2=\"8.3\" stroke={C_CONSTRUCT} strokeWidth=\"1.6\"/>\n <circle cx=\"20\" cy=\"4\" r=\"1.9\" fill={C_POINT}/>\n <circle cx=\"14.5\" cy=\"15.2\" r=\"1.4\" fill={C_CONSTRUCT}/>\n <circle cx=\"8.3\" cy=\"8.3\" r=\"1.4\" fill={C_CONSTRUCT}/>\n </svg>\n ),\n\n // ===== Triangle centers =====\n centroid: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinejoin=\"round\">\n {/* Tam giác outline + fill orange nhạt */}\n <polygon points=\"4,20 20,20 12,4\" fill={C_FILL} fillOpacity=\"0.18\" stroke=\"currentColor\" strokeWidth=\"1.4\"/>\n {/* 3 medians: vertex → midpoint cạnh đối diện (xám dashed) */}\n <line x1=\"12\" y1=\"4\" x2=\"12\" y2=\"20\" stroke=\"#94a3b8\" strokeWidth=\"1\" strokeDasharray=\"1.5 1.5\"/>\n <line x1=\"4\" y1=\"20\" x2=\"16\" y2=\"12\" stroke=\"#94a3b8\" strokeWidth=\"1\" strokeDasharray=\"1.5 1.5\"/>\n <line x1=\"20\" y1=\"20\" x2=\"8\" y2=\"12\" stroke=\"#94a3b8\" strokeWidth=\"1\" strokeDasharray=\"1.5 1.5\"/>\n {/* 3 đỉnh BLUE */}\n <circle cx=\"4\" cy=\"20\" r=\"1.5\" fill={C_POINT}/>\n <circle cx=\"20\" cy=\"20\" r=\"1.5\" fill={C_POINT}/>\n <circle cx=\"12\" cy=\"4\" r=\"1.5\" fill={C_POINT}/>\n {/* Trọng tâm RED tại giao 3 medians */}\n <circle cx=\"12\" cy=\"14.67\" r=\"2.4\" fill={C_CONSTRUCT}/>\n </svg>\n ),\n circumcenter: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n {/* Đường tròn ngoại tiếp */}\n <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" strokeWidth=\"1.4\"/>\n {/* Tam giác nội tiếp */}\n <polygon points=\"12,3 21,16 3,16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.3\"/>\n {/* 3 đỉnh BLUE */}\n <circle cx=\"12\" cy=\"3\" r=\"1.6\" fill={C_POINT}/>\n <circle cx=\"21\" cy=\"16\" r=\"1.6\" fill={C_POINT}/>\n <circle cx=\"3\" cy=\"16\" r=\"1.6\" fill={C_POINT}/>\n {/* Tâm ngoại tiếp RED */}\n <circle cx=\"12\" cy=\"12\" r=\"2.4\" fill={C_CONSTRUCT}/>\n </svg>\n ),\n incenter: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n {/* Tam giác outline */}\n <polygon points=\"3,20 21,20 12,4\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.4\"/>\n {/* Đường tròn nội tiếp */}\n <circle cx=\"12\" cy=\"14\" r=\"4.5\" stroke=\"currentColor\" strokeWidth=\"1.3\"/>\n {/* 3 đỉnh BLUE */}\n <circle cx=\"3\" cy=\"20\" r=\"1.6\" fill={C_POINT}/>\n <circle cx=\"21\" cy=\"20\" r=\"1.6\" fill={C_POINT}/>\n <circle cx=\"12\" cy=\"4\" r=\"1.6\" fill={C_POINT}/>\n {/* Tâm nội tiếp RED */}\n <circle cx=\"12\" cy=\"14\" r=\"2.2\" fill={C_CONSTRUCT}/>\n </svg>\n ),\n orthocenter: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinecap=\"round\">\n {/* Tam giác outline */}\n <polygon points=\"3,20 21,20 8,5\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.4\"/>\n {/* 2 altitudes (dashed red) — đủ giao điểm */}\n <line x1=\"8\" y1=\"5\" x2=\"8\" y2=\"20\" stroke={C_CONSTRUCT} strokeWidth=\"1.2\" strokeDasharray=\"2 1.6\"/>\n <line x1=\"3\" y1=\"20\" x2=\"14.5\" y2=\"11.5\" stroke={C_CONSTRUCT} strokeWidth=\"1.2\" strokeDasharray=\"2 1.6\"/>\n {/* 3 đỉnh BLUE */}\n <circle cx=\"3\" cy=\"20\" r=\"1.6\" fill={C_POINT}/>\n <circle cx=\"21\" cy=\"20\" r=\"1.6\" fill={C_POINT}/>\n <circle cx=\"8\" cy=\"5\" r=\"1.6\" fill={C_POINT}/>\n {/* Trực tâm RED — giao 2 altitudes */}\n <circle cx=\"8\" cy=\"14.5\" r=\"2.4\" fill={C_CONSTRUCT}/>\n </svg>\n ),\n\n // ===== Measure =====\n angle: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"4\" y1=\"20\" x2=\"22\" y2=\"20\" stroke=\"currentColor\" strokeWidth=\"1.5\"/>\n <line x1=\"4\" y1=\"20\" x2=\"22\" y2=\"6\" stroke=\"currentColor\" strokeWidth=\"1.5\"/>\n <path d=\"M14 20 A 10 10 0 0 0 11 13.4\" stroke={C_ARC} strokeWidth=\"1.6\" fill=\"none\"/>\n <circle cx=\"4\" cy=\"20\" r=\"1.7\" fill={C_POINT}/>\n </svg>\n ),\n distance: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n <line x1=\"5\" y1=\"16\" x2=\"19\" y2=\"16\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\"/>\n <circle cx=\"5\" cy=\"16\" r=\"2\" fill={C_POINT}/>\n <circle cx=\"19\" cy=\"16\" r=\"2\" fill={C_POINT}/>\n <text x=\"8.5\" y=\"11\" fontSize=\"7\" fontFamily=\"serif\" fontStyle=\"italic\" fontWeight=\"600\" fill=\"currentColor\">cm</text>\n </svg>\n ),\n area: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinejoin=\"round\">\n <polygon points=\"4,10 14,3.5 21,12 16,21 5,18\" fill={C_FILL} fillOpacity=\"0.32\" stroke={C_FILL} strokeWidth=\"1.4\"/>\n <text x=\"1.5\" y=\"8\" fontSize=\"6.5\" fontFamily=\"serif\" fontStyle=\"italic\" fontWeight=\"600\" fill=\"currentColor\">cm²</text>\n </svg>\n ),\n\n // ===== Edit =====\n toggleLabel: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n <text x=\"1.5\" y=\"19\" fontSize=\"15\" fontFamily=\"serif\" fontWeight=\"700\" fill=\"currentColor\">A</text>\n <text x=\"12\" y=\"19\" fontSize=\"15\" fontFamily=\"serif\" fontWeight=\"700\" fill=\"currentColor\" fillOpacity=\"0.35\">A</text>\n </svg>\n ),\n toggleVisible: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n <circle cx=\"8\" cy=\"12\" r=\"3.2\" fill={C_POINT}/>\n <circle cx=\"17\" cy=\"12\" r=\"3.2\" fill=\"none\" stroke={C_POINT} strokeWidth=\"1.6\"/>\n </svg>\n ),\n trash: (\n // Eraser hình bình hành — GeoGebra dùng eraser, không phải trash bin.\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinejoin=\"round\" strokeLinecap=\"round\">\n <path d=\"M14.5 3 L21 9.5 L11.5 19 L4 19 L4 11.5 Z\" fill=\"currentColor\" fillOpacity=\"0.14\" stroke=\"currentColor\" strokeWidth=\"1.5\"/>\n <line x1=\"9.5\" y1=\"8\" x2=\"16\" y2=\"14.5\" stroke=\"currentColor\" strokeWidth=\"1.4\"/>\n </svg>\n ),\n\n // ===== Transform =====\n // Style chung: BLUE = input (điểm gốc / tâm), RED = output (ảnh sau biến hình).\n // Mảnh, ít chi tiết — focus vào quan hệ điểm gốc ↔ ảnh.\n translate: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n {/* Vector tịnh tiến rời (mũi tên đen) — START thẳng hàng dọc với chấm xanh (x=7), xuống dưới đáy icon, song song với gốc→ảnh */}\n <line x1=\"7\" y1=\"21\" x2=\"12.5\" y2=\"16.25\" stroke=\"currentColor\" strokeWidth=\"1.4\"/>\n <polyline points=\"11.94,17.85 12.5,16.25 10.83,16.57\" stroke=\"currentColor\" strokeWidth=\"1.4\" fill=\"none\"/>\n {/* Điểm gốc BLUE → mũi tên xám → ảnh RED (cùng hướng vector trên) */}\n <line x1=\"7\" y1=\"15\" x2=\"18\" y2=\"5.5\" stroke=\"#94a3b8\" strokeWidth=\"1.4\"/>\n <polyline points=\"15.54,5.97 18,5.5 17.18,7.86\" stroke=\"#94a3b8\" strokeWidth=\"1.4\" fill=\"none\"/>\n <circle cx=\"7\" cy=\"15\" r=\"2\" fill={C_POINT}/>\n <circle cx=\"18\" cy=\"5.5\" r=\"2\" fill={C_CONSTRUCT}/>\n </svg>\n ),\n rotate: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n {/* Tâm quay BLUE (lớn) ở dưới + 2 bán kính + cung α (centered tại vertex, bulge lên) + α + gốc BLUE → ảnh RED */}\n <line x1=\"12\" y1=\"18\" x2=\"20\" y2=\"6\" stroke=\"currentColor\" strokeWidth=\"1\" opacity=\"0.55\"/>\n <line x1=\"12\" y1=\"18\" x2=\"4\" y2=\"9\" stroke=\"currentColor\" strokeWidth=\"1\" opacity=\"0.55\"/>\n {/* Arc r=4 quanh vertex (12,18): start (14.22,14.67) → end (9.34,15.01), short arc bulge UP */}\n <path d=\"M 14.22 14.67 A 4 4 0 0 0 9.34 15.01\" stroke=\"currentColor\" strokeWidth=\"1.2\" fill=\"none\"/>\n <text x=\"10\" y=\"14\" fontSize=\"7\" fontFamily=\"serif\" fontStyle=\"italic\" fontWeight=\"700\" fill=\"currentColor\">α</text>\n <circle cx=\"12\" cy=\"18\" r=\"2.4\" fill={C_POINT} stroke=\"#fff\" strokeWidth=\"0.8\"/>\n <circle cx=\"20\" cy=\"6\" r=\"1.9\" fill={C_POINT}/>\n <circle cx=\"4\" cy=\"9\" r=\"1.9\" fill={C_CONSTRUCT}/>\n </svg>\n ),\n reflectLine: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n {/* Trục đối xứng (đường đen chéo) */}\n <line x1=\"3\" y1=\"21\" x2=\"21\" y2=\"3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\"/>\n {/* Điểm gốc BLUE (phía trên trục) + ảnh RED (phía dưới trục, đối xứng) */}\n <circle cx=\"5\" cy=\"11\" r=\"2\" fill={C_POINT}/>\n <circle cx=\"13\" cy=\"19\" r=\"2\" fill={C_CONSTRUCT}/>\n </svg>\n ),\n reflectPoint: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n {/* Điểm gốc BLUE + tâm BLUE (lớn hơn) + ảnh RED, thẳng hàng & cách đều */}\n <line x1=\"4\" y1=\"20\" x2=\"20\" y2=\"4\" stroke=\"currentColor\" strokeWidth=\"0.9\" strokeDasharray=\"1.5 1.5\" opacity=\"0.45\"/>\n <circle cx=\"5\" cy=\"19\" r=\"1.9\" fill={C_POINT}/>\n <circle cx=\"12\" cy=\"12\" r=\"2.6\" fill={C_POINT} stroke=\"#fff\" strokeWidth=\"0.8\"/>\n <circle cx=\"19\" cy=\"5\" r=\"1.9\" fill={C_CONSTRUCT}/>\n </svg>\n ),\n dilate: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n {/* Tâm vị tự BLUE + điểm gốc BLUE (gần tâm) + ảnh RED (xa hơn) — chừa chỗ cho k phía trên đường */}\n <line x1=\"3\" y1=\"20\" x2=\"21\" y2=\"4\" stroke=\"currentColor\" strokeWidth=\"0.9\" strokeDasharray=\"1.5 1.5\" opacity=\"0.5\"/>\n <circle cx=\"4\" cy=\"19\" r=\"2.2\" fill={C_POINT} stroke=\"#fff\" strokeWidth=\"0.8\"/>\n <circle cx=\"8\" cy=\"15.5\" r=\"1.7\" fill={C_POINT}/>\n <circle cx=\"19\" cy=\"5.7\" r=\"1.9\" fill={C_CONSTRUCT}/>\n <text x=\"10.5\" y=\"10.5\" fontSize=\"8\" fontFamily=\"serif\" fontStyle=\"italic\" fontWeight=\"700\" fill=\"currentColor\">k</text>\n </svg>\n ),\n\n // ===== Special shapes =====\n square: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n <rect x=\"5\" y=\"5\" width=\"14\" height=\"14\" fill={C_FILL} fillOpacity=\"0.18\" stroke=\"currentColor\" strokeWidth=\"1.6\"/>\n <circle cx=\"5\" cy=\"5\" r=\"1.7\" fill={C_POINT}/>\n <circle cx=\"19\" cy=\"5\" r=\"1.7\" fill={C_POINT}/>\n </svg>\n ),\n rectangle: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n <rect x=\"3\" y=\"7\" width=\"18\" height=\"10\" fill={C_FILL} fillOpacity=\"0.18\" stroke=\"currentColor\" strokeWidth=\"1.6\"/>\n <circle cx=\"3\" cy=\"17\" r=\"1.7\" fill={C_POINT}/>\n <circle cx=\"21\" cy=\"17\" r=\"1.7\" fill={C_POINT}/>\n <circle cx=\"21\" cy=\"7\" r=\"1.7\" fill={C_POINT}/>\n </svg>\n ),\n rhombus: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M 12 3 L 21 12 L 12 21 L 3 12 Z\" fill={C_FILL} fillOpacity=\"0.18\" stroke=\"currentColor\" strokeWidth=\"1.6\"/>\n <circle cx=\"3\" cy=\"12\" r=\"1.7\" fill={C_POINT}/>\n <circle cx=\"12\" cy=\"21\" r=\"1.7\" fill={C_POINT}/>\n <circle cx=\"21\" cy=\"12\" r=\"1.7\" fill={C_POINT}/>\n </svg>\n ),\n parallelogram: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M 5 19 L 21 19 L 19 5 L 3 5 Z\" fill={C_FILL} fillOpacity=\"0.18\" stroke=\"currentColor\" strokeWidth=\"1.6\"/>\n <circle cx=\"3\" cy=\"5\" r=\"1.7\" fill={C_POINT}/>\n <circle cx=\"19\" cy=\"5\" r=\"1.7\" fill={C_POINT}/>\n <circle cx=\"21\" cy=\"19\" r=\"1.7\" fill={C_POINT}/>\n </svg>\n ),\n isoTrapezoid: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M 3 19 L 21 19 L 17 5 L 7 5 Z\" fill={C_FILL} fillOpacity=\"0.18\" stroke=\"currentColor\" strokeWidth=\"1.6\"/>\n <circle cx=\"3\" cy=\"19\" r=\"1.7\" fill={C_POINT}/>\n <circle cx=\"21\" cy=\"19\" r=\"1.7\" fill={C_POINT}/>\n <circle cx=\"7\" cy=\"5\" r=\"1.7\" fill={C_POINT}/>\n </svg>\n ),\n isoTriangle: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M 12 4 L 21 20 L 3 20 Z\" fill={C_FILL} fillOpacity=\"0.18\" stroke=\"currentColor\" strokeWidth=\"1.6\"/>\n <circle cx=\"3\" cy=\"20\" r=\"1.7\" fill={C_POINT}/>\n <circle cx=\"21\" cy=\"20\" r=\"1.7\" fill={C_POINT}/>\n <circle cx=\"12\" cy=\"4\" r=\"1.7\" fill={C_POINT}/>\n {/* dashed perpendicular bisector hint */}\n <line x1=\"12\" y1=\"4\" x2=\"12\" y2=\"20\" stroke={C_CONSTRUCT} strokeWidth=\"0.8\" strokeDasharray=\"1.5 1.5\" opacity=\"0.7\"/>\n </svg>\n ),\n rightTriangle: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M 4 20 L 20 20 L 4 4 Z\" fill={C_FILL} fillOpacity=\"0.18\" stroke=\"currentColor\" strokeWidth=\"1.6\"/>\n {/* right-angle marker */}\n <path d=\"M 4 17 L 7 17 L 7 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.2\"/>\n <circle cx=\"4\" cy=\"20\" r=\"1.7\" fill={C_POINT}/>\n <circle cx=\"20\" cy=\"20\" r=\"1.7\" fill={C_POINT}/>\n <circle cx=\"4\" cy=\"4\" r=\"1.7\" fill={C_POINT}/>\n </svg>\n ),\n\n // ===== Nâng cao / kind chưa có icon =====\n excenter: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M5 16 L12 5 L19 16 Z\" stroke=\"currentColor\" strokeWidth=\"1.3\"/>\n <circle cx=\"12\" cy=\"20\" r=\"3\" fill=\"none\" stroke={C_CONSTRUCT} strokeWidth=\"1.3\"/>\n <circle cx=\"12\" cy=\"20\" r=\"1.4\" fill={C_CONSTRUCT}/>\n </svg>\n ),\n tangencyPoint: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n <circle cx=\"10\" cy=\"12\" r=\"6.5\" stroke=\"currentColor\" strokeWidth=\"1.3\"/>\n <line x1=\"16.5\" y1=\"3\" x2=\"16.5\" y2=\"21\" stroke=\"currentColor\" strokeWidth=\"1.3\"/>\n <circle cx=\"16.5\" cy=\"12\" r=\"2.2\" fill={C_CONSTRUCT}/>\n </svg>\n ),\n secondIntersection: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n <circle cx=\"11\" cy=\"12\" r=\"6.5\" stroke=\"currentColor\" strokeWidth=\"1.3\"/>\n <line x1=\"2\" y1=\"8\" x2=\"22\" y2=\"16\" stroke=\"currentColor\" strokeWidth=\"1.3\"/>\n <circle cx=\"6.2\" cy=\"9.6\" r=\"1.6\" fill=\"currentColor\"/>\n <circle cx=\"15.8\" cy=\"14.4\" r=\"2.4\" fill={C_CONSTRUCT}/>\n </svg>\n ),\n arcMidpoint: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinecap=\"round\">\n <path d=\"M4 17 A 9 9 0 0 1 20 17\" stroke=\"currentColor\" strokeWidth=\"1.4\"/>\n <circle cx=\"4\" cy=\"17\" r=\"1.6\" fill=\"currentColor\"/>\n <circle cx=\"20\" cy=\"17\" r=\"1.6\" fill=\"currentColor\"/>\n <circle cx=\"12\" cy=\"8.2\" r=\"2.4\" fill={C_CONSTRUCT}/>\n </svg>\n ),\n circleIntersection: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n <circle cx=\"9\" cy=\"12\" r=\"6\" stroke=\"currentColor\" strokeWidth=\"1.3\"/>\n <circle cx=\"15\" cy=\"12\" r=\"6\" stroke=\"currentColor\" strokeWidth=\"1.3\"/>\n <circle cx=\"12\" cy=\"7.6\" r=\"2\" fill={C_CONSTRUCT}/>\n <circle cx=\"12\" cy=\"16.4\" r=\"2\" fill={C_CONSTRUCT}/>\n </svg>\n ),\n tangentPointExt: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" strokeLinecap=\"round\">\n <circle cx=\"14\" cy=\"12\" r=\"6\" stroke=\"currentColor\" strokeWidth=\"1.3\"/>\n <circle cx=\"3.5\" cy=\"12\" r=\"1.8\" fill={C_POINT}/>\n <line x1=\"3.5\" y1=\"12\" x2=\"17.5\" y2=\"7.5\" stroke=\"currentColor\" strokeWidth=\"1.2\"/>\n <line x1=\"3.5\" y1=\"12\" x2=\"17.5\" y2=\"16.5\" stroke=\"currentColor\" strokeWidth=\"1.2\"/>\n <circle cx=\"17.5\" cy=\"7.5\" r=\"1.8\" fill={C_CONSTRUCT}/>\n <circle cx=\"17.5\" cy=\"16.5\" r=\"1.8\" fill={C_CONSTRUCT}/>\n </svg>\n ),\n circleCR: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n <circle cx=\"12\" cy=\"12\" r=\"7.5\" stroke=\"currentColor\" strokeWidth=\"1.3\"/>\n <circle cx=\"12\" cy=\"12\" r=\"1.8\" fill={C_POINT}/>\n <line x1=\"12\" y1=\"12\" x2=\"19.5\" y2=\"12\" stroke={C_CONSTRUCT} strokeWidth=\"1.3\"/>\n </svg>\n ),\n incircle: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M3 19 L12 4 L21 19 Z\" stroke=\"currentColor\" strokeWidth=\"1.3\" strokeLinejoin=\"round\"/>\n <circle cx=\"12\" cy=\"14\" r=\"4.2\" fill=\"none\" stroke={C_CONSTRUCT} strokeWidth=\"1.3\"/>\n </svg>\n ),\n excircle: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M6 9 L14 4 L18 13 Z\" stroke=\"currentColor\" strokeWidth=\"1.2\"/>\n <circle cx=\"9\" cy=\"17\" r=\"4.6\" fill=\"none\" stroke={C_CONSTRUCT} strokeWidth=\"1.3\"/>\n </svg>\n ),\n pointOn: (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n <circle cx=\"12\" cy=\"12\" r=\"7.5\" stroke=\"currentColor\" strokeWidth=\"1.3\"/>\n <circle cx=\"17.3\" cy=\"6.7\" r=\"2.4\" fill={C_POINT}/>\n </svg>\n ),\n};\n\nexport const GeometryIconHeader = (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polygon points=\"4,20 20,20 12,5\" />\n <circle cx=\"4\" cy=\"20\" r=\"1.5\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"20\" cy=\"20\" r=\"1.5\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"12\" cy=\"5\" r=\"1.5\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n);\n\nexport function UndoIcon(): React.ReactElement {\n return (\n <svg width=\"14\" height=\"14\" 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\nexport function RedoIcon(): React.ReactElement {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"21 7 21 13 15 13\" />\n <path d=\"M20.49 13a9 9 0 1 1-2.12-9.36L21 7\" />\n </svg>\n );\n}\n","import React from 'react';\n\n/**\n * Static catalog của tất cả GeomTool — không phụ thuộc board state, chỉ là\n * metadata (key, label, hint, icon SVG, group, số click cần, accept types).\n *\n * Tách khỏi MiniBoard.tsx để (1) giảm size file component và (2) dễ\n * mở rộng tool mới mà không cần đụng vào board logic.\n */\n\n// Tool keys — match GeoGebra-style toolset\nexport type GeomTool =\n | 'move'\n | 'select'\n | 'point'\n | 'midpoint'\n | 'perpFoot'\n | 'intersect'\n | 'segment'\n | 'line'\n | 'ray'\n | 'vector'\n | 'perpendicular'\n | 'parallel'\n | 'perpBisector'\n | 'angleBisector'\n | 'polygon'\n | 'regularPolygon'\n | 'circleCenter'\n | 'semicircle'\n | 'arcCenter'\n | 'arc3'\n | 'sectorCenter'\n | 'circle3'\n | 'tangent'\n | 'centroid'\n | 'circumcenter'\n | 'incenter'\n | 'orthocenter'\n | 'angle'\n | 'distance'\n | 'area'\n | 'toggleLabel'\n | 'toggleVisible'\n | 'delete'\n | 'translate'\n | 'rotate'\n | 'reflectLine'\n | 'reflectPoint'\n | 'dilate'\n | 'square'\n | 'rectangle'\n | 'rhombus'\n | 'parallelogram'\n | 'isoTrapezoid'\n | 'isoTriangle'\n | 'rightTriangle'\n | 'excenter'\n | 'tangencyPoint'\n | 'secondIntersection'\n | 'arcMidpoint'\n | 'circleIntersection'\n | 'tangentPointExt'\n | 'circleCR'\n | 'incircle'\n | 'excircle'\n | 'pointOn';\n\nexport interface ToolDef {\n key: GeomTool;\n label: string;\n hint: string;\n icon: React.ReactNode;\n group:\n | 'move'\n | 'point'\n | 'line'\n | 'construct'\n | 'polygon'\n | 'circle'\n | 'triangle'\n | 'measure'\n | 'edit'\n | 'transform'\n | 'special'\n | 'advanced';\n /** Số click cần trước khi action fire. -1 = mở (polygon đóng bằng click lại điểm đầu). */\n needs: number;\n /** Loại object accept ở mỗi slot. 'any' = point hoặc non-point. 'lineOrCircle' = line hoặc circle (loại trừ point). 'pointOrLine' = point hoặc line/đoạn (loại trừ circle). */\n accepts?: Array<'point' | 'line' | 'circle' | 'any' | 'lineOrCircle' | 'pointOrLine'>;\n}\n\n// ============== Tool icons — imported from icons.tsx ==============\nimport { Icon } from './icons';\n\n// ============== Tool catalog ==============\nexport const TOOLS: ToolDef[] = [\n { key: 'move', label: 'Di chuyển', hint: 'Kéo điểm hoặc xoay nền', icon: Icon.cursor, group: 'move', needs: 0 },\n { key: 'select', label: 'Chọn', hint: 'Click để chọn 1 / Shift+click để bỏ thêm / Kéo nền để khoanh vùng / DEL để xoá', icon: Icon.select, group: 'move', needs: 0 },\n { key: 'point', label: 'Điểm mới', hint: 'Click để thêm điểm', icon: Icon.point, group: 'point', needs: 1 },\n { key: 'midpoint', label: 'Trung điểm', hint: 'Click 2 điểm có sẵn', icon: Icon.midpoint, group: 'point', needs: 2, accepts: ['point', 'point'] },\n { key: 'perpFoot', label: 'Chân đường vuông góc', hint: 'Click 1 điểm + 1 đường có sẵn', icon: Icon.perpFoot, group: 'point', needs: 2, accepts: ['point', 'line'] },\n { key: 'intersect', label: 'Giao điểm của 2 đối tượng', hint: 'Click 2 đường/đường tròn có sẵn', icon: Icon.intersect, group: 'point', needs: 2, accepts: ['lineOrCircle', 'lineOrCircle'] },\n { key: 'segment', label: 'Đoạn thẳng', hint: 'Click 2 điểm', icon: Icon.segment, group: 'line', needs: 2 },\n { key: 'line', label: 'Đường thẳng qua 2 điểm', hint: 'Click 2 điểm', icon: Icon.line, group: 'line', needs: 2 },\n { key: 'ray', label: 'Tia qua 2 điểm', hint: 'Click 2 điểm', icon: Icon.ray, group: 'line', needs: 2 },\n { key: 'vector', label: 'Vector', hint: 'Click 2 điểm', icon: Icon.vector, group: 'line', needs: 2 },\n { key: 'perpendicular', label: 'Đường vuông góc', hint: 'Click 1 điểm + 1 đường có sẵn', icon: Icon.perpendicular, group: 'construct', needs: 2, accepts: ['point', 'line'] },\n { key: 'parallel', label: 'Đường song song', hint: 'Click 1 điểm + 1 đường có sẵn', icon: Icon.parallel, group: 'construct', needs: 2, accepts: ['point', 'line'] },\n { key: 'perpBisector', label: 'Đường trung trực', hint: 'Click 2 điểm có sẵn', icon: Icon.perpBisector, group: 'construct', needs: 2, accepts: ['point', 'point'] },\n { key: 'angleBisector', label: 'Đường phân giác', hint: 'Click 3 điểm (đỉnh ở giữa) hoặc 2 đường/đoạn (sẽ tạo 2 tia phân giác)', icon: Icon.bisector, group: 'construct', needs: 3, accepts: ['pointOrLine', 'pointOrLine', 'pointOrLine'] },\n { key: 'polygon', label: 'Đa giác', hint: 'Click các điểm, click lại điểm đầu để đóng', icon: Icon.polygon, group: 'polygon', needs: -1 },\n { key: 'regularPolygon', label: 'Đa giác đều', hint: 'Click 2 điểm rồi nhập số cạnh', icon: Icon.regularPolygon, group: 'polygon', needs: 2, accepts: ['point', 'point'] },\n { key: 'circleCenter', label: 'Đường tròn (tâm + điểm)', hint: 'Click tâm rồi 1 điểm trên đường tròn', icon: Icon.circleCenter, group: 'circle', needs: 2 },\n { key: 'semicircle', label: 'Nửa đường tròn (đường kính)', hint: 'Click 2 điểm — bán nguyệt qua đường kính', icon: Icon.semicircle, group: 'circle', needs: 2 },\n { key: 'arcCenter', label: 'Cung tròn (tâm + 2 điểm)', hint: 'Click tâm O → A → B (cung từ A đến B)', icon: Icon.arcCenter, group: 'circle', needs: 3 },\n { key: 'arc3', label: 'Cung tròn qua 3 điểm', hint: 'Click 3 điểm trên cung', icon: Icon.arc3, group: 'circle', needs: 3 },\n { key: 'sectorCenter', label: 'Hình quạt (tâm + 2 điểm)', hint: 'Click tâm O → A → B (quạt OAB)', icon: Icon.sectorCenter, group: 'circle', needs: 3 },\n { key: 'circle3', label: 'Đường tròn qua 3 điểm', hint: 'Click 3 điểm', icon: Icon.circle3, group: 'circle', needs: 3 },\n { key: 'tangent', label: 'Tiếp tuyến', hint: 'Click 1 điểm + 1 đường tròn có sẵn', icon: Icon.tangent, group: 'circle', needs: 2, accepts: ['point', 'circle'] },\n { key: 'centroid', label: 'Trọng tâm tam giác', hint: 'Click 3 đỉnh tam giác', icon: Icon.centroid, group: 'triangle', needs: 3, accepts: ['point', 'point', 'point'] },\n { key: 'circumcenter', label: 'Tâm đường tròn ngoại tiếp', hint: 'Click 3 đỉnh tam giác', icon: Icon.circumcenter, group: 'triangle', needs: 3, accepts: ['point', 'point', 'point'] },\n { key: 'incenter', label: 'Tâm đường tròn nội tiếp', hint: 'Click 3 đỉnh tam giác', icon: Icon.incenter, group: 'triangle', needs: 3, accepts: ['point', 'point', 'point'] },\n { key: 'orthocenter', label: 'Trực tâm tam giác', hint: 'Click 3 đỉnh tam giác', icon: Icon.orthocenter, group: 'triangle', needs: 3, accepts: ['point', 'point', 'point'] },\n { key: 'angle', label: 'Góc', hint: 'Click 3 điểm có sẵn (đỉnh ở giữa)', icon: Icon.angle, group: 'measure', needs: 3, accepts: ['point', 'point', 'point'] },\n { key: 'distance', label: 'Khoảng cách', hint: 'Click 2 điểm có sẵn', icon: Icon.distance, group: 'measure', needs: 2, accepts: ['point', 'point'] },\n { key: 'area', label: 'Diện tích', hint: 'Click các đỉnh, click lại điểm đầu để đóng', icon: Icon.area, group: 'measure', needs: -1 },\n { key: 'toggleLabel', label: 'Hiện/ẩn tên', hint: 'Click vào đối tượng', icon: Icon.toggleLabel, group: 'edit', needs: 1, accepts: ['any'] },\n { key: 'toggleVisible', label: 'Hiện/ẩn đối tượng', hint: 'Click vào đối tượng', icon: Icon.toggleVisible, group: 'edit', needs: 1, accepts: ['any'] },\n { key: 'delete', label: 'Xoá', hint: 'Click vào đối tượng', icon: Icon.trash, group: 'edit', needs: 1, accepts: ['any'] },\n { key: 'translate', label: 'Phép tịnh tiến', hint: 'Click object → 2 điểm tạo vector', icon: Icon.translate, group: 'transform', needs: 3, accepts: ['any', 'point', 'point'] },\n { key: 'rotate', label: 'Quay đối tượng', hint: 'Click object → tâm quay → nhập góc', icon: Icon.rotate, group: 'transform', needs: 2, accepts: ['any', 'point'] },\n { key: 'reflectLine', label: 'Đối xứng qua đường thẳng', hint: 'Click object → đường thẳng', icon: Icon.reflectLine, group: 'transform', needs: 2, accepts: ['any', 'line'] },\n { key: 'reflectPoint', label: 'Đối xứng qua điểm', hint: 'Click object → tâm đối xứng', icon: Icon.reflectPoint, group: 'transform', needs: 2, accepts: ['any', 'point'] },\n { key: 'dilate', label: 'Phép vị tự', hint: 'Click object → tâm → nhập tỷ số k', icon: Icon.dilate, group: 'transform', needs: 2, accepts: ['any', 'point'] },\n // ===== Hình đặc biệt (parametric construction) =====\n { key: 'square', label: 'Hình vuông', hint: 'Click 2 điểm — cạnh đầu (3 đỉnh còn lại tự suy, vuông góc + bằng cạnh)',\n icon: Icon.square, group: 'special', needs: 2, accepts: ['point', 'point'] },\n { key: 'rectangle', label: 'Hình chữ nhật', hint: 'Click 2 điểm đáy + 1 điểm chiều cao (auto vuông góc tại đỉnh 2)',\n icon: Icon.rectangle, group: 'special', needs: 3, accepts: ['point', 'point', 'point'] },\n { key: 'rhombus', label: 'Hình thoi', hint: 'Click 2 điểm cạnh + 1 điểm hướng (auto bằng độ dài cạnh)',\n icon: Icon.rhombus, group: 'special', needs: 3, accepts: ['point', 'point', 'point'] },\n { key: 'parallelogram', label: 'Hình bình hành', hint: 'Click 3 điểm liên tiếp (đỉnh 4 tự suy)',\n icon: Icon.parallelogram, group: 'special', needs: 3, accepts: ['point', 'point', 'point'] },\n { key: 'isoTrapezoid', label: 'Hình thang cân', hint: 'Click 2 điểm đáy lớn + 1 đỉnh trên (đỉnh 4 phản chiếu qua trung trực)',\n icon: Icon.isoTrapezoid, group: 'special', needs: 3, accepts: ['point', 'point', 'point'] },\n { key: 'isoTriangle', label: 'Tam giác cân', hint: 'Click 2 điểm đáy + 1 đỉnh (auto trên trung trực)',\n icon: Icon.isoTriangle, group: 'special', needs: 3, accepts: ['point', 'point', 'point'] },\n { key: 'rightTriangle', label: 'Tam giác vuông', hint: 'Click đỉnh vuông + 2 đầu cạnh (cạnh 2 auto vuông góc)',\n icon: Icon.rightTriangle, group: 'special', needs: 3, accepts: ['point', 'point', 'point'] },\n // ===== Điểm / đường tròn thông dụng (kind chưa có icon trước v0.27) =====\n { key: 'pointOn', label: 'Điểm trên đối tượng', hint: 'Click 1 đường/đoạn/đường tròn có sẵn', icon: Icon.pointOn, group: 'point', needs: 1, accepts: ['lineOrCircle'] },\n { key: 'circleCR', label: 'Đường tròn (tâm + bán kính)', hint: 'Click tâm rồi nhập bán kính', icon: Icon.circleCR, group: 'circle', needs: 1, accepts: ['point'] },\n { key: 'incircle', label: 'Đường tròn nội tiếp', hint: 'Click 3 đỉnh tam giác', icon: Icon.incircle, group: 'circle', needs: 3, accepts: ['point', 'point', 'point'] },\n // ===== Nâng cao =====\n { key: 'excenter', label: 'Tâm đường tròn bàng tiếp', hint: 'Click 3 đỉnh tam giác (đỉnh đầu = đỉnh đối diện)', icon: Icon.excenter, group: 'advanced', needs: 3, accepts: ['point', 'point', 'point'] },\n { key: 'excircle', label: 'Đường tròn bàng tiếp', hint: 'Click 3 đỉnh tam giác (đỉnh đầu = đỉnh đối diện)', icon: Icon.excircle, group: 'advanced', needs: 3, accepts: ['point', 'point', 'point'] },\n { key: 'tangencyPoint', label: 'Tiếp điểm (đường tiếp xúc)', hint: 'Click 1 đường tròn + 1 tiếp tuyến có sẵn', icon: Icon.tangencyPoint, group: 'advanced', needs: 2, accepts: ['circle', 'line'] },\n { key: 'secondIntersection', label: 'Giao điểm thứ hai', hint: 'Click 1 đường + 1 đường tròn + giao điểm đã biết', icon: Icon.secondIntersection, group: 'advanced', needs: 3, accepts: ['line', 'circle', 'point'] },\n { key: 'arcMidpoint', label: 'Điểm giữa cung', hint: 'Click đường tròn → 2 đầu cung A,B → 1 điểm phía cung KHÔNG chứa', icon: Icon.arcMidpoint, group: 'advanced', needs: 4, accepts: ['circle', 'point', 'point', 'point'] },\n { key: 'circleIntersection', label: 'Giao 2 đường tròn', hint: 'Click 2 đường tròn (tạo cả 2 giao điểm)', icon: Icon.circleIntersection, group: 'advanced', needs: 2, accepts: ['circle', 'circle'] },\n { key: 'tangentPointExt', label: 'Tiếp điểm từ điểm ngoài', hint: 'Click 1 điểm ngoài + 1 đường tròn (tạo cả 2 tiếp điểm)', icon: Icon.tangentPointExt, group: 'advanced', needs: 2, accepts: ['point', 'circle'] },\n];\n\nexport const GROUP_LABELS: Record<ToolDef['group'], string> = {\n move: 'Cơ bản',\n point: 'Điểm',\n line: 'Đường',\n construct: 'Dựng hình',\n polygon: 'Đa giác',\n circle: 'Đường tròn',\n triangle: 'Tam giác',\n measure: 'Đo lường',\n edit: 'Chỉnh sửa',\n transform: 'Phép biến hình',\n special: 'Hình đặc biệt',\n advanced: 'Nâng cao',\n};\n\nexport type GeomGroup = ToolDef['group'];\n\n// Positional A..I — letter shortcut cho chord 2-phím.\n// Khớp đúng thứ tự hiển thị trong LeftPanel (derive từ TOOLS phía trên).\nexport const GROUP_ORDER: GeomGroup[] = [\n 'move',\n 'point',\n 'line',\n 'construct',\n 'polygon',\n 'circle',\n 'triangle',\n 'measure',\n 'edit',\n 'transform',\n 'special',\n 'advanced',\n];\n\nconst A_CODE = 'A'.charCodeAt(0);\n\nexport function letterForGroup(g: GeomGroup): string {\n const idx = GROUP_ORDER.indexOf(g);\n return idx >= 0 ? String.fromCharCode(A_CODE + idx) : '';\n}\n\nexport function groupForLetter(ch: string): GeomGroup | null {\n if (ch.length !== 1) return null;\n const upper = ch.toUpperCase();\n const idx = upper.charCodeAt(0) - A_CODE;\n if (idx < 0 || idx >= GROUP_ORDER.length) return null;\n return GROUP_ORDER[idx];\n}\n\n// ============== Object-type matching ==============\n\n \ntype JxgObj = any;\n\n/** Phân loại JSXGraph element type vào nhóm dùng cho accept-matching.\n *\n * Ưu tiên `elementClass` (numeric constant do JSXGraph set đúng cho mọi derived\n * element — intersection, reflection, glider, parallelpoint, mirrorpoint, ...\n * đều trả về OBJECT_CLASS_POINT). Nếu không có (test mocks), fallback sang\n * `elType` string với danh sách mở rộng các kiểu thường gặp.\n *\n * Constants từ JSXGraph: OBJECT_CLASS_POINT=1, OBJECT_CLASS_LINE=2, OBJECT_CLASS_CIRCLE=3.\n */\nexport function objKind(obj: JxgObj): 'point' | 'line' | 'circle' | 'other' {\n if (!obj) return 'other';\n const ec = typeof obj.elementClass === 'number' ? obj.elementClass : null;\n if (ec === 1) return 'point';\n if (ec === 2) return 'line';\n if (ec === 3) return 'circle';\n const e = (obj.elType || obj.type || '').toString().toLowerCase();\n if (\n e === 'point' || e === 'glider' || e === 'midpoint' ||\n e === 'intersection' || e === 'otherintersection' ||\n e === 'reflection' || e === 'mirrorpoint' || e === 'mirrorelement' ||\n e === 'orthogonalprojection' || e === 'parallelpoint'\n ) return 'point';\n if (\n e === 'line' || e === 'segment' || e === 'arrow' || e === 'axis' ||\n e === 'normal' || e === 'parallel' || e === 'perpendicular' ||\n e === 'tangent' || e === 'bisector' || e === 'perpendicularsegment'\n ) return 'line';\n if (e === 'circle' || e === 'circumcircle') return 'circle';\n return 'other';\n}\n\nexport function acceptMatches(\n tool: ToolDef,\n slot: number,\n kind: 'point' | 'line' | 'circle' | 'other',\n): boolean {\n if (!tool.accepts) return kind === 'point' || tool.key === 'point';\n const a = tool.accepts[slot];\n if (!a) return false;\n if (a === 'any') return kind !== 'other';\n if (a === 'lineOrCircle') return kind === 'line' || kind === 'circle';\n if (a === 'pointOrLine') return kind === 'point' || kind === 'line';\n return a === kind;\n}\n","import { objKind } from '../../tools';\nimport type { HandlerCtx } from '../ctx';\n\n \nexport function handleMoveTool(ctx: HandlerCtx, e: any): void {\n const sc = ctx.screenCoordsOf(e);\n if (!sc) return;\n const [sx, sy] = sc;\n ctx.moveDownRef.current = { sx, sy };\n const cx = (e.clientX ?? e.touches?.[0]?.clientX ?? 0) as number;\n const cy = (e.clientY ?? e.touches?.[0]?.clientY ?? 0) as number;\n ctx.lastClickClientRef.current = { x: cx, y: cy };\n\n // Click-select trong move tool (chế độ cơ bản): cho phép chọn 1 / shift-add\n // mà không cần switch sang tool 'select'. Hành vi drag điểm + pan nền của\n // JSXGraph vẫn nguyên (selection chỉ là side-effect, không stopPropagation).\n const hits = ctx.objectsAt(e)\n .map(ctx.promoteLabel)\n .filter((o) => o !== ctx.axisObjsRef.current.x && o !== ctx.axisObjsRef.current.y)\n .filter((o) => ctx.jxgIdToSceneId(o) != null);\n const obj = hits.find((o) => objKind(o) === 'point') ?? ctx.findNearestPointJxg(e, 12) ?? hits[0];\n if (obj) {\n const sid = ctx.jxgIdToSceneId(obj);\n if (sid) {\n const shift = !!(e.shiftKey || e.altKey);\n ctx.toggleSelect(sid, shift);\n }\n return;\n }\n // Empty space + không additive: clear selection (popover sẽ tự đóng qua\n // selectionTick effect ở MiniBoard).\n if (!(e.shiftKey || e.altKey)) ctx.clearSelection();\n}\n","import { objKind } from '../../tools';\nimport type { HandlerCtx } from '../ctx';\n\n \nexport function handleSelectTool(ctx: HandlerCtx, e: any): void {\n const sc = ctx.screenCoordsOf(e);\n if (!sc) return;\n const [sx, sy] = sc;\n const cx = (e.clientX ?? e.touches?.[0]?.clientX ?? 0) as number;\n const cy = (e.clientY ?? e.touches?.[0]?.clientY ?? 0) as number;\n ctx.lastClickClientRef.current = { x: cx, y: cy };\n const hits = ctx.objectsAt(e)\n .map(ctx.promoteLabel)\n .filter((o) => o !== ctx.axisObjsRef.current.x && o !== ctx.axisObjsRef.current.y)\n .filter((o) => ctx.jxgIdToSceneId(o) != null);\n // Ưu tiên điểm: exact hit → nearest-within-12px → mới đến hit khác (line/circle).\n const obj = hits.find((o) => objKind(o) === 'point') ?? ctx.findNearestPointJxg(e, 12) ?? hits[0];\n if (obj) {\n const sid = ctx.jxgIdToSceneId(obj);\n if (sid) {\n const shift = !!(e.shiftKey || e.altKey);\n ctx.toggleSelect(sid, shift);\n }\n ctx.moveDownRef.current = { sx, sy };\n ctx.marqueeRef.current = null;\n return;\n }\n // Empty space: start marquee.\n ctx.marqueeRef.current = { startSx: sx, startSy: sy };\n if (!(e.shiftKey || e.altKey)) ctx.clearSelection();\n}\n","const isDev = (() => {\n try {\n return typeof process !== 'undefined' && process.env?.NODE_ENV !== 'production';\n } catch {\n return false;\n }\n})();\n\n/**\n * Wrap JSXGraph operations that can throw on stale/missing state.\n * In dev mode: log to console. In prod: silent swallow + return fallback.\n *\n * @param label Short tag for grep-ability (vd \"removeObject\", \"board.update\").\n * @param fn Operation to execute.\n * @param fallback Value to return if fn throws (default: undefined).\n */\nexport function safeJsx<T>(label: string, fn: () => T): T | undefined;\nexport function safeJsx<T>(label: string, fn: () => T, fallback: T): T;\nexport function safeJsx<T>(label: string, fn: () => T, fallback?: T): T | undefined {\n try {\n return fn();\n } catch (err) {\n if (isDev) {\n \n console.warn('[whiteboard:jsxgraph]', label, err);\n }\n return fallback;\n }\n}\n","import type { HandlerCtx } from './ctx';\n\nexport type SceneObj = {\n id: string;\n kind: string;\n label: string;\n visible: boolean;\n locked: boolean;\n layer: string;\n schemaVersion: number;\n attrs: Record<string, unknown>;\n};\n\nexport function freshId(ctx: HandlerCtx, prefix: string): string {\n const counter = ctx.store.getState().counter;\n // Loop until unique (counter is monotonic but ids may have been deleted/reused\n // in non-trivial scenarios; safer to probe).\n let n = counter + 1;\n let id = `${prefix}_${n}`;\n const objs = ctx.store.getState().objects;\n while (id in objs) {\n n += 1;\n id = `${prefix}_${n}`;\n }\n return id;\n}\n\nexport function mkSceneObj(\n id: string,\n kind: string,\n label: string,\n attrs: Record<string, unknown>,\n): SceneObj {\n return {\n id,\n kind,\n label,\n visible: true,\n locked: false,\n layer: 'default',\n schemaVersion: 1,\n attrs,\n };\n}\n\n/** Tạo point free + dispatch ADD; trả về scene id mới. */\nexport function dispatchAddFreePoint(ctx: HandlerCtx, x: number, y: number): string {\n const id = freshId(ctx, 'p');\n const label = ctx.nextLabel('point');\n const obj = mkSceneObj(id, 'point', label, { constraint: { kind: 'free', x, y } });\n ctx.store.dispatch({ type: 'ADD', payload: { obj } });\n return id;\n}\n\n/** Tạo intersection point + dispatch ADD; trả về scene id mới. */\nexport function dispatchAddIntersection(\n ctx: HandlerCtx,\n attrs: Record<string, unknown>,\n): string {\n const id = freshId(ctx, 'X');\n const label = ctx.nextLabel('intersection');\n const obj = mkSceneObj(id, 'intersection', label, attrs);\n ctx.store.dispatch({ type: 'ADD', payload: { obj } });\n return id;\n}\n","import { objKind } from '../../tools';\nimport { safeJsx } from '../../../../shared/safeJsx';\nimport type { HandlerCtx } from '../ctx';\nimport { dispatchAddFreePoint, dispatchAddIntersection } from '../utils';\n\n \ntype JxgObj = any;\n\nexport function handlePointTool(\n ctx: HandlerCtx,\n \n _e: any,\n x: number,\n y: number,\n hits: JxgObj[],\n): void {\n const curves = hits.filter((o) => objKind(o) === 'line' || objKind(o) === 'circle');\n if (curves.length >= 2) {\n const a = curves[0];\n const b = curves[1];\n const aId = ctx.jxgIdToSceneId(a);\n const bId = ctx.jxgIdToSceneId(b);\n if (aId && bId) {\n try {\n const aKind = objKind(a);\n const bKind = objKind(b);\n if (aKind === 'line' && bKind === 'line') {\n dispatchAddIntersection(ctx, { kind: 'lineLine', ref1: aId, ref2: bId });\n return;\n }\n // line-circle / circle-circle: pick branch nearest click.\n const tmp0 = ctx.boardRef.current.create('intersection', [a, b, 0], { visible: false, withLabel: false });\n const tmp1 = ctx.boardRef.current.create('intersection', [a, b, 1], { visible: false, withLabel: false });\n const d0 = Math.hypot((tmp0.X?.() ?? 0) - x, (tmp0.Y?.() ?? 0) - y);\n const d1 = Math.hypot((tmp1.X?.() ?? 0) - x, (tmp1.Y?.() ?? 0) - y);\n safeJsx('handlers.removeObject(intersect.tmp0)', () => ctx.boardRef.current.removeObject(tmp0));\n safeJsx('handlers.removeObject(intersect.tmp1)', () => ctx.boardRef.current.removeObject(tmp1));\n const branch: 0 | 1 = d0 <= d1 ? 0 : 1;\n const isLineCircle = (aKind === 'line' && bKind === 'circle') || (aKind === 'circle' && bKind === 'line');\n if (isLineCircle) {\n dispatchAddIntersection(ctx, { kind: 'lineCircle', ref1: aId, ref2: bId, branch });\n } else {\n dispatchAddIntersection(ctx, { kind: 'circleCircle', ref1: aId, ref2: bId, branch });\n }\n return;\n } catch {\n // fallback: tạo điểm tự do\n }\n }\n }\n dispatchAddFreePoint(ctx, x, y);\n}\n","import type { ToolDef, GeomTool } from '../../tools';\nimport type { HandlerCtx } from '../ctx';\n\n \ntype JxgObj = any;\n\nexport function handleSingleTargetTool(\n ctx: HandlerCtx,\n t: GeomTool,\n toolDef: ToolDef,\n \n e: any,\n bestHit: JxgObj | null,\n): boolean {\n if (!(toolDef.needs === 1 && toolDef.accepts)) return false;\n const hit = bestHit ?? ctx.findNearestPointJxg(e, 12);\n if (!hit) {\n ctx.flashWarn('Click vào một đối tượng để áp dụng');\n return true;\n }\n const sid = ctx.jxgIdToSceneId(hit);\n if (!sid) return true;\n if (t === 'delete') {\n ctx.store.dispatch({ type: 'DELETE', payload: { id: sid } });\n return true;\n }\n if (t === 'toggleLabel') {\n const obj = ctx.store.getState().objects[sid];\n if (!obj) return true;\n const cur = (obj.attrs as { showLabel?: boolean }).showLabel;\n const next = !(cur ?? false);\n ctx.store.dispatch({ type: 'UPDATE_ATTRS', payload: { id: sid, patch: { showLabel: next } } });\n return true;\n }\n if (t === 'toggleVisible') {\n const obj = ctx.store.getState().objects[sid];\n if (!obj) return true;\n ctx.store.dispatch({ type: 'UPDATE', payload: { id: sid, patch: { visible: !obj.visible } } });\n return true;\n }\n return true;\n}\n","import { objKind } from '../../tools';\nimport { safeJsx } from '../../../../shared/safeJsx';\nimport type { GeomTool, ToolDef } from '../../tools';\nimport type { HandlerCtx } from '../ctx';\nimport { dispatchAddFreePoint, freshId, mkSceneObj } from '../utils';\n\n \ntype JxgObj = any;\n\nexport function handlePolygonTool(\n ctx: HandlerCtx,\n t: GeomTool,\n toolDef: ToolDef,\n \n e: any,\n x: number,\n y: number,\n bestHit: JxgObj | null,\n): boolean {\n if (toolDef.needs !== -1) return false;\n const snappedPoint: JxgObj | null =\n bestHit && objKind(bestHit) === 'point' ? bestHit : ctx.findNearestPointJxg(e, 12);\n const snappedId = snappedPoint ? ctx.jxgIdToSceneId(snappedPoint) : null;\n // Close ring: click back on first pending point.\n if (\n ctx.pendingIdsRef.current.length >= 3 &&\n snappedId &&\n snappedId === ctx.pendingIdsRef.current[0]\n ) {\n ctx.clearPreviewSegs();\n const vertices = ctx.pendingIdsRef.current.slice();\n const isArea = t === 'area';\n const id = freshId(ctx, isArea ? 'area' : 'poly');\n const label = ctx.nextLabel('polygon');\n // Tool 'area' = polygon + showValue + fill phân biệt visual với polygon\n // thường. JSXGraph polygon.Area() live-update khi đỉnh di chuyển.\n const attrs: Record<string, unknown> = { vertices };\n if (isArea) {\n attrs.showValue = true;\n attrs.fillOpacity = 0.18;\n attrs.color = '#1d4ed8';\n }\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'polygon', label, attrs) },\n });\n ctx.clearPending();\n return true;\n }\n if (snappedId && ctx.pendingIdsRef.current.includes(snappedId)) {\n ctx.flashWarn('Đỉnh này đã có — click điểm khác hoặc click lại điểm đầu để đóng');\n return true;\n }\n // Otherwise pick (snap-to-existing or create) a new vertex.\n let pickId: string | null = snappedId;\n let pickJxg: JxgObj | null = snappedPoint;\n if (!pickId) {\n pickId = dispatchAddFreePoint(ctx, x, y);\n pickJxg = ctx.jxgFromSceneId(pickId);\n }\n // Live preview segment from previous vertex to new pick.\n if (ctx.pendingRef.current.length > 0 && ctx.boardRef.current && pickJxg) {\n const prev = ctx.pendingRef.current[ctx.pendingRef.current.length - 1];\n safeJsx('handlers.createPreviewSegment', () => {\n const seg = ctx.boardRef.current.create('segment', [prev, pickJxg], {\n strokeColor: '#3b82f6',\n strokeWidth: 1.5,\n strokeOpacity: 0.75,\n fixed: true,\n highlight: false,\n withLabel: false,\n });\n ctx.previewSegRef.current.push(seg);\n });\n }\n if (pickJxg) ctx.pendingRef.current.push(pickJxg);\n if (pickId) ctx.pendingIdsRef.current.push(pickId);\n ctx.setPendingCount(ctx.pendingIdsRef.current.length);\n return true;\n}\n"," \ntype JxgObj = any;\n\nexport type PointVsCircle = 'inside' | 'on' | 'outside';\n\n/**\n * Classify a JXG point's position relative to a JXG circle.\n *\n * Uses a relative epsilon (max(1e-9, 1e-6 * r)) for the on-circle check so\n * that user-snapped points (which may carry tiny floating-point error)\n * register as on the circle rather than just inside/outside.\n *\n * Defensive: if either argument is null/undefined, returns 'inside' so the\n * caller will refuse to draw rather than risk a wrong tangent.\n */\nexport function classifyPointVsCircle(point: JxgObj, circle: JxgObj): PointVsCircle {\n if (!point || !circle || !circle.center) return 'inside';\n const dx = point.X() - circle.center.X();\n const dy = point.Y() - circle.center.Y();\n const d = Math.hypot(dx, dy);\n const r = typeof circle.Radius === 'function' ? circle.Radius() : Number(circle.radius);\n if (!Number.isFinite(d) || !Number.isFinite(r)) return 'inside';\n const eps = Math.max(1e-9, 1e-6 * r);\n if (Math.abs(d - r) <= eps) return 'on';\n return d < r ? 'inside' : 'outside';\n}\n","// finalize/shared.ts\nimport { objKind } from '../../tools';\nimport type { HandlerCtx } from '../ctx';\n\n/**\n * Tìm scene id của pending pick theo `objKind`. Dùng cho tool order-flexible\n * (perpendicular, parallel, tangent): user có thể click điểm trước hay đường\n * trước, finalizeShape dò pendingRef theo kind để biết role.\n */\nexport function findPickIdByKind(ctx: HandlerCtx, kind: 'point' | 'line' | 'circle'): string | null {\n const picks = ctx.pendingRef.current;\n const ids = ctx.pendingIdsRef.current;\n for (let i = 0; i < picks.length; i += 1) {\n if (objKind(picks[i]) === kind && ids[i]) return ids[i];\n }\n return null;\n}\n\n// ─── Helpers cho special-shape constraint promotion ─────────────────────────\n\nexport type Vec = { x: number; y: number };\n\nexport function readJxgPos(ctx: HandlerCtx, id: string): Vec {\n\n const j = ctx.jxgFromSceneId(id) as any;\n if (!j || typeof j.X !== 'function') return { x: 0, y: 0 };\n return { x: j.X(), y: j.Y() };\n}\n\n/** Signed scalar offset của P từ T dọc theo perp(A→B) chuẩn hoá. */\nexport function computePerpendicularT(P: Vec, T: Vec, A: Vec, B: Vec): number {\n const dx = B.x - A.x, dy = B.y - A.y;\n const len = Math.hypot(dx, dy);\n if (len < 1e-12) return 0;\n const ux = -dy / len, uy = dx / len;\n return (P.x - T.x) * ux + (P.y - T.y) * uy;\n}\n\n/** Signed scalar offset của P từ midpoint(A,B) dọc theo perp(A→B) chuẩn hoá. */\nexport function computePerpBisectorT(P: Vec, A: Vec, B: Vec): number {\n const Mx = (A.x + B.x) / 2, My = (A.y + B.y) / 2;\n const dx = B.x - A.x, dy = B.y - A.y;\n const len = Math.hypot(dx, dy);\n if (len < 1e-12) return 0;\n const ux = -dy / len, uy = dx / len;\n return (P.x - Mx) * ux + (P.y - My) * uy;\n}\n\nexport function computeCircleTheta(P: Vec, C: Vec): number {\n return Math.atan2(P.y - C.y, P.x - C.x);\n}\n","import type { GeometryToolModule } from './_types';\nimport type { HandlerCtx } from '../ctx';\nimport { objKind } from '../../tools';\nimport { freshId, mkSceneObj } from '../utils';\nimport { classifyPointVsCircle } from '../classifyPointVsCircle';\nimport { findPickIdByKind } from './shared';\n\nexport const segmentTool: GeometryToolModule = {\n key: 'segment',\n finalize(ctx) {\n const ids = ctx.pendingIdsRef.current;\n const id = freshId(ctx, 's');\n const label = ctx.nextLabel('segment');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'segment', label, { p1: ids[0], p2: ids[1] }) },\n });\n },\n};\n\nexport const lineTool: GeometryToolModule = {\n key: 'line',\n finalize(ctx) {\n const ids = ctx.pendingIdsRef.current;\n const id = freshId(ctx, 'l');\n const label = ctx.nextLabel('line');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'line', label, { p1: ids[0], p2: ids[1] }) },\n });\n },\n};\n\n/** Shared body cho perpendicular & parallel (order-flexible point+line). */\nfunction finalizePerpParallel(ctx: HandlerCtx, key: 'perpendicular' | 'parallel'): void {\n const throughPoint = findPickIdByKind(ctx, 'point');\n const toLine = findPickIdByKind(ctx, 'line');\n if (!throughPoint || !toLine) return;\n const id = freshId(ctx, key === 'perpendicular' ? 'perp' : 'par');\n const label = ctx.nextLabel('line');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'line', label, {\n construction: { kind: key, throughPoint, toLine },\n }) },\n });\n}\n\nexport const perpendicularTool: GeometryToolModule = {\n key: 'perpendicular',\n finalize(ctx) {\n finalizePerpParallel(ctx, 'perpendicular');\n },\n};\n\nexport const parallelTool: GeometryToolModule = {\n key: 'parallel',\n finalize(ctx) {\n finalizePerpParallel(ctx, 'parallel');\n },\n};\n\nexport const perpBisectorTool: GeometryToolModule = {\n key: 'perpBisector',\n finalize(ctx) {\n const ids = ctx.pendingIdsRef.current;\n const id = freshId(ctx, 'pb');\n const label = ctx.nextLabel('line');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'line', label, {\n construction: { kind: 'perpBisector', p1: ids[0], p2: ids[1] },\n }) },\n });\n },\n};\n\nexport const angleBisectorTool: GeometryToolModule = {\n key: 'angleBisector',\n finalize(ctx) {\n const ids = ctx.pendingIdsRef.current;\n const picks = ctx.pendingRef.current;\n // Mode 2-line: 2 picks đều là line/segment → tạo 2 scene line (2 tia\n // phân giác vuông góc với nhau qua giao điểm 2 đường).\n if (picks.length === 2 && objKind(picks[0]) === 'line' && objKind(picks[1]) === 'line') {\n for (const branch of [0, 1] as const) {\n const id = freshId(ctx, 'ab');\n const label = ctx.nextLabel('line');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'line', label, {\n construction: { kind: 'angleBisectorLines', line1: ids[0], line2: ids[1], branch },\n }) },\n });\n }\n return;\n }\n // Mode 3-point: behavior cũ.\n const id = freshId(ctx, 'ab');\n const label = ctx.nextLabel('line');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'line', label, {\n construction: { kind: 'angleBisector', p1: ids[0], vertex: ids[1], p2: ids[2] },\n }) },\n });\n },\n};\n\nexport const tangentTool: GeometryToolModule = {\n key: 'tangent',\n finalize(ctx) {\n const throughId = findPickIdByKind(ctx, 'point');\n const circleId = findPickIdByKind(ctx, 'circle');\n if (!throughId || !circleId) return;\n // Lấy JXG object tương ứng để classify vị trí P vs đường tròn.\n // pendingRef + pendingIdsRef cùng index → match qua indexOf id.\n const picks = ctx.pendingRef.current;\n const ids = ctx.pendingIdsRef.current;\n const through = picks[ids.indexOf(throughId)];\n const circle = picks[ids.indexOf(circleId)];\n const pos = classifyPointVsCircle(through, circle);\n if (pos === 'inside') {\n ctx.toast?.('Điểm nằm trong đường tròn — không có tiếp tuyến', {\n variant: 'warning',\n id: 'tangent-invalid-inside',\n });\n return;\n }\n if (pos === 'on') {\n const id = freshId(ctx, 't');\n const label = ctx.nextLabel('line');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'line', label, {\n construction: { kind: 'tangent', throughPoint: throughId, toCircle: circleId, branch: 'on' },\n }) },\n });\n return;\n }\n // outside → 2 scene element riêng, mỗi cái 1 nhánh tiếp tuyến.\n for (const branch of [0, 1] as const) {\n const id = freshId(ctx, 't');\n const label = ctx.nextLabel('line');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'line', label, {\n construction: { kind: 'tangent', throughPoint: throughId, toCircle: circleId, branch },\n }) },\n });\n }\n },\n};\n\nexport const rayTool: GeometryToolModule = {\n key: 'ray',\n finalize(ctx) {\n const ids = ctx.pendingIdsRef.current;\n const id = freshId(ctx, 'r');\n const label = ctx.nextLabel('ray');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'ray', label, { origin: ids[0], through: ids[1] }) },\n });\n },\n};\n\nexport const vectorTool: GeometryToolModule = {\n key: 'vector',\n finalize(ctx) {\n const ids = ctx.pendingIdsRef.current;\n const id = freshId(ctx, 'v');\n const label = ctx.nextLabel('vector');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'vector', label, { from: ids[0], to: ids[1] }) },\n });\n },\n};\n","import type { GeometryToolModule } from './_types';\nimport { freshId, mkSceneObj } from '../utils';\n\nexport const circleCenterTool: GeometryToolModule = {\n key: 'circleCenter',\n finalize(ctx) {\n const ids = ctx.pendingIdsRef.current;\n const id = freshId(ctx, 'c');\n const label = ctx.nextLabel('circle');\n ctx.store.dispatch({\n type: 'ADD',\n payload: {\n obj: mkSceneObj(id, 'circle', label, {\n center: ids[0],\n surfacePoint: ids[1],\n }),\n },\n });\n },\n};\n\nexport const circle3Tool: GeometryToolModule = {\n key: 'circle3',\n finalize(ctx) {\n const ids = ctx.pendingIdsRef.current;\n const id = freshId(ctx, 'cc');\n const label = ctx.nextLabel('circle');\n ctx.store.dispatch({\n type: 'ADD',\n payload: {\n obj: mkSceneObj(id, 'circle', label, {\n construction: { kind: 'circumscribed', p1: ids[0], p2: ids[1], p3: ids[2] },\n }),\n },\n });\n },\n};\n\nexport const semicircleTool: GeometryToolModule = {\n key: 'semicircle',\n finalize(ctx) {\n const ids = ctx.pendingIdsRef.current;\n if (ids[0] === ids[1]) {\n ctx.toast?.('Cần 2 điểm phân biệt', { variant: 'warning', id: 'semicircle-dup' });\n return;\n }\n const id = freshId(ctx, 'arc');\n const label = ctx.nextLabel('arc');\n ctx.store.dispatch({\n type: 'ADD',\n payload: {\n obj: mkSceneObj(id, 'arc', label, {\n construction: { kind: 'semicircle', p1: ids[0], p2: ids[1] },\n }),\n },\n });\n },\n};\n\nexport const arcCenterTool: GeometryToolModule = {\n key: 'arcCenter',\n finalize(ctx) {\n const ids = ctx.pendingIdsRef.current;\n if (ids[0] === ids[1] || ids[0] === ids[2] || ids[1] === ids[2]) {\n ctx.toast?.('Cần 3 điểm phân biệt', { variant: 'warning', id: 'arc-center-dup' });\n return;\n }\n const id = freshId(ctx, 'arc');\n const label = ctx.nextLabel('arc');\n ctx.store.dispatch({\n type: 'ADD',\n payload: {\n obj: mkSceneObj(id, 'arc', label, {\n construction: { kind: 'byCenter', center: ids[0], p1: ids[1], p2: ids[2] },\n }),\n },\n });\n },\n};\n\nexport const arc3Tool: GeometryToolModule = {\n key: 'arc3',\n finalize(ctx) {\n const ids = ctx.pendingIdsRef.current;\n if (ids[0] === ids[1] || ids[0] === ids[2] || ids[1] === ids[2]) {\n ctx.toast?.('Cần 3 điểm phân biệt', { variant: 'warning', id: 'arc3-dup' });\n return;\n }\n const picks = ctx.pendingRef.current;\n const ax = picks[0].X(), ay = picks[0].Y();\n const bx = picks[1].X(), by = picks[1].Y();\n const cx = picks[2].X(), cy = picks[2].Y();\n const cross = (bx - ax) * (cy - ay) - (by - ay) * (cx - ax);\n if (Math.abs(cross) < 1e-6) {\n ctx.toast?.('Không vẽ được cung qua 3 điểm thẳng hàng', {\n variant: 'warning', id: 'arc3-collinear',\n });\n return;\n }\n const id = freshId(ctx, 'arc');\n const label = ctx.nextLabel('arc');\n ctx.store.dispatch({\n type: 'ADD',\n payload: {\n obj: mkSceneObj(id, 'arc', label, {\n construction: { kind: 'by3Points', p1: ids[0], p2: ids[1], p3: ids[2] },\n }),\n },\n });\n },\n};\n\nexport const sectorCenterTool: GeometryToolModule = {\n key: 'sectorCenter',\n finalize(ctx) {\n const ids = ctx.pendingIdsRef.current;\n if (ids[0] === ids[1] || ids[0] === ids[2] || ids[1] === ids[2]) {\n ctx.toast?.('Cần 3 điểm phân biệt', { variant: 'warning', id: 'sector-center-dup' });\n return;\n }\n const id = freshId(ctx, 'sec');\n const label = ctx.nextLabel('sector');\n ctx.store.dispatch({\n type: 'ADD',\n payload: {\n obj: mkSceneObj(id, 'sector', label, {\n construction: { kind: 'byCenter', center: ids[0], p1: ids[1], p2: ids[2] },\n }),\n },\n });\n },\n};\n\nexport const incircleTool: GeometryToolModule = {\n key: 'incircle',\n finalize(ctx) {\n const ids = ctx.pendingIdsRef.current;\n const id = freshId(ctx, 'ic');\n const label = ctx.nextLabel('circle');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'circle', label, {\n construction: { kind: 'incircle', p1: ids[0], p2: ids[1], p3: ids[2] },\n }) },\n });\n },\n};\n\nexport const excircleTool: GeometryToolModule = {\n key: 'excircle',\n finalize(ctx) {\n const ids = ctx.pendingIdsRef.current;\n const id = freshId(ctx, 'exc');\n const label = ctx.nextLabel('circle');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'circle', label, {\n construction: { kind: 'excircle', p1: ids[0], p2: ids[1], p3: ids[2], opposite: ids[0] },\n }) },\n });\n },\n};\n","import type { GeometryToolModule } from './_types';\nimport { objKind } from '../../tools';\nimport { freshId, mkSceneObj } from '../utils';\nimport { findPickIdByKind } from './shared';\n\nexport const midpointTool: GeometryToolModule = {\n key: 'midpoint',\n finalize(ctx) {\n const ids = ctx.pendingIdsRef.current;\n const id = freshId(ctx, 'mp');\n const label = ctx.nextLabel('point');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'point', label, {\n constraint: { kind: 'midpoint', p1: ids[0], p2: ids[1] },\n }) },\n });\n },\n};\n\nexport const perpFootTool: GeometryToolModule = {\n key: 'perpFoot',\n finalize(ctx) {\n const fromPoint = findPickIdByKind(ctx, 'point');\n const onLine = findPickIdByKind(ctx, 'line');\n if (!fromPoint || !onLine) return;\n const id = freshId(ctx, 'pf');\n const label = ctx.nextLabel('point');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'point', label, {\n constraint: { kind: 'perpFoot', from: fromPoint, onLine },\n }) },\n });\n },\n};\n\nexport const centroidTool: GeometryToolModule = {\n key: 'centroid',\n finalize(ctx) {\n const ids = ctx.pendingIdsRef.current;\n const id = freshId(ctx, 'g');\n const label = ctx.nextLabel('point');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'point', label, {\n constraint: { kind: 'centroid', vertices: [ids[0], ids[1], ids[2]] },\n }) },\n });\n },\n};\n\nexport const circumcenterTool: GeometryToolModule = {\n key: 'circumcenter',\n finalize(ctx) {\n const ids = ctx.pendingIdsRef.current;\n const id = freshId(ctx, 'o');\n const label = ctx.nextLabel('point');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'point', label, {\n constraint: { kind: 'circumcenter', vertices: [ids[0], ids[1], ids[2]] },\n }) },\n });\n },\n};\n\nexport const incenterTool: GeometryToolModule = {\n key: 'incenter',\n finalize(ctx) {\n const ids = ctx.pendingIdsRef.current;\n const id = freshId(ctx, 'i');\n const label = ctx.nextLabel('point');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'point', label, {\n constraint: { kind: 'incenter', vertices: [ids[0], ids[1], ids[2]] },\n }) },\n });\n },\n};\n\nexport const orthocenterTool: GeometryToolModule = {\n key: 'orthocenter',\n finalize(ctx) {\n const ids = ctx.pendingIdsRef.current;\n const id = freshId(ctx, 'h');\n const label = ctx.nextLabel('point');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'point', label, {\n constraint: { kind: 'orthocenter', vertices: [ids[0], ids[1], ids[2]] },\n }) },\n });\n },\n};\n\nexport const excenterTool: GeometryToolModule = {\n key: 'excenter',\n finalize(ctx) {\n const ids = ctx.pendingIdsRef.current;\n const id = freshId(ctx, 'ex');\n const label = ctx.nextLabel('point');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'point', label, {\n constraint: { kind: 'excenter', vertices: [ids[0], ids[1], ids[2]], opposite: ids[0] },\n }) },\n });\n },\n};\n\nexport const tangencyPointTool: GeometryToolModule = {\n key: 'tangencyPoint',\n finalize(ctx) {\n const circleId = findPickIdByKind(ctx, 'circle');\n const lineId = findPickIdByKind(ctx, 'line');\n if (!circleId || !lineId) return;\n const id = freshId(ctx, 'tp');\n const label = ctx.nextLabel('point');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'point', label, {\n constraint: { kind: 'tangencyPoint', circle: circleId, onLine: lineId },\n }) },\n });\n },\n};\n\nexport const secondIntersectionTool: GeometryToolModule = {\n key: 'secondIntersection',\n finalize(ctx) {\n const lineId = findPickIdByKind(ctx, 'line');\n const circleId = findPickIdByKind(ctx, 'circle');\n const otherId = findPickIdByKind(ctx, 'point');\n if (!lineId || !circleId || !otherId) return;\n const id = freshId(ctx, 'X');\n const label = ctx.nextLabel('point');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'point', label, {\n constraint: { kind: 'secondIntersection', line: lineId, circle: circleId, other: otherId },\n }) },\n });\n },\n};\n\nexport const arcMidpointTool: GeometryToolModule = {\n key: 'arcMidpoint',\n finalize(ctx) {\n const circleId = findPickIdByKind(ctx, 'circle');\n const picks = ctx.pendingRef.current;\n const allIds = ctx.pendingIdsRef.current;\n const ptIds: string[] = [];\n for (let i = 0; i < picks.length; i += 1) {\n if (objKind(picks[i]) === 'point' && allIds[i]) ptIds.push(allIds[i]);\n }\n if (!circleId || ptIds.length < 3) return;\n const id = freshId(ctx, 'M');\n const label = ctx.nextLabel('point');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'point', label, {\n constraint: { kind: 'arcMidpoint', circle: circleId, a: ptIds[0], b: ptIds[1], notContaining: ptIds[2] },\n }) },\n });\n },\n};\n\nexport const circleIntersectionTool: GeometryToolModule = {\n key: 'circleIntersection',\n finalize(ctx) {\n const ids = ctx.pendingIdsRef.current;\n for (const which of [0, 1] as const) {\n const id = freshId(ctx, 'X');\n const label = ctx.nextLabel('point');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'point', label, {\n constraint: { kind: 'circleIntersection', c1: ids[0], c2: ids[1], which },\n }) },\n });\n }\n },\n};\n\nexport const tangentPointExtTool: GeometryToolModule = {\n key: 'tangentPointExt',\n finalize(ctx) {\n const fromId = findPickIdByKind(ctx, 'point');\n const circleId = findPickIdByKind(ctx, 'circle');\n if (!fromId || !circleId) return;\n for (const which of [0, 1] as const) {\n const id = freshId(ctx, 'T');\n const label = ctx.nextLabel('point');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'point', label, {\n constraint: { kind: 'tangentPointExt', from: fromId, circle: circleId, which },\n }) },\n });\n }\n },\n};\n\nexport const pointOnTool: GeometryToolModule = {\n key: 'pointOn',\n finalize(ctx, _toolDef, clickXY) {\n const obj = ctx.pendingRef.current[0];\n const objId = ctx.pendingIdsRef.current[0];\n if (!obj || !objId) return;\n const kind = objKind(obj);\n const id = freshId(ctx, 'p');\n const label = ctx.nextLabel('point');\n const px = clickXY?.x ?? 0;\n const py = clickXY?.y ?? 0;\n let constraint: Record<string, unknown> | null = null;\n if (kind === 'circle') {\n\n const o = (obj as any).center ?? (obj as any).midpoint;\n const ox = o ? o.X() : 0; const oy = o ? o.Y() : 0;\n constraint = { kind: 'onCircle', circleId: objId, theta: Math.atan2(py - oy, px - ox) };\n } else if (kind === 'line') {\n\n const elType = ((obj as any).elType || '').toString().toLowerCase();\n\n const p1 = (obj as any).point1; const p2 = (obj as any).point2;\n let t = 0;\n if (p1 && p2) {\n const dx = p2.X() - p1.X(); const dy = p2.Y() - p1.Y();\n const len2 = dx * dx + dy * dy || 1;\n t = ((px - p1.X()) * dx + (py - p1.Y()) * dy) / len2;\n }\n constraint = elType === 'segment'\n ? { kind: 'onSegment', segmentId: objId, t }\n : { kind: 'onLine', lineId: objId, t };\n }\n if (!constraint) return;\n ctx.store.dispatch({ type: 'ADD', payload: { obj: mkSceneObj(id, 'point', label, { constraint }) } });\n },\n};\n","import type { GeometryToolModule } from './_types';\nimport type { HandlerCtx } from '../ctx';\nimport { freshId, mkSceneObj } from '../utils';\nimport {\n readJxgPos,\n computePerpendicularT,\n computePerpBisectorT,\n computeCircleTheta,\n} from './shared';\n\nexport const squareTool: GeometryToolModule = {\n key: 'square',\n finalize(ctx) {\n const ids = ctx.pendingIdsRef.current;\n const id = freshId(ctx, 'sq');\n const label = ctx.nextLabel('polygon');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'polygon', label, {\n construction: { kind: 'square', p1: ids[0], p2: ids[1] },\n }) },\n });\n },\n};\n\nexport const rectangleTool: GeometryToolModule = {\n key: 'rectangle',\n finalize(ctx) {\n const ids = ctx.pendingIdsRef.current;\n const [aId, bId, cId] = ids;\n const P = readJxgPos(ctx, cId);\n const Aj = readJxgPos(ctx, aId);\n const Bj = readJxgPos(ctx, bId);\n const t = computePerpendicularT(P, Bj, Aj, Bj);\n const polyId = freshId(ctx, 'rect');\n const label = ctx.nextLabel('polygon');\n ctx.store.dispatch({\n type: 'TRANSACTION',\n payload: { actions: [\n { type: 'UPDATE_ATTRS', payload: { id: cId, patch: {\n constraint: { kind: 'onPerpendicular', through: bId, perpToA: aId, perpToB: bId, t },\n } } },\n { type: 'ADD', payload: { obj: mkSceneObj(polyId, 'polygon', label, {\n construction: { kind: 'rectangle', p1: aId, p2: bId, p3: cId },\n }) } },\n ] },\n });\n },\n};\n\nexport const rhombusTool: GeometryToolModule = {\n key: 'rhombus',\n finalize(ctx) {\n const ids = ctx.pendingIdsRef.current;\n const [aId, bId, cId] = ids;\n const P = readJxgPos(ctx, cId);\n const Bj = readJxgPos(ctx, bId);\n const theta = computeCircleTheta(P, Bj);\n const polyId = freshId(ctx, 'rho');\n const label = ctx.nextLabel('polygon');\n ctx.store.dispatch({\n type: 'TRANSACTION',\n payload: { actions: [\n { type: 'UPDATE_ATTRS', payload: { id: cId, patch: {\n constraint: { kind: 'onCircleAroundPoint', center: bId, radiusPoint: aId, theta },\n } } },\n { type: 'ADD', payload: { obj: mkSceneObj(polyId, 'polygon', label, {\n construction: { kind: 'rhombus', p1: aId, p2: bId, p3: cId },\n }) } },\n ] },\n });\n },\n};\n\n/** Shared body cho parallelogram & isoTrapezoid (cùng construction shape, khác kind). */\nfunction finalizePgmTrap(ctx: HandlerCtx, key: 'parallelogram' | 'isoTrapezoid'): void {\n const ids = ctx.pendingIdsRef.current;\n const [aId, bId, cId] = ids;\n const prefix = key === 'parallelogram' ? 'pgm' : 'trap';\n const polyId = freshId(ctx, prefix);\n const label = ctx.nextLabel('polygon');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(polyId, 'polygon', label, {\n construction: { kind: key, p1: aId, p2: bId, p3: cId },\n }) },\n });\n}\n\nexport const parallelogramTool: GeometryToolModule = {\n key: 'parallelogram',\n finalize(ctx) {\n finalizePgmTrap(ctx, 'parallelogram');\n },\n};\n\nexport const isoTrapezoidTool: GeometryToolModule = {\n key: 'isoTrapezoid',\n finalize(ctx) {\n finalizePgmTrap(ctx, 'isoTrapezoid');\n },\n};\n\nexport const isoTriangleTool: GeometryToolModule = {\n key: 'isoTriangle',\n finalize(ctx) {\n const ids = ctx.pendingIdsRef.current;\n // ids = [base1, base2, apex] (theo thứ tự click — hint UI nói rõ).\n const [b1Id, b2Id, apexId] = ids;\n const P = readJxgPos(ctx, apexId);\n const B1 = readJxgPos(ctx, b1Id);\n const B2 = readJxgPos(ctx, b2Id);\n const t = computePerpBisectorT(P, B1, B2);\n const polyId = freshId(ctx, 'iso');\n const label = ctx.nextLabel('polygon');\n ctx.store.dispatch({\n type: 'TRANSACTION',\n payload: { actions: [\n { type: 'UPDATE_ATTRS', payload: { id: apexId, patch: {\n constraint: { kind: 'onPerpBisector', p1: b1Id, p2: b2Id, t },\n } } },\n { type: 'ADD', payload: { obj: mkSceneObj(polyId, 'polygon', label, {\n construction: { kind: 'isoTriangle', base1: b1Id, base2: b2Id, apex: apexId },\n }) } },\n ] },\n });\n },\n};\n\nexport const rightTriangleTool: GeometryToolModule = {\n key: 'rightTriangle',\n finalize(ctx) {\n const ids = ctx.pendingIdsRef.current;\n // ids = [rightAngle, leg1End, leg2End].\n const [rId, p1Id, p2Id] = ids;\n const P = readJxgPos(ctx, p2Id);\n const R = readJxgPos(ctx, rId);\n const P1 = readJxgPos(ctx, p1Id);\n const t = computePerpendicularT(P, R, R, P1);\n const polyId = freshId(ctx, 'rtri');\n const label = ctx.nextLabel('polygon');\n ctx.store.dispatch({\n type: 'TRANSACTION',\n payload: { actions: [\n { type: 'UPDATE_ATTRS', payload: { id: p2Id, patch: {\n constraint: { kind: 'onPerpendicular', through: rId, perpToA: rId, perpToB: p1Id, t },\n } } },\n { type: 'ADD', payload: { obj: mkSceneObj(polyId, 'polygon', label, {\n construction: { kind: 'rightTriangle', rightAngle: rId, leg1End: p1Id, leg2End: p2Id },\n }) } },\n ] },\n });\n },\n};\n","import type { GeometryToolModule } from './_types';\nimport { objKind } from '../../tools';\nimport { dispatchAddIntersection, freshId, mkSceneObj } from '../utils';\n\nexport const angleTool: GeometryToolModule = {\n key: 'angle',\n finalize(ctx) {\n const ids = ctx.pendingIdsRef.current;\n // ids = [p1, vertex, p2] — tool def 'accepts: [\"point\", \"point\", \"point\"]'\n // và LeftPanel hint \"Click 3 điểm có sẵn (đỉnh ở giữa)\". User click theo\n // thứ tự: cạnh-A, đỉnh, cạnh-B.\n const id = freshId(ctx, 'ang');\n const label = ctx.nextLabel('angle');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'angle', label, {\n p1: ids[0], vertex: ids[1], p2: ids[2],\n }) },\n });\n },\n};\n\nexport const distanceTool: GeometryToolModule = {\n key: 'distance',\n finalize(ctx) {\n const ids = ctx.pendingIdsRef.current;\n const id = freshId(ctx, 'd');\n const label = ctx.nextLabel('distance');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'distance', label, { p1: ids[0], p2: ids[1] }) },\n });\n },\n};\n\nexport const intersectTool: GeometryToolModule = {\n key: 'intersect',\n finalize(ctx) {\n const ids = ctx.pendingIdsRef.current;\n // ids[0], ids[1] là line hoặc circle theo accept 'lineOrCircle'.\n // Resolve kind từ pendingRef để biết lineLine / lineCircle / circleCircle.\n const picks = ctx.pendingRef.current;\n const pendIds = ctx.pendingIdsRef.current;\n const aIdx = pendIds.indexOf(ids[0]);\n const bIdx = pendIds.indexOf(ids[1]);\n if (aIdx < 0 || bIdx < 0) return;\n const aKind = objKind(picks[aIdx]);\n const bKind = objKind(picks[bIdx]);\n if (aKind === 'line' && bKind === 'line') {\n dispatchAddIntersection(ctx, { kind: 'lineLine', ref1: ids[0], ref2: ids[1] });\n return;\n }\n const isLineCircle =\n (aKind === 'line' && bKind === 'circle') || (aKind === 'circle' && bKind === 'line');\n const isCircleCircle = aKind === 'circle' && bKind === 'circle';\n if (!isLineCircle && !isCircleCircle) return;\n // 2 nhánh → tạo 2 scene intersection (giống GeoGebra \"Intersect Two Objects\").\n for (const branch of [0, 1] as const) {\n dispatchAddIntersection(ctx, {\n kind: isLineCircle ? 'lineCircle' : 'circleCircle',\n ref1: ids[0],\n ref2: ids[1],\n branch,\n });\n }\n },\n};\n","// finalize/registry.ts\nimport type { GeometryToolModule } from './_types';\nimport * as lines from './lines';\nimport * as circles from './circles';\nimport * as points from './points';\nimport * as polygons from './polygons';\nimport * as measure from './measure';\n\nconst ALL: GeometryToolModule[] = [\n ...Object.values(lines), ...Object.values(circles), ...Object.values(points),\n ...Object.values(polygons), ...Object.values(measure),\n].filter((m): m is GeometryToolModule => !!m && typeof (m as any).finalize === 'function');\n\nexport const TOOL_MODULES: ReadonlyMap<string, GeometryToolModule> =\n new Map(ALL.map((m) => [m.key, m]));\n","import type { ToolDef } from '../tools';\nimport type { HandlerCtx } from './ctx';\nimport { TOOL_MODULES } from './finalize/registry';\n\n// ─── Finalize shape (dispatch ADD per tool) ──────────────────────────────────\n\nexport function finalizeShape(ctx: HandlerCtx, toolDef: ToolDef, clickXY?: { x: number; y: number }): void {\n TOOL_MODULES.get(toolDef.key)?.finalize(ctx, toolDef, clickXY);\n}\n"," \nexport type JxgObj = any;\n\nimport type { State, SceneObject } from '../../../core/scene';\n\n/**\n * Trả về danh sách id điểm \"định nghĩa\" object — dùng cho transform tools\n * (translate/rotate/reflect/dilate) cần biết các điểm gốc để clone.\n *\n * Signature: `(obj: SceneObject, state: State)`. `state` được pass để\n * forward-compatible với các kind phái sinh (vd: lookup dependentsOf cho\n * compound shapes); hiện tại chỉ đọc `obj.kind` + `obj.attrs`.\n */\nexport function getDefiningPoints(obj: SceneObject, _state: State): string[] {\n if (obj.kind === 'point' || obj.kind === 'intersection') return [obj.id];\n if (obj.kind === 'segment' || obj.kind === 'line') {\n const a = obj.attrs as { p1: string; p2: string };\n return [a.p1, a.p2];\n }\n if (obj.kind === 'ray') {\n const a = obj.attrs as { origin: string; through: string };\n return [a.origin, a.through];\n }\n if (obj.kind === 'vector') {\n const a = obj.attrs as { from: string; to: string };\n return [a.from, a.to];\n }\n if (obj.kind === 'circle') {\n const a = obj.attrs as { center: string; surfacePoint: string };\n return [a.center, a.surfacePoint];\n }\n if (obj.kind === 'polygon') {\n return [...(obj.attrs as { vertices: string[] }).vertices];\n }\n return [];\n}\n\nexport type TransformInput =\n | { kind: 'translate'; vectorPoints: [JxgObj, JxgObj] }\n | { kind: 'rotate'; center: JxgObj; angleDeg: number }\n | { kind: 'reflectLine'; line: JxgObj }\n | { kind: 'reflectPoint'; center: JxgObj }\n | { kind: 'dilate'; center: JxgObj; k: number };\n\nexport interface TransformSpec {\n params: unknown[];\n attrs: { type: 'translate' | 'rotate' | 'reflect' | 'scale' };\n /**\n * Khi `chain` được set, finalizeTransformCreate dựng từng transform trong chain\n * (theo thứ tự) rồi pass mảng vào `board.create('point', [src, [t1, t2, t3]])`.\n * Dùng cho `dilate` (scale-quanh-điểm) vì JSXGraph 'scale' không nhận center.\n */\n chain?: Array<{ params: unknown[]; attrs: { type: 'translate' | 'rotate' | 'reflect' | 'scale' } }>;\n}\n\nexport function buildTransformSpec(input: TransformInput): TransformSpec {\n switch (input.kind) {\n case 'translate': {\n // Literal dx/dy (không phải callback) để serialize qua JSON.stringify được.\n // Trade-off: transformed object không cập nhật khi user kéo điểm vector — chấp nhận.\n const [a, b] = input.vectorPoints;\n const dx = b.X() - a.X();\n const dy = b.Y() - a.Y();\n return { params: [dx, dy], attrs: { type: 'translate' } };\n }\n case 'rotate':\n return {\n params: [(input.angleDeg * Math.PI) / 180, input.center],\n attrs: { type: 'rotate' },\n };\n case 'reflectLine':\n return { params: [input.line], attrs: { type: 'reflect' } };\n case 'reflectPoint':\n // JSXGraph 'scale' chỉ nhận 2 tham số (sx, sy) và scale quanh gốc toạ độ —\n // tham số center thứ 3 bị lờ → trước đây sai. Đối xứng qua điểm = quay 180°\n // quanh điểm đó. Dùng 'rotate' (params [angle, center]) để chuẩn.\n return { params: [Math.PI, input.center], attrs: { type: 'rotate' } };\n case 'dilate':\n // JSXGraph 'scale' chỉ nhận đúng 2 tham số (sx, sy) và scale quanh gốc toạ độ —\n // tham số center thứ 3 làm constructor throw. Dilate quanh điểm c bằng tỷ số k\n // = compose 3 phép: T(-c) → S(k,k) → T(+c). Sinh ra chain (mảng spec) thay vì\n // 1 spec đơn; consumer (finalizeTransformCreate) tự nhận biết.\n return {\n params: [],\n attrs: { type: 'scale' },\n chain: [\n { params: [-input.center.X(), -input.center.Y()], attrs: { type: 'translate' as const } },\n { params: [input.k, input.k], attrs: { type: 'scale' as const } },\n { params: [input.center.X(), input.center.Y()], attrs: { type: 'translate' as const } },\n ],\n };\n }\n}\n","import type { TransformDef } from '../../../../core/scene/kinds/2d-constraint';\nimport { getDefiningPoints } from '../transforms';\nimport type { HandlerCtx, TransformToolKey } from './ctx';\nimport { freshId, mkSceneObj } from './utils';\n\nexport function finalizeTransform(\n ctx: HandlerCtx,\n tool: TransformToolKey,\n pendingIds: string[],\n value: number,\n): void {\n if (tool === 'regularPolygon') {\n const n = Math.max(3, Math.round(value));\n const id = freshId(ctx, 'rpoly');\n const label = ctx.nextLabel('polygon');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'polygon', label, {\n construction: { kind: 'regular', p1: pendingIds[0], p2: pendingIds[1], n },\n }) },\n });\n return;\n }\n\n if (tool === 'circleCR') {\n const r = Math.abs(value);\n if (!(r > 0)) { ctx.flashWarn('Bán kính phải > 0'); return; }\n const id = freshId(ctx, 'c');\n const label = ctx.nextLabel('circle');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'circle', label, { center: pendingIds[0], radius: r }) },\n });\n return;\n }\n\n // 5 transform tools: pendingIds[0] = source object.\n const sourceId = pendingIds[0];\n const state = ctx.store.getState();\n const source = state.objects[sourceId];\n if (!source) {\n ctx.flashWarn('Đối tượng nguồn không còn');\n return;\n }\n const defining = getDefiningPoints(source, state);\n if (defining.length === 0) {\n ctx.flashWarn('Không thể biến đổi đối tượng này');\n return;\n }\n\n let transformDef: TransformDef | null = null;\n if (tool === 'translate') {\n // pendingIds = [source, A, B]; vector = B − A. Đọc toạ độ live qua JxgObj.\n const a = ctx.jxgFromSceneId(pendingIds[1]);\n const b = ctx.jxgFromSceneId(pendingIds[2]);\n if (!a || !b || typeof a.X !== 'function' || typeof b.X !== 'function') {\n ctx.flashWarn('Không đọc được toạ độ vector');\n return;\n }\n transformDef = { kind: 'translate', dx: b.X() - a.X(), dy: b.Y() - a.Y() };\n } else if (tool === 'rotate') {\n transformDef = { kind: 'rotate', angleRad: (value * Math.PI) / 180, center: pendingIds[1] };\n } else if (tool === 'reflectLine') {\n transformDef = { kind: 'reflectLine', line: pendingIds[1] };\n } else if (tool === 'reflectPoint') {\n transformDef = { kind: 'reflectPoint', center: pendingIds[1] };\n } else if (tool === 'dilate') {\n transformDef = { kind: 'dilate', k: value, center: pendingIds[1] };\n }\n if (!transformDef) return;\n\n // Tạo N transformed point + collect ids. Dispatch tuần tự (không gom vào\n // transaction) vì freshId/nextLabel cần đọc state đã commit để cấp id+label\n // không trùng. Trade-off: undo sẽ tách thành N+1 step thay vì 1.\n const newPointIds: string[] = [];\n for (const defId of defining) {\n const newId = freshId(ctx, 'p');\n const newLabel = ctx.nextLabel('point');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(newId, 'point', newLabel, {\n constraint: { kind: 'transformed', source: defId, transform: transformDef! },\n color: '#0ea5e9',\n }) },\n });\n newPointIds.push(newId);\n }\n // Tạo wrapper cùng kind từ N point mới (point thì không cần wrapper).\n recreateFromTransformedPoints(ctx, source, newPointIds);\n}\n\n/**\n * Dựng object cùng kind với source từ N point đã transform. Tuân thủ schema\n * attrs của kind tương ứng. Không hỗ trợ kind 'point' (đã có sẵn point biến\n * hình), 'intersection' / 'angle' / 'distance' (measurement — không có ý\n * nghĩa biến hình), 'circle' với construction circumscribed.\n */\nfunction recreateFromTransformedPoints(\n ctx: HandlerCtx,\n source: { kind: string; attrs: Record<string, unknown> },\n pointIds: string[],\n): void {\n const k = source.kind;\n if (k === 'point' || k === 'intersection') return; // point đơn đã có sẵn\n\n if (k === 'segment' && pointIds.length === 2) {\n const id = freshId(ctx, 's');\n const label = ctx.nextLabel('segment');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'segment', label, { p1: pointIds[0], p2: pointIds[1], color: '#0ea5e9' }) },\n });\n return;\n }\n if (k === 'line' && pointIds.length === 2) {\n const id = freshId(ctx, 'l');\n const label = ctx.nextLabel('line');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'line', label, { p1: pointIds[0], p2: pointIds[1], color: '#0ea5e9' }) },\n });\n return;\n }\n if (k === 'ray' && pointIds.length === 2) {\n const id = freshId(ctx, 'r');\n const label = ctx.nextLabel('ray');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'ray', label, { origin: pointIds[0], through: pointIds[1], color: '#0ea5e9' }) },\n });\n return;\n }\n if (k === 'vector' && pointIds.length === 2) {\n const id = freshId(ctx, 'v');\n const label = ctx.nextLabel('vector');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'vector', label, { from: pointIds[0], to: pointIds[1], color: '#0ea5e9' }) },\n });\n return;\n }\n if (k === 'circle' && pointIds.length === 2) {\n const id = freshId(ctx, 'c');\n const label = ctx.nextLabel('circle');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'circle', label, { center: pointIds[0], surfacePoint: pointIds[1], color: '#0ea5e9' }) },\n });\n return;\n }\n if (k === 'polygon' && pointIds.length >= 3) {\n const id = freshId(ctx, 'poly');\n const label = ctx.nextLabel('polygon');\n ctx.store.dispatch({\n type: 'ADD',\n payload: { obj: mkSceneObj(id, 'polygon', label, { vertices: pointIds, color: '#0ea5e9' }) },\n });\n return;\n }\n // Other kinds (angle/distance/derived line constructions) — biến hình không\n // có ý nghĩa định nghĩa. Bỏ qua.\n}\n","import { objKind, type ToolDef } from '../../tools';\nimport type { HandlerCtx } from '../ctx';\nimport { dispatchAddFreePoint } from '../utils';\nimport { finalizeShape } from '../finalizeShape';\nimport { finalizeTransform } from '../transform';\n\n \ntype JxgObj = any;\n\nexport function handleMultiClickTool(\n ctx: HandlerCtx,\n toolDef: ToolDef,\n \n e: any,\n x: number,\n y: number,\n hits: JxgObj[],\n bestHit: JxgObj | null,\n): void {\n let pick: JxgObj | null = null;\n let pickId: string | null = null;\n\n if (toolDef.accepts) {\n // --- Mode A: strict, order-flexible ---\n const usedKinds = ctx.pendingRef.current.map((p) => objKind(p));\n const remaining: Array<'point' | 'line' | 'circle' | 'any' | 'lineOrCircle' | 'pointOrLine'> = [...toolDef.accepts];\n for (const u of usedKinds) {\n if (u === 'other') continue;\n // 'lineOrCircle' slot có thể được lấp bởi line hoặc circle.\n // 'pointOrLine' slot có thể được lấp bởi point hoặc line.\n let i = remaining.indexOf(u);\n if (i < 0 && (u === 'line' || u === 'circle')) i = remaining.indexOf('lineOrCircle');\n if (i < 0 && (u === 'point' || u === 'line')) i = remaining.indexOf('pointOrLine');\n if (i >= 0) remaining.splice(i, 1);\n }\n const strictPoint = hits.find((o) => objKind(o) === 'point') ?? null;\n const lineHit = hits.find((o) => objKind(o) === 'line') ?? null;\n const circleHit = hits.find((o) => objKind(o) === 'circle') ?? null;\n if (remaining.includes('point') && strictPoint) pick = strictPoint;\n else if (remaining.includes('line') && lineHit) pick = lineHit;\n else if (remaining.includes('circle') && circleHit) pick = circleHit;\n else if (remaining.includes('lineOrCircle') && (lineHit || circleHit)) {\n pick = lineHit ?? circleHit;\n }\n else if (remaining.includes('pointOrLine') && (strictPoint || lineHit)) {\n pick = strictPoint ?? lineHit;\n }\n else if (remaining.includes('any') && (strictPoint || lineHit || circleHit)) {\n pick = strictPoint ?? lineHit ?? circleHit;\n } else if (remaining.includes('point') || remaining.includes('pointOrLine')) {\n const near = ctx.findNearestPointJxg(e, 12);\n if (near) {\n pick = near;\n } else {\n // Mode A tool nhận 'point' / 'pointOrLine' + click khu vực rỗng → tự tạo\n // free point tại vị trí click. Đỡ cho user phải đổi sang tool 'point'\n // rồi quay lại (tangent / perpendicular / parallel / angleBisector ...).\n // Các slot khác (line/circle) vẫn yêu cầu hit object có sẵn.\n //\n // angleBisector: nếu lần click đầu đã là line thì cấm tạo free-point\n // (mode 2-line đã chốt) — handled by mode-consistency check phía dưới.\n //\n // pickId set trực tiếp từ return value của dispatchAddFreePoint vì\n // reverse-map (jxgIdToSceneRef) được rebuild qua store subscribe →\n // chưa sync xong tại thời điểm này; gọi jxgIdToSceneId(pick) sẽ ra null.\n if (toolDef.key === 'angleBisector' && ctx.pendingRef.current.length > 0\n && objKind(ctx.pendingRef.current[0]) === 'line') {\n ctx.flashWarn('Đã chọn đường — click thêm 1 đường/đoạn nữa để tạo 2 tia phân giác');\n return;\n }\n pickId = dispatchAddFreePoint(ctx, x, y);\n pick = ctx.jxgFromSceneId(pickId);\n }\n }\n if (!pick) {\n const needs = remaining.map((k) =>\n k === 'point' ? 'một điểm'\n : k === 'line' ? 'một đường/đoạn'\n : k === 'circle' ? 'một đường tròn'\n : k === 'lineOrCircle' ? 'một đường hoặc đường tròn'\n : k === 'pointOrLine' ? 'một điểm hoặc đường/đoạn'\n : 'một đối tượng',\n );\n ctx.flashWarn(`Còn cần click vào ${needs.join(' + ')} có sẵn`);\n return;\n }\n if (ctx.pendingRef.current.includes(pick)) {\n ctx.flashWarn('Đã chọn đối tượng này — chọn đối tượng khác');\n return;\n }\n // angleBisector: ép tính nhất quán mode (3-point ↔ 2-line) — không trộn lẫn.\n if (toolDef.key === 'angleBisector' && ctx.pendingRef.current.length > 0) {\n const firstKind = objKind(ctx.pendingRef.current[0]);\n const newKind = objKind(pick);\n if (firstKind === 'line' && newKind !== 'line') {\n ctx.flashWarn('Đã chọn đường — chỉ click thêm 1 đường/đoạn nữa');\n return;\n }\n if (firstKind === 'point' && newKind !== 'point') {\n ctx.flashWarn('Đã chọn điểm — click thêm điểm (đỉnh ở giữa)');\n return;\n }\n }\n if (!pickId) pickId = ctx.jxgIdToSceneId(pick);\n } else {\n // --- Mode B: lenient, all slots want a point ---\n const snapped = bestHit && objKind(bestHit) === 'point' ? bestHit : ctx.findNearestPointJxg(e, 12);\n if (snapped && ctx.pendingRef.current.includes(snapped)) {\n ctx.flashWarn('Đã chọn điểm này — chọn điểm khác hoặc click chỗ trống');\n return;\n }\n if (snapped) {\n pick = snapped;\n pickId = ctx.jxgIdToSceneId(snapped);\n } else {\n pickId = dispatchAddFreePoint(ctx, x, y);\n pick = ctx.jxgFromSceneId(pickId);\n }\n }\n\n if (!pick) return;\n ctx.pendingRef.current.push(pick);\n if (pickId) ctx.pendingIdsRef.current.push(pickId);\n ctx.setPendingCount(ctx.pendingIdsRef.current.length);\n\n // angleBisector 2-line mode: finalize ngay khi đủ 2 đường (không chờ 3 picks).\n if (toolDef.key === 'angleBisector'\n && ctx.pendingIdsRef.current.length === 2\n && objKind(ctx.pendingRef.current[0]) === 'line') {\n finalizeShape(ctx, toolDef);\n ctx.clearPending();\n return;\n }\n\n if (ctx.pendingIdsRef.current.length >= toolDef.needs) {\n const tk = toolDef.key;\n // 3 popover transform tools cần numeric input (góc / tỷ số / số cạnh) trước\n // khi finalize → emit info để MiniBoard show TransformParamPopover.\n if (tk === 'rotate' || tk === 'dilate' || tk === 'regularPolygon' || tk === 'circleCR') {\n const cx = ((e.clientX ?? 0) as number) + 8;\n const cy = ((e.clientY ?? 0) as number) + 8;\n ctx.pendingTransformRef.current = {\n tool: tk,\n pendingIds: ctx.pendingIdsRef.current.slice(),\n anchorScreen: { x: cx, y: cy },\n };\n ctx.emitTransform({ tool: tk, anchor: { x: cx, y: cy } });\n // Don't clearPending — wait for confirm/cancel from MiniBoard.\n return;\n }\n // 3 no-popover transform tools (translate/reflectLine/reflectPoint):\n // finalize ngay khi đủ pick — không cần numeric param.\n if (tk === 'translate' || tk === 'reflectLine' || tk === 'reflectPoint') {\n finalizeTransform(ctx, tk, ctx.pendingIdsRef.current.slice(), 0);\n ctx.clearPending();\n return;\n }\n\n // Non-transform multi-click tools: dispatch ADD for the shape directly.\n // Truyền toạ độ click (board coords) để pointOn tính theta/t bám vị trí.\n finalizeShape(ctx, toolDef, { x, y });\n ctx.clearPending();\n } else {\n ctx.refreshPreview();\n }\n}\n","import { objKind, TOOLS } from '../../tools';\nimport type { HandlerCtx } from '../ctx';\nimport { handleMoveTool } from './move';\nimport { handleSelectTool } from './select';\nimport { handlePointTool } from './point';\nimport { handleSingleTargetTool } from './singleTarget';\nimport { handlePolygonTool } from './polygon';\nimport { handleMultiClickTool } from './multiClick';\n\n \nexport function handleDown(ctx: HandlerCtx, e: any): void {\n if (!ctx.boardRef.current) return;\n const t = ctx.toolRef.current;\n\n if (t === 'move') return handleMoveTool(ctx, e);\n if (t === 'select') return handleSelectTool(ctx, e);\n\n const toolDef = TOOLS.find((td) => td.key === t);\n if (!toolDef) return;\n\n const coords = ctx.boardRef.current.getUsrCoordsOfMouse(e);\n const x = coords[0], y = coords[1];\n\n // Detect if click hits any existing object (snap target).\n // Filter hits không có scene id (vd auxiliary points của 'regularpolygon' do\n // JSXGraph tự sinh — không có id trong renderer.elements, không thể dùng làm\n // pick cho tool). Nếu không filter, aux point sẽ cướp click khỏi border/edge\n // bên cạnh, làm tool perp/parallel/... đứng yên không tiến tới needs.\n const hits = ctx.objectsAt(e)\n .map(ctx.promoteLabel)\n .filter((o) => o !== ctx.axisObjsRef.current.x && o !== ctx.axisObjsRef.current.y)\n .filter((o) => ctx.jxgIdToSceneId(o) != null);\n const bestHit = hits.find((o) => objKind(o) === 'point') ?? hits[0] ?? null;\n\n if (t === 'point') return handlePointTool(ctx, e, x, y, hits);\n if (handleSingleTargetTool(ctx, t, toolDef, e, bestHit)) return;\n if (handlePolygonTool(ctx, t, toolDef, e, x, y, bestHit)) return;\n\n handleMultiClickTool(ctx, toolDef, e, x, y, hits, bestHit);\n}\n","import { safeJsx } from '../../../shared/safeJsx';\nimport type { HandlerCtx } from './ctx';\n\n// ─── board.on('move') ────────────────────────────────────────────────────────\n\n \nexport function handleMove(ctx: HandlerCtx, e: any): void {\n // Marquee rectangle redraw while user drags with the select tool on empty space.\n if (ctx.toolRef.current === 'select' && ctx.marqueeRef.current) {\n const sc = ctx.screenCoordsOf(e);\n if (sc && ctx.boardRef.current) {\n const [sx, sy] = sc;\n const { startSx, startSy } = ctx.marqueeRef.current;\n const b = ctx.boardRef.current;\n const ux1 = b.screenCoords2userCoords?.([Math.min(startSx, sx), Math.min(startSy, sy)]) ?? null;\n const ux2 = b.screenCoords2userCoords?.([Math.max(startSx, sx), Math.max(startSy, sy)]) ?? null;\n const toUsr = (px: number, py: number): [number, number] => {\n const ox = b.origin?.scrCoords?.[1] ?? 0;\n const oy = b.origin?.scrCoords?.[2] ?? 0;\n const ux = (px - ox) / b.unitX;\n const uy = (oy - py) / b.unitY;\n return [ux, uy];\n };\n const [x1u, y1u] = ux1 && ux1.length >= 2 ? [ux1[0], ux1[1]] : toUsr(Math.min(startSx, sx), Math.min(startSy, sy));\n const [x2u, y2u] = ux2 && ux2.length >= 2 ? [ux2[0], ux2[1]] : toUsr(Math.max(startSx, sx), Math.max(startSy, sy));\n const rect = ctx.marqueeRef.current.rect;\n if (rect) {\n safeJsx('handlers.removeObject(marquee.prevRect)', () => ctx.boardRef.current.removeObject(rect));\n }\n safeJsx('handlers.createMarqueePolygon', () => {\n ctx.marqueeRef.current!.rect = ctx.boardRef.current.create('polygon', [\n [x1u, y1u], [x2u, y1u], [x2u, y2u], [x1u, y2u],\n ], {\n fillColor: '#06b6d4', fillOpacity: 0.08,\n borders: { strokeColor: '#06b6d4', strokeWidth: 1, dash: 2 },\n vertices: { visible: false },\n fixed: true, highlight: false, withLabel: false,\n });\n });\n }\n return;\n }\n const ph = ctx.phantomRef.current;\n if (!ph || !ctx.boardRef.current) return;\n if (ctx.previewRafRef.current != null) return;\n ctx.previewRafRef.current = requestAnimationFrame(() => {\n ctx.previewRafRef.current = null;\n if (!ctx.boardRef.current || !ctx.phantomRef.current) return;\n safeJsx('handlers.phantomMove', () => {\n const coords = ctx.boardRef.current.getUsrCoordsOfMouse(e);\n \n const JXG: any = ctx.jxgRef.current;\n if (!JXG) return;\n ctx.phantomRef.current.setPositionDirectly(JXG.COORDS_BY_USER, [coords[0], coords[1]]);\n ctx.boardRef.current.update();\n });\n });\n}\n"," \ntype JxgObj = any;\n\nimport { objKind } from '../tools';\nimport { safeJsx } from '../../../shared/safeJsx';\nimport type { HandlerCtx } from './ctx';\n\n// ─── board.on('up') ───────────────────────────────────────────────────────────\n\n \nexport function handleUp(ctx: HandlerCtx, e: any): void {\n const t = ctx.toolRef.current;\n if (t === 'select') {\n const mq = ctx.marqueeRef.current;\n ctx.marqueeRef.current = null;\n ctx.moveDownRef.current = null;\n if (!mq) return;\n const sc = ctx.screenCoordsOf(e);\n if (!sc) return;\n const [ex, ey] = sc;\n if (mq.rect) { safeJsx('handlers.removeObject(marquee.rect)', () => ctx.boardRef.current?.removeObject(mq.rect)); }\n if (Math.hypot(ex - mq.startSx, ey - mq.startSy) < 4) return; // not a real drag\n const x1 = Math.min(mq.startSx, ex), x2 = Math.max(mq.startSx, ex);\n const y1 = Math.min(mq.startSy, ey), y2 = Math.max(mq.startSy, ey);\n const board = ctx.boardRef.current;\n if (!board) return;\n const list = (board.objectsList || []) as JxgObj[];\n for (const o of list) {\n if (o === ctx.axisObjsRef.current.x || o === ctx.axisObjsRef.current.y) continue;\n const kind = objKind(o);\n if (kind === 'point') {\n const pc = o.coords?.scrCoords;\n if (!pc) continue;\n if (pc[1] >= x1 && pc[1] <= x2 && pc[2] >= y1 && pc[2] <= y2) {\n const sid = ctx.jxgIdToSceneId(o);\n if (sid && !ctx.selectedSetRef.current.has(sid)) {\n ctx.selectedSetRef.current.add(sid);\n }\n }\n } else if (kind === 'line' || kind === 'circle') {\n \n const defs: any[] = [o.point1, o.point2, o.center, o.midpoint, o.point3].filter(Boolean);\n const anyInside = defs.some((p) => {\n const pc = p?.coords?.scrCoords;\n return pc && pc[1] >= x1 && pc[1] <= x2 && pc[2] >= y1 && pc[2] <= y2;\n });\n if (anyInside) {\n const sid = ctx.jxgIdToSceneId(o);\n if (sid && !ctx.selectedSetRef.current.has(sid)) {\n ctx.selectedSetRef.current.add(sid);\n }\n }\n }\n }\n ctx.setSelectionTick((tt) => tt + 1);\n safeJsx('handlers.board.update(marquee)', () => board.update());\n return;\n }\n if (t !== 'move') return;\n const start = ctx.moveDownRef.current;\n ctx.moveDownRef.current = null;\n if (!start) return;\n const sc = ctx.screenCoordsOf(e);\n if (!sc) return;\n const [sx, sy] = sc;\n const moved = Math.hypot(sx - start.sx, sy - start.sy);\n if (moved > 4) return; // drag, không phải click\n const hits = ctx.objectsAt(e)\n .map(ctx.promoteLabel)\n .filter((o) => o !== ctx.axisObjsRef.current.x && o !== ctx.axisObjsRef.current.y)\n .filter((o) => ctx.jxgIdToSceneId(o) != null);\n const best: JxgObj | null =\n hits.find((o) => objKind(o) === 'point') ?? ctx.findNearestPointJxg(e, 12) ?? hits[0] ?? null;\n if (!best) {\n ctx.lastMoveClickRef.current = { id: null, time: 0 };\n return;\n }\n const bestId = ctx.jxgIdToSceneId(best);\n const now = Date.now();\n const isDouble =\n bestId !== null && ctx.lastMoveClickRef.current.id === bestId && (now - ctx.lastMoveClickRef.current.time) < 400;\n ctx.lastMoveClickRef.current = { id: bestId, time: now };\n if (!isDouble) return;\n const cx = (e.clientX ?? e.touches?.[0]?.clientX ?? 0) as number;\n const cy = (e.clientY ?? e.touches?.[0]?.clientY ?? 0) as number;\n if (!bestId) return;\n ctx.emitSelect({ id: bestId, anchorScreen: { x: cx + 8, y: cy + 8 } });\n}\n","export { handleDown } from './pointerDown';\nexport { handleMove } from './pointerMove';\nexport { handleUp } from './pointerUp';\nexport { finalizeTransform } from './transform';\nexport type { HandlerCtx, TransformToolKey } from './ctx';\n","// src/stamps/geometry-2d/editor/hitTest.ts\nimport type { State, SceneObject } from '../../../core/scene';\nimport { listObjects } from '../../../core/scene';\nimport { safeJsx } from '../../shared/safeJsx';\n\n \ntype JxgObj = any;\n\n/**\n * Tìm point gần (x, y) nhất trong state, trong vòng tol.\n *\n * Sử dụng `pointCoord(id) => [x, y] | null` để hit-test theo toạ độ JSXGraph\n * thực tế (resolve qua JxgRenderer Map). Trả về `null` nếu không có point nào\n * trong vòng tol.\n */\nexport function findNearestPoint(\n state: State,\n pointCoord: (id: string) => [number, number] | null,\n x: number,\n y: number,\n tolPx: number,\n excludeIds: Set<string> = new Set(),\n): SceneObject | null {\n let best: SceneObject | null = null;\n let bestDistSq = tolPx * tolPx;\n for (const obj of listObjects(state)) {\n if (obj.kind !== 'point' && obj.kind !== 'intersection') continue;\n if (excludeIds.has(obj.id)) continue;\n const coord = pointCoord(obj.id);\n if (!coord) continue;\n const dx = coord[0] - x;\n const dy = coord[1] - y;\n const d2 = dx * dx + dy * dy;\n if (d2 < bestDistSq) {\n bestDistSq = d2;\n best = obj;\n }\n }\n return best;\n}\n\n/**\n * Lấy screen coords (x, y px) của event dưới cursor. Ưu tiên JSXGraph's\n * `getMousePosition`; fallback về container's getBoundingClientRect (cần cho\n * touch event hoặc khi board chưa cache mouse position).\n */\nexport function screenCoordsOf(\n board: JxgObj,\n container: HTMLElement | null,\n evt: JxgObj,\n): [number, number] | null {\n if (!board) return null;\n try {\n const mp = board.getMousePosition ? board.getMousePosition(evt) : null;\n if (mp && mp.length >= 2) return [mp[0], mp[1]];\n } catch { /* fall through to container rect */ }\n if (container) {\n const rect = container.getBoundingClientRect();\n const cx = evt.clientX ?? evt.touches?.[0]?.clientX ?? 0;\n const cy = evt.clientY ?? evt.touches?.[0]?.clientY ?? 0;\n return [cx - rect.left, cy - rect.top];\n }\n return null;\n}\n\n/**\n * List JSXGraph objects whose `hasPoint(sx, sy)` chứa cursor — đã loại\n * `excludes` (vd phantom + preview shape + preview segments).\n *\n * Phantom là invisible point JSXGraph kéo theo cursor để dựng live-preview;\n * nếu không loại trừ, click chỗ trống sẽ snap trúng phantom (cách click 0px)\n * → drawing \"đứng\" vì pendingRef nhét phantom (không có scene id), tool\n * không tiến tới được `needs` threshold. (Regression từ commit 95a6c13.)\n */\nexport function objectsAt(\n board: JxgObj,\n container: HTMLElement | null,\n evt: JxgObj,\n excludes: Iterable<JxgObj>,\n): JxgObj[] {\n const sc = screenCoordsOf(board, container, evt);\n if (!board || !sc) return [];\n const [sx, sy] = sc;\n const excludeSet = new Set<JxgObj>();\n for (const e of excludes) if (e) excludeSet.add(e);\n const out: JxgObj[] = [];\n safeJsx('hitTest.objectsAt', () => {\n for (const o of (board.objectsList || [])) {\n if (excludeSet.has(o)) continue;\n if (o && typeof o.hasPoint === 'function' && o.hasPoint(sx, sy)) out.push(o);\n }\n });\n return out;\n}\n\n/**\n * Tìm JSXGraph point gần cursor (trong `tolPx` pixels). Dùng `findNearestPoint`\n * với `pointCoord` đọc từ JSXGraph's `coords.scrCoords` qua resolver `jxgFromSceneId`.\n * Trả JSXGraph object (không phải scene id) để caller dùng làm pick.\n */\nexport function findNearestJxgPoint(\n board: JxgObj,\n container: HTMLElement | null,\n state: State,\n jxgFromSceneId: (id: string) => JxgObj | null,\n evt: JxgObj,\n tolPx = 12,\n): JxgObj | null {\n const sc = screenCoordsOf(board, container, evt);\n if (!board || !sc) return null;\n const [sx, sy] = sc;\n const pointCoord = (id: string): [number, number] | null => {\n const j = jxgFromSceneId(id);\n const sc2 = j?.coords?.scrCoords;\n return sc2 ? [sc2[1], sc2[2]] : null;\n };\n const result = findNearestPoint(state, pointCoord, sx, sy, tolPx);\n return result ? jxgFromSceneId(result.id) : null;\n}\n\n/**\n * Khi user click trúng label text của một element, JSXGraph trả về text obj\n * thay vì owner. Promote về owner để properties popover hiển thị đúng\n * properties của shape, không phải của text.\n */\nexport function promoteToLabelOwner(board: JxgObj, o: JxgObj): JxgObj {\n if (!o) return o;\n const t = (o.elType || o.type || '').toString().toLowerCase();\n if (t !== 'text' || !board) return o;\n const promoted = safeJsx<JxgObj | null>('hitTest.promoteToLabelOwner', () => {\n for (const c of (board.objectsList || [])) {\n if (c.label === o) return c;\n }\n return null;\n }, null);\n return promoted ?? o;\n}\n","import { useCallback, useRef, useState } from 'react';\n\nexport type ToolStateMachine<T extends string> = {\n tool: T;\n pendingIds: string[];\n toolRef: { readonly current: T };\n pendingIdsRef: { readonly current: string[] };\n setTool: (t: T) => void;\n pushPending: (id: string) => void;\n clearPending: () => void;\n};\n\n/**\n * Tool + pending ids state machine, generic theo tool union type.\n *\n * - `setTool` clears pending — chuyển tool đang xây thì huỷ build dở.\n * - Ref + state song song để handler stable-closure read được giá trị mới\n * mà UI vẫn re-render khi giá trị đổi.\n *\n * Shared cho geometry-2d (`GeomTool`) và graph-2d (`GraphTool`); thêm consumer\n * mới chỉ cần pass union literal type.\n */\nexport function useToolStateMachine<T extends string>(initial: T): ToolStateMachine<T> {\n const [tool, setToolState] = useState<T>(initial);\n const [pendingIds, setPendingIds] = useState<string[]>([]);\n const toolRef = useRef<T>(initial);\n const pendingIdsRef = useRef<string[]>([]);\n\n const setTool = useCallback((t: T) => {\n toolRef.current = t;\n pendingIdsRef.current = [];\n setToolState(t);\n setPendingIds([]);\n }, []);\n\n const pushPending = useCallback((id: string) => {\n pendingIdsRef.current = [...pendingIdsRef.current, id];\n setPendingIds(pendingIdsRef.current);\n }, []);\n\n const clearPending = useCallback(() => {\n pendingIdsRef.current = [];\n setPendingIds([]);\n }, []);\n\n return { tool, pendingIds, toolRef, pendingIdsRef, setTool, pushPending, clearPending };\n}\n","import { safeJsx } from './safeJsx';\n\n/**\n * Minimal JSXGraph board surface that wheel-zoom logic depends on.\n * Local shape to avoid importing the (untyped) jsxgraph default export here.\n */\nexport interface JxgBoardZoomable {\n zoomIn: (x?: number, y?: number) => void;\n zoomOut: (x?: number, y?: number) => void;\n // JSXGraph older versions may not expose this — wheel still works, just\n // without cursor-anchored zoom (falls back to board-center).\n getUsrCoordsOfMouse?: (e: WheelEvent) => unknown;\n}\n\n/**\n * Attach Excalidraw-style Ctrl/Cmd + wheel zoom to a container element.\n *\n * - Khi wheel kèm Ctrl/Cmd: preventDefault + zoom in/out với anchor tại\n * con trỏ (nếu board hỗ trợ `getUsrCoordsOfMouse`).\n * - Khi wheel không kèm modifier: bỏ qua → page scroll bình thường.\n *\n * Returns cleanup fn. Caller chịu trách nhiệm gọi trong cleanup của useEffect.\n *\n * @param target Container element (`HTMLDivElement` hoặc `SVGSVGElement`).\n * @param board JSXGraph board instance đã initBoard xong.\n * @param label Tag để log dev-mode khi safeJsx swallow lỗi (vd \"MiniBoard.2d\").\n */\nexport function attachJxgWheelZoom(\n target: HTMLElement,\n board: JxgBoardZoomable,\n label = 'wheelZoom',\n): () => void {\n const onWheel = (e: WheelEvent): void => {\n if (!e.ctrlKey && !e.metaKey) return;\n e.preventDefault();\n e.stopPropagation();\n let cx: number | undefined;\n let cy: number | undefined;\n safeJsx(`${label}.coords`, () => {\n const usr = board.getUsrCoordsOfMouse?.(e);\n if (Array.isArray(usr) && usr.length >= 2\n && Number.isFinite(usr[0]) && Number.isFinite(usr[1])) {\n cx = usr[0] as number;\n cy = usr[1] as number;\n }\n });\n if (e.deltaY < 0) safeJsx(`${label}.in`, () => board.zoomIn(cx, cy));\n else if (e.deltaY > 0) safeJsx(`${label}.out`, () => board.zoomOut(cx, cy));\n };\n target.addEventListener('wheel', onWheel, { passive: false });\n return () => { target.removeEventListener('wheel', onWheel); };\n}\n","import { safeJsx } from './safeJsx';\n\n/**\n * Toggles cho common JSXGraph options. Per-stamp callsite override mặc định\n * nếu cần preserve behavior cụ thể.\n *\n * Mặc định:\n * - text.display = 'internal' (true) — bắt buộc cho clone-SVG export.\n * - text.useASCII/MathJax/Katex = false (true) — JSXGraph default rendering,\n * không load extra text engine.\n * - label.display = 'internal' (true) — point label vào trong SVG.\n * - elements.highlight = false (FALSE mặc định) — opt-in vì graph-2d cần\n * JSXGraph's default hover-highlight để phân biệt object đang hover.\n */\nexport interface JxgInitDefaults {\n textDisplayInternal?: boolean;\n disableTextEngines?: boolean;\n labelDisplayInternal?: boolean;\n disableElementHighlight?: boolean;\n}\n\nexport interface InitJxgBoardConfig {\n /** Per-MiniBoard toggle cho common defaults. */\n defaults?: JxgInitDefaults;\n /** Options pass thẳng vào `JXG.JSXGraph.initBoard(target, opts)`. */\n boardOptions: Record<string, unknown>;\n /**\n * Hook để tweak options sau khi defaults được apply. Dùng cho per-stamp\n * customization (vd themeLabel color cho 2D, axesPosition cho 3D view3d).\n */\n \n extraOptionTweaks?: (opts: any) => void;\n /** Tag cho safeJsx log (vd \"MiniBoard.2d\"). Default: \"JxgBoard\". */\n label?: string;\n}\n\nexport interface InitJxgBoardResult {\n \n JXG: any;\n \n board: any;\n /** Gọi để free JSXGraph board (safe-wrapped). */\n cleanup: () => void;\n}\n\n/**\n * Async dynamic-import JSXGraph + apply common options + initBoard + trả\n * cleanup. Centralize boilerplate shared bởi 3 MiniBoard (2D/3D/graph-2d).\n *\n * Caller vẫn handle cancellation flag, refs, và post-init setup (renderer,\n * view3d, axes, etc.) ngoài helper này.\n *\n * @throws Nếu JSXGraph load hoặc initBoard throw. Caller nên try/catch nếu\n * cần tolerate mock environments.\n */\nexport async function initJxgBoard(\n target: string | HTMLElement,\n config: InitJxgBoardConfig,\n): Promise<InitJxgBoardResult> {\n const label = config.label ?? 'JxgBoard';\n \n const JXG = (await import('jsxgraph')).default as any;\n const {\n textDisplayInternal = true,\n disableTextEngines = true,\n labelDisplayInternal = true,\n disableElementHighlight = false,\n } = config.defaults ?? {};\n safeJsx(`${label}.applyOptions`, () => {\n const opts = JXG.Options;\n if (!opts) return;\n if (textDisplayInternal || disableTextEngines) {\n opts.text = opts.text ?? {};\n if (textDisplayInternal) opts.text.display = 'internal';\n if (disableTextEngines) {\n opts.text.useASCIIMathML = false;\n opts.text.useMathJax = false;\n opts.text.useKatex = false;\n }\n }\n if (labelDisplayInternal) {\n opts.label = opts.label ?? {};\n opts.label.display = 'internal';\n }\n if (disableElementHighlight) {\n opts.elements = opts.elements ?? {};\n opts.elements.highlight = false;\n }\n config.extraOptionTweaks?.(opts);\n });\n const board = JXG.JSXGraph.initBoard(target, config.boardOptions);\n const cleanup = (): void => {\n safeJsx(`${label}.freeBoard`, () => JXG.JSXGraph.freeBoard(board));\n };\n return { JXG, board, cleanup };\n}\n","import type { State } from '../../../core/scene';\nimport type { ObjectSnapshot } from './MiniBoard.types';\n\n/**\n * Build snapshot từ scene object để PropertiesPopover render. Trả null nếu\n * object kind không hỗ trợ properties panel (vd polygon, angle, …).\n *\n * Pure function — không touch board/JSXGraph state. Caller pass anchorScreen\n * (vị trí pixel mà popover sẽ hiển thị).\n */\nexport function buildObjectSnapshot(\n state: State,\n id: string,\n anchorScreen: { x: number; y: number },\n): ObjectSnapshot | null {\n const obj = state.objects[id];\n if (!obj) return null;\n const k = obj.kind;\n if (k !== 'point' && k !== 'line' && k !== 'circle' && k !== 'segment' && k !== 'ray' && k !== 'vector') {\n return null;\n }\n const a = obj.attrs as Record<string, unknown>;\n const jKind: 'point' | 'line' | 'circle' = k === 'point' ? 'point' : (k === 'circle' ? 'circle' : 'line');\n return {\n id,\n kind: jKind,\n name: obj.label,\n color: (a.color as string) ?? '#0f172a',\n width: (a.width as number) ?? 2,\n dash: (a.dash as number) ?? 0,\n face: (a.face as ObjectSnapshot['face']) ?? 'o',\n showLabel: (a.showLabel as boolean) ?? true,\n showValue: (a.showValue as boolean) ?? false,\n screenCoords: anchorScreen,\n };\n}\n","// Pure preview-shape factory cho 2D editor — không component state, không\n// React. Dùng bởi MiniBoard.tsx `refreshPreview` mỗi khi user thay đổi\n// pending picks. Mirror legacy live-preview (commit ce78521), tách khỏi\n// MiniBoard.tsx để giảm size component file.\n\nimport { safeJsx } from '../../shared/safeJsx';\nimport { objKind, type ToolDef } from './tools';\n\n \ntype JxgObj = any;\n\nconst PREVIEW_STYLE: Record<string, unknown> = {\n strokeColor: '#3b82f6',\n strokeWidth: 1.5,\n strokeOpacity: 0.65,\n dash: 2,\n fixed: true,\n highlight: false,\n withLabel: false,\n};\n\nconst CIRCLE_PREVIEW_STYLE: Record<string, unknown> = {\n ...PREVIEW_STYLE,\n fillColor: 'none',\n fillOpacity: 0,\n};\n\n/**\n * Build transient JSXGraph object để live-preview shape user đang dựng. Trả\n * `null` khi:\n * - Tool không phải shape-tool (vd select/move).\n * - Số pick chưa đủ cho preview cụ thể.\n * - Pick types không hợp lệ với tool (vd perpendicular cần line input).\n *\n * Tất cả create calls wrap trong safeJsx để swallow exception từ JSXGraph\n * khi state stale (vd board destroyed giữa chừng).\n */\nexport function buildPreviewShape(\n board: JxgObj,\n toolDef: ToolDef,\n picks: JxgObj[],\n phantom: JxgObj,\n): JxgObj {\n if (!board) return null;\n return safeJsx<JxgObj>('preview.buildPreviewShape', () => {\n switch (toolDef.key) {\n case 'segment':\n case 'midpoint':\n case 'distance':\n return board.create('segment', [picks[0], phantom], PREVIEW_STYLE);\n case 'line':\n return board.create('line', [picks[0], phantom], PREVIEW_STYLE);\n case 'ray':\n return board.create('line', [picks[0], phantom], {\n ...PREVIEW_STYLE,\n straightFirst: false,\n straightLast: true,\n });\n case 'vector':\n return board.create('arrow', [picks[0], phantom], PREVIEW_STYLE);\n case 'circleCenter':\n return board.create('circle', [picks[0], phantom], CIRCLE_PREVIEW_STYLE);\n case 'circle3':\n if (picks.length === 1) return board.create('circle', [picks[0], phantom], CIRCLE_PREVIEW_STYLE);\n if (picks.length === 2) {\n return board.create('circumcircle', [picks[0], picks[1], phantom], CIRCLE_PREVIEW_STYLE);\n }\n return null;\n case 'angle':\n if (picks.length === 1) return board.create('segment', [picks[0], phantom], PREVIEW_STYLE);\n if (picks.length === 2) {\n return board.create('angle', [picks[0], picks[1], phantom], {\n ...PREVIEW_STYLE,\n radius: 1,\n fillColor: '#22c55e',\n fillOpacity: 0.15,\n });\n }\n return null;\n case 'perpBisector':\n return board.create('segment', [picks[0], phantom], PREVIEW_STYLE);\n case 'angleBisector':\n if (picks.length === 1) return board.create('segment', [picks[0], phantom], PREVIEW_STYLE);\n if (picks.length === 2) return board.create('bisector', [picks[0], picks[1], phantom], PREVIEW_STYLE);\n return null;\n case 'perpendicular':\n case 'parallel':\n case 'tangent': {\n if (picks.length !== 1) return null;\n const k = objKind(picks[0]);\n if (k === 'line' && toolDef.key !== 'tangent') {\n return board.create(toolDef.key, [picks[0], phantom], PREVIEW_STYLE);\n }\n if (k === 'circle' && toolDef.key === 'tangent') {\n const glider = board.create('glider', [phantom.X(), phantom.Y(), picks[0]], {\n visible: false,\n withLabel: false,\n });\n return board.create('tangent', [glider], PREVIEW_STYLE);\n }\n return null;\n }\n default:\n return null;\n }\n }, null);\n}\n\n/**\n * Tạo phantom point (invisible, fixed) làm endpoint kéo theo cursor cho\n * live-preview. Trả `null` nếu board không sẵn sàng (mock/test path).\n */\nexport function createPhantomPoint(board: JxgObj): JxgObj {\n if (!board) return null;\n return safeJsx<JxgObj>('preview.createPhantomPoint', () => board.create('point', [0, 0], {\n visible: false,\n fixed: true,\n withLabel: false,\n name: '',\n }), null);\n}\n","import { safeJsx } from '../../shared/safeJsx';\nimport { buildPreviewShape, createPhantomPoint } from './preview';\nimport { TOOLS } from './tools';\nimport type { ToolStateMachine } from '../../shared/useToolStateMachine';\nimport type { GeomTool } from './tools';\n\n \ntype JxgObj = any;\n\nexport interface PreviewRefs {\n previewSegRef: { current: JxgObj[] };\n phantomRef: { current: JxgObj };\n previewShapeRef: { current: JxgObj };\n pendingRef: { current: JxgObj[] };\n}\n\n/**\n * Xoá tất cả preview segment objects (preview vertex-by-vertex của polygon\n * tool). Reset previewSegRef.current về mảng rỗng.\n */\nexport function clearPreviewSegs(\n board: JxgObj,\n previewSegRef: { current: JxgObj[] },\n): void {\n if (!board) return;\n for (const s of previewSegRef.current) {\n safeJsx('previewActions.removePreviewSeg', () => board.removeObject(s));\n }\n previewSegRef.current = [];\n}\n\n/**\n * Xoá phantom point + preview shape (cả 2 đều transient, không nằm trong\n * scene store). Phantom là invisible point JSXGraph theo cursor; preview\n * shape là live-preview của shape user đang dựng.\n */\nexport function removePhantom(\n board: JxgObj,\n refs: { previewShapeRef: { current: JxgObj }; phantomRef: { current: JxgObj } },\n): void {\n if (!board) return;\n if (refs.previewShapeRef.current) {\n safeJsx('previewActions.removePreviewShape', () => board.removeObject(refs.previewShapeRef.current));\n refs.previewShapeRef.current = null;\n }\n if (refs.phantomRef.current) {\n safeJsx('previewActions.removePhantom', () => board.removeObject(refs.phantomRef.current));\n refs.phantomRef.current = null;\n }\n}\n\n/**\n * Tear down old preview shape và build fresh từ current picks + phantom.\n * Phantom được tạo lazily — không spawn hidden point trước khi user có ít\n * nhất 1 real pick. Skip nếu tool variable-length (polygon: needs === -1)\n * vì handlers.ts emit per-vertex segments riêng qua previewSegRef.\n */\nexport function refreshPreviewShape(\n board: JxgObj,\n toolSM: ToolStateMachine<GeomTool>,\n refs: PreviewRefs,\n): void {\n if (!board) return;\n if (refs.previewShapeRef.current) {\n safeJsx('previewActions.removePreviewShape', () => board.removeObject(refs.previewShapeRef.current));\n refs.previewShapeRef.current = null;\n }\n const t = toolSM.toolRef.current;\n const toolDef = TOOLS.find((td) => td.key === t);\n if (!toolDef) return;\n const picks = refs.pendingRef.current;\n if (picks.length === 0 || toolDef.needs <= 0) return;\n if (picks.length >= toolDef.needs) return;\n if (!refs.phantomRef.current) {\n refs.phantomRef.current = createPhantomPoint(board);\n if (!refs.phantomRef.current) return;\n }\n refs.previewShapeRef.current = buildPreviewShape(board, toolDef, picks, refs.phantomRef.current);\n}\n","import type { Store } from '../../../core/scene/store';\n\nexport interface MutatePatch {\n attrs?: Record<string, unknown>;\n remove?: boolean;\n}\n\n/**\n * Áp patch từ PropertiesPopover lên scene store.\n *\n * PropertiesPopover phát attrs theo tên JSXGraph (strokeColor, strokeWidth,\n * withLabel, name, …). Scene attrs dùng tên ngắn gọn (color, width,\n * showLabel, …) và `label` là field top-level của SceneObject (không nằm\n * trong attrs). Map ở đây để popover khỏi cần biết shape của scene.\n *\n * - `remove: true` → dispatch DELETE.\n * - `attrs.name` (string) → dispatch UPDATE với `label` patch.\n * - JSXGraph attr names → scene names (strokeColor → color, strokeWidth →\n * width, withLabel → showLabel). `fillColor` cũng map sang `color` (fallback\n * khi popover không truyền strokeColor).\n */\nexport function applyMutatePatch(store: Store, id: string, patch: MutatePatch): void {\n if (patch.remove) {\n store.dispatch({ type: 'DELETE', payload: { id } });\n return;\n }\n if (!patch.attrs) return;\n const { name, withLabel, strokeColor, fillColor, strokeWidth, ...rest } = patch.attrs as {\n name?: unknown;\n withLabel?: unknown;\n strokeColor?: unknown;\n fillColor?: unknown;\n strokeWidth?: unknown;\n [k: string]: unknown;\n };\n if (typeof name === 'string') {\n store.dispatch({ type: 'UPDATE', payload: { id, patch: { label: name } } });\n }\n const mapped: Record<string, unknown> = { ...rest };\n // strokeColor / fillColor cùng đại diện cho cùng 1 thuộc tính `color` ở\n // scene. PropertiesPopover thường thêm sẵn `color` cùng strokeColor —\n // ưu tiên `color` (đã có trong rest); fallback strokeColor → fillColor.\n if (strokeColor !== undefined && mapped.color === undefined) mapped.color = strokeColor;\n if (fillColor !== undefined && mapped.color === undefined) mapped.color = fillColor;\n if (strokeWidth !== undefined && mapped.width === undefined) mapped.width = strokeWidth;\n if (withLabel !== undefined && mapped.showLabel === undefined) mapped.showLabel = withLabel;\n if (Object.keys(mapped).length > 0) {\n store.dispatch({ type: 'UPDATE_ATTRS', payload: { id, patch: mapped } });\n }\n}\n","import { listObjects } from '../../../core/scene';\nimport type { Store } from '../../../core/scene/store';\nimport type { JxgRenderer } from '../../../core/scene/render/JxgRenderer';\nimport { safeJsx } from '../../shared/safeJsx';\nimport { applyMutatePatch } from './attrMapping';\nimport { finalizeTransform, type HandlerCtx, type TransformToolKey } from './handlers';\nimport type {\n MiniBoardHandle,\n ObjectSnapshot,\n SelectionStateSnapshot,\n TransformPopoverInfo,\n} from './MiniBoard.types';\nimport { buildObjectSnapshot } from './snapshot';\n\n \ntype JxgObj = any;\n\nexport interface BuildHandleDeps {\n // refs\n containerRef: { readonly current: HTMLDivElement | null };\n boardRef: { readonly current: JxgObj };\n rendererRef: { readonly current: JxgRenderer | null };\n selectSubsRef: { readonly current: Set<(snap: ObjectSnapshot) => void> };\n transformSubsRef: { readonly current: Set<(info: TransformPopoverInfo) => void> };\n selectionStateSubsRef: { readonly current: Set<(snap: SelectionStateSnapshot | null) => void> };\n selectedSetRef: { readonly current: Set<string> };\n \n pendingTransformRef: { current: any };\n ctxRef: { readonly current: HandlerCtx | null };\n // callbacks / values\n store: Store;\n clearPending: () => void;\n clearSelection: () => void;\n deleteSelection: () => void;\n emitTransform: (info: TransformPopoverInfo) => void;\n}\n\n/**\n * Build MiniBoardHandle object cho `useImperativeHandle`. Methods read refs\n * trực tiếp nên handle có thể tạo trước khi board boot xong; gọi method\n * trước onReady?.() có thể trả stale refs.\n *\n * Tách ra file riêng để giảm size MiniBoard.tsx — handle có 25+ methods,\n * chiếm ~60 dòng object literal.\n */\nexport function buildMiniBoardHandle(d: BuildHandleDeps): MiniBoardHandle {\n return {\n getContainer: () => d.containerRef.current,\n getBbox: () => d.boardRef.current?.getBoundingBox() ?? [-10, 10, 10, -10],\n getState: () => d.store.getState(),\n getStore: () => d.store,\n highlight: (id) => { d.rendererRef.current?.highlight(id); },\n snapshotObject: (id, anchorScreen) => buildObjectSnapshot(d.store.getState(), id, anchorScreen),\n mutateObject: (id, patch) => applyMutatePatch(d.store, id, patch),\n getAllPointNames: () => listObjects(d.store.getState())\n .filter((o) => o.kind === 'point' || o.kind === 'intersection')\n .map((o) => o.label),\n onSelect: (cb) => {\n d.selectSubsRef.current.add(cb);\n return () => { d.selectSubsRef.current.delete(cb); };\n },\n onTransformParam: (cb) => {\n d.transformSubsRef.current.add(cb);\n return () => { d.transformSubsRef.current.delete(cb); };\n },\n onSelectionState: (cb) => {\n d.selectionStateSubsRef.current.add(cb);\n return () => { d.selectionStateSubsRef.current.delete(cb); };\n },\n confirmTransformParam: (value: number) => {\n const info = d.pendingTransformRef.current as\n | { tool: TransformToolKey; pendingIds: string[]; anchorScreen: { x: number; y: number } }\n | null;\n if (info && d.ctxRef.current) {\n safeJsx('buildHandle.finalizeTransform', () =>\n finalizeTransform(d.ctxRef.current!, info.tool, info.pendingIds, value),\n );\n }\n d.pendingTransformRef.current = null;\n d.emitTransform(null);\n d.clearPending();\n },\n cancelTransformParam: () => {\n d.pendingTransformRef.current = null;\n d.emitTransform(null);\n d.clearPending();\n },\n getSelectionSize: () => d.selectedSetRef.current.size,\n clearSelection: d.clearSelection,\n deleteSelection: d.deleteSelection,\n };\n}\n","import type { JxgRenderer } from '../../../core/scene/render/JxgRenderer';\n\n \ntype JxgObj = any;\n\n/**\n * Resolve scene id → JSXGraph object qua renderer's elements map.\n *\n * Synthetic \"<polyId>:border:<N>\" → polygon.borders[N]: cho phép preview\n * shape của tool perpendicular/parallel/tangent kéo theo cạnh đa giác làm\n * parent (border là sub-segment auto-tạo, không có scene id riêng).\n */\nexport function jxgFromSceneId(renderer: JxgRenderer | null, id: string): JxgObj {\n if (!renderer) return null;\n \n const elements = (renderer as any).elements as Map<string, JxgObj> | undefined;\n if (!elements) return null;\n const m = /^(.+):border:(\\d+)$/.exec(id);\n if (m) {\n \n const poly = elements.get(m[1]) as any;\n const idx = parseInt(m[2], 10);\n const borders = poly?.borders;\n if (Array.isArray(borders) && borders[idx]) return borders[idx];\n return null;\n }\n return elements.get(id) ?? null;\n}\n\n/**\n * Resolve JSXGraph object → scene id. Trước hết check reverse-map (cached),\n * sau đó dò polygon borders để trả synthetic \"<polyId>:border:<idx>\" cho\n * construct tools dùng cạnh đa giác như line input.\n */\nexport function jxgIdToSceneId(\n renderer: JxgRenderer | null,\n idMap: Map<string, string>,\n jxgObj: JxgObj,\n): string | null {\n if (!jxgObj?.id) return null;\n const direct = idMap.get(String(jxgObj.id));\n if (direct) return direct;\n if (!renderer) return null;\n \n const elements = (renderer as any).elements as Map<string, JxgObj> | undefined;\n if (!elements) return null;\n // Direct fallback: idMap rebuild qua store.subscribe có thể chạy TRƯỚC\n // JxgRenderer subscriber (cùng store, đăng ký theo order useEffect), nên\n // idMap luôn thiếu entry của object vừa được renderer tạo trong dispatch\n // hiện tại. Walk renderer.elements để bù.\n for (const [sid, el] of elements) {\n if (el === jxgObj) return sid;\n \n const borders = (el as any)?.borders;\n if (Array.isArray(borders)) {\n const idx = borders.indexOf(jxgObj);\n if (idx >= 0) return `${sid}:border:${idx}`;\n }\n }\n return null;\n}\n","import { useEffect } from 'react';\nimport { safeJsx } from '../../shared/safeJsx';\nimport { themeAxis, themeGrid } from './theme';\n\n \ntype JxgObj = any;\n\ninterface Params {\n boardRef: { readonly current: JxgObj };\n /** Refs giữ axis x/y JSXGraph objects để cleanup khi toggle off. */\n axisObjsRef: { current: { x?: JxgObj; y?: JxgObj } };\n isDarkRef: { readonly current: boolean };\n showAxis: boolean;\n showGrid: boolean;\n}\n\n/**\n * Sync hiển thị axis + grid khi user toggle qua LeftPanel.\n *\n * - Axis: tự tạo/xoá 2 axis object qua `boardRef.current.create('axis', ...)`.\n * - Grid: xoá grid cũ trong `board.objects` rồi tạo mới khi enable. Match\n * theme color (axis/grid) theo `isDarkRef.current`.\n *\n * Mỗi effect chạy độc lập theo `showAxis` / `showGrid` để switch nhanh\n * không re-do cả 2 mỗi lần toggle 1.\n */\nexport function useAxisGridSync({\n boardRef,\n axisObjsRef,\n isDarkRef,\n showAxis,\n showGrid,\n}: Params): void {\n useEffect(() => {\n const b = boardRef.current;\n if (!b) return;\n safeJsx('useAxisGridSync.toggleAxis', () => {\n if (axisObjsRef.current.x) {\n safeJsx('useAxisGridSync.removeAxisX', () => b.removeObject(axisObjsRef.current.x));\n axisObjsRef.current.x = undefined;\n }\n if (axisObjsRef.current.y) {\n safeJsx('useAxisGridSync.removeAxisY', () => b.removeObject(axisObjsRef.current.y));\n axisObjsRef.current.y = undefined;\n }\n if (showAxis) {\n axisObjsRef.current.x = b.create('axis', [[0, 0], [1, 0]], { strokeColor: themeAxis(isDarkRef.current), name: '', withLabel: false });\n axisObjsRef.current.y = b.create('axis', [[0, 0], [0, 1]], { strokeColor: themeAxis(isDarkRef.current), name: '', withLabel: false });\n }\n b.update();\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [showAxis]);\n\n useEffect(() => {\n const b = boardRef.current;\n if (!b) return;\n safeJsx('useAxisGridSync.toggleGrid', () => {\n for (const o of Object.values(b.objects || {}) as JxgObj[]) {\n if (o && (o.elType === 'grid' || o.type === 'grid' || (o.visProp && o.visProp.type === 'grid'))) {\n safeJsx('useAxisGridSync.removeGrid', () => b.removeObject(o));\n }\n }\n if (showGrid) b.create('grid', [], { strokeColor: themeGrid(isDarkRef.current), strokeOpacity: 1 });\n b.update();\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [showGrid]);\n}\n","import { useEffect } from 'react';\nimport type { Store } from '../../../core/scene/store';\n\ninterface Params {\n store: Store;\n /** Current selection ids — Delete/Backspace act on. */\n selectedSetRef: { readonly current: Set<string> };\n deleteSelection: () => void;\n}\n\n/**\n * Capture-phase keyboard shortcuts cho 2D editor:\n *\n * - Ctrl/Cmd+Z → undo\n * - Ctrl/Cmd+Shift+Z / Ctrl/Cmd+Y → redo\n * - Delete/Backspace → delete selection\n *\n * Esc cố ý KHÔNG xử lý ở đây — user nhấn Esc khi đang vẽ dở (mid-tool action)\n * không nên mất pending picks. Popovers (Properties/Transform) tự handle Esc\n * qua onKeyDown / document listener ở bubble phase.\n *\n * Capture phase + stopPropagation để win với Excalidraw's bubble handlers\n * (vốn nắm các phím tương tự). Ignore khi focus đang ở input/textarea/contentEditable.\n */\nexport function useEditorShortcuts({\n store,\n selectedSetRef,\n deleteSelection,\n}: Params): void {\n useEffect(() => {\n const onKey = (e: KeyboardEvent): void => {\n const ae = document.activeElement as HTMLElement | null;\n const inField = !!(ae && (ae.tagName === 'INPUT' || ae.tagName === 'TEXTAREA' || ae.isContentEditable));\n const lk = e.key.toLowerCase();\n if ((e.metaKey || e.ctrlKey) && lk === 'z' && !e.shiftKey) {\n if (inField) return;\n e.preventDefault(); e.stopPropagation(); store.undo(); return;\n }\n if ((e.metaKey || e.ctrlKey) && ((lk === 'z' && e.shiftKey) || (lk === 'y' && !e.shiftKey))) {\n if (inField) return;\n e.preventDefault(); e.stopPropagation(); store.redo(); return;\n }\n if ((e.key === 'Delete' || e.key === 'Backspace') && !inField && selectedSetRef.current.size > 0) {\n e.preventDefault(); e.stopPropagation(); deleteSelection();\n }\n };\n window.addEventListener('keydown', onKey, { capture: true });\n return () => window.removeEventListener('keydown', onKey, { capture: true });\n }, [store, selectedSetRef, deleteSelection]);\n}\n","import { useEffect, useRef } from 'react';\nimport type { Store } from '../../../core/scene/store';\nimport type { JxgRenderer } from '../../../core/scene/render/JxgRenderer';\n\n \ntype JxgObj = any;\n\ninterface Params {\n store: Store;\n rendererRef: { readonly current: JxgRenderer | null };\n}\n\ninterface Result {\n /** Reverse map: JSXGraph internal id (string) → scene id. */\n jxgIdToSceneRef: { readonly current: Map<string, string> };\n}\n\n/**\n * Maintain a reverse lookup `JSXGraph internal id → scene id`, rebuilt every\n * time store dispatches. Cần thiết vì JSXGraph events nắm element ref nhưng\n * scene logic chỉ biết scene id; map này cho phép translate ngược.\n *\n * Renderer's `elements` map (scene-id → JxgObj) là source of truth — hook\n * subscribe store + rebuild map mỗi event.\n */\nexport function useJxgSceneIdMap({ store, rendererRef }: Params): Result {\n const jxgIdToSceneRef = useRef<Map<string, string>>(new Map());\n useEffect(() => {\n const rebuild = (): void => {\n const r = rendererRef.current;\n if (!r) return;\n \n const elements: Map<string, JxgObj> | undefined = (r as any).elements;\n const next = new Map<string, string>();\n if (elements) {\n for (const [sid, jxg] of elements) {\n \n const jid = (jxg as any)?.id;\n if (jid) next.set(String(jid), sid);\n }\n }\n jxgIdToSceneRef.current = next;\n };\n rebuild();\n return store.subscribe(() => rebuild());\n }, [store, rendererRef]);\n return { jxgIdToSceneRef };\n}\n","'use client';\n/**\n * MiniBoard.tsx — JSXGraph mini-board cho geometry-2d editor.\n *\n * Sau Sub-PR 2.3.3 (Scene v2 Phase 2):\n * - Scene state qua `core/scene` Store + JxgRenderer (diff subscribe).\n * - Pointer handlers (handleDown/Up/Move) dispatch ADD/DELETE/UPDATE_ATTRS.\n * - Tool + pending picks qua `useToolStateMachine`.\n * - Selection = Set<sceneId> (UI state).\n * - Undo/Redo qua store (immer snapshot stack).\n *\n * EditorPanel/host/render.ts vẫn dùng API cũ — clean ở 2.3.4 / 2.3.7.\n */\n\nimport React, {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react';\nimport {\n nextLabel as sceneNextLabel,\n type Store,\n} from '../../../core/scene';\nimport { JxgRenderer } from '../../../core/scene/render/JxgRenderer';\nimport { DEFAULT_VIEW_2D } from '../../../core/scene/types';\nimport { handleDown, handleMove, handleUp, type HandlerCtx } from './handlers';\nimport {\n findNearestJxgPoint,\n objectsAt as objectsAtImpl,\n promoteToLabelOwner,\n screenCoordsOf as screenCoordsOfImpl,\n} from './hitTest';\nimport { paletteFor, themeAxis, themeGrid, themeLabel } from './theme';\nimport { GROUP_LABELS, TOOLS, type GeomTool, type ToolDef } from './tools';\nimport { useToolStateMachine } from '../../shared/useToolStateMachine';\nimport { safeJsx } from '../../shared/safeJsx';\nimport { attachJxgWheelZoom } from '../../shared/attachJxgWheelZoom';\nimport { initJxgBoard } from '../../shared/initJxgBoard';\nimport { buildObjectSnapshot } from './snapshot';\nimport {\n clearPreviewSegs as clearPreviewSegsImpl,\n removePhantom as removePhantomImpl,\n refreshPreviewShape,\n} from './previewActions';\nimport { buildMiniBoardHandle } from './buildHandle';\nimport {\n jxgFromSceneId as jxgFromSceneIdImpl,\n jxgIdToSceneId as jxgIdToSceneIdImpl,\n} from './idResolvers';\nimport { useAxisGridSync } from './useAxisGridSync';\nimport { useEditorShortcuts } from './useEditorShortcuts';\nimport { useJxgSceneIdMap } from './useJxgSceneIdMap';\n\nimport type { MiniBoardHandle, ObjectSnapshot, SelectionStateSnapshot, TransformPopoverInfo } from './MiniBoard.types';\n\nexport { TOOLS, GROUP_LABELS };\nexport type { GeomTool, ToolDef };\nexport type { ObjectSnapshot, SelectionStateSnapshot, TransformPopoverInfo, MiniBoardHandle } from './MiniBoard.types';\n\ntype JxgObj = any;\n\ninterface Props {\n /** Signal \"board boot xong\" — parent gọi handle methods qua ref sau khi nhận. */\n onReady?: () => void;\n /** Scene store do Host tạo qua `useStampStore`. View info đọc từ `store.getState().meta.view`. */\n store: Store;\n /** Tool hiện tại — host owns state (Tier 2 F). */\n selectedTool: GeomTool;\n /** Hiển thị axis — host owns state (Tier 2 F). */\n showAxis: boolean;\n /** Hiển thị grid — host owns state (Tier 2 F). */\n showGrid: boolean;\n isDark?: boolean;\n /** Toast hook từ EditorPanel ToastProvider — handlers dùng cho invalid construction. */\n toast?: import('../../shared/Toast').ShowToastFn;\n}\n\nexport const MiniBoard2D = forwardRef<MiniBoardHandle, Props>(function MiniBoard2D(\n { onReady, store, selectedTool, showAxis, showGrid, isDark, toast },\n ref,\n) {\n const isDarkRef = useRef(!!isDark); isDarkRef.current = !!isDark;\n const containerId = useId().replace(/:/g, '_') + '_jxgmini';\n const containerRef = useRef<HTMLDivElement>(null);\n const boardRef = useRef<JxgObj>(null);\n const jxgRef = useRef<JxgObj>(null);\n const rendererRef = useRef<JxgRenderer | null>(null);\n const axisObjsRef = useRef<{ x?: JxgObj; y?: JxgObj }>({});\n\n const toolSM = useToolStateMachine<GeomTool>(selectedTool);\n\n // bbox init đọc 1 lần lúc mount từ store.meta.view; axis/grid drive bằng prop.\n const initialMeta = store.getState().meta;\n const initialView = initialMeta.domain === '2d' ? initialMeta.view : DEFAULT_VIEW_2D;\n const showAxisRef = useRef(showAxis); showAxisRef.current = showAxis;\n const showGridRef = useRef(showGrid); showGridRef.current = showGrid;\n\n const selectedSetRef = useRef<Set<string>>(new Set());\n const [selectionTick, setSelectionTick] = useState(0);\n\n // Sync selection halo overlay + emit selection state snapshot khi\n // selectedSetRef đổi. Dùng tick để notify (selectedSetRef là ref nên\n // React không track trực tiếp).\n useEffect(() => {\n const ids = [...selectedSetRef.current];\n rendererRef.current?.highlight(ids);\n const anchor = lastClickClientRef.current ?? { x: 0, y: 0 };\n const snap: SelectionStateSnapshot | null =\n ids.length === 0 ? null : { ids, anchor: { x: anchor.x + 8, y: anchor.y + 8 } };\n selectionStateSubsRef.current.forEach((cb) =>\n safeJsx('MiniBoard.emitSelectionState.cb', () => cb(snap)),\n );\n }, [selectionTick]);\n\n // Pending / preview / marquee state.\n const pendingRef = useRef<JxgObj[]>([]);\n const previewSegRef = useRef<JxgObj[]>([]);\n const phantomRef = useRef<JxgObj>(null);\n const previewShapeRef = useRef<JxgObj>(null);\n const previewRafRef = useRef<number | null>(null);\n const marqueeRef = useRef<{ startSx: number; startSy: number; rect?: JxgObj } | null>(null);\n const moveDownRef = useRef<{ sx: number; sy: number } | null>(null);\n const lastMoveClickRef = useRef<{ id: string | null; time: number }>({ id: null, time: 0 });\n const lastClickClientRef = useRef<{ x: number; y: number } | null>(null);\n const pendingTransformRef = useRef<any>(null);\n\n // Subscribers cho popover (select + transform). Store-level changes propagate\n // qua `useEditorState` ở EditorPanel level — MiniBoard không owns store\n // subscription nữa (Tier 2 F).\n const selectSubsRef = useRef<Set<(snap: ObjectSnapshot) => void>>(new Set());\n const transformSubsRef = useRef<Set<(info: TransformPopoverInfo) => void>>(new Set());\n const selectionStateSubsRef = useRef<Set<(snap: SelectionStateSnapshot | null) => void>>(new Set());\n\n const { jxgIdToSceneRef } = useJxgSceneIdMap({ store, rendererRef });\n\n const jxgFromSceneId = useCallback(\n (id: string) => jxgFromSceneIdImpl(rendererRef.current, id),\n [],\n );\n const jxgIdToSceneId = useCallback(\n (jxgObj: JxgObj) => jxgIdToSceneIdImpl(rendererRef.current, jxgIdToSceneRef.current, jxgObj),\n [jxgIdToSceneRef],\n );\n\n // ─── Hit-test helpers ──────────────────────────────────────────────────────\n // Mỗi callback wrap pure function ở hitTest.ts, gom refs vào tham số.\n const screenCoordsOf = useCallback(\n (evt: JxgObj) => screenCoordsOfImpl(boardRef.current, containerRef.current, evt),\n [],\n );\n const objectsAt = useCallback(\n (evt: JxgObj) => objectsAtImpl(boardRef.current, containerRef.current, evt, [\n phantomRef.current,\n previewShapeRef.current,\n ...previewSegRef.current,\n ]),\n [],\n );\n const findNearestPointJxg = useCallback(\n (evt: JxgObj, tolPx = 12) =>\n findNearestJxgPoint(boardRef.current, containerRef.current, store.getState(), jxgFromSceneId, evt, tolPx),\n [jxgFromSceneId, store],\n );\n const promoteLabel = useCallback(\n (o: JxgObj) => promoteToLabelOwner(boardRef.current, o),\n [],\n );\n\n // ─── Selection / pending / preview actions ─────────────────────────────────\n const toggleSelect = useCallback((id: string, additive: boolean) => {\n if (!additive) { selectedSetRef.current.clear(); selectedSetRef.current.add(id); }\n else if (selectedSetRef.current.has(id)) selectedSetRef.current.delete(id);\n else selectedSetRef.current.add(id);\n rendererRef.current?.highlight([...selectedSetRef.current]);\n setSelectionTick((t) => t + 1);\n }, []);\n const clearSelection = useCallback(() => {\n selectedSetRef.current.clear();\n rendererRef.current?.highlight(null);\n setSelectionTick((t) => t + 1);\n }, []);\n const deleteSelection = useCallback(() => {\n if (selectedSetRef.current.size === 0) return;\n store.transaction((dispatch) => {\n for (const id of selectedSetRef.current) dispatch({ type: 'DELETE', payload: { id } });\n });\n selectedSetRef.current.clear();\n rendererRef.current?.highlight(null);\n setSelectionTick((t) => t + 1);\n }, [store]);\n\n const clearPreviewSegs = useCallback(\n () => clearPreviewSegsImpl(boardRef.current, previewSegRef),\n [],\n );\n const removePhantom = useCallback(\n () => removePhantomImpl(boardRef.current, { previewShapeRef, phantomRef }),\n [],\n );\n const clearPending = useCallback(() => {\n removePhantom();\n clearPreviewSegs();\n pendingRef.current = [];\n toolSM.clearPending();\n }, [clearPreviewSegs, removePhantom, toolSM]);\n const refreshPreview = useCallback(\n () => refreshPreviewShape(boardRef.current, toolSM, {\n previewSegRef, phantomRef, previewShapeRef, pendingRef,\n }),\n [toolSM],\n );\n\n // ─── Warning flash ─────────────────────────────────────────────────────────\n const [, setWarn] = useState<string | null>(null);\n const warnTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const flashWarn = useCallback((msg: string) => {\n if (warnTimerRef.current) clearTimeout(warnTimerRef.current);\n setWarn(msg);\n warnTimerRef.current = setTimeout(() => setWarn(null), 1800);\n }, []);\n useEffect(() => () => { if (warnTimerRef.current) clearTimeout(warnTimerRef.current); }, []);\n\n const nextLabelFor = useCallback(\n (kind: string): string => sceneNextLabel(store.getState(), kind),\n [store],\n );\n\n // ─── Snapshot + emit helpers ───────────────────────────────────────────────\n const buildSnapshot = useCallback(\n (id: string, anchorScreen: { x: number; y: number }): ObjectSnapshot | null =>\n buildObjectSnapshot(store.getState(), id, anchorScreen),\n [store],\n );\n const emitSelect = useCallback((info: { id: string; anchorScreen: { x: number; y: number } }) => {\n const snap = buildSnapshot(info.id, info.anchorScreen);\n if (!snap) return;\n selectSubsRef.current.forEach((cb) => safeJsx('MiniBoard.emitSelect.cb', () => cb(snap)));\n }, [buildSnapshot]);\n const emitTransform = useCallback((info: TransformPopoverInfo) => {\n transformSubsRef.current.forEach((cb) => safeJsx('MiniBoard.emitTransform.cb', () => cb(info)));\n }, []);\n\n // ─── Handler context (read latest refs at call time) ───────────────────────\n const ctxRef = useRef<HandlerCtx | null>(null);\n ctxRef.current = {\n boardRef,\n toolRef: toolSM.toolRef as { current: GeomTool },\n pendingRef,\n pendingIdsRef: toolSM.pendingIdsRef as { current: string[] },\n previewSegRef,\n axisObjsRef,\n selectedSetRef,\n marqueeRef,\n moveDownRef,\n lastMoveClickRef,\n lastClickClientRef,\n pendingTransformRef,\n phantomRef,\n previewShapeRef,\n previewRafRef,\n jxgRef,\n store,\n jxgIdToSceneId,\n jxgFromSceneId,\n screenCoordsOf,\n objectsAt,\n promoteLabel,\n findNearestPointJxg,\n toggleSelect,\n clearSelection,\n nextLabel: nextLabelFor,\n clearPending,\n clearPreviewSegs,\n refreshPreview,\n flashWarn,\n toast,\n emitTransform: emitTransform as HandlerCtx['emitTransform'],\n emitSelect: emitSelect as HandlerCtx['emitSelect'],\n setPendingCount: () => { /* derived from toolSM */ },\n setSelectionTick: (fn) => setSelectionTick(fn),\n };\n\n useEditorShortcuts({\n store,\n selectedSetRef,\n deleteSelection,\n });\n useAxisGridSync({ boardRef, axisObjsRef, isDarkRef, showAxis, showGrid });\n\n const handleToolChange = useCallback((t: GeomTool) => {\n clearPending();\n toolSM.setTool(t);\n const b = boardRef.current;\n if (b) safeJsx('MiniBoard.setPanForTool', () => {\n if (b.attr?.pan) b.attr.pan.enabled = (t !== 'select');\n });\n }, [clearPending, toolSM]);\n\n // Tier 2 F — host owns `selectedTool`. Sync prop → internal toolSM khi đổi.\n useEffect(() => {\n if (toolSM.toolRef.current !== selectedTool) handleToolChange(selectedTool);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedTool]);\n\n // ─── Board init (async JSXGraph load) ───────────────────────────────────────\n useEffect(() => {\n if (typeof window === 'undefined' || !containerRef.current) return;\n let cancelled = false;\n let wheelCleanup: (() => void) | null = null;\n let freeBoard: (() => void) | null = null;\n void (async () => {\n const { JXG, board, cleanup } = await initJxgBoard(containerId, {\n label: 'MiniBoard.2d',\n defaults: { disableElementHighlight: true },\n boardOptions: {\n boundingbox: initialView.bbox as [number, number, number, number],\n axis: false, grid: false,\n showCopyright: false, showNavigation: true,\n keepAspectRatio: true,\n pan: { enabled: true, needShift: false },\n zoom: { wheel: false },\n precision: { hasPoint: 8, mouse: 4, touch: 16 },\n },\n extraOptionTweaks: (opts) => {\n // Apply theme label/text stroke color sau common defaults. Selection\n // highlight (đỏ) chủ động qua JxgRenderer.highlight() — đã disable\n // JSXGraph hover-highlight qua defaults.disableElementHighlight.\n if (opts.label) opts.label.strokeColor = themeLabel(isDarkRef.current);\n if (opts.text) opts.text.strokeColor = themeLabel(isDarkRef.current);\n },\n });\n if (cancelled || !containerRef.current) { cleanup(); return; }\n jxgRef.current = JXG;\n boardRef.current = board;\n freeBoard = cleanup;\n\n rendererRef.current = new JxgRenderer(store, board, {\n theme: paletteFor(isDarkRef.current),\n });\n\n // Ctrl/Cmd + wheel zoom (Excalidraw-style).\n if (containerRef.current) {\n wheelCleanup = attachJxgWheelZoom(containerRef.current, board, 'MiniBoard.2d');\n }\n\n if (showAxisRef.current) safeJsx('MiniBoard.initAxes', () => {\n axisObjsRef.current.x = board.create('axis', [[0, 0], [1, 0]], { strokeColor: themeAxis(isDarkRef.current), name: '', withLabel: false });\n axisObjsRef.current.y = board.create('axis', [[0, 0], [0, 1]], { strokeColor: themeAxis(isDarkRef.current), name: '', withLabel: false });\n });\n if (showGridRef.current) safeJsx('MiniBoard.initGrid', () =>\n board.create('grid', [], { strokeColor: themeGrid(isDarkRef.current), strokeOpacity: 1 }),\n );\n\n const fire = (h: (ctx: HandlerCtx, e: JxgObj) => void) =>\n (e: JxgObj) => { if (ctxRef.current) h(ctxRef.current, e); };\n board.on('down', fire(handleDown));\n board.on('up', fire(handleUp));\n board.on('move', fire(handleMove));\n\n // Hover cursor: pointer khi di chuột qua bất kỳ object có scene id (loại\n // phantom + preview transient). Apply mọi tool — drag (move), snap target\n // (drawing tools), click-to-select (select). Reset về '' khi rời object.\n board.on('move', (e: JxgObj) => {\n const container = containerRef.current;\n if (!container) return;\n const hits = objectsAtImpl(boardRef.current, container, e, [\n phantomRef.current,\n previewShapeRef.current,\n ...previewSegRef.current,\n ]);\n container.style.cursor = hits.length > 0 ? 'pointer' : '';\n });\n\n onReady?.();\n })();\n return () => {\n cancelled = true;\n if (wheelCleanup) { wheelCleanup(); wheelCleanup = null; }\n if (previewRafRef.current != null) { cancelAnimationFrame(previewRafRef.current); previewRafRef.current = null; }\n rendererRef.current?.dispose();\n rendererRef.current = null;\n if (freeBoard) { freeBoard(); freeBoard = null; }\n boardRef.current = null;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [containerId]);\n\n // Handle delivery qua ref. Methods đọc trực tiếp từ refs — handle có thể\n // tạo trước khi board boot xong; gọi method trước onReady?.() sẽ trả stale\n // refs. Object literal được build ở `buildHandle.ts` để giảm size file.\n useImperativeHandle(\n ref,\n () => buildMiniBoardHandle({\n containerRef, boardRef, rendererRef,\n selectSubsRef, transformSubsRef, selectionStateSubsRef,\n selectedSetRef, pendingTransformRef, ctxRef,\n store,\n clearPending, clearSelection, deleteSelection,\n emitTransform,\n }),\n \n [store, clearSelection, deleteSelection, clearPending, emitTransform],\n );\n\n return (\n <div\n ref={containerRef}\n id={containerId}\n data-testid=\"jxgmini-container\"\n className=\"h-full min-h-0 bg-white\"\n style={{ touchAction: 'none' }}\n />\n );\n});\n","// 8 màu chính lấy từ Excalidraw DEFAULT_ELEMENT_STROKE_COLOR_PALETTE.\n// Nguồn: @excalidraw/excalidraw — packages/excalidraw/colors.ts (top row chuẩn).\n// Cần đồng bộ tay nếu Excalidraw đổi palette ở major bump.\nexport const STROKE_PALETTE = [\n '#1e1e1e', // black\n '#e03131', // red\n '#e8590c', // orange\n '#f08c00', // yellow\n '#2f9e44', // green\n '#1971c2', // blue\n '#9c36b5', // grape\n '#868e96', // gray\n] as const;\n\nexport type StrokeColor = (typeof STROKE_PALETTE)[number];\n","'use client';\n\nimport { useEffect, useState } from 'react';\n\nconst MOBILE_QUERY = '(max-width: 768px)';\nconst NO_HOVER_QUERY = '(hover: none)';\n\nexport interface MobileState {\n /** Viewport ≤ 768px — dùng để chuyển full-screen modal + drawer. */\n isMobile: boolean;\n /** Device không có hover (touch-only) — dùng để ẩn hover tooltips. */\n isTouchOnly: boolean;\n}\n\nfunction readMatch(query: string): boolean {\n if (typeof window === 'undefined' || !window.matchMedia) return false;\n try {\n return window.matchMedia(query).matches;\n } catch {\n return false;\n }\n}\n\n/**\n * SSR-safe mobile detection qua matchMedia. Trả về `{ isMobile, isTouchOnly }`.\n * Re-render khi viewport resize hoặc input modality đổi (e.g., gắn Bluetooth mouse).\n */\nexport function useIsMobile(): MobileState {\n const [state, setState] = useState<MobileState>(() => ({\n isMobile: readMatch(MOBILE_QUERY),\n isTouchOnly: readMatch(NO_HOVER_QUERY),\n }));\n\n useEffect(() => {\n if (typeof window === 'undefined' || !window.matchMedia) return;\n const mql = window.matchMedia(MOBILE_QUERY);\n const tql = window.matchMedia(NO_HOVER_QUERY);\n const update = () => {\n setState({ isMobile: mql.matches, isTouchOnly: tql.matches });\n };\n update();\n mql.addEventListener('change', update);\n tql.addEventListener('change', update);\n return () => {\n mql.removeEventListener('change', update);\n tql.removeEventListener('change', update);\n };\n }, []);\n\n return state;\n}\n","'use client';\nimport React, { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { STROKE_PALETTE } from '../../shared/excalidrawPalette';\nimport { useIsMobile } from '../../shared/useIsMobile';\n\nexport type ObjKind = 'point' | 'line' | 'circle';\nexport type PointFace = 'o' | 'circle' | 'cross' | 'plus';\n\nexport interface PropertyPatch {\n attrs?: Record<string, unknown>;\n remove?: boolean;\n /** Bật/tắt value-label động (độ dài segment / bán kính circle). */\n valueLabel?: boolean;\n}\n\ninterface CommonProps {\n anchor: { x: number; y: number };\n onClose: () => void;\n onMutate: (patch: PropertyPatch) => void;\n isDark?: boolean;\n /** Trả về danh sách tên point hiện có (để rename auto-disambiguate). */\n getAllNames?: () => string[];\n}\n\ninterface PointProps extends CommonProps {\n kind: 'point';\n currentName: string;\n currentColor: string;\n currentDash: number;\n currentWidth: number;\n currentFace: PointFace;\n /** Có đang hiện label tên không. */\n currentShowLabel?: boolean;\n}\n\ninterface LineOrCircleProps extends CommonProps {\n kind: 'line' | 'circle';\n currentName: string;\n currentColor: string;\n currentDash: number;\n currentWidth: number;\n /** Có đang hiện label tên không. */\n currentShowLabel?: boolean;\n /** Có đang hiện value-label động không. */\n currentShowValue?: boolean;\n}\n\ntype Props = PointProps | LineOrCircleProps;\n\nconst DASH_OPTIONS: Array<{ value: number; label: string }> = [\n { value: 0, label: 'Nét liền' },\n { value: 2, label: 'Nét đứt' },\n { value: 1, label: 'Nét chấm' },\n];\n\nconst WIDTH_OPTIONS = [1, 2, 3];\n\nconst FACE_OPTIONS: Array<{ value: PointFace; symbol: string }> = [\n { value: 'o', symbol: '●' },\n { value: 'circle', symbol: '◯' },\n { value: 'cross', symbol: '✕' },\n { value: 'plus', symbol: '✚' },\n];\n\n// Unicode subscript digits — dùng để tự đặt tên duy nhất khi user nhập trùng.\n// Lưu dưới dạng ký tự subscript thì JSXGraph SVG <text> render đúng \"B₂\"\n// như label một glyph, không cần MathJax/KaTeX.\nconst SUB_DIGITS = ['₀', '₁', '₂', '₃', '₄', '₅', '₆', '₇', '₈', '₉'];\nconst SUB_SET = new Set(SUB_DIGITS);\n\nfunction toSubscript(n: number): string {\n return String(n).split('').map((d) => SUB_DIGITS[+d] ?? d).join('');\n}\n\nfunction stripTrailingSubscript(s: string): string {\n let i = s.length;\n while (i > 0 && SUB_SET.has(s[i - 1])) i--;\n return s.slice(0, i);\n}\n\nfunction disambiguateName(name: string, existing: Set<string>): string {\n if (!name) return name;\n if (!existing.has(name)) return name;\n const base = stripTrailingSubscript(name) || name;\n for (let n = 2; n < 1000; n++) {\n const candidate = base + toSubscript(n);\n if (!existing.has(candidate)) return candidate;\n }\n return name;\n}\n\ntype Section = 'color' | 'style' | 'size' | 'name' | null;\n\n// Inline icons (small, monochrome) — match the visual weight of Excalidraw's\n// floating action bar in the screenshot. All 16px viewBox 24x24.\nconst Icons = {\n color: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M19 11 L11 3 L3 11 L11 19 Z\" />\n <path d=\"M19 11 L21 16 a2 2 0 1 1 -4 0 Z\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n ),\n style: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"5\" fill=\"currentColor\" /></svg>\n ),\n size: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\"><line x1=\"4\" y1=\"9\" x2=\"20\" y2=\"9\" strokeWidth=\"1\" /><line x1=\"4\" y1=\"13\" x2=\"20\" y2=\"13\" strokeWidth=\"2\" /><line x1=\"4\" y1=\"17\" x2=\"20\" y2=\"17\" strokeWidth=\"3.2\" /></svg>\n ),\n name: (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><text x=\"2\" y=\"17\" fontSize=\"14\" fontFamily=\"serif\" fontWeight=\"700\">A</text><text x=\"12\" y=\"17\" fontSize=\"11\" fontFamily=\"serif\" fontWeight=\"700\">a</text></svg>\n ),\n trash: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><polyline points=\"3,6 5,6 21,6\" /><path d=\"M19 6 l-1 14 a 2 2 0 0 1 -2 2 H 8 a 2 2 0 0 1 -2 -2 l-1 -14\" /><line x1=\"10\" y1=\"11\" x2=\"10\" y2=\"17\" /><line x1=\"14\" y1=\"11\" x2=\"14\" y2=\"17\" /></svg>\n ),\n};\n\nexport const PropertiesPopover: React.FC<Props> = (props) => {\n const { anchor, onClose, onMutate, isDark, getAllNames } = props;\n const rootRef = useRef<HTMLDivElement>(null);\n const [section, setSection] = useState<Section>(null);\n const { isMobile } = useIsMobile();\n // Clamp anchor vào viewport sau khi render (measure actual rect).\n // Trên mobile, force bottom-center thay vì follow anchor (anchor có thể nằm\n // sát mép màn hình hoặc dưới ngón tay user → khó tap).\n const [clamped, setClamped] = useState<{ left: number; top: number } | null>(null);\n useLayoutEffect(() => {\n if (typeof window === 'undefined') return;\n const margin = 8;\n if (isMobile) {\n // Bottom-center, 12px above bottom safe area.\n const rect = rootRef.current?.getBoundingClientRect();\n const w = rect?.width ?? 280;\n const left = Math.max(margin, (window.innerWidth - w) / 2);\n const top = window.innerHeight - (rect?.height ?? 80) - margin - 12;\n setClamped({ left, top: Math.max(margin, top) });\n return;\n }\n const rect = rootRef.current?.getBoundingClientRect();\n const w = rect?.width ?? 280;\n const h = rect?.height ?? 80;\n const left = Math.max(margin, Math.min(anchor.x, window.innerWidth - w - margin));\n const top = Math.max(margin, Math.min(anchor.y, window.innerHeight - h - margin));\n setClamped({ left, top });\n }, [anchor.x, anchor.y, isMobile, section]);\n\n const initialName =\n props.kind === 'point' ? props.currentName : (props.kind === 'line' || props.kind === 'circle') ? props.currentName : '';\n const [name, setName] = useState<string>(initialName);\n // Khi popover mở lại trên đối tượng khác, đồng bộ name input.\n useEffect(() => {\n setName(initialName);\n \n }, [initialName]);\n\n useEffect(() => {\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') { e.preventDefault(); onClose(); }\n };\n // PointerDown covers mouse + touch + pen — replaces legacy mousedown listener\n // which excluded touch/pen and broke click-outside trên mobile.\n const onPointerDown = (e: PointerEvent) => {\n if (!rootRef.current?.contains(e.target as Node)) onClose();\n };\n document.addEventListener('keydown', onKey);\n document.addEventListener('pointerdown', onPointerDown, { capture: true });\n return () => {\n document.removeEventListener('keydown', onKey);\n document.removeEventListener('pointerdown', onPointerDown, { capture: true } as EventListenerOptions);\n };\n }, [onClose]);\n\n const pickColor = (c: string) => {\n onMutate({ attrs: { strokeColor: c, fillColor: props.kind === 'circle' ? 'none' : c, color: c } });\n };\n const pickDash = (d: number) => onMutate({ attrs: { dash: d } });\n const pickWidth = (w: number) => onMutate({ attrs: { strokeWidth: w } });\n const pickFace = (f: PointFace) => onMutate({ attrs: { face: f } });\n\n const currentName = (props.kind === 'point' || props.kind === 'line' || props.kind === 'circle') ? props.currentName : '';\n const commitName = () => {\n const trimmed = name.trim();\n if (trimmed === currentName) return;\n // Cho phép xoá tên (empty); chỉ disambiguate khi user nhập 1 cái gì đó.\n let final = trimmed;\n if (trimmed) {\n const others = new Set((getAllNames?.() ?? []).filter((n) => n !== currentName));\n final = disambiguateName(trimmed, others);\n }\n if (final !== name) setName(final);\n onMutate({ attrs: { name: final } });\n };\n\n const toggleShowLabel = (next: boolean) => onMutate({ attrs: { withLabel: next } });\n const toggleShowValue = (next: boolean) => onMutate({ valueLabel: next });\n\n const doDelete = () => { onMutate({ remove: true }); onClose(); };\n\n const toggleSection = (s: Section) => setSection((cur) => (cur === s ? null : s));\n\n const currentColor = props.currentColor;\n const currentDash = props.currentDash;\n const currentWidth = props.currentWidth;\n\n // Hooks must be called unconditionally — before any early return\n const colorIndicatorTint = useMemo(() => currentColor, [currentColor]);\n\n if (typeof document === 'undefined') return null;\n\n // Pill toolbar: row of icon buttons, separator before trash. Click một icon\n // để bung panel chi tiết bên dưới. Trash xoá ngay (không có panel).\n const PillBtn = ({ id, label, icon, active, onClick, indicatorColor }: {\n id: string; label: string; icon: React.ReactNode; active?: boolean;\n onClick: () => void; indicatorColor?: string;\n }) => (\n <button\n type=\"button\"\n data-section={id}\n data-pill-btn={id}\n aria-label={label}\n aria-pressed={!!active}\n onClick={onClick}\n className={`relative flex h-8 w-8 items-center justify-center rounded-md transition ${\n active ? 'bg-slate-200 text-slate-900' : 'text-slate-700 hover:bg-slate-100'\n }`}\n >\n {icon}\n {indicatorColor && (\n <span\n aria-hidden\n className=\"absolute bottom-0.5 left-1/2 -translate-x-1/2 h-1 w-4 rounded-full\"\n style={{ background: indicatorColor }}\n />\n )}\n </button>\n );\n\n const pos = clamped ?? { left: anchor.x, top: anchor.y };\n const node = (\n <div\n ref={rootRef}\n data-stamp-area=\"true\"\n className={`${isDark ? 'theme--dark ' : ''}fixed z-[2147483600] flex flex-col gap-1.5`}\n style={{ left: pos.left, top: pos.top }}\n role=\"dialog\"\n aria-label=\"Thuộc tính đối tượng\"\n >\n {/* Pill toolbar */}\n <div className=\"flex items-center gap-1 rounded-full border border-slate-300 bg-white px-1.5 py-1 shadow-lg ring-1 ring-black/5\">\n <PillBtn id=\"color\" label=\"Màu\" icon={Icons.color} active={section === 'color'} onClick={() => toggleSection('color')} indicatorColor={colorIndicatorTint} />\n <PillBtn id=\"style\" label=\"Kiểu\" icon={Icons.style} active={section === 'style'} onClick={() => toggleSection('style')} />\n <PillBtn id=\"size\" label=\"Độ dày\" icon={Icons.size} active={section === 'size'} onClick={() => toggleSection('size')} />\n <PillBtn id=\"name\" label=\"Tên\" icon={Icons.name} active={section === 'name'} onClick={() => toggleSection('name')} />\n <span aria-hidden className=\"mx-0.5 h-5 w-px bg-slate-200\" />\n <PillBtn id=\"delete\" label=\"Xoá\" icon={Icons.trash} onClick={doDelete} />\n </div>\n\n {/* Sub-panel — chỉ hiện khi user chọn 1 icon */}\n {section && (\n <div className=\"w-[220px] rounded-lg border border-slate-300 bg-white p-3 shadow-2xl ring-1 ring-black/5\">\n {section === 'color' && (\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-[11px] font-medium text-slate-500\">Màu</span>\n <div className=\"flex flex-wrap gap-1\">\n {STROKE_PALETTE.map((c) => (\n <button\n key={c}\n aria-label={`Màu ${c}`}\n onClick={() => pickColor(c)}\n className={`h-6 w-6 rounded border ${currentColor === c ? 'border-emerald-500 ring-2 ring-emerald-300' : 'border-slate-200'}`}\n style={{ background: c }}\n />\n ))}\n </div>\n </div>\n )}\n\n {section === 'style' && (\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-[11px] font-medium text-slate-500\">Kiểu</span>\n {props.kind === 'point' ? (\n <div className=\"flex gap-1\">\n {FACE_OPTIONS.map((f) => (\n <button\n key={f.value}\n aria-label={`Hình ${f.value}`}\n onClick={() => pickFace(f.value)}\n className={`h-7 w-7 rounded border text-sm ${(props as PointProps).currentFace === f.value ? 'border-emerald-500 bg-emerald-50' : 'border-slate-300 bg-white'}`}\n >\n {f.symbol}\n </button>\n ))}\n </div>\n ) : (\n <div className=\"flex gap-1\">\n {DASH_OPTIONS.map((d) => (\n <button\n key={d.value}\n aria-label={`Kiểu ${d.label.toLowerCase()}`}\n onClick={() => pickDash(d.value)}\n className={`flex-1 rounded border px-1 py-1 text-[11px] ${currentDash === d.value ? 'border-emerald-500 bg-emerald-50' : 'border-slate-300 bg-white'}`}\n >\n {d.label}\n </button>\n ))}\n </div>\n )}\n </div>\n )}\n\n {section === 'size' && (\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-[11px] font-medium text-slate-500\">Độ dày</span>\n <div className=\"flex gap-1\">\n {WIDTH_OPTIONS.map((w) => (\n <button\n key={w}\n aria-label={`Độ dày ${w}`}\n onClick={() => pickWidth(w)}\n className={`flex-1 rounded border py-1 ${currentWidth === w ? 'border-emerald-500 bg-emerald-50' : 'border-slate-300 bg-white'}`}\n >\n <span className=\"inline-block rounded bg-slate-800\" style={{ width: 30, height: w }} />\n </button>\n ))}\n </div>\n </div>\n )}\n\n {section === 'name' && (\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-[11px] font-medium text-slate-500\">Tên</span>\n <input\n value={name}\n onChange={(e) => setName(e.target.value)}\n onBlur={commitName}\n onKeyDown={(e) => { if (e.key === 'Enter') { e.preventDefault(); commitName(); } }}\n autoFocus\n placeholder={props.kind === 'point' ? 'A, B, …' : props.kind === 'line' ? 'a, b, f, …' : 'O, c, …'}\n className=\"rounded border border-slate-300 bg-white px-2 py-1 text-sm text-slate-800\"\n />\n <span className=\"text-[10px] text-slate-400\">Trùng tên sẽ tự thêm chỉ số (B → B₂)</span>\n </div>\n\n <label className=\"flex items-center justify-between gap-2 text-[12px] text-slate-700\">\n <span>Hiển thị tên</span>\n <input\n type=\"checkbox\"\n checked={props.currentShowLabel !== false}\n onChange={(e) => toggleShowLabel(e.target.checked)}\n aria-label=\"Hiển thị tên\"\n />\n </label>\n\n {(props.kind === 'line' || props.kind === 'circle') && (\n <label className=\"flex items-center justify-between gap-2 text-[12px] text-slate-700\">\n <span>Hiển thị giá trị</span>\n <input\n type=\"checkbox\"\n checked={!!(props as LineOrCircleProps).currentShowValue}\n onChange={(e) => toggleShowValue(e.target.checked)}\n aria-label=\"Hiển thị giá trị\"\n />\n </label>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n );\n\n return createPortal(node, document.body);\n};\n","'use client';\n/**\n * MultiPropertiesPopover — popover compact cho multi-select (≥2 đối tượng).\n *\n * Khác với PropertiesPopover (single-select): chỉ phơi ra các action chung\n * cho mọi kind — đổi màu + xóa. Các trường kind-specific (face, dash, name,\n * showValue) bị ẩn vì không có ngữ nghĩa nhất quán trên selection nhiều kind\n * khác nhau.\n *\n * EditorPanel gọi `onColor(c)` cho mỗi id selected; `onDelete()` xóa tất cả.\n */\nimport React, { useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { STROKE_PALETTE } from '../../shared/excalidrawPalette';\nimport { useIsMobile } from '../../shared/useIsMobile';\n\ntype Section = 'color' | null;\n\nconst Icons = {\n color: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M19 11 L11 3 L3 11 L11 19 Z\" />\n <path d=\"M19 11 L21 16 a2 2 0 1 1 -4 0 Z\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n ),\n trash: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"3,6 5,6 21,6\" />\n <path d=\"M19 6 l-1 14 a 2 2 0 0 1 -2 2 H 8 a 2 2 0 0 1 -2 -2 l-1 -14\" />\n <line x1=\"10\" y1=\"11\" x2=\"10\" y2=\"17\" />\n <line x1=\"14\" y1=\"11\" x2=\"14\" y2=\"17\" />\n </svg>\n ),\n};\n\nexport interface MultiPropertiesPopoverProps {\n anchor: { x: number; y: number };\n count: number;\n isDark?: boolean;\n onColor: (color: string) => void;\n onDelete: () => void;\n onClose: () => void;\n}\n\nexport const MultiPropertiesPopover: React.FC<MultiPropertiesPopoverProps> = (props) => {\n const { anchor, count, isDark, onColor, onDelete, onClose } = props;\n const rootRef = useRef<HTMLDivElement>(null);\n const [section, setSection] = useState<Section>(null);\n const { isMobile } = useIsMobile();\n const [clamped, setClamped] = useState<{ left: number; top: number } | null>(null);\n\n useLayoutEffect(() => {\n if (typeof window === 'undefined') return;\n const margin = 8;\n if (isMobile) {\n const rect = rootRef.current?.getBoundingClientRect();\n const w = rect?.width ?? 220;\n const left = Math.max(margin, (window.innerWidth - w) / 2);\n const top = window.innerHeight - (rect?.height ?? 80) - margin - 12;\n setClamped({ left, top: Math.max(margin, top) });\n return;\n }\n const rect = rootRef.current?.getBoundingClientRect();\n const w = rect?.width ?? 220;\n const h = rect?.height ?? 80;\n const left = Math.max(margin, Math.min(anchor.x, window.innerWidth - w - margin));\n const top = Math.max(margin, Math.min(anchor.y, window.innerHeight - h - margin));\n setClamped({ left, top });\n }, [anchor.x, anchor.y, isMobile, section]);\n\n useEffect(() => {\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') { e.preventDefault(); onClose(); }\n };\n const onPointerDown = (e: PointerEvent) => {\n if (!rootRef.current?.contains(e.target as Node)) onClose();\n };\n document.addEventListener('keydown', onKey);\n document.addEventListener('pointerdown', onPointerDown, { capture: true });\n return () => {\n document.removeEventListener('keydown', onKey);\n document.removeEventListener('pointerdown', onPointerDown, { capture: true } as EventListenerOptions);\n };\n }, [onClose]);\n\n const toggleSection = (s: Section) => setSection((cur) => (cur === s ? null : s));\n const doDelete = () => { onDelete(); onClose(); };\n\n if (typeof document === 'undefined') return null;\n\n const PillBtn = ({ id, label, icon, active, onClick }: {\n id: string; label: string; icon: React.ReactNode; active?: boolean; onClick: () => void;\n }) => (\n <button\n type=\"button\"\n data-section={id}\n data-pill-btn={id}\n aria-label={label}\n aria-pressed={!!active}\n onClick={onClick}\n className={`relative flex h-8 w-8 items-center justify-center rounded-md transition ${\n active ? 'bg-slate-200 text-slate-900' : 'text-slate-700 hover:bg-slate-100'\n }`}\n >\n {icon}\n </button>\n );\n\n const pos = clamped ?? { left: anchor.x, top: anchor.y };\n const node = (\n <div\n ref={rootRef}\n data-stamp-area=\"true\"\n data-testid=\"multi-properties-popover\"\n className={`${isDark ? 'theme--dark ' : ''}fixed z-[2147483600] flex flex-col gap-1.5`}\n style={{ left: pos.left, top: pos.top }}\n role=\"dialog\"\n aria-label={`Thuộc tính (${count} đối tượng)`}\n >\n <div className=\"flex items-center gap-1 rounded-full border border-slate-300 bg-white px-1.5 py-1 shadow-lg ring-1 ring-black/5\">\n <span className=\"px-1 text-[11px] font-medium text-slate-500\">{count} đã chọn</span>\n <span aria-hidden className=\"mx-0.5 h-5 w-px bg-slate-200\" />\n <PillBtn id=\"color\" label=\"Đổi màu\" icon={Icons.color} active={section === 'color'} onClick={() => toggleSection('color')} />\n <span aria-hidden className=\"mx-0.5 h-5 w-px bg-slate-200\" />\n <PillBtn id=\"delete\" label=\"Xoá tất cả\" icon={Icons.trash} onClick={doDelete} />\n </div>\n\n {section === 'color' && (\n <div className=\"w-[220px] rounded-lg border border-slate-300 bg-white p-3 shadow-2xl ring-1 ring-black/5\">\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-[11px] font-medium text-slate-500\">Màu (áp cho {count} đối tượng)</span>\n <div className=\"flex flex-wrap gap-1\">\n {STROKE_PALETTE.map((c) => (\n <button\n key={c}\n aria-label={`Màu ${c}`}\n onClick={() => onColor(c)}\n className=\"h-6 w-6 rounded border border-slate-200\"\n style={{ background: c }}\n />\n ))}\n </div>\n </div>\n </div>\n )}\n </div>\n );\n\n return createPortal(node, document.body);\n};\n","'use client';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nexport type ParamKind = 'rotate' | 'dilate' | 'regularPolygon' | 'circleCR';\n\ninterface Props {\n kind: ParamKind;\n anchor: { x: number; y: number };\n defaultValue: number;\n onConfirm: (value: number) => void;\n onCancel: () => void;\n isDark?: boolean;\n}\n\nconst LABELS: Record<ParamKind, { aria: string; label: string; step: number; min?: number }> = {\n rotate: { aria: 'Góc quay', label: 'Góc (°)', step: 15 },\n dilate: { aria: 'Tỷ số k', label: 'Tỷ số k', step: 0.5 },\n regularPolygon: { aria: 'Số cạnh đa giác đều', label: 'Số cạnh (n ≥ 3)', step: 1, min: 3 },\n circleCR: { aria: 'Bán kính đường tròn', label: 'Bán kính', step: 0.5, min: 0 },\n};\n\nexport const TransformParamPopover: React.FC<Props> = ({ kind, anchor, defaultValue, onConfirm, onCancel, isDark }) => {\n const [value, setValue] = useState<number>(defaultValue);\n const inputRef = useRef<HTMLInputElement>(null);\n const meta = LABELS[kind];\n\n useEffect(() => { inputRef.current?.focus(); inputRef.current?.select(); }, []);\n\n const submit = () => {\n let v = Number.isFinite(value) ? value : defaultValue;\n if (kind === 'regularPolygon') {\n v = Math.max(3, Math.round(v));\n }\n onConfirm(v);\n };\n\n if (typeof document === 'undefined') return null;\n\n const node = (\n <div\n data-stamp-area=\"true\"\n className={`${isDark ? 'theme--dark ' : ''}fixed z-[2147483600] flex flex-col gap-2 rounded-lg border border-slate-300 bg-white p-3 shadow-2xl ring-1 ring-black/5`}\n style={{ left: anchor.x, top: anchor.y, minWidth: 180 }}\n role=\"dialog\"\n aria-label={meta.aria}\n >\n <label className=\"text-xs font-medium text-slate-700\">{meta.label}</label>\n <input\n ref={inputRef}\n type=\"number\"\n value={value}\n step={meta.step}\n min={meta.min}\n onChange={(e) => setValue(parseFloat(e.target.value))}\n onKeyDown={(e) => {\n if (e.key === 'Enter') { e.preventDefault(); submit(); }\n else if (e.key === 'Escape') { e.preventDefault(); onCancel(); }\n }}\n className=\"rounded border border-slate-300 bg-white px-2 py-1 text-sm text-slate-800\"\n />\n <div className=\"flex justify-end gap-2\">\n <button\n onClick={onCancel}\n className=\"rounded border border-slate-300 bg-white px-2 py-1 text-xs text-slate-700 hover:bg-slate-100\"\n >\n Huỷ\n </button>\n <button\n onClick={submit}\n className=\"rounded bg-emerald-600 px-2 py-1 text-xs font-medium text-white hover:bg-emerald-700\"\n >\n Áp dụng\n </button>\n </div>\n </div>\n );\n\n return createPortal(node, document.body);\n};\n","// src/stamps/shared/StampLeftPanel/constants.ts\n//\n// Desktop popover sizing chia sẻ giữa 3 stamp editor (geometry-2d, geometry-3d,\n// graph-2d). Trước đây mỗi EditorPanel hardcode size riêng (640×540 cho 2D/graph,\n// 800×600 cho 3D) → kích thước canvas nhỏ + không nhất quán. Gom vào constant\n// 880×700 + cap responsive để dùng được trên màn nhỏ.\n\n/** Tailwind class string áp cho outer popover của stamp editor (desktop). */\nexport const STAMP_PANEL_DESKTOP =\n 'h-[700px] w-[880px] max-h-[85vh] max-w-[calc(100vw-280px)]';\n","import React, {\n createContext,\n useCallback,\n useEffect,\n useMemo,\n useReducer,\n useRef,\n} from 'react';\nimport type { ShowToastFn, DismissToastFn, ToastItem, ToastOptions } from './types';\n\nexport interface ToastContextValue {\n items: ToastItem[];\n showToast: ShowToastFn;\n dismiss: DismissToastFn;\n}\n\nexport const ToastContext = createContext<ToastContextValue | null>(null);\n\ntype Action =\n | { type: 'PUSH'; item: ToastItem; maxVisible: number }\n | { type: 'REPLACE'; item: ToastItem }\n | { type: 'DISMISS'; id: string };\n\nfunction reducer(state: ToastItem[], action: Action): ToastItem[] {\n switch (action.type) {\n case 'PUSH': {\n const next = [...state, action.item];\n return next.length > action.maxVisible ? next.slice(next.length - action.maxVisible) : next;\n }\n case 'REPLACE':\n return state.map((it) => (it.id === action.item.id ? action.item : it));\n case 'DISMISS':\n return state.filter((it) => it.id !== action.id);\n }\n}\n\ninterface ToastProviderProps {\n children: React.ReactNode;\n /** Max simultaneously visible toasts. Default: 3. Pushing more drops oldest. */\n maxVisible?: number;\n}\n\nlet autoIdCounter = 0;\n\nexport function ToastProvider({ children, maxVisible = 3 }: ToastProviderProps) {\n const [items, dispatch] = useReducer(reducer, [] as ToastItem[]);\n const timersRef = useRef<Map<string, ReturnType<typeof setTimeout>>>(new Map());\n const itemsRef = useRef(items);\n itemsRef.current = items;\n\n const clearTimer = useCallback((id: string) => {\n const t = timersRef.current.get(id);\n if (t) {\n clearTimeout(t);\n timersRef.current.delete(id);\n }\n }, []);\n\n const dismiss = useCallback<DismissToastFn>((id) => {\n clearTimer(id);\n dispatch({ type: 'DISMISS', id });\n }, [clearTimer]);\n\n const scheduleAutoDismiss = useCallback((id: string, duration: number) => {\n if (duration <= 0) return;\n const t = setTimeout(() => dismiss(id), duration);\n timersRef.current.set(id, t);\n }, [dismiss]);\n\n const showToast = useCallback<ShowToastFn>((message, opts: ToastOptions = {}) => {\n const variant = opts.variant ?? 'info';\n const duration = opts.duration ?? 3000;\n const id = opts.id ?? `toast-${++autoIdCounter}`;\n const item: ToastItem = { id, message, variant, duration };\n const existing = itemsRef.current.find((it) => it.id === id);\n if (existing) {\n clearTimer(id);\n dispatch({ type: 'REPLACE', item });\n } else {\n dispatch({ type: 'PUSH', item, maxVisible });\n }\n scheduleAutoDismiss(id, duration);\n }, [clearTimer, maxVisible, scheduleAutoDismiss]);\n\n useEffect(() => () => {\n timersRef.current.forEach((t) => clearTimeout(t));\n timersRef.current.clear();\n }, []);\n\n const value = useMemo(() => ({ items, showToast, dismiss }), [items, showToast, dismiss]);\n return <ToastContext.Provider value={value}>{children}</ToastContext.Provider>;\n}\n","import React from 'react';\nimport type { ToastVariant } from './types';\n\nconst VARIANT_CLASS: Record<ToastVariant, string> = {\n info: 'border-l-sky-500',\n warning: 'border-l-amber-500',\n error: 'border-l-rose-500',\n};\n\nconst VARIANT_ICON: Record<ToastVariant, React.ReactNode> = {\n info: (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden>\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n ),\n warning: (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden>\n <path d=\"M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n ),\n error: (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden>\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\" />\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\" />\n </svg>\n ),\n};\n\ninterface ToastProps {\n id: string;\n message: string;\n variant: ToastVariant;\n onDismiss: (id: string) => void;\n}\n\nexport function Toast({ id, message, variant, onDismiss }: ToastProps) {\n return (\n <div\n role=\"status\"\n className={[\n 'pointer-events-auto flex max-w-sm items-start gap-2 rounded-lg border-l-4 bg-white px-3 py-2 text-sm text-slate-800 shadow-md ring-1 ring-black/5',\n VARIANT_CLASS[variant],\n ].join(' ')}\n >\n <span className=\"mt-0.5 shrink-0 text-slate-500\">{VARIANT_ICON[variant]}</span>\n <span className=\"flex-1 leading-snug\">{message}</span>\n <button\n type=\"button\"\n aria-label=\"Đóng thông báo\"\n onClick={() => onDismiss(id)}\n className=\"-mr-1 ml-1 inline-flex h-5 w-5 shrink-0 items-center justify-center rounded text-slate-400 hover:bg-slate-100 hover:text-slate-700\"\n >\n ×\n </button>\n </div>\n );\n}\n","import { useContext } from 'react';\nimport { ToastContext } from './ToastProvider';\n\nexport function useToast() {\n const ctx = useContext(ToastContext);\n if (!ctx) {\n throw new Error('useToast must be used inside <ToastProvider>');\n }\n return ctx;\n}\n","import React from 'react';\nimport { Toast } from './Toast';\nimport { useToast } from './useToast';\n\n/**\n * Renders the active toast queue. Mount once near the root of each stamp\n * EditorPanel (inside ToastProvider). Positions itself absolutely at\n * bottom-center of the nearest positioned ancestor.\n */\nexport function ToastHost() {\n const { items, dismiss } = useToast();\n if (items.length === 0) return null;\n return (\n <div\n aria-live=\"polite\"\n className=\"pointer-events-none absolute inset-x-0 bottom-3 z-50 flex flex-col items-center gap-2\"\n >\n {items.map((it) => (\n <Toast key={it.id} id={it.id} message={it.message} variant={it.variant} onDismiss={dismiss} />\n ))}\n </div>\n );\n}\n","export { ToastProvider } from './ToastProvider';\nexport { ToastHost } from './ToastHost';\nexport { Toast } from './Toast';\nexport { useToast } from './useToast';\nexport type {\n ToastVariant,\n ToastOptions,\n ToastItem,\n ShowToastFn,\n DismissToastFn,\n} from './types';\n","// src/stamps/geometry-2d/dsl/names.ts\nimport { z } from 'zod';\n\n// Label-style name: chữ cái Latin đầu, cho phép unicode prime (') + subscript ₀-₉.\n// Max length 12 ký tự. Phân biệt hoa/thường.\nexport const NameZ = z\n .string()\n .regex(/^[A-Za-z][A-Za-z0-9_'₀-₉]{0,11}$/);\n","// src/stamps/geometry-2d/dsl/kinds/_types.ts\nimport type { z } from 'zod';\nimport type { SceneObject } from '../../../../core/scene/types';\n\nexport type KindRole =\n | 'point'\n | 'segment'\n | 'line'\n | 'ray'\n | 'lineConstruction'\n | 'circle'\n | 'polygon';\n\nexport type KindCategory = 'points' | 'lines' | 'polygons' | 'circles' | 'compound';\n\n/** Vai trò ref mà một field của kind yêu cầu — dùng cho validateRefs registry-driven. */\nexport type RefRole =\n | 'point'\n | 'line-like'\n | 'circle'\n | 'segment'\n | 'shape'\n | 'any-existing';\n\nexport interface RefSpec {\n /** Tên field trên entity chứa ref (vd 'from', 'circle', 'vertices'). */\n field: string;\n role: RefRole;\n /** field là mảng tên (vd vertices[]). */\n many?: boolean;\n}\n\nexport interface EmitContext {\n /** Look up the scene-object id assigned to a DSL symbol name. */\n resolveId(name: string): string;\n /** Hint lookup for intersection-style emit needing to know what a referenced symbol is. */\n hintOf(name: string): KindRole;\n /** Generate a unique auxiliary id for an internal entity (not addressable from DSL). */\n mintAuxId(parentName: string, suffix: string): string;\n}\n\nexport interface EmittedEntity {\n /** The first emitted entity per kind MUST have role 'primary'. */\n role: 'primary' | 'auxiliary';\n object: SceneObject;\n}\n\nexport interface DslKindModule<TKind extends string = string, TInput = unknown> {\n kind: TKind;\n role: KindRole;\n category: KindCategory;\n prefix: string;\n schema: z.ZodObject<any>;\n collectRefs: (entity: TInput) => string[];\n /**\n * Khai báo ref requirements để validateRefs kiểm tra unknown/mismatch mà không\n * cần switch theo kind. Dạng hàm cho kind có ref phụ thuộc discriminated union\n * (vd pointAtDistance.distance). Kind chưa khai → validateRefs dùng legacy switch.\n */\n refSpecs?: readonly RefSpec[] | ((entity: TInput) => readonly RefSpec[]);\n emit: (entity: TInput, ctx: EmitContext) => EmittedEntity[];\n}\n\n/**\n * Factory that widens a typed module into the registry's generic shape.\n * Each kind module exports its module via this factory so `ALL_MODULES`\n * in registry.ts can be typed as ReadonlyArray<DslKindModule> without a cast.\n */\nexport function defineModule<TKind extends string, TInput>(\n m: DslKindModule<TKind, TInput>,\n): DslKindModule {\n return m as DslKindModule;\n}\n","// src/stamps/geometry-2d/dsl/kinds/_shared.ts\nimport type { SceneObject } from '../../../../core/scene/types';\nimport type { EmitContext } from './_types';\n\nexport const POINT_BASE_FIELDS = {\n visible: true,\n locked: false,\n layer: 'default',\n schemaVersion: 1,\n} as const;\n\n/** Wrap a Constraint2D-style attrs into a primary 'point' SceneObject. */\nexport function emitPointObject(\n id: string,\n name: string,\n constraint: Record<string, unknown>,\n visible = true,\n): SceneObject {\n return {\n id,\n kind: 'point',\n label: name,\n ...POINT_BASE_FIELDS,\n visible,\n attrs: { constraint },\n };\n}\n\n/** Resolve a triangle's 3 vertex ids. */\nexport function resolveTriangleVertices(\n ctx: EmitContext,\n vertices: readonly [string, string, string],\n): [string, string, string] {\n return [ctx.resolveId(vertices[0]), ctx.resolveId(vertices[1]), ctx.resolveId(vertices[2])];\n}\n\nexport const SHAPE_BASE_FIELDS = {\n visible: true,\n locked: false,\n layer: 'default',\n schemaVersion: 1,\n} as const;\n","// src/stamps/geometry-2d/dsl/kinds/points/free.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslPointT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { emitPointObject } from '../_shared';\n\ntype Input = Extract<DslPointT, { kind: 'free' }>;\n\nexport const freeModule = defineModule<'free', Input>({\n kind: 'free',\n role: 'point',\n category: 'points',\n prefix: 'p',\n schema: z.object({\n name: NameZ,\n kind: z.literal('free'),\n x: z.number().finite(),\n y: z.number().finite(),\n }),\n collectRefs: () => [],\n emit: (e, ctx) => [{\n role: 'primary',\n object: emitPointObject(ctx.resolveId(e.name), e.name, { kind: 'free', x: e.x, y: e.y }),\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/points/midpoint.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslPointT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { emitPointObject } from '../_shared';\n\ntype Input = Extract<DslPointT, { kind: 'midpoint' }>;\n\nexport const midpointModule = defineModule<'midpoint', Input>({\n kind: 'midpoint',\n role: 'point',\n category: 'points',\n prefix: 'p',\n schema: z.object({\n name: NameZ,\n kind: z.literal('midpoint'),\n p1: NameZ,\n p2: NameZ,\n visible: z.boolean().optional(),\n }),\n collectRefs: (e) => [e.p1, e.p2],\n emit: (e, ctx) => [{\n role: 'primary',\n object: emitPointObject(\n ctx.resolveId(e.name),\n e.name,\n { kind: 'midpoint', p1: ctx.resolveId(e.p1), p2: ctx.resolveId(e.p2) },\n e.visible ?? true,\n ),\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/points/onSegment.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslPointT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { emitPointObject } from '../_shared';\n\ntype Input = Extract<DslPointT, { kind: 'onSegment' }>;\n\nexport const onSegmentModule = defineModule<'onSegment', Input>({\n kind: 'onSegment',\n role: 'point',\n category: 'points',\n prefix: 'p',\n schema: z.object({\n name: NameZ,\n kind: z.literal('onSegment'),\n segmentId: NameZ,\n t: z.number().min(0).max(1),\n }),\n collectRefs: (e) => [e.segmentId],\n emit: (e, ctx) => [{\n role: 'primary',\n object: emitPointObject(\n ctx.resolveId(e.name),\n e.name,\n { kind: 'onSegment', segmentId: ctx.resolveId(e.segmentId), t: e.t },\n ),\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/points/onLine.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslPointT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { emitPointObject } from '../_shared';\n\ntype Input = Extract<DslPointT, { kind: 'onLine' }>;\n\nexport const onLineModule = defineModule<'onLine', Input>({\n kind: 'onLine',\n role: 'point',\n category: 'points',\n prefix: 'p',\n schema: z.object({\n name: NameZ,\n kind: z.literal('onLine'),\n lineId: NameZ,\n t: z.number().finite(),\n }),\n collectRefs: (e) => [e.lineId],\n emit: (e, ctx) => [{\n role: 'primary',\n object: emitPointObject(\n ctx.resolveId(e.name),\n e.name,\n { kind: 'onLine', lineId: ctx.resolveId(e.lineId), t: e.t },\n ),\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/points/onCircle.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslPointT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { emitPointObject } from '../_shared';\n\ntype Input = Extract<DslPointT, { kind: 'onCircle' }>;\n\nexport const onCircleModule = defineModule<'onCircle', Input>({\n kind: 'onCircle',\n role: 'point',\n category: 'points',\n prefix: 'p',\n schema: z.object({\n name: NameZ,\n kind: z.literal('onCircle'),\n circleId: NameZ,\n theta: z.number().finite(),\n }),\n collectRefs: (e) => [e.circleId],\n emit: (e, ctx) => [{\n role: 'primary',\n object: emitPointObject(\n ctx.resolveId(e.name),\n e.name,\n { kind: 'onCircle', circleId: ctx.resolveId(e.circleId), theta: e.theta },\n ),\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/points/perpFoot.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslPointT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { emitPointObject } from '../_shared';\n\ntype Input = Extract<DslPointT, { kind: 'perpFoot' }>;\n\nexport const perpFootModule = defineModule<'perpFoot', Input>({\n kind: 'perpFoot',\n role: 'point',\n category: 'points',\n prefix: 'p',\n schema: z.object({\n name: NameZ,\n kind: z.literal('perpFoot'),\n from: NameZ,\n onLine: NameZ,\n }),\n collectRefs: (e) => [e.from, e.onLine],\n emit: (e, ctx) => [{\n role: 'primary',\n object: emitPointObject(\n ctx.resolveId(e.name),\n e.name,\n { kind: 'perpFoot', from: ctx.resolveId(e.from), onLine: ctx.resolveId(e.onLine) },\n ),\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/points/circumcenter.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslPointT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { emitPointObject, resolveTriangleVertices } from '../_shared';\n\ntype Input = Extract<DslPointT, { kind: 'circumcenter' }>;\n\nexport const circumcenterModule = defineModule<'circumcenter', Input>({\n kind: 'circumcenter',\n role: 'point',\n category: 'points',\n prefix: 'p',\n schema: z.object({\n name: NameZ,\n kind: z.literal('circumcenter'),\n vertices: z.tuple([NameZ, NameZ, NameZ]),\n }),\n collectRefs: (e) => [...e.vertices],\n emit: (e, ctx) => [{\n role: 'primary',\n object: emitPointObject(\n ctx.resolveId(e.name),\n e.name,\n { kind: 'circumcenter', vertices: resolveTriangleVertices(ctx, e.vertices) },\n ),\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/points/incenter.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslPointT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { emitPointObject, resolveTriangleVertices } from '../_shared';\n\ntype Input = Extract<DslPointT, { kind: 'incenter' }>;\n\nexport const incenterModule = defineModule<'incenter', Input>({\n kind: 'incenter',\n role: 'point',\n category: 'points',\n prefix: 'p',\n schema: z.object({\n name: NameZ,\n kind: z.literal('incenter'),\n vertices: z.tuple([NameZ, NameZ, NameZ]),\n }),\n collectRefs: (e) => [...e.vertices],\n emit: (e, ctx) => [{\n role: 'primary',\n object: emitPointObject(\n ctx.resolveId(e.name),\n e.name,\n { kind: 'incenter', vertices: resolveTriangleVertices(ctx, e.vertices) },\n ),\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/points/centroid.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslPointT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { emitPointObject, resolveTriangleVertices } from '../_shared';\n\ntype Input = Extract<DslPointT, { kind: 'centroid' }>;\n\nexport const centroidModule = defineModule<'centroid', Input>({\n kind: 'centroid',\n role: 'point',\n category: 'points',\n prefix: 'p',\n schema: z.object({\n name: NameZ,\n kind: z.literal('centroid'),\n vertices: z.tuple([NameZ, NameZ, NameZ]),\n }),\n collectRefs: (e) => [...e.vertices],\n emit: (e, ctx) => [{\n role: 'primary',\n object: emitPointObject(\n ctx.resolveId(e.name),\n e.name,\n { kind: 'centroid', vertices: resolveTriangleVertices(ctx, e.vertices) },\n ),\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/points/orthocenter.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslPointT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { emitPointObject, resolveTriangleVertices } from '../_shared';\n\ntype Input = Extract<DslPointT, { kind: 'orthocenter' }>;\n\nexport const orthocenterModule = defineModule<'orthocenter', Input>({\n kind: 'orthocenter',\n role: 'point',\n category: 'points',\n prefix: 'p',\n schema: z.object({\n name: NameZ,\n kind: z.literal('orthocenter'),\n vertices: z.tuple([NameZ, NameZ, NameZ]),\n }),\n collectRefs: (e) => [...e.vertices],\n emit: (e, ctx) => [{\n role: 'primary',\n object: emitPointObject(\n ctx.resolveId(e.name),\n e.name,\n { kind: 'orthocenter', vertices: resolveTriangleVertices(ctx, e.vertices) },\n ),\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/points/intersection.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslPointT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { POINT_BASE_FIELDS } from '../_shared';\n\ntype Input = Extract<DslPointT, { kind: 'intersection' }>;\n\nexport const intersectionModule = defineModule<'intersection', Input>({\n kind: 'intersection',\n role: 'point',\n category: 'points',\n prefix: 'i',\n schema: z.object({\n name: NameZ,\n kind: z.literal('intersection'),\n ref1: NameZ,\n ref2: NameZ,\n branch: z.union([z.literal(0), z.literal(1)]).optional(),\n }),\n collectRefs: (e) => [e.ref1, e.ref2],\n emit: (e, ctx) => {\n const r1IsCircle = ctx.hintOf(e.ref1) === 'circle';\n const r2IsCircle = ctx.hintOf(e.ref2) === 'circle';\n let intersectKind: 'lineLine' | 'lineCircle' | 'circleCircle';\n if (r1IsCircle && r2IsCircle) intersectKind = 'circleCircle';\n else if (r1IsCircle || r2IsCircle) intersectKind = 'lineCircle';\n else intersectKind = 'lineLine';\n\n const attrs: Record<string, unknown> = {\n kind: intersectKind,\n ref1: ctx.resolveId(e.ref1),\n ref2: ctx.resolveId(e.ref2),\n };\n if (intersectKind !== 'lineLine') {\n attrs.branch = e.branch ?? 0;\n }\n return [{\n role: 'primary',\n object: {\n id: ctx.resolveId(e.name),\n kind: 'intersection',\n label: e.name,\n ...POINT_BASE_FIELDS,\n attrs,\n },\n }];\n },\n});\n","// src/stamps/geometry-2d/dsl/kinds/lines/segment.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslShapeT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { SHAPE_BASE_FIELDS } from '../_shared';\n\ntype Input = Extract<DslShapeT, { kind: 'segment' }>;\n\nexport const segmentModule = defineModule<'segment', Input>({\n kind: 'segment',\n role: 'segment',\n category: 'lines',\n prefix: 's',\n schema: z.object({\n name: NameZ,\n kind: z.literal('segment'),\n p1: NameZ,\n p2: NameZ,\n }),\n collectRefs: (e) => [e.p1, e.p2],\n emit: (e, ctx) => [{\n role: 'primary',\n object: {\n id: ctx.resolveId(e.name),\n kind: 'segment',\n label: e.name,\n ...SHAPE_BASE_FIELDS,\n attrs: { p1: ctx.resolveId(e.p1), p2: ctx.resolveId(e.p2) },\n },\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/lines/line.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslShapeT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { SHAPE_BASE_FIELDS } from '../_shared';\n\ntype Input = Extract<DslShapeT, { kind: 'line' }>;\n\nexport const lineModule = defineModule<'line', Input>({\n kind: 'line',\n role: 'line',\n category: 'lines',\n prefix: 'l',\n schema: z.object({\n name: NameZ,\n kind: z.literal('line'),\n p1: NameZ,\n p2: NameZ,\n }),\n collectRefs: (e) => [e.p1, e.p2],\n emit: (e, ctx) => [{\n role: 'primary',\n object: {\n id: ctx.resolveId(e.name),\n kind: 'line',\n label: e.name,\n ...SHAPE_BASE_FIELDS,\n attrs: { p1: ctx.resolveId(e.p1), p2: ctx.resolveId(e.p2) },\n },\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/lines/ray.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslShapeT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { SHAPE_BASE_FIELDS } from '../_shared';\n\ntype Input = Extract<DslShapeT, { kind: 'ray' }>;\n\nexport const rayModule = defineModule<'ray', Input>({\n kind: 'ray',\n role: 'ray',\n category: 'lines',\n prefix: 'r',\n schema: z.object({\n name: NameZ,\n kind: z.literal('ray'),\n origin: NameZ,\n through: NameZ,\n }),\n collectRefs: (e) => [e.origin, e.through],\n emit: (e, ctx) => [{\n role: 'primary',\n object: {\n id: ctx.resolveId(e.name),\n kind: 'ray',\n label: e.name,\n ...SHAPE_BASE_FIELDS,\n attrs: { origin: ctx.resolveId(e.origin), through: ctx.resolveId(e.through) },\n },\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/lines/perpendicular.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslShapeT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { SHAPE_BASE_FIELDS } from '../_shared';\n\ntype Input = Extract<DslShapeT, { kind: 'perpendicular' }>;\n\nexport const perpendicularModule = defineModule<'perpendicular', Input>({\n kind: 'perpendicular',\n role: 'lineConstruction',\n category: 'lines',\n prefix: 'l',\n schema: z.object({\n name: NameZ,\n kind: z.literal('perpendicular'),\n throughPoint: NameZ,\n toLine: NameZ,\n }),\n collectRefs: (e) => [e.throughPoint, e.toLine],\n emit: (e, ctx) => [{\n role: 'primary',\n object: {\n id: ctx.resolveId(e.name),\n kind: 'line',\n label: e.name,\n ...SHAPE_BASE_FIELDS,\n attrs: {\n construction: {\n kind: 'perpendicular',\n throughPoint: ctx.resolveId(e.throughPoint),\n toLine: ctx.resolveId(e.toLine),\n },\n },\n },\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/lines/parallel.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslShapeT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { SHAPE_BASE_FIELDS } from '../_shared';\n\ntype Input = Extract<DslShapeT, { kind: 'parallel' }>;\n\nexport const parallelModule = defineModule<'parallel', Input>({\n kind: 'parallel',\n role: 'lineConstruction',\n category: 'lines',\n prefix: 'l',\n schema: z.object({\n name: NameZ,\n kind: z.literal('parallel'),\n throughPoint: NameZ,\n toLine: NameZ,\n }),\n collectRefs: (e) => [e.throughPoint, e.toLine],\n emit: (e, ctx) => [{\n role: 'primary',\n object: {\n id: ctx.resolveId(e.name),\n kind: 'line',\n label: e.name,\n ...SHAPE_BASE_FIELDS,\n attrs: {\n construction: {\n kind: 'parallel',\n throughPoint: ctx.resolveId(e.throughPoint),\n toLine: ctx.resolveId(e.toLine),\n },\n },\n },\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/lines/perpBisector.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslShapeT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { SHAPE_BASE_FIELDS } from '../_shared';\n\ntype Input = Extract<DslShapeT, { kind: 'perpBisector' }>;\n\nexport const perpBisectorModule = defineModule<'perpBisector', Input>({\n kind: 'perpBisector',\n role: 'lineConstruction',\n category: 'lines',\n prefix: 'l',\n schema: z.object({\n name: NameZ,\n kind: z.literal('perpBisector'),\n p1: NameZ,\n p2: NameZ,\n }),\n collectRefs: (e) => [e.p1, e.p2],\n emit: (e, ctx) => [{\n role: 'primary',\n object: {\n id: ctx.resolveId(e.name),\n kind: 'line',\n label: e.name,\n ...SHAPE_BASE_FIELDS,\n attrs: {\n construction: {\n kind: 'perpBisector',\n p1: ctx.resolveId(e.p1),\n p2: ctx.resolveId(e.p2),\n },\n },\n },\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/lines/angleBisector.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslShapeT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { SHAPE_BASE_FIELDS } from '../_shared';\n\ntype Input = Extract<DslShapeT, { kind: 'angleBisector' }>;\n\nexport const angleBisectorModule = defineModule<'angleBisector', Input>({\n kind: 'angleBisector',\n role: 'lineConstruction',\n category: 'lines',\n prefix: 'l',\n schema: z.object({\n name: NameZ,\n kind: z.literal('angleBisector'),\n p1: NameZ,\n vertex: NameZ,\n p2: NameZ,\n }),\n collectRefs: (e) => [e.p1, e.vertex, e.p2],\n emit: (e, ctx) => [{\n role: 'primary',\n object: {\n id: ctx.resolveId(e.name),\n kind: 'line',\n label: e.name,\n ...SHAPE_BASE_FIELDS,\n attrs: {\n construction: {\n kind: 'angleBisector',\n p1: ctx.resolveId(e.p1),\n vertex: ctx.resolveId(e.vertex),\n p2: ctx.resolveId(e.p2),\n },\n },\n },\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/lines/lineThrough.ts\n//\n// Đường thẳng qua ≥2 điểm đồng tuyến (vd 3 tâm Euler G/H/O). Render là đường\n// VÔ HẠN qua 2 điểm xa nhau nhất (ổn định số học). Kind tổng quát role\n// 'lineConstruction' — tái dùng cho Euler line (issue #47) và sau này Simson.\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslShapeT } from '../../schema';\nimport { defineModule } from '../_types';\nimport type { RefSpec } from '../_types';\nimport { SHAPE_BASE_FIELDS } from '../_shared';\n\ntype Input = Extract<DslShapeT, { kind: 'lineThrough' }>;\n\nexport const lineThroughModule = defineModule<'lineThrough', Input>({\n kind: 'lineThrough',\n role: 'lineConstruction',\n category: 'lines',\n prefix: 'l',\n schema: z.object({\n name: NameZ,\n kind: z.literal('lineThrough'),\n points: z.array(NameZ).min(2),\n }),\n collectRefs: (e) => [...e.points],\n refSpecs: [{ field: 'points', role: 'point', many: true }] as readonly RefSpec[],\n emit: (e, ctx) => [{\n role: 'primary',\n object: {\n id: ctx.resolveId(e.name),\n kind: 'line',\n label: e.name,\n ...SHAPE_BASE_FIELDS,\n attrs: {\n construction: {\n kind: 'lineThrough',\n points: e.points.map((p) => ctx.resolveId(p)),\n },\n },\n },\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/lines/radicalAxis.ts\n//\n// Trục đẳng phương 2 đường tròn (issue #47, construct 2): đường ⊥ đường nối tâm\n// O₁O₂, mọi điểm trên nó có lũy thừa (power) bằng nhau với 2 đường tròn. Kind\n// role 'lineConstruction' nhưng tham chiếu 2 CIRCLE (không phải điểm) — mirror\n// `lineThrough` về cấu trúc, khác ở refSpecs role 'circle'.\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslShapeT } from '../../schema';\nimport { defineModule } from '../_types';\nimport type { RefSpec } from '../_types';\nimport { SHAPE_BASE_FIELDS } from '../_shared';\n\ntype Input = Extract<DslShapeT, { kind: 'radicalAxis' }>;\n\nexport const radicalAxisModule = defineModule<'radicalAxis', Input>({\n kind: 'radicalAxis',\n role: 'lineConstruction',\n category: 'lines',\n prefix: 'l',\n schema: z.object({\n name: NameZ,\n kind: z.literal('radicalAxis'),\n circle1: NameZ,\n circle2: NameZ,\n }),\n collectRefs: (e) => [e.circle1, e.circle2],\n refSpecs: [\n { field: 'circle1', role: 'circle' },\n { field: 'circle2', role: 'circle' },\n ] as readonly RefSpec[],\n emit: (e, ctx) => [{\n role: 'primary',\n object: {\n id: ctx.resolveId(e.name),\n kind: 'line',\n label: e.name,\n ...SHAPE_BASE_FIELDS,\n attrs: {\n construction: {\n kind: 'radicalAxis',\n circle1: ctx.resolveId(e.circle1),\n circle2: ctx.resolveId(e.circle2),\n },\n },\n },\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/lines/tangent.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslShapeT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { SHAPE_BASE_FIELDS } from '../_shared';\n\ntype Input = Extract<DslShapeT, { kind: 'tangent' }>;\n\nexport const tangentModule = defineModule<'tangent', Input>({\n kind: 'tangent',\n role: 'lineConstruction',\n category: 'lines',\n prefix: 'l',\n schema: z.object({\n name: NameZ,\n kind: z.literal('tangent'),\n throughPoint: NameZ,\n toCircle: NameZ,\n branch: z.union([z.literal(0), z.literal(1), z.literal('on')]).optional(),\n }),\n collectRefs: (e) => [e.throughPoint, e.toCircle],\n emit: (e, ctx) => {\n const construction: Record<string, unknown> = {\n kind: 'tangent',\n throughPoint: ctx.resolveId(e.throughPoint),\n toCircle: ctx.resolveId(e.toCircle),\n };\n if (e.branch !== undefined) construction.branch = e.branch;\n return [{\n role: 'primary',\n object: {\n id: ctx.resolveId(e.name),\n kind: 'line',\n label: e.name,\n ...SHAPE_BASE_FIELDS,\n attrs: { construction },\n },\n }];\n },\n});\n","// src/stamps/geometry-2d/dsl/kinds/polygons/polygon.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslShapeT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { SHAPE_BASE_FIELDS } from '../_shared';\n\ntype Input = Extract<DslShapeT, { kind: 'polygon' }>;\n\nexport const polygonModule = defineModule<'polygon', Input>({\n kind: 'polygon',\n role: 'polygon',\n category: 'polygons',\n prefix: 'poly',\n schema: z.object({\n name: NameZ,\n kind: z.literal('polygon'),\n vertices: z.array(NameZ).min(3),\n }),\n collectRefs: (e) => [...e.vertices],\n emit: (e, ctx) => [{\n role: 'primary',\n object: {\n id: ctx.resolveId(e.name),\n kind: 'polygon',\n label: e.name,\n ...SHAPE_BASE_FIELDS,\n attrs: { vertices: e.vertices.map((v) => ctx.resolveId(v)) },\n },\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/circles/circleCP.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslShapeT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { SHAPE_BASE_FIELDS } from '../_shared';\n\ntype Input = Extract<DslShapeT, { kind: 'circleCP' }>;\n\nexport const circleCPModule = defineModule<'circleCP', Input>({\n kind: 'circleCP',\n role: 'circle',\n category: 'circles',\n prefix: 'c',\n schema: z.object({\n name: NameZ,\n kind: z.literal('circleCP'),\n center: NameZ,\n surfacePoint: NameZ,\n visible: z.boolean().optional(),\n }),\n collectRefs: (e) => [e.center, e.surfacePoint],\n emit: (e, ctx) => [{\n role: 'primary',\n object: {\n id: ctx.resolveId(e.name),\n kind: 'circle',\n label: e.name,\n ...SHAPE_BASE_FIELDS,\n visible: e.visible ?? true,\n attrs: { center: ctx.resolveId(e.center), surfacePoint: ctx.resolveId(e.surfacePoint) },\n },\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/circles/circle3.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslShapeT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { SHAPE_BASE_FIELDS } from '../_shared';\n\ntype Input = Extract<DslShapeT, { kind: 'circle3' }>;\n\nexport const circle3Module = defineModule<'circle3', Input>({\n kind: 'circle3',\n role: 'circle',\n category: 'circles',\n prefix: 'c',\n schema: z.object({\n name: NameZ,\n kind: z.literal('circle3'),\n p1: NameZ,\n p2: NameZ,\n p3: NameZ,\n }),\n collectRefs: (e) => [e.p1, e.p2, e.p3],\n emit: (e, ctx) => [{\n role: 'primary',\n object: {\n id: ctx.resolveId(e.name),\n kind: 'circle',\n label: e.name,\n ...SHAPE_BASE_FIELDS,\n attrs: {\n construction: {\n kind: 'circumscribed',\n p1: ctx.resolveId(e.p1),\n p2: ctx.resolveId(e.p2),\n p3: ctx.resolveId(e.p3),\n },\n },\n },\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/circles/circleDiameter.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslShapeT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { SHAPE_BASE_FIELDS } from '../_shared';\n\ntype Input = Extract<DslShapeT, { kind: 'circleDiameter' }>;\n\n// Đường tròn đường kính p1p2 — tâm = trung điểm, bán kính = |p1p2|/2.\n// Emit circle với construction 'diameter'; renderer dựng midpoint ẩn + circle qua p2.\nexport const circleDiameterModule = defineModule<'circleDiameter', Input>({\n kind: 'circleDiameter',\n role: 'circle',\n category: 'circles',\n prefix: 'c',\n schema: z.object({\n name: NameZ,\n kind: z.literal('circleDiameter'),\n p1: NameZ,\n p2: NameZ,\n visible: z.boolean().optional(),\n }),\n collectRefs: (e) => [e.p1, e.p2],\n emit: (e, ctx) => [{\n role: 'primary',\n object: {\n id: ctx.resolveId(e.name),\n kind: 'circle',\n label: e.name,\n ...SHAPE_BASE_FIELDS,\n visible: e.visible ?? true,\n attrs: {\n construction: {\n kind: 'diameter',\n p1: ctx.resolveId(e.p1),\n p2: ctx.resolveId(e.p2),\n },\n },\n },\n }],\n});\n","import { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslPointT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { emitPointObject } from '../_shared';\n\ntype Input = Extract<DslPointT, { kind: 'secondIntersection' }>;\n\nexport const secondIntersectionModule = defineModule<'secondIntersection', Input>({\n kind: 'secondIntersection',\n role: 'point',\n category: 'points',\n prefix: 'p',\n schema: z.object({\n name: NameZ,\n kind: z.literal('secondIntersection'),\n line: NameZ,\n circle: NameZ,\n other: NameZ,\n }),\n collectRefs: (e) => [e.line, e.circle, e.other],\n refSpecs: [\n { field: 'line', role: 'line-like' },\n { field: 'circle', role: 'circle' },\n { field: 'other', role: 'point' },\n ],\n emit: (e, ctx) => [{\n role: 'primary',\n object: emitPointObject(\n ctx.resolveId(e.name),\n e.name,\n {\n kind: 'secondIntersection',\n line: ctx.resolveId(e.line),\n circle: ctx.resolveId(e.circle),\n other: ctx.resolveId(e.other),\n },\n ),\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/points/circleIntersection.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslPointT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { emitPointObject } from '../_shared';\n\ntype Input = Extract<DslPointT, { kind: 'circleIntersection' }>;\n\nexport const circleIntersectionModule = defineModule<'circleIntersection', Input>({\n kind: 'circleIntersection',\n role: 'point',\n category: 'points',\n prefix: 'p',\n schema: z.object({\n name: NameZ,\n kind: z.literal('circleIntersection'),\n c1: NameZ,\n c2: NameZ,\n which: z.union([z.literal(0), z.literal(1)]),\n }),\n collectRefs: (e) => [e.c1, e.c2],\n refSpecs: [\n { field: 'c1', role: 'circle' },\n { field: 'c2', role: 'circle' },\n ],\n emit: (e, ctx) => [{\n role: 'primary',\n object: emitPointObject(\n ctx.resolveId(e.name),\n e.name,\n {\n kind: 'circleIntersection',\n c1: ctx.resolveId(e.c1),\n c2: ctx.resolveId(e.c2),\n which: e.which,\n },\n ),\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/points/circleSecondIntersection.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslPointT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { emitPointObject } from '../_shared';\n\ntype Input = Extract<DslPointT, { kind: 'circleSecondIntersection' }>;\n\n// Giao điểm THỨ HAI của 2 đường tròn (c1 ∩ c2), biết điểm chung `exclude`.\n// Renderer: JSXGraph 'otherintersection' → nghiệm KHÁC `exclude`.\nexport const circleSecondIntersectionModule = defineModule<'circleSecondIntersection', Input>({\n kind: 'circleSecondIntersection',\n role: 'point',\n category: 'points',\n prefix: 'p',\n schema: z.object({\n name: NameZ,\n kind: z.literal('circleSecondIntersection'),\n c1: NameZ,\n c2: NameZ,\n exclude: NameZ,\n }),\n collectRefs: (e) => [e.c1, e.c2, e.exclude],\n refSpecs: [\n { field: 'c1', role: 'circle' },\n { field: 'c2', role: 'circle' },\n { field: 'exclude', role: 'point' },\n ],\n emit: (e, ctx) => [{\n role: 'primary',\n object: emitPointObject(\n ctx.resolveId(e.name),\n e.name,\n {\n kind: 'circleSecondIntersection',\n c1: ctx.resolveId(e.c1),\n c2: ctx.resolveId(e.c2),\n exclude: ctx.resolveId(e.exclude),\n },\n ),\n }],\n});\n","import { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslPointT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { emitPointObject } from '../_shared';\n\ntype Input = Extract<DslPointT, { kind: 'tangencyPoint' }>;\n\nexport const tangencyPointModule = defineModule<'tangencyPoint', Input>({\n kind: 'tangencyPoint',\n role: 'point',\n category: 'points',\n prefix: 'p',\n schema: z.object({\n name: NameZ,\n kind: z.literal('tangencyPoint'),\n circle: NameZ,\n onLine: NameZ,\n }),\n collectRefs: (e) => [e.circle, e.onLine],\n refSpecs: [\n { field: 'circle', role: 'circle' },\n { field: 'onLine', role: 'line-like' },\n ],\n emit: (e, ctx) => [{\n role: 'primary',\n object: emitPointObject(\n ctx.resolveId(e.name),\n e.name,\n {\n kind: 'tangencyPoint',\n circle: ctx.resolveId(e.circle),\n onLine: ctx.resolveId(e.onLine),\n },\n ),\n }],\n});\n","import { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslPointT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { emitPointObject } from '../_shared';\n\ntype Input = Extract<DslPointT, { kind: 'tangentPointExt' }>;\n\nexport const tangentPointExtModule = defineModule<'tangentPointExt', Input>({\n kind: 'tangentPointExt',\n role: 'point',\n category: 'points',\n prefix: 'p',\n schema: z.object({\n name: NameZ,\n kind: z.literal('tangentPointExt'),\n from: NameZ,\n circle: NameZ,\n which: z.union([z.literal(0), z.literal(1)]),\n }),\n collectRefs: (e) => [e.from, e.circle],\n refSpecs: [\n { field: 'from', role: 'point' },\n { field: 'circle', role: 'circle' },\n ],\n emit: (e, ctx) => [{\n role: 'primary',\n object: emitPointObject(\n ctx.resolveId(e.name),\n e.name,\n {\n kind: 'tangentPointExt',\n from: ctx.resolveId(e.from),\n circle: ctx.resolveId(e.circle),\n which: e.which,\n },\n ),\n }],\n});\n","import { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslShapeT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { SHAPE_BASE_FIELDS } from '../_shared';\n\ntype Input = Extract<DslShapeT, { kind: 'circleCR' }>;\n\nexport const circleCRModule = defineModule<'circleCR', Input>({\n kind: 'circleCR',\n role: 'circle',\n category: 'circles',\n prefix: 'c',\n schema: z.object({\n name: NameZ,\n kind: z.literal('circleCR'),\n center: NameZ,\n radius: z.number().positive(),\n }),\n collectRefs: (e) => [e.center],\n refSpecs: [{ field: 'center', role: 'point' }],\n emit: (e, ctx) => [{\n role: 'primary',\n object: {\n id: ctx.resolveId(e.name),\n kind: 'circle',\n label: e.name,\n ...SHAPE_BASE_FIELDS,\n attrs: { center: ctx.resolveId(e.center), radius: e.radius },\n },\n }],\n});\n","import { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslShapeT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { SHAPE_BASE_FIELDS } from '../_shared';\n\ntype Input = Extract<DslShapeT, { kind: 'incircle' }>;\n\nexport const incircleModule = defineModule<'incircle', Input>({\n kind: 'incircle',\n role: 'circle',\n category: 'circles',\n prefix: 'c',\n schema: z.object({\n name: NameZ,\n kind: z.literal('incircle'),\n vertices: z.tuple([NameZ, NameZ, NameZ]),\n }),\n collectRefs: (e) => [...e.vertices],\n refSpecs: [{ field: 'vertices', role: 'point', many: true }],\n emit: (e, ctx) => [{\n role: 'primary',\n object: {\n id: ctx.resolveId(e.name),\n kind: 'circle',\n label: e.name,\n ...SHAPE_BASE_FIELDS,\n attrs: {\n kind: 'incircle',\n vertices: [\n ctx.resolveId(e.vertices[0]),\n ctx.resolveId(e.vertices[1]),\n ctx.resolveId(e.vertices[2]),\n ],\n },\n },\n }],\n});\n","import { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslShapeT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { SHAPE_BASE_FIELDS } from '../_shared';\n\ntype Input = Extract<DslShapeT, { kind: 'excircle' }>;\n\nexport const excircleModule = defineModule<'excircle', Input>({\n kind: 'excircle',\n role: 'circle',\n category: 'circles',\n prefix: 'c',\n schema: z.object({\n name: NameZ,\n kind: z.literal('excircle'),\n vertices: z.tuple([NameZ, NameZ, NameZ]),\n opposite: NameZ,\n }),\n collectRefs: (e) => [...e.vertices],\n refSpecs: [\n { field: 'vertices', role: 'point', many: true },\n { field: 'opposite', role: 'point' },\n ],\n emit: (e, ctx) => [{\n role: 'primary',\n object: {\n id: ctx.resolveId(e.name),\n kind: 'circle',\n label: e.name,\n ...SHAPE_BASE_FIELDS,\n attrs: {\n construction: {\n kind: 'excircle',\n p1: ctx.resolveId(e.vertices[0]),\n p2: ctx.resolveId(e.vertices[1]),\n p3: ctx.resolveId(e.vertices[2]),\n opposite: ctx.resolveId(e.opposite),\n },\n },\n },\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/points/arcMidpoint.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslPointT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { emitPointObject } from '../_shared';\n\ntype Input = Extract<DslPointT, { kind: 'arcMidpoint' }>;\n\nexport const arcMidpointModule = defineModule<'arcMidpoint', Input>({\n kind: 'arcMidpoint',\n role: 'point',\n category: 'points',\n prefix: 'p',\n schema: z.object({\n name: NameZ,\n kind: z.literal('arcMidpoint'),\n circle: NameZ,\n a: NameZ,\n b: NameZ,\n notContaining: NameZ,\n }),\n collectRefs: (e) => [e.circle, e.a, e.b, e.notContaining],\n emit: (e, ctx) => [{\n role: 'primary',\n object: emitPointObject(ctx.resolveId(e.name), e.name, {\n kind: 'arcMidpoint',\n circle: ctx.resolveId(e.circle),\n a: ctx.resolveId(e.a),\n b: ctx.resolveId(e.b),\n notContaining: ctx.resolveId(e.notContaining),\n }),\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/points/excenter.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslPointT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { emitPointObject, resolveTriangleVertices } from '../_shared';\n\ntype Input = Extract<DslPointT, { kind: 'excenter' }>;\n\nexport const excenterModule = defineModule<'excenter', Input>({\n kind: 'excenter',\n role: 'point',\n category: 'points',\n prefix: 'p',\n schema: z.object({\n name: NameZ,\n kind: z.literal('excenter'),\n vertices: z.tuple([NameZ, NameZ, NameZ]),\n opposite: NameZ,\n }),\n collectRefs: (e) => [...e.vertices],\n emit: (e, ctx) => [{\n role: 'primary',\n object: emitPointObject(ctx.resolveId(e.name), e.name, {\n kind: 'excenter',\n vertices: resolveTriangleVertices(ctx, e.vertices),\n opposite: ctx.resolveId(e.opposite),\n }),\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/points/reflectPoint.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslPointT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { emitPointObject } from '../_shared';\n\ntype Input = Extract<DslPointT, { kind: 'reflectPoint' }>;\n\nexport const reflectPointModule = defineModule<'reflectPoint', Input>({\n kind: 'reflectPoint',\n role: 'point',\n category: 'points',\n prefix: 'p',\n schema: z.object({ name: NameZ, kind: z.literal('reflectPoint'), of: NameZ, through: NameZ }),\n collectRefs: (e) => [e.of, e.through],\n emit: (e, ctx) => [{\n role: 'primary',\n object: emitPointObject(ctx.resolveId(e.name), e.name, {\n kind: 'transformed',\n source: ctx.resolveId(e.of),\n transform: { kind: 'reflectPoint', center: ctx.resolveId(e.through) },\n }),\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/points/reflectLine.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslPointT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { emitPointObject } from '../_shared';\n\ntype Input = Extract<DslPointT, { kind: 'reflectLine' }>;\n\nexport const reflectLineModule = defineModule<'reflectLine', Input>({\n kind: 'reflectLine',\n role: 'point',\n category: 'points',\n prefix: 'p',\n schema: z.object({ name: NameZ, kind: z.literal('reflectLine'), of: NameZ, through: NameZ }),\n collectRefs: (e) => [e.of, e.through],\n emit: (e, ctx) => [{\n role: 'primary',\n object: emitPointObject(ctx.resolveId(e.name), e.name, {\n kind: 'transformed',\n source: ctx.resolveId(e.of),\n transform: { kind: 'reflectLine', line: ctx.resolveId(e.through) },\n }),\n }],\n});\n","// src/stamps/geometry-2d/dsl/kinds/points/pointAtDistance.ts\nimport { z } from 'zod';\nimport { NameZ } from '../../names';\nimport type { DslPointT } from '../../schema';\nimport { defineModule } from '../_types';\nimport { emitPointObject } from '../_shared';\n\ntype Input = Extract<DslPointT, { kind: 'pointAtDistance' }>;\n\n// scale/offset OPTIONAL (Issue #46 nhóm C): d = scale·base + offset. scale phải\n// > 0; offset bất kỳ (âm OK — guard d>0 ở render). Absent → giữ form cũ (additive).\nconst ScaleOffsetZ = {\n scale: z.number().positive().optional(),\n offset: z.number().optional(),\n};\nconst DistanceZ = z.discriminatedUnion('kind', [\n z.object({ kind: z.literal('circleRadius'), circle: NameZ, ...ScaleOffsetZ }),\n z.object({ kind: z.literal('segmentLength'), p1: NameZ, p2: NameZ, ...ScaleOffsetZ }),\n z.object({ kind: z.literal('literal'), value: z.number().positive(), ...ScaleOffsetZ }),\n]);\n\n/** Chỉ chèn scale/offset khi có giá trị → object cũ KHÔNG mọc key (additive). */\nfunction withScaleOffset<T extends object>(base: T, d: { scale?: number; offset?: number }): T {\n const out = { ...base } as T & { scale?: number; offset?: number };\n if (d.scale !== undefined) out.scale = d.scale;\n if (d.offset !== undefined) out.offset = d.offset;\n return out;\n}\n\nexport const pointAtDistanceModule = defineModule<'pointAtDistance', Input>({\n kind: 'pointAtDistance',\n role: 'point',\n category: 'points',\n prefix: 'p',\n schema: z.object({\n name: NameZ,\n kind: z.literal('pointAtDistance'),\n from: NameZ,\n through: NameZ,\n distance: DistanceZ,\n }),\n collectRefs: (e) => {\n const d = e.distance;\n const extra = d.kind === 'circleRadius' ? [d.circle]\n : d.kind === 'segmentLength' ? [d.p1, d.p2] : [];\n return [e.from, e.through, ...extra];\n },\n // TODO(Mức 1 defer): distance.{circle,p1,p2} là nested trong `distance` — refSpec\n // phẳng đọc top-level không với tới, validate riêng nếu cần. Hiện validate from/through.\n refSpecs: [\n { field: 'from', role: 'point' },\n { field: 'through', role: 'point' },\n ],\n emit: (e, ctx) => {\n const d = e.distance;\n const distance = d.kind === 'circleRadius'\n ? withScaleOffset({ kind: 'circleRadius', circle: ctx.resolveId(d.circle) }, d)\n : d.kind === 'segmentLength'\n ? withScaleOffset({ kind: 'segmentLength', p1: ctx.resolveId(d.p1), p2: ctx.resolveId(d.p2) }, d)\n : withScaleOffset({ kind: 'literal', value: d.value }, d);\n return [{\n role: 'primary',\n object: emitPointObject(ctx.resolveId(e.name), e.name, {\n kind: 'pointAtDistance',\n from: ctx.resolveId(e.from),\n through: ctx.resolveId(e.through),\n distance,\n }),\n }];\n },\n});\n","// src/stamps/geometry-2d/dsl/registry.ts\nimport { z } from 'zod';\nimport type { DslKindModule } from './kinds/_types';\nimport { freeModule } from './kinds/points/free';\nimport { midpointModule } from './kinds/points/midpoint';\nimport { onSegmentModule } from './kinds/points/onSegment';\nimport { onLineModule } from './kinds/points/onLine';\nimport { onCircleModule } from './kinds/points/onCircle';\nimport { perpFootModule } from './kinds/points/perpFoot';\nimport { circumcenterModule } from './kinds/points/circumcenter';\nimport { incenterModule } from './kinds/points/incenter';\nimport { centroidModule } from './kinds/points/centroid';\nimport { orthocenterModule } from './kinds/points/orthocenter';\nimport { intersectionModule } from './kinds/points/intersection';\nimport { segmentModule } from './kinds/lines/segment';\nimport { lineModule } from './kinds/lines/line';\nimport { rayModule } from './kinds/lines/ray';\nimport { perpendicularModule } from './kinds/lines/perpendicular';\nimport { parallelModule } from './kinds/lines/parallel';\nimport { perpBisectorModule } from './kinds/lines/perpBisector';\nimport { angleBisectorModule } from './kinds/lines/angleBisector';\nimport { lineThroughModule } from './kinds/lines/lineThrough';\nimport { radicalAxisModule } from './kinds/lines/radicalAxis';\nimport { tangentModule } from './kinds/lines/tangent';\nimport { polygonModule } from './kinds/polygons/polygon';\nimport { circleCPModule } from './kinds/circles/circleCP';\nimport { circle3Module } from './kinds/circles/circle3';\nimport { circleDiameterModule } from './kinds/circles/circleDiameter';\nimport { secondIntersectionModule } from './kinds/points/secondIntersection';\nimport { circleIntersectionModule } from './kinds/points/circleIntersection';\nimport { circleSecondIntersectionModule } from './kinds/points/circleSecondIntersection';\nimport { tangencyPointModule } from './kinds/points/tangencyPoint';\nimport { tangentPointExtModule } from './kinds/points/tangentPointExt';\nimport { circleCRModule } from './kinds/circles/circleCR';\nimport { incircleModule } from './kinds/circles/incircle';\nimport { excircleModule } from './kinds/circles/excircle';\nimport { arcMidpointModule } from './kinds/points/arcMidpoint';\nimport { excenterModule } from './kinds/points/excenter';\nimport { reflectPointModule } from './kinds/points/reflectPoint';\nimport { reflectLineModule } from './kinds/points/reflectLine';\nimport { pointAtDistanceModule } from './kinds/points/pointAtDistance';\n\nconst ALL_MODULES: ReadonlyArray<DslKindModule> = [\n freeModule, midpointModule, onSegmentModule, onLineModule, onCircleModule,\n perpFootModule, circumcenterModule, incenterModule, centroidModule,\n orthocenterModule, intersectionModule,\n // NEW Tier 4+5 points\n secondIntersectionModule, circleIntersectionModule, circleSecondIntersectionModule,\n tangencyPointModule, tangentPointExtModule,\n segmentModule, lineModule, rayModule,\n perpendicularModule, parallelModule, perpBisectorModule,\n angleBisectorModule, lineThroughModule, radicalAxisModule, tangentModule,\n polygonModule,\n circleCPModule, circle3Module, circleDiameterModule,\n // NEW Tier 4+5 circles\n circleCRModule, incircleModule, excircleModule,\n // Cụm A points\n arcMidpointModule, excenterModule, reflectPointModule, reflectLineModule,\n // Cụm B points\n pointAtDistanceModule,\n];\n\nexport const KIND_REGISTRY: ReadonlyMap<string, DslKindModule> =\n new Map(ALL_MODULES.map((m) => [m.kind, m]));\n\nexport const POINT_KINDS: ReadonlySet<string> = new Set(\n ALL_MODULES.filter((m) => m.role === 'point').map((m) => m.kind),\n);\n\nexport const LINE_LIKE_SHAPE_KINDS: ReadonlySet<string> = new Set(\n ALL_MODULES.filter(\n (m) =>\n m.role === 'segment' ||\n m.role === 'line' ||\n m.role === 'ray' ||\n m.role === 'lineConstruction',\n ).map((m) => m.kind),\n);\n\nexport const CIRCLE_KINDS: ReadonlySet<string> = new Set(\n ALL_MODULES.filter((m) => m.role === 'circle').map((m) => m.kind),\n);\n\n// Top-level entity discriminated union — used internally by schema.ts for building DslPoint/DslShape.\nexport const DslEntitySchema = z.discriminatedUnion(\n 'kind',\n ALL_MODULES.map((m) => m.schema) as unknown as [z.ZodObject<any>, z.ZodObject<any>, ...z.ZodObject<any>[]],\n);\n","// src/stamps/geometry-2d/dsl/serialize.ts\n//\n// Reverse path: SceneObject → DSL entity. Counterpart cho `transpile` (forward\n// DSL → State). Dùng cho tab Đối tượng hiển thị mô tả DSL-style + reuse khi\n// muốn export state về DSL.\n//\n// Lossless với mọi primitive DSL v1 hỗ trợ. Out-of-DSL state (vector, distance,\n// angle, arc, sector, onAxis/onPolygon/transformed constraint, polygon regular,\n// angleBisectorLines) → fallback `{ ok: false; reason }` không drop.\n\nimport type { SceneObject, State } from '../../../core/scene/types';\nimport type { Constraint2D } from '../../../core/scene/kinds/2d-constraint';\nimport type { LineConstruction, LineAttrs } from '../../../core/scene/kinds/line';\nimport type { CircleAttrs } from '../../../core/scene/kinds/circle';\nimport type { PolygonAttrs } from '../../../core/scene/kinds/polygon';\nimport type { SegmentAttrs } from '../../../core/scene/kinds/segment';\nimport type { RayAttrs } from '../../../core/scene/kinds/ray';\nimport type { IntersectionAttrs } from '../../../core/scene/kinds/intersection';\nimport type { PointAttrs } from '../../../core/scene/kinds/point';\nimport type { DslInputT, DslPointT, DslShapeT } from './schema';\nimport { POINT_KINDS } from './registry';\n\nexport type SerializeReason =\n | 'unsupported-kind'\n | 'unsupported-constraint'\n | 'unsupported-construction'\n | 'unresolved-ref'\n | 'invalid-label';\n\nexport type SerializedEntity =\n | { ok: true; entity: DslPointT | DslShapeT }\n | { ok: false; reason: SerializeReason; detail?: string };\n\nexport interface UnsupportedEntry {\n id: string;\n label: string;\n kind: string;\n reason: SerializeReason;\n detail?: string;\n}\n\nexport interface SerializeStateResult {\n dsl: DslInputT;\n unsupported: UnsupportedEntry[];\n}\n\n// Đồng bộ với NameZ ở names.ts. Dup ở đây để serializer không phụ thuộc Zod\n// parse cho mỗi label (hot path khi tab Đối tượng render hàng chục row).\nconst NAME_REGEX = /^[A-Za-z][A-Za-z0-9_'₀-₉]{0,11}$/;\n\nfunction isValidName(s: string): boolean {\n return NAME_REGEX.test(s);\n}\n\nfunction labelOf(id: string, state: State): string | null {\n const obj = state.objects[id];\n return obj ? obj.label : null;\n}\n\nfunction resolveRefs(ids: readonly string[], state: State): string[] | null {\n const out: string[] = [];\n for (const id of ids) {\n const lab = labelOf(id, state);\n if (lab == null || !isValidName(lab)) return null;\n out.push(lab);\n }\n return out;\n}\n\nfunction fail(reason: SerializeReason, detail?: string): SerializedEntity {\n return { ok: false, reason, detail };\n}\n\n// ---------------------------------------------------------------------------\n// point — drill into Constraint2D\n// ---------------------------------------------------------------------------\n\nfunction serializePoint(obj: SceneObject<PointAttrs>, state: State): SerializedEntity {\n const c: Constraint2D | undefined = obj.attrs?.constraint;\n if (!c) return fail('unsupported-constraint', 'missing');\n\n switch (c.kind) {\n case 'free':\n return { ok: true, entity: { name: obj.label, kind: 'free', x: c.x, y: c.y } };\n\n case 'midpoint': {\n const refs = resolveRefs([c.p1, c.p2], state);\n if (!refs) return fail('unresolved-ref', `${c.p1},${c.p2}`);\n return { ok: true, entity: { name: obj.label, kind: 'midpoint', p1: refs[0], p2: refs[1] } };\n }\n\n case 'onSegment': {\n const refs = resolveRefs([c.segmentId], state);\n if (!refs) return fail('unresolved-ref', c.segmentId);\n return { ok: true, entity: { name: obj.label, kind: 'onSegment', segmentId: refs[0], t: c.t } };\n }\n\n case 'onLine': {\n const refs = resolveRefs([c.lineId], state);\n if (!refs) return fail('unresolved-ref', c.lineId);\n return { ok: true, entity: { name: obj.label, kind: 'onLine', lineId: refs[0], t: c.t } };\n }\n\n case 'onCircle': {\n const refs = resolveRefs([c.circleId], state);\n if (!refs) return fail('unresolved-ref', c.circleId);\n return { ok: true, entity: { name: obj.label, kind: 'onCircle', circleId: refs[0], theta: c.theta } };\n }\n\n case 'perpFoot': {\n const refs = resolveRefs([c.from, c.onLine], state);\n if (!refs) return fail('unresolved-ref', `${c.from},${c.onLine}`);\n return { ok: true, entity: { name: obj.label, kind: 'perpFoot', from: refs[0], onLine: refs[1] } };\n }\n\n case 'circumcenter':\n case 'incenter':\n case 'centroid':\n case 'orthocenter': {\n const refs = resolveRefs(c.vertices, state);\n if (!refs || refs.length !== 3) return fail('unresolved-ref', c.vertices.join(','));\n return {\n ok: true,\n entity: {\n name: obj.label,\n kind: c.kind,\n vertices: [refs[0], refs[1], refs[2]],\n },\n };\n }\n\n case 'tangentPointExt': {\n const refs = resolveRefs([c.from, c.circle], state);\n if (!refs) return fail('unresolved-ref', `${c.from},${c.circle}`);\n return {\n ok: true,\n entity: {\n name: obj.label,\n kind: 'tangentPointExt',\n from: refs[0],\n circle: refs[1],\n which: c.which,\n },\n };\n }\n\n case 'circleIntersection': {\n const refs = resolveRefs([c.c1, c.c2], state);\n if (!refs) return fail('unresolved-ref', `${c.c1},${c.c2}`);\n return {\n ok: true,\n entity: { name: obj.label, kind: 'circleIntersection', c1: refs[0], c2: refs[1], which: c.which },\n };\n }\n\n case 'circleSecondIntersection': {\n const refs = resolveRefs([c.c1, c.c2, c.exclude], state);\n if (!refs) return fail('unresolved-ref', `${c.c1},${c.c2},${c.exclude}`);\n return {\n ok: true,\n entity: { name: obj.label, kind: 'circleSecondIntersection', c1: refs[0], c2: refs[1], exclude: refs[2] },\n };\n }\n\n case 'secondIntersection': {\n const refs = resolveRefs([c.line, c.circle, c.other], state);\n if (!refs) return fail('unresolved-ref', `${c.line},${c.circle},${c.other}`);\n return {\n ok: true,\n entity: { name: obj.label, kind: 'secondIntersection', line: refs[0], circle: refs[1], other: refs[2] },\n };\n }\n\n case 'tangencyPoint': {\n const refs = resolveRefs([c.circle, c.onLine], state);\n if (!refs) return fail('unresolved-ref', `${c.circle},${c.onLine}`);\n return {\n ok: true,\n entity: { name: obj.label, kind: 'tangencyPoint', circle: refs[0], onLine: refs[1] },\n };\n }\n\n case 'arcMidpoint': {\n const refs = resolveRefs([c.circle, c.a, c.b, c.notContaining], state);\n if (!refs) return fail('unresolved-ref', `${c.circle},${c.a},${c.b},${c.notContaining}`);\n return {\n ok: true,\n entity: {\n name: obj.label,\n kind: 'arcMidpoint',\n circle: refs[0],\n a: refs[1],\n b: refs[2],\n notContaining: refs[3],\n },\n };\n }\n\n case 'excenter': {\n const refs = resolveRefs([c.vertices[0], c.vertices[1], c.vertices[2], c.opposite], state);\n if (!refs) return fail('unresolved-ref', `${c.vertices.join(',')},${c.opposite}`);\n return {\n ok: true,\n entity: {\n name: obj.label,\n kind: 'excenter',\n vertices: [refs[0], refs[1], refs[2]],\n opposite: refs[3],\n },\n };\n }\n\n case 'pointAtDistance': {\n const d = c.distance;\n const distRefIds = d.kind === 'circleRadius' ? [d.circle]\n : d.kind === 'segmentLength' ? [d.p1, d.p2] : [];\n const refs = resolveRefs([c.from, c.through, ...distRefIds], state);\n if (!refs) return fail('unresolved-ref', [c.from, c.through, ...distRefIds].join(','));\n let distance: import('./schema').DslDistanceSpec;\n if (d.kind === 'circleRadius') {\n distance = { kind: 'circleRadius', circle: refs[2] };\n } else if (d.kind === 'segmentLength') {\n distance = { kind: 'segmentLength', p1: refs[2], p2: refs[3] };\n } else {\n distance = { kind: 'literal', value: d.value };\n }\n // scale/offset OPTIONAL (Issue #46 nhóm C): chỉ ghi khi có → distance cũ\n // KHÔNG mọc key (additive, golden không đổi).\n if (d.scale !== undefined) distance.scale = d.scale;\n if (d.offset !== undefined) distance.offset = d.offset;\n return {\n ok: true,\n entity: { name: obj.label, kind: 'pointAtDistance', from: refs[0], through: refs[1], distance },\n };\n }\n\n // Out of DSL v1:\n case 'onAxis':\n case 'onPolygon':\n case 'transformed':\n case 'onPerpendicular':\n case 'onPerpBisector':\n case 'onCircleAroundPoint':\n return fail('unsupported-constraint', c.kind);\n\n default: {\n // exhaustive guard\n const _exhaust: never = c;\n void _exhaust;\n return fail('unsupported-constraint');\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// intersection — branch field only for non-lineLine\n// ---------------------------------------------------------------------------\n\nfunction serializeIntersection(\n obj: SceneObject<IntersectionAttrs>,\n state: State,\n): SerializedEntity {\n const a = obj.attrs;\n const refs = resolveRefs([a.ref1, a.ref2], state);\n if (!refs) return fail('unresolved-ref', `${a.ref1},${a.ref2}`);\n if (a.kind === 'lineLine') {\n return { ok: true, entity: { name: obj.label, kind: 'intersection', ref1: refs[0], ref2: refs[1] } };\n }\n return {\n ok: true,\n entity: {\n name: obj.label,\n kind: 'intersection',\n ref1: refs[0],\n ref2: refs[1],\n branch: a.branch,\n },\n };\n}\n\n// ---------------------------------------------------------------------------\n// segment / ray\n// ---------------------------------------------------------------------------\n\nfunction serializeSegment(obj: SceneObject<SegmentAttrs>, state: State): SerializedEntity {\n const refs = resolveRefs([obj.attrs.p1, obj.attrs.p2], state);\n if (!refs) return fail('unresolved-ref', `${obj.attrs.p1},${obj.attrs.p2}`);\n return { ok: true, entity: { name: obj.label, kind: 'segment', p1: refs[0], p2: refs[1] } };\n}\n\nfunction serializeRay(obj: SceneObject<RayAttrs>, state: State): SerializedEntity {\n const refs = resolveRefs([obj.attrs.origin, obj.attrs.through], state);\n if (!refs) return fail('unresolved-ref', `${obj.attrs.origin},${obj.attrs.through}`);\n return { ok: true, entity: { name: obj.label, kind: 'ray', origin: refs[0], through: refs[1] } };\n}\n\n// ---------------------------------------------------------------------------\n// line — no construction → 'line'; construction → matching DSL kind\n// ---------------------------------------------------------------------------\n\nfunction serializeLine(obj: SceneObject<LineAttrs>, state: State): SerializedEntity {\n const a = obj.attrs;\n const c: LineConstruction | undefined = a.construction;\n if (!c) {\n if (!a.p1 || !a.p2) return fail('unsupported-construction', 'missing p1/p2');\n const refs = resolveRefs([a.p1, a.p2], state);\n if (!refs) return fail('unresolved-ref', `${a.p1},${a.p2}`);\n return { ok: true, entity: { name: obj.label, kind: 'line', p1: refs[0], p2: refs[1] } };\n }\n\n switch (c.kind) {\n case 'perpendicular':\n case 'parallel': {\n const refs = resolveRefs([c.throughPoint, c.toLine], state);\n if (!refs) return fail('unresolved-ref', `${c.throughPoint},${c.toLine}`);\n return {\n ok: true,\n entity: { name: obj.label, kind: c.kind, throughPoint: refs[0], toLine: refs[1] },\n };\n }\n\n case 'perpBisector': {\n const refs = resolveRefs([c.p1, c.p2], state);\n if (!refs) return fail('unresolved-ref', `${c.p1},${c.p2}`);\n return { ok: true, entity: { name: obj.label, kind: 'perpBisector', p1: refs[0], p2: refs[1] } };\n }\n\n case 'angleBisector': {\n const refs = resolveRefs([c.p1, c.vertex, c.p2], state);\n if (!refs) return fail('unresolved-ref', `${c.p1},${c.vertex},${c.p2}`);\n return {\n ok: true,\n entity: {\n name: obj.label,\n kind: 'angleBisector',\n p1: refs[0],\n vertex: refs[1],\n p2: refs[2],\n },\n };\n }\n\n case 'tangent': {\n const refs = resolveRefs([c.throughPoint, c.toCircle], state);\n if (!refs) return fail('unresolved-ref', `${c.throughPoint},${c.toCircle}`);\n const entity: DslShapeT =\n c.branch !== undefined\n ? {\n name: obj.label,\n kind: 'tangent',\n throughPoint: refs[0],\n toCircle: refs[1],\n branch: c.branch,\n }\n : { name: obj.label, kind: 'tangent', throughPoint: refs[0], toCircle: refs[1] };\n return { ok: true, entity };\n }\n\n case 'lineThrough': {\n const refs = resolveRefs(c.points, state);\n if (!refs) return fail('unresolved-ref', c.points.join(','));\n return { ok: true, entity: { name: obj.label, kind: 'lineThrough', points: refs } };\n }\n\n case 'radicalAxis': {\n const refs = resolveRefs([c.circle1, c.circle2], state);\n if (!refs) return fail('unresolved-ref', `${c.circle1},${c.circle2}`);\n return { ok: true, entity: { name: obj.label, kind: 'radicalAxis', circle1: refs[0], circle2: refs[1] } };\n }\n\n case 'angleBisectorLines':\n return fail('unsupported-construction', 'angleBisectorLines');\n\n default: {\n const _exhaust: never = c;\n void _exhaust;\n return fail('unsupported-construction');\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// polygon — no construction OK; 'regular' unsupported\n// ---------------------------------------------------------------------------\n\nfunction serializePolygon(obj: SceneObject<PolygonAttrs>, state: State): SerializedEntity {\n const a = obj.attrs;\n if (a.construction) return fail('unsupported-construction', a.construction.kind);\n if (!Array.isArray(a.vertices) || a.vertices.length < 3) {\n return fail('unsupported-construction', 'missing vertices');\n }\n const refs = resolveRefs(a.vertices, state);\n if (!refs) return fail('unresolved-ref', a.vertices.join(','));\n return { ok: true, entity: { name: obj.label, kind: 'polygon', vertices: refs } };\n}\n\n// ---------------------------------------------------------------------------\n// circle — no construction → circleCP; 'circumscribed' → circle3\n// ---------------------------------------------------------------------------\n\nfunction serializeCircle(obj: SceneObject<CircleAttrs>, state: State): SerializedEntity {\n const a = obj.attrs;\n const c = (() => {\n if (a.construction) return a.construction;\n const raw = a as CircleAttrs & {\n kind?: string;\n vertices?: [string, string, string];\n opposite?: string;\n p1?: string;\n p2?: string;\n };\n if (raw.kind === 'incircle' && raw.vertices) {\n return {\n kind: 'incircle' as const,\n p1: raw.vertices[0],\n p2: raw.vertices[1],\n p3: raw.vertices[2],\n };\n }\n if (raw.kind === 'excircle' && raw.vertices && raw.opposite) {\n return {\n kind: 'excircle' as const,\n p1: raw.vertices[0],\n p2: raw.vertices[1],\n p3: raw.vertices[2],\n opposite: raw.opposite,\n };\n }\n if (raw.kind === 'circleDiameter' && raw.p1 && raw.p2) {\n return {\n kind: 'diameter' as const,\n p1: raw.p1,\n p2: raw.p2,\n };\n }\n return undefined;\n })();\n if (!c) {\n // center + radius (DSL circleCR) — ưu tiên trước center/surfacePoint.\n if (typeof a.radius === 'number') {\n if (!a.center) return fail('unsupported-construction', 'missing center');\n const refs = resolveRefs([a.center], state);\n if (!refs) return fail('unresolved-ref', `${a.center}`);\n return {\n ok: true,\n entity: { name: obj.label, kind: 'circleCR', center: refs[0], radius: a.radius },\n };\n }\n if (!a.center || !a.surfacePoint) {\n return fail('unsupported-construction', 'missing center/surfacePoint');\n }\n const refs = resolveRefs([a.center, a.surfacePoint], state);\n if (!refs) return fail('unresolved-ref', `${a.center},${a.surfacePoint}`);\n return {\n ok: true,\n entity: { name: obj.label, kind: 'circleCP', center: refs[0], surfacePoint: refs[1] },\n };\n }\n if (c.kind === 'circumscribed') {\n const refs = resolveRefs([c.p1, c.p2, c.p3], state);\n if (!refs) return fail('unresolved-ref', `${c.p1},${c.p2},${c.p3}`);\n return {\n ok: true,\n entity: { name: obj.label, kind: 'circle3', p1: refs[0], p2: refs[1], p3: refs[2] },\n };\n }\n if (c.kind === 'incircle') {\n const refs = resolveRefs([c.p1, c.p2, c.p3], state);\n if (!refs) return fail('unresolved-ref', `${c.p1},${c.p2},${c.p3}`);\n return {\n ok: true,\n entity: { name: obj.label, kind: 'incircle', vertices: [refs[0], refs[1], refs[2]] },\n };\n }\n if (c.kind === 'excircle') {\n const refs = resolveRefs([c.p1, c.p2, c.p3, c.opposite], state);\n if (!refs) return fail('unresolved-ref', `${c.p1},${c.p2},${c.p3},${c.opposite}`);\n return {\n ok: true,\n entity: { name: obj.label, kind: 'excircle', vertices: [refs[0], refs[1], refs[2]], opposite: refs[3] },\n };\n }\n if (c.kind === 'diameter') {\n const refs = resolveRefs([c.p1, c.p2], state);\n if (!refs) return fail('unresolved-ref', `${c.p1},${c.p2}`);\n return {\n ok: true,\n entity: { name: obj.label, kind: 'circleDiameter', p1: refs[0], p2: refs[1] },\n };\n }\n return fail('unsupported-construction');\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\nexport function serializeObject(obj: SceneObject, state: State): SerializedEntity {\n if (!isValidName(obj.label)) {\n return fail('invalid-label', obj.label);\n }\n switch (obj.kind) {\n case 'point':\n return serializePoint(obj as SceneObject<PointAttrs>, state);\n case 'segment':\n return serializeSegment(obj as SceneObject<SegmentAttrs>, state);\n case 'ray':\n return serializeRay(obj as SceneObject<RayAttrs>, state);\n case 'line':\n return serializeLine(obj as SceneObject<LineAttrs>, state);\n case 'polygon':\n return serializePolygon(obj as SceneObject<PolygonAttrs>, state);\n case 'circle':\n return serializeCircle(obj as SceneObject<CircleAttrs>, state);\n case 'intersection':\n return serializeIntersection(obj as SceneObject<IntersectionAttrs>, state);\n default:\n return fail('unsupported-kind', obj.kind);\n }\n}\n\nexport function serializeState(state: State): SerializeStateResult {\n const points: DslPointT[] = [];\n const shapes: DslShapeT[] = [];\n const unsupported: UnsupportedEntry[] = [];\n\n for (const id of state.order) {\n const obj = state.objects[id];\n if (!obj) continue;\n const r = serializeObject(obj, state);\n if (!r.ok) {\n unsupported.push({\n id: obj.id,\n label: obj.label,\n kind: obj.kind,\n reason: r.reason,\n detail: r.detail,\n });\n continue;\n }\n if (POINT_KINDS.has(r.entity.kind)) {\n points.push(r.entity as DslPointT);\n } else {\n shapes.push(r.entity as DslShapeT);\n }\n }\n\n return {\n dsl: { version: 1, points, shapes },\n unsupported,\n };\n}\n","'use client';\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type { State } from '../../../core/scene';\nimport type { GenerateGeometryFigure } from '../../shared/types';\nimport { serializeState } from '../dsl/serialize';\n\nexport type AiFigureMode = 'build' | 'refine';\n\nexport interface UseAiFigureResult {\n prompt: string;\n setPrompt: (value: string) => void;\n isLoading: boolean;\n error: string | null;\n submit: () => Promise<State | null>;\n cancel: () => void;\n tokens: number;\n mode: AiFigureMode;\n setMode: (mode: AiFigureMode) => void;\n entityCount: { points: number; shapes: number };\n hasUnsupported: boolean;\n}\n\nexport interface UseAiFigureOptions {\n currentState?: State | null;\n}\n\nexport function useAiFigure(\n generator?: GenerateGeometryFigure,\n options: UseAiFigureOptions = {},\n): UseAiFigureResult {\n const { currentState } = options;\n const [prompt, setPrompt] = useState('');\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [tokens, setTokens] = useState(0);\n const abortRef = useRef<AbortController | null>(null);\n const requestIdRef = useRef(0);\n\n const { dsl: currentDsl, unsupported, entityCount, hasContent } = useMemo(() => {\n if (!currentState || currentState.order.length === 0) {\n return {\n dsl: null,\n unsupported: [],\n entityCount: { points: 0, shapes: 0 },\n hasContent: false,\n };\n }\n const { dsl, unsupported } = serializeState(currentState);\n return {\n dsl,\n unsupported,\n entityCount: { points: dsl.points.length, shapes: dsl.shapes.length },\n hasContent: true,\n };\n }, [currentState]);\n\n const hasUnsupported = unsupported.length > 0;\n\n const initialMode: AiFigureMode = hasContent && !hasUnsupported ? 'refine' : 'build';\n const [mode, setModeInternal] = useState<AiFigureMode>(initialMode);\n\n useEffect(() => {\n if (!hasContent && mode === 'refine') setModeInternal('build');\n if (hasUnsupported && mode === 'refine') setModeInternal('build');\n }, [hasContent, hasUnsupported, mode]);\n\n const setMode = useCallback((next: AiFigureMode) => {\n setModeInternal(next);\n }, []);\n\n useEffect(() => () => abortRef.current?.abort(), []);\n\n const submit = useCallback(async (): Promise<State | null> => {\n const problem = prompt.trim();\n if (!problem) {\n setError('Nhập đề bài cần dựng hình.');\n return null;\n }\n if (!generator) {\n setError('Tính năng dựng hình AI chưa được cấu hình.');\n return null;\n }\n\n abortRef.current?.abort();\n const controller = new AbortController();\n const requestId = ++requestIdRef.current;\n abortRef.current = controller;\n setIsLoading(true);\n setError(null);\n setTokens(0);\n\n try {\n const generated = await generator(problem, {\n signal: controller.signal,\n onProgress: (info) => {\n if (requestId === requestIdRef.current) setTokens(info.tokens);\n },\n ...(mode === 'refine' && currentDsl ? { currentDsl } : {}),\n });\n if (controller.signal.aborted || requestId !== requestIdRef.current) return null;\n if (!generated.ok) {\n setError(generated.message);\n return null;\n }\n return generated.state;\n } catch (caught) {\n if (\n controller.signal.aborted ||\n (caught instanceof DOMException && caught.name === 'AbortError')\n ) {\n return null;\n }\n if (requestId === requestIdRef.current) {\n setError(\n caught instanceof Error && caught.message\n ? caught.message\n : 'Không thể dựng hình bằng AI.',\n );\n }\n return null;\n } finally {\n if (requestId === requestIdRef.current) {\n abortRef.current = null;\n setIsLoading(false);\n }\n }\n }, [generator, prompt, mode, currentDsl]);\n\n const cancel = useCallback(() => {\n abortRef.current?.abort();\n }, []);\n\n return {\n prompt,\n setPrompt,\n isLoading,\n error,\n submit,\n cancel,\n tokens,\n mode,\n setMode,\n entityCount,\n hasUnsupported,\n };\n}\n","// src/stamps/geometry-2d/ai/providers/anthropic.ts\n//\n// AIProvider impl cho Anthropic Claude. Internal: dùng tool_use với single\n// tool \"emit_figure_envelope\" input_schema = envelope JSON Schema → ép Claude\n// emit JSON đúng shape. Map response → ProviderOutput envelope.\n//\n// Khác bản trước (provider.ts): bỏ dual-tool (build_figure + refuse) — Claude\n// hoàn toàn xử lý được decision/refuse trong cùng 1 envelope.\n\nimport Anthropic from '@anthropic-ai/sdk';\nimport type {\n AIProvider,\n ImagePart,\n ProviderOutput,\n ProviderRequest,\n ProviderTokenUsage,\n VisionRequest,\n} from './types';\n\nconst TOOL_NAME = 'emit_figure_envelope';\nconst VISION_TOOL_NAME = 'extract_problem_envelope';\n\nexport interface AnthropicProviderOptions {\n apiKey: string;\n /** Cache system prompt qua Anthropic prompt-caching (mặc định bật). */\n enableCaching?: boolean;\n}\n\nexport class AnthropicProvider implements AIProvider {\n readonly name = 'anthropic';\n readonly defaultModel = 'claude-opus-4-7';\n\n constructor(private readonly opts: AnthropicProviderOptions) {\n if (!opts.apiKey) throw new Error('AnthropicProvider: apiKey bắt buộc');\n }\n\n async call(req: ProviderRequest): Promise<ProviderOutput> {\n const enableCaching = this.opts.enableCaching !== false;\n const systemBlock = enableCaching\n ? { type: 'text' as const, text: req.systemPrompt, cache_control: { type: 'ephemeral' as const } }\n : { type: 'text' as const, text: req.systemPrompt };\n\n const tool = {\n name: TOOL_NAME,\n description:\n 'Emit envelope JSON cho phép vẽ hình hoặc từ chối. ' +\n 'decision=\"build\" kèm figure (DSL hình học); decision=\"refuse\" kèm reason.',\n input_schema: req.schema,\n };\n\n const client = new Anthropic({ apiKey: this.opts.apiKey });\n let resp: Anthropic.Messages.Message;\n try {\n resp = await client.messages.create(\n {\n model: req.model,\n max_tokens: req.maxTokens,\n system: [systemBlock],\n tools: [tool as never],\n tool_choice: { type: 'tool', name: TOOL_NAME },\n messages: [{ role: 'user', content: req.userPrompt }],\n },\n req.signal ? { signal: req.signal } : undefined,\n );\n } catch (e) {\n const err = e as { message?: string; status?: number };\n return {\n kind: 'error',\n message: err.message ?? 'Lỗi gọi Anthropic API',\n ...(err.status !== undefined ? { status: err.status } : {}),\n };\n }\n\n const usage = toUsage(resp.usage);\n const toolUse = resp.content.find((c) => c.type === 'tool_use');\n if (!toolUse || toolUse.type !== 'tool_use') {\n return {\n kind: 'error',\n message: 'Claude không gọi tool. stop_reason=' + resp.stop_reason,\n };\n }\n if (toolUse.name !== TOOL_NAME) {\n return {\n kind: 'error',\n message: `Tool không xác định: \"${toolUse.name}\"`,\n };\n }\n return { kind: 'json', data: toolUse.input, usage };\n }\n\n async extractText(req: VisionRequest): Promise<ProviderOutput> {\n const model = req.model ?? this.defaultModel;\n const enableCaching = this.opts.enableCaching !== false;\n const systemBlock = enableCaching\n ? { type: 'text' as const, text: req.systemPrompt, cache_control: { type: 'ephemeral' as const } }\n : { type: 'text' as const, text: req.systemPrompt };\n\n const tool = {\n name: VISION_TOOL_NAME,\n description: 'Trích đề bài hình học từ ảnh, hoặc từ chối nếu không phải đề toán.',\n input_schema: req.schema,\n };\n\n const imageBlocks = req.images.map((img: ImagePart) => ({\n type: 'image' as const,\n source: {\n type: 'base64' as const,\n media_type: img.mediaType,\n data: img.base64,\n },\n }));\n\n const client = new Anthropic({ apiKey: this.opts.apiKey });\n let resp: Anthropic.Messages.Message;\n try {\n resp = await client.messages.create(\n {\n model,\n max_tokens: req.maxTokens,\n system: [systemBlock],\n tools: [tool as never],\n tool_choice: { type: 'tool', name: VISION_TOOL_NAME },\n messages: [\n {\n role: 'user',\n content: [...imageBlocks, { type: 'text', text: req.userPrompt }],\n },\n ],\n },\n req.signal ? { signal: req.signal } : undefined,\n );\n } catch (e) {\n const err = e as { message?: string; status?: number };\n return {\n kind: 'error',\n message: err.message ?? 'Lỗi gọi Anthropic Vision API',\n ...(err.status !== undefined ? { status: err.status } : {}),\n };\n }\n\n const usage = toUsage(resp.usage);\n const toolUse = resp.content.find((c) => c.type === 'tool_use');\n if (!toolUse || toolUse.type !== 'tool_use') {\n return { kind: 'error', message: 'Claude không gọi vision tool. stop_reason=' + resp.stop_reason };\n }\n if (toolUse.name !== VISION_TOOL_NAME) {\n return { kind: 'error', message: `Claude gọi sai tool: ${toolUse.name}` };\n }\n return { kind: 'json', data: toolUse.input, usage };\n }\n}\n\nfunction toUsage(u: Anthropic.Messages.Usage): ProviderTokenUsage {\n return {\n inputTokens: u.input_tokens,\n outputTokens: u.output_tokens,\n cacheReadTokens: u.cache_read_input_tokens ?? 0,\n cacheCreationTokens: u.cache_creation_input_tokens ?? 0,\n };\n}\n","// src/stamps/geometry-2d/ai/providers/claude-agent-sdk.ts\n//\n// AIProvider impl dùng @anthropic-ai/claude-agent-sdk (official Anthropic SDK\n// wrap Claude Code binary). OAuth subscription path — bill vào Pro/Max/Team\n// thay vì API key console. KHÔNG vi phạm ToS (SDK chính chủ).\n//\n// Setup:\n// $ npm install -g @anthropic-ai/claude-code\n// $ claude setup-token # browser auth → sk-ant-oat01-...\n// $ export CLAUDE_CODE_OAUTH_TOKEN=sk-ant-oat01-...\n// $ unset ANTHROPIC_API_KEY # nếu đã set ở project khác (sẽ shadow OAuth)\n//\n// So với ClaudeCliProvider (spawn `claude -p` subprocess):\n// - Latency thấp hơn nhiều (~10-30s vs 1-2 phút) — không boot full Claude Code context\n// - Streaming-first (in-process async iterator)\n// - Cùng subscription billing path\n\nimport type { AIProvider, ProviderOutput, ProviderRequest } from './types';\n\nconst DEFAULT_MODEL = 'claude-sonnet-4-6';\n\nconst SCHEMA_CACHE = new WeakMap<object, string>();\n\nfunction memoSchemaJson(schema: object): string {\n let s = SCHEMA_CACHE.get(schema);\n if (s) return s;\n s = JSON.stringify(schema, null, 2);\n SCHEMA_CACHE.set(schema, s);\n return s;\n}\n\nexport interface ClaudeAgentSdkProviderOptions {\n /** OAuth token. Fallback: env CLAUDE_CODE_OAUTH_TOKEN. */\n oauthToken?: string;\n defaultModel?: string;\n /** Inject custom query impl cho test mock. */\n queryImpl?: ClaudeAgentSdkQueryFn;\n}\n\n/** Shape của `query` từ @anthropic-ai/claude-agent-sdk — cho test mock. */\nexport type ClaudeAgentSdkQueryFn = (args: {\n prompt: string;\n options: {\n systemPrompt?: string;\n allowedTools?: string[];\n model?: string;\n abortSignal?: AbortSignal;\n };\n}) => AsyncIterable<ClaudeAgentSdkMessage>;\n\nexport type ClaudeAgentSdkMessage =\n | {\n type: 'assistant';\n message: { content: Array<{ type: 'text'; text: string } | { type: string }> };\n }\n | {\n type: 'result';\n subtype: 'success' | 'error_during_execution' | string;\n duration_ms?: number;\n usage?: {\n input_tokens?: number;\n output_tokens?: number;\n cache_read_input_tokens?: number;\n cache_creation_input_tokens?: number;\n };\n }\n | { type: 'system'; [k: string]: unknown }\n | { type: string; [k: string]: unknown };\n\nexport class ClaudeAgentSdkProvider implements AIProvider {\n readonly name = 'claude-agent-sdk';\n readonly defaultModel: string;\n private readonly oauthToken: string | undefined;\n private readonly queryImpl: ClaudeAgentSdkQueryFn | null;\n\n constructor(opts: ClaudeAgentSdkProviderOptions = {}) {\n this.defaultModel = opts.defaultModel ?? DEFAULT_MODEL;\n this.oauthToken = opts.oauthToken;\n this.queryImpl = opts.queryImpl ?? null;\n }\n\n private async resolveQuery(): Promise<ClaudeAgentSdkQueryFn> {\n if (this.queryImpl) return this.queryImpl;\n // Lazy import: chỉ load SDK khi thực sự cần. SDK requires Node (spawn).\n const mod = (await import('@anthropic-ai/claude-agent-sdk')) as {\n query: ClaudeAgentSdkQueryFn;\n };\n return mod.query;\n }\n\n async call(req: ProviderRequest): Promise<ProviderOutput> {\n // Inject OAuth token vào env nếu provider có. SDK đọc CLAUDE_CODE_OAUTH_TOKEN.\n if (this.oauthToken) {\n process.env.CLAUDE_CODE_OAUTH_TOKEN = this.oauthToken;\n }\n\n let query: ClaudeAgentSdkQueryFn;\n try {\n query = await this.resolveQuery();\n } catch (e) {\n return {\n kind: 'error',\n message:\n 'ClaudeAgentSdkProvider: SDK không khả dụng. ' +\n ((e as { message?: string }).message ?? ''),\n };\n }\n\n // Constraint output qua system prompt — Agent SDK không có --json-schema flag,\n // dùng prompt-instruct + parse JSON post-hoc. Sonnet 4.6 follow format tốt.\n const schemaText = memoSchemaJson(req.schema as object);\n const constrainedSystem = `${req.systemPrompt}\n\nQUAN TRỌNG: Output PHẢI là valid JSON đúng schema sau. KHÔNG markdown wrapper, KHÔNG prose giải thích, CHỈ raw JSON:\n\n${schemaText}`;\n\n let assistantText = '';\n let usageInput = 0;\n let usageOutput = 0;\n let cacheRead = 0;\n let cacheCreation = 0;\n\n try {\n for await (const msg of query({\n prompt: req.userPrompt,\n options: {\n systemPrompt: constrainedSystem,\n allowedTools: [],\n model: req.model ?? this.defaultModel,\n ...(req.signal ? { abortSignal: req.signal } : {}),\n },\n })) {\n if (msg.type === 'assistant') {\n const message = (msg as { message: { content: Array<unknown> } }).message;\n for (const block of message.content) {\n const b = block as { type?: string; text?: string };\n if (b.type === 'text' && typeof b.text === 'string') {\n assistantText += b.text;\n if (req.onToken) {\n try { req.onToken(b.text); } catch { /* swallow */ }\n }\n }\n }\n } else if (msg.type === 'result') {\n const r = msg as {\n subtype?: string;\n usage?: {\n input_tokens?: number;\n output_tokens?: number;\n cache_read_input_tokens?: number;\n cache_creation_input_tokens?: number;\n };\n };\n if (r.subtype && r.subtype !== 'success') {\n return {\n kind: 'error',\n message: `ClaudeAgentSdkProvider: result subtype=${r.subtype}`,\n };\n }\n if (r.usage) {\n usageInput = r.usage.input_tokens ?? 0;\n usageOutput = r.usage.output_tokens ?? 0;\n cacheRead = r.usage.cache_read_input_tokens ?? 0;\n cacheCreation = r.usage.cache_creation_input_tokens ?? 0;\n }\n }\n }\n } catch (e) {\n return {\n kind: 'error',\n message:\n 'ClaudeAgentSdkProvider: query() throw: ' +\n ((e as { message?: string }).message ?? '?'),\n };\n }\n\n if (!assistantText.trim()) {\n return {\n kind: 'error',\n message: 'ClaudeAgentSdkProvider: assistant trả response rỗng.',\n };\n }\n\n // Strip markdown fence nếu Sonnet vẫn add (defensive).\n let cleaned = assistantText.trim();\n cleaned = cleaned.replace(/^```(?:json)?\\s*\\n?/i, '').replace(/\\n?\\s*```\\s*$/, '');\n\n let data: unknown;\n try {\n data = JSON.parse(cleaned);\n } catch (e) {\n return {\n kind: 'error',\n message:\n 'ClaudeAgentSdkProvider: output không parse JSON: ' +\n ((e as { message?: string }).message ?? '?') +\n '. Output preview: ' +\n cleaned.slice(0, 200),\n };\n }\n\n return {\n kind: 'json',\n data,\n usage: {\n inputTokens: usageInput,\n outputTokens: usageOutput,\n cacheReadTokens: cacheRead,\n cacheCreationTokens: cacheCreation,\n },\n };\n }\n}\n","// src/stamps/geometry-2d/ai/providers/claude-cli.ts\n//\n// AIProvider impl qua `claude` CLI subprocess (Claude Code) — dev/eval only.\n// Tận dụng OAuth subscription Claude Pro/Max/Team đã đăng nhập sẵn ở máy,\n// charge vào quota subscription thay vì API console credits.\n//\n// LƯU Ý: Theo Anthropic ToS (cập nhật 02/2026), OAuth token từ subscription\n// chỉ legal cho Claude Code CLI / claude.ai. KHÔNG dùng provider này trong\n// production third-party app — chỉ dùng cho dev/eval local. Production phải\n// dùng AnthropicProvider với API key từ console.anthropic.com.\n//\n// CLI flags dùng:\n// --print batch mode (stdin → stdout)\n// --output-format json single-result JSON envelope\n// --json-schema <schema> structured-output constraint\n// --tools \"\" disable built-in Bash/Read/Write/Edit/...\n// --append-system-prompt inject DSL system prompt\n// --model <id> model id (alias 'sonnet'/'opus' hoặc full)\n// --max-budget-usd <usd> cost cap per call (safety)\n//\n// Parse `structured_output` field từ stdout JSON (không phải `result` —\n// `result` empty khi có --json-schema).\n\nimport type {\n AIProvider,\n ProviderOutput,\n ProviderRequest,\n ProviderTokenUsage,\n} from './types';\n\n// Lazy node:child_process — tránh bundle vào browser build (provider này\n// chỉ chạy ở Node env dev/eval).\ntype SpawnFn = typeof import('node:child_process').spawn;\n\nexport interface ClaudeCliProviderOptions {\n /** Binary path. Default 'claude'. Override qua env CLAUDE_CLI_BIN. */\n bin?: string;\n /** Default model id khi request không truyền. Default 'claude-sonnet-4-6'. */\n defaultModel?: string;\n /** Cost cap per call (USD). Default 0.50. */\n maxBudgetUsd?: number;\n /** Custom spawn impl (test mock). */\n spawnImpl?: SpawnFn;\n}\n\ninterface ClaudeCliResultEnvelope {\n type: 'result';\n subtype: 'success' | 'error_during_execution' | 'error_max_turns' | string;\n is_error: boolean;\n api_error_status?: string | null;\n result?: string;\n structured_output?: unknown;\n usage?: {\n input_tokens?: number;\n output_tokens?: number;\n cache_read_input_tokens?: number;\n cache_creation_input_tokens?: number;\n };\n total_cost_usd?: number;\n}\n\nconst DEFAULT_BIN = 'claude';\nconst DEFAULT_MODEL = 'claude-sonnet-4-6';\nconst DEFAULT_MAX_BUDGET_USD = 0.5;\n\nexport class ClaudeCliProvider implements AIProvider {\n readonly name = 'claude-cli';\n readonly defaultModel: string;\n private readonly bin: string;\n private readonly maxBudgetUsd: number;\n private readonly spawnImpl: SpawnFn | null;\n\n constructor(opts: ClaudeCliProviderOptions = {}) {\n this.bin = opts.bin ?? DEFAULT_BIN;\n this.defaultModel = opts.defaultModel ?? DEFAULT_MODEL;\n this.maxBudgetUsd = opts.maxBudgetUsd ?? DEFAULT_MAX_BUDGET_USD;\n this.spawnImpl = opts.spawnImpl ?? null;\n }\n\n private async resolveSpawn(): Promise<SpawnFn> {\n if (this.spawnImpl) return this.spawnImpl;\n const mod = await import('node:child_process');\n return mod.spawn;\n }\n\n async call(req: ProviderRequest): Promise<ProviderOutput> {\n let spawn: SpawnFn;\n try {\n spawn = await this.resolveSpawn();\n } catch (e) {\n return {\n kind: 'error',\n message:\n 'ClaudeCliProvider: node:child_process không khả dụng (chỉ chạy được ở Node env). ' +\n ((e as { message?: string }).message ?? ''),\n };\n }\n\n const args = [\n '--print',\n '--output-format', 'json',\n '--json-schema', JSON.stringify(req.schema),\n '--append-system-prompt', req.systemPrompt,\n '--tools', '',\n '--model', req.model,\n '--max-budget-usd', String(this.maxBudgetUsd),\n ];\n\n return new Promise<ProviderOutput>((resolve) => {\n let child;\n try {\n child = spawn(this.bin, args, { stdio: ['pipe', 'pipe', 'pipe'] });\n } catch (e) {\n resolve({\n kind: 'error',\n message:\n `ClaudeCliProvider: spawn '${this.bin}' thất bại. ` +\n ((e as { message?: string }).message ?? 'Kiểm tra claude CLI đã cài chưa.'),\n });\n return;\n }\n\n let stdout = '';\n let stderr = '';\n let settled = false;\n const settle = (out: ProviderOutput) => {\n if (settled) return;\n settled = true;\n resolve(out);\n };\n\n const onAbort = () => {\n child.kill('SIGTERM');\n settle({ kind: 'error', message: 'ClaudeCliProvider: aborted' });\n };\n if (req.signal) {\n if (req.signal.aborted) {\n onAbort();\n return;\n }\n req.signal.addEventListener('abort', onAbort, { once: true });\n }\n\n child.stdout?.on('data', (chunk: Buffer) => {\n stdout += chunk.toString('utf8');\n });\n child.stderr?.on('data', (chunk: Buffer) => {\n stderr += chunk.toString('utf8');\n });\n\n child.on('error', (e: Error) => {\n settle({\n kind: 'error',\n message: `ClaudeCliProvider: subprocess error: ${e.message}`,\n });\n });\n\n child.on('close', (code: number | null) => {\n if (settled) return;\n if (code !== 0) {\n settle({\n kind: 'error',\n message:\n `ClaudeCliProvider: exit code ${code}. stderr: ${stderr.trim() || '(empty)'}`,\n ...(typeof code === 'number' ? { status: code } : {}),\n });\n return;\n }\n\n let env: ClaudeCliResultEnvelope;\n try {\n env = JSON.parse(stdout.trim()) as ClaudeCliResultEnvelope;\n } catch (e) {\n settle({\n kind: 'error',\n message:\n 'ClaudeCliProvider: stdout không parse được JSON: ' +\n ((e as { message?: string }).message ?? '?'),\n });\n return;\n }\n\n if (env.is_error) {\n settle({\n kind: 'error',\n message:\n `ClaudeCliProvider: CLI báo lỗi (subtype=${env.subtype}, api_status=${env.api_error_status ?? 'n/a'})`,\n });\n return;\n }\n\n if (env.structured_output === undefined || env.structured_output === null) {\n settle({\n kind: 'error',\n message:\n 'ClaudeCliProvider: thiếu structured_output trong response. ' +\n `result=\"${(env.result ?? '').slice(0, 200)}\"`,\n });\n return;\n }\n\n const usage = toUsage(env.usage);\n settle({ kind: 'json', data: env.structured_output, usage });\n });\n\n // User prompt qua stdin (cleaner than arg cho prompt dài + escape).\n try {\n child.stdin?.write(req.userPrompt);\n child.stdin?.end();\n } catch (e) {\n settle({\n kind: 'error',\n message:\n 'ClaudeCliProvider: ghi stdin thất bại: ' +\n ((e as { message?: string }).message ?? '?'),\n });\n }\n });\n }\n}\n\nfunction toUsage(u: ClaudeCliResultEnvelope['usage']): ProviderTokenUsage {\n return {\n inputTokens: u?.input_tokens ?? 0,\n outputTokens: u?.output_tokens ?? 0,\n cacheReadTokens: u?.cache_read_input_tokens ?? 0,\n cacheCreationTokens: u?.cache_creation_input_tokens ?? 0,\n };\n}\n","// src/stamps/geometry-2d/ai/providers/ollama.ts\n//\n// AIProvider impl cho Ollama local. Dùng /api/chat với `format: <jsonSchema>`\n// (Ollama v0.5+ — structured outputs). Model emit JSON đúng schema, parse +\n// trả về envelope.\n//\n// Setup local:\n// $ ollama pull gemma3:4b # ~3.3GB Q4\n// $ ollama serve # mặc định port 11434\n//\n// Override base URL qua env `OLLAMA_BASE_URL` (test env / remote ollama).\n\nimport type {\n AIProvider,\n ProviderOutput,\n ProviderRequest,\n ProviderTokenUsage,\n VisionRequest,\n} from './types';\n\nconst DEFAULT_BASE_URL = 'http://localhost:11434';\nconst DEFAULT_MODEL = 'gemma3:4b';\n\nexport interface OllamaProviderOptions {\n /** Endpoint base URL, default http://localhost:11434. */\n baseUrl?: string;\n /** Default model id nếu request không truyền. */\n defaultModel?: string;\n /** Custom fetch impl (dùng cho test mock). */\n fetchImpl?: typeof fetch;\n}\n\ninterface OllamaChatResponse {\n model: string;\n message: { role: 'assistant'; content: string };\n done: boolean;\n prompt_eval_count?: number;\n eval_count?: number;\n total_duration?: number;\n}\n\nexport class OllamaProvider implements AIProvider {\n readonly name = 'ollama';\n readonly defaultModel: string;\n private readonly baseUrl: string;\n private readonly fetchImpl: typeof fetch | null;\n\n constructor(opts: OllamaProviderOptions = {}) {\n this.baseUrl = (opts.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/$/, '');\n this.defaultModel = opts.defaultModel ?? DEFAULT_MODEL;\n // Lazy resolve: jsdom test env không có global fetch; consumer chỉ cần\n // fetch ở runtime khi gọi .call(). Custom impl ưu tiên (test mock).\n this.fetchImpl = opts.fetchImpl ?? null;\n }\n\n private resolveFetch(): typeof fetch {\n if (this.fetchImpl) return this.fetchImpl;\n if (typeof fetch === 'undefined') {\n throw new Error(\n 'OllamaProvider: global `fetch` không khả dụng. Truyền `fetchImpl` qua constructor hoặc chạy ở Node 18+ / browser.',\n );\n }\n return fetch;\n }\n\n async call(req: ProviderRequest): Promise<ProviderOutput> {\n const body = {\n model: req.model,\n messages: [\n { role: 'system', content: req.systemPrompt },\n { role: 'user', content: req.userPrompt },\n ],\n format: req.schema,\n stream: true,\n options: { num_predict: req.maxTokens, temperature: 0.2 },\n };\n\n let doFetch: typeof fetch;\n try {\n doFetch = this.resolveFetch();\n } catch (e) {\n const err = e as { message?: string };\n return { kind: 'error', message: err.message ?? 'fetch không khả dụng' };\n }\n\n let resp: Response;\n try {\n resp = await doFetch(`${this.baseUrl}/api/chat`, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify(body),\n signal: req.signal,\n });\n } catch (e) {\n const err = e as { message?: string };\n return {\n kind: 'error',\n message: err.message ?? `Không kết nối được Ollama ở ${this.baseUrl}`,\n };\n }\n\n if (!resp.ok || !resp.body) {\n let detail = '';\n try { detail = await resp.text(); } catch { /* ignore */ }\n return {\n kind: 'error',\n message: `Ollama HTTP ${resp.status}: ${detail || resp.statusText}`,\n status: resp.status,\n };\n }\n\n const reader = resp.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n let content = '';\n let promptEvalCount = 0;\n let evalCount = 0;\n\n while (true) {\n const { value, done } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n let nl;\n while ((nl = buffer.indexOf('\\n')) !== -1) {\n const line = buffer.slice(0, nl).trim();\n buffer = buffer.slice(nl + 1);\n if (!line) continue;\n try {\n const chunk = JSON.parse(line) as {\n message?: { content?: string };\n done?: boolean;\n prompt_eval_count?: number;\n eval_count?: number;\n };\n if (chunk.message?.content) {\n content += chunk.message.content;\n if (req.onToken) {\n try { req.onToken(chunk.message.content); } catch { /* swallow */ }\n }\n }\n if (chunk.done) {\n promptEvalCount = chunk.prompt_eval_count ?? promptEvalCount;\n evalCount = chunk.eval_count ?? evalCount;\n }\n } catch { /* skip malformed line */ }\n }\n }\n\n const trimmed = content.trim();\n if (!trimmed) return { kind: 'error', message: 'Ollama trả message.content rỗng' };\n\n let data: unknown;\n try {\n data = JSON.parse(trimmed);\n } catch (e) {\n const err = e as { message?: string };\n return {\n kind: 'error',\n message: 'Ollama content không parse được JSON: ' + (err.message ?? '?'),\n };\n }\n\n return {\n kind: 'json',\n data,\n usage: {\n inputTokens: promptEvalCount,\n outputTokens: evalCount,\n cacheReadTokens: 0,\n cacheCreationTokens: 0,\n },\n };\n }\n\n // Vision: gửi ảnh qua images[] field trong message (Ollama multimodal API).\n // Model cần hỗ trợ vision (gemma3, llava, ...). Output vẫn là JSON envelope.\n async extractText(req: VisionRequest): Promise<ProviderOutput> {\n const model = req.model ?? this.defaultModel;\n const body = {\n model,\n messages: [\n { role: 'system', content: req.systemPrompt },\n {\n role: 'user',\n content: req.userPrompt,\n images: req.images.map((i) => i.base64),\n },\n ],\n format: req.schema,\n stream: false,\n options: { num_predict: req.maxTokens, temperature: 0.2 },\n };\n\n let doFetch: typeof fetch;\n try {\n doFetch = this.resolveFetch();\n } catch (e) {\n return { kind: 'error', message: (e as { message?: string }).message ?? 'fetch không khả dụng' };\n }\n\n let resp: Response;\n try {\n resp = await doFetch(`${this.baseUrl}/api/chat`, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify(body),\n signal: req.signal,\n });\n } catch (e) {\n return {\n kind: 'error',\n message: (e as { message?: string }).message ?? `Không kết nối được Ollama ở ${this.baseUrl}`,\n };\n }\n\n if (!resp.ok) {\n let detail = '';\n try { detail = await resp.text(); } catch { /* ignore */ }\n return {\n kind: 'error',\n message: `Ollama Vision HTTP ${resp.status}: ${detail || resp.statusText}`,\n status: resp.status,\n };\n }\n\n let json: OllamaChatResponse;\n try {\n json = (await resp.json()) as OllamaChatResponse;\n } catch (e) {\n return { kind: 'error', message: 'Ollama vision response không phải JSON: ' + ((e as { message?: string }).message ?? '?') };\n }\n\n const content = json.message?.content?.trim();\n if (!content) return { kind: 'error', message: 'Ollama vision trả content rỗng' };\n\n let data: unknown;\n try {\n data = JSON.parse(content);\n } catch (e) {\n return { kind: 'error', message: 'Ollama vision content không parse JSON: ' + ((e as { message?: string }).message ?? '?') };\n }\n\n const usage: ProviderTokenUsage = {\n inputTokens: json.prompt_eval_count ?? 0,\n outputTokens: json.eval_count ?? 0,\n cacheReadTokens: 0,\n cacheCreationTokens: 0,\n };\n return { kind: 'json', data, usage };\n }\n}\n","// src/stamps/geometry-2d/ai/providers/index.ts\n//\n// Public exports + selectProvider() factory dựa trên env hoặc explicit opts.\n//\n// Quy tắc chọn provider (high → low priority):\n// 1. opts.provider — instance đã build sẵn (test/custom)\n// 2. opts.apiKey — auto-route Anthropic (backward-compat caller cũ)\n// 3. env WHITEBOARD_AI_PROVIDER\n// - \"claude-agent-sdk\" (default): @anthropic-ai/claude-agent-sdk + OAuth subscription Pro/Max/Team\n// - \"anthropic\": cần env ANTHROPIC_API_KEY (pay-per-token console)\n// - \"claude-cli\": spawn `claude -p` subprocess (legacy, chậm hơn)\n// - \"ollama\": local, không cần key, đọc OLLAMA_BASE_URL tùy chọn\n\nimport { AnthropicProvider } from './anthropic';\nimport { ClaudeAgentSdkProvider } from './claude-agent-sdk';\nimport { ClaudeCliProvider } from './claude-cli';\nimport { OllamaProvider } from './ollama';\nimport type { AIProvider } from './types';\n\nexport type { AIProvider, ProviderOutput, ProviderRequest, ProviderTokenUsage } from './types';\nexport { AnthropicProvider } from './anthropic';\nexport { ClaudeAgentSdkProvider } from './claude-agent-sdk';\nexport { ClaudeCliProvider } from './claude-cli';\nexport { OllamaProvider } from './ollama';\n\nexport interface SelectProviderOptions {\n /** Provider instance dùng trực tiếp (override mọi env). */\n provider?: AIProvider;\n /** Anthropic API key. Khi truyền → auto chọn AnthropicProvider. */\n apiKey?: string;\n /** Anthropic prompt-caching, default true (chỉ áp dụng provider Anthropic). */\n enableCaching?: boolean;\n /** Ollama endpoint override. */\n ollamaBaseUrl?: string;\n /** Ollama model override (vd \"gemma3:1b\"). */\n ollamaDefaultModel?: string;\n /** Claude CLI binary path override (default 'claude'). */\n claudeCliBin?: string;\n /** Claude CLI default model override. */\n claudeCliDefaultModel?: string;\n /** Claude CLI max budget USD per call override. */\n claudeCliMaxBudgetUsd?: number;\n /** Claude Agent SDK OAuth token (subscription path). Fallback env CLAUDE_CODE_OAUTH_TOKEN. */\n claudeAgentSdkOauthToken?: string;\n /** Claude Agent SDK default model. */\n claudeAgentSdkDefaultModel?: string;\n /** Test env: env vars getter (default process.env). */\n env?: Record<string, string | undefined>;\n}\n\nexport function selectProvider(opts: SelectProviderOptions = {}): AIProvider {\n if (opts.provider) return opts.provider;\n if (opts.apiKey) {\n return new AnthropicProvider({\n apiKey: opts.apiKey,\n enableCaching: opts.enableCaching,\n });\n }\n\n const env = opts.env ?? readEnv();\n const wanted = (env.WHITEBOARD_AI_PROVIDER ?? 'claude-agent-sdk').toLowerCase();\n\n if (wanted === 'anthropic') {\n const key = env.ANTHROPIC_API_KEY;\n if (!key) {\n throw new Error(\n 'selectProvider: WHITEBOARD_AI_PROVIDER=anthropic nhưng thiếu env ANTHROPIC_API_KEY',\n );\n }\n return new AnthropicProvider({ apiKey: key, enableCaching: opts.enableCaching });\n }\n\n if (wanted === 'claude-cli') {\n const budgetEnv = env.CLAUDE_CLI_MAX_BUDGET_USD;\n const budgetNum = budgetEnv !== undefined ? Number(budgetEnv) : undefined;\n return new ClaudeCliProvider({\n bin: opts.claudeCliBin ?? env.CLAUDE_CLI_BIN,\n defaultModel: opts.claudeCliDefaultModel ?? env.CLAUDE_CLI_MODEL,\n maxBudgetUsd:\n opts.claudeCliMaxBudgetUsd ??\n (budgetNum !== undefined && Number.isFinite(budgetNum) ? budgetNum : undefined),\n });\n }\n\n if (wanted === 'claude-agent-sdk') {\n return new ClaudeAgentSdkProvider({\n oauthToken: opts.claudeAgentSdkOauthToken ?? env.CLAUDE_CODE_OAUTH_TOKEN,\n defaultModel:\n opts.claudeAgentSdkDefaultModel ?? env.CLAUDE_AGENT_SDK_MODEL,\n });\n }\n\n if (wanted === 'ollama') {\n return new OllamaProvider({\n baseUrl: opts.ollamaBaseUrl ?? env.OLLAMA_BASE_URL,\n defaultModel: opts.ollamaDefaultModel ?? env.OLLAMA_DEFAULT_MODEL,\n });\n }\n\n throw new Error(\n `selectProvider: WHITEBOARD_AI_PROVIDER=\"${wanted}\" không hợp lệ (anthropic|claude-cli|claude-agent-sdk|ollama)`,\n );\n}\n\nfunction readEnv(): Record<string, string | undefined> {\n // process.env không tồn tại ở pure browser; ở Node/Next.js server route thì OK.\n if (typeof process !== 'undefined' && process.env) {\n return process.env as Record<string, string | undefined>;\n }\n return {};\n}\n","// src/stamps/geometry-2d/ai/vision/envelope.ts\n//\n// Envelope schema cho OCR output. AI vision luôn emit:\n// { decision: 'extract', text: '...', confidence?: 'high'|'low' }\n// { decision: 'refuse', reason: '...' }\n//\n// Schema flatten được pass cho cả Anthropic tool input_schema + Ollama format.\n\nimport { z } from 'zod';\nimport { zodToJsonSchema } from 'zod-to-json-schema';\n\nexport const VisionEnvelopeZ = z\n .object({\n decision: z.enum(['extract', 'refuse']),\n text: z.string().optional(),\n confidence: z.enum(['high', 'low']).optional(),\n reason: z.string().optional(),\n })\n .refine(\n (e) =>\n e.decision === 'extract'\n ? e.text != null && e.text.length > 0\n : e.reason != null && e.reason.length > 0,\n { message: 'extract cần text không rỗng; refuse cần reason không rỗng' },\n );\n\nexport type VisionEnvelopeT = z.infer<typeof VisionEnvelopeZ>;\n\nexport function visionEnvelopeJsonSchema(): Record<string, unknown> {\n return zodToJsonSchema(VisionEnvelopeZ, {\n $refStrategy: 'none',\n target: 'jsonSchema7',\n }) as Record<string, unknown>;\n}\n","// src/stamps/geometry-2d/ai/vision/prompt.ts\n//\n// Prompt OCR chuyên đề toán hình học tiếng Việt. Giữ ký hiệu Unicode toán.\n\nexport function buildVisionSystemPrompt(): string {\n return [\n 'Bạn là OCR chuyên đọc đề toán hình học tiếng Việt từ ảnh.',\n '',\n 'NHIỆM VỤ:',\n '1. Đọc text trong ảnh, trả về phần ĐỀ BÀI (lời văn + công thức inline).',\n '2. GIỮ NGUYÊN các ký hiệu toán Unicode: Δ ⊥ ∥ ° ⊙ π → ≤ ≥ ∈ ∉ ∩ ∪.',\n '3. BỎ QUA hình vẽ minh hoạ — chỉ trả phần text.',\n '4. Nếu ảnh KHÔNG phải đề toán hình học (vd: văn học, ảnh đời thường, code, công thức không liên quan): decision=\"refuse\" với reason cụ thể bằng tiếng Việt.',\n '5. Đánh giá confidence:',\n ' - \"high\": ≥ 80% ký tự đọc rõ ràng, không nghi ngờ.',\n ' - \"low\": ảnh mờ, có chữ không chắc chắn, hoặc < 80% ký tự confident.',\n '',\n 'OUTPUT: JSON theo schema sau, không markdown, không giải thích thêm.',\n ' { \"decision\": \"extract\", \"text\": \"...\", \"confidence\": \"high\"|\"low\" }',\n ' { \"decision\": \"refuse\", \"reason\": \"...\" }',\n '',\n 'VÍ DỤ extract success:',\n ' { \"decision\": \"extract\", \"text\": \"Cho tam giác ABC vuông tại A. Kẻ đường cao AH ⊥ BC. Chứng minh AH² = BH · CH.\", \"confidence\": \"high\" }',\n '',\n 'VÍ DỤ refuse:',\n ' { \"decision\": \"refuse\", \"reason\": \"Ảnh không phải đề toán — đây là một đoạn văn về Truyện Kiều.\" }',\n ].join('\\n');\n}\n\nexport const VISION_USER_PROMPT = 'Đọc đề bài hình học trong ảnh sau.';\n","// src/stamps/geometry-2d/ai/vision/tesseract.ts\n//\n// Tesseract.js wrapper cho client-side OCR đề toán. Default vie+eng, terminate\n// worker sau mỗi call (không cache v1). Lazy import giữ bundle slim.\n\nimport type { ImagePart } from '../providers/types';\n\nexport interface TesseractOcrOptions {\n /** Tesseract language code. Default 'vie+eng' cho đề toán VN. */\n lang?: string;\n signal?: AbortSignal;\n}\n\nexport interface TesseractOcrResult {\n text: string;\n /** Confidence 0–100 (Tesseract scale). */\n confidence: number;\n}\n\nconst DEFAULT_LANG = 'vie+eng';\n\nexport async function runTesseractOcr(\n image: ImagePart,\n opts: TesseractOcrOptions = {},\n): Promise<TesseractOcrResult> {\n if (opts.signal?.aborted) {\n const err = new Error('Tesseract OCR aborted');\n err.name = 'AbortError';\n throw err;\n }\n\n const { createWorker } = await import('tesseract.js');\n const lang = opts.lang ?? DEFAULT_LANG;\n const worker = await createWorker(lang);\n\n try {\n const dataUrl = `data:${image.mediaType};base64,${image.base64}`;\n const { data } = await worker.recognize(dataUrl);\n return { text: data.text, confidence: data.confidence };\n } finally {\n await worker.terminate();\n }\n}\n","// src/stamps/geometry-2d/ai/vision/extractProblem.ts\n//\n// Orchestrator vision → text. Hỗ trợ 2 engine:\n// - 'tesseract' (default): client-side OCR, offline, không cần Ollama/API key.\n// - 'llm': Vision LLM qua AIProvider.extractText() (Ollama/Anthropic) — fallback\n// cho handwriting / math symbols.\n\nimport { selectProvider, type SelectProviderOptions } from '../providers';\nimport type { AIProvider, ImagePart, VisionRequest } from '../providers/types';\nimport { VisionEnvelopeZ, visionEnvelopeJsonSchema } from './envelope';\nimport { buildVisionSystemPrompt, VISION_USER_PROMPT } from './prompt';\nimport { runTesseractOcr } from './tesseract';\n\n// Ngưỡng: text ngắn hơn thì force confidence=low bất kể engine report gì.\nconst MIN_HIGH_CONFIDENCE_CHARS = 10;\nconst MAX_TEXT_CHARS = 2000;\n// Tesseract confidence (0-100): ≥ ngưỡng này coi như high.\nconst TESSERACT_HIGH_CONFIDENCE_THRESHOLD = 70;\n\nexport type VisionEngine = 'tesseract' | 'llm';\n\nexport interface ExtractProblemOptions extends SelectProviderOptions {\n /** OCR engine. Default 'tesseract' (client-side, không cần network). */\n engine?: VisionEngine;\n /** Tesseract language (chỉ áp dụng khi engine='tesseract'). Default 'vie+eng'. */\n tesseractLang?: string;\n /** Override model OCR cho LLM path. Priority cao hơn env. */\n visionModel?: string;\n /** Max tokens cho LLM response. Default 1024. */\n maxTokens?: number;\n /** Env getter override (cho test). */\n env?: Record<string, string | undefined>;\n signal?: AbortSignal;\n}\n\nexport interface ExtractProblemSuccess {\n ok: true;\n text: string;\n confidence: 'high' | 'low';\n usage: { inputTokens: number; outputTokens: number };\n}\n\nexport interface ExtractProblemFailure {\n ok: false;\n reason: 'not-math' | 'unreadable' | 'empty' | 'unsupported';\n message: string;\n}\n\nexport type ExtractProblemOutcome = ExtractProblemSuccess | ExtractProblemFailure;\n\n/** Pick vision model theo priority: opts → env → provider.defaultModel. */\nexport function pickVisionModel(\n providerDefault: string,\n opts: { visionModel?: string },\n env: Record<string, string | undefined>,\n): string {\n return opts.visionModel ?? env.WHITEBOARD_AI_VISION_MODEL ?? providerDefault;\n}\n\nexport async function extractProblemFromImage(\n image: ImagePart,\n opts: ExtractProblemOptions = {},\n): Promise<ExtractProblemOutcome> {\n const engine: VisionEngine = opts.engine ?? 'tesseract';\n if (engine === 'tesseract') {\n return extractViaTesseract(image, opts);\n }\n return extractViaLlm(image, opts);\n}\n\nasync function extractViaTesseract(\n image: ImagePart,\n opts: ExtractProblemOptions,\n): Promise<ExtractProblemOutcome> {\n let raw: { text: string; confidence: number };\n try {\n raw = await runTesseractOcr(image, {\n ...(opts.tesseractLang ? { lang: opts.tesseractLang } : {}),\n ...(opts.signal ? { signal: opts.signal } : {}),\n });\n } catch (e) {\n const err = e as { message?: string };\n return {\n ok: false,\n reason: 'unreadable',\n message: 'Tesseract OCR fail: ' + (err.message ?? '?'),\n };\n }\n\n const text = postProcess(raw.text);\n if (text.length === 0) {\n return { ok: false, reason: 'empty', message: 'Tesseract không trích được text.' };\n }\n\n const tooShort = text.length < MIN_HIGH_CONFIDENCE_CHARS;\n const lowConf = raw.confidence < TESSERACT_HIGH_CONFIDENCE_THRESHOLD;\n const confidence: 'high' | 'low' = tooShort || lowConf ? 'low' : 'high';\n\n return {\n ok: true,\n text,\n confidence,\n usage: { inputTokens: 0, outputTokens: 0 },\n };\n}\n\nasync function extractViaLlm(\n image: ImagePart,\n opts: ExtractProblemOptions,\n): Promise<ExtractProblemOutcome> {\n const provider: AIProvider = opts.provider ?? selectProvider(opts);\n if (!provider.extractText) {\n return {\n ok: false,\n reason: 'unsupported',\n message: `Provider \"${provider.name}\" không hỗ trợ đọc ảnh.`,\n };\n }\n\n const env = opts.env ?? readEnv();\n const model = pickVisionModel(provider.defaultModel, opts, env);\n const req: VisionRequest = {\n systemPrompt: buildVisionSystemPrompt(),\n userPrompt: VISION_USER_PROMPT,\n schema: visionEnvelopeJsonSchema(),\n images: [image],\n model,\n maxTokens: opts.maxTokens ?? 1024,\n ...(opts.signal ? { signal: opts.signal } : {}),\n };\n\n const out = await provider.extractText(req);\n if (out.kind === 'error') {\n return { ok: false, reason: 'unreadable', message: out.message };\n }\n\n const parsed = VisionEnvelopeZ.safeParse(out.data);\n if (!parsed.success) {\n return {\n ok: false,\n reason: 'empty',\n message: 'Không parse được output OCR: ' + parsed.error.message,\n };\n }\n\n const env_ = parsed.data;\n if (env_.decision === 'refuse') {\n return {\n ok: false,\n reason: 'not-math',\n message: env_.reason ?? 'Ảnh không phải đề toán.',\n };\n }\n\n const rawText = env_.text ?? '';\n const text = postProcess(rawText);\n if (text.length === 0) {\n return { ok: false, reason: 'empty', message: 'OCR không trích được text.' };\n }\n\n const tooShort = text.length < MIN_HIGH_CONFIDENCE_CHARS;\n const confidence: 'high' | 'low' =\n env_.confidence === 'low' || tooShort ? 'low' : 'high';\n\n const usage = out.usage ?? { inputTokens: 0, outputTokens: 0 };\n return {\n ok: true,\n text,\n confidence,\n usage: { inputTokens: usage.inputTokens, outputTokens: usage.outputTokens },\n };\n}\n\nfunction postProcess(raw: string): string {\n let t = raw.trim();\n t = t.replace(/\\*\\*(.+?)\\*\\*/g, '$1');\n t = t.replace(/\\*(.+?)\\*/g, '$1');\n t = t.replace(/_(.+?)_/g, '$1');\n t = t.replace(/```[\\s\\S]*?```/g, '').replace(/`([^`]+)`/g, '$1');\n t = t.replace(/\\s+/g, ' ').trim();\n t = t.normalize('NFC');\n if (t.length > MAX_TEXT_CHARS) t = t.slice(0, MAX_TEXT_CHARS);\n return t;\n}\n\nfunction readEnv(): Record<string, string | undefined> {\n if (typeof process !== 'undefined' && process.env) {\n return process.env as Record<string, string | undefined>;\n }\n return {};\n}\n","// src/stamps/geometry-2d/ai/handleExtractProblem.ts\n//\n// Façade UI-friendly cho extractProblemFromImage. Map outcome → UI result kind.\n\nimport {\n extractProblemFromImage,\n type ExtractProblemOptions,\n} from './vision/extractProblem';\nimport type { ImagePart } from './providers/types';\n\nexport interface HandleExtractProblemOptions extends ExtractProblemOptions {}\n\nexport type ExtractUiResult =\n | {\n kind: 'success';\n text: string;\n usage: { inputTokens: number; outputTokens: number };\n }\n | {\n kind: 'low-confidence';\n text: string;\n warning: string;\n usage: { inputTokens: number; outputTokens: number };\n }\n | {\n kind: 'refused';\n reason: 'not-math';\n message: string;\n }\n | {\n kind: 'error';\n code: 'network' | 'unsupported' | 'unexpected' | 'empty';\n message: string;\n };\n\nexport async function handleExtractProblem(\n image: ImagePart,\n opts: HandleExtractProblemOptions = {},\n): Promise<ExtractUiResult> {\n try {\n const r = await extractProblemFromImage(image, opts);\n if (r.ok) {\n if (r.confidence === 'low') {\n return {\n kind: 'low-confidence',\n text: r.text,\n warning: 'OCR có thể không chính xác, kiểm tra trước khi vẽ.',\n usage: r.usage,\n };\n }\n return { kind: 'success', text: r.text, usage: r.usage };\n }\n if (r.reason === 'not-math') {\n return { kind: 'refused', reason: 'not-math', message: r.message };\n }\n if (r.reason === 'unsupported') {\n return { kind: 'error', code: 'unsupported', message: r.message };\n }\n if (r.reason === 'unreadable') {\n return { kind: 'error', code: 'network', message: r.message };\n }\n return { kind: 'error', code: 'empty', message: r.message };\n } catch (e) {\n return {\n kind: 'error',\n code: 'unexpected',\n message: e instanceof Error ? e.message : String(e),\n };\n }\n}\n","// src/stamps/geometry-2d/ai/vision/preprocess.ts\n//\n// Pure-ish browser utilities cho image: validate, infer media type, downscale,\n// encode base64. fileToImagePart() là entry point chính cho UI.\n\nimport type { ImagePart } from '../providers/types';\n\nexport const MAX_EDGE_PX = 2048;\nexport const MAX_RAW_BYTES = 10 * 1024 * 1024; // 10 MB\nexport const MAX_ENCODED_BYTES = 3 * 1024 * 1024; // 3 MB blob threshold; base64 inflate ~33% → ~4 MB string, safely under Anthropic 5 MB image limit\n\nconst ALLOWED_TYPES = ['image/png', 'image/jpeg', 'image/webp'] as const;\ntype AllowedType = (typeof ALLOWED_TYPES)[number];\n\nexport type ValidationResult =\n | { ok: true; mediaType: AllowedType }\n | { ok: false; code: 'invalid-format' | 'too-large'; message: string };\n\nexport function inferMediaType(file: File): AllowedType | null {\n const t = file.type.toLowerCase();\n if ((ALLOWED_TYPES as readonly string[]).includes(t)) return t as AllowedType;\n return null;\n}\n\nexport function validateFile(file: File): ValidationResult {\n const mt = inferMediaType(file);\n if (mt == null) {\n return {\n ok: false,\n code: 'invalid-format',\n message: 'Chỉ hỗ trợ PNG, JPEG, WEBP.',\n };\n }\n if (file.size > MAX_RAW_BYTES) {\n return {\n ok: false,\n code: 'too-large',\n message: `Ảnh quá lớn (> ${Math.round(MAX_RAW_BYTES / 1024 / 1024)} MB). Crop hoặc resize trước.`,\n };\n }\n return { ok: true, mediaType: mt };\n}\n\n/**\n * Convert File → ImagePart. Auto-downscale nếu max edge > MAX_EDGE_PX.\n * Throws nếu file invalid hoặc decode fail.\n */\nexport async function fileToImagePart(file: File): Promise<ImagePart> {\n const v = validateFile(file);\n if (!v.ok) throw new Error(v.message);\n\n // Decode + có thể downscale qua canvas.\n const bitmap = await createImageBitmap(file);\n const { width, height } = bitmap;\n const maxEdge = Math.max(width, height);\n const scale = maxEdge > MAX_EDGE_PX ? MAX_EDGE_PX / maxEdge : 1;\n const targetW = Math.round(width * scale);\n const targetH = Math.round(height * scale);\n\n const canvas =\n typeof OffscreenCanvas !== 'undefined'\n ? new OffscreenCanvas(targetW, targetH)\n : Object.assign(document.createElement('canvas'), { width: targetW, height: targetH });\n const ctx = canvas.getContext('2d') as\n | CanvasRenderingContext2D\n | OffscreenCanvasRenderingContext2D\n | null;\n if (!ctx) throw new Error('Không tạo được canvas 2D context');\n ctx.drawImage(bitmap, 0, 0, targetW, targetH);\n bitmap.close();\n\n // Encode: PNG nếu input PNG, JPEG cho jpeg/webp.\n let outputType: AllowedType =\n v.mediaType === 'image/png' ? 'image/png' : 'image/jpeg';\n let finalBlob = await canvasToBlob(canvas, outputType, 0.92);\n\n // Nếu vẫn quá cap encoded → fallback JPEG quality 0.7 (kể cả PNG → JPEG,\n // vì OCR không cần alpha và JPEG nén tốt hơn nhiều).\n if (finalBlob.size > MAX_ENCODED_BYTES) {\n outputType = 'image/jpeg';\n finalBlob = await canvasToBlob(canvas, 'image/jpeg', 0.7);\n }\n\n const base64 = await blobToBase64(finalBlob);\n return { mediaType: outputType, base64 };\n}\n\nasync function canvasToBlob(\n canvas: HTMLCanvasElement | OffscreenCanvas,\n type: AllowedType,\n quality: number,\n): Promise<Blob> {\n if ('convertToBlob' in canvas) {\n return canvas.convertToBlob({ type, quality });\n }\n return new Promise((resolve, reject) => {\n (canvas as HTMLCanvasElement).toBlob(\n (b) => (b ? resolve(b) : reject(new Error('Canvas encode fail'))),\n type,\n quality,\n );\n });\n}\n\nasync function blobToBase64(blob: Blob): Promise<string> {\n const buf = await blob.arrayBuffer();\n // btoa cần string → dùng chunked conversion cho Uint8Array.\n let binary = '';\n const bytes = new Uint8Array(buf);\n const chunk = 0x8000;\n for (let i = 0; i < bytes.length; i += chunk) {\n binary += String.fromCharCode(...bytes.subarray(i, i + chunk));\n }\n return typeof btoa === 'function' ? btoa(binary) : Buffer.from(binary, 'binary').toString('base64');\n}\n","'use client';\n\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport type { State } from '../../../core/scene';\nimport type { GenerateGeometryFigure } from '../../shared/types';\nimport { useAiFigure } from './useAiFigure';\nimport { handleExtractProblem } from '../ai/handleExtractProblem';\nimport { fileToImagePart, validateFile } from '../ai/vision/preprocess';\nimport type { ImagePart } from '../ai/providers/types';\n\ninterface Props {\n generator: GenerateGeometryFigure;\n onGenerated: (state: State) => void;\n currentState?: State | null;\n extractProblem?: typeof handleExtractProblem;\n}\n\n// SVG icons giữ inline để khỏi tăng bundle deps; theo tone \"math-instrument refined\".\nconst PaperclipIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.75}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n {...props}\n >\n <path d=\"M21.44 11.05 12.25 20.24a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66L9.41 17.41a2 2 0 1 1-2.83-2.83l8.49-8.49\" />\n </svg>\n);\n\nconst ArrowUpIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2.25}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n {...props}\n >\n <path d=\"M12 19V5\" />\n <path d=\"m5 12 7-7 7 7\" />\n </svg>\n);\n\nconst StopIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden {...props}>\n <rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" rx=\"2\" />\n </svg>\n);\n\nexport function AiFigurePrompt({\n generator,\n onGenerated,\n currentState,\n extractProblem = handleExtractProblem,\n}: Props) {\n const {\n prompt,\n setPrompt,\n isLoading,\n error,\n submit,\n cancel,\n tokens,\n mode,\n setMode,\n entityCount,\n hasUnsupported,\n } = useAiFigure(generator, { currentState });\n\n // ── timer ──────────────────────────────────────────────\n const [elapsed, setElapsed] = useState(0);\n useEffect(() => {\n if (!isLoading) {\n setElapsed(0);\n return;\n }\n const id = setInterval(() => setElapsed((s) => s + 1), 1000);\n return () => clearInterval(id);\n }, [isLoading]);\n\n // ── image / vision state ───────────────────────────────\n const [image, setImage] = useState<ImagePart | null>(null);\n const [ocrLoading, setOcrLoading] = useState(false);\n const [ocrError, setOcrError] = useState<string | null>(null);\n const [ocrWarning, setOcrWarning] = useState<string | null>(null);\n const [isDragOver, setIsDragOver] = useState(false);\n\n const fileInputRef = useRef<HTMLInputElement>(null);\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n const imagePreview = image\n ? `data:${image.mediaType};base64,${image.base64}`\n : null;\n\n useEffect(() => {\n setOcrError(null);\n setOcrWarning(null);\n }, [image]);\n\n const handleFile = useCallback(\n async (file: File) => {\n if (isLoading || ocrLoading) return;\n const v = validateFile(file);\n if (!v.ok) {\n setOcrError(v.message);\n return;\n }\n try {\n const part = await fileToImagePart(file);\n setImage(part);\n } catch (e) {\n setOcrError(e instanceof Error ? e.message : 'Không decode được ảnh');\n }\n },\n [isLoading, ocrLoading],\n );\n\n const handleFileInput = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (file) void handleFile(file);\n e.target.value = '';\n },\n [handleFile],\n );\n\n const handlePaste = useCallback(\n (e: React.ClipboardEvent<HTMLElement>) => {\n const item = Array.from(e.clipboardData.items).find(\n (it) => it.kind === 'file' && it.type.startsWith('image/'),\n );\n if (!item) return;\n const file = item.getAsFile();\n if (!file) return;\n e.preventDefault();\n void handleFile(file);\n },\n [handleFile],\n );\n\n const handleDrop = useCallback(\n (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n setIsDragOver(false);\n const file = Array.from(e.dataTransfer.files).find((f) =>\n f.type.startsWith('image/'),\n );\n if (file) void handleFile(file);\n },\n [handleFile],\n );\n\n const runOcr = useCallback(async () => {\n if (!image) return;\n setOcrLoading(true);\n setOcrError(null);\n setOcrWarning(null);\n try {\n const r = await extractProblem(image);\n if (r.kind === 'success' || r.kind === 'low-confidence') {\n setPrompt(r.text);\n if (r.kind === 'low-confidence') setOcrWarning(r.warning);\n // Focus textarea sau OCR để user review/edit ngay.\n requestAnimationFrame(() => textareaRef.current?.focus());\n } else {\n setOcrError(r.message);\n }\n } finally {\n setOcrLoading(false);\n }\n }, [image, setPrompt, extractProblem]);\n\n const handleSendClick = useCallback(async () => {\n // Khi có ảnh + textarea rỗng → ưu tiên OCR trước (single-click flow).\n if (image && !prompt.trim() && !ocrLoading) {\n await runOcr();\n return;\n }\n const generated = await submit();\n if (generated) onGenerated(generated);\n }, [image, prompt, ocrLoading, runOcr, submit, onGenerated]);\n\n const handleSwitchToBuild = useCallback(() => {\n if (currentState && currentState.order.length > 0) {\n const ok = window.confirm(\n 'Dựng mới sẽ thay toàn bộ hình hiện tại bằng hình mới từ AI. Tiếp tục?',\n );\n if (!ok) return;\n }\n setMode('build');\n }, [currentState, setMode]);\n\n // ── derived ────────────────────────────────────────────\n const hasContent = currentState != null && currentState.order.length > 0;\n const promptEmpty = !prompt.trim();\n const willOcr = image != null && promptEmpty;\n const sendDisabled =\n (!image && promptEmpty) || ocrLoading || (isLoading && !willOcr);\n const refineChipLabel =\n entityCount.points + entityCount.shapes > 0\n ? `Thêm vào · ${entityCount.points}đ, ${entityCount.shapes}đoạn`\n : 'Thêm vào';\n\n const placeholder = willOcr\n ? 'Bấm gửi để đọc đề từ ảnh — hoặc tự gõ ở đây…'\n : mode === 'refine'\n ? 'Mô tả phần cần thêm (vd: trung điểm M của BC). Có thể dán ảnh đề (Ctrl+V).'\n : 'Mô tả đề bài cần dựng — hoặc dán/đính ảnh đề (Ctrl+V).';\n\n return (\n <div className=\"border-b border-slate-200 bg-slate-50 px-3 py-3\">\n {/* Header label + mode pills */}\n <div className=\"mb-2 flex items-center justify-between gap-2\">\n <span className=\"text-xs font-medium tracking-wide text-slate-600\">\n Dựng hình bằng AI\n </span>\n {hasContent && (\n <div className=\"flex items-center gap-1\" role=\"tablist\" aria-label=\"Chế độ AI\">\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={mode === 'refine'}\n data-testid=\"geometry-ai-mode-refine\"\n onClick={() => setMode('refine')}\n disabled={isLoading || hasUnsupported}\n title={\n hasUnsupported\n ? 'Hình có đối tượng ngoài DSL — chỉ dựng mới được'\n : refineChipLabel\n }\n className={`rounded-full px-2.5 py-0.5 text-[11px] transition ${\n mode === 'refine'\n ? 'bg-emerald-600 text-white shadow-sm'\n : 'text-slate-500 hover:text-emerald-700'\n } ${hasUnsupported ? 'cursor-not-allowed opacity-40' : ''}`}\n >\n {refineChipLabel}\n </button>\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={mode === 'build'}\n data-testid=\"geometry-ai-mode-build\"\n onClick={handleSwitchToBuild}\n disabled={isLoading}\n className={`rounded-full px-2.5 py-0.5 text-[11px] transition ${\n mode === 'build'\n ? 'bg-emerald-600 text-white shadow-sm'\n : 'text-slate-500 hover:text-emerald-700'\n }`}\n >\n Dựng mới\n </button>\n </div>\n )}\n </div>\n\n {hasUnsupported && (\n <p\n className=\"mb-1.5 text-[10px] text-amber-700\"\n data-testid=\"geometry-ai-unsupported-warning\"\n >\n Hình có đối tượng ngoài DSL — chỉ dựng mới được\n </p>\n )}\n\n {/* Composer */}\n <div\n onDragOver={(e) => {\n e.preventDefault();\n setIsDragOver(true);\n }}\n onDragLeave={() => setIsDragOver(false)}\n onDrop={handleDrop}\n onPaste={handlePaste}\n aria-label=\"Khu vực kéo thả ảnh\"\n role=\"region\"\n className={\n 'group relative flex flex-col rounded-2xl bg-white shadow-sm transition-all duration-150 ' +\n 'ring-1 ring-slate-200 focus-within:ring-2 focus-within:ring-emerald-400/70 focus-within:shadow-md ' +\n (isDragOver ? 'ring-2 ring-emerald-500 bg-emerald-50/40' : '')\n }\n >\n {/* Image chip */}\n {image && imagePreview && (\n <div className=\"flex flex-wrap gap-2 px-3 pt-2.5\">\n <div className=\"group/chip relative\">\n <img\n src={imagePreview}\n alt=\"Ảnh đề bài\"\n className=\"max-h-48 max-w-full h-auto w-auto rounded-lg border border-slate-200 shadow-sm\"\n />\n <button\n type=\"button\"\n onClick={() => setImage(null)}\n disabled={ocrLoading || isLoading}\n aria-label=\"Xoá ảnh\"\n className=\"absolute -right-1.5 -top-1.5 flex h-5 w-5 items-center justify-center rounded-full bg-slate-900/85 text-[11px] font-medium text-white shadow ring-2 ring-white transition hover:bg-slate-900 disabled:opacity-50\"\n >\n ×\n </button>\n </div>\n </div>\n )}\n\n {/* Textarea */}\n <textarea\n ref={textareaRef}\n id=\"geometry-ai-prompt\"\n aria-label=\"Đề bài cho AI\"\n data-testid=\"geometry-ai-textarea\"\n value={prompt}\n onChange={(e) => setPrompt(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey) && !sendDisabled) {\n e.preventDefault();\n void handleSendClick();\n }\n }}\n disabled={isLoading}\n rows={2}\n placeholder={placeholder}\n className=\"block w-full resize-none rounded-2xl bg-transparent px-3.5 pt-2.5 pb-1 text-sm leading-relaxed text-slate-800 placeholder:text-slate-400 outline-none disabled:opacity-60 field-sizing-content max-h-44\"\n />\n\n {/* Bottom action bar */}\n <div className=\"flex items-center justify-between gap-2 px-2 pb-2 pt-1\">\n <div className=\"flex items-center gap-1\">\n <button\n type=\"button\"\n onClick={() => fileInputRef.current?.click()}\n disabled={isLoading || ocrLoading}\n aria-label=\"Đính ảnh đề bài\"\n title=\"Đính ảnh (cũng có thể dán bằng Ctrl+V hoặc kéo thả)\"\n className=\"flex h-8 w-8 items-center justify-center rounded-full text-slate-500 transition hover:bg-slate-100 hover:text-emerald-700 disabled:opacity-40\"\n >\n <PaperclipIcon className=\"h-[18px] w-[18px]\" />\n </button>\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\"image/png,image/jpeg,image/webp\"\n className=\"sr-only\"\n onChange={handleFileInput}\n disabled={isLoading || ocrLoading}\n aria-label=\"Chọn ảnh đề bài\"\n />\n </div>\n\n <div className=\"flex items-center gap-2\">\n {/* Status text */}\n {(isLoading || ocrLoading) && (\n <span className=\"font-mono text-[10px] tabular-nums text-slate-500\">\n {ocrLoading\n ? 'đọc ảnh…'\n : tokens > 0\n ? `${tokens}tok · ${elapsed}s`\n : `${elapsed}s`}\n </span>\n )}\n\n {/* Send / Stop button */}\n {isLoading ? (\n <button\n type=\"button\"\n onClick={cancel}\n aria-label=\"Huỷ dựng hình AI\"\n data-testid=\"geometry-ai-cancel\"\n title={`Đang dựng… ${elapsed}s — bấm để huỷ`}\n className=\"flex h-8 w-8 items-center justify-center rounded-full bg-amber-500 text-white shadow-sm transition hover:scale-105 hover:bg-amber-600 active:scale-95\"\n >\n <StopIcon className=\"h-3.5 w-3.5\" />\n </button>\n ) : (\n <button\n type=\"button\"\n onClick={() => void handleSendClick()}\n disabled={sendDisabled}\n aria-label={willOcr ? 'Đọc đề từ ảnh' : 'Dựng bằng AI'}\n title={willOcr ? 'Đọc đề từ ảnh (sẽ điền vào ô chat)' : 'Dựng bằng AI (Ctrl/⌘+Enter)'}\n data-testid={willOcr ? 'geometry-ai-ocr' : 'geometry-ai-submit'}\n className=\"flex h-8 w-8 items-center justify-center rounded-full bg-emerald-600 text-white shadow-sm transition hover:scale-105 hover:bg-emerald-700 active:scale-95 disabled:cursor-not-allowed disabled:bg-slate-300 disabled:hover:scale-100\"\n >\n <ArrowUpIcon className=\"h-[18px] w-[18px]\" />\n </button>\n )}\n </div>\n </div>\n\n {/* Drag overlay hint */}\n {isDragOver && (\n <div className=\"pointer-events-none absolute inset-0 flex items-center justify-center rounded-2xl bg-emerald-50/60 text-xs font-medium text-emerald-700\">\n Thả ảnh vào đây\n </div>\n )}\n </div>\n\n {/* Footer hint + alerts */}\n <p className=\"mt-1.5 px-1 text-[10px] text-slate-500\">\n Dán ảnh (Ctrl+V), kéo thả, hoặc bấm <span aria-hidden>📎</span> để đính ảnh đề.\n </p>\n\n {error && (\n <p role=\"alert\" className=\"mt-1 px-1 text-xs text-red-600\">\n {error}\n </p>\n )}\n {ocrError && (\n <p role=\"alert\" className=\"mt-1 px-1 text-xs text-red-600\">\n {ocrError}\n </p>\n )}\n {ocrWarning && (\n <p className=\"mt-1 rounded bg-amber-50 px-2 py-1 text-[11px] text-amber-700\">\n {ocrWarning}\n </p>\n )}\n </div>\n );\n}\n","'use client';\nimport React, { forwardRef, useCallback, useEffect, useImperativeHandle, useRef, useState, useSyncExternalStore } from 'react';\nimport { MiniBoard2D, type MiniBoardHandle, type GeomTool, type ObjectSnapshot, type SelectionStateSnapshot, type TransformPopoverInfo } from './MiniBoard';\nimport { serializeBoard } from '../serialize';\nimport { renderGeometrySvgFromState } from '../render';\nimport { PropertiesPopover } from './PropertiesPopover';\nimport { MultiPropertiesPopover } from './MultiPropertiesPopover';\nimport { TransformParamPopover } from './TransformParamPopover';\nimport { buildObjectSnapshot } from './snapshot';\nimport { UndoIcon, RedoIcon } from './icons';\nimport { useEditorState, type State, type Store } from '../../../core/scene';\nimport { STAMP_PANEL_DESKTOP } from '../../shared/StampLeftPanel/constants';\nimport { ToastProvider, ToastHost, useToast } from '../../shared/Toast';\nimport type { GenerateGeometryFigure } from '../../shared/types';\nimport { AiFigurePrompt } from './AiFigurePrompt';\n\ninterface Props {\n /** Scene store do Host tạo qua `useStampStore`. View info đã ở store.meta.view. */\n store: Store;\n onInsert: (jsonState: string, svgString: string) => void;\n onClose: () => void;\n /** Khi true, panel position offset left để chừa chỗ cho StampLeftPanel (240px). */\n withLeftPanel?: boolean;\n /** Controlled prop — host owns (Tier 2 F). */\n selectedTool: GeomTool;\n /** Controlled prop — host owns (Tier 2 F). */\n showAxis: boolean;\n /** Controlled prop — host owns (Tier 2 F). */\n showGrid: boolean;\n /** Notify host về canUndo/canRedo qua store subscribe (Tier 2 F). */\n onHistoryChange?: (canUndo: boolean, canRedo: boolean) => void;\n isDark?: boolean;\n /** Mobile mode: full-screen + hamburger header. */\n isMobile?: boolean;\n /** Click hamburger trên mobile để mở LeftPanel drawer. */\n onOpenDrawer?: () => void;\n /** Mobile header: undo/redo. Bypass LeftPanel để user truy cập nhanh. */\n onUndo?: () => void;\n onRedo?: () => void;\n canUndo?: boolean;\n canRedo?: boolean;\n /** Báo lên Host khi selection đổi qua action trong editor. */\n onSelectionChange?: (id: string | undefined) => void;\n /** Client-safe bridge to a server-side AI generation call. */\n generateGeometryFigure?: GenerateGeometryFigure;\n}\n\nexport interface GeometryEditorPanelHandle {\n /** Trigger Chèn programmatically (cho auto-insert khi click outside). */\n insert: () => boolean;\n /** Có nội dung để chèn không? */\n hasContent: () => boolean;\n /** Highlight object theo id từ bên ngoài (ObjectListPanel trong Host). */\n selectObject: (id: string | null) => void;\n}\n\nconst GeometryEditorPanelInner = forwardRef<GeometryEditorPanelHandle, Props>(\n function GeometryEditorPanelInner(\n {\n store,\n onInsert,\n onClose,\n withLeftPanel = false,\n selectedTool,\n showAxis,\n showGrid,\n onHistoryChange,\n isDark,\n isMobile = false,\n onOpenDrawer,\n onUndo,\n onRedo,\n canUndo,\n canRedo,\n onSelectionChange,\n generateGeometryFigure,\n },\n ref,\n ) {\n const { showToast } = useToast();\n const handleRef = useRef<MiniBoardHandle | null>(null);\n const [ready, setReady] = useState(false);\n const [hasContent, setHasContent] = useState(false);\n const [propsPopover, setPropsPopover] = useState<ObjectSnapshot | null>(null);\n /** Multi-select snapshot — render compact popover khi ids.length > 1. */\n const [multiSelection, setMultiSelection] = useState<SelectionStateSnapshot | null>(null);\n // Handlers emit cả 6 transform tool (rotate/dilate/regularPolygon/translate/\n // reflectLine/reflectPoint); TransformParamPopover chỉ render 3 tool có\n // numeric param — guard ở chỗ render.\n const [transformPopover, setTransformPopover] = useState<TransformPopoverInfo>(null);\n const onSelectionChangeRef = useRef(onSelectionChange);\n useEffect(() => { onSelectionChangeRef.current = onSelectionChange; }, [onSelectionChange]);\n\n // Tier 2 F — propagate canUndo/canRedo + keyboard shortcuts qua shared hook.\n useEditorState({ store, onHistoryChange });\n\n // Reactive scene state — for AiFigurePrompt currentState (multi-step refine).\n const currentSceneState = useSyncExternalStore(\n (cb) => store.subscribe(cb),\n () => store.getState(),\n () => store.getState(),\n );\n\n // hasContent: track store size để gate Insert button.\n useEffect(() => {\n const sync = () => setHasContent(Object.keys(store.getState().objects).length > 0);\n sync();\n return store.subscribe(sync);\n }, [store]);\n\n const handleReady = useCallback(() => {\n const h = handleRef.current;\n if (!h) return;\n setReady(true);\n h.onSelect((snap: ObjectSnapshot) => {\n setPropsPopover(snap);\n setMultiSelection(null);\n onSelectionChangeRef.current?.(snap.id);\n });\n h.onTransformParam((info) => setTransformPopover(info));\n // selection-state channel: fire mỗi khi selectedSetRef đổi (click,\n // shift-click, marquee, clearSelection). Derive popover từ size:\n // 0 → ẩn cả 2 popover\n // 1 → single PropertiesPopover (derive ObjectSnapshot từ store)\n // ≥2 → MultiPropertiesPopover (compact: color + delete)\n h.onSelectionState((snap) => {\n if (!snap || snap.ids.length === 0) {\n setPropsPopover(null);\n setMultiSelection(null);\n onSelectionChangeRef.current?.(undefined);\n return;\n }\n if (snap.ids.length === 1) {\n const id = snap.ids[0];\n const single = buildObjectSnapshot(store.getState(), id, snap.anchor);\n if (single) {\n setPropsPopover(single);\n setMultiSelection(null);\n onSelectionChangeRef.current?.(id);\n }\n return;\n }\n setMultiSelection(snap);\n setPropsPopover(null);\n onSelectionChangeRef.current?.(undefined);\n });\n }, [store]);\n\n const dismissPropsPopover = useCallback(() => {\n setPropsPopover(null);\n onSelectionChangeRef.current?.(undefined);\n }, []);\n\n const dismissMultiPopover = useCallback(() => {\n setMultiSelection(null);\n handleRef.current?.clearSelection();\n onSelectionChangeRef.current?.(undefined);\n }, []);\n\n const applyMultiColor = useCallback((color: string) => {\n const ids = multiSelection?.ids ?? [];\n const h = handleRef.current;\n if (!h) return;\n for (const id of ids) {\n h.mutateObject(id, { attrs: { strokeColor: color, color } });\n }\n }, [multiSelection]);\n\n const applyMultiDelete = useCallback(() => {\n const ids = multiSelection?.ids ?? [];\n const h = handleRef.current;\n if (!h) return;\n for (const id of ids) {\n h.mutateObject(id, { remove: true });\n }\n h.clearSelection();\n setMultiSelection(null);\n onSelectionChangeRef.current?.(undefined);\n }, [multiSelection]);\n\n // Build serialized state (format v2) — async vì SVG render offscreen\n // với light palette để Excalidraw filter tự đảo khi dark mode.\n const performInsert = useCallback((): boolean => {\n if (!handleRef.current) return false;\n const h = handleRef.current;\n const state = h.getState();\n if (Object.keys(state.objects).length === 0) return false;\n const bbox = h.getBbox();\n const jsonState = serializeBoard(state, { bbox, showAxis, showGrid });\n // Fire-and-forget. Caller (`tryInsert`) chỉ cần biết có nội dung không.\n void (async () => {\n try {\n const svgString = await renderGeometrySvgFromState(jsonState);\n onInsert(jsonState, svgString);\n } catch (err) {\n console.error('Geometry insert failed:', err);\n }\n })();\n return true;\n }, [onInsert, showAxis, showGrid]);\n\n const handleInsert = useCallback(() => {\n performInsert();\n }, [performInsert]);\n\n const loadAiFigure = useCallback((generated: State) => {\n handleRef.current?.clearSelection();\n setPropsPopover(null);\n setMultiSelection(null);\n setTransformPopover(null);\n onSelectionChangeRef.current?.(undefined);\n const current = store.getState();\n store.dispatch({\n type: 'LOAD',\n payload: { state: { ...generated, meta: current.meta } },\n });\n }, [store]);\n\n useImperativeHandle(ref, () => ({\n insert: performInsert,\n hasContent: () => Object.keys(handleRef.current?.getState().objects ?? {}).length > 0,\n selectObject: (id) => handleRef.current?.highlight(id),\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\"\n data-testid=\"geometry-editor-panel\"\n data-stamp-area=\"true\"\n data-mobile-editor={isMobile ? 'true' : undefined}\n style={wrapperStyle}\n className={[\n isDark ? 'theme--dark ' : '',\n 'relative flex flex-col overflow-hidden bg-white',\n isMobile\n ? 'h-full w-full'\n : `${STAMP_PANEL_DESKTOP} 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-emerald-600 to-teal-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 <polygon points=\"3,18 12,3 21,18\" />\n <circle cx=\"12\" cy=\"3\" r=\"1.5\" fill=\"currentColor\" />\n <circle cx=\"3\" cy=\"18\" r=\"1.5\" fill=\"currentColor\" />\n <circle cx=\"21\" cy=\"18\" r=\"1.5\" fill=\"currentColor\" />\n </svg>\n Dựng hình học\n </h3>\n {isMobile && (\n <>\n <button\n type=\"button\"\n onClick={onUndo}\n disabled={!canUndo}\n aria-label=\"Hoàn tác\"\n title=\"Hoàn tác (Ctrl/Cmd+Z)\"\n data-testid=\"undo-btn-mobile\"\n className=\"inline-flex h-9 w-9 items-center justify-center rounded transition hover:bg-white/15 disabled:opacity-40\"\n >\n <UndoIcon />\n </button>\n <button\n type=\"button\"\n onClick={onRedo}\n disabled={!canRedo}\n aria-label=\"Làm lại\"\n title=\"Làm lại (Ctrl/Cmd+Shift+Z)\"\n data-testid=\"redo-btn-mobile\"\n className=\"inline-flex h-9 w-9 items-center justify-center rounded transition hover:bg-white/15 disabled:opacity-40\"\n >\n <RedoIcon />\n </button>\n <button\n type=\"button\"\n onClick={handleInsert}\n disabled={!ready || !hasContent}\n title={!hasContent ? 'Vẽ ít nhất một đối tượng trước khi chèn' : undefined}\n data-testid=\"geometry-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 )}\n <button onClick={onClose} aria-label=\"Đóng\" className=\"inline-flex h-9 w-9 items-center justify-center rounded transition hover:bg-white/15\">\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 {generateGeometryFigure && (\n <AiFigurePrompt generator={generateGeometryFigure} onGenerated={loadAiFigure} currentState={currentSceneState} />\n )}\n <div className=\"flex min-h-0 flex-1\">\n <div className=\"flex-1\">\n <MiniBoard2D\n ref={handleRef}\n store={store}\n selectedTool={selectedTool}\n showAxis={showAxis}\n showGrid={showGrid}\n onReady={handleReady}\n isDark={isDark}\n toast={showToast}\n />\n </div>\n </div>\n {propsPopover && (\n propsPopover.kind === 'point' ? (\n <PropertiesPopover\n kind=\"point\"\n anchor={propsPopover.screenCoords}\n isDark={isDark}\n currentName={propsPopover.name}\n currentColor={propsPopover.color}\n currentDash={propsPopover.dash}\n currentWidth={propsPopover.width}\n currentFace={propsPopover.face}\n currentShowLabel={propsPopover.showLabel}\n getAllNames={() => handleRef.current?.getAllPointNames() ?? []}\n onClose={dismissPropsPopover}\n onMutate={(patch) => {\n handleRef.current?.mutateObject(propsPopover.id, patch);\n if (patch.remove) dismissPropsPopover();\n // Refresh snapshot để UI checkbox phản ánh state mới\n if (typeof patch.valueLabel === 'boolean' || patch.attrs) {\n setPropsPopover((cur) => cur ? { ...cur, showValue: patch.valueLabel ?? cur.showValue } : cur);\n }\n }}\n />\n ) : (\n <PropertiesPopover\n kind={propsPopover.kind}\n anchor={propsPopover.screenCoords}\n isDark={isDark}\n currentName={propsPopover.name}\n currentColor={propsPopover.color}\n currentDash={propsPopover.dash}\n currentWidth={propsPopover.width}\n currentShowLabel={propsPopover.showLabel}\n currentShowValue={propsPopover.showValue}\n getAllNames={() => handleRef.current?.getAllPointNames() ?? []}\n onClose={dismissPropsPopover}\n onMutate={(patch) => {\n handleRef.current?.mutateObject(propsPopover.id, patch);\n if (patch.remove) dismissPropsPopover();\n if (typeof patch.valueLabel === 'boolean') {\n setPropsPopover((cur) => cur ? { ...cur, showValue: patch.valueLabel ?? cur.showValue } : cur);\n }\n if (patch.attrs && 'withLabel' in patch.attrs) {\n setPropsPopover((cur) => cur ? { ...cur, showLabel: !!patch.attrs?.withLabel } : cur);\n }\n }}\n />\n )\n )}\n\n {multiSelection && multiSelection.ids.length > 1 && (\n <MultiPropertiesPopover\n anchor={multiSelection.anchor}\n count={multiSelection.ids.length}\n isDark={isDark}\n onColor={applyMultiColor}\n onDelete={applyMultiDelete}\n onClose={dismissMultiPopover}\n />\n )}\n\n {transformPopover && (transformPopover.tool === 'rotate' || transformPopover.tool === 'dilate' || transformPopover.tool === 'regularPolygon' || transformPopover.tool === 'circleCR') && (\n <TransformParamPopover\n kind={transformPopover.tool}\n anchor={transformPopover.anchor}\n defaultValue={\n transformPopover.tool === 'rotate' ? 90\n : transformPopover.tool === 'dilate' ? 2\n : transformPopover.tool === 'circleCR' ? 3\n : 6\n }\n isDark={isDark}\n onConfirm={(v) => { handleRef.current?.confirmTransformParam(v); setTransformPopover(null); }}\n onCancel={() => { handleRef.current?.cancelTransformParam(); setTransformPopover(null); }}\n />\n )}\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 || !hasContent}\n title={!hasContent ? 'Vẽ ít nhất một đối tượng trước khi chèn' : undefined}\n data-testid=\"geometry-insert-btn\"\n className=\"rounded bg-emerald-600 px-3 py-1 text-xs font-medium text-white transition hover:bg-emerald-700 disabled:opacity-50\"\n >\n Chèn\n </button>\n </div>\n </footer>\n )}\n <ToastHost />\n </div>\n );\n },\n);\n\nexport const GeometryEditorPanel = forwardRef<GeometryEditorPanelHandle, Props>(\n function GeometryEditorPanel(props, ref) {\n return (\n <ToastProvider>\n <GeometryEditorPanelInner {...props} ref={ref} />\n </ToastProvider>\n );\n },\n);\n","import { useCallback, useEffect, useRef, useState } from 'react';\n\ninterface UseChordShortcutArgs<G extends string> {\n groupOrder: readonly G[];\n tools: ReadonlyArray<{ key: string; group: G }>;\n onSelect: (toolKey: string) => void;\n enabled: boolean;\n}\n\ninterface UseChordShortcutResult<G extends string> {\n chordGroup: G | null;\n cancel: () => void;\n}\n\nconst A_CODE = 'a'.charCodeAt(0);\n\nfunction isFieldFocused(): boolean {\n const ae = (typeof document !== 'undefined'\n ? (document.activeElement as HTMLElement | null)\n : null);\n return !!(\n ae &&\n (ae.tagName === 'INPUT' ||\n ae.tagName === 'TEXTAREA' ||\n ae.isContentEditable)\n );\n}\n\nexport function useChordShortcut<G extends string>(\n args: UseChordShortcutArgs<G>,\n): UseChordShortcutResult<G> {\n const { groupOrder, tools, onSelect, enabled } = args;\n\n const [chordGroup, setChordGroup] = useState<G | null>(null);\n\n const groupOrderRef = useRef(groupOrder);\n const toolsRef = useRef(tools);\n const onSelectRef = useRef(onSelect);\n const chordGroupRef = useRef<G | null>(null);\n\n groupOrderRef.current = groupOrder;\n toolsRef.current = tools;\n onSelectRef.current = onSelect;\n // chordGroupRef được sync ngay trong handler (xem `setChord` dưới đây)\n // thay vì ghi từ render body — nếu ghi ở body sẽ bị React batch hoá khi\n // hai event xảy ra trong cùng một act() (event sau đọc giá trị cũ).\n\n const cancel = useCallback(() => {\n chordGroupRef.current = null;\n setChordGroup(null);\n }, []);\n\n useEffect(() => {\n if (!enabled) return;\n\n const setChord = (next: G | null) => {\n chordGroupRef.current = next;\n setChordGroup(next);\n };\n\n const onKey = (e: KeyboardEvent) => {\n if (e.metaKey || e.ctrlKey || e.altKey) return;\n if (isFieldFocused()) return;\n\n const key = e.key;\n const lower = key.length === 1 ? key.toLowerCase() : key;\n\n if (key === 'Escape') {\n if (chordGroupRef.current !== null) {\n e.preventDefault();\n e.stopPropagation();\n setChord(null);\n }\n return;\n }\n\n if (lower.length === 1 && lower >= 'a' && lower <= 'z') {\n const idx = lower.charCodeAt(0) - A_CODE;\n if (idx < groupOrderRef.current.length) {\n e.preventDefault();\n e.stopPropagation();\n setChord(groupOrderRef.current[idx]);\n }\n return;\n }\n\n if (key >= '1' && key <= '9') {\n const active = chordGroupRef.current;\n if (active === null) return;\n const n = key.charCodeAt(0) - '1'.charCodeAt(0); // 0-indexed\n const toolsInGroup = toolsRef.current.filter(\n (t) => t.group === active,\n );\n e.preventDefault();\n e.stopPropagation();\n if (n < toolsInGroup.length) {\n onSelectRef.current(toolsInGroup[n].key);\n }\n setChord(null);\n return;\n }\n };\n\n window.addEventListener('keydown', onKey, { capture: true });\n return () => {\n window.removeEventListener('keydown', onKey, { capture: true });\n };\n }, [enabled]);\n\n return { chordGroup, cancel };\n}\n","import { createStampFile } from './svgToStampFile';\nimport type { ExcalidrawElement } from '../../types';\n\n// Excalidraw imperative API — không có public type chính xác. Giữ untyped ở\n// boundary và yêu cầu caller pass đúng instance.\n \ntype ExApi = any;\n\nexport interface InsertStampImageOptions {\n /** SVG string sẵn sàng render (geometry export hoặc katex render). */\n svgString: string;\n /**\n * Factory tạo customData. Mỗi stamp tự define shape (kind, version, jsonState).\n * width/height của element đã được Excalidraw track riêng — không cần lưu\n * trong customData (drop tại Tier D cleanup v0.20).\n */\n makeCustomData: () => unknown;\n /** Nếu đang re-edit, id của element cũ — sẽ update thay vì tạo mới. */\n editingElementId?: string | null;\n /** Vị trí gốc (lúc tạo mới). Bỏ qua khi đang re-edit. */\n position?: { x?: number; y?: number };\n}\n\nexport interface InsertStampImageResult {\n fileId: string;\n width: number;\n height: number;\n /** Element id (mới hoặc cũ tuỳ flow). */\n elementId: string;\n}\n\n// Bỏ qua appState (selectedElementIds + croppingElementId) sau khi insert để\n// Excalidraw không tự động bật crop mode cho element vừa thêm → tránh trigger\n// crop intercept handler vô tận.\n \nconst clearAppStateAfterInsert = (): any => ({\n selectedElementIds: {},\n croppingElementId: null,\n});\n\nfunction buildStampImageElement(\n api: ExApi,\n fileId: string,\n width: number,\n height: number,\n customData: unknown,\n x?: number,\n y?: number,\n) {\n const appState =\n api?.getAppState() ?? { scrollX: 0, scrollY: 0, width: 800, height: 600, zoom: { value: 1 } };\n const cx =\n x ?? appState.scrollX + (appState.width ?? 800) / 2 / (appState.zoom?.value ?? 1) - width / 2;\n const cy =\n y ?? appState.scrollY + (appState.height ?? 600) / 2 / (appState.zoom?.value ?? 1) - height / 2;\n return {\n type: 'image' as const,\n id: 'stamp_' + Date.now() + '_' + Math.random().toString(36).slice(2, 8),\n x: cx,\n y: cy,\n width,\n height,\n fileId,\n customData,\n angle: 0,\n strokeColor: 'transparent',\n backgroundColor: 'transparent',\n fillStyle: 'solid',\n strokeWidth: 1,\n strokeStyle: 'solid',\n roughness: 0,\n opacity: 100,\n groupIds: [],\n roundness: null,\n seed: Math.floor(Math.random() * 1e9),\n versionNonce: 0,\n version: 1,\n isDeleted: false,\n boundElements: null,\n updated: Date.now(),\n link: null,\n locked: false,\n status: 'saved',\n scale: [1, 1],\n };\n}\n\n/**\n * Chèn (hoặc thay thế) một stamp image vào Excalidraw scene.\n *\n * Flow:\n * 1. createStampFile(svg) → fileId + dataURL + kích thước\n * 2. api.addFiles([...]) — đăng ký SVG dưới fileId\n * 3. Nếu editingElementId → update element cũ (giữ position, đổi fileId+customData+size)\n * Còn lại → tạo image element mới ở giữa viewport (hoặc position truyền vào)\n *\n * Đoạn này trước đây nằm 2 chỗ (handleGeometryInsert + handleLatexInsert),\n * chỉ khác customData. Gộp lại để: thêm stamp type mới chỉ cần truyền\n * `makeCustomData`.\n */\nexport async function insertStampImage(\n api: ExApi,\n opts: InsertStampImageOptions,\n): Promise<InsertStampImageResult> {\n const { dataURL, fileId, width, height, mimeType } = await createStampFile(opts.svgString);\n api.addFiles([{ id: fileId, dataURL, mimeType, created: Date.now() }]);\n const customData = opts.makeCustomData();\n\n const elements = api.getSceneElements() as readonly ExcalidrawElement[];\n const editingId = opts.editingElementId ?? null;\n\n if (editingId) {\n const updated = elements.map((e) =>\n e.id === editingId ? { ...e, fileId, customData, width, height } : e,\n );\n api.updateScene({ elements: updated, appState: clearAppStateAfterInsert() });\n return { fileId, width, height, elementId: editingId };\n }\n\n const newElement = buildStampImageElement(\n api,\n fileId,\n width,\n height,\n customData,\n opts.position?.x,\n opts.position?.y,\n );\n api.updateScene({\n elements: [...elements, newElement],\n appState: clearAppStateAfterInsert(),\n });\n return { fileId, width, height, elementId: newElement.id };\n}\n","// Hook tạo + giữ scene store tại Host level cho mọi stamp interactive\n// (geometry-2d, geometry-3d, graph-2d).\n//\n// Trước đây mỗi stamp dùng pattern riêng:\n// - 3D: useRef + createStore(createEmptyState('3d')) inline tại host.\n// - 2D + graph-2d: useState<Store|null> + callback `onStoreReady` từ editor.\n//\n// Hook này hợp nhất về 1 mental model: store sống ở host, identity stable,\n// pre-load từ customData ngay frame đầu → bỏ ternary `store ? ... : undefined`\n// + bỏ flash 1 frame trên 2D + graph-2d.\n//\n// Roundtrip edit: khi double-click stamp existing element, `editingElement`\n// được pass vào, hook gọi `parseInitial(customData)` để extract State trước\n// khi createStore. Stamp tự define parseInitial vì format customData khác nhau.\n\nimport { useRef } from 'react';\nimport { createStore, createEmptyState, type Store } from '../../core/scene';\nimport type { State } from '../../core/scene/types';\nimport type { StampHostProps } from './types';\n\nexport type StampDomain = '2d' | '3d' | 'graph2d';\n\nexport type ParseInitialStateFn = (customData: unknown) => State | null;\n\nexport function useStampStore(\n domain: StampDomain,\n editingElement: StampHostProps['editingElement'],\n parseInitial: ParseInitialStateFn,\n): Store {\n const ref = useRef<Store | null>(null);\n if (!ref.current) {\n const initial = editingElement?.customData\n ? parseInitial(editingElement.customData) ?? createEmptyState(domain)\n : createEmptyState(domain);\n ref.current = createStore(initial);\n }\n return ref.current;\n}\n","// src/stamps/geometry-2d/dsl/describeDsl.ts\n//\n// DSL-style description tiếng Việt cho tab Đối tượng (issue #41). Reuse\n// serializeObject để đảm bảo mô tả khớp với DSL hỗ trợ; out-of-DSL object\n// fallback về `kindDef.describe()` qua getKind, kèm suffix \"(không hỗ trợ DSL)\"\n// để rõ ràng cho user.\n\nimport type { SceneObject, State } from '../../../core/scene/types';\nimport { getKind } from '../../../core/scene/registry';\nimport type { DslPointT, DslShapeT } from './schema';\nimport { serializeObject } from './serialize';\n\nfunction describeEntity(e: DslPointT | DslShapeT): string {\n switch (e.kind) {\n case 'free': return `${e.name} = (${e.x}, ${e.y})`;\n case 'midpoint': return `${e.name} = trung điểm ${e.p1}${e.p2}`;\n case 'onSegment': return `${e.name} ∈ đoạn ${e.segmentId} (t = ${e.t})`;\n case 'onLine': return `${e.name} ∈ đường ${e.lineId} (t = ${e.t})`;\n case 'onCircle': return `${e.name} ∈ đường tròn ${e.circleId} (θ = ${e.theta})`;\n case 'perpFoot': return `${e.name} = chân vuông góc từ ${e.from} xuống ${e.onLine}`;\n case 'circumcenter': return `${e.name} = tâm ngoại tiếp ${e.vertices.join('')}`;\n case 'incenter': return `${e.name} = tâm nội tiếp ${e.vertices.join('')}`;\n case 'centroid': return `${e.name} = trọng tâm ${e.vertices.join('')}`;\n case 'orthocenter': return `${e.name} = trực tâm ${e.vertices.join('')}`;\n case 'intersection': {\n const branch = 'branch' in e && e.branch !== undefined ? ` (nhánh ${e.branch})` : '';\n return `${e.name} = ${e.ref1} ∩ ${e.ref2}${branch}`;\n }\n case 'segment': return `${e.name} = đoạn ${e.p1}${e.p2}`;\n case 'line': return `${e.name} = đường thẳng ${e.p1}${e.p2}`;\n case 'ray': return `${e.name} = tia ${e.origin}${e.through}`;\n case 'polygon': return `${e.name} = đa giác ${e.vertices.join('')}`;\n case 'perpendicular': return `${e.name} ⟂ ${e.toLine} qua ${e.throughPoint}`;\n case 'parallel': return `${e.name} ∥ ${e.toLine} qua ${e.throughPoint}`;\n case 'perpBisector': return `${e.name} = trung trực ${e.p1}${e.p2}`;\n case 'angleBisector': return `${e.name} = phân giác ∠${e.p1}${e.vertex}${e.p2}`;\n case 'lineThrough': return `${e.name} = đường qua ${e.points.join('')}`;\n case 'radicalAxis': return `${e.name} = trục đẳng phương ${e.circle1} & ${e.circle2}`;\n case 'tangent': {\n const branch = 'branch' in e && e.branch !== undefined ? ` (nhánh ${e.branch})` : '';\n return `${e.name} = tiếp tuyến ${e.toCircle} qua ${e.throughPoint}${branch}`;\n }\n case 'circleCP': return `${e.name} = (${e.center}; ${e.center}${e.surfacePoint})`;\n case 'circle3': return `${e.name} = đường tròn qua ${e.p1}${e.p2}${e.p3}`;\n case 'circleDiameter': return `${e.name} = đường tròn đường kính ${e.p1}${e.p2}`;\n // NEW Tier 4+5\n case 'secondIntersection': return `${e.name} = giao thứ hai của ${e.line} và ${e.circle} (khác ${e.other})`;\n case 'circleIntersection': return `${e.name} = giao ${e.c1} ∩ ${e.c2} (nhánh ${e.which})`;\n case 'circleSecondIntersection': return `${e.name} = giao thứ hai ${e.c1} ∩ ${e.c2} (khác ${e.exclude})`;\n case 'tangencyPoint': return `${e.name} = tiếp điểm của ${e.circle} trên ${e.onLine}`;\n case 'tangentPointExt': return `${e.name} = tiếp điểm từ ${e.from} lên ${e.circle} (nhánh ${e.which})`;\n case 'circleCR': return `${e.name} = đường tròn (${e.center}; r=${e.radius})`;\n case 'incircle': return `${e.name} = đường tròn nội tiếp ${e.vertices.join('')}`;\n case 'excircle': return `${e.name} = đường tròn bàng tiếp ${e.vertices.join('')} đối diện ${e.opposite}`;\n // Cụm A\n case 'arcMidpoint': return `${e.name} = trung điểm cung ${e.a}${e.b} (không chứa ${e.notContaining}) trên ${e.circle}`;\n case 'excenter': return `${e.name} = tâm bàng tiếp ${e.vertices.join('')} đối diện ${e.opposite}`;\n case 'reflectPoint': return `${e.name} = đối xứng ${e.of} qua điểm ${e.through}`;\n case 'reflectLine': return `${e.name} = đối xứng ${e.of} qua đường ${e.through}`;\n // Cụm B\n case 'pointAtDistance': {\n const d = e.distance;\n const distStr = d.kind === 'circleRadius' ? `r(${d.circle})`\n : d.kind === 'segmentLength' ? `|${d.p1}${d.p2}|`\n : `${d.value}`;\n return `${e.name} = điểm trên tia ${e.from}${e.through} cách ${e.through} một khoảng ${distStr}`;\n }\n default: {\n const _exhaust: never = e;\n void _exhaust;\n return '';\n }\n }\n}\n\n/**\n * Mô tả DSL-style cho 1 SceneObject. Dùng cho `ObjectListPanel.renderRow`.\n *\n * - Object trong miền DSL → mô tả Việt ngắn gọn (vd \"M = trung điểm BC\").\n * - Object ngoài miền DSL → fallback `kindDef.describe()` + suffix\n * \"(không hỗ trợ DSL)\" để user biết object này không export sang DSL được.\n */\nexport function describeDsl(obj: SceneObject, state: State): string {\n const r = serializeObject(obj, state);\n if (r.ok) return describeEntity(r.entity);\n\n // Fallback — dùng describe từ scene kind registry. Mặc định \"(không hỗ trợ DSL)\"\n // để user thấy rõ giới hạn.\n let base: string;\n try {\n base = getKind(obj.kind).describe(obj, state);\n } catch {\n base = `${obj.kind} ${obj.label}`;\n }\n return `${base} (không hỗ trợ DSL)`;\n}\n","// src/stamps/geometry-2d/editor/dslRenderRow.tsx\n//\n// Factory tạo renderRow cho `StampLeftPanel.objects.renderRow`. Reuse shared\n// `ObjectRow` nhưng inject `describeDsl` cho title → tab Đối tượng hiển thị\n// mô tả DSL-style (issue #41).\n\nimport type { ReactNode } from 'react';\nimport { ObjectRow } from '../../../core/scene/ui/ObjectRow';\nimport type { Store } from '../../../core/scene/store';\nimport type { SceneObject } from '../../../core/scene/types';\nimport { describeDsl } from '../dsl/describeDsl';\n\nexport function makeDslRenderRow(store: Store) {\n return function renderDslRow(\n obj: SceneObject,\n defaults: { selected: boolean; onClick: () => void },\n ): ReactNode {\n const state = store.getState();\n const noop = () => { /* rename + color stub theo ObjectRow default */ };\n return (\n <ObjectRow\n obj={obj}\n state={state}\n selected={defaults.selected}\n onSelect={defaults.onClick}\n onToggleVisible={(id) => {\n const o = state.objects[id];\n if (!o) return;\n store.dispatch({ type: 'UPDATE', payload: { id, patch: { visible: !o.visible } } });\n }}\n onToggleLocked={(id) => {\n const o = state.objects[id];\n if (!o) return;\n store.dispatch({ type: 'UPDATE', payload: { id, patch: { locked: !o.locked } } });\n }}\n onRename={noop}\n onChangeColor={noop}\n onDelete={(id) => store.dispatch({ type: 'DELETE', payload: { id } })}\n describe={describeDsl}\n />\n );\n };\n}\n","'use client';\n\nimport {\n forwardRef,\n useCallback,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { StampLeftPanel } from '../shared/StampLeftPanel';\nimport { GeometryIconHeader } from './editor/icons';\nimport {\n GeometryEditorPanel,\n type GeometryEditorPanelHandle,\n} from './editor/EditorPanel';\nimport type { GeomTool } from './editor/MiniBoard';\nimport { GROUP_ORDER, GROUP_LABELS, TOOLS, letterForGroup, type GeomGroup } from './editor/tools';\nimport { useChordShortcut } from '../shared/useChordShortcut';\nimport { insertStampImage } from '../shared/insertImage';\nimport { deserializeBoard } from './serialize';\nimport { isGeometryCustomData, type GeometryCustomData } from './types';\nimport { DEFAULT_VIEW_2D, type State } from '../../core/scene';\nimport type {\n StampHostProps,\n StampHostHandle,\n} from '../shared/types';\nimport { useIsMobile } from '../shared/useIsMobile';\nimport { useStampStore } from '../shared/useStampStore';\nimport { makeDslRenderRow } from './editor/dslRenderRow';\n\nfunction parseInitialState(data: unknown): State | null {\n if (!isGeometryCustomData(data)) return null;\n return deserializeBoard(data.jsonState);\n}\n\nexport const GeometryStampHost = forwardRef<StampHostHandle, StampHostProps>(\n function GeometryStampHost({ api, editingElement, onClose, isDark, generateGeometryFigure }, ref) {\n const panelRef = useRef<GeometryEditorPanelHandle | null>(null);\n const { isMobile } = useIsMobile();\n const [drawerOpen, setDrawerOpen] = useState(false);\n const sceneStore = useStampStore('2d', editingElement, parseInitialState);\n\n // Tier 2 F — host owns editor UI state.\n const initialMeta = sceneStore.getState().meta;\n const initialView = initialMeta.domain === '2d' ? initialMeta.view : DEFAULT_VIEW_2D;\n const [selectedTool, setSelectedTool] = useState<GeomTool>('move');\n const [showAxis, setShowAxis] = useState<boolean>(initialView.showAxis);\n const [showGrid, setShowGrid] = useState<boolean>(initialView.showGrid);\n const [canUndo, setCanUndo] = useState<boolean>(false);\n const [canRedo, setCanRedo] = useState<boolean>(false);\n const [selectedObjectId, setSelectedObjectId] = useState<string | undefined>(undefined);\n\n const handleHistoryChange = useCallback((u: boolean, r: boolean) => {\n setCanUndo(u);\n setCanRedo(r);\n }, []);\n\n const handleUndo = useCallback(() => sceneStore.undo(), [sceneStore]);\n const handleRedo = useCallback(() => sceneStore.redo(), [sceneStore]);\n\n const { chordGroup } = useChordShortcut({\n groupOrder: GROUP_ORDER,\n tools: TOOLS,\n onSelect: (key) => setSelectedTool(key as GeomTool),\n enabled: !isMobile,\n });\n\n const renderRow = useMemo(() => makeDslRenderRow(sceneStore), [sceneStore]);\n\n const handleInsert = useCallback(\n async (jsonState: string, svgString: string) => {\n if (!api) return;\n try {\n await insertStampImage(api, {\n svgString,\n makeCustomData: (): GeometryCustomData => ({\n kind: 'geometry',\n version: 1,\n jsonState,\n }),\n editingElementId: editingElement?.id ?? null,\n });\n } catch (err) {\n console.error('Geometry insert failed:', err);\n }\n onClose();\n },\n [api, editingElement?.id, onClose],\n );\n\n useImperativeHandle(\n ref,\n () => ({\n tryInsert: () => panelRef.current?.insert() ?? false,\n hasContent: () => panelRef.current?.hasContent() ?? false,\n }),\n [],\n );\n\n return (\n <>\n <StampLeftPanel<GeomTool, GeomGroup>\n title=\"Hình học\"\n icon={GeometryIconHeader}\n onClose={onClose}\n isDark={isDark}\n testId=\"stamp-left-panel\"\n tools={TOOLS}\n groupOrder={GROUP_ORDER}\n groupLabels={GROUP_LABELS}\n activeTool={selectedTool}\n onToolChange={setSelectedTool}\n view={{\n showAxis,\n showGrid,\n onShowAxisChange: setShowAxis,\n onShowGridChange: setShowGrid,\n }}\n history={{\n onUndo: handleUndo,\n canUndo,\n onRedo: handleRedo,\n canRedo,\n }}\n chord={{ activeGroup: chordGroup, letterForGroup }}\n objects={{\n store: sceneStore,\n selectedObjectId,\n onObjectSelect: (id) => {\n setSelectedObjectId(id ?? undefined);\n panelRef.current?.selectObject(id);\n },\n renderRow,\n }}\n isMobile={isMobile}\n drawerOpen={drawerOpen}\n onDrawerClose={() => setDrawerOpen(false)}\n />\n <GeometryEditorPanel\n ref={panelRef}\n store={sceneStore}\n onInsert={handleInsert}\n onClose={onClose}\n selectedTool={selectedTool}\n showAxis={showAxis}\n showGrid={showGrid}\n onHistoryChange={handleHistoryChange}\n withLeftPanel={!isMobile}\n isDark={isDark}\n isMobile={isMobile}\n onOpenDrawer={() => setDrawerOpen(true)}\n onUndo={handleUndo}\n onRedo={handleRedo}\n canUndo={canUndo}\n canRedo={canRedo}\n onSelectionChange={setSelectedObjectId}\n generateGeometryFigure={generateGeometryFigure}\n />\n </>\n );\n },\n);\n","'use client';\n\nimport { lazy, type ReactNode } from 'react';\nimport { renderGeometrySvgFromState } from './render';\nimport type {\n RestoredStampFile,\n StampType,\n} from '../shared/types';\nimport { svgToStampFile } from '../shared/svgToStampFile';\nimport {\n isGeometryCustomData,\n type GeometryCustomData,\n} from './types';\n\nexport type { GeometryCustomData };\n\nconst GeometryStampHost = lazy(() =>\n import('./host').then((m) => ({ default: m.GeometryStampHost })),\n);\n\nconst GeometryIcon: ReactNode = (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <polygon points=\"4,20 20,20 12,5\" />\n <circle cx=\"4\" cy=\"20\" r=\"1.4\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"20\" cy=\"20\" r=\"1.4\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"12\" cy=\"5\" r=\"1.4\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n);\n\nexport const geometryStamp: StampType<GeometryCustomData> = {\n kind: 'geometry',\n shortcutKey: 'g',\n toolbarLabel: 'G',\n toolbarTitle: 'Chèn hình học (G)',\n toolbarIcon: GeometryIcon,\n toolbarTestId: 'stamp-toolbar-geometry',\n matchesCustomData: isGeometryCustomData,\n async renderSvgFromCustomData(data) {\n if (!isGeometryCustomData(data)) {\n throw new Error('geometryStamp.renderSvgFromCustomData: customData không phải geometry');\n }\n return renderGeometrySvgFromState(data.jsonState);\n },\n async restoreFileFromCustomData(element): Promise<RestoredStampFile | null> {\n const data = element.customData as GeometryCustomData | undefined;\n const fileId = (element as { fileId?: string | null }).fileId;\n if (!data || !fileId || !isGeometryCustomData(data)) return null;\n const svgString = await renderGeometrySvgFromState(data.jsonState);\n return svgToStampFile(svgString, fileId);\n },\n Host: GeometryStampHost,\n};\n"]}
|