@nex125/seatmap-editor 0.1.5 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +2180 -1637
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +1483 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.cts +42 -4
- package/dist/index.d.ts +42 -4
- package/dist/index.js +2181 -1638
- package/dist/index.js.map +1 -1
- package/package.json +11 -3
- package/src/SeatmapEditor.css +1697 -0
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tools/BaseTool.ts","../src/tools/PanTool.ts","../src/tools/SelectTool.ts","../src/tools/AddSectionTool.ts","../src/tools/AddRowTool.ts","../src/tools/AddSeatTool.ts","../src/panels/Toolbar.tsx","../src/panels/PropertyPanel.tsx","../src/panels/CategoryManager.tsx","../src/panels/LayerPanel.tsx","../src/panels/StatusManager.tsx","../src/SeatmapEditor.tsx","../src/tools/DrawGATool.ts","../src/tools/AddTableTool.ts"],"names":["s","pointInPolygon","generateId","GRID","snapToGrid","c","s2","relX","relY","jsx","jsxs","useState","useEffect","AVAILABLE_STATUS_ID","section","row","seat","Fragment","btnSmall","useMemo","useSeatmapContext","useStore","useRef","CommandHistory","useCallback","serializeVenue","deserializeVenue","venueAABB","selectStyle","SeatmapCanvas","SeatmapProvider"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { Viewport } from \"@nex125/seatmap-core\";\nimport type { SeatmapStore } from \"@nex125/seatmap-react\";\n\nexport interface ToolPointerEvent {\n worldX: number;\n worldY: number;\n screenX: number;\n screenY: number;\n shiftKey: boolean;\n ctrlKey: boolean;\n metaKey: boolean;\n button: number;\n}\n\nexport abstract class BaseTool {\n abstract readonly name: string;\n abstract readonly cursor: string;\n\n onPointerDown(_e: ToolPointerEvent, _viewport: Viewport, _store: SeatmapStore): void {}\n onPointerMove(_e: ToolPointerEvent, _viewport: Viewport, _store: SeatmapStore): void {}\n onPointerUp(_e: ToolPointerEvent, _viewport: Viewport, _store: SeatmapStore): void {}\n onActivate(_viewport: Viewport, _store: SeatmapStore): void {}\n onDeactivate(): void {}\n}\n","import type { Viewport } from \"@nex125/seatmap-core\";\nimport { BaseTool, type ToolPointerEvent } from \"./BaseTool\";\n\nexport class PanTool extends BaseTool {\n readonly name = \"pan\";\n readonly cursor = \"grab\";\n\n private isPanning = false;\n private lastX = 0;\n private lastY = 0;\n\n onPointerDown(e: ToolPointerEvent): void {\n this.isPanning = true;\n this.lastX = e.screenX;\n this.lastY = e.screenY;\n }\n\n onPointerMove(e: ToolPointerEvent, viewport: Viewport): void {\n if (!this.isPanning) return;\n const dx = e.screenX - this.lastX;\n const dy = e.screenY - this.lastY;\n this.lastX = e.screenX;\n this.lastY = e.screenY;\n viewport.pan(dx, dy);\n }\n\n onPointerUp(): void {\n this.isPanning = false;\n }\n\n onDeactivate(): void {\n this.isPanning = false;\n }\n}\n","import type { Viewport, SpatialIndex, CommandHistory } from \"@nex125/seatmap-core\";\nimport { generateId, pointInPolygon } from \"@nex125/seatmap-core\";\nimport type { Vec2 } from \"@nex125/seatmap-core\";\nimport type { Section } from \"@nex125/seatmap-core\";\nimport type { SeatmapStore } from \"@nex125/seatmap-react\";\nimport { BaseTool, type ToolPointerEvent } from \"./BaseTool\";\n\nconst GRID = 20;\nconst MIN_SEAT_DISTANCE = 16;\nconst RESIZE_HIT_RADIUS_PX = 10;\nconst MERGE_DISTANCE_PX = 14;\n\nfunction snapToGrid(v: number): number {\n return Math.round(v / GRID) * GRID;\n}\n\ntype DragMode =\n | { type: \"none\" }\n | {\n type: \"seats\";\n sectionId: string;\n previewSectionId: string;\n originals: Map<string, { rowId: string; pos: Vec2 }>;\n delta: Vec2;\n }\n | {\n type: \"section\";\n primarySectionId: string;\n sectionIds: string[];\n originalPositions: Map<string, Vec2>;\n delta: Vec2;\n }\n | {\n type: \"resize-corner\";\n sectionId: string;\n cornerIndex: number;\n originalOutline: Vec2[];\n outline: Vec2[];\n mergeTargetIndex: number | null;\n }\n | {\n type: \"resize-side\";\n sectionId: string;\n sideIndex: number;\n startLocal: Vec2;\n originalOutline: Vec2[];\n outline: Vec2[];\n mergeCandidates: Array<{ fromIndex: number; toIndex: number }>;\n }\n | { type: \"rect\" };\n\ntype VenueState = NonNullable<ReturnType<SeatmapStore[\"getState\"]>[\"venue\"]>;\n\nexport class SelectTool extends BaseTool {\n readonly name = \"select\";\n readonly cursor = \"default\";\n\n private isDragging = false;\n private dragStartWorld = { x: 0, y: 0 };\n private hasDragged = false;\n private dragMode: DragMode = { type: \"none\" };\n private sectionResizeEnabled = false;\n private resizeTargetSectionId: string | null = null;\n\n selectionRect: { x: number; y: number; width: number; height: number } | null = null;\n\n constructor(\n private spatialIndex: SpatialIndex,\n private history: CommandHistory,\n ) {\n super();\n }\n\n setSectionResizeEnabled(enabled: boolean): void {\n this.sectionResizeEnabled = enabled;\n if (!enabled) {\n this.resizeTargetSectionId = null;\n }\n if (!enabled && (this.dragMode.type === \"resize-corner\" || this.dragMode.type === \"resize-side\")) {\n this.reset();\n }\n }\n\n onPointerDown(e: ToolPointerEvent, viewport: Viewport, store: SeatmapStore): void {\n this.isDragging = true;\n this.hasDragged = false;\n this.dragStartWorld = { x: e.worldX, y: e.worldY };\n this.selectionRect = null;\n this.dragMode = { type: \"none\" };\n\n const venue = store.getState().venue;\n if (!venue) return;\n const hits = this.spatialIndex.queryPoint({ x: e.worldX, y: e.worldY }, 12);\n const seatHit = this.pickNearestSeatHit(hits, { x: e.worldX, y: e.worldY });\n const sectionHit = hits.find((h) => h.type === \"section\");\n\n if (this.sectionResizeEnabled) {\n const clickedSection = sectionHit\n ? venue.sections.find((s) => s.id === sectionHit.sectionId) ?? null\n : null;\n if (clickedSection) {\n this.resizeTargetSectionId = clickedSection.id;\n }\n const editableSection = clickedSection ?? this.getEditableSection(venue, store.getState().selectedSeatIds);\n if (editableSection && editableSection.outline.length >= 3) {\n const localPoint = this.toLocal(editableSection, { x: e.worldX, y: e.worldY });\n const hitRadius = RESIZE_HIT_RADIUS_PX / Math.max(0.001, viewport.zoom);\n const cornerIndex = this.findCornerHandleIndex(editableSection.outline, localPoint, hitRadius);\n if (cornerIndex >= 0) {\n this.dragMode = {\n type: \"resize-corner\",\n sectionId: editableSection.id,\n cornerIndex,\n originalOutline: editableSection.outline.map((p) => ({ ...p })),\n outline: editableSection.outline.map((p) => ({ ...p })),\n mergeTargetIndex: null,\n };\n return;\n }\n const sideIndex = this.findSideHandleIndex(editableSection.outline, localPoint, hitRadius);\n if (sideIndex >= 0) {\n this.dragMode = {\n type: \"resize-side\",\n sectionId: editableSection.id,\n sideIndex,\n startLocal: localPoint,\n originalOutline: editableSection.outline.map((p) => ({ ...p })),\n outline: editableSection.outline.map((p) => ({ ...p })),\n mergeCandidates: [],\n };\n return;\n }\n if (clickedSection && !seatHit) {\n // In resize mode, clicking a section body just targets it and shows handles.\n return;\n }\n }\n }\n\n // Mode 1: Dragging selected seats (clicked on one of them)\n if (seatHit?.seatId && store.getState().selectedSeatIds.has(seatHit.seatId)) {\n const selectedIds = store.getState().selectedSeatIds;\n const sectionId = seatHit.sectionId;\n const originals = new Map<string, { rowId: string; pos: Vec2 }>();\n\n const section = venue.sections.find((s) => s.id === sectionId);\n if (section) {\n for (const row of section.rows) {\n for (const seat of row.seats) {\n if (selectedIds.has(seat.id)) {\n originals.set(seat.id, { rowId: row.id, pos: { ...seat.position } });\n }\n }\n }\n }\n\n if (originals.size > 0) {\n this.dragMode = {\n type: \"seats\",\n sectionId,\n previewSectionId: sectionId,\n originals,\n delta: { x: 0, y: 0 },\n };\n return;\n }\n }\n\n // Mode 2: Dragging a section (clicked on section background, not a seat)\n if (!this.sectionResizeEnabled && sectionHit && !seatHit) {\n const section = venue.sections.find((s) => s.id === sectionHit.sectionId);\n if (section) {\n const selectedSectionIds = store.getState().selectedSectionIds;\n const sectionIds =\n selectedSectionIds.has(section.id) && selectedSectionIds.size > 1\n ? [...selectedSectionIds]\n : [section.id];\n const originalPositions = new Map<string, Vec2>();\n for (const sec of venue.sections) {\n if (sectionIds.includes(sec.id)) {\n originalPositions.set(sec.id, { ...sec.position });\n }\n }\n this.dragMode = {\n type: \"section\",\n primarySectionId: section.id,\n sectionIds,\n originalPositions,\n delta: { x: 0, y: 0 },\n };\n return;\n }\n }\n\n // Mode 3 will be rect selection (set in onPointerMove once dragging starts)\n }\n\n onPointerMove(e: ToolPointerEvent, viewport: Viewport, store: SeatmapStore): void {\n if (!this.isDragging) return;\n\n const dx = e.worldX - this.dragStartWorld.x;\n const dy = e.worldY - this.dragStartWorld.y;\n if (!this.hasDragged && (Math.abs(dx) > 3 || Math.abs(dy) > 3)) {\n this.hasDragged = true;\n if (this.dragMode.type === \"none\") {\n this.dragMode = { type: \"rect\" };\n }\n }\n if (!this.hasDragged) return;\n\n const venue = store.getState().venue;\n if (!venue) return;\n\n if (this.dragMode.type === \"resize-corner\") {\n const drag = this.dragMode;\n const section = venue.sections.find((s) => s.id === drag.sectionId);\n if (!section) return;\n const mergeThreshold = MERGE_DISTANCE_PX / Math.max(0.001, viewport.zoom);\n const localPoint = this.toLocal(section, { x: e.worldX, y: e.worldY });\n const nextOutline = drag.originalOutline.map((p) => ({ ...p }));\n nextOutline[drag.cornerIndex] = localPoint;\n const mergeTargetIndex = this.findMergeTargetIndex(nextOutline, drag.cornerIndex, mergeThreshold);\n this.dragMode = {\n ...drag,\n outline: nextOutline,\n mergeTargetIndex,\n };\n return;\n }\n\n if (this.dragMode.type === \"resize-side\") {\n const drag = this.dragMode;\n const section = venue.sections.find((s) => s.id === drag.sectionId);\n if (!section) return;\n const mergeThreshold = MERGE_DISTANCE_PX / Math.max(0.001, viewport.zoom);\n const localPoint = this.toLocal(section, { x: e.worldX, y: e.worldY });\n const delta = {\n x: localPoint.x - drag.startLocal.x,\n y: localPoint.y - drag.startLocal.y,\n };\n const outlineLen = drag.originalOutline.length;\n const a = drag.sideIndex;\n const b = (drag.sideIndex + 1) % outlineLen;\n const nextOutline = drag.originalOutline.map((p) => ({ ...p }));\n nextOutline[a] = {\n x: nextOutline[a].x + delta.x,\n y: nextOutline[a].y + delta.y,\n };\n nextOutline[b] = {\n x: nextOutline[b].x + delta.x,\n y: nextOutline[b].y + delta.y,\n };\n const mergeCandidates = this.findMergeCandidates(nextOutline, [a, b], mergeThreshold);\n this.dragMode = {\n ...drag,\n outline: nextOutline,\n mergeCandidates,\n };\n return;\n }\n\n if (this.dragMode.type === \"seats\") {\n const { sectionId, originals } = this.dragMode;\n const sourceSection = venue.sections.find((s) => s.id === sectionId);\n if (!sourceSection) return;\n\n const desiredSourceLocalDelta = this.rotateWorldDeltaToSectionLocal(sourceSection.rotation, {\n x: dx,\n y: dy,\n });\n const pointerWorld = { x: e.worldX, y: e.worldY };\n const destinationSection = this.findSectionAtWorldPoint(venue, pointerWorld) ?? sourceSection;\n\n let constrainedSourceLocalDelta = desiredSourceLocalDelta;\n if (destinationSection.id === sourceSection.id) {\n constrainedSourceLocalDelta = this.constrainSeatGroupDelta(\n sourceSection,\n originals,\n desiredSourceLocalDelta.x,\n desiredSourceLocalDelta.y,\n );\n } else {\n const destinationOriginals = this.mapOriginalSeatPositionsToSection(\n originals,\n sourceSection,\n destinationSection,\n );\n const worldDelta = this.rotateSectionLocalDeltaToWorld(sourceSection.rotation, desiredSourceLocalDelta);\n const destinationDesiredDelta = this.rotateWorldDeltaToSectionLocal(destinationSection.rotation, worldDelta);\n const destinationConstrainedDelta = this.snapSeatGroupDelta(\n destinationSection,\n destinationOriginals,\n destinationDesiredDelta.x,\n destinationDesiredDelta.y,\n );\n const constrainedWorldDelta = this.rotateSectionLocalDeltaToWorld(\n destinationSection.rotation,\n destinationConstrainedDelta,\n );\n constrainedSourceLocalDelta = this.rotateWorldDeltaToSectionLocal(\n sourceSection.rotation,\n constrainedWorldDelta,\n );\n }\n\n if (\n this.dragMode.delta.x === constrainedSourceLocalDelta.x &&\n this.dragMode.delta.y === constrainedSourceLocalDelta.y &&\n this.dragMode.previewSectionId === destinationSection.id\n ) {\n return;\n }\n this.dragMode = {\n type: \"seats\",\n sectionId,\n previewSectionId: destinationSection.id,\n originals,\n delta: constrainedSourceLocalDelta,\n };\n return;\n }\n\n if (this.dragMode.type === \"section\") {\n if (this.dragMode.delta.x === dx && this.dragMode.delta.y === dy) {\n return;\n }\n this.dragMode = {\n type: \"section\",\n primarySectionId: this.dragMode.primarySectionId,\n sectionIds: this.dragMode.sectionIds,\n originalPositions: this.dragMode.originalPositions,\n delta: { x: dx, y: dy },\n };\n return;\n }\n\n if (this.dragMode.type === \"rect\") {\n const x = Math.min(this.dragStartWorld.x, e.worldX);\n const y = Math.min(this.dragStartWorld.y, e.worldY);\n const width = Math.abs(dx);\n const height = Math.abs(dy);\n this.selectionRect = { x, y, width, height };\n\n const items = this.spatialIndex.queryRect({\n minX: x, minY: y, maxX: x + width, maxY: y + height,\n });\n const seatIds = items\n .filter((item) => item.type === \"seat\" && item.seatId)\n .map((item) => item.seatId!);\n store.getState().setSelection(seatIds);\n }\n }\n\n onPointerUp(e: ToolPointerEvent, _viewport: Viewport, store: SeatmapStore): void {\n if (this.hasDragged) {\n this.commitDrag(store, { x: e.worldX, y: e.worldY });\n } else if (this.dragMode.type === \"resize-side\") {\n this.commitAddPointOnSide(store, this.dragMode, { x: e.worldX, y: e.worldY });\n } else if (this.dragMode.type === \"resize-corner\") {\n // Ignore click-selection behavior when a resize handle was clicked but not dragged.\n } else {\n // Click without drag — select/deselect\n const hits = this.spatialIndex.queryPoint({ x: e.worldX, y: e.worldY }, 12);\n const seatHit = this.pickNearestSeatHit(hits, { x: e.worldX, y: e.worldY });\n const sectionHit = hits.find((h) => h.type === \"section\");\n const isMulti = e.ctrlKey || e.shiftKey || e.metaKey;\n\n if (seatHit?.seatId) {\n this.resizeTargetSectionId = seatHit.sectionId;\n if (isMulti) {\n store.getState().toggleSeat(seatHit.seatId);\n // When adding seats, always target the current section if none targeted\n if (store.getState().selectedSectionIds.size === 0) {\n store.getState().selectSection(seatHit.sectionId);\n }\n } else {\n store.getState().setSelection([seatHit.seatId]);\n store.getState().selectSection(seatHit.sectionId);\n }\n } else if (sectionHit?.sectionId) {\n if (this.sectionResizeEnabled) {\n this.resizeTargetSectionId = sectionHit.sectionId;\n } else {\n if (isMulti) {\n store.getState().toggleSection(sectionHit.sectionId);\n } else {\n // Selecting a section directly clears seat selection to show Section Config panel\n store.getState().clearSelection();\n store.getState().selectSection(sectionHit.sectionId);\n }\n }\n } else if (!isMulti) {\n if (this.sectionResizeEnabled) {\n this.resizeTargetSectionId = null;\n }\n store.getState().clearSelection();\n }\n }\n\n this.reset();\n }\n\n private commitAddPointOnSide(\n store: SeatmapStore,\n drag: Extract<DragMode, { type: \"resize-side\" }>,\n worldPoint: Vec2,\n ): void {\n const venue = store.getState().venue;\n if (!venue) return;\n const section = venue.sections.find((s) => s.id === drag.sectionId);\n if (!section || section.outline.length < 3) return;\n\n const localPoint = this.toLocal(section, worldPoint);\n const insertAt = drag.sideIndex + 1;\n const finalOutline = [\n ...section.outline.slice(0, insertAt),\n localPoint,\n ...section.outline.slice(insertAt),\n ];\n\n this.history.execute({\n description: `Add section point`,\n execute: () => {\n const v = store.getState().venue;\n if (!v) return;\n store.getState().setVenue({\n ...v,\n sections: v.sections.map((s) =>\n s.id === section.id ? { ...s, outline: finalOutline } : s,\n ),\n });\n },\n undo: () => {\n const v = store.getState().venue;\n if (!v) return;\n store.getState().setVenue({\n ...v,\n sections: v.sections.map((s) =>\n s.id === section.id ? { ...s, outline: section.outline } : s,\n ),\n });\n },\n });\n }\n\n private commitDrag(store: SeatmapStore, dropWorld: Vec2): void {\n const venue = store.getState().venue;\n if (!venue) return;\n\n if (this.dragMode.type === \"seats\") {\n const { sectionId, originals, delta } = this.dragMode;\n const sourceSection = venue.sections.find((s) => s.id === sectionId);\n if (!sourceSection) return;\n if (delta.x === 0 && delta.y === 0) return;\n\n const destinationSection = this.findSectionAtWorldPoint(venue, dropWorld) ?? sourceSection;\n if (destinationSection.id === sourceSection.id) {\n this.commitSeatMoveWithinSection(store, venue, sourceSection, originals, delta);\n return;\n }\n\n const afterTransfer = this.buildSeatTransferVenue(\n venue,\n sourceSection,\n destinationSection,\n originals,\n delta,\n );\n if (!afterTransfer) return;\n\n store.getState().setVenue(afterTransfer);\n\n this.history.execute({\n description: `Move ${originals.size} seat(s) to \"${destinationSection.label}\"`,\n execute: () => {\n store.getState().setVenue(afterTransfer);\n },\n undo: () => {\n store.getState().setVenue(venue);\n },\n });\n }\n\n if (this.dragMode.type === \"section\") {\n const { sectionIds, originalPositions, delta } = this.dragMode;\n if (delta.x === 0 && delta.y === 0) return;\n\n const sectionIdSet = new Set(sectionIds);\n const finalPositions = new Map<string, Vec2>();\n for (const [sectionId, origPos] of originalPositions.entries()) {\n finalPositions.set(sectionId, {\n x: origPos.x + delta.x,\n y: origPos.y + delta.y,\n });\n }\n\n this.history.execute({\n description: `Move ${sectionIds.length} section(s)`,\n execute: () => {\n const v = store.getState().venue;\n if (!v) return;\n store.getState().setVenue({\n ...v,\n sections: v.sections.map((section) => {\n if (!sectionIdSet.has(section.id)) return section;\n const finalPos = finalPositions.get(section.id);\n return finalPos ? { ...section, position: finalPos } : section;\n }),\n });\n },\n undo: () => {\n const v = store.getState().venue;\n if (!v) return;\n store.getState().setVenue({\n ...v,\n sections: v.sections.map((section) => {\n if (!sectionIdSet.has(section.id)) return section;\n const origPos = originalPositions.get(section.id);\n return origPos ? { ...section, position: origPos } : section;\n }),\n });\n },\n });\n }\n\n if (this.dragMode.type === \"resize-corner\" || this.dragMode.type === \"resize-side\") {\n const drag = this.dragMode;\n const section = venue.sections.find((s) => s.id === drag.sectionId);\n if (!section) return;\n\n let finalOutline = drag.outline.map((p) => ({ ...p }));\n if (drag.type === \"resize-corner\" && drag.mergeTargetIndex !== null) {\n finalOutline = this.removeOutlineIndices(finalOutline, [drag.cornerIndex]);\n }\n if (drag.type === \"resize-side\" && drag.mergeCandidates.length > 0) {\n finalOutline = this.removeOutlineIndices(\n finalOutline,\n [...new Set(drag.mergeCandidates.map((candidate) => candidate.fromIndex))],\n );\n }\n\n const sectionWouldBeRemoved = finalOutline.length < 3;\n const unchanged =\n !sectionWouldBeRemoved &&\n this.areOutlinesEqual(section.outline, finalOutline);\n if (unchanged) return;\n\n const oldSection = section;\n this.history.execute({\n description: sectionWouldBeRemoved\n ? `Remove section \"${oldSection.label}\" after resize`\n : `Resize section \"${oldSection.label}\"`,\n execute: () => {\n const v = store.getState().venue;\n if (!v) return;\n if (sectionWouldBeRemoved) {\n store.getState().setVenue({\n ...v,\n sections: v.sections.filter((s) => s.id !== oldSection.id),\n });\n store.getState().clearSelection();\n return;\n }\n store.getState().setVenue({\n ...v,\n sections: v.sections.map((s) =>\n s.id === oldSection.id ? { ...s, outline: finalOutline } : s,\n ),\n });\n },\n undo: () => {\n const v = store.getState().venue;\n if (!v) return;\n const alreadyPresent = v.sections.some((s) => s.id === oldSection.id);\n if (sectionWouldBeRemoved) {\n store.getState().setVenue({\n ...v,\n sections: alreadyPresent ? v.sections : [...v.sections, oldSection],\n });\n return;\n }\n store.getState().setVenue({\n ...v,\n sections: v.sections.map((s) =>\n s.id === oldSection.id ? { ...s, outline: oldSection.outline } : s,\n ),\n });\n },\n });\n }\n }\n\n private reset(): void {\n this.isDragging = false;\n this.hasDragged = false;\n this.selectionRect = null;\n this.dragMode = { type: \"none\" };\n }\n\n onDeactivate(): void {\n this.reset();\n this.resizeTargetSectionId = null;\n }\n\n getSectionDragPreview(\n venue: { sections: Array<{ id: string; position: Vec2; rotation: number; outline: Vec2[] }> } | null,\n ): Vec2[] | null {\n return this.getSectionDragPreviews(venue)[0] ?? null;\n }\n\n getSectionDragPreviews(\n venue: { sections: Array<{ id: string; position: Vec2; rotation: number; outline: Vec2[] }> } | null,\n ): Vec2[][] {\n const drag = this.dragMode;\n if (!venue) return [];\n if (drag.type === \"section\") {\n return drag.sectionIds\n .map((sectionId) => {\n const section = venue.sections.find((s) => s.id === sectionId);\n const originalPos = drag.originalPositions.get(sectionId);\n if (!section || !originalPos || section.outline.length < 3) return null;\n const pos = { x: originalPos.x + drag.delta.x, y: originalPos.y + drag.delta.y };\n const c = Math.cos(section.rotation);\n const s = Math.sin(section.rotation);\n return section.outline.map((p) => ({\n x: pos.x + p.x * c - p.y * s,\n y: pos.y + p.x * s + p.y * c,\n }));\n })\n .filter((outline): outline is Vec2[] => Boolean(outline));\n }\n if (drag.type === \"resize-corner\" || drag.type === \"resize-side\") {\n const section = venue.sections.find((s) => s.id === drag.sectionId);\n if (!section || drag.outline.length < 3) return [];\n const c = Math.cos(section.rotation);\n const s = Math.sin(section.rotation);\n return [\n drag.outline.map((p) => ({\n x: section.position.x + p.x * c - p.y * s,\n y: section.position.y + p.x * s + p.y * c,\n })),\n ];\n }\n return [];\n }\n\n getSectionResizeHandlesPreview(\n venue: { sections: Section[] } | null,\n selectedSeatIds: Set<string>,\n selectedSectionId: string | null = null,\n ): {\n corners: Vec2[];\n sideMidpoints: Vec2[];\n mergeHint: { position: Vec2; message: string } | null;\n } | null {\n if (!this.sectionResizeEnabled || !venue) return null;\n const section = this.getEditableSection(venue, selectedSeatIds, selectedSectionId);\n if (!section || section.outline.length < 3) return null;\n const activeOutline =\n (this.dragMode.type === \"resize-corner\" || this.dragMode.type === \"resize-side\") &&\n this.dragMode.sectionId === section.id\n ? this.dragMode.outline\n : section.outline;\n if (activeOutline.length < 3) return null;\n\n const corners = activeOutline.map((p) => this.toWorld(section, p));\n const sideMidpoints = activeOutline.map((p, i) => {\n const next = activeOutline[(i + 1) % activeOutline.length];\n return this.toWorld(section, {\n x: (p.x + next.x) * 0.5,\n y: (p.y + next.y) * 0.5,\n });\n });\n\n let mergeHint: { position: Vec2; message: string } | null = null;\n if (this.dragMode.type === \"resize-corner\" && this.dragMode.mergeTargetIndex !== null) {\n const a = corners[this.dragMode.cornerIndex];\n const b = corners[this.dragMode.mergeTargetIndex];\n mergeHint = {\n position: { x: (a.x + b.x) * 0.5, y: (a.y + b.y) * 0.5 },\n message: activeOutline.length <= 3 ? \"Release to remove section\" : \"Release to join corners\",\n };\n }\n if (this.dragMode.type === \"resize-side\" && this.dragMode.mergeCandidates.length > 0) {\n const candidate = this.dragMode.mergeCandidates[0];\n const a = corners[candidate.fromIndex];\n const b = corners[candidate.toIndex];\n mergeHint = {\n position: { x: (a.x + b.x) * 0.5, y: (a.y + b.y) * 0.5 },\n message: activeOutline.length <= 4 ? \"Release may remove section\" : \"Release to join corners\",\n };\n }\n\n return { corners, sideMidpoints, mergeHint };\n }\n\n getSeatDragPreview(\n venue: { sections: Array<{ id: string; position: Vec2; rotation: number }> } | null,\n ): Vec2[] {\n const drag = this.dragMode;\n if (!venue || drag.type !== \"seats\") return [];\n const sourceSection = venue.sections.find((s) => s.id === drag.sectionId);\n const previewSection = venue.sections.find((s) => s.id === drag.previewSectionId) ?? sourceSection;\n if (!sourceSection || !previewSection) return [];\n\n const previewOriginals =\n previewSection.id === sourceSection.id\n ? drag.originals\n : this.mapOriginalSeatPositionsToSection(drag.originals, sourceSection, previewSection);\n const worldDelta = this.rotateSectionLocalDeltaToWorld(sourceSection.rotation, drag.delta);\n const previewLocalDelta = this.rotateWorldDeltaToSectionLocal(previewSection.rotation, worldDelta);\n const c = Math.cos(previewSection.rotation);\n const s = Math.sin(previewSection.rotation);\n return [...previewOriginals.values()].map((orig) => {\n const localX = orig.pos.x + previewLocalDelta.x;\n const localY = orig.pos.y + previewLocalDelta.y;\n return {\n x: previewSection.position.x + localX * c - localY * s,\n y: previewSection.position.y + localX * s + localY * c,\n };\n });\n }\n\n private constrainSeatGroupDelta(\n section: { outline: Vec2[]; rows: Array<{ seats: Array<{ id: string; position: Vec2 }> }> },\n originals: Map<string, { rowId: string; pos: Vec2 }>,\n desiredDx: number,\n desiredDy: number,\n ): Vec2 {\n const canPlace = (dx: number, dy: number): boolean => {\n const hasOutline = section.outline.length >= 3;\n const staticSeats: Vec2[] = [];\n for (const row of section.rows) {\n for (const seat of row.seats) {\n if (!originals.has(seat.id)) staticSeats.push(seat.position);\n }\n }\n\n for (const { pos } of originals.values()) {\n const moved = { x: pos.x + dx, y: pos.y + dy };\n if (hasOutline && !pointInPolygon(moved, section.outline)) {\n return false;\n }\n for (const other of staticSeats) {\n if (Math.hypot(other.x - moved.x, other.y - moved.y) < MIN_SEAT_DISTANCE) {\n return false;\n }\n }\n }\n return true;\n };\n\n if (canPlace(desiredDx, desiredDy)) {\n return { x: desiredDx, y: desiredDy };\n }\n if (!canPlace(0, 0)) {\n // When the starting position itself is invalid (for example while previewing\n // a cross-section transfer), backtrack from the desired movement to find the\n // nearest valid constrained placement.\n for (let step = 23; step >= 0; step--) {\n const ratio = step / 24;\n const candidateX = desiredDx * ratio;\n const candidateY = desiredDy * ratio;\n if (canPlace(candidateX, candidateY)) {\n return { x: candidateX, y: candidateY };\n }\n }\n return { x: desiredDx, y: desiredDy };\n }\n\n let lo = 0;\n let hi = 1;\n for (let i = 0; i < 14; i++) {\n const mid = (lo + hi) * 0.5;\n if (canPlace(desiredDx * mid, desiredDy * mid)) lo = mid;\n else hi = mid;\n }\n return { x: desiredDx * lo, y: desiredDy * lo };\n }\n\n private commitSeatMoveWithinSection(\n store: SeatmapStore,\n venue: VenueState,\n section: { id: string; outline: Vec2[]; rows: Array<{ seats: Array<{ id: string; position: Vec2 }> }> },\n originals: Map<string, { rowId: string; pos: Vec2 }>,\n delta: Vec2,\n ): void {\n // Snap movement to grid while preserving section constraints.\n const snappedDelta = this.snapSeatGroupDelta(section, originals, delta.x, delta.y);\n\n // Snap final positions to grid on commit.\n const finals = new Map<string, Vec2>();\n for (const [seatId, orig] of originals.entries()) {\n finals.set(seatId, {\n x: orig.pos.x + snappedDelta.x,\n y: orig.pos.y + snappedDelta.y,\n });\n }\n\n const afterVenue = {\n ...venue,\n sections: venue.sections.map((sec) =>\n sec.id === section.id\n ? {\n ...sec,\n rows: sec.rows.map((r) => ({\n ...r,\n seats: r.seats.map((st) => {\n const fp = finals.get(st.id);\n return fp ? { ...st, position: fp } : st;\n }),\n })),\n }\n : sec,\n ),\n };\n\n // Apply snapped positions immediately so the user sees the snap.\n store.getState().setVenue(afterVenue);\n\n this.history.execute({\n description: `Move ${originals.size} seat(s)`,\n execute: () => {\n store.getState().setVenue(afterVenue);\n },\n undo: () => {\n store.getState().setVenue(venue);\n },\n });\n }\n\n private buildSeatTransferVenue(\n venue: VenueState,\n sourceSection: Section,\n destinationSection: Section,\n originals: Map<string, { rowId: string; pos: Vec2 }>,\n delta: Vec2,\n ): VenueState | null {\n const destinationRows = destinationSection.rows.map((row) => ({\n ...row,\n seats: row.seats.map((seat) => ({ ...seat })),\n }));\n const sourceRows = sourceSection.rows.map((row) => ({\n ...row,\n seats: row.seats.map((seat) => ({ ...seat })),\n }));\n\n const movingSeatIds = new Set(originals.keys());\n const movingSeats = sourceRows\n .flatMap((row) => row.seats.map((seat) => ({ seat })))\n .filter((entry) => movingSeatIds.has(entry.seat.id));\n if (movingSeats.length === 0) return null;\n\n // Remove moved seats from source section.\n const nextSourceRows = sourceRows\n .map((row) => ({\n ...row,\n seats: row.seats.filter((seat) => !movingSeatIds.has(seat.id)),\n }))\n .filter((row) => row.seats.length > 0);\n\n const srcC = Math.cos(sourceSection.rotation);\n const srcS = Math.sin(sourceSection.rotation);\n const dstInvC = Math.cos(-destinationSection.rotation);\n const dstInvS = Math.sin(-destinationSection.rotation);\n const occupancy = destinationRows.flatMap((row) => row.seats.map((seat) => seat.position));\n\n const placements = movingSeats\n .map(({ seat }) => {\n const origin = originals.get(seat.id);\n if (!origin) return null;\n\n const sourceLocal = {\n x: origin.pos.x + delta.x,\n y: origin.pos.y + delta.y,\n };\n const world = {\n x: sourceSection.position.x + sourceLocal.x * srcC - sourceLocal.y * srcS,\n y: sourceSection.position.y + sourceLocal.x * srcS + sourceLocal.y * srcC,\n };\n\n const dstRelX = world.x - destinationSection.position.x;\n const dstRelY = world.y - destinationSection.position.y;\n return {\n seat,\n local: {\n x: snapToGrid(dstRelX * dstInvC - dstRelY * dstInvS),\n y: snapToGrid(dstRelX * dstInvS + dstRelY * dstInvC),\n },\n };\n })\n .filter((placement): placement is NonNullable<typeof placement> => Boolean(placement))\n .sort((a, b) => (a.local.y === b.local.y ? a.local.x - b.local.x : a.local.y - b.local.y));\n\n if (placements.length === 0) return null;\n if (\n destinationSection.outline.length >= 3 &&\n placements.some((placement) => !pointInPolygon(placement.local, destinationSection.outline))\n ) {\n return null;\n }\n\n const findBestRowByY = (targetY: number) => {\n let bestIndex = -1;\n let bestDist = Number.POSITIVE_INFINITY;\n for (let i = 0; i < destinationRows.length; i++) {\n const row = destinationRows[i];\n if (row.seats.length === 0) continue;\n const rowY = row.seats[0]!.position.y;\n const dist = Math.abs(targetY - rowY);\n if (dist < MIN_SEAT_DISTANCE && dist < bestDist) {\n bestDist = dist;\n bestIndex = i;\n }\n }\n return bestIndex;\n };\n\n for (const placement of placements) {\n let targetRowIndex = findBestRowByY(placement.local.y);\n if (targetRowIndex < 0) {\n destinationRows.push({\n id: generateId(),\n label: String.fromCharCode(65 + destinationRows.length),\n seats: [],\n });\n targetRowIndex = destinationRows.length - 1;\n }\n\n const row = destinationRows[targetRowIndex]!;\n const rowY = row.seats.length > 0 ? row.seats[0]!.position.y : placement.local.y;\n const snappedX = this.findNonOverlappingSeatX(placement.local.x, rowY, occupancy);\n const finalPos = { x: snappedX, y: rowY };\n\n if (\n destinationSection.outline.length >= 3 &&\n !pointInPolygon(finalPos, destinationSection.outline)\n ) {\n return null;\n }\n\n row.seats.push({\n ...placement.seat,\n position: finalPos,\n categoryId: destinationSection.categoryId,\n });\n occupancy.push(finalPos);\n }\n\n return {\n ...venue,\n sections: venue.sections.map((section) => {\n if (section.id === sourceSection.id) {\n return { ...section, rows: nextSourceRows };\n }\n if (section.id === destinationSection.id) {\n return { ...section, rows: destinationRows };\n }\n return section;\n }),\n };\n }\n\n private findSectionAtWorldPoint(\n venue: { sections: Section[] },\n worldPoint: Vec2,\n ): Section | null {\n const containingSections = venue.sections.filter((section) => {\n if (section.outline.length < 3) return true;\n return pointInPolygon(this.toLocal(section, worldPoint), section.outline);\n });\n if (containingSections.length === 0) return null;\n if (containingSections.length === 1) return containingSections[0]!;\n return containingSections.sort(\n (a, b) =>\n Math.hypot(worldPoint.x - a.position.x, worldPoint.y - a.position.y) -\n Math.hypot(worldPoint.x - b.position.x, worldPoint.y - b.position.y),\n )[0]!;\n }\n\n private rotateSectionLocalDeltaToWorld(sectionRotation: number, localDelta: Vec2): Vec2 {\n const c = Math.cos(sectionRotation);\n const s = Math.sin(sectionRotation);\n return {\n x: localDelta.x * c - localDelta.y * s,\n y: localDelta.x * s + localDelta.y * c,\n };\n }\n\n private rotateWorldDeltaToSectionLocal(sectionRotation: number, worldDelta: Vec2): Vec2 {\n const c = Math.cos(-sectionRotation);\n const s = Math.sin(-sectionRotation);\n return {\n x: worldDelta.x * c - worldDelta.y * s,\n y: worldDelta.x * s + worldDelta.y * c,\n };\n }\n\n private mapOriginalSeatPositionsToSection(\n originals: Map<string, { rowId: string; pos: Vec2 }>,\n sourceSection: Pick<Section, \"position\" | \"rotation\">,\n destinationSection: Pick<Section, \"position\" | \"rotation\">,\n ): Map<string, { rowId: string; pos: Vec2 }> {\n const map = new Map<string, { rowId: string; pos: Vec2 }>();\n const srcC = Math.cos(sourceSection.rotation);\n const srcS = Math.sin(sourceSection.rotation);\n const dstInvC = Math.cos(-destinationSection.rotation);\n const dstInvS = Math.sin(-destinationSection.rotation);\n for (const [seatId, original] of originals.entries()) {\n const world = {\n x: sourceSection.position.x + original.pos.x * srcC - original.pos.y * srcS,\n y: sourceSection.position.y + original.pos.x * srcS + original.pos.y * srcC,\n };\n const relX = world.x - destinationSection.position.x;\n const relY = world.y - destinationSection.position.y;\n map.set(seatId, {\n rowId: original.rowId,\n pos: {\n x: relX * dstInvC - relY * dstInvS,\n y: relX * dstInvS + relY * dstInvC,\n },\n });\n }\n return map;\n }\n\n private findNonOverlappingSeatX(x: number, y: number, existing: Vec2[]): number {\n let candidate = snapToGrid(x);\n for (let attempt = 0; attempt < 25; attempt++) {\n const overlaps = existing.some((p) => Math.hypot(p.x - candidate, p.y - y) < MIN_SEAT_DISTANCE);\n if (!overlaps) return candidate;\n candidate += GRID;\n }\n return candidate;\n }\n\n private snapSeatGroupDelta(\n section: { outline: Vec2[]; rows: Array<{ seats: Array<{ id: string; position: Vec2 }> }> },\n originals: Map<string, { rowId: string; pos: Vec2 }>,\n desiredDx: number,\n desiredDy: number,\n ): Vec2 {\n const snappedDx = Math.round(desiredDx / GRID) * GRID;\n const snappedDy = Math.round(desiredDy / GRID) * GRID;\n const snapped = this.constrainSeatGroupDelta(section, originals, snappedDx, snappedDy);\n\n // If a constrained snap already lands on the grid, use it.\n if (snapToGrid(snapped.x) === snapped.x && snapToGrid(snapped.y) === snapped.y) {\n return snapped;\n }\n\n // Otherwise, back off in grid-sized steps until we find a valid on-grid movement.\n const stepCount = Math.max(Math.abs(snappedDx), Math.abs(snappedDy)) / GRID;\n if (!Number.isFinite(stepCount) || stepCount <= 0) {\n return { x: 0, y: 0 };\n }\n\n for (let step = Math.floor(stepCount); step >= 0; step--) {\n const ratio = step / stepCount;\n const candidate = this.constrainSeatGroupDelta(\n section,\n originals,\n Math.round((snappedDx * ratio) / GRID) * GRID,\n Math.round((snappedDy * ratio) / GRID) * GRID,\n );\n if (snapToGrid(candidate.x) === candidate.x && snapToGrid(candidate.y) === candidate.y) {\n return candidate;\n }\n }\n\n return { x: 0, y: 0 };\n }\n\n private getEditableSection(\n venue: { sections: Section[] },\n selectedSeatIds: Set<string>,\n selectedSectionId: string | null = null,\n ): Section | null {\n if (selectedSectionId) {\n return venue.sections.find((s) => s.id === selectedSectionId) ?? null;\n }\n if (selectedSeatIds.size > 0) {\n let found: Section | null = null;\n for (const section of venue.sections) {\n let hasSelectedSeat = false;\n for (const row of section.rows) {\n for (const seat of row.seats) {\n if (selectedSeatIds.has(seat.id)) {\n hasSelectedSeat = true;\n break;\n }\n }\n if (hasSelectedSeat) break;\n }\n if (!hasSelectedSeat) continue;\n if (found && found.id !== section.id) {\n found = null;\n break;\n }\n found = section;\n }\n if (found) return found;\n }\n if (this.resizeTargetSectionId) {\n return venue.sections.find((section) => section.id === this.resizeTargetSectionId) ?? null;\n }\n return null;\n }\n\n private toLocal(section: Pick<Section, \"position\" | \"rotation\">, point: Vec2): Vec2 {\n const dx = point.x - section.position.x;\n const dy = point.y - section.position.y;\n const c = Math.cos(-section.rotation);\n const s = Math.sin(-section.rotation);\n return {\n x: dx * c - dy * s,\n y: dx * s + dy * c,\n };\n }\n\n private toWorld(section: Pick<Section, \"position\" | \"rotation\">, point: Vec2): Vec2 {\n const c = Math.cos(section.rotation);\n const s = Math.sin(section.rotation);\n return {\n x: section.position.x + point.x * c - point.y * s,\n y: section.position.y + point.x * s + point.y * c,\n };\n }\n\n private findCornerHandleIndex(outline: Vec2[], localPoint: Vec2, maxDistance: number): number {\n let bestIndex = -1;\n let bestDistance = maxDistance;\n for (let i = 0; i < outline.length; i++) {\n const d = Math.hypot(localPoint.x - outline[i].x, localPoint.y - outline[i].y);\n if (d <= bestDistance) {\n bestDistance = d;\n bestIndex = i;\n }\n }\n return bestIndex;\n }\n\n private findSideHandleIndex(outline: Vec2[], localPoint: Vec2, maxDistance: number): number {\n let bestIndex = -1;\n let bestDistance = maxDistance;\n for (let i = 0; i < outline.length; i++) {\n const next = outline[(i + 1) % outline.length];\n const mid = { x: (outline[i].x + next.x) * 0.5, y: (outline[i].y + next.y) * 0.5 };\n const d = Math.hypot(localPoint.x - mid.x, localPoint.y - mid.y);\n if (d <= bestDistance) {\n bestDistance = d;\n bestIndex = i;\n }\n }\n return bestIndex;\n }\n\n private findMergeTargetIndex(outline: Vec2[], fromIndex: number, threshold: number): number | null {\n let bestTarget: number | null = null;\n let bestDistance = threshold;\n const from = outline[fromIndex];\n for (let i = 0; i < outline.length; i++) {\n if (i === fromIndex) continue;\n const d = Math.hypot(from.x - outline[i].x, from.y - outline[i].y);\n if (d <= bestDistance) {\n bestDistance = d;\n bestTarget = i;\n }\n }\n return bestTarget;\n }\n\n private findMergeCandidates(\n outline: Vec2[],\n fromIndices: number[],\n threshold: number,\n ): Array<{ fromIndex: number; toIndex: number }> {\n const fromSet = new Set(fromIndices);\n const candidates: Array<{ fromIndex: number; toIndex: number }> = [];\n for (const fromIndex of fromIndices) {\n const from = outline[fromIndex];\n let bestTarget = -1;\n let bestDistance = threshold;\n for (let i = 0; i < outline.length; i++) {\n if (i === fromIndex || fromSet.has(i)) continue;\n const d = Math.hypot(from.x - outline[i].x, from.y - outline[i].y);\n if (d <= bestDistance) {\n bestDistance = d;\n bestTarget = i;\n }\n }\n if (bestTarget >= 0) {\n candidates.push({ fromIndex, toIndex: bestTarget });\n }\n }\n return candidates;\n }\n\n private removeOutlineIndices(outline: Vec2[], removeIndices: number[]): Vec2[] {\n const removeSet = new Set(removeIndices);\n return outline\n .filter((_, index) => !removeSet.has(index))\n .map((point) => ({ ...point }));\n }\n\n private areOutlinesEqual(a: Vec2[], b: Vec2[]): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i].x !== b[i].x || a[i].y !== b[i].y) return false;\n }\n return true;\n }\n\n private pickNearestSeatHit(\n hits: ReturnType<SpatialIndex[\"queryPoint\"]>,\n point: Vec2,\n ): (ReturnType<SpatialIndex[\"queryPoint\"]>[number] & { seatId: string }) | undefined {\n const seatHits = hits.filter((hit): hit is ReturnType<SpatialIndex[\"queryPoint\"]>[number] & { seatId: string } =>\n hit.type === \"seat\" && typeof hit.seatId === \"string\",\n );\n if (seatHits.length === 0) return undefined;\n if (seatHits.length === 1) return seatHits[0];\n\n let best = seatHits[0];\n let bestDistance = Number.POSITIVE_INFINITY;\n for (const hit of seatHits) {\n const centerX = (hit.minX + hit.maxX) * 0.5;\n const centerY = (hit.minY + hit.maxY) * 0.5;\n const d = Math.hypot(centerX - point.x, centerY - point.y);\n if (d < bestDistance) {\n bestDistance = d;\n best = hit;\n }\n }\n return best;\n }\n}\n","import type { Viewport } from \"@nex125/seatmap-core\";\nimport { generateId } from \"@nex125/seatmap-core\";\nimport type { CommandHistory, Section, Vec2 } from \"@nex125/seatmap-core\";\nimport type { SeatmapStore } from \"@nex125/seatmap-react\";\nimport { BaseTool, type ToolPointerEvent } from \"./BaseTool\";\n\nconst CLOSE_THRESHOLD = 15;\n\nexport type SectionCreationMode = \"rectangle\" | \"polygon\";\n\nexport class AddSectionTool extends BaseTool {\n readonly name = \"add-section\";\n readonly cursor = \"crosshair\";\n\n mode: SectionCreationMode = \"rectangle\";\n points: Vec2[] = [];\n onPointsChange?: (points: Vec2[], closeable: boolean) => void;\n\n constructor(\n private history: CommandHistory,\n private categoryId: string = \"\",\n ) {\n super();\n }\n\n setCategoryId(id: string): void {\n this.categoryId = id;\n }\n\n setMode(mode: SectionCreationMode): void {\n this.mode = mode;\n this.points = [];\n this.notifyChange();\n }\n\n onPointerDown(e: ToolPointerEvent, _viewport: Viewport, store: SeatmapStore): void {\n if (this.mode === \"rectangle\") {\n if (this.points.length === 0) {\n this.points = [{ x: e.worldX, y: e.worldY }];\n this.notifyChange();\n return;\n }\n\n const rectPoints = this.rectangleFromDiagonal(this.points[0], { x: e.worldX, y: e.worldY });\n this.finishSection(rectPoints, store);\n this.points = [];\n this.notifyChange();\n return;\n }\n\n // If 3+ points and click is near the first point, close the polygon\n if (this.points.length >= 3) {\n const first = this.points[0];\n const dist = Math.hypot(e.worldX - first.x, e.worldY - first.y);\n if (dist < CLOSE_THRESHOLD) {\n this.finishSection(this.points, store);\n this.points = [];\n this.notifyChange();\n return;\n }\n }\n\n this.points.push({ x: e.worldX, y: e.worldY });\n this.notifyChange();\n }\n\n onPointerMove(e: ToolPointerEvent): void {\n if (this.mode === \"rectangle\") {\n if (this.points.length !== 1) return;\n const preview = this.rectangleFromDiagonal(this.points[0], { x: e.worldX, y: e.worldY });\n this.onPointsChange?.(preview, false);\n return;\n }\n\n if (this.points.length === 0) return;\n const closeable =\n this.points.length >= 3 &&\n Math.hypot(e.worldX - this.points[0].x, e.worldY - this.points[0].y) < CLOSE_THRESHOLD;\n this.onPointsChange?.(this.points, closeable);\n }\n\n private finishSection(points: Vec2[], store: SeatmapStore): void {\n if (points.length < 3) {\n return;\n }\n\n // Ignore tiny sections created by accidental clicks.\n let area = 0;\n for (let i = 0; i < points.length; i++) {\n const a = points[i];\n const b = points[(i + 1) % points.length];\n area += a.x * b.y - b.x * a.y;\n }\n if (Math.abs(area) < 1) return;\n\n // Compute centroid\n let cx = 0, cy = 0;\n for (const p of points) { cx += p.x; cy += p.y; }\n cx /= points.length;\n cy /= points.length;\n\n const outline: Vec2[] = points.map((p) => ({\n x: p.x - cx,\n y: p.y - cy,\n }));\n\n const newSection: Section = {\n id: generateId(),\n label: `Section ${Date.now().toString(36).slice(-3).toUpperCase()}`,\n position: { x: cx, y: cy },\n rotation: 0,\n categoryId: this.categoryId,\n rows: [],\n outline,\n };\n\n this.history.execute({\n description: `Add section \"${newSection.label}\"`,\n execute: () => {\n const v = store.getState().venue;\n if (!v) return;\n store.getState().setVenue({ ...v, sections: [...v.sections, newSection] });\n },\n undo: () => {\n const v = store.getState().venue;\n if (!v) return;\n store.getState().setVenue({\n ...v,\n sections: v.sections.filter((s) => s.id !== newSection.id),\n });\n },\n });\n\n }\n\n private rectangleFromDiagonal(a: Vec2, b: Vec2): Vec2[] {\n return [\n { x: a.x, y: a.y },\n { x: b.x, y: a.y },\n { x: b.x, y: b.y },\n { x: a.x, y: b.y },\n ];\n }\n\n private notifyChange(): void {\n this.onPointsChange?.(this.points, false);\n }\n\n onDeactivate(): void {\n this.points = [];\n this.notifyChange();\n }\n}\n","import type { Viewport, SpatialIndex, CommandHistory } from \"@nex125/seatmap-core\";\nimport { generateId, pointInPolygon } from \"@nex125/seatmap-core\";\nimport type { Row, Seat, Section, Venue } from \"@nex125/seatmap-core\";\nimport type { SeatmapStore } from \"@nex125/seatmap-react\";\nimport { BaseTool, type ToolPointerEvent } from \"./BaseTool\";\n\nconst GRID = 20;\nconst ROW_GAP = GRID;\n\nfunction snapToGrid(v: number): number {\n return Math.round(v / GRID) * GRID;\n}\n\nfunction rowLabelFromIndex(index: number): string {\n let n = index + 1;\n let label = \"\";\n while (n > 0) {\n const rem = (n - 1) % 26;\n label = String.fromCharCode(65 + rem) + label;\n n = Math.floor((n - 1) / 26);\n }\n return label;\n}\n\nexport class AddRowTool extends BaseTool {\n readonly name = \"add-row\";\n readonly cursor = \"cell\";\n\n seatsPerRow = 10;\n rowsCount = 1;\n seatSpacing = 20;\n rowOrientationDeg = 0;\n\n getPlacementPreview(\n worldX: number,\n worldY: number,\n venue: Venue | null,\n ): { worldX: number; worldY: number; worldAngleRad: number } | null {\n if (!venue) return null;\n const section = this.findTargetSection(worldX, worldY, venue);\n if (!section) return null;\n const worldAngleRad = section.rotation + this.getFacingOrientationRad();\n return { worldX, worldY, worldAngleRad };\n }\n\n constructor(\n private history: CommandHistory,\n private spatialIndex: SpatialIndex,\n ) {\n super();\n }\n\n onPointerDown(e: ToolPointerEvent, _viewport: Viewport, store: SeatmapStore): void {\n const venue = store.getState().venue;\n if (!venue) return;\n const section = this.findTargetSection(e.worldX, e.worldY, venue);\n if (!section) return;\n\n // Convert click to section-local coordinates.\n const cos = Math.cos(-section.rotation);\n const sin = Math.sin(-section.rotation);\n const relX = e.worldX - section.position.x;\n const relY = e.worldY - section.position.y;\n const localX = relX * cos - relY * sin;\n const localY = relX * sin + relY * cos;\n\n // Row seats are placed along the row axis, which is perpendicular to the facing direction.\n const orientationRad = this.getRowAxisRad();\n const orientationCos = Math.cos(orientationRad);\n const orientationSin = Math.sin(orientationRad);\n const toOriented = (point: { x: number; y: number }) => ({\n u: point.x * orientationCos + point.y * orientationSin,\n v: -point.x * orientationSin + point.y * orientationCos,\n });\n const fromOriented = (u: number, v: number) => ({\n x: u * orientationCos - v * orientationSin,\n y: u * orientationSin + v * orientationCos,\n });\n\n const clickOriented = toOriented({ x: localX, y: localY });\n // Align row placement to the section snap grid so add-seat and drag snapping\n // use the same lattice inside this section.\n const startU = snapToGrid(clickOriented.u);\n const targetV = snapToGrid(clickOriented.v);\n\n // Collect existing row \"depth\" positions relative to current orientation and snap away from overlap.\n const existingVs = section.rows\n .map((row) => {\n if (row.seats.length === 0) return null;\n const projected = row.seats.map((seat) => toOriented(seat.position).v);\n return projected.reduce((sum, v) => sum + v, 0) / projected.length;\n })\n .filter((v): v is number => v !== null)\n .sort((a, b) => a - b);\n\n const hasOutline = section.outline.length >= 3;\n const rowsToAdd = Math.max(1, Math.floor(this.rowsCount));\n const occupiedVs = [...existingVs];\n const newRows: Row[] = [];\n\n for (let rowIndex = 0; rowIndex < rowsToAdd; rowIndex++) {\n let rowV = targetV + rowIndex * ROW_GAP;\n if (rowIndex > 0) {\n while (occupiedVs.some((v) => Math.abs(rowV - v) < ROW_GAP)) {\n rowV += ROW_GAP;\n }\n }\n occupiedVs.push(rowV);\n\n const seats: Seat[] = [];\n for (let i = 0; i < this.seatsPerRow; i++) {\n const pos = fromOriented(startU + i * this.seatSpacing, rowV);\n if (hasOutline && !pointInPolygon(pos, section.outline)) {\n // Keep placement consistent: fill from the first seat (pointer) to the right only.\n break;\n }\n seats.push({\n id: generateId(),\n label: `${seats.length + 1}`,\n position: pos,\n status: \"available\",\n categoryId: section.categoryId,\n });\n }\n\n if (seats.length === 0) continue;\n\n newRows.push({\n id: generateId(),\n label: rowLabelFromIndex(section.rows.length + newRows.length),\n seats,\n });\n }\n\n if (newRows.length === 0) return;\n\n const sectionId = section.id;\n const rowIds = newRows.map((r) => r.id);\n\n this.history.execute({\n description:\n newRows.length === 1\n ? `Add row ${newRows[0].label} to \"${section.label}\"`\n : `Add ${newRows.length} rows to \"${section.label}\"`,\n execute: () => {\n const v = store.getState().venue;\n if (!v) return;\n store.getState().setVenue({\n ...v,\n sections: v.sections.map((s) =>\n s.id === sectionId ? { ...s, rows: [...s.rows, ...newRows] } : s,\n ),\n });\n },\n undo: () => {\n const v = store.getState().venue;\n if (!v) return;\n store.getState().setVenue({\n ...v,\n sections: v.sections.map((s) =>\n s.id === sectionId\n ? { ...s, rows: s.rows.filter((r) => !rowIds.includes(r.id)) }\n : s,\n ),\n });\n },\n });\n }\n\n private findTargetSection(worldX: number, worldY: number, venue: Venue): Section | null {\n const hits = this.spatialIndex.queryPoint({ x: worldX, y: worldY }, 50);\n const sectionHits = hits.filter((h) => h.type === \"section\");\n if (sectionHits.length === 0) return null;\n\n const sectionIds = [...new Set(sectionHits.map((h) => h.sectionId))];\n const sections = sectionIds\n .map((id) => venue.sections.find((s) => s.id === id))\n .filter((s): s is Section => Boolean(s));\n if (sections.length === 0) return null;\n\n const containing = sections.find((section) => {\n if (section.outline.length < 3) return true;\n const cos = Math.cos(-section.rotation);\n const sin = Math.sin(-section.rotation);\n const relX = worldX - section.position.x;\n const relY = worldY - section.position.y;\n const local = {\n x: relX * cos - relY * sin,\n y: relX * sin + relY * cos,\n };\n return pointInPolygon(local, section.outline);\n });\n if (containing) return containing;\n\n return sections.sort(\n (a, b) =>\n Math.hypot(worldX - a.position.x, worldY - a.position.y) -\n Math.hypot(worldX - b.position.x, worldY - b.position.y),\n )[0] ?? null;\n }\n\n private getFacingOrientationRad(): number {\n // Facing direction: 0deg points up; 90deg points right.\n return ((this.rowOrientationDeg - 90) * Math.PI) / 180;\n }\n\n private getRowAxisRad(): number {\n return this.getFacingOrientationRad() + Math.PI / 2;\n }\n}\n","import type { Viewport, SpatialIndex, CommandHistory } from \"@nex125/seatmap-core\";\nimport { generateId, pointInPolygon } from \"@nex125/seatmap-core\";\nimport type { Seat, Row } from \"@nex125/seatmap-core\";\nimport type { SeatmapStore } from \"@nex125/seatmap-react\";\nimport { BaseTool, type ToolPointerEvent } from \"./BaseTool\";\n\nconst GRID = 20;\nconst MIN_SEAT_DIST = 16;\n\nfunction snapToGrid(v: number): number {\n return Math.round(v / GRID) * GRID;\n}\n\nexport class AddSeatTool extends BaseTool {\n readonly name = \"add-seat\";\n readonly cursor = \"crosshair\";\n\n constructor(\n private history: CommandHistory,\n private spatialIndex: SpatialIndex,\n ) {\n super();\n }\n\n onPointerDown(e: ToolPointerEvent, _viewport: Viewport, store: SeatmapStore): void {\n const hits = this.spatialIndex.queryPoint({ x: e.worldX, y: e.worldY }, 50);\n\n const venue = store.getState().venue;\n if (!venue) return;\n\n const sectionHits = hits.filter((h) => h.type === \"section\");\n if (sectionHits.length === 0) return;\n\n const sectionIds = [...new Set(sectionHits.map((h) => h.sectionId))];\n let section = sectionIds\n .map((id) => venue.sections.find((s) => s.id === id))\n .filter((s): s is NonNullable<typeof s> => Boolean(s))\n .find((s) => {\n if (s.outline.length < 3) return true;\n const c = Math.cos(-s.rotation);\n const s2 = Math.sin(-s.rotation);\n const relX = e.worldX - s.position.x;\n const relY = e.worldY - s.position.y;\n const local = {\n x: relX * c - relY * s2,\n y: relX * s2 + relY * c,\n };\n return pointInPolygon(local, s.outline);\n });\n\n if (!section) {\n section = sectionIds\n .map((id) => venue.sections.find((s) => s.id === id))\n .filter((s): s is NonNullable<typeof s> => Boolean(s))\n .sort(\n (a, b) =>\n Math.hypot(e.worldX - a.position.x, e.worldY - a.position.y) -\n Math.hypot(e.worldX - b.position.x, e.worldY - b.position.y),\n )[0];\n }\n if (!section) return;\n\n const relX = e.worldX - section.position.x;\n const relY = e.worldY - section.position.y;\n const c = Math.cos(-section.rotation);\n const s2 = Math.sin(-section.rotation);\n let lx = snapToGrid(relX * c - relY * s2);\n let ly = snapToGrid(relX * s2 + relY * c);\n\n if (section.outline.length >= 3 && !pointInPolygon({ x: lx, y: ly }, section.outline)) {\n return;\n }\n\n // Collect all existing seat positions in this section\n const existing: Array<{ x: number; y: number }> = [];\n for (const row of section.rows) {\n for (const seat of row.seats) {\n existing.push(seat.position);\n }\n }\n\n // Nudge away from overlapping seats\n lx = this.findNonOverlapping(lx, ly, existing);\n\n // Find the nearest existing row by Y, or create a new one\n let bestRow: Row | null = null;\n let bestDist = Infinity;\n for (const row of section.rows) {\n if (row.seats.length === 0) continue;\n const rowY = row.seats[0].position.y;\n const dist = Math.abs(ly - rowY);\n if (dist < MIN_SEAT_DIST && dist < bestDist) {\n bestDist = dist;\n bestRow = row;\n }\n }\n\n const sectionId = section.id;\n\n if (bestRow) {\n const rowId = bestRow.id;\n const snappedY = bestRow.seats[0].position.y;\n const existingInRow = bestRow.seats.map((s) => s.position);\n const finalX = this.findNonOverlapping(lx, snappedY, existingInRow);\n\n const newSeat: Seat = {\n id: generateId(),\n label: `${bestRow.seats.length + 1}`,\n position: { x: finalX, y: snappedY },\n status: \"available\",\n categoryId: section.categoryId,\n };\n\n this.history.execute({\n description: `Add seat to row \"${bestRow.label}\"`,\n execute: () => {\n const v = store.getState().venue;\n if (!v) return;\n store.getState().setVenue({\n ...v,\n sections: v.sections.map((sec) =>\n sec.id === sectionId\n ? { ...sec, rows: sec.rows.map((r) => r.id === rowId ? { ...r, seats: [...r.seats, newSeat] } : r) }\n : sec,\n ),\n });\n },\n undo: () => {\n const v = store.getState().venue;\n if (!v) return;\n store.getState().setVenue({\n ...v,\n sections: v.sections.map((sec) =>\n sec.id === sectionId\n ? { ...sec, rows: sec.rows.map((r) => r.id === rowId ? { ...r, seats: r.seats.filter((st) => st.id !== newSeat.id) } : r) }\n : sec,\n ),\n });\n },\n });\n } else {\n const rowLabel = String.fromCharCode(65 + section.rows.length);\n const newSeat: Seat = {\n id: generateId(),\n label: \"1\",\n position: { x: lx, y: ly },\n status: \"available\",\n categoryId: section.categoryId,\n };\n const newRow: Row = { id: generateId(), label: rowLabel, seats: [newSeat] };\n\n this.history.execute({\n description: `Add seat in new row ${rowLabel}`,\n execute: () => {\n const v = store.getState().venue;\n if (!v) return;\n store.getState().setVenue({\n ...v,\n sections: v.sections.map((sec) =>\n sec.id === sectionId ? { ...sec, rows: [...sec.rows, newRow] } : sec,\n ),\n });\n },\n undo: () => {\n const v = store.getState().venue;\n if (!v) return;\n store.getState().setVenue({\n ...v,\n sections: v.sections.map((sec) =>\n sec.id === sectionId ? { ...sec, rows: sec.rows.filter((r) => r.id !== newRow.id) } : sec,\n ),\n });\n },\n });\n }\n }\n\n private findNonOverlapping(x: number, y: number, existing: Array<{ x: number; y: number }>): number {\n let candidate = snapToGrid(x);\n for (let attempt = 0; attempt < 20; attempt++) {\n const overlaps = existing.some(\n (p) => Math.hypot(p.x - candidate, p.y - y) < MIN_SEAT_DIST,\n );\n if (!overlaps) return candidate;\n candidate += GRID;\n }\n return candidate;\n }\n}\n","import type { CSSProperties } from \"react\";\n\nexport interface ToolbarProps {\n activeTool: string;\n onToolChange: (tool: string) => void;\n gridEnabled: boolean;\n isGridOptionsOpen: boolean;\n onToggleGridOptions: () => void;\n canUndo: boolean;\n canRedo: boolean;\n onUndo: () => void;\n onRedo: () => void;\n onFitView: () => void;\n onSave: () => void;\n onLoad: () => void;\n style?: CSSProperties;\n}\n\nconst tools = [\n { id: \"pan\", label: \"Pan\", icon: \"✋\" },\n { id: \"select\", label: \"Select\", icon: \"↖\" },\n { id: \"add-section\", label: \"Section\", icon: \"▢\" },\n { id: \"add-row\", label: \"Row\", icon: \"⋯\" },\n { id: \"add-seat\", label: \"Seat\", icon: \"+\" },\n];\n\nconst btnBase: CSSProperties = {\n padding: \"6px 10px\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"#3a3a5a\",\n borderRadius: 6,\n background: \"#2a2a4a\",\n color: \"#e0e0e0\",\n cursor: \"pointer\",\n fontSize: 13,\n fontFamily: \"system-ui\",\n display: \"flex\",\n alignItems: \"center\",\n gap: 4,\n};\n\nconst activeBtnStyle: CSSProperties = {\n ...btnBase,\n background: \"#4a4a7a\",\n borderColor: \"#6a6aaa\",\n};\n\nexport function Toolbar({\n activeTool,\n onToolChange,\n gridEnabled,\n isGridOptionsOpen,\n onToggleGridOptions,\n canUndo,\n canRedo,\n onUndo,\n onRedo,\n onFitView,\n onSave,\n onLoad,\n style,\n}: ToolbarProps) {\n return (\n <div\n style={{\n display: \"flex\",\n background: \"#1a1a2e\",\n borderBottom: \"1px solid #2a2a4a\",\n ...style,\n }}\n >\n <div\n style={{\n display: \"flex\",\n gap: 4,\n padding: \"8px 12px\",\n alignItems: \"center\",\n flexWrap: \"wrap\",\n }}\n >\n {tools.map((tool) => (\n <button\n key={tool.id}\n onClick={() => onToolChange(tool.id)}\n style={activeTool === tool.id ? activeBtnStyle : btnBase}\n title={tool.label}\n >\n <span>{tool.icon}</span>\n <span>{tool.label}</span>\n </button>\n ))}\n\n <div style={{ width: 1, height: 24, background: \"#3a3a5a\", margin: \"0 6px\" }} />\n\n <button onClick={onUndo} disabled={!canUndo} style={{ ...btnBase, opacity: canUndo ? 1 : 0.4 }} title=\"Undo (Ctrl+Z)\">\n ↩ Undo\n </button>\n <button onClick={onRedo} disabled={!canRedo} style={{ ...btnBase, opacity: canRedo ? 1 : 0.4 }} title=\"Redo (Ctrl+Shift+Z)\">\n ↪ Redo\n </button>\n\n <div style={{ width: 1, height: 24, background: \"#3a3a5a\", margin: \"0 6px\" }} />\n\n <button onClick={onFitView} style={btnBase} title=\"Fit to view\">\n ⊞ Fit\n </button>\n <button\n onClick={onToggleGridOptions}\n style={{\n ...(isGridOptionsOpen ? activeBtnStyle : btnBase),\n borderColor: gridEnabled ? \"#57b26f\" : (isGridOptionsOpen ? activeBtnStyle.borderColor : btnBase.borderColor),\n boxShadow: gridEnabled ? \"0 0 0 1px #57b26f inset\" : \"none\",\n }}\n title=\"Show grid options\"\n >\n # Grid\n </button>\n\n <div style={{ width: 1, height: 24, background: \"#3a3a5a\", margin: \"0 6px\" }} />\n\n <button onClick={onSave} style={btnBase} title=\"Export venue as JSON\">\n ↓ Save\n </button>\n <button onClick={onLoad} style={btnBase} title=\"Import venue from JSON\">\n ↑ Load\n </button>\n </div>\n </div>\n );\n}\n","import { useState, useEffect, type CSSProperties } from \"react\";\nimport type { Venue, Section, PricingCategory, CommandHistory, Row, Seat } from \"@nex125/seatmap-core\";\nimport { generateId } from \"@nex125/seatmap-core\";\nimport { AVAILABLE_STATUS_ID } from \"@nex125/seatmap-core\";\nimport type { SeatmapStore } from \"@nex125/seatmap-react\";\n\nexport interface PropertyPanelProps {\n venue: Venue | null;\n selectedSeatIds: Set<string>;\n selectedSectionIds: Set<string>;\n history: CommandHistory;\n store: SeatmapStore;\n onUploadBackground?: () => void;\n onRemoveBackground?: () => void;\n onBackgroundOpacityChange?: (opacity: number) => void;\n onBackgroundSizeChange?: (size: { width?: number; height?: number }) => void;\n onBackgroundKeepAspectRatioChange?: (keepAspectRatio: boolean) => void;\n style?: CSSProperties;\n}\n\nconst labelStyle: CSSProperties = {\n fontSize: 11,\n color: \"#9e9e9e\",\n marginBottom: 2,\n fontFamily: \"system-ui\",\n};\n\nconst inputStyle: CSSProperties = {\n width: \"100%\",\n padding: \"4px 8px\",\n background: \"#2a2a4a\",\n border: \"1px solid #3a3a5a\",\n borderRadius: 4,\n color: \"#e0e0e0\",\n fontSize: 13,\n fontFamily: \"system-ui\",\n boxSizing: \"border-box\",\n};\n\nconst selectStyle: CSSProperties = { ...inputStyle, cursor: \"pointer\" };\n\nconst btnDanger: CSSProperties = {\n padding: \"3px 8px\",\n border: \"1px solid #5a2a2a\",\n borderRadius: 4,\n background: \"#3a1a1a\",\n color: \"#f48888\",\n cursor: \"pointer\",\n fontSize: 12,\n fontFamily: \"system-ui\",\n};\n\nconst btnSmall: CSSProperties = {\n padding: \"3px 8px\",\n border: \"1px solid #3a3a5a\",\n borderRadius: 4,\n background: \"#2a2a4a\",\n color: \"#e0e0e0\",\n cursor: \"pointer\",\n fontSize: 12,\n fontFamily: \"system-ui\",\n};\n\nfunction freshVenue(store: SeatmapStore): Venue | null {\n return store.getState().venue;\n}\n\nfunction setVenue(store: SeatmapStore, venue: Venue) {\n store.getState().setVenue(venue);\n}\n\nexport function PropertyPanel({\n venue,\n selectedSeatIds,\n selectedSectionIds,\n history,\n store,\n onUploadBackground,\n onRemoveBackground,\n onBackgroundOpacityChange,\n onBackgroundSizeChange,\n onBackgroundKeepAspectRatioChange,\n style,\n}: PropertyPanelProps) {\n const [selectedSections, setSelectedSections] = useState<Section[]>([]);\n\n useEffect(() => {\n if (!venue) {\n setSelectedSections([]);\n return;\n }\n\n setSelectedSections(venue.sections.filter((section) => selectedSectionIds.has(section.id)));\n }, [venue, selectedSectionIds]);\n\n const updateVenueName = (newName: string) => {\n const v = freshVenue(store);\n if (!v) return;\n const oldName = v.name;\n history.execute({\n description: `Rename venue to \"${newName}\"`,\n execute: () => setVenue(store, { ...v, name: newName }),\n undo: () => setVenue(store, { ...v, name: oldName }),\n });\n };\n\n const updateVenueId = (newId: string) => {\n const v = freshVenue(store);\n if (!v) return;\n const oldId = v.id;\n history.execute({\n description: `Change venue ID to \"${newId}\"`,\n execute: () => setVenue(store, { ...v, id: newId }),\n undo: () => setVenue(store, { ...v, id: oldId }),\n });\n };\n\n const updateSectionLabel = (sectionId: string, newLabel: string) => {\n const v = freshVenue(store);\n if (!v) return;\n const oldLabel = v.sections.find((s) => s.id === sectionId)?.label ?? \"\";\n\n history.execute({\n description: `Rename section to \"${newLabel}\"`,\n execute: () => {\n const cur = freshVenue(store);\n if (!cur) return;\n setVenue(store, {\n ...cur,\n sections: cur.sections.map((s) =>\n s.id === sectionId ? { ...s, label: newLabel } : s,\n ),\n });\n },\n undo: () => {\n const cur = freshVenue(store);\n if (!cur) return;\n setVenue(store, {\n ...cur,\n sections: cur.sections.map((s) =>\n s.id === sectionId ? { ...s, label: oldLabel } : s,\n ),\n });\n },\n });\n };\n\n const updateSectionCategory = (sectionId: string, categoryId: string) => {\n const v = freshVenue(store);\n if (!v) return;\n const oldCatId = v.sections.find((s) => s.id === sectionId)?.categoryId ?? \"\";\n\n history.execute({\n description: `Change section category`,\n execute: () => {\n const cur = freshVenue(store);\n if (!cur) return;\n setVenue(store, {\n ...cur,\n sections: cur.sections.map((s) =>\n s.id === sectionId\n ? {\n ...s,\n categoryId,\n rows: s.rows.map((r) => ({\n ...r,\n seats: r.seats.map((seat) => ({ ...seat, categoryId })),\n })),\n }\n : s,\n ),\n });\n },\n undo: () => {\n const cur = freshVenue(store);\n if (!cur) return;\n setVenue(store, {\n ...cur,\n sections: cur.sections.map((s) =>\n s.id === sectionId\n ? {\n ...s,\n categoryId: oldCatId,\n rows: s.rows.map((r) => ({\n ...r,\n seats: r.seats.map((seat) => ({ ...seat, categoryId: oldCatId })),\n })),\n }\n : s,\n ),\n });\n },\n });\n };\n\n const updateSelectedSectionsLabel = (sectionIds: string[], newLabel: string) => {\n if (sectionIds.length === 0) return;\n const v = freshVenue(store);\n if (!v) return;\n const targetIds = new Set(sectionIds);\n const previousLabels = new Map(\n v.sections\n .filter((section) => targetIds.has(section.id))\n .map((section) => [section.id, section.label]),\n );\n\n history.execute({\n description: `Rename ${sectionIds.length} section(s)`,\n execute: () => {\n const cur = freshVenue(store);\n if (!cur) return;\n setVenue(store, {\n ...cur,\n sections: cur.sections.map((section) =>\n targetIds.has(section.id) ? { ...section, label: newLabel } : section,\n ),\n });\n },\n undo: () => {\n const cur = freshVenue(store);\n if (!cur) return;\n setVenue(store, {\n ...cur,\n sections: cur.sections.map((section) =>\n targetIds.has(section.id)\n ? { ...section, label: previousLabels.get(section.id) ?? section.label }\n : section,\n ),\n });\n },\n });\n };\n\n const updateSelectedSectionsCategory = (sectionIds: string[], categoryId: string) => {\n if (sectionIds.length === 0) return;\n const v = freshVenue(store);\n if (!v) return;\n const targetIds = new Set(sectionIds);\n const previousCategoryBySectionId = new Map(\n v.sections\n .filter((section) => targetIds.has(section.id))\n .map((section) => [section.id, section.categoryId]),\n );\n\n history.execute({\n description: `Change category for ${sectionIds.length} section(s)`,\n execute: () => {\n const cur = freshVenue(store);\n if (!cur) return;\n setVenue(store, {\n ...cur,\n sections: cur.sections.map((section) => {\n if (!targetIds.has(section.id)) return section;\n return {\n ...section,\n categoryId,\n rows: section.rows.map((row) => ({\n ...row,\n seats: row.seats.map((seat) => ({ ...seat, categoryId })),\n })),\n };\n }),\n });\n },\n undo: () => {\n const cur = freshVenue(store);\n if (!cur) return;\n setVenue(store, {\n ...cur,\n sections: cur.sections.map((section) => {\n if (!targetIds.has(section.id)) return section;\n const previousCategoryId = previousCategoryBySectionId.get(section.id) ?? section.categoryId;\n return {\n ...section,\n categoryId: previousCategoryId,\n rows: section.rows.map((row) => ({\n ...row,\n seats: row.seats.map((seat) => ({ ...seat, categoryId: previousCategoryId })),\n })),\n };\n }),\n });\n },\n });\n };\n\n const deleteSection = (sectionId: string) => {\n const v = freshVenue(store);\n if (!v) return;\n const removed = v.sections.find((s) => s.id === sectionId);\n if (!removed) return;\n\n history.execute({\n description: `Delete section \"${removed.label}\"`,\n execute: () => {\n const cur = freshVenue(store);\n if (!cur) return;\n setVenue(store, { ...cur, sections: cur.sections.filter((s) => s.id !== sectionId) });\n store.getState().clearSelection();\n },\n undo: () => {\n const cur = freshVenue(store);\n if (!cur) return;\n setVenue(store, { ...cur, sections: [...cur.sections, removed] });\n },\n });\n };\n\n const deleteRow = (sectionId: string, rowId: string) => {\n const v = freshVenue(store);\n if (!v) return;\n const sec = v.sections.find((s) => s.id === sectionId);\n const removed = sec?.rows.find((r) => r.id === rowId);\n if (!removed) return;\n\n history.execute({\n description: `Delete row \"${removed.label}\"`,\n execute: () => {\n const cur = freshVenue(store);\n if (!cur) return;\n setVenue(store, {\n ...cur,\n sections: cur.sections.map((s) =>\n s.id === sectionId ? { ...s, rows: s.rows.filter((r) => r.id !== rowId) } : s,\n ),\n });\n },\n undo: () => {\n const cur = freshVenue(store);\n if (!cur) return;\n setVenue(store, {\n ...cur,\n sections: cur.sections.map((s) =>\n s.id === sectionId ? { ...s, rows: [...s.rows, removed] } : s,\n ),\n });\n },\n });\n };\n\n const deleteSeat = (sectionId: string, rowId: string, seatId: string) => {\n const v = freshVenue(store);\n if (!v) return;\n const sec = v.sections.find((s) => s.id === sectionId);\n const row = sec?.rows.find((r) => r.id === rowId);\n const removed = row?.seats.find((s) => s.id === seatId);\n if (!removed) return;\n\n history.execute({\n description: `Delete seat \"${removed.label}\"`,\n execute: () => {\n const cur = freshVenue(store);\n if (!cur) return;\n setVenue(store, {\n ...cur,\n sections: cur.sections.map((s) =>\n s.id === sectionId\n ? {\n ...s,\n rows: s.rows.map((r) =>\n r.id === rowId ? { ...r, seats: r.seats.filter((st) => st.id !== seatId) } : r,\n ),\n }\n : s,\n ),\n });\n const sel = store.getState().selectedSeatIds;\n if (sel.has(seatId)) store.getState().deselectSeat(seatId);\n },\n undo: () => {\n const cur = freshVenue(store);\n if (!cur) return;\n setVenue(store, {\n ...cur,\n sections: cur.sections.map((s) =>\n s.id === sectionId\n ? {\n ...s,\n rows: s.rows.map((r) =>\n r.id === rowId ? { ...r, seats: [...r.seats, removed] } : r,\n ),\n }\n : s,\n ),\n });\n },\n });\n };\n\n const addSingleSeat = (sectionId: string) => {\n const v = freshVenue(store);\n if (!v) return;\n const sec = v.sections.find((s) => s.id === sectionId);\n if (!sec) return;\n\n let targetRow: Row | undefined = sec.rows[sec.rows.length - 1];\n const newSeat = {\n id: generateId(),\n label: targetRow ? `${targetRow.seats.length + 1}` : \"1\",\n position: {\n x: targetRow ? (targetRow.seats.length > 0 ? targetRow.seats[targetRow.seats.length - 1].position.x + 20 : 0) : 0,\n y: targetRow ? targetRow.seats[0]?.position.y ?? 0 : 0,\n },\n status: \"available\" as const,\n categoryId: sec.categoryId,\n };\n\n if (!targetRow) {\n const newRow: Row = { id: generateId(), label: \"A\", seats: [newSeat] };\n history.execute({\n description: `Add seat to new row`,\n execute: () => {\n const cur = freshVenue(store);\n if (!cur) return;\n setVenue(store, {\n ...cur,\n sections: cur.sections.map((s) =>\n s.id === sectionId ? { ...s, rows: [...s.rows, newRow] } : s,\n ),\n });\n },\n undo: () => {\n const cur = freshVenue(store);\n if (!cur) return;\n setVenue(store, {\n ...cur,\n sections: cur.sections.map((s) =>\n s.id === sectionId ? { ...s, rows: s.rows.filter((r) => r.id !== newRow.id) } : s,\n ),\n });\n },\n });\n return;\n }\n\n const rowId = targetRow.id;\n history.execute({\n description: `Add seat to row \"${targetRow.label}\"`,\n execute: () => {\n const cur = freshVenue(store);\n if (!cur) return;\n setVenue(store, {\n ...cur,\n sections: cur.sections.map((s) =>\n s.id === sectionId\n ? {\n ...s,\n rows: s.rows.map((r) =>\n r.id === rowId ? { ...r, seats: [...r.seats, newSeat] } : r,\n ),\n }\n : s,\n ),\n });\n },\n undo: () => {\n const cur = freshVenue(store);\n if (!cur) return;\n setVenue(store, {\n ...cur,\n sections: cur.sections.map((s) =>\n s.id === sectionId\n ? {\n ...s,\n rows: s.rows.map((r) =>\n r.id === rowId ? { ...r, seats: r.seats.filter((st) => st.id !== newSeat.id) } : r,\n ),\n }\n : s,\n ),\n });\n },\n });\n };\n\n const updateSelectedSeatStatus = (statusId: string) => {\n if (selectedSeatIds.size === 0) return;\n const v = freshVenue(store);\n if (!v) return;\n\n const previousVenue = v;\n const nextVenue: Venue = {\n ...v,\n sections: v.sections.map((section) => ({\n ...section,\n rows: section.rows.map((row) => ({\n ...row,\n seats: row.seats.map((seat) =>\n selectedSeatIds.has(seat.id) ? { ...seat, status: statusId } : seat,\n ),\n })),\n })),\n tables: v.tables.map((table) => ({\n ...table,\n seats: table.seats.map((seat) =>\n selectedSeatIds.has(seat.id) ? { ...seat, status: statusId } : seat,\n ),\n })),\n };\n\n history.execute({\n description: `Set ${selectedSeatIds.size} seat(s) status`,\n execute: () => setVenue(store, nextVenue),\n undo: () => setVenue(store, previousVenue),\n });\n };\n\n if (!venue) {\n return (\n <div style={{ padding: 16, color: \"#9e9e9e\", fontSize: 13, fontFamily: \"system-ui\", ...style }}>\n No venue loaded\n </div>\n );\n }\n\n const selectedSeatsEverywhere: Seat[] = [];\n for (const section of venue.sections) {\n for (const row of section.rows) {\n for (const seat of row.seats) {\n if (selectedSeatIds.has(seat.id)) selectedSeatsEverywhere.push(seat);\n }\n }\n }\n for (const table of venue.tables) {\n for (const seat of table.seats) {\n if (selectedSeatIds.has(seat.id)) selectedSeatsEverywhere.push(seat);\n }\n }\n\n const selectedSeatStatusIds = new Set(selectedSeatsEverywhere.map((seat) => seat.status));\n const isMixedSeatStatus = selectedSeatStatusIds.size > 1;\n const selectedSeatStatusId =\n selectedSeatStatusIds.size > 0 ? [...selectedSeatStatusIds][0] : AVAILABLE_STATUS_ID;\n const hasMultipleSelectedSections = selectedSections.length > 1;\n const selectedSectionIdsList = selectedSections.map((section) => section.id);\n const selectedSectionLabels = new Set(selectedSections.map((section) => section.label));\n const selectedSectionCategoryIds = new Set(selectedSections.map((section) => section.categoryId));\n const sharedLabelValue = selectedSectionLabels.size === 1 ? selectedSections[0]?.label ?? \"\" : \"\";\n const sharedCategoryValue = selectedSectionCategoryIds.size === 1 ? selectedSections[0]?.categoryId ?? \"\" : \"__mixed__\";\n\n return (\n <div style={{ padding: 16, ...style }}>\n {selectedSeatIds.size > 0 && (\n <div style={{ marginBottom: 24 }}>\n <div style={{ fontWeight: 600, color: \"#e0e0e0\", fontSize: 14, fontFamily: \"system-ui\", marginBottom: 12 }}>\n Seat Config ({selectedSeatIds.size} selected)\n </div>\n\n <div style={{ marginBottom: 16 }}>\n <div style={labelStyle}>Seat Status</div>\n <select\n style={selectStyle}\n value={isMixedSeatStatus ? \"__mixed__\" : selectedSeatStatusId}\n onChange={(e) => updateSelectedSeatStatus(e.target.value)}\n >\n {isMixedSeatStatus && (\n <option value=\"__mixed__\" disabled>\n Mixed\n </option>\n )}\n {venue.seatStatuses.map((status) => (\n <option key={status.id} value={status.id}>{status.name}</option>\n ))}\n </select>\n </div>\n\n <div style={{ marginBottom: 10 }}>\n <div style={labelStyle}>Selected Seats ({selectedSeatIds.size})</div>\n <div style={{ maxHeight: 200, overflowY: \"auto\" }}>\n {Array.from(selectedSeatIds).map((seatId) => {\n let found: { seat: Seat; row: Row; section: Section } | null = null;\n for (const section of venue.sections) {\n for (const row of section.rows) {\n const seat = row.seats.find((s) => s.id === seatId);\n if (seat) {\n found = { seat, row, section };\n break;\n }\n }\n if (found) break;\n }\n\n if (!found) return null;\n const { seat, row, section } = found;\n return (\n <div\n key={seat.id}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n padding: \"2px 6px\",\n fontSize: 12,\n fontFamily: \"system-ui\",\n color: \"#e0e0e0\",\n background: \"#2a2a4a\",\n marginBottom: 2,\n borderRadius: 4,\n }}\n >\n <span style={{ flex: 1 }}>{section.label} · Row {row.label}, Seat {seat.label}</span>\n <button\n onClick={() => deleteSeat(section.id, row.id, seat.id)}\n style={{ ...btnDanger, padding: \"1px 5px\", fontSize: 11 }}\n title=\"Delete seat\"\n >\n ✕\n </button>\n </div>\n );\n })}\n </div>\n </div>\n <div style={{ height: 1, background: \"#2a2a4a\", margin: \"20px 0\" }} />\n </div>\n )}\n\n {selectedSeatIds.size === 0 && selectedSections.length > 0 && (\n <div style={{ marginBottom: 24 }}>\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\", marginBottom: 12 }}>\n <div style={{ fontWeight: 600, color: \"#e0e0e0\", fontSize: 14, fontFamily: \"system-ui\" }}>\n Section Config{selectedSections.length > 1 ? ` (${selectedSections.length} selected)` : \"\"}\n </div>\n </div>\n\n {hasMultipleSelectedSections && (\n <div style={{ marginBottom: 12, padding: 10, borderRadius: 6, background: \"#26264a\" }}>\n <div style={{ marginBottom: 10 }}>\n <div style={labelStyle}>Label (apply to all selected)</div>\n <input\n style={inputStyle}\n value={sharedLabelValue}\n placeholder=\"Mixed labels\"\n onChange={(e) => updateSelectedSectionsLabel(selectedSectionIdsList, e.target.value)}\n />\n </div>\n <div>\n <div style={labelStyle}>Category (apply to all selected)</div>\n <select\n style={selectStyle}\n value={sharedCategoryValue}\n onChange={(e) => updateSelectedSectionsCategory(selectedSectionIdsList, e.target.value)}\n >\n {sharedCategoryValue === \"__mixed__\" && (\n <option value=\"__mixed__\" disabled>Mixed</option>\n )}\n {venue.categories.map((cat: PricingCategory) => (\n <option key={cat.id} value={cat.id}>{cat.name}</option>\n ))}\n </select>\n </div>\n </div>\n )}\n\n {selectedSections.map((selectedSection) => (\n <div key={selectedSection.id} style={{ marginBottom: 14, padding: 10, borderRadius: 6, background: \"#222242\" }}>\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\", marginBottom: 10 }}>\n <div style={{ color: \"#c7c7df\", fontSize: 12, fontFamily: \"system-ui\", fontWeight: 600 }}>\n ID: {selectedSection.id}\n </div>\n <button onClick={() => deleteSection(selectedSection.id)} style={btnDanger} title=\"Delete section\">\n Delete\n </button>\n </div>\n\n {!hasMultipleSelectedSections && (\n <>\n <div style={{ marginBottom: 10 }}>\n <div style={labelStyle}>Label</div>\n <input\n style={inputStyle}\n value={selectedSection.label}\n onChange={(e) => updateSectionLabel(selectedSection.id, e.target.value)}\n />\n </div>\n\n <div style={{ marginBottom: 10 }}>\n <div style={labelStyle}>Category</div>\n <select\n style={selectStyle}\n value={selectedSection.categoryId}\n onChange={(e) => updateSectionCategory(selectedSection.id, e.target.value)}\n >\n {venue.categories.map((cat: PricingCategory) => (\n <option key={cat.id} value={cat.id}>{cat.name}</option>\n ))}\n </select>\n </div>\n </>\n )}\n\n <div style={{ marginBottom: 10 }}>\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\" }}>\n <div style={labelStyle}>\n Rows ({selectedSection.rows.length}) ·{\" \"}\n {selectedSection.rows.reduce((t, r) => t + r.seats.length, 0)} seats\n </div>\n <button onClick={() => addSingleSeat(selectedSection.id)} style={btnSmall} title=\"Add a single seat to the last row\">\n + Seat\n </button>\n </div>\n </div>\n\n <div style={{ maxHeight: 220, overflowY: \"auto\" }}>\n {selectedSection.rows.map((row) => (\n <div\n key={row.id}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n padding: \"3px 6px\",\n borderRadius: 4,\n marginBottom: 2,\n background: \"#2a2a4a\",\n fontSize: 12,\n fontFamily: \"system-ui\",\n color: \"#e0e0e0\",\n }}\n >\n <span style={{ fontWeight: 600, minWidth: 24 }}>Row {row.label}</span>\n <span style={{ flex: 1, color: \"#9e9e9e\" }}>{row.seats.length} seats</span>\n <button\n onClick={() => deleteRow(selectedSection.id, row.id)}\n style={{ ...btnDanger, padding: \"1px 5px\", fontSize: 11 }}\n title={`Delete row ${row.label}`}\n >\n ✕\n </button>\n </div>\n ))}\n </div>\n </div>\n ))}\n </div>\n )}\n\n {selectedSections.length === 0 && selectedSeatIds.size === 0 && (\n <div>\n <div style={{ fontWeight: 600, color: \"#e0e0e0\", fontSize: 14, fontFamily: \"system-ui\", marginBottom: 12 }}>\n Venue Config\n </div>\n\n <div style={{ marginBottom: 10 }}>\n <div style={labelStyle}>Venue Name</div>\n <input\n style={inputStyle}\n value={venue.name}\n onChange={(e) => updateVenueName(e.target.value)}\n />\n </div>\n\n <div style={{ marginBottom: 16 }}>\n <div style={labelStyle}>Venue ID</div>\n <input\n style={inputStyle}\n value={venue.id}\n onChange={(e) => updateVenueId(e.target.value)}\n />\n </div>\n\n <div style={{ color: \"#9e9e9e\", fontSize: 11, fontFamily: \"system-ui\", marginBottom: 12 }}>\n Stats: {venue.sections.length} sections ·{\" \"}\n {venue.sections.reduce((t, s) => t + s.rows.reduce((rt, r) => rt + r.seats.length, 0), 0)} seats\n </div>\n\n <div style={{ height: 1, background: \"#2a2a4a\", margin: \"14px 0\" }} />\n <div style={labelStyle}>Background Image</div>\n {venue.backgroundImage ? (\n <div style={{ marginTop: 6 }}>\n <div\n style={{\n width: \"100%\",\n height: 80,\n borderRadius: 4,\n border: \"1px solid #3a3a5a\",\n overflow: \"hidden\",\n marginBottom: 8,\n }}\n >\n <img\n src={venue.backgroundImage}\n alt=\"Background\"\n style={{ width: \"100%\", height: \"100%\", objectFit: \"cover\", display: \"block\" }}\n />\n </div>\n <div style={{ ...labelStyle, marginBottom: 4 }}>\n Opacity: {Math.round((venue.backgroundImageOpacity ?? 0.5) * 100)}%\n </div>\n <input\n type=\"range\"\n min={0}\n max={100}\n value={Math.round((venue.backgroundImageOpacity ?? 0.5) * 100)}\n onChange={(e) => onBackgroundOpacityChange?.(parseInt(e.target.value) / 100)}\n style={{ width: \"100%\", accentColor: \"#6a6aaa\", cursor: \"pointer\" }}\n />\n <div style={{ display: \"flex\", gap: 8, marginTop: 10 }}>\n <div style={{ flex: 1 }}>\n <div style={labelStyle}>Width</div>\n <input\n type=\"number\"\n min={1}\n step={1}\n value={Math.round(venue.backgroundImageWidth ?? venue.bounds.width)}\n onChange={(e) =>\n onBackgroundSizeChange?.({\n width: Math.max(1, Number.parseInt(e.target.value, 10) || 1),\n })\n }\n style={inputStyle}\n />\n </div>\n <div style={{ flex: 1 }}>\n <div style={labelStyle}>Height</div>\n <input\n type=\"number\"\n min={1}\n step={1}\n value={Math.round(venue.backgroundImageHeight ?? venue.bounds.height)}\n onChange={(e) =>\n onBackgroundSizeChange?.({\n height: Math.max(1, Number.parseInt(e.target.value, 10) || 1),\n })\n }\n style={inputStyle}\n />\n </div>\n </div>\n <label\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n marginTop: 8,\n color: \"#c7c7df\",\n fontSize: 12,\n fontFamily: \"system-ui\",\n cursor: \"pointer\",\n }}\n >\n <input\n type=\"checkbox\"\n checked={venue.backgroundImageKeepAspectRatio ?? true}\n onChange={(e) => onBackgroundKeepAspectRatioChange?.(e.target.checked)}\n />\n Keep aspect ratio\n </label>\n <div style={{ display: \"flex\", gap: 6, marginTop: 8 }}>\n <button onClick={onUploadBackground} style={btnSmall}>\n Replace\n </button>\n <button onClick={onRemoveBackground} style={btnDanger}>\n Remove\n </button>\n </div>\n </div>\n ) : (\n <button\n onClick={onUploadBackground}\n style={{ ...btnSmall, marginTop: 6, width: \"100%\" }}\n >\n Upload Image\n </button>\n )}\n </div>\n )}\n </div>\n );\n}\n","import { useState, type CSSProperties } from \"react\";\nimport type { Venue, PricingCategory, CommandHistory } from \"@nex125/seatmap-core\";\nimport { generateId } from \"@nex125/seatmap-core\";\nimport type { SeatmapStore } from \"@nex125/seatmap-react\";\n\nexport interface CategoryManagerProps {\n venue: Venue | null;\n history: CommandHistory;\n store: SeatmapStore;\n fetchCategoryPrices?: (categoryIds: string[]) => Promise<Record<string, number>>;\n style?: CSSProperties;\n}\n\nconst btnSmall: CSSProperties = {\n padding: \"3px 8px\",\n border: \"1px solid #3a3a5a\",\n borderRadius: 4,\n background: \"#2a2a4a\",\n color: \"#e0e0e0\",\n cursor: \"pointer\",\n fontSize: 12,\n fontFamily: \"system-ui\",\n};\n\nfunction replaceCategoryInVenue(venue: Venue, categoryId: string, replacementCategoryId: string): Venue {\n return {\n ...venue,\n sections: venue.sections.map((section) => ({\n ...section,\n categoryId: section.categoryId === categoryId ? replacementCategoryId : section.categoryId,\n rows: section.rows.map((row) => ({\n ...row,\n seats: row.seats.map((seat) =>\n seat.categoryId === categoryId ? { ...seat, categoryId: replacementCategoryId } : seat,\n ),\n })),\n })),\n gaAreas: venue.gaAreas.map((gaArea) =>\n gaArea.categoryId === categoryId ? { ...gaArea, categoryId: replacementCategoryId } : gaArea,\n ),\n tables: venue.tables.map((table) => ({\n ...table,\n categoryId: table.categoryId === categoryId ? replacementCategoryId : table.categoryId,\n seats: table.seats.map((seat) =>\n seat.categoryId === categoryId ? { ...seat, categoryId: replacementCategoryId } : seat,\n ),\n })),\n };\n}\n\nexport function CategoryManager({\n venue,\n history,\n store,\n fetchCategoryPrices,\n style,\n}: CategoryManagerProps) {\n const [newName, setNewName] = useState(\"\");\n const [newColor, setNewColor] = useState(\"#4caf50\");\n const [editingId, setEditingId] = useState<string | null>(null);\n const [editingName, setEditingName] = useState(\"\");\n const [editingColor, setEditingColor] = useState(\"#4caf50\");\n const [isPriceManagerOpen, setIsPriceManagerOpen] = useState(false);\n const [isFetchingPrices, setIsFetchingPrices] = useState(false);\n const [fetchError, setFetchError] = useState<string | null>(null);\n const [syncStatus, setSyncStatus] = useState<\"not-synced\" | \"syncing\" | \"synced\" | \"failed\">(\"not-synced\");\n const [overridePriceDrafts, setOverridePriceDrafts] = useState<Record<string, string>>({});\n\n if (!venue) return null;\n\n const formatPrice = (price?: number) => `$${(Number.isFinite(price) ? (price as number) : 0).toFixed(2)}`;\n\n const effectivePrice = (category: PricingCategory) => {\n if (category.isPriceOverridden && Number.isFinite(category.overriddenPrice)) {\n return category.overriddenPrice;\n }\n return Number.isFinite(category.backendPrice) ? category.backendPrice : 0;\n };\n\n const openPriceManager = () => {\n const initialDrafts: Record<string, string> = {};\n for (const category of venue.categories) {\n const value = category.overriddenPrice;\n initialDrafts[category.id] = Number.isFinite(value) ? String(value) : \"\";\n }\n setOverridePriceDrafts(initialDrafts);\n setFetchError(null);\n setSyncStatus(\"not-synced\");\n setIsPriceManagerOpen(true);\n };\n\n const addCategory = () => {\n if (!newName.trim()) return;\n const cat: PricingCategory = {\n id: generateId(),\n name: newName.trim(),\n color: newColor,\n };\n\n history.execute({\n description: `Add category \"${cat.name}\"`,\n execute: () => {\n const cur = store.getState().venue;\n if (!cur) return;\n store.getState().setVenue({ ...cur, categories: [...cur.categories, cat] });\n },\n undo: () => {\n const cur = store.getState().venue;\n if (!cur) return;\n store.getState().setVenue({ ...cur, categories: cur.categories.filter((c) => c.id !== cat.id) });\n },\n });\n\n setNewName(\"\");\n };\n\n const startEdit = (category: PricingCategory) => {\n setEditingId(category.id);\n setEditingName(category.name);\n setEditingColor(category.color);\n };\n\n const saveEdit = () => {\n if (!editingId) return;\n const trimmedName = editingName.trim();\n if (!trimmedName) return;\n\n history.execute({\n description: `Update category \"${trimmedName}\"`,\n execute: () => {\n const cur = store.getState().venue;\n if (!cur) return;\n store.getState().setVenue({\n ...cur,\n categories: cur.categories.map((category) =>\n category.id === editingId\n ? { ...category, name: trimmedName, color: editingColor }\n : category,\n ),\n });\n },\n undo: () => {\n const original = venue.categories.find((category) => category.id === editingId);\n const cur = store.getState().venue;\n if (!cur || !original) return;\n store.getState().setVenue({\n ...cur,\n categories: cur.categories.map((category) =>\n category.id === editingId ? original : category,\n ),\n });\n },\n });\n\n setEditingId(null);\n };\n\n const removeCategory = (catId: string) => {\n const current = store.getState().venue;\n if (!current || current.categories.length <= 1) return;\n const cat = current.categories.find((c) => c.id === catId);\n if (!cat) return;\n const replacementCategory = current.categories.find((c) => c.id !== catId);\n if (!replacementCategory) return;\n\n const previousVenue = current;\n const nextVenue = replaceCategoryInVenue(\n {\n ...previousVenue,\n categories: previousVenue.categories.filter((c) => c.id !== catId),\n },\n catId,\n replacementCategory.id,\n );\n\n history.execute({\n description: `Remove category \"${cat.name}\"`,\n execute: () => {\n store.getState().setVenue(nextVenue);\n },\n undo: () => {\n store.getState().setVenue(previousVenue);\n },\n });\n };\n\n const syncPricesFromBackend = async () => {\n if (!fetchCategoryPrices) return;\n setFetchError(null);\n setIsFetchingPrices(true);\n setSyncStatus(\"syncing\");\n try {\n const currentVenue = store.getState().venue;\n if (!currentVenue) return;\n const categoryIds = currentVenue.categories.map((category) => category.id);\n const backendPrices = await fetchCategoryPrices(categoryIds);\n const previousVenue = currentVenue;\n const nextVenue: Venue = {\n ...currentVenue,\n categories: currentVenue.categories.map((category) => {\n const nextPrice = backendPrices[category.id];\n return { ...category, backendPrice: Number.isFinite(nextPrice) ? nextPrice : 0 };\n }),\n };\n history.execute({\n description: \"Sync prices from backend\",\n execute: () => {\n const cur = store.getState().venue;\n if (!cur) return;\n store.getState().setVenue(nextVenue);\n },\n undo: () => {\n const cur = store.getState().venue;\n if (!cur) return;\n store.getState().setVenue(previousVenue);\n },\n });\n setSyncStatus(\"synced\");\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Failed to fetch prices.\";\n setFetchError(message);\n const currentVenue = store.getState().venue;\n if (currentVenue) {\n store.getState().setVenue({\n ...currentVenue,\n categories: currentVenue.categories.map((category) => ({\n ...category,\n backendPrice: 0,\n })),\n });\n }\n setSyncStatus(\"failed\");\n } finally {\n setIsFetchingPrices(false);\n }\n };\n\n const toggleOverride = (categoryId: string, enabled: boolean) => {\n const currentVenue = store.getState().venue;\n if (!currentVenue) return;\n const previousVenue = currentVenue;\n const nextVenue: Venue = {\n ...currentVenue,\n categories: currentVenue.categories.map((category) => {\n if (category.id !== categoryId) return category;\n if (!enabled) return { ...category, isPriceOverridden: false };\n const resolvedOverride =\n Number.isFinite(category.overriddenPrice)\n ? category.overriddenPrice\n : Number.isFinite(category.backendPrice)\n ? category.backendPrice\n : 0;\n return {\n ...category,\n isPriceOverridden: true,\n overriddenPrice: Number.isFinite(resolvedOverride) ? resolvedOverride : category.overriddenPrice,\n };\n }),\n };\n history.execute({\n description: `${enabled ? \"Enable\" : \"Disable\"} price override`,\n execute: () => {\n const cur = store.getState().venue;\n if (!cur) return;\n store.getState().setVenue(nextVenue);\n },\n undo: () => {\n const cur = store.getState().venue;\n if (!cur) return;\n store.getState().setVenue(previousVenue);\n },\n });\n };\n\n const commitOverridePrice = (categoryId: string) => {\n const raw = overridePriceDrafts[categoryId] ?? \"\";\n const parsed = Number.parseFloat(raw);\n if (!Number.isFinite(parsed) || parsed < 0) {\n return;\n }\n const currentVenue = store.getState().venue;\n if (!currentVenue) return;\n const previousVenue = currentVenue;\n const nextVenue: Venue = {\n ...currentVenue,\n categories: currentVenue.categories.map((category) =>\n category.id === categoryId\n ? { ...category, isPriceOverridden: true, overriddenPrice: parsed }\n : category,\n ),\n };\n history.execute({\n description: \"Update category override price\",\n execute: () => {\n const cur = store.getState().venue;\n if (!cur) return;\n store.getState().setVenue(nextVenue);\n },\n undo: () => {\n const cur = store.getState().venue;\n if (!cur) return;\n store.getState().setVenue(previousVenue);\n },\n });\n };\n\n const resetOverrideDraft = (category: PricingCategory) => {\n const value = Number.isFinite(category.overriddenPrice) ? category.overriddenPrice : undefined;\n setOverridePriceDrafts((current) => ({\n ...current,\n [category.id]: Number.isFinite(value) ? String(value) : \"\",\n }));\n };\n\n const isDraftChanged = (category: PricingCategory) => {\n const draft = overridePriceDrafts[category.id] ?? \"\";\n const persisted = Number.isFinite(category.overriddenPrice) ? String(category.overriddenPrice) : \"\";\n return draft !== persisted;\n };\n\n const adjustOverrideDraft = (categoryId: string, delta: number) => {\n setOverridePriceDrafts((current) => {\n const raw = current[categoryId] ?? \"\";\n const parsed = Number.parseFloat(raw);\n const baseValue = Number.isFinite(parsed) ? parsed : 0;\n const nextValue = Math.max(0, baseValue + delta);\n return {\n ...current,\n [categoryId]: nextValue.toFixed(2),\n };\n });\n };\n\n const switchTrackBase: CSSProperties = {\n width: 34,\n height: 20,\n borderRadius: 999,\n border: \"1px solid #4a4a6a\",\n padding: 2,\n display: \"inline-flex\",\n alignItems: \"center\",\n transition: \"all 0.12s ease\",\n };\n\n const switchThumbBase: CSSProperties = {\n width: 14,\n height: 14,\n borderRadius: \"50%\",\n background: \"#e0e0e0\",\n transition: \"transform 0.12s ease\",\n };\n\n return (\n <div style={{ padding: 16, ...style }}>\n <div style={{ fontWeight: 600, color: \"#e0e0e0\", fontSize: 14, fontFamily: \"system-ui\", marginBottom: 12 }}>\n Pricing Categories\n </div>\n\n {venue.categories.map((cat: PricingCategory) => {\n const isEditing = editingId === cat.id;\n return (\n <div\n key={cat.id}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n flexWrap: \"wrap\",\n marginBottom: 6,\n padding: \"4px 8px\",\n borderRadius: 4,\n background: \"#2a2a4a\",\n }}\n >\n <input\n type=\"color\"\n value={isEditing ? editingColor : cat.color}\n onChange={(e) => isEditing && setEditingColor(e.target.value)}\n disabled={!isEditing}\n style={{ width: 18, height: 18, border: \"none\", padding: 0, cursor: isEditing ? \"pointer\" : \"default\" }}\n />\n {isEditing ? (\n <input\n value={editingName}\n onChange={(e) => setEditingName(e.target.value)}\n onKeyDown={(e) => e.key === \"Enter\" && saveEdit()}\n style={{\n flex: 1,\n minWidth: 0,\n padding: \"2px 6px\",\n background: \"#1f1f38\",\n border: \"1px solid #3a3a5a\",\n borderRadius: 4,\n color: \"#e0e0e0\",\n fontSize: 12,\n fontFamily: \"system-ui\",\n }}\n />\n ) : (\n <div style={{ flex: 1, color: \"#e0e0e0\", fontSize: 13, fontFamily: \"system-ui\" }}>\n {cat.name}\n </div>\n )}\n {isEditing ? (\n <>\n <button onClick={saveEdit} style={{ ...btnSmall, padding: \"1px 6px\", fontSize: 11 }}>\n Save\n </button>\n <button onClick={() => setEditingId(null)} style={{ ...btnSmall, padding: \"1px 6px\", fontSize: 11 }}>\n Cancel\n </button>\n </>\n ) : (\n <>\n <span\n style={{\n color: \"#8f8fa4\",\n fontSize: 12,\n fontFamily: \"system-ui\",\n marginRight: 2,\n }}\n >\n {formatPrice(effectivePrice(cat))}\n </span>\n <button onClick={() => startEdit(cat)} style={{ ...btnSmall, padding: \"1px 6px\", fontSize: 11 }}>\n Edit\n </button>\n <button\n onClick={() => removeCategory(cat.id)}\n style={{ ...btnSmall, padding: \"1px 6px\", fontSize: 11 }}\n disabled={venue.categories.length <= 1}\n title={venue.categories.length <= 1 ? \"At least one category is required\" : \"Delete category\"}\n >\n ✕\n </button>\n </>\n )}\n </div>\n );\n })}\n\n <div style={{ display: \"flex\", gap: 6, marginTop: 10, alignItems: \"center\" }}>\n <input\n type=\"color\"\n value={newColor}\n onChange={(e) => setNewColor(e.target.value)}\n style={{ width: 28, height: 28, border: \"none\", padding: 0, cursor: \"pointer\" }}\n />\n <input\n placeholder=\"Category name\"\n value={newName}\n onChange={(e) => setNewName(e.target.value)}\n onKeyDown={(e) => e.key === \"Enter\" && addCategory()}\n style={{\n flex: 1,\n padding: \"4px 8px\",\n background: \"#2a2a4a\",\n border: \"1px solid #3a3a5a\",\n borderRadius: 4,\n color: \"#e0e0e0\",\n fontSize: 13,\n fontFamily: \"system-ui\",\n }}\n />\n <button onClick={addCategory} style={btnSmall}>\n Add\n </button>\n </div>\n\n <div style={{ display: \"flex\", justifyContent: \"flex-end\", marginTop: 10 }}>\n <button onClick={openPriceManager} style={btnSmall}>\n Manage Prices\n </button>\n </div>\n\n {isPriceManagerOpen && (\n <div\n style={{\n position: \"fixed\",\n inset: 0,\n background: \"rgba(8, 8, 18, 0.65)\",\n zIndex: 1000,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: 16,\n }}\n onClick={() => setIsPriceManagerOpen(false)}\n >\n <div\n style={{\n width: \"min(860px, 95vw)\",\n maxHeight: \"80vh\",\n overflow: \"auto\",\n background: \"#17172b\",\n border: \"1px solid #3a3a5a\",\n borderRadius: 10,\n padding: 16,\n }}\n onClick={(event) => event.stopPropagation()}\n >\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\", marginBottom: 12 }}>\n <div style={{ color: \"#e0e0e0\", fontSize: 15, fontFamily: \"system-ui\", fontWeight: 600 }}>\n Category Pricing\n </div>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n <button\n onClick={syncPricesFromBackend}\n disabled={!fetchCategoryPrices || isFetchingPrices}\n style={{\n ...btnSmall,\n opacity: !fetchCategoryPrices || isFetchingPrices ? 0.6 : 1,\n cursor: !fetchCategoryPrices || isFetchingPrices ? \"not-allowed\" : \"pointer\",\n }}\n title={fetchCategoryPrices ? \"Fetch latest category prices from backend\" : \"No backend price fetch configured\"}\n >\n {isFetchingPrices ? \"Syncing...\" : \"Sync from Backend\"}\n </button>\n <button onClick={() => setIsPriceManagerOpen(false)} style={btnSmall}>\n Close\n </button>\n </div>\n </div>\n\n <div style={{ color: \"#9e9eb4\", fontSize: 12, fontFamily: \"system-ui\", marginBottom: 10 }}>\n Backend prices are read-only data. Override lets you temporarily use an overriden category price in this schema.\n </div>\n <div\n style={{\n marginBottom: 10,\n color:\n syncStatus === \"synced\"\n ? \"#8fd3a6\"\n : syncStatus === \"failed\"\n ? \"#ff9a9a\"\n : \"#b8b8cc\",\n fontSize: 12,\n fontFamily: \"system-ui\",\n }}\n >\n Sync status:{\" \"}\n {syncStatus === \"not-synced\"\n ? \"Not synced\"\n : syncStatus === \"syncing\"\n ? \"Syncing...\"\n : syncStatus === \"synced\"\n ? \"Synced\"\n : \"Failed\"}\n </div>\n {fetchError && (\n <div style={{ marginBottom: 10, color: \"#ff9a9a\", fontSize: 12, fontFamily: \"system-ui\" }}>\n {fetchError}\n </div>\n )}\n\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: \"minmax(160px, 1.6fr) minmax(92px, 0.9fr) minmax(88px, 0.8fr) minmax(188px, 1.4fr) minmax(96px, 0.9fr)\",\n gap: 8,\n }}\n >\n <div style={{ color: \"#9e9eb4\", fontSize: 11, fontFamily: \"system-ui\" }}>Category</div>\n <div style={{ color: \"#9e9eb4\", fontSize: 11, fontFamily: \"system-ui\" }}>Backend</div>\n <div style={{ color: \"#9e9eb4\", fontSize: 11, fontFamily: \"system-ui\" }}>Override</div>\n <div style={{ color: \"#9e9eb4\", fontSize: 11, fontFamily: \"system-ui\" }}>Override Price</div>\n <div style={{ color: \"#9e9eb4\", fontSize: 11, fontFamily: \"system-ui\" }}>Effective Price</div>\n\n {venue.categories.map((category) => (\n <div\n key={category.id}\n style={{\n gridColumn: \"1 / -1\",\n display: \"grid\",\n gridTemplateColumns: \"minmax(160px, 1.6fr) minmax(92px, 0.9fr) minmax(88px, 0.8fr) minmax(188px, 1.4fr) minmax(96px, 0.9fr)\",\n gap: 8,\n alignItems: \"center\",\n padding: \"8px 10px\",\n borderRadius: 6,\n background: \"#222242\",\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8, minWidth: 0 }}>\n <span\n style={{\n width: 10,\n height: 10,\n borderRadius: 2,\n background: category.color,\n flexShrink: 0,\n }}\n />\n <span style={{ color: \"#e0e0e0\", fontSize: 13, fontFamily: \"system-ui\" }}>{category.name}</span>\n </div>\n <span style={{ color: \"#c7c7df\", fontSize: 12, fontFamily: \"system-ui\" }}>\n {formatPrice(category.backendPrice)}\n </span>\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={Boolean(category.isPriceOverridden)}\n onClick={() => toggleOverride(category.id, !category.isPriceOverridden)}\n style={{\n ...switchTrackBase,\n background: category.isPriceOverridden ? \"#2d6a3d\" : \"#2a2a4a\",\n borderColor: category.isPriceOverridden ? \"#57b26f\" : \"#4a4a6a\",\n cursor: \"pointer\",\n }}\n title={category.isPriceOverridden ? \"Disable override\" : \"Enable override\"}\n >\n <span\n style={{\n ...switchThumbBase,\n transform: category.isPriceOverridden ? \"translateX(14px)\" : \"translateX(0)\",\n }}\n />\n </button>\n <div style={{ position: \"relative\", width: \"100%\", minWidth: 0, maxWidth: \"100%\", overflow: \"hidden\" }}>\n <input\n type=\"text\"\n inputMode=\"decimal\"\n value={overridePriceDrafts[category.id] ?? \"\"}\n disabled={!category.isPriceOverridden}\n onChange={(event) =>\n setOverridePriceDrafts((current) => ({ ...current, [category.id]: event.target.value }))\n }\n onKeyDown={(event) => {\n if (event.key === \"Enter\") {\n commitOverridePrice(category.id);\n }\n if (event.key === \"Escape\") {\n resetOverrideDraft(category);\n }\n }}\n style={{\n padding: \"4px 92px 4px 8px\",\n background: category.isPriceOverridden ? \"#2a2a4a\" : \"#2a2a4a88\",\n border: \"1px solid #3a3a5a\",\n borderRadius: 4,\n color: category.isPriceOverridden ? \"#e0e0e0\" : \"#8f8fa4\",\n fontSize: 12,\n fontFamily: \"system-ui\",\n width: \"100%\",\n maxWidth: \"100%\",\n boxSizing: \"border-box\",\n MozAppearance: \"textfield\",\n }}\n />\n {category.isPriceOverridden && (\n <div\n style={{\n position: \"absolute\",\n right: 3,\n top: \"50%\",\n transform: \"translateY(-50%)\",\n display: \"inline-flex\",\n gap: 2,\n }}\n >\n <button\n type=\"button\"\n onClick={() => adjustOverrideDraft(category.id, 0.01)}\n style={{\n width: 20,\n height: 20,\n borderRadius: 4,\n border: \"1px solid #4a4a6a\",\n background: \"#2a2a4a\",\n color: \"#d8d8ee\",\n fontSize: 12,\n lineHeight: 1,\n padding: 0,\n cursor: \"pointer\",\n }}\n title=\"Increase override price\"\n >\n +\n </button>\n <button\n type=\"button\"\n onClick={() => adjustOverrideDraft(category.id, -0.01)}\n style={{\n width: 20,\n height: 20,\n borderRadius: 4,\n border: \"1px solid #4a4a6a\",\n background: \"#2a2a4a\",\n color: \"#d8d8ee\",\n fontSize: 12,\n lineHeight: 1,\n padding: 0,\n cursor: \"pointer\",\n }}\n title=\"Decrease override price\"\n >\n -\n </button>\n <button\n type=\"button\"\n onClick={() => commitOverridePrice(category.id)}\n disabled={!isDraftChanged(category)}\n style={{\n width: 20,\n height: 20,\n borderRadius: 4,\n border: \"1px solid #2f7b44\",\n background: isDraftChanged(category) ? \"#2d6a3d\" : \"#244832\",\n color: \"#d8ffe4\",\n fontSize: 11,\n lineHeight: 1,\n padding: 0,\n opacity: isDraftChanged(category) ? 1 : 0.55,\n cursor: isDraftChanged(category) ? \"pointer\" : \"not-allowed\",\n }}\n title=\"Apply override price\"\n >\n ✓\n </button>\n <button\n type=\"button\"\n onClick={() => resetOverrideDraft(category)}\n disabled={!isDraftChanged(category)}\n style={{\n width: 20,\n height: 20,\n borderRadius: 4,\n border: \"1px solid #8b3f4d\",\n background: isDraftChanged(category) ? \"#6f2c3b\" : \"#4d2730\",\n color: \"#ffd9df\",\n fontSize: 11,\n lineHeight: 1,\n padding: 0,\n opacity: isDraftChanged(category) ? 1 : 0.55,\n cursor: isDraftChanged(category) ? \"pointer\" : \"not-allowed\",\n }}\n title=\"Cancel override price changes\"\n >\n ✕\n </button>\n </div>\n )}\n </div>\n <span style={{ color: \"#e0e0e0\", fontSize: 12, fontFamily: \"system-ui\", fontWeight: 600, whiteSpace: \"nowrap\" }}>\n {formatPrice(effectivePrice(category))}\n </span>\n </div>\n ))}\n </div>\n </div>\n </div>\n )}\n </div>\n );\n}\n","import type { CSSProperties } from \"react\";\nimport type { Venue, Section } from \"@nex125/seatmap-core\";\n\nexport interface LayerPanelProps {\n venue: Venue | null;\n selectedSeatIds: Set<string>;\n selectedSectionIds: Set<string>;\n onSelectSection: (sectionId: string, options?: { multi?: boolean }) => void;\n style?: CSSProperties;\n}\n\nexport function LayerPanel({\n venue,\n selectedSeatIds,\n selectedSectionIds: storeSelectedSectionIds,\n onSelectSection,\n style,\n}: LayerPanelProps) {\n if (!venue) return null;\n\n const findSectionForSeat = (seatId: string): string | null => {\n for (const section of venue.sections) {\n for (const row of section.rows) {\n if (row.seats.some((s) => s.id === seatId)) return section.id;\n }\n }\n return null;\n };\n\n const selectedSectionIdFromSeats = selectedSeatIds.size > 0\n ? findSectionForSeat([...selectedSeatIds][0]!)\n : null;\n\n return (\n <div style={{ padding: 16, ...style }}>\n <div style={{ fontWeight: 600, color: \"#e0e0e0\", fontSize: 14, fontFamily: \"system-ui\", marginBottom: 12 }}>\n Layers\n </div>\n\n {venue.sections.map((section: Section) => {\n const seatCount = section.rows.reduce((t, r) => t + r.seats.length, 0);\n const isActive = storeSelectedSectionIds.has(section.id) || section.id === selectedSectionIdFromSeats;\n const catColor = venue.categories.find((c) => c.id === section.categoryId)?.color ?? \"#666\";\n\n return (\n <div\n key={section.id}\n onClick={(event) =>\n onSelectSection(section.id, {\n multi: event.ctrlKey || event.metaKey,\n })\n }\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n padding: \"6px 8px\",\n borderRadius: 4,\n marginBottom: 2,\n cursor: \"pointer\",\n background: isActive ? \"#3a3a5a\" : \"transparent\",\n }}\n >\n <div\n style={{\n width: 10,\n height: 10,\n borderRadius: 2,\n background: catColor,\n flexShrink: 0,\n }}\n />\n <div style={{ flex: 1, minWidth: 0 }}>\n <div\n style={{\n color: \"#e0e0e0\",\n fontSize: 13,\n fontFamily: \"system-ui\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n }}\n >\n {section.label}\n </div>\n <div style={{ color: \"#9e9e9e\", fontSize: 11, fontFamily: \"system-ui\" }}>\n {section.rows.length} rows, {seatCount} seats\n </div>\n </div>\n </div>\n );\n })}\n\n {venue.sections.length === 0 && (\n <div style={{ color: \"#9e9e9e\", fontSize: 13, fontFamily: \"system-ui\" }}>\n No sections yet. Use the Add Section tool.\n </div>\n )}\n </div>\n );\n}\n","import { useMemo, useState, type CSSProperties } from \"react\";\nimport type { Venue, CommandHistory, SeatStatusDefinition } from \"@nex125/seatmap-core\";\nimport { AVAILABLE_STATUS_ID, generateId } from \"@nex125/seatmap-core\";\nimport type { SeatmapStore } from \"@nex125/seatmap-react\";\n\nexport interface StatusManagerProps {\n venue: Venue | null;\n history: CommandHistory;\n store: SeatmapStore;\n style?: CSSProperties;\n}\n\nconst btnSmall: CSSProperties = {\n padding: \"3px 8px\",\n border: \"1px solid #3a3a5a\",\n borderRadius: 4,\n background: \"#2a2a4a\",\n color: \"#e0e0e0\",\n cursor: \"pointer\",\n fontSize: 12,\n fontFamily: \"system-ui\",\n};\n\nfunction sanitizeStatusId(name: string): string {\n const slug = name.trim().toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-+|-+$/g, \"\");\n return slug || generateId();\n}\n\nfunction replaceStatusInVenue(venue: Venue, statusId: string, replacementStatusId: string): Venue {\n return {\n ...venue,\n sections: venue.sections.map((section) => ({\n ...section,\n rows: section.rows.map((row) => ({\n ...row,\n seats: row.seats.map((seat) =>\n seat.status === statusId ? { ...seat, status: replacementStatusId } : seat,\n ),\n })),\n })),\n tables: venue.tables.map((table) => ({\n ...table,\n seats: table.seats.map((seat) =>\n seat.status === statusId ? { ...seat, status: replacementStatusId } : seat,\n ),\n })),\n };\n}\n\nexport function StatusManager({ venue, history, store, style }: StatusManagerProps) {\n const [newName, setNewName] = useState(\"\");\n const [newColor, setNewColor] = useState(\"#4caf50\");\n const [editingId, setEditingId] = useState<string | null>(null);\n const [editingName, setEditingName] = useState(\"\");\n const [editingColor, setEditingColor] = useState(\"#4caf50\");\n\n const statusIds = useMemo(() => new Set(venue?.seatStatuses.map((status) => status.id) ?? []), [venue]);\n\n if (!venue) return null;\n\n const addStatus = () => {\n const trimmedName = newName.trim();\n if (!trimmedName) return;\n\n let candidateId = sanitizeStatusId(trimmedName);\n while (statusIds.has(candidateId) || candidateId === \"selected\" || candidateId === \"hovered\") {\n candidateId = `${sanitizeStatusId(trimmedName)}-${generateId().slice(-4)}`;\n }\n\n const newStatus: SeatStatusDefinition = {\n id: candidateId,\n name: trimmedName,\n color: newColor,\n };\n\n history.execute({\n description: `Add status \"${newStatus.name}\"`,\n execute: () => {\n const current = store.getState().venue;\n if (!current) return;\n store.getState().setVenue({ ...current, seatStatuses: [...current.seatStatuses, newStatus] });\n },\n undo: () => {\n const current = store.getState().venue;\n if (!current) return;\n store.getState().setVenue({\n ...current,\n seatStatuses: current.seatStatuses.filter((status) => status.id !== newStatus.id),\n });\n },\n });\n\n setNewName(\"\");\n };\n\n const startEdit = (status: SeatStatusDefinition) => {\n setEditingId(status.id);\n setEditingName(status.name);\n setEditingColor(status.color);\n };\n\n const saveEdit = () => {\n if (!editingId) return;\n const trimmedName = editingName.trim();\n if (!trimmedName) return;\n\n history.execute({\n description: `Update status \"${trimmedName}\"`,\n execute: () => {\n const current = store.getState().venue;\n if (!current) return;\n store.getState().setVenue({\n ...current,\n seatStatuses: current.seatStatuses.map((status) =>\n status.id === editingId\n ? { ...status, name: trimmedName, color: editingColor }\n : status,\n ),\n });\n },\n undo: () => {\n const original = venue.seatStatuses.find((status) => status.id === editingId);\n const current = store.getState().venue;\n if (!current || !original) return;\n store.getState().setVenue({\n ...current,\n seatStatuses: current.seatStatuses.map((status) =>\n status.id === editingId ? original : status,\n ),\n });\n },\n });\n\n setEditingId(null);\n };\n\n const removeStatus = (statusId: string) => {\n if (statusId === AVAILABLE_STATUS_ID) return;\n const current = store.getState().venue;\n if (!current) return;\n const status = current.seatStatuses.find((s) => s.id === statusId);\n if (!status) return;\n\n const previousVenue = current;\n const nextVenue = replaceStatusInVenue(\n {\n ...previousVenue,\n seatStatuses: previousVenue.seatStatuses.filter((s) => s.id !== statusId),\n },\n statusId,\n AVAILABLE_STATUS_ID,\n );\n\n history.execute({\n description: `Remove status \"${status.name}\"`,\n execute: () => {\n store.getState().setVenue(nextVenue);\n },\n undo: () => {\n store.getState().setVenue(previousVenue);\n },\n });\n };\n\n return (\n <div style={{ padding: 16, ...style }}>\n <div style={{ fontWeight: 600, color: \"#e0e0e0\", fontSize: 14, fontFamily: \"system-ui\", marginBottom: 12 }}>\n Seat Statuses\n </div>\n\n {venue.seatStatuses.map((status) => {\n const isEditing = editingId === status.id;\n return (\n <div\n key={status.id}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n flexWrap: \"wrap\",\n marginBottom: 6,\n padding: \"4px 8px\",\n borderRadius: 4,\n background: \"#2a2a4a\",\n }}\n >\n <input\n type=\"color\"\n value={isEditing ? editingColor : status.color}\n onChange={(e) => isEditing && setEditingColor(e.target.value)}\n disabled={!isEditing}\n style={{ width: 18, height: 18, border: \"none\", padding: 0, cursor: isEditing ? \"pointer\" : \"default\" }}\n />\n {isEditing ? (\n <input\n value={editingName}\n onChange={(e) => setEditingName(e.target.value)}\n onKeyDown={(e) => e.key === \"Enter\" && saveEdit()}\n style={{\n flex: 1,\n minWidth: 0,\n padding: \"2px 6px\",\n background: \"#1f1f38\",\n border: \"1px solid #3a3a5a\",\n borderRadius: 4,\n color: \"#e0e0e0\",\n fontSize: 12,\n fontFamily: \"system-ui\",\n }}\n />\n ) : (\n <div style={{ flex: 1, color: \"#e0e0e0\", fontSize: 13, fontFamily: \"system-ui\" }}>\n {status.name}\n </div>\n )}\n {isEditing ? (\n <>\n <button onClick={saveEdit} style={{ ...btnSmall, padding: \"1px 6px\", fontSize: 11 }}>\n Save\n </button>\n <button onClick={() => setEditingId(null)} style={{ ...btnSmall, padding: \"1px 6px\", fontSize: 11 }}>\n Cancel\n </button>\n </>\n ) : (\n <>\n <button onClick={() => startEdit(status)} style={{ ...btnSmall, padding: \"1px 6px\", fontSize: 11 }}>\n Edit\n </button>\n <button\n onClick={() => removeStatus(status.id)}\n style={{ ...btnSmall, padding: \"1px 6px\", fontSize: 11 }}\n disabled={status.id === AVAILABLE_STATUS_ID}\n title={status.id === AVAILABLE_STATUS_ID ? \"Available status cannot be removed\" : \"Delete status\"}\n >\n ✕\n </button>\n </>\n )}\n </div>\n );\n })}\n\n <div style={{ display: \"flex\", gap: 6, marginTop: 10, alignItems: \"center\" }}>\n <input\n type=\"color\"\n value={newColor}\n onChange={(e) => setNewColor(e.target.value)}\n style={{ width: 28, height: 28, border: \"none\", padding: 0, cursor: \"pointer\" }}\n />\n <input\n placeholder=\"Status name\"\n value={newName}\n onChange={(e) => setNewName(e.target.value)}\n onKeyDown={(e) => e.key === \"Enter\" && addStatus()}\n style={{\n flex: 1,\n padding: \"4px 8px\",\n background: \"#2a2a4a\",\n border: \"1px solid #3a3a5a\",\n borderRadius: 4,\n color: \"#e0e0e0\",\n fontSize: 13,\n fontFamily: \"system-ui\",\n }}\n />\n <button onClick={addStatus} style={btnSmall}>\n Add\n </button>\n </div>\n </div>\n );\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport type { Venue, Vec2 } from \"@nex125/seatmap-core\";\nimport { CommandHistory, venueAABB, serializeVenue, deserializeVenue, type Viewport } from \"@nex125/seatmap-core\";\nimport { SeatmapProvider, SeatmapCanvas, useSeatmapContext } from \"@nex125/seatmap-react\";\nimport { useStore } from \"zustand\";\nimport { PanTool } from \"./tools/PanTool\";\nimport { SelectTool } from \"./tools/SelectTool\";\nimport { AddSectionTool, type SectionCreationMode } from \"./tools/AddSectionTool\";\nimport { AddRowTool } from \"./tools/AddRowTool\";\nimport { AddSeatTool } from \"./tools/AddSeatTool\";\nimport type { BaseTool, ToolPointerEvent } from \"./tools/BaseTool\";\nimport { Toolbar } from \"./panels/Toolbar\";\nimport { PropertyPanel } from \"./panels/PropertyPanel\";\nimport { CategoryManager } from \"./panels/CategoryManager\";\nimport { LayerPanel } from \"./panels/LayerPanel\";\nimport { StatusManager } from \"./panels/StatusManager\";\n\nexport interface SeatmapEditorProps {\n venue?: Venue;\n onChange?: (venue: Venue) => void;\n onSave?: (venue: Venue, serializedVenue: string) => void;\n fetchCategoryPrices?: (categoryIds: string[]) => Promise<Record<string, number>>;\n className?: string;\n}\n\nfunction fitBackgroundToBounds(\n boundsWidth: number,\n boundsHeight: number,\n imageWidth: number,\n imageHeight: number,\n) {\n const safeImageWidth = Math.max(1, imageWidth);\n const safeImageHeight = Math.max(1, imageHeight);\n const scale = Math.min(boundsWidth / safeImageWidth, boundsHeight / safeImageHeight);\n return {\n width: Math.max(1, safeImageWidth * scale),\n height: Math.max(1, safeImageHeight * scale),\n aspectRatio: safeImageWidth / safeImageHeight,\n };\n}\n\nfunction getBackgroundRectInWorld(venue: Venue) {\n const width = Math.max(1, venue.backgroundImageWidth ?? venue.bounds.width);\n const height = Math.max(1, venue.backgroundImageHeight ?? venue.bounds.height);\n const centeredX = (venue.bounds.width - width) / 2;\n const centeredY = (venue.bounds.height - height) / 2;\n return {\n x: venue.backgroundImageX ?? centeredX,\n y: venue.backgroundImageY ?? centeredY,\n width,\n height,\n };\n}\n\ntype ResizeHandle = \"nw\" | \"n\" | \"ne\" | \"e\" | \"se\" | \"s\" | \"sw\" | \"w\";\ntype CanvasGridStyle = \"solid\" | \"dashed\" | \"dotted\";\ntype SectionGridStyle = \"dots\" | \"cross\";\n\nfunction PolygonPreviewOverlay({\n points,\n closeable,\n mode,\n viewport,\n}: {\n points: Array<{ x: number; y: number }>;\n closeable: boolean;\n mode: SectionCreationMode;\n viewport: Viewport;\n}) {\n if (points.length === 0) return null;\n\n const screenPoints = points.map((p) => viewport.worldToScreen(p.x, p.y));\n const svgPoints = screenPoints.map((p) => `${p.x},${p.y}`).join(\" \");\n const first = screenPoints[0];\n const last = screenPoints[screenPoints.length - 1];\n\n return (\n <svg\n style={{\n position: \"absolute\",\n inset: 0,\n width: \"100%\",\n height: \"100%\",\n pointerEvents: \"none\",\n zIndex: 10,\n }}\n >\n {screenPoints.length >= 2 && (\n <polyline\n points={svgPoints}\n fill=\"rgba(100, 180, 255, 0.1)\"\n stroke=\"rgba(100, 180, 255, 0.8)\"\n strokeWidth={2}\n strokeDasharray=\"6 4\"\n />\n )}\n {mode === \"polygon\" && screenPoints.length >= 3 && (\n <line\n x1={last.x} y1={last.y} x2={first.x} y2={first.y}\n stroke={closeable ? \"rgba(100, 255, 100, 0.8)\" : \"rgba(100, 180, 255, 0.3)\"}\n strokeWidth={closeable ? 2 : 1}\n strokeDasharray=\"4 4\"\n />\n )}\n {mode === \"polygon\" && screenPoints.map((p, i) => (\n <circle\n key={i}\n cx={p.x}\n cy={p.y}\n r={i === 0 && closeable ? 8 : 4}\n fill={i === 0 && closeable ? \"rgba(100, 255, 100, 0.8)\" : \"rgba(100, 180, 255, 0.8)\"}\n />\n ))}\n {mode === \"polygon\" && points.length >= 2 && (\n <text\n x={(first.x + last.x) / 2}\n y={(first.y + last.y) / 2 - 10}\n fill=\"#e0e0e0\"\n fontSize={12}\n fontFamily=\"system-ui\"\n textAnchor=\"middle\"\n >\n {points.length} points {closeable ? \"(click first point to close)\" : \"\"}\n </text>\n )}\n </svg>\n );\n}\n\nfunction DragPreviewOverlay({\n sectionOutlines,\n seatPoints,\n viewport,\n}: {\n sectionOutlines: Array<Array<{ x: number; y: number }>>;\n seatPoints: Array<{ x: number; y: number }>;\n viewport: Viewport;\n}) {\n if (sectionOutlines.length === 0 && seatPoints.length === 0) return null;\n\n const sectionScreenOutlines = sectionOutlines.map((outline) =>\n outline.map((p) => viewport.worldToScreen(p.x, p.y)),\n );\n const seatScreenPoints = seatPoints.map((p) => viewport.worldToScreen(p.x, p.y));\n\n return (\n <svg\n style={{\n position: \"absolute\",\n inset: 0,\n width: \"100%\",\n height: \"100%\",\n pointerEvents: \"none\",\n zIndex: 14,\n }}\n >\n {sectionScreenOutlines\n .filter((outline) => outline.length >= 3)\n .map((outline, i) => (\n <polygon\n key={i}\n points={outline.map((p) => `${p.x},${p.y}`).join(\" \")}\n fill=\"rgba(110, 190, 255, 0.16)\"\n stroke=\"rgba(110, 190, 255, 0.95)\"\n strokeWidth={2}\n strokeDasharray=\"8 6\"\n />\n ))}\n {seatScreenPoints.map((p, i) => (\n <circle\n key={i}\n cx={p.x}\n cy={p.y}\n r={5}\n fill=\"rgba(110, 190, 255, 0.35)\"\n stroke=\"rgba(110, 190, 255, 0.95)\"\n strokeWidth={1.5}\n />\n ))}\n </svg>\n );\n}\n\nfunction EditorInner({\n onChange,\n onSave,\n fetchCategoryPrices,\n}: {\n onChange?: (venue: Venue) => void;\n onSave?: (venue: Venue, serializedVenue: string) => void;\n fetchCategoryPrices?: (categoryIds: string[]) => Promise<Record<string, number>>;\n}) {\n const { store, viewport, spatialIndex } = useSeatmapContext();\n const venue = useStore(store, (s) => s.venue);\n const selectedSeatIds = useStore(store, (s) => s.selectedSeatIds);\n const selectedSectionIds = useStore(store, (s) => s.selectedSectionIds);\n const selectedSectionId = useStore(store, (s) => s.selectedSectionId);\n const [, setViewportVersion] = useState(0);\n const canvasAreaRef = useRef<HTMLDivElement | null>(null);\n const [isBackgroundResizing, setIsBackgroundResizing] = useState(false);\n const [isBackgroundMoving, setIsBackgroundMoving] = useState(false);\n const backgroundResizeHandleRef = useRef<ResizeHandle>(\"se\");\n const backgroundResizeAnchorRef = useRef<{ x: number; y: number } | null>(null);\n const backgroundMoveOffsetRef = useRef<{ x: number; y: number } | null>(null);\n\n const historyRef = useRef(new CommandHistory());\n const [canUndo, setCanUndo] = useState(false);\n const [canRedo, setCanRedo] = useState(false);\n\n const panTool = useMemo(() => new PanTool(), []);\n const selectTool = useMemo(() => new SelectTool(spatialIndex, historyRef.current), [spatialIndex]);\n const [polygonPoints, setPolygonPoints] = useState<Array<{ x: number; y: number }>>([]);\n const [polygonCloseable, setPolygonCloseable] = useState(false);\n\n const addSectionTool = useMemo(\n () => {\n const tool = new AddSectionTool(historyRef.current);\n const v = store.getState().venue;\n if (v && v.categories.length > 0) tool.setCategoryId(v.categories[0].id);\n tool.onPointsChange = (pts, closeable) => {\n setPolygonPoints([...pts]);\n setPolygonCloseable(closeable);\n };\n return tool;\n },\n [],\n );\n const addRowTool = useMemo(\n () => new AddRowTool(historyRef.current, spatialIndex),\n [spatialIndex],\n );\n const addSeatTool = useMemo(\n () => new AddSeatTool(historyRef.current, spatialIndex),\n [spatialIndex],\n );\n\n const toolMap = useMemo<Record<string, BaseTool>>(\n () => ({\n pan: panTool,\n select: selectTool,\n \"add-section\": addSectionTool,\n \"add-row\": addRowTool,\n \"add-seat\": addSeatTool,\n }),\n [panTool, selectTool, addSectionTool, addRowTool, addSeatTool],\n );\n\n const [activeToolName, setActiveToolName] = useState(\"pan\");\n const activeToolRef = useRef<BaseTool>(panTool);\n const lastNonPanToolNameRef = useRef<string>(\"select\");\n const sectionResizeReturnToAddSectionRef = useRef(false);\n const [, setDragPreviewVersion] = useState(0);\n\n const [sectionMode, setSectionMode] = useState<SectionCreationMode>(\"rectangle\");\n const [sectionResizeEnabled, setSectionResizeEnabled] = useState(false);\n const [gridEnabled, setGridEnabled] = useState(false);\n const [isGridOptionsOpen, setIsGridOptionsOpen] = useState(false);\n const [showCanvasGrid, setShowCanvasGrid] = useState(false);\n const [canvasGridStyle, setCanvasGridStyle] = useState<CanvasGridStyle>(\"solid\");\n const [showSectionGrid, setShowSectionGrid] = useState(true);\n const [sectionGridStyle, setSectionGridStyle] = useState<SectionGridStyle>(\"dots\");\n const [seatsPerRow, setSeatsPerRow] = useState(10);\n const [rowsCount, setRowsCount] = useState(1);\n const [rowOrientationDeg, setRowOrientationDeg] = useState(0);\n const [rowPreviewPoint, setRowPreviewPoint] = useState<Vec2 | null>(null);\n const handleSeatsPerRowChange = useCallback(\n (n: number) => {\n setSeatsPerRow(n);\n addRowTool.seatsPerRow = n;\n },\n [addRowTool],\n );\n const handleRowsCountChange = useCallback(\n (n: number) => {\n const clamped = Math.max(1, Math.min(100, n));\n setRowsCount(clamped);\n addRowTool.rowsCount = clamped;\n },\n [addRowTool],\n );\n const handleRowOrientationChange = useCallback(\n (deg: number) => {\n const normalized = ((Math.round(deg) % 360) + 360) % 360;\n setRowOrientationDeg(normalized);\n addRowTool.rowOrientationDeg = normalized;\n },\n [addRowTool],\n );\n const handleRotateRowOrientationQuarterTurn = useCallback(\n () => {\n handleRowOrientationChange(rowOrientationDeg + 90);\n },\n [handleRowOrientationChange, rowOrientationDeg],\n );\n const handleSectionModeChange = useCallback(\n (mode: SectionCreationMode) => {\n setSectionMode(mode);\n },\n [],\n );\n\n useEffect(() => {\n addSectionTool.setMode(sectionMode);\n }, [addSectionTool, sectionMode]);\n\n useEffect(() => {\n selectTool.setSectionResizeEnabled(sectionResizeEnabled);\n }, [selectTool, sectionResizeEnabled]);\n\n useEffect(() => {\n if (activeToolName !== \"add-row\") {\n setRowPreviewPoint(null);\n }\n }, [activeToolName]);\n\n const setActiveTool = useCallback(\n (name: string) => {\n if (name !== \"pan\") {\n lastNonPanToolNameRef.current = name;\n }\n activeToolRef.current.onDeactivate();\n const tool = toolMap[name] ?? selectTool;\n tool.onActivate(viewport, store);\n activeToolRef.current = tool;\n setActiveToolName(name);\n },\n [toolMap, selectTool, viewport, store],\n );\n const handleToggleSectionResize = useCallback(\n (fromAddSection = false) => {\n if (!sectionResizeEnabled) {\n sectionResizeReturnToAddSectionRef.current = fromAddSection;\n setSectionResizeEnabled(true);\n setActiveTool(\"select\");\n return;\n }\n setSectionResizeEnabled(false);\n const shouldReturnToAddSection = sectionResizeReturnToAddSectionRef.current;\n sectionResizeReturnToAddSectionRef.current = false;\n if (shouldReturnToAddSection) {\n setActiveTool(\"add-section\");\n }\n },\n [sectionResizeEnabled, setActiveTool],\n );\n\n useEffect(() => {\n const unsub = historyRef.current.subscribe(() => {\n setCanUndo(historyRef.current.canUndo);\n setCanRedo(historyRef.current.canRedo);\n });\n return unsub;\n }, []);\n\n useEffect(() => {\n if (venue) {\n spatialIndex.buildFromSections(venue.sections);\n }\n }, [venue, spatialIndex]);\n\n useEffect(() => {\n const unsub = viewport.subscribe(() => {\n setViewportVersion((v) => v + 1);\n });\n return unsub;\n }, [viewport]);\n\n const handleSave = useCallback(() => {\n const v = store.getState().venue;\n if (!v) return;\n const json = serializeVenue(v);\n onChange?.(v);\n if (onSave) {\n onSave(v, json);\n return;\n }\n console.log(v);\n }, [store, onChange, onSave]);\n\n const handleLoad = useCallback(() => {\n const input = document.createElement(\"input\");\n input.type = \"file\";\n input.accept = \".json\";\n input.onchange = () => {\n const file = input.files?.[0];\n if (!file) return;\n const reader = new FileReader();\n reader.onload = () => {\n try {\n const loaded = deserializeVenue(reader.result as string);\n store.getState().setVenue(loaded);\n spatialIndex.buildFromSections(loaded.sections);\n viewport.fitBounds(venueAABB(loaded));\n historyRef.current.clear();\n } catch {\n alert(\"Invalid venue JSON file\");\n }\n };\n reader.readAsText(file);\n };\n input.click();\n }, [store, spatialIndex, viewport]);\n\n const handleFitView = useCallback(() => {\n if (!venue) return;\n viewport.fitBounds(venueAABB(venue));\n }, [venue, viewport]);\n\n const handleUploadBackground = useCallback(() => {\n const input = document.createElement(\"input\");\n input.type = \"file\";\n input.accept = \"image/*\";\n input.onchange = () => {\n const file = input.files?.[0];\n if (!file) return;\n const reader = new FileReader();\n reader.onload = () => {\n const v = store.getState().venue;\n if (!v) return;\n const dataUrl = reader.result as string;\n const image = new Image();\n image.onload = () => {\n const currentVenue = store.getState().venue;\n if (!currentVenue) return;\n const fitted = fitBackgroundToBounds(\n currentVenue.bounds.width,\n currentVenue.bounds.height,\n image.naturalWidth,\n image.naturalHeight,\n );\n store.getState().setVenue({\n ...currentVenue,\n backgroundImage: dataUrl,\n backgroundImageOpacity: currentVenue.backgroundImageOpacity ?? 0.5,\n backgroundImageWidth: fitted.width,\n backgroundImageHeight: fitted.height,\n backgroundImageX: (currentVenue.bounds.width - fitted.width) / 2,\n backgroundImageY: (currentVenue.bounds.height - fitted.height) / 2,\n backgroundImageAspectRatio: fitted.aspectRatio,\n backgroundImageKeepAspectRatio: currentVenue.backgroundImageKeepAspectRatio ?? true,\n });\n };\n image.onerror = () => {\n const currentVenue = store.getState().venue;\n if (!currentVenue) return;\n store.getState().setVenue({\n ...currentVenue,\n backgroundImage: dataUrl,\n backgroundImageOpacity: currentVenue.backgroundImageOpacity ?? 0.5,\n });\n };\n image.src = dataUrl;\n };\n reader.readAsDataURL(file);\n };\n input.click();\n }, [store]);\n\n const handleRemoveBackground = useCallback(() => {\n const v = store.getState().venue;\n if (!v) return;\n store.getState().setVenue({\n ...v,\n backgroundImage: undefined,\n backgroundImageOpacity: undefined,\n backgroundImageWidth: undefined,\n backgroundImageHeight: undefined,\n backgroundImageX: undefined,\n backgroundImageY: undefined,\n backgroundImageAspectRatio: undefined,\n backgroundImageKeepAspectRatio: undefined,\n });\n }, [store]);\n\n const handleBackgroundOpacityChange = useCallback(\n (opacity: number) => {\n const v = store.getState().venue;\n if (!v) return;\n store.getState().setVenue({ ...v, backgroundImageOpacity: opacity });\n },\n [store],\n );\n\n const handleBackgroundSizeChange = useCallback(\n ({ width, height }: { width?: number; height?: number }) => {\n const v = store.getState().venue;\n if (!v || !v.backgroundImage) return;\n const currentRect = getBackgroundRectInWorld(v);\n const centerX = currentRect.x + currentRect.width / 2;\n const centerY = currentRect.y + currentRect.height / 2;\n\n const currentWidth = Math.max(1, v.backgroundImageWidth ?? v.bounds.width);\n const currentHeight = Math.max(1, v.backgroundImageHeight ?? v.bounds.height);\n const keepAspectRatio = v.backgroundImageKeepAspectRatio ?? true;\n const aspectRatio = v.backgroundImageAspectRatio ?? (currentWidth / currentHeight);\n\n let nextWidth = width ?? currentWidth;\n let nextHeight = height ?? currentHeight;\n\n if (keepAspectRatio) {\n const safeAspectRatio = aspectRatio > 0 ? aspectRatio : (currentWidth / currentHeight);\n if (width !== undefined && height === undefined) {\n nextHeight = nextWidth / safeAspectRatio;\n } else if (height !== undefined && width === undefined) {\n nextWidth = nextHeight * safeAspectRatio;\n } else if (width !== undefined && height !== undefined) {\n const widthFromHeight = nextHeight * safeAspectRatio;\n const heightFromWidth = nextWidth / safeAspectRatio;\n if (widthFromHeight >= nextWidth) {\n nextWidth = widthFromHeight;\n } else {\n nextHeight = heightFromWidth;\n }\n }\n }\n\n nextWidth = Math.max(1, Math.round(nextWidth));\n nextHeight = Math.max(1, Math.round(nextHeight));\n\n store.getState().setVenue({\n ...v,\n backgroundImageWidth: nextWidth,\n backgroundImageHeight: nextHeight,\n backgroundImageX: centerX - nextWidth / 2,\n backgroundImageY: centerY - nextHeight / 2,\n });\n },\n [store],\n );\n\n const handleBackgroundKeepAspectRatioChange = useCallback(\n (keepAspectRatio: boolean) => {\n const v = store.getState().venue;\n if (!v || !v.backgroundImage) return;\n const currentWidth = Math.max(1, v.backgroundImageWidth ?? v.bounds.width);\n const currentHeight = Math.max(1, v.backgroundImageHeight ?? v.bounds.height);\n const originalAspectRatio = v.backgroundImageAspectRatio ?? (currentWidth / currentHeight);\n const safeAspectRatio = originalAspectRatio > 0 ? originalAspectRatio : (currentWidth / currentHeight);\n store.getState().setVenue({\n ...v,\n backgroundImageKeepAspectRatio: keepAspectRatio,\n backgroundImageWidth: keepAspectRatio ? currentWidth : v.backgroundImageWidth,\n backgroundImageHeight: keepAspectRatio ? Math.max(1, Math.round(currentWidth / safeAspectRatio)) : v.backgroundImageHeight,\n });\n },\n [store],\n );\n\n useEffect(() => {\n if (!venue?.backgroundImage) return;\n\n const needsAspectData =\n venue.backgroundImageWidth === undefined ||\n venue.backgroundImageHeight === undefined ||\n venue.backgroundImageAspectRatio === undefined;\n const needsKeepAspectFlag = venue.backgroundImageKeepAspectRatio === undefined;\n const needsPositionData = venue.backgroundImageX === undefined || venue.backgroundImageY === undefined;\n if (!needsAspectData && !needsKeepAspectFlag && !needsPositionData) return;\n\n let cancelled = false;\n const image = new Image();\n image.onload = () => {\n if (cancelled) return;\n const currentVenue = store.getState().venue;\n if (!currentVenue?.backgroundImage) return;\n\n const fitted = fitBackgroundToBounds(\n currentVenue.bounds.width,\n currentVenue.bounds.height,\n image.naturalWidth,\n image.naturalHeight,\n );\n const nextWidth = currentVenue.backgroundImageWidth ?? fitted.width;\n const nextHeight = currentVenue.backgroundImageHeight ?? fitted.height;\n const nextAspectRatio =\n currentVenue.backgroundImageAspectRatio ?? fitted.aspectRatio;\n const nextKeepAspectRatio = currentVenue.backgroundImageKeepAspectRatio ?? true;\n const nextX = currentVenue.backgroundImageX ?? ((currentVenue.bounds.width - nextWidth) / 2);\n const nextY = currentVenue.backgroundImageY ?? ((currentVenue.bounds.height - nextHeight) / 2);\n\n store.getState().setVenue({\n ...currentVenue,\n backgroundImageWidth: nextWidth,\n backgroundImageHeight: nextHeight,\n backgroundImageX: nextX,\n backgroundImageY: nextY,\n backgroundImageAspectRatio: nextAspectRatio,\n backgroundImageKeepAspectRatio: nextKeepAspectRatio,\n });\n };\n image.onerror = () => {\n if (cancelled) return;\n const currentVenue = store.getState().venue;\n if (!currentVenue?.backgroundImage) return;\n const fallbackWidth = currentVenue.backgroundImageWidth ?? currentVenue.bounds.width;\n const fallbackHeight = currentVenue.backgroundImageHeight ?? currentVenue.bounds.height;\n store.getState().setVenue({\n ...currentVenue,\n backgroundImageX: currentVenue.backgroundImageX ?? ((currentVenue.bounds.width - fallbackWidth) / 2),\n backgroundImageY: currentVenue.backgroundImageY ?? ((currentVenue.bounds.height - fallbackHeight) / 2),\n backgroundImageKeepAspectRatio: currentVenue.backgroundImageKeepAspectRatio ?? true,\n });\n };\n image.src = venue.backgroundImage;\n\n return () => {\n cancelled = true;\n };\n }, [\n venue?.backgroundImage,\n venue?.backgroundImageWidth,\n venue?.backgroundImageHeight,\n venue?.backgroundImageX,\n venue?.backgroundImageY,\n venue?.backgroundImageAspectRatio,\n venue?.backgroundImageKeepAspectRatio,\n store,\n ]);\n\n useEffect(() => {\n if (!isBackgroundResizing) return;\n\n const onPointerMove = (e: PointerEvent) => {\n const currentVenue = store.getState().venue;\n const canvasArea = canvasAreaRef.current;\n if (!currentVenue?.backgroundImage || !canvasArea) return;\n const anchor = backgroundResizeAnchorRef.current;\n if (!anchor) return;\n\n const rect = canvasArea.getBoundingClientRect();\n const screenX = e.clientX - rect.left;\n const screenY = e.clientY - rect.top;\n const world = viewport.screenToWorld(screenX, screenY);\n const handle = backgroundResizeHandleRef.current;\n const keepAspectRatio = currentVenue.backgroundImageKeepAspectRatio ?? true;\n const originalAspectRatio =\n currentVenue.backgroundImageAspectRatio ??\n ((currentVenue.backgroundImageWidth ?? currentVenue.bounds.width) /\n (currentVenue.backgroundImageHeight ?? currentVenue.bounds.height));\n const safeAspectRatio = originalAspectRatio > 0 ? originalAspectRatio : 1;\n\n const isLeft = handle === \"nw\" || handle === \"w\" || handle === \"sw\";\n const isRight = handle === \"ne\" || handle === \"e\" || handle === \"se\";\n const isTop = handle === \"nw\" || handle === \"n\" || handle === \"ne\";\n const isBottom = handle === \"sw\" || handle === \"s\" || handle === \"se\";\n\n let nextWidth = Math.max(\n 1,\n isLeft ? (anchor.x - world.x) : isRight ? (world.x - anchor.x) : (currentVenue.backgroundImageWidth ?? currentVenue.bounds.width),\n );\n let nextHeight = Math.max(\n 1,\n isTop ? (anchor.y - world.y) : isBottom ? (world.y - anchor.y) : (currentVenue.backgroundImageHeight ?? currentVenue.bounds.height),\n );\n let nextX = isLeft ? (anchor.x - nextWidth) : isRight ? anchor.x : getBackgroundRectInWorld(currentVenue).x;\n let nextY = isTop ? (anchor.y - nextHeight) : isBottom ? anchor.y : getBackgroundRectInWorld(currentVenue).y;\n\n if (keepAspectRatio) {\n if (handle === \"w\" || handle === \"e\") {\n nextHeight = nextWidth / safeAspectRatio;\n nextY = anchor.y - nextHeight / 2;\n } else if (handle === \"n\" || handle === \"s\") {\n nextWidth = nextHeight * safeAspectRatio;\n nextX = anchor.x - nextWidth / 2;\n } else {\n const widthFromHeight = nextHeight * safeAspectRatio;\n const heightFromWidth = nextWidth / safeAspectRatio;\n if (widthFromHeight >= nextWidth) {\n nextWidth = widthFromHeight;\n } else {\n nextHeight = heightFromWidth;\n }\n nextX = isLeft ? (anchor.x - nextWidth) : anchor.x;\n nextY = isTop ? (anchor.y - nextHeight) : anchor.y;\n }\n }\n\n store.getState().setVenue({\n ...currentVenue,\n backgroundImageWidth: Math.max(1, Math.round(nextWidth)),\n backgroundImageHeight: Math.max(1, Math.round(nextHeight)),\n backgroundImageX: nextX,\n backgroundImageY: nextY,\n });\n };\n\n const onPointerUp = () => {\n backgroundResizeAnchorRef.current = null;\n setIsBackgroundResizing(false);\n };\n\n window.addEventListener(\"pointermove\", onPointerMove);\n window.addEventListener(\"pointerup\", onPointerUp);\n window.addEventListener(\"pointercancel\", onPointerUp);\n return () => {\n window.removeEventListener(\"pointermove\", onPointerMove);\n window.removeEventListener(\"pointerup\", onPointerUp);\n window.removeEventListener(\"pointercancel\", onPointerUp);\n };\n }, [isBackgroundResizing, store, viewport]);\n\n useEffect(() => {\n if (!isBackgroundMoving) return;\n\n const onPointerMove = (e: PointerEvent) => {\n const currentVenue = store.getState().venue;\n const canvasArea = canvasAreaRef.current;\n const offset = backgroundMoveOffsetRef.current;\n if (!currentVenue?.backgroundImage || !canvasArea || !offset) return;\n\n const rect = canvasArea.getBoundingClientRect();\n const screenX = e.clientX - rect.left;\n const screenY = e.clientY - rect.top;\n const world = viewport.screenToWorld(screenX, screenY);\n\n store.getState().setVenue({\n ...currentVenue,\n backgroundImageX: world.x - offset.x,\n backgroundImageY: world.y - offset.y,\n });\n };\n\n const onPointerUp = () => {\n backgroundMoveOffsetRef.current = null;\n setIsBackgroundMoving(false);\n };\n\n window.addEventListener(\"pointermove\", onPointerMove);\n window.addEventListener(\"pointerup\", onPointerUp);\n window.addEventListener(\"pointercancel\", onPointerUp);\n return () => {\n window.removeEventListener(\"pointermove\", onPointerMove);\n window.removeEventListener(\"pointerup\", onPointerUp);\n window.removeEventListener(\"pointercancel\", onPointerUp);\n };\n }, [isBackgroundMoving, store, viewport]);\n\n const renderBackgroundResizeOverlay = () => {\n if (!venue?.backgroundImage) return null;\n\n const rectWorld = getBackgroundRectInWorld(venue);\n const topLeft = viewport.worldToScreen(rectWorld.x, rectWorld.y);\n const topRight = viewport.worldToScreen(rectWorld.x + rectWorld.width, rectWorld.y);\n const bottomLeft = viewport.worldToScreen(rectWorld.x, rectWorld.y + rectWorld.height);\n const bottomRight = viewport.worldToScreen(rectWorld.x + rectWorld.width, rectWorld.y + rectWorld.height);\n\n const midTop = { x: (topLeft.x + topRight.x) / 2, y: (topLeft.y + topRight.y) / 2 };\n const midBottom = { x: (bottomLeft.x + bottomRight.x) / 2, y: (bottomLeft.y + bottomRight.y) / 2 };\n const midLeft = { x: (topLeft.x + bottomLeft.x) / 2, y: (topLeft.y + bottomLeft.y) / 2 };\n const midRight = { x: (topRight.x + bottomRight.x) / 2, y: (topRight.y + bottomRight.y) / 2 };\n\n const handles: Array<{\n left: number;\n top: number;\n cursor: React.CSSProperties[\"cursor\"];\n handle: ResizeHandle;\n }> = [\n { left: topLeft.x, top: topLeft.y, cursor: \"nwse-resize\", handle: \"nw\" },\n { left: topRight.x, top: topRight.y, cursor: \"nesw-resize\", handle: \"ne\" },\n { left: bottomLeft.x, top: bottomLeft.y, cursor: \"nesw-resize\", handle: \"sw\" },\n { left: bottomRight.x, top: bottomRight.y, cursor: \"nwse-resize\", handle: \"se\" },\n { left: midLeft.x, top: midLeft.y, cursor: \"ew-resize\", handle: \"w\" },\n { left: midRight.x, top: midRight.y, cursor: \"ew-resize\", handle: \"e\" },\n { left: midTop.x, top: midTop.y, cursor: \"ns-resize\", handle: \"n\" },\n { left: midBottom.x, top: midBottom.y, cursor: \"ns-resize\", handle: \"s\" },\n ];\n\n return (\n <div style={{ position: \"absolute\", inset: 0, pointerEvents: \"none\", zIndex: 15 }}>\n <div\n style={{\n position: \"absolute\",\n left: topLeft.x,\n top: topLeft.y,\n width: Math.max(1, topRight.x - topLeft.x),\n height: Math.max(1, bottomLeft.y - topLeft.y),\n border: \"1px dashed rgba(130, 190, 255, 0.9)\",\n boxShadow: \"0 0 0 1px rgba(30, 30, 50, 0.8) inset\",\n pointerEvents: \"auto\",\n cursor: isBackgroundMoving ? \"grabbing\" : \"grab\",\n }}\n onPointerDown={(e) => {\n if (e.button !== 0) return;\n e.preventDefault();\n e.stopPropagation();\n const currentVenue = store.getState().venue;\n const canvasArea = canvasAreaRef.current;\n if (!currentVenue?.backgroundImage || !canvasArea) return;\n const backgroundRect = getBackgroundRectInWorld(currentVenue);\n const canvasRect = canvasArea.getBoundingClientRect();\n const screenX = e.clientX - canvasRect.left;\n const screenY = e.clientY - canvasRect.top;\n const world = viewport.screenToWorld(screenX, screenY);\n backgroundMoveOffsetRef.current = {\n x: world.x - backgroundRect.x,\n y: world.y - backgroundRect.y,\n };\n setIsBackgroundMoving(true);\n }}\n />\n {handles.map((handle, i) => (\n <div\n key={i}\n style={{\n position: \"absolute\",\n left: handle.left - 5,\n top: handle.top - 5,\n width: 10,\n height: 10,\n borderRadius: 2,\n background: \"#82beff\",\n border: \"1px solid #1f2f5f\",\n cursor: handle.cursor,\n pointerEvents: \"auto\",\n }}\n onPointerDown={(e) => {\n if (e.button !== 0) return;\n e.preventDefault();\n e.stopPropagation();\n const currentVenue = store.getState().venue;\n if (!currentVenue?.backgroundImage) return;\n const backgroundRect = getBackgroundRectInWorld(currentVenue);\n const centerX = backgroundRect.x + backgroundRect.width / 2;\n const centerY = backgroundRect.y + backgroundRect.height / 2;\n let anchor = { x: backgroundRect.x, y: backgroundRect.y };\n if (handle.handle === \"nw\") anchor = { x: backgroundRect.x + backgroundRect.width, y: backgroundRect.y + backgroundRect.height };\n if (handle.handle === \"ne\") anchor = { x: backgroundRect.x, y: backgroundRect.y + backgroundRect.height };\n if (handle.handle === \"sw\") anchor = { x: backgroundRect.x + backgroundRect.width, y: backgroundRect.y };\n if (handle.handle === \"se\") anchor = { x: backgroundRect.x, y: backgroundRect.y };\n if (handle.handle === \"w\") anchor = { x: backgroundRect.x + backgroundRect.width, y: centerY };\n if (handle.handle === \"e\") anchor = { x: backgroundRect.x, y: centerY };\n if (handle.handle === \"n\") anchor = { x: centerX, y: backgroundRect.y + backgroundRect.height };\n if (handle.handle === \"s\") anchor = { x: centerX, y: backgroundRect.y };\n backgroundResizeHandleRef.current = handle.handle;\n backgroundResizeAnchorRef.current = anchor;\n setIsBackgroundResizing(true);\n }}\n />\n ))}\n </div>\n );\n };\n\n const renderSectionResizeOverlay = () => {\n if (activeToolName !== \"select\" || !sectionResizeEnabled || !venue) return null;\n const resizeOverlay = selectTool.getSectionResizeHandlesPreview(venue, selectedSeatIds, selectedSectionId);\n if (!resizeOverlay) return null;\n\n const corners = resizeOverlay.corners.map((p) => viewport.worldToScreen(p.x, p.y));\n const sideMidpoints = resizeOverlay.sideMidpoints.map((p) => viewport.worldToScreen(p.x, p.y));\n const outlinePoints = corners.map((p) => `${p.x},${p.y}`).join(\" \");\n const hint = resizeOverlay.mergeHint\n ? viewport.worldToScreen(resizeOverlay.mergeHint.position.x, resizeOverlay.mergeHint.position.y)\n : null;\n\n return (\n <svg\n style={{\n position: \"absolute\",\n inset: 0,\n width: \"100%\",\n height: \"100%\",\n pointerEvents: \"none\",\n zIndex: 16,\n }}\n >\n <polygon\n points={outlinePoints}\n fill=\"rgba(255, 193, 110, 0.08)\"\n stroke=\"rgba(255, 193, 110, 0.9)\"\n strokeWidth={1.5}\n strokeDasharray=\"7 4\"\n />\n {sideMidpoints.map((p, i) => (\n <rect\n key={`side-${i}`}\n x={p.x - 5}\n y={p.y - 5}\n width={10}\n height={10}\n rx={2}\n fill=\"rgba(255, 193, 110, 0.9)\"\n stroke=\"rgba(45, 36, 20, 0.95)\"\n strokeWidth={1}\n />\n ))}\n {corners.map((p, i) => (\n <circle\n key={`corner-${i}`}\n cx={p.x}\n cy={p.y}\n r={5}\n fill=\"#ffd38a\"\n stroke=\"rgba(45, 36, 20, 0.95)\"\n strokeWidth={1.2}\n />\n ))}\n {hint && (\n <>\n <rect\n x={hint.x - 88}\n y={hint.y - 32}\n width={176}\n height={20}\n rx={6}\n fill=\"rgba(15, 15, 25, 0.9)\"\n stroke=\"rgba(255, 193, 110, 0.65)\"\n strokeWidth={1}\n />\n <text\n x={hint.x}\n y={hint.y - 18}\n fill=\"#ffd38a\"\n fontSize={11}\n fontFamily=\"system-ui\"\n textAnchor=\"middle\"\n >\n {resizeOverlay.mergeHint?.message}\n </text>\n </>\n )}\n </svg>\n );\n };\n\n const renderRowOrientationOverlay = () => {\n if (activeToolName !== \"add-row\" || !rowPreviewPoint || !venue) return null;\n const preview = addRowTool.getPlacementPreview(rowPreviewPoint.x, rowPreviewPoint.y, venue);\n if (!preview) return null;\n\n const origin = viewport.worldToScreen(preview.worldX, preview.worldY);\n const lineLengthPx = 78;\n const end = {\n x: origin.x + Math.cos(preview.worldAngleRad) * lineLengthPx,\n y: origin.y + Math.sin(preview.worldAngleRad) * lineLengthPx,\n };\n const arrowSizePx = 11;\n const leftWing = {\n x: end.x - Math.cos(preview.worldAngleRad - Math.PI / 6) * arrowSizePx,\n y: end.y - Math.sin(preview.worldAngleRad - Math.PI / 6) * arrowSizePx,\n };\n const rightWing = {\n x: end.x - Math.cos(preview.worldAngleRad + Math.PI / 6) * arrowSizePx,\n y: end.y - Math.sin(preview.worldAngleRad + Math.PI / 6) * arrowSizePx,\n };\n // Keep tooltip convention aligned with row orientation input:\n // 0deg = up, 90deg = right, clockwise positive.\n const worldAngleDeg = ((((preview.worldAngleRad * 180) / Math.PI) + 90) % 360 + 360) % 360;\n\n return (\n <svg\n style={{\n position: \"absolute\",\n inset: 0,\n width: \"100%\",\n height: \"100%\",\n pointerEvents: \"none\",\n zIndex: 17,\n }}\n >\n <line\n x1={origin.x}\n y1={origin.y}\n x2={end.x}\n y2={end.y}\n stroke=\"rgba(255, 213, 122, 0.95)\"\n strokeWidth={3}\n strokeLinecap=\"round\"\n />\n <polygon\n points={`${end.x},${end.y} ${leftWing.x},${leftWing.y} ${rightWing.x},${rightWing.y}`}\n fill=\"rgba(255, 213, 122, 0.95)\"\n />\n <circle\n cx={origin.x}\n cy={origin.y}\n r={5}\n fill=\"rgba(255, 213, 122, 0.28)\"\n stroke=\"rgba(255, 213, 122, 0.95)\"\n strokeWidth={1.5}\n />\n <rect\n x={origin.x + 10}\n y={origin.y - 28}\n width={90}\n height={20}\n rx={5}\n fill=\"rgba(15, 15, 25, 0.9)\"\n stroke=\"rgba(255, 213, 122, 0.65)\"\n strokeWidth={1}\n />\n <text\n x={origin.x + 55}\n y={origin.y - 14}\n fill=\"#ffd57a\"\n fontSize={11}\n fontFamily=\"system-ui\"\n textAnchor=\"middle\"\n >\n {`Row angle ${Math.round(worldAngleDeg)}deg`}\n </text>\n </svg>\n );\n };\n\n const handleSelectSection = useCallback(\n (sectionId: string, options?: { multi?: boolean }) => {\n if (!venue) return;\n if (options?.multi) {\n store.getState().toggleSection(sectionId);\n return;\n }\n store.getState().clearSelection();\n store.getState().selectSection(sectionId);\n },\n [venue, store],\n );\n\n const renderActiveToolOptionsOverlay = () => {\n const switchTrackBase: React.CSSProperties = {\n width: 34,\n height: 20,\n borderRadius: 999,\n border: \"1px solid #4a4a6a\",\n padding: 2,\n display: \"inline-flex\",\n alignItems: \"center\",\n transition: \"all 0.12s ease\",\n };\n const switchThumbBase: React.CSSProperties = {\n width: 14,\n height: 14,\n borderRadius: \"50%\",\n background: \"#e0e0e0\",\n transition: \"transform 0.12s ease\",\n };\n const renderSwitch = (label: string, checked: boolean, onToggle: () => void) => (\n <label\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 8,\n color: \"#d0d0e0\",\n fontSize: 12,\n fontFamily: \"system-ui\",\n userSelect: \"none\",\n }}\n >\n <span>{label}</span>\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n onClick={onToggle}\n style={{\n ...switchTrackBase,\n background: checked ? \"#2d6a3d\" : \"#2a2a4a\",\n borderColor: checked ? \"#57b26f\" : \"#4a4a6a\",\n cursor: \"pointer\",\n }}\n >\n <span\n style={{\n ...switchThumbBase,\n transform: checked ? \"translateX(14px)\" : \"translateX(0)\",\n }}\n />\n </button>\n </label>\n );\n const selectStyle: React.CSSProperties = {\n padding: \"4px 8px\",\n background: \"#2a2a4a\",\n border: \"1px solid #3a3a5a\",\n borderRadius: 4,\n color: \"#e0e0e0\",\n fontSize: 12,\n fontFamily: \"system-ui\",\n cursor: \"pointer\",\n };\n const renderGridOptionsCard = () => (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-start\",\n gap: 8,\n padding: \"8px 10px\",\n border: \"1px solid #3a3a5a\",\n borderRadius: 6,\n background: \"rgba(42, 42, 74, 0.65)\",\n }}\n >\n <span\n style={{\n color: \"#c7c7df\",\n fontSize: 12,\n fontFamily: \"system-ui\",\n fontWeight: 600,\n }}\n >\n Grid options\n </span>\n {renderSwitch(\"Grid\", gridEnabled, () => setGridEnabled((v) => !v))}\n <div style={{ width: \"100%\", height: 1, background: \"#3a3a5a\" }} />\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n {renderSwitch(\"Canvas grid\", showCanvasGrid, () => setShowCanvasGrid((v) => !v))}\n <select\n value={canvasGridStyle}\n onChange={(e) => setCanvasGridStyle(e.target.value as CanvasGridStyle)}\n style={selectStyle}\n disabled={!gridEnabled || !showCanvasGrid}\n >\n <option value=\"solid\">Solid</option>\n <option value=\"dashed\">Dashed</option>\n <option value=\"dotted\">Dotted</option>\n </select>\n </div>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n {renderSwitch(\"Section grid\", showSectionGrid, () => setShowSectionGrid((v) => !v))}\n <select\n value={sectionGridStyle}\n onChange={(e) => setSectionGridStyle(e.target.value as SectionGridStyle)}\n style={selectStyle}\n disabled={!gridEnabled || !showSectionGrid}\n >\n <option value=\"dots\">Dots</option>\n <option value=\"cross\">Cross</option>\n </select>\n </div>\n </div>\n );\n\n if (activeToolName === \"add-section\") {\n return (\n <div\n style={{\n position: \"absolute\",\n top: 12,\n left: 12,\n right: 12,\n zIndex: 20,\n pointerEvents: \"none\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 10,\n padding: \"8px 12px\",\n border: \"1px solid #3a3a5a\",\n borderRadius: 8,\n background: \"rgba(21, 21, 40, 0.92)\",\n backdropFilter: \"blur(2px)\",\n pointerEvents: \"auto\",\n }}\n onPointerDown={(e) => e.stopPropagation()}\n onPointerMove={(e) => e.stopPropagation()}\n onPointerUp={(e) => e.stopPropagation()}\n >\n <span\n style={{\n color: \"#c7c7df\",\n fontSize: 12,\n fontFamily: \"system-ui\",\n fontWeight: 600,\n letterSpacing: 0.2,\n }}\n >\n Tool Options\n </span>\n <div style={{ width: 1, height: 18, background: \"#3a3a5a\" }} />\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-start\",\n gap: 8,\n padding: \"8px 10px\",\n border: \"1px solid #3a3a5a\",\n borderRadius: 6,\n background: \"rgba(42, 42, 74, 0.65)\",\n }}\n >\n <span\n style={{\n color: \"#c7c7df\",\n fontSize: 12,\n fontFamily: \"system-ui\",\n fontWeight: 600,\n }}\n >\n Section shape\n </span>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 6 }}>\n <button\n onClick={() => handleSectionModeChange(\"rectangle\")}\n style={{\n padding: \"4px 8px\",\n borderRadius: 6,\n border: \"1px solid #3a3a5a\",\n background: sectionMode === \"rectangle\" ? \"#4a4a7a\" : \"#2a2a4a\",\n color: sectionMode === \"rectangle\" ? \"#ffffff\" : \"#d0d0e0\",\n cursor: \"pointer\",\n fontSize: 12,\n fontFamily: \"system-ui\",\n fontWeight: 600,\n }}\n >\n Rectangle\n </button>\n <button\n onClick={() => handleSectionModeChange(\"polygon\")}\n style={{\n padding: \"4px 8px\",\n borderRadius: 6,\n border: \"1px solid #3a3a5a\",\n background: sectionMode === \"polygon\" ? \"#4a4a7a\" : \"#2a2a4a\",\n color: sectionMode === \"polygon\" ? \"#ffffff\" : \"#d0d0e0\",\n cursor: \"pointer\",\n fontSize: 12,\n fontFamily: \"system-ui\",\n fontWeight: 600,\n }}\n >\n Polygon\n </button>\n </div>\n </div>\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-start\",\n gap: 8,\n padding: \"8px 10px\",\n border: \"1px solid #3a3a5a\",\n borderRadius: 6,\n background: \"rgba(42, 42, 74, 0.65)\",\n }}\n >\n <span\n style={{\n color: \"#c7c7df\",\n fontSize: 12,\n fontFamily: \"system-ui\",\n fontWeight: 600,\n }}\n >\n Section resize\n </span>\n <button\n onClick={() => handleToggleSectionResize(true)}\n style={{\n padding: \"4px 8px\",\n borderRadius: 6,\n border: \"1px solid #3a3a5a\",\n background: sectionResizeEnabled ? \"#8a6a32\" : \"#2a2a4a\",\n color: sectionResizeEnabled ? \"#fff3d8\" : \"#d0d0e0\",\n cursor: \"pointer\",\n fontSize: 12,\n fontFamily: \"system-ui\",\n fontWeight: 600,\n }}\n title=\"Enable section corner/side resizing\"\n >\n {sectionResizeEnabled ? \"Resize On\" : \"Resize Off\"}\n </button>\n </div>\n {isGridOptionsOpen && renderGridOptionsCard()}\n </div>\n </div>\n );\n }\n\n if (activeToolName === \"select\") {\n return (\n <div\n style={{\n position: \"absolute\",\n top: 12,\n left: 12,\n right: 12,\n zIndex: 20,\n pointerEvents: \"none\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 10,\n padding: \"8px 12px\",\n border: \"1px solid #3a3a5a\",\n borderRadius: 8,\n background: \"rgba(21, 21, 40, 0.92)\",\n backdropFilter: \"blur(2px)\",\n pointerEvents: \"auto\",\n }}\n onPointerDown={(e) => e.stopPropagation()}\n onPointerMove={(e) => e.stopPropagation()}\n onPointerUp={(e) => e.stopPropagation()}\n >\n <span\n style={{\n color: \"#c7c7df\",\n fontSize: 12,\n fontFamily: \"system-ui\",\n fontWeight: 600,\n }}\n >\n Tool Options\n </span>\n <div style={{ width: 1, height: 18, background: \"#3a3a5a\" }} />\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-start\",\n gap: 8,\n padding: \"8px 10px\",\n border: \"1px solid #3a3a5a\",\n borderRadius: 6,\n background: \"rgba(42, 42, 74, 0.65)\",\n }}\n >\n <span\n style={{\n color: \"#c7c7df\",\n fontSize: 12,\n fontFamily: \"system-ui\",\n fontWeight: 600,\n }}\n >\n Section resize\n </span>\n <button\n onClick={() => handleToggleSectionResize(false)}\n style={{\n padding: \"4px 8px\",\n borderRadius: 6,\n border: \"1px solid #3a3a5a\",\n background: sectionResizeEnabled ? \"#8a6a32\" : \"#2a2a4a\",\n color: sectionResizeEnabled ? \"#fff3d8\" : \"#d0d0e0\",\n cursor: \"pointer\",\n fontSize: 12,\n fontFamily: \"system-ui\",\n fontWeight: 600,\n }}\n >\n {sectionResizeEnabled ? \"Resize On\" : \"Resize Off\"}\n </button>\n </div>\n {isGridOptionsOpen && renderGridOptionsCard()}\n </div>\n </div>\n );\n }\n\n if (activeToolName !== \"add-row\") {\n if (!isGridOptionsOpen) return null;\n return (\n <div\n style={{\n position: \"absolute\",\n top: 12,\n left: 12,\n right: 12,\n zIndex: 20,\n pointerEvents: \"none\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 10,\n padding: \"8px 12px\",\n border: \"1px solid #3a3a5a\",\n borderRadius: 8,\n background: \"rgba(21, 21, 40, 0.92)\",\n backdropFilter: \"blur(2px)\",\n pointerEvents: \"auto\",\n }}\n onPointerDown={(e) => e.stopPropagation()}\n onPointerMove={(e) => e.stopPropagation()}\n onPointerUp={(e) => e.stopPropagation()}\n >\n <span\n style={{\n color: \"#c7c7df\",\n fontSize: 12,\n fontFamily: \"system-ui\",\n fontWeight: 600,\n }}\n >\n Tool Options\n </span>\n <div style={{ width: 1, height: 18, background: \"#3a3a5a\" }} />\n {renderGridOptionsCard()}\n </div>\n </div>\n );\n }\n\n return (\n <div\n style={{\n position: \"absolute\",\n top: 12,\n left: 12,\n right: 12,\n zIndex: 20,\n pointerEvents: \"none\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 10,\n padding: \"8px 12px\",\n border: \"1px solid #3a3a5a\",\n borderRadius: 8,\n background: \"rgba(21, 21, 40, 0.92)\",\n backdropFilter: \"blur(2px)\",\n pointerEvents: \"auto\",\n }}\n onPointerDown={(e) => e.stopPropagation()}\n onPointerMove={(e) => e.stopPropagation()}\n onPointerUp={(e) => e.stopPropagation()}\n >\n <span\n style={{\n color: \"#c7c7df\",\n fontSize: 12,\n fontFamily: \"system-ui\",\n fontWeight: 600,\n letterSpacing: 0.2,\n }}\n >\n Tool Options\n </span>\n <div style={{ width: 1, height: 18, background: \"#3a3a5a\" }} />\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-start\",\n gap: 8,\n padding: \"8px 10px\",\n border: \"1px solid #3a3a5a\",\n borderRadius: 6,\n background: \"rgba(42, 42, 74, 0.65)\",\n }}\n >\n <span\n style={{\n color: \"#c7c7df\",\n fontSize: 12,\n fontFamily: \"system-ui\",\n fontWeight: 600,\n }}\n >\n Row layout\n </span>\n <label\n style={{\n color: \"#9e9e9e\",\n fontSize: 12,\n fontFamily: \"system-ui\",\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n }}\n >\n Seats/row:\n <input\n type=\"number\"\n min={1}\n max={100}\n value={seatsPerRow}\n onChange={(e) =>\n handleSeatsPerRowChange(Math.max(1, Math.min(100, parseInt(e.target.value) || 1)))\n }\n style={{\n width: 56,\n padding: \"3px 6px\",\n background: \"#2a2a4a\",\n border: \"1px solid #3a3a5a\",\n borderRadius: 4,\n color: \"#e0e0e0\",\n fontSize: 13,\n fontFamily: \"system-ui\",\n }}\n />\n </label>\n\n <label\n style={{\n color: \"#9e9e9e\",\n fontSize: 12,\n fontFamily: \"system-ui\",\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n }}\n >\n Rows:\n <input\n type=\"number\"\n min={1}\n max={100}\n value={rowsCount}\n onChange={(e) =>\n handleRowsCountChange(Math.max(1, Math.min(100, parseInt(e.target.value) || 1)))\n }\n style={{\n width: 56,\n padding: \"3px 6px\",\n background: \"#2a2a4a\",\n border: \"1px solid #3a3a5a\",\n borderRadius: 4,\n color: \"#e0e0e0\",\n fontSize: 13,\n fontFamily: \"system-ui\",\n }}\n />\n </label>\n\n <div\n style={{\n color: \"#c7c7df\",\n fontSize: 12,\n fontFamily: \"system-ui\",\n fontWeight: 600,\n }}\n >\n Total seats to add: {seatsPerRow * Math.max(1, rowsCount)}\n </div>\n </div>\n\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-start\",\n gap: 8,\n padding: \"8px 10px\",\n border: \"1px solid #3a3a5a\",\n borderRadius: 6,\n background: \"rgba(42, 42, 74, 0.65)\",\n }}\n >\n <span\n style={{\n color: \"#c7c7df\",\n fontSize: 12,\n fontFamily: \"system-ui\",\n fontWeight: 600,\n }}\n >\n Orientation\n </span>\n\n <label\n style={{\n color: \"#9e9e9e\",\n fontSize: 12,\n fontFamily: \"system-ui\",\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n }}\n >\n Orientation:\n <input\n type=\"number\"\n min={0}\n max={359}\n value={rowOrientationDeg}\n onChange={(e) => handleRowOrientationChange(parseInt(e.target.value, 10) || 0)}\n style={{\n width: 56,\n padding: \"3px 6px\",\n background: \"#2a2a4a\",\n border: \"1px solid #3a3a5a\",\n borderRadius: 4,\n color: \"#e0e0e0\",\n fontSize: 13,\n fontFamily: \"system-ui\",\n }}\n />\n <span style={{ color: \"#9e9e9e\" }}>deg</span>\n <button\n onClick={handleRotateRowOrientationQuarterTurn}\n style={{\n padding: \"3px 6px\",\n borderRadius: 4,\n border: \"1px solid #3a3a5a\",\n background: \"#2a2a4a\",\n color: \"#d0d0e0\",\n cursor: \"pointer\",\n fontSize: 12,\n fontFamily: \"system-ui\",\n fontWeight: 600,\n }}\n title=\"Rotate row direction by 90 degrees\"\n >\n +90deg\n </button>\n </label>\n\n <div\n style={{\n color: \"#9e9e9e\",\n fontSize: 11,\n fontFamily: \"system-ui\",\n }}\n >\n 0deg = up, 90deg = right\n </div>\n </div>\n {isGridOptionsOpen && renderGridOptionsCard()}\n </div>\n </div>\n );\n };\n\n // Keyboard shortcuts — skip when user is typing in an input field\n useEffect(() => {\n const isTyping = () => {\n const tag = document.activeElement?.tagName;\n return tag === \"INPUT\" || tag === \"TEXTAREA\" || tag === \"SELECT\";\n };\n const handler = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key === \"z\") {\n e.preventDefault();\n if (e.shiftKey) historyRef.current.redo();\n else historyRef.current.undo();\n return;\n }\n if (isTyping()) return;\n if (e.key === \"v\" || e.key === \"1\") setActiveTool(\"select\");\n if (e.key === \"h\" || e.key === \"2\") setActiveTool(\"pan\");\n if (e.key === \"s\" || e.key === \"3\") setActiveTool(\"add-section\");\n if (e.key === \"r\" || e.key === \"4\") setActiveTool(\"add-row\");\n if (e.key === \"a\" || e.key === \"5\") setActiveTool(\"add-seat\");\n if (e.key === \" \") {\n e.preventDefault();\n }\n };\n const upHandler = (e: KeyboardEvent) => {\n if (isTyping()) return;\n if (e.key === \" \") {\n e.preventDefault();\n setActiveTool(activeToolName === \"pan\" ? lastNonPanToolNameRef.current : \"pan\");\n }\n };\n window.addEventListener(\"keydown\", handler);\n window.addEventListener(\"keyup\", upHandler);\n return () => {\n window.removeEventListener(\"keydown\", handler);\n window.removeEventListener(\"keyup\", upHandler);\n };\n }, [setActiveTool, activeToolName]);\n\n // Tool pointer event adapter for the canvas overlay\n const toToolPointerEvent = useCallback(\n (e: React.PointerEvent<HTMLDivElement>): ToolPointerEvent => {\n const rect = e.currentTarget.getBoundingClientRect();\n const screenX = e.clientX - rect.left;\n const screenY = e.clientY - rect.top;\n const world = viewport.screenToWorld(screenX, screenY);\n return {\n worldX: world.x,\n worldY: world.y,\n screenX: e.clientX,\n screenY: e.clientY,\n shiftKey: e.shiftKey,\n ctrlKey: e.ctrlKey,\n metaKey: e.metaKey,\n button: e.button,\n };\n },\n [viewport],\n );\n\n const bumpDragPreview = useCallback(() => {\n if (activeToolRef.current === selectTool) {\n setDragPreviewVersion((v) => v + 1);\n }\n }, [selectTool]);\n\n const handlePointerRelease = useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n const toolEvent = toToolPointerEvent(e);\n activeToolRef.current.onPointerUp(toolEvent, viewport, store);\n bumpDragPreview();\n },\n [toToolPointerEvent, viewport, store, bumpDragPreview],\n );\n\n const handleCanvasPointerDown = useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n if (e.button !== 0) return;\n // Capture so drag operations complete even if pointer leaves the canvas area\n e.currentTarget.setPointerCapture(e.pointerId);\n const toolEvent = toToolPointerEvent(e);\n activeToolRef.current.onPointerDown(toolEvent, viewport, store);\n bumpDragPreview();\n },\n [toToolPointerEvent, viewport, store, bumpDragPreview],\n );\n\n const handleCanvasPointerMove = useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n const toolEvent = toToolPointerEvent(e);\n activeToolRef.current.onPointerMove(toolEvent, viewport, store);\n if (activeToolName === \"add-row\") {\n setRowPreviewPoint({ x: toolEvent.worldX, y: toolEvent.worldY });\n }\n bumpDragPreview();\n },\n [toToolPointerEvent, viewport, store, activeToolName, bumpDragPreview],\n );\n\n const handleCanvasPointerUp = useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => handlePointerRelease(e),\n [handlePointerRelease],\n );\n\n const handleCanvasPointerCancel = useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => handlePointerRelease(e),\n [handlePointerRelease],\n );\n\n const sidebarStyle: React.CSSProperties = {\n width: 260,\n background: \"#1a1a2e\",\n borderLeft: \"1px solid #2a2a4a\",\n overflowY: \"auto\",\n flexShrink: 0,\n };\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", width: \"100%\", height: \"100%\" }}>\n <Toolbar\n activeTool={activeToolName}\n onToolChange={setActiveTool}\n gridEnabled={gridEnabled}\n isGridOptionsOpen={isGridOptionsOpen}\n onToggleGridOptions={() => setIsGridOptionsOpen((current) => !current)}\n canUndo={canUndo}\n canRedo={canRedo}\n onUndo={() => historyRef.current.undo()}\n onRedo={() => historyRef.current.redo()}\n onFitView={handleFitView}\n onSave={handleSave}\n onLoad={handleLoad}\n />\n\n <div style={{ display: \"flex\", flex: 1, overflow: \"hidden\" }}>\n <div\n ref={canvasAreaRef}\n style={{ flex: 1, position: \"relative\", cursor: (toolMap[activeToolName] ?? selectTool).cursor }}\n onPointerDown={handleCanvasPointerDown}\n onPointerMove={handleCanvasPointerMove}\n onPointerUp={handleCanvasPointerUp}\n onPointerCancel={handleCanvasPointerCancel}\n >\n <SeatmapCanvas\n panOnLeftClick={false}\n showGridLines={gridEnabled && showCanvasGrid}\n showSectionGridDots={gridEnabled && showSectionGrid}\n canvasGridLineStyle={canvasGridStyle}\n sectionGridMarkerStyle={sectionGridStyle}\n />\n <DragPreviewOverlay\n sectionOutlines={selectTool.getSectionDragPreviews(venue)}\n seatPoints={selectTool.getSeatDragPreview(venue)}\n viewport={viewport}\n />\n {renderRowOrientationOverlay()}\n {renderSectionResizeOverlay()}\n {renderBackgroundResizeOverlay()}\n {renderActiveToolOptionsOverlay()}\n {polygonPoints.length > 0 && (\n <PolygonPreviewOverlay\n points={polygonPoints}\n closeable={polygonCloseable}\n mode={sectionMode}\n viewport={viewport}\n />\n )}\n </div>\n\n <div style={sidebarStyle}>\n <PropertyPanel\n venue={venue}\n selectedSeatIds={selectedSeatIds}\n selectedSectionIds={selectedSectionIds}\n history={historyRef.current}\n store={store}\n onUploadBackground={handleUploadBackground}\n onRemoveBackground={handleRemoveBackground}\n onBackgroundOpacityChange={handleBackgroundOpacityChange}\n onBackgroundSizeChange={handleBackgroundSizeChange}\n onBackgroundKeepAspectRatioChange={handleBackgroundKeepAspectRatioChange}\n />\n {selectedSeatIds.size === 0 && (\n <>\n <div style={{ height: 1, background: \"#2a2a4a\", margin: \"0 16px\" }} />\n <LayerPanel\n venue={venue}\n selectedSeatIds={selectedSeatIds}\n selectedSectionIds={selectedSectionIds}\n onSelectSection={handleSelectSection}\n />\n <div style={{ height: 1, background: \"#2a2a4a\", margin: \"0 16px\" }} />\n <CategoryManager\n venue={venue}\n history={historyRef.current}\n store={store}\n fetchCategoryPrices={fetchCategoryPrices}\n />\n </>\n )}\n {selectedSeatIds.size === 0 && selectedSectionIds.size === 0 && (\n <>\n <div style={{ height: 1, background: \"#2a2a4a\", margin: \"0 16px\" }} />\n <StatusManager\n venue={venue}\n history={historyRef.current}\n store={store}\n />\n </>\n )}\n </div>\n </div>\n </div>\n );\n}\n\nexport function SeatmapEditor({ venue, onChange, onSave, fetchCategoryPrices, className }: SeatmapEditorProps) {\n return (\n <SeatmapProvider venue={venue}>\n <div className={className} style={{ width: \"100%\", height: \"100%\" }}>\n <EditorInner onChange={onChange} onSave={onSave} fetchCategoryPrices={fetchCategoryPrices} />\n </div>\n </SeatmapProvider>\n );\n}\n","import type { Viewport, CommandHistory, GeneralAdmissionArea } from \"@nex125/seatmap-core\";\nimport { generateId } from \"@nex125/seatmap-core\";\nimport type { SeatmapStore } from \"@nex125/seatmap-react\";\nimport { BaseTool, type ToolPointerEvent } from \"./BaseTool\";\n\nexport class DrawGATool extends BaseTool {\n readonly name = \"draw-ga\";\n readonly cursor = \"crosshair\";\n\n points: Array<{ x: number; y: number }> = [];\n capacity = 100;\n categoryId = \"\";\n\n constructor(private history: CommandHistory) {\n super();\n }\n\n onPointerDown(e: ToolPointerEvent, _viewport: Viewport, store: SeatmapStore): void {\n if (e.button !== 0) return;\n\n if (e.ctrlKey || e.metaKey) {\n this.finishPolygon(store);\n return;\n }\n\n this.points.push({ x: e.worldX, y: e.worldY });\n }\n\n finishPolygon(store: SeatmapStore): void {\n if (this.points.length < 3) {\n this.points = [];\n return;\n }\n\n const venue = store.getState().venue;\n if (!venue) return;\n\n const area: GeneralAdmissionArea = {\n id: generateId(),\n label: `GA ${Date.now().toString(36).slice(-3).toUpperCase()}`,\n shape: [...this.points],\n capacity: this.capacity,\n categoryId: this.categoryId,\n };\n\n this.history.execute({\n description: `Add GA area \"${area.label}\"`,\n execute: () => {\n const v = store.getState().venue;\n if (!v) return;\n store.getState().setVenue({\n ...v,\n gaAreas: [...v.gaAreas, area],\n });\n },\n undo: () => {\n const v = store.getState().venue;\n if (!v) return;\n store.getState().setVenue({\n ...v,\n gaAreas: v.gaAreas.filter((a) => a.id !== area.id),\n });\n },\n });\n\n this.points = [];\n }\n\n onDeactivate(): void {\n this.points = [];\n }\n}\n","import type { Viewport, CommandHistory, Table, Seat } from \"@nex125/seatmap-core\";\nimport { generateId } from \"@nex125/seatmap-core\";\nimport type { SeatmapStore } from \"@nex125/seatmap-react\";\nimport { BaseTool, type ToolPointerEvent } from \"./BaseTool\";\n\nexport class AddTableTool extends BaseTool {\n readonly name = \"add-table\";\n readonly cursor = \"crosshair\";\n\n shape: \"round\" | \"rectangular\" = \"round\";\n seatsPerTable = 8;\n tableRadius = 40;\n categoryId = \"\";\n\n constructor(private history: CommandHistory) {\n super();\n }\n\n onPointerDown(e: ToolPointerEvent, _viewport: Viewport, store: SeatmapStore): void {\n const venue = store.getState().venue;\n if (!venue) return;\n\n const seats: Seat[] = [];\n for (let i = 0; i < this.seatsPerTable; i++) {\n const angle = (Math.PI * 2 * i) / this.seatsPerTable - Math.PI / 2;\n seats.push({\n id: generateId(),\n label: `${i + 1}`,\n position: {\n x: Math.cos(angle) * this.tableRadius,\n y: Math.sin(angle) * this.tableRadius,\n },\n status: \"available\",\n categoryId: this.categoryId,\n });\n }\n\n const table: Table = {\n id: generateId(),\n label: `Table ${Date.now().toString(36).slice(-3).toUpperCase()}`,\n position: { x: e.worldX, y: e.worldY },\n shape: this.shape,\n seats,\n categoryId: this.categoryId,\n };\n\n this.history.execute({\n description: `Add table \"${table.label}\"`,\n execute: () => {\n const v = store.getState().venue;\n if (!v) return;\n store.getState().setVenue({\n ...v,\n tables: [...v.tables, table],\n });\n },\n undo: () => {\n const v = store.getState().venue;\n if (!v) return;\n store.getState().setVenue({\n ...v,\n tables: v.tables.filter((t) => t.id !== table.id),\n });\n },\n });\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/tools/BaseTool.ts","../src/tools/PanTool.ts","../src/tools/SelectTool.ts","../src/tools/AddSectionTool.ts","../src/tools/AddRowTool.ts","../src/tools/AddSeatTool.ts","../src/panels/Toolbar.tsx","../src/panels/PropertyPanel.tsx","../src/panels/CategoryManager.tsx","../src/panels/LayerPanel.tsx","../src/panels/StatusManager.tsx","../src/SeatmapEditor.tsx","../src/tools/DrawGATool.ts","../src/tools/AddTableTool.ts"],"names":["isDancefloorSection","s","pointInPolygon","generateId","GRID","snapToGrid","isStageSection","c","s2","relX","relY","jsxs","jsx","useState","useEffect","AVAILABLE_STATUS_ID","section","row","seat","Fragment","useMemo","useSeatmapContext","useStore","useRef","CommandHistory","useCallback","serializeVenue","deserializeVenue","venueAABB","onChange","SeatmapCanvas","SeatmapProvider"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { Viewport } from \"@nex125/seatmap-core\";\nimport type { SeatmapStore } from \"@nex125/seatmap-react\";\n\nexport interface ToolPointerEvent {\n worldX: number;\n worldY: number;\n screenX: number;\n screenY: number;\n shiftKey: boolean;\n ctrlKey: boolean;\n metaKey: boolean;\n button: number;\n}\n\nexport abstract class BaseTool {\n abstract readonly name: string;\n abstract readonly cursor: string;\n\n onPointerDown(_e: ToolPointerEvent, _viewport: Viewport, _store: SeatmapStore): void {}\n onPointerMove(_e: ToolPointerEvent, _viewport: Viewport, _store: SeatmapStore): void {}\n onPointerUp(_e: ToolPointerEvent, _viewport: Viewport, _store: SeatmapStore): void {}\n onActivate(_viewport: Viewport, _store: SeatmapStore): void {}\n onDeactivate(): void {}\n}\n","import type { Viewport } from \"@nex125/seatmap-core\";\nimport { BaseTool, type ToolPointerEvent } from \"./BaseTool\";\n\nexport class PanTool extends BaseTool {\n readonly name = \"pan\";\n readonly cursor = \"grab\";\n\n private isPanning = false;\n private lastX = 0;\n private lastY = 0;\n private panVelocity = { x: 0, y: 0 };\n private lastPanSampleTime = 0;\n private inertiaRaf = 0;\n private inertiaLastTime = 0;\n private panInertiaJelly = 55;\n private panInertiaCarry: number | undefined;\n private panInertiaFriction: number | undefined;\n private panInertiaMinSpeed: number | undefined;\n private static readonly DEFAULT_PAN_VELOCITY_BLEND = 0.3;\n private static readonly DEFAULT_PAN_STOP_DELTA = 0.3;\n private static readonly DEFAULT_PAN_RELEASE_IDLE_MS = 90;\n private panVelocityBlend = PanTool.DEFAULT_PAN_VELOCITY_BLEND;\n private panStopDelta = PanTool.DEFAULT_PAN_STOP_DELTA;\n private panReleaseIdleMs = PanTool.DEFAULT_PAN_RELEASE_IDLE_MS;\n\n setInertiaOptions(options: {\n panInertiaJelly?: number;\n panInertiaCarry?: number;\n panInertiaFriction?: number;\n panInertiaMinSpeed?: number;\n panVelocityBlend?: number;\n panStopDelta?: number;\n panReleaseIdleMs?: number;\n }): void {\n this.panInertiaJelly = options.panInertiaJelly ?? this.panInertiaJelly;\n this.panInertiaCarry = options.panInertiaCarry;\n this.panInertiaFriction = options.panInertiaFriction;\n this.panInertiaMinSpeed = options.panInertiaMinSpeed;\n this.panVelocityBlend = options.panVelocityBlend !== undefined\n ? Math.max(0.05, Math.min(0.95, options.panVelocityBlend))\n : PanTool.DEFAULT_PAN_VELOCITY_BLEND;\n this.panStopDelta = options.panStopDelta !== undefined\n ? Math.max(0, Math.min(4, options.panStopDelta))\n : PanTool.DEFAULT_PAN_STOP_DELTA;\n this.panReleaseIdleMs = options.panReleaseIdleMs !== undefined\n ? Math.max(0, Math.min(400, options.panReleaseIdleMs))\n : PanTool.DEFAULT_PAN_RELEASE_IDLE_MS;\n }\n\n private stopPanInertia(): void {\n if (this.inertiaRaf) {\n cancelAnimationFrame(this.inertiaRaf);\n this.inertiaRaf = 0;\n }\n }\n\n private startPanInertia(viewport: Viewport): void {\n this.stopPanInertia();\n const jelly = Math.max(0, Math.min(100, this.panInertiaJelly)) / 100;\n const carry = this.panInertiaCarry !== undefined\n ? Math.max(0, Math.min(0.98, this.panInertiaCarry))\n : 0.58 + jelly * 0.28;\n const baseFriction = this.panInertiaFriction !== undefined\n ? Math.max(0.8, Math.min(0.995, this.panInertiaFriction))\n : 0.88 + jelly * 0.08;\n const minSpeed = this.panInertiaMinSpeed !== undefined\n ? Math.max(0.001, Math.min(0.05, this.panInertiaMinSpeed))\n : 0.012 - jelly * 0.004;\n let velocity = {\n x: this.panVelocity.x * carry,\n y: this.panVelocity.y * carry,\n };\n if (Math.hypot(velocity.x, velocity.y) < minSpeed) return;\n\n this.inertiaLastTime = performance.now();\n const tick = () => {\n const now = performance.now();\n const dt = Math.min(32, Math.max(8, now - this.inertiaLastTime));\n this.inertiaLastTime = now;\n\n const decay = Math.pow(baseFriction, dt / 16.67);\n velocity = { x: velocity.x * decay, y: velocity.y * decay };\n if (Math.hypot(velocity.x, velocity.y) < minSpeed) {\n this.inertiaRaf = 0;\n return;\n }\n\n viewport.pan(velocity.x * dt, velocity.y * dt);\n this.inertiaRaf = requestAnimationFrame(tick);\n };\n\n this.inertiaRaf = requestAnimationFrame(tick);\n }\n\n onPointerDown(e: ToolPointerEvent): void {\n this.stopPanInertia();\n this.isPanning = true;\n this.lastX = e.screenX;\n this.lastY = e.screenY;\n this.panVelocity = { x: 0, y: 0 };\n this.lastPanSampleTime = performance.now();\n }\n\n onPointerMove(e: ToolPointerEvent, viewport: Viewport): void {\n if (!this.isPanning) return;\n const dx = e.screenX - this.lastX;\n const dy = e.screenY - this.lastY;\n this.lastX = e.screenX;\n this.lastY = e.screenY;\n const now = performance.now();\n const dt = Math.max(1, now - this.lastPanSampleTime);\n this.lastPanSampleTime = now;\n const nextVelocity = { x: dx / dt, y: dy / dt };\n const isNearlyStopped = Math.hypot(dx, dy) < this.panStopDelta;\n this.panVelocity = isNearlyStopped\n ? { x: this.panVelocity.x * 0.35, y: this.panVelocity.y * 0.35 }\n : {\n x: this.panVelocity.x * (1 - this.panVelocityBlend) + nextVelocity.x * this.panVelocityBlend,\n y: this.panVelocity.y * (1 - this.panVelocityBlend) + nextVelocity.y * this.panVelocityBlend,\n };\n viewport.pan(dx, dy);\n }\n\n onPointerUp(_e: ToolPointerEvent, viewport: Viewport): void {\n if (this.isPanning) {\n const timeSinceLastSample = performance.now() - this.lastPanSampleTime;\n if (timeSinceLastSample > this.panReleaseIdleMs || Math.hypot(this.panVelocity.x, this.panVelocity.y) < 0.01) {\n this.panVelocity = { x: 0, y: 0 };\n }\n this.startPanInertia(viewport);\n }\n this.isPanning = false;\n }\n\n onDeactivate(): void {\n this.isPanning = false;\n this.stopPanInertia();\n }\n}\n","import type { Viewport, SpatialIndex, CommandHistory } from \"@nex125/seatmap-core\";\nimport { generateId, isDancefloorSection, pointInPolygon } from \"@nex125/seatmap-core\";\nimport type { Vec2 } from \"@nex125/seatmap-core\";\nimport type { Section } from \"@nex125/seatmap-core\";\nimport type { SeatmapStore } from \"@nex125/seatmap-react\";\nimport { BaseTool, type ToolPointerEvent } from \"./BaseTool\";\n\nconst GRID = 20;\nconst MIN_SEAT_DISTANCE = 16;\nconst RESIZE_HIT_RADIUS_PX = 10;\nconst MERGE_DISTANCE_PX = 14;\n\nfunction snapToGrid(v: number): number {\n return Math.round(v / GRID) * GRID;\n}\n\ntype DragMode =\n | { type: \"none\" }\n | {\n type: \"seats\";\n sectionId: string;\n previewSectionId: string;\n originals: Map<string, { rowId: string; pos: Vec2 }>;\n delta: Vec2;\n }\n | {\n type: \"section\";\n primarySectionId: string;\n sectionIds: string[];\n originalPositions: Map<string, Vec2>;\n delta: Vec2;\n }\n | {\n type: \"resize-corner\";\n sectionId: string;\n cornerIndex: number;\n originalOutline: Vec2[];\n outline: Vec2[];\n mergeTargetIndex: number | null;\n }\n | {\n type: \"resize-side\";\n sectionId: string;\n sideIndex: number;\n startLocal: Vec2;\n originalOutline: Vec2[];\n outline: Vec2[];\n mergeCandidates: Array<{ fromIndex: number; toIndex: number }>;\n }\n | { type: \"rect\" };\n\ntype VenueState = NonNullable<ReturnType<SeatmapStore[\"getState\"]>[\"venue\"]>;\n\nexport class SelectTool extends BaseTool {\n readonly name = \"select\";\n readonly cursor = \"default\";\n\n private isDragging = false;\n private dragStartWorld = { x: 0, y: 0 };\n private hasDragged = false;\n private dragMode: DragMode = { type: \"none\" };\n private sectionResizeEnabled = false;\n private resizeTargetSectionId: string | null = null;\n\n selectionRect: { x: number; y: number; width: number; height: number } | null = null;\n\n constructor(\n private spatialIndex: SpatialIndex,\n private history: CommandHistory,\n ) {\n super();\n }\n\n setSectionResizeEnabled(enabled: boolean): void {\n this.sectionResizeEnabled = enabled;\n if (!enabled) {\n this.resizeTargetSectionId = null;\n }\n if (!enabled && (this.dragMode.type === \"resize-corner\" || this.dragMode.type === \"resize-side\")) {\n this.reset();\n }\n }\n\n onPointerDown(e: ToolPointerEvent, viewport: Viewport, store: SeatmapStore): void {\n this.isDragging = true;\n this.hasDragged = false;\n this.dragStartWorld = { x: e.worldX, y: e.worldY };\n this.selectionRect = null;\n this.dragMode = { type: \"none\" };\n\n const venue = store.getState().venue;\n if (!venue) return;\n const hits = this.spatialIndex.queryPoint({ x: e.worldX, y: e.worldY }, 12);\n const seatHit = this.pickNearestSeatHit(hits, { x: e.worldX, y: e.worldY });\n const sectionHit = hits.find((h) => h.type === \"section\");\n const seatSection = seatHit\n ? venue.sections.find((section) => section.id === seatHit.sectionId) ?? null\n : null;\n const treatSeatHitAsSection = Boolean(seatSection && isDancefloorSection(seatSection));\n\n if (this.sectionResizeEnabled) {\n const clickedSection = sectionHit\n ? venue.sections.find((s) => s.id === sectionHit.sectionId) ?? null\n : null;\n if (clickedSection) {\n this.resizeTargetSectionId = clickedSection.id;\n }\n const editableSection = clickedSection ?? this.getEditableSection(venue, store.getState().selectedSeatIds);\n if (editableSection && editableSection.outline.length >= 3) {\n const localPoint = this.toLocal(editableSection, { x: e.worldX, y: e.worldY });\n const hitRadius = RESIZE_HIT_RADIUS_PX / Math.max(0.001, viewport.zoom);\n const cornerIndex = this.findCornerHandleIndex(editableSection.outline, localPoint, hitRadius);\n if (cornerIndex >= 0) {\n this.dragMode = {\n type: \"resize-corner\",\n sectionId: editableSection.id,\n cornerIndex,\n originalOutline: editableSection.outline.map((p) => ({ ...p })),\n outline: editableSection.outline.map((p) => ({ ...p })),\n mergeTargetIndex: null,\n };\n return;\n }\n const sideIndex = this.findSideHandleIndex(editableSection.outline, localPoint, hitRadius);\n if (sideIndex >= 0) {\n this.dragMode = {\n type: \"resize-side\",\n sectionId: editableSection.id,\n sideIndex,\n startLocal: localPoint,\n originalOutline: editableSection.outline.map((p) => ({ ...p })),\n outline: editableSection.outline.map((p) => ({ ...p })),\n mergeCandidates: [],\n };\n return;\n }\n if (clickedSection && !seatHit) {\n // In resize mode, allow dragging section bodies while keeping resize handles active.\n this.beginSectionDrag(venue, store, clickedSection);\n return;\n }\n }\n }\n\n // Mode 1: Dragging selected seats (clicked on one of them)\n if (seatHit?.seatId && !treatSeatHitAsSection && store.getState().selectedSeatIds.has(seatHit.seatId)) {\n const selectedIds = store.getState().selectedSeatIds;\n const sectionId = seatHit.sectionId;\n const originals = new Map<string, { rowId: string; pos: Vec2 }>();\n\n const section = venue.sections.find((s) => s.id === sectionId);\n if (section) {\n for (const row of section.rows) {\n for (const seat of row.seats) {\n if (selectedIds.has(seat.id)) {\n originals.set(seat.id, { rowId: row.id, pos: { ...seat.position } });\n }\n }\n }\n }\n\n if (originals.size > 0) {\n this.dragMode = {\n type: \"seats\",\n sectionId,\n previewSectionId: sectionId,\n originals,\n delta: { x: 0, y: 0 },\n };\n return;\n }\n }\n\n // Mode 2: Dragging a section (clicked on section background, not a seat)\n const sectionToDragId = treatSeatHitAsSection ? seatHit?.sectionId : sectionHit?.sectionId;\n if (sectionToDragId && (treatSeatHitAsSection || !seatHit)) {\n const section = venue.sections.find((s) => s.id === sectionToDragId);\n if (section) {\n this.beginSectionDrag(venue, store, section);\n return;\n }\n }\n\n // Mode 3 will be rect selection (set in onPointerMove once dragging starts)\n }\n\n onPointerMove(e: ToolPointerEvent, viewport: Viewport, store: SeatmapStore): void {\n if (!this.isDragging) return;\n\n const dx = e.worldX - this.dragStartWorld.x;\n const dy = e.worldY - this.dragStartWorld.y;\n if (!this.hasDragged && (Math.abs(dx) > 3 || Math.abs(dy) > 3)) {\n this.hasDragged = true;\n if (this.dragMode.type === \"none\") {\n this.dragMode = { type: \"rect\" };\n }\n }\n if (!this.hasDragged) return;\n\n const venue = store.getState().venue;\n if (!venue) return;\n\n if (this.dragMode.type === \"resize-corner\") {\n const drag = this.dragMode;\n const section = venue.sections.find((s) => s.id === drag.sectionId);\n if (!section) return;\n const mergeThreshold = MERGE_DISTANCE_PX / Math.max(0.001, viewport.zoom);\n const localPoint = this.toLocal(section, { x: e.worldX, y: e.worldY });\n const nextOutline = drag.originalOutline.map((p) => ({ ...p }));\n nextOutline[drag.cornerIndex] = localPoint;\n const mergeTargetIndex = this.findMergeTargetIndex(nextOutline, drag.cornerIndex, mergeThreshold);\n this.dragMode = {\n ...drag,\n outline: nextOutline,\n mergeTargetIndex,\n };\n return;\n }\n\n if (this.dragMode.type === \"resize-side\") {\n const drag = this.dragMode;\n const section = venue.sections.find((s) => s.id === drag.sectionId);\n if (!section) return;\n const mergeThreshold = MERGE_DISTANCE_PX / Math.max(0.001, viewport.zoom);\n const localPoint = this.toLocal(section, { x: e.worldX, y: e.worldY });\n const delta = {\n x: localPoint.x - drag.startLocal.x,\n y: localPoint.y - drag.startLocal.y,\n };\n const outlineLen = drag.originalOutline.length;\n const a = drag.sideIndex;\n const b = (drag.sideIndex + 1) % outlineLen;\n const nextOutline = drag.originalOutline.map((p) => ({ ...p }));\n nextOutline[a] = {\n x: nextOutline[a].x + delta.x,\n y: nextOutline[a].y + delta.y,\n };\n nextOutline[b] = {\n x: nextOutline[b].x + delta.x,\n y: nextOutline[b].y + delta.y,\n };\n const mergeCandidates = this.findMergeCandidates(nextOutline, [a, b], mergeThreshold);\n this.dragMode = {\n ...drag,\n outline: nextOutline,\n mergeCandidates,\n };\n return;\n }\n\n if (this.dragMode.type === \"seats\") {\n const { sectionId, originals } = this.dragMode;\n const sourceSection = venue.sections.find((s) => s.id === sectionId);\n if (!sourceSection) return;\n\n const desiredSourceLocalDelta = this.rotateWorldDeltaToSectionLocal(sourceSection.rotation, {\n x: dx,\n y: dy,\n });\n const pointerWorld = { x: e.worldX, y: e.worldY };\n const destinationSection = this.findSectionAtWorldPoint(venue, pointerWorld) ?? sourceSection;\n\n let constrainedSourceLocalDelta = desiredSourceLocalDelta;\n if (destinationSection.id === sourceSection.id) {\n constrainedSourceLocalDelta = this.constrainSeatGroupDelta(\n sourceSection,\n originals,\n desiredSourceLocalDelta.x,\n desiredSourceLocalDelta.y,\n );\n } else {\n const destinationOriginals = this.mapOriginalSeatPositionsToSection(\n originals,\n sourceSection,\n destinationSection,\n );\n const worldDelta = this.rotateSectionLocalDeltaToWorld(sourceSection.rotation, desiredSourceLocalDelta);\n const destinationDesiredDelta = this.rotateWorldDeltaToSectionLocal(destinationSection.rotation, worldDelta);\n const destinationConstrainedDelta = this.snapSeatGroupDelta(\n destinationSection,\n destinationOriginals,\n destinationDesiredDelta.x,\n destinationDesiredDelta.y,\n );\n const constrainedWorldDelta = this.rotateSectionLocalDeltaToWorld(\n destinationSection.rotation,\n destinationConstrainedDelta,\n );\n constrainedSourceLocalDelta = this.rotateWorldDeltaToSectionLocal(\n sourceSection.rotation,\n constrainedWorldDelta,\n );\n }\n\n if (\n this.dragMode.delta.x === constrainedSourceLocalDelta.x &&\n this.dragMode.delta.y === constrainedSourceLocalDelta.y &&\n this.dragMode.previewSectionId === destinationSection.id\n ) {\n return;\n }\n this.dragMode = {\n type: \"seats\",\n sectionId,\n previewSectionId: destinationSection.id,\n originals,\n delta: constrainedSourceLocalDelta,\n };\n return;\n }\n\n if (this.dragMode.type === \"section\") {\n if (this.dragMode.delta.x === dx && this.dragMode.delta.y === dy) {\n return;\n }\n this.dragMode = {\n type: \"section\",\n primarySectionId: this.dragMode.primarySectionId,\n sectionIds: this.dragMode.sectionIds,\n originalPositions: this.dragMode.originalPositions,\n delta: { x: dx, y: dy },\n };\n return;\n }\n\n if (this.dragMode.type === \"rect\") {\n const x = Math.min(this.dragStartWorld.x, e.worldX);\n const y = Math.min(this.dragStartWorld.y, e.worldY);\n const width = Math.abs(dx);\n const height = Math.abs(dy);\n this.selectionRect = { x, y, width, height };\n\n const items = this.spatialIndex.queryRect({\n minX: x, minY: y, maxX: x + width, maxY: y + height,\n });\n const seatIds = items\n .filter((item) => item.type === \"seat\" && item.seatId)\n .map((item) => item.seatId!);\n store.getState().setSelection(seatIds);\n }\n }\n\n onPointerUp(e: ToolPointerEvent, _viewport: Viewport, store: SeatmapStore): void {\n if (this.hasDragged) {\n this.commitDrag(store, { x: e.worldX, y: e.worldY });\n } else if (this.dragMode.type === \"resize-side\") {\n this.commitAddPointOnSide(store, this.dragMode, { x: e.worldX, y: e.worldY });\n } else if (this.dragMode.type === \"resize-corner\") {\n // Ignore click-selection behavior when a resize handle was clicked but not dragged.\n } else {\n // Click without drag — select/deselect\n const hits = this.spatialIndex.queryPoint({ x: e.worldX, y: e.worldY }, 12);\n const seatHit = this.pickNearestSeatHit(hits, { x: e.worldX, y: e.worldY });\n const sectionHit = hits.find((h) => h.type === \"section\");\n const seatSection = seatHit\n ? store.getState().venue?.sections.find((section) => section.id === seatHit.sectionId) ?? null\n : null;\n const treatSeatHitAsSection = Boolean(seatSection && isDancefloorSection(seatSection));\n const isMulti = e.ctrlKey || e.shiftKey || e.metaKey;\n\n if (seatHit?.seatId && !treatSeatHitAsSection) {\n this.resizeTargetSectionId = seatHit.sectionId;\n if (isMulti) {\n store.getState().toggleSeat(seatHit.seatId);\n // When adding seats, always target the current section if none targeted\n if (store.getState().selectedSectionIds.size === 0) {\n store.getState().selectSection(seatHit.sectionId);\n }\n } else {\n store.getState().setSelection([seatHit.seatId]);\n store.getState().selectSection(seatHit.sectionId);\n }\n } else {\n const sectionId = treatSeatHitAsSection ? seatHit?.sectionId : sectionHit?.sectionId;\n if (!sectionId) {\n if (!isMulti) {\n if (this.sectionResizeEnabled) {\n this.resizeTargetSectionId = null;\n }\n store.getState().clearSelection();\n }\n this.reset();\n return;\n }\n if (this.sectionResizeEnabled) {\n this.resizeTargetSectionId = sectionId;\n } else {\n if (isMulti) {\n store.getState().toggleSection(sectionId);\n } else {\n // Selecting a section directly clears seat selection to show Section Config panel\n store.getState().clearSelection();\n store.getState().selectSection(sectionId);\n }\n }\n }\n }\n\n this.reset();\n }\n\n private commitAddPointOnSide(\n store: SeatmapStore,\n drag: Extract<DragMode, { type: \"resize-side\" }>,\n worldPoint: Vec2,\n ): void {\n const venue = store.getState().venue;\n if (!venue) return;\n const section = venue.sections.find((s) => s.id === drag.sectionId);\n if (!section || section.outline.length < 3) return;\n\n const localPoint = this.toLocal(section, worldPoint);\n const insertAt = drag.sideIndex + 1;\n const finalOutline = [\n ...section.outline.slice(0, insertAt),\n localPoint,\n ...section.outline.slice(insertAt),\n ];\n\n this.history.execute({\n description: `Add section point`,\n execute: () => {\n const v = store.getState().venue;\n if (!v) return;\n store.getState().setVenue({\n ...v,\n sections: v.sections.map((s) =>\n s.id === section.id ? { ...s, outline: finalOutline } : s,\n ),\n });\n },\n undo: () => {\n const v = store.getState().venue;\n if (!v) return;\n store.getState().setVenue({\n ...v,\n sections: v.sections.map((s) =>\n s.id === section.id ? { ...s, outline: section.outline } : s,\n ),\n });\n },\n });\n }\n\n private beginSectionDrag(venue: VenueState, store: SeatmapStore, section: Section): void {\n const selectedSectionIds = store.getState().selectedSectionIds;\n const sectionIds =\n selectedSectionIds.has(section.id) && selectedSectionIds.size > 1\n ? [...selectedSectionIds]\n : [section.id];\n const originalPositions = new Map<string, Vec2>();\n for (const sec of venue.sections) {\n if (sectionIds.includes(sec.id)) {\n originalPositions.set(sec.id, { ...sec.position });\n }\n }\n this.dragMode = {\n type: \"section\",\n primarySectionId: section.id,\n sectionIds,\n originalPositions,\n delta: { x: 0, y: 0 },\n };\n }\n\n private commitDrag(store: SeatmapStore, dropWorld: Vec2): void {\n const venue = store.getState().venue;\n if (!venue) return;\n\n if (this.dragMode.type === \"seats\") {\n const { sectionId, originals, delta } = this.dragMode;\n const sourceSection = venue.sections.find((s) => s.id === sectionId);\n if (!sourceSection) return;\n if (delta.x === 0 && delta.y === 0) return;\n\n const destinationSection = this.findSectionAtWorldPoint(venue, dropWorld) ?? sourceSection;\n if (destinationSection.id === sourceSection.id) {\n this.commitSeatMoveWithinSection(store, venue, sourceSection, originals, delta);\n return;\n }\n\n const afterTransfer = this.buildSeatTransferVenue(\n venue,\n sourceSection,\n destinationSection,\n originals,\n delta,\n );\n if (!afterTransfer) return;\n\n store.getState().setVenue(afterTransfer);\n\n this.history.execute({\n description: `Move ${originals.size} seat(s) to \"${destinationSection.label}\"`,\n execute: () => {\n store.getState().setVenue(afterTransfer);\n },\n undo: () => {\n store.getState().setVenue(venue);\n },\n });\n }\n\n if (this.dragMode.type === \"section\") {\n const { sectionIds, originalPositions, delta } = this.dragMode;\n if (delta.x === 0 && delta.y === 0) return;\n\n const sectionIdSet = new Set(sectionIds);\n const finalPositions = new Map<string, Vec2>();\n for (const [sectionId, origPos] of originalPositions.entries()) {\n finalPositions.set(sectionId, {\n x: origPos.x + delta.x,\n y: origPos.y + delta.y,\n });\n }\n\n this.history.execute({\n description: `Move ${sectionIds.length} section(s)`,\n execute: () => {\n const v = store.getState().venue;\n if (!v) return;\n store.getState().setVenue({\n ...v,\n sections: v.sections.map((section) => {\n if (!sectionIdSet.has(section.id)) return section;\n const finalPos = finalPositions.get(section.id);\n return finalPos ? { ...section, position: finalPos } : section;\n }),\n });\n },\n undo: () => {\n const v = store.getState().venue;\n if (!v) return;\n store.getState().setVenue({\n ...v,\n sections: v.sections.map((section) => {\n if (!sectionIdSet.has(section.id)) return section;\n const origPos = originalPositions.get(section.id);\n return origPos ? { ...section, position: origPos } : section;\n }),\n });\n },\n });\n }\n\n if (this.dragMode.type === \"resize-corner\" || this.dragMode.type === \"resize-side\") {\n const drag = this.dragMode;\n const section = venue.sections.find((s) => s.id === drag.sectionId);\n if (!section) return;\n\n let finalOutline = drag.outline.map((p) => ({ ...p }));\n if (drag.type === \"resize-corner\" && drag.mergeTargetIndex !== null) {\n finalOutline = this.removeOutlineIndices(finalOutline, [drag.cornerIndex]);\n }\n if (drag.type === \"resize-side\" && drag.mergeCandidates.length > 0) {\n finalOutline = this.removeOutlineIndices(\n finalOutline,\n [...new Set(drag.mergeCandidates.map((candidate) => candidate.fromIndex))],\n );\n }\n\n const sectionWouldBeRemoved = finalOutline.length < 3;\n const unchanged =\n !sectionWouldBeRemoved &&\n this.areOutlinesEqual(section.outline, finalOutline);\n if (unchanged) return;\n\n const oldSection = section;\n this.history.execute({\n description: sectionWouldBeRemoved\n ? `Remove section \"${oldSection.label}\" after resize`\n : `Resize section \"${oldSection.label}\"`,\n execute: () => {\n const v = store.getState().venue;\n if (!v) return;\n if (sectionWouldBeRemoved) {\n store.getState().setVenue({\n ...v,\n sections: v.sections.filter((s) => s.id !== oldSection.id),\n });\n store.getState().clearSelection();\n return;\n }\n store.getState().setVenue({\n ...v,\n sections: v.sections.map((s) =>\n s.id === oldSection.id ? { ...s, outline: finalOutline } : s,\n ),\n });\n },\n undo: () => {\n const v = store.getState().venue;\n if (!v) return;\n const alreadyPresent = v.sections.some((s) => s.id === oldSection.id);\n if (sectionWouldBeRemoved) {\n store.getState().setVenue({\n ...v,\n sections: alreadyPresent ? v.sections : [...v.sections, oldSection],\n });\n return;\n }\n store.getState().setVenue({\n ...v,\n sections: v.sections.map((s) =>\n s.id === oldSection.id ? { ...s, outline: oldSection.outline } : s,\n ),\n });\n },\n });\n }\n }\n\n private reset(): void {\n this.isDragging = false;\n this.hasDragged = false;\n this.selectionRect = null;\n this.dragMode = { type: \"none\" };\n }\n\n onDeactivate(): void {\n this.reset();\n this.resizeTargetSectionId = null;\n }\n\n getSectionDragPreview(\n venue: { sections: Array<{ id: string; position: Vec2; rotation: number; outline: Vec2[] }> } | null,\n ): Vec2[] | null {\n return this.getSectionDragPreviews(venue)[0] ?? null;\n }\n\n getSectionDragPreviews(\n venue: { sections: Array<{ id: string; position: Vec2; rotation: number; outline: Vec2[] }> } | null,\n ): Vec2[][] {\n const drag = this.dragMode;\n if (!venue) return [];\n if (drag.type === \"section\") {\n return drag.sectionIds\n .map((sectionId) => {\n const section = venue.sections.find((s) => s.id === sectionId);\n const originalPos = drag.originalPositions.get(sectionId);\n if (!section || !originalPos || section.outline.length < 3) return null;\n const pos = { x: originalPos.x + drag.delta.x, y: originalPos.y + drag.delta.y };\n const c = Math.cos(section.rotation);\n const s = Math.sin(section.rotation);\n return section.outline.map((p) => ({\n x: pos.x + p.x * c - p.y * s,\n y: pos.y + p.x * s + p.y * c,\n }));\n })\n .filter((outline): outline is Vec2[] => Boolean(outline));\n }\n if (drag.type === \"resize-corner\" || drag.type === \"resize-side\") {\n const section = venue.sections.find((s) => s.id === drag.sectionId);\n if (!section || drag.outline.length < 3) return [];\n const c = Math.cos(section.rotation);\n const s = Math.sin(section.rotation);\n return [\n drag.outline.map((p) => ({\n x: section.position.x + p.x * c - p.y * s,\n y: section.position.y + p.x * s + p.y * c,\n })),\n ];\n }\n return [];\n }\n\n getSectionResizeHandlesPreview(\n venue: { sections: Section[] } | null,\n selectedSeatIds: Set<string>,\n selectedSectionId: string | null = null,\n ): {\n corners: Vec2[];\n sideMidpoints: Vec2[];\n mergeHint: { position: Vec2; message: string } | null;\n } | null {\n if (!this.sectionResizeEnabled || !venue) return null;\n const section = this.getEditableSection(venue, selectedSeatIds, selectedSectionId);\n if (!section || section.outline.length < 3) return null;\n const activeOutline =\n (this.dragMode.type === \"resize-corner\" || this.dragMode.type === \"resize-side\") &&\n this.dragMode.sectionId === section.id\n ? this.dragMode.outline\n : section.outline;\n if (activeOutline.length < 3) return null;\n\n const corners = activeOutline.map((p) => this.toWorld(section, p));\n const sideMidpoints = activeOutline.map((p, i) => {\n const next = activeOutline[(i + 1) % activeOutline.length];\n return this.toWorld(section, {\n x: (p.x + next.x) * 0.5,\n y: (p.y + next.y) * 0.5,\n });\n });\n\n let mergeHint: { position: Vec2; message: string } | null = null;\n if (this.dragMode.type === \"resize-corner\" && this.dragMode.mergeTargetIndex !== null) {\n const a = corners[this.dragMode.cornerIndex];\n const b = corners[this.dragMode.mergeTargetIndex];\n mergeHint = {\n position: { x: (a.x + b.x) * 0.5, y: (a.y + b.y) * 0.5 },\n message: activeOutline.length <= 3 ? \"Release to remove section\" : \"Release to join corners\",\n };\n }\n if (this.dragMode.type === \"resize-side\" && this.dragMode.mergeCandidates.length > 0) {\n const candidate = this.dragMode.mergeCandidates[0];\n const a = corners[candidate.fromIndex];\n const b = corners[candidate.toIndex];\n mergeHint = {\n position: { x: (a.x + b.x) * 0.5, y: (a.y + b.y) * 0.5 },\n message: activeOutline.length <= 4 ? \"Release may remove section\" : \"Release to join corners\",\n };\n }\n\n return { corners, sideMidpoints, mergeHint };\n }\n\n getSeatDragPreview(\n venue: { sections: Array<{ id: string; position: Vec2; rotation: number }> } | null,\n ): Vec2[] {\n const drag = this.dragMode;\n if (!venue || drag.type !== \"seats\") return [];\n const sourceSection = venue.sections.find((s) => s.id === drag.sectionId);\n const previewSection = venue.sections.find((s) => s.id === drag.previewSectionId) ?? sourceSection;\n if (!sourceSection || !previewSection) return [];\n\n const previewOriginals =\n previewSection.id === sourceSection.id\n ? drag.originals\n : this.mapOriginalSeatPositionsToSection(drag.originals, sourceSection, previewSection);\n const worldDelta = this.rotateSectionLocalDeltaToWorld(sourceSection.rotation, drag.delta);\n const previewLocalDelta = this.rotateWorldDeltaToSectionLocal(previewSection.rotation, worldDelta);\n const c = Math.cos(previewSection.rotation);\n const s = Math.sin(previewSection.rotation);\n return [...previewOriginals.values()].map((orig) => {\n const localX = orig.pos.x + previewLocalDelta.x;\n const localY = orig.pos.y + previewLocalDelta.y;\n return {\n x: previewSection.position.x + localX * c - localY * s,\n y: previewSection.position.y + localX * s + localY * c,\n };\n });\n }\n\n private constrainSeatGroupDelta(\n section: { outline: Vec2[]; rows: Array<{ seats: Array<{ id: string; position: Vec2 }> }> },\n originals: Map<string, { rowId: string; pos: Vec2 }>,\n desiredDx: number,\n desiredDy: number,\n ): Vec2 {\n const canPlace = (dx: number, dy: number): boolean => {\n const hasOutline = section.outline.length >= 3;\n const staticSeats: Vec2[] = [];\n for (const row of section.rows) {\n for (const seat of row.seats) {\n if (!originals.has(seat.id)) staticSeats.push(seat.position);\n }\n }\n\n for (const { pos } of originals.values()) {\n const moved = { x: pos.x + dx, y: pos.y + dy };\n if (hasOutline && !pointInPolygon(moved, section.outline)) {\n return false;\n }\n for (const other of staticSeats) {\n if (Math.hypot(other.x - moved.x, other.y - moved.y) < MIN_SEAT_DISTANCE) {\n return false;\n }\n }\n }\n return true;\n };\n\n if (canPlace(desiredDx, desiredDy)) {\n return { x: desiredDx, y: desiredDy };\n }\n if (!canPlace(0, 0)) {\n // When the starting position itself is invalid (for example while previewing\n // a cross-section transfer), backtrack from the desired movement to find the\n // nearest valid constrained placement.\n for (let step = 23; step >= 0; step--) {\n const ratio = step / 24;\n const candidateX = desiredDx * ratio;\n const candidateY = desiredDy * ratio;\n if (canPlace(candidateX, candidateY)) {\n return { x: candidateX, y: candidateY };\n }\n }\n return { x: desiredDx, y: desiredDy };\n }\n\n let lo = 0;\n let hi = 1;\n for (let i = 0; i < 14; i++) {\n const mid = (lo + hi) * 0.5;\n if (canPlace(desiredDx * mid, desiredDy * mid)) lo = mid;\n else hi = mid;\n }\n return { x: desiredDx * lo, y: desiredDy * lo };\n }\n\n private commitSeatMoveWithinSection(\n store: SeatmapStore,\n venue: VenueState,\n section: { id: string; outline: Vec2[]; rows: Array<{ seats: Array<{ id: string; position: Vec2 }> }> },\n originals: Map<string, { rowId: string; pos: Vec2 }>,\n delta: Vec2,\n ): void {\n // Snap movement to grid while preserving section constraints.\n const snappedDelta = this.snapSeatGroupDelta(section, originals, delta.x, delta.y);\n\n // Snap final positions to grid on commit.\n const finals = new Map<string, Vec2>();\n for (const [seatId, orig] of originals.entries()) {\n finals.set(seatId, {\n x: orig.pos.x + snappedDelta.x,\n y: orig.pos.y + snappedDelta.y,\n });\n }\n\n const afterVenue = {\n ...venue,\n sections: venue.sections.map((sec) =>\n sec.id === section.id\n ? {\n ...sec,\n rows: sec.rows.map((r) => ({\n ...r,\n seats: r.seats.map((st) => {\n const fp = finals.get(st.id);\n return fp ? { ...st, position: fp } : st;\n }),\n })),\n }\n : sec,\n ),\n };\n\n // Apply snapped positions immediately so the user sees the snap.\n store.getState().setVenue(afterVenue);\n\n this.history.execute({\n description: `Move ${originals.size} seat(s)`,\n execute: () => {\n store.getState().setVenue(afterVenue);\n },\n undo: () => {\n store.getState().setVenue(venue);\n },\n });\n }\n\n private buildSeatTransferVenue(\n venue: VenueState,\n sourceSection: Section,\n destinationSection: Section,\n originals: Map<string, { rowId: string; pos: Vec2 }>,\n delta: Vec2,\n ): VenueState | null {\n const destinationRows = destinationSection.rows.map((row) => ({\n ...row,\n seats: row.seats.map((seat) => ({ ...seat })),\n }));\n const sourceRows = sourceSection.rows.map((row) => ({\n ...row,\n seats: row.seats.map((seat) => ({ ...seat })),\n }));\n\n const movingSeatIds = new Set(originals.keys());\n const movingSeats = sourceRows\n .flatMap((row) => row.seats.map((seat) => ({ seat })))\n .filter((entry) => movingSeatIds.has(entry.seat.id));\n if (movingSeats.length === 0) return null;\n\n // Remove moved seats from source section.\n const nextSourceRows = sourceRows\n .map((row) => ({\n ...row,\n seats: row.seats.filter((seat) => !movingSeatIds.has(seat.id)),\n }))\n .filter((row) => row.seats.length > 0);\n\n const srcC = Math.cos(sourceSection.rotation);\n const srcS = Math.sin(sourceSection.rotation);\n const dstInvC = Math.cos(-destinationSection.rotation);\n const dstInvS = Math.sin(-destinationSection.rotation);\n const occupancy = destinationRows.flatMap((row) => row.seats.map((seat) => seat.position));\n\n const placements = movingSeats\n .map(({ seat }) => {\n const origin = originals.get(seat.id);\n if (!origin) return null;\n\n const sourceLocal = {\n x: origin.pos.x + delta.x,\n y: origin.pos.y + delta.y,\n };\n const world = {\n x: sourceSection.position.x + sourceLocal.x * srcC - sourceLocal.y * srcS,\n y: sourceSection.position.y + sourceLocal.x * srcS + sourceLocal.y * srcC,\n };\n\n const dstRelX = world.x - destinationSection.position.x;\n const dstRelY = world.y - destinationSection.position.y;\n return {\n seat,\n local: {\n x: snapToGrid(dstRelX * dstInvC - dstRelY * dstInvS),\n y: snapToGrid(dstRelX * dstInvS + dstRelY * dstInvC),\n },\n };\n })\n .filter((placement): placement is NonNullable<typeof placement> => Boolean(placement))\n .sort((a, b) => (a.local.y === b.local.y ? a.local.x - b.local.x : a.local.y - b.local.y));\n\n if (placements.length === 0) return null;\n if (\n destinationSection.outline.length >= 3 &&\n placements.some((placement) => !pointInPolygon(placement.local, destinationSection.outline))\n ) {\n return null;\n }\n\n const findBestRowByY = (targetY: number) => {\n let bestIndex = -1;\n let bestDist = Number.POSITIVE_INFINITY;\n for (let i = 0; i < destinationRows.length; i++) {\n const row = destinationRows[i];\n if (row.seats.length === 0) continue;\n const rowY = row.seats[0]!.position.y;\n const dist = Math.abs(targetY - rowY);\n if (dist < MIN_SEAT_DISTANCE && dist < bestDist) {\n bestDist = dist;\n bestIndex = i;\n }\n }\n return bestIndex;\n };\n\n for (const placement of placements) {\n let targetRowIndex = findBestRowByY(placement.local.y);\n if (targetRowIndex < 0) {\n destinationRows.push({\n id: generateId(),\n label: String.fromCharCode(65 + destinationRows.length),\n seats: [],\n });\n targetRowIndex = destinationRows.length - 1;\n }\n\n const row = destinationRows[targetRowIndex]!;\n const rowY = row.seats.length > 0 ? row.seats[0]!.position.y : placement.local.y;\n const snappedX = this.findNonOverlappingSeatX(placement.local.x, rowY, occupancy);\n const finalPos = { x: snappedX, y: rowY };\n\n if (\n destinationSection.outline.length >= 3 &&\n !pointInPolygon(finalPos, destinationSection.outline)\n ) {\n return null;\n }\n\n row.seats.push({\n ...placement.seat,\n position: finalPos,\n categoryId: destinationSection.categoryId,\n });\n occupancy.push(finalPos);\n }\n\n return {\n ...venue,\n sections: venue.sections.map((section) => {\n if (section.id === sourceSection.id) {\n return { ...section, rows: nextSourceRows };\n }\n if (section.id === destinationSection.id) {\n return { ...section, rows: destinationRows };\n }\n return section;\n }),\n };\n }\n\n private findSectionAtWorldPoint(\n venue: { sections: Section[] },\n worldPoint: Vec2,\n ): Section | null {\n const containingSections = venue.sections.filter((section) => {\n if (section.outline.length < 3) return true;\n return pointInPolygon(this.toLocal(section, worldPoint), section.outline);\n });\n if (containingSections.length === 0) return null;\n if (containingSections.length === 1) return containingSections[0]!;\n return containingSections.sort(\n (a, b) =>\n Math.hypot(worldPoint.x - a.position.x, worldPoint.y - a.position.y) -\n Math.hypot(worldPoint.x - b.position.x, worldPoint.y - b.position.y),\n )[0]!;\n }\n\n private rotateSectionLocalDeltaToWorld(sectionRotation: number, localDelta: Vec2): Vec2 {\n const c = Math.cos(sectionRotation);\n const s = Math.sin(sectionRotation);\n return {\n x: localDelta.x * c - localDelta.y * s,\n y: localDelta.x * s + localDelta.y * c,\n };\n }\n\n private rotateWorldDeltaToSectionLocal(sectionRotation: number, worldDelta: Vec2): Vec2 {\n const c = Math.cos(-sectionRotation);\n const s = Math.sin(-sectionRotation);\n return {\n x: worldDelta.x * c - worldDelta.y * s,\n y: worldDelta.x * s + worldDelta.y * c,\n };\n }\n\n private mapOriginalSeatPositionsToSection(\n originals: Map<string, { rowId: string; pos: Vec2 }>,\n sourceSection: Pick<Section, \"position\" | \"rotation\">,\n destinationSection: Pick<Section, \"position\" | \"rotation\">,\n ): Map<string, { rowId: string; pos: Vec2 }> {\n const map = new Map<string, { rowId: string; pos: Vec2 }>();\n const srcC = Math.cos(sourceSection.rotation);\n const srcS = Math.sin(sourceSection.rotation);\n const dstInvC = Math.cos(-destinationSection.rotation);\n const dstInvS = Math.sin(-destinationSection.rotation);\n for (const [seatId, original] of originals.entries()) {\n const world = {\n x: sourceSection.position.x + original.pos.x * srcC - original.pos.y * srcS,\n y: sourceSection.position.y + original.pos.x * srcS + original.pos.y * srcC,\n };\n const relX = world.x - destinationSection.position.x;\n const relY = world.y - destinationSection.position.y;\n map.set(seatId, {\n rowId: original.rowId,\n pos: {\n x: relX * dstInvC - relY * dstInvS,\n y: relX * dstInvS + relY * dstInvC,\n },\n });\n }\n return map;\n }\n\n private findNonOverlappingSeatX(x: number, y: number, existing: Vec2[]): number {\n let candidate = snapToGrid(x);\n for (let attempt = 0; attempt < 25; attempt++) {\n const overlaps = existing.some((p) => Math.hypot(p.x - candidate, p.y - y) < MIN_SEAT_DISTANCE);\n if (!overlaps) return candidate;\n candidate += GRID;\n }\n return candidate;\n }\n\n private snapSeatGroupDelta(\n section: { outline: Vec2[]; rows: Array<{ seats: Array<{ id: string; position: Vec2 }> }> },\n originals: Map<string, { rowId: string; pos: Vec2 }>,\n desiredDx: number,\n desiredDy: number,\n ): Vec2 {\n const snappedDx = Math.round(desiredDx / GRID) * GRID;\n const snappedDy = Math.round(desiredDy / GRID) * GRID;\n const snapped = this.constrainSeatGroupDelta(section, originals, snappedDx, snappedDy);\n\n // If a constrained snap already lands on the grid, use it.\n if (snapToGrid(snapped.x) === snapped.x && snapToGrid(snapped.y) === snapped.y) {\n return snapped;\n }\n\n // Otherwise, back off in grid-sized steps until we find a valid on-grid movement.\n const stepCount = Math.max(Math.abs(snappedDx), Math.abs(snappedDy)) / GRID;\n if (!Number.isFinite(stepCount) || stepCount <= 0) {\n return { x: 0, y: 0 };\n }\n\n for (let step = Math.floor(stepCount); step >= 0; step--) {\n const ratio = step / stepCount;\n const candidate = this.constrainSeatGroupDelta(\n section,\n originals,\n Math.round((snappedDx * ratio) / GRID) * GRID,\n Math.round((snappedDy * ratio) / GRID) * GRID,\n );\n if (snapToGrid(candidate.x) === candidate.x && snapToGrid(candidate.y) === candidate.y) {\n return candidate;\n }\n }\n\n return { x: 0, y: 0 };\n }\n\n private getEditableSection(\n venue: { sections: Section[] },\n selectedSeatIds: Set<string>,\n selectedSectionId: string | null = null,\n ): Section | null {\n if (selectedSectionId) {\n return venue.sections.find((s) => s.id === selectedSectionId) ?? null;\n }\n if (selectedSeatIds.size > 0) {\n let found: Section | null = null;\n for (const section of venue.sections) {\n let hasSelectedSeat = false;\n for (const row of section.rows) {\n for (const seat of row.seats) {\n if (selectedSeatIds.has(seat.id)) {\n hasSelectedSeat = true;\n break;\n }\n }\n if (hasSelectedSeat) break;\n }\n if (!hasSelectedSeat) continue;\n if (found && found.id !== section.id) {\n found = null;\n break;\n }\n found = section;\n }\n if (found) return found;\n }\n if (this.resizeTargetSectionId) {\n return venue.sections.find((section) => section.id === this.resizeTargetSectionId) ?? null;\n }\n return null;\n }\n\n private toLocal(section: Pick<Section, \"position\" | \"rotation\">, point: Vec2): Vec2 {\n const dx = point.x - section.position.x;\n const dy = point.y - section.position.y;\n const c = Math.cos(-section.rotation);\n const s = Math.sin(-section.rotation);\n return {\n x: dx * c - dy * s,\n y: dx * s + dy * c,\n };\n }\n\n private toWorld(section: Pick<Section, \"position\" | \"rotation\">, point: Vec2): Vec2 {\n const c = Math.cos(section.rotation);\n const s = Math.sin(section.rotation);\n return {\n x: section.position.x + point.x * c - point.y * s,\n y: section.position.y + point.x * s + point.y * c,\n };\n }\n\n private findCornerHandleIndex(outline: Vec2[], localPoint: Vec2, maxDistance: number): number {\n let bestIndex = -1;\n let bestDistance = maxDistance;\n for (let i = 0; i < outline.length; i++) {\n const d = Math.hypot(localPoint.x - outline[i].x, localPoint.y - outline[i].y);\n if (d <= bestDistance) {\n bestDistance = d;\n bestIndex = i;\n }\n }\n return bestIndex;\n }\n\n private findSideHandleIndex(outline: Vec2[], localPoint: Vec2, maxDistance: number): number {\n let bestIndex = -1;\n let bestDistance = maxDistance;\n for (let i = 0; i < outline.length; i++) {\n const next = outline[(i + 1) % outline.length];\n const mid = { x: (outline[i].x + next.x) * 0.5, y: (outline[i].y + next.y) * 0.5 };\n const d = Math.hypot(localPoint.x - mid.x, localPoint.y - mid.y);\n if (d <= bestDistance) {\n bestDistance = d;\n bestIndex = i;\n }\n }\n return bestIndex;\n }\n\n private findMergeTargetIndex(outline: Vec2[], fromIndex: number, threshold: number): number | null {\n let bestTarget: number | null = null;\n let bestDistance = threshold;\n const from = outline[fromIndex];\n for (let i = 0; i < outline.length; i++) {\n if (i === fromIndex) continue;\n const d = Math.hypot(from.x - outline[i].x, from.y - outline[i].y);\n if (d <= bestDistance) {\n bestDistance = d;\n bestTarget = i;\n }\n }\n return bestTarget;\n }\n\n private findMergeCandidates(\n outline: Vec2[],\n fromIndices: number[],\n threshold: number,\n ): Array<{ fromIndex: number; toIndex: number }> {\n const fromSet = new Set(fromIndices);\n const candidates: Array<{ fromIndex: number; toIndex: number }> = [];\n for (const fromIndex of fromIndices) {\n const from = outline[fromIndex];\n let bestTarget = -1;\n let bestDistance = threshold;\n for (let i = 0; i < outline.length; i++) {\n if (i === fromIndex || fromSet.has(i)) continue;\n const d = Math.hypot(from.x - outline[i].x, from.y - outline[i].y);\n if (d <= bestDistance) {\n bestDistance = d;\n bestTarget = i;\n }\n }\n if (bestTarget >= 0) {\n candidates.push({ fromIndex, toIndex: bestTarget });\n }\n }\n return candidates;\n }\n\n private removeOutlineIndices(outline: Vec2[], removeIndices: number[]): Vec2[] {\n const removeSet = new Set(removeIndices);\n return outline\n .filter((_, index) => !removeSet.has(index))\n .map((point) => ({ ...point }));\n }\n\n private areOutlinesEqual(a: Vec2[], b: Vec2[]): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i].x !== b[i].x || a[i].y !== b[i].y) return false;\n }\n return true;\n }\n\n private pickNearestSeatHit(\n hits: ReturnType<SpatialIndex[\"queryPoint\"]>,\n point: Vec2,\n ): (ReturnType<SpatialIndex[\"queryPoint\"]>[number] & { seatId: string }) | undefined {\n const seatHits = hits.filter((hit): hit is ReturnType<SpatialIndex[\"queryPoint\"]>[number] & { seatId: string } =>\n hit.type === \"seat\" && typeof hit.seatId === \"string\",\n );\n if (seatHits.length === 0) return undefined;\n if (seatHits.length === 1) return seatHits[0];\n\n let best = seatHits[0];\n let bestDistance = Number.POSITIVE_INFINITY;\n for (const hit of seatHits) {\n const centerX = (hit.minX + hit.maxX) * 0.5;\n const centerY = (hit.minY + hit.maxY) * 0.5;\n const d = Math.hypot(centerX - point.x, centerY - point.y);\n if (d < bestDistance) {\n bestDistance = d;\n best = hit;\n }\n }\n return best;\n }\n}\n","import type { Viewport } from \"@nex125/seatmap-core\";\nimport { generateId } from \"@nex125/seatmap-core\";\nimport type { CommandHistory, Row, Section, SectionKind, Seat, Vec2 } from \"@nex125/seatmap-core\";\nimport type { SeatmapStore } from \"@nex125/seatmap-react\";\nimport { BaseTool, type ToolPointerEvent } from \"./BaseTool\";\n\nconst CLOSE_THRESHOLD = 15;\nconst DANCEFLOOR_SEAT_ID_SUFFIX = \"dancefloor-seat\";\nconst DANCEFLOOR_ROW_ID_SUFFIX = \"dancefloor-row\";\n\nexport type SectionCreationMode = \"rectangle\" | \"polygon\";\n\nexport class AddSectionTool extends BaseTool {\n readonly name = \"add-section\";\n readonly cursor = \"crosshair\";\n\n mode: SectionCreationMode = \"rectangle\";\n sectionKind: SectionKind = \"section\";\n points: Vec2[] = [];\n onPointsChange?: (points: Vec2[], closeable: boolean) => void;\n onSectionCreated?: (sectionId: string) => void;\n\n constructor(\n private history: CommandHistory,\n private categoryId: string = \"\",\n ) {\n super();\n }\n\n setCategoryId(id: string): void {\n this.categoryId = id;\n }\n\n setMode(mode: SectionCreationMode): void {\n this.mode = mode;\n this.points = [];\n this.notifyChange();\n }\n\n setSectionKind(sectionKind: SectionKind): void {\n if (this.sectionKind === sectionKind) return;\n this.sectionKind = sectionKind;\n this.points = [];\n this.notifyChange();\n }\n\n hasPendingDraft(): boolean {\n return this.points.length > 0;\n }\n\n cancelDrawing(): void {\n if (this.points.length === 0) return;\n this.points = [];\n this.notifyChange();\n }\n\n onPointerDown(e: ToolPointerEvent, _viewport: Viewport, store: SeatmapStore): void {\n if (this.mode === \"rectangle\") {\n if (this.points.length === 0) {\n this.points = [{ x: e.worldX, y: e.worldY }];\n this.notifyChange();\n return;\n }\n\n const rectPoints = this.rectangleFromDiagonal(this.points[0], { x: e.worldX, y: e.worldY });\n this.finishSection(rectPoints, store);\n this.points = [];\n this.notifyChange();\n return;\n }\n\n // If 3+ points and click is near the first point, close the polygon\n if (this.points.length >= 3) {\n const first = this.points[0];\n const dist = Math.hypot(e.worldX - first.x, e.worldY - first.y);\n if (dist < CLOSE_THRESHOLD) {\n this.finishSection(this.points, store);\n this.points = [];\n this.notifyChange();\n return;\n }\n }\n\n this.points.push({ x: e.worldX, y: e.worldY });\n this.notifyChange();\n }\n\n onPointerMove(e: ToolPointerEvent): void {\n if (this.mode === \"rectangle\") {\n if (this.points.length !== 1) return;\n const preview = this.rectangleFromDiagonal(this.points[0], { x: e.worldX, y: e.worldY });\n this.onPointsChange?.(preview, false);\n return;\n }\n\n if (this.points.length === 0) return;\n const closeable =\n this.points.length >= 3 &&\n Math.hypot(e.worldX - this.points[0].x, e.worldY - this.points[0].y) < CLOSE_THRESHOLD;\n this.onPointsChange?.(this.points, closeable);\n }\n\n private finishSection(points: Vec2[], store: SeatmapStore): void {\n if (points.length < 3) {\n return;\n }\n\n // Ignore tiny sections created by accidental clicks.\n let area = 0;\n for (let i = 0; i < points.length; i++) {\n const a = points[i];\n const b = points[(i + 1) % points.length];\n area += a.x * b.y - b.x * a.y;\n }\n if (Math.abs(area) < 1) return;\n\n // Compute centroid\n let cx = 0, cy = 0;\n for (const p of points) { cx += p.x; cy += p.y; }\n cx /= points.length;\n cy /= points.length;\n\n const outline: Vec2[] = points.map((p) => ({\n x: p.x - cx,\n y: p.y - cy,\n }));\n\n const newSection: Section = {\n id: generateId(),\n label:\n this.sectionKind === \"stage\"\n ? \"Stage\"\n : this.sectionKind === \"dancefloor\"\n ? \"Dancefloor\"\n : `Section ${Date.now().toString(36).slice(-3).toUpperCase()}`,\n kind: this.sectionKind,\n position: { x: cx, y: cy },\n rotation: 0,\n categoryId: this.sectionKind === \"stage\" ? \"\" : this.categoryId,\n rows: this.sectionKind === \"dancefloor\" ? this.createDancefloorRows(this.categoryId) : [],\n outline,\n };\n\n this.history.execute({\n description: `Add section \"${newSection.label}\"`,\n execute: () => {\n const v = store.getState().venue;\n if (!v) return;\n store.getState().setVenue({ ...v, sections: [...v.sections, newSection] });\n this.onSectionCreated?.(newSection.id);\n },\n undo: () => {\n const v = store.getState().venue;\n if (!v) return;\n store.getState().setVenue({\n ...v,\n sections: v.sections.filter((s) => s.id !== newSection.id),\n });\n },\n });\n\n }\n\n private rectangleFromDiagonal(a: Vec2, b: Vec2): Vec2[] {\n return [\n { x: a.x, y: a.y },\n { x: b.x, y: a.y },\n { x: b.x, y: b.y },\n { x: a.x, y: b.y },\n ];\n }\n\n private createDancefloorRows(categoryId: string): Row[] {\n const dancefloorSeat: Seat = {\n id: generateId(DANCEFLOOR_SEAT_ID_SUFFIX),\n label: \"Dancefloor\",\n position: { x: 0, y: 0 },\n status: \"available\",\n categoryId,\n };\n return [\n {\n id: generateId(DANCEFLOOR_ROW_ID_SUFFIX),\n label: \"DF\",\n seats: [dancefloorSeat],\n },\n ];\n }\n\n private notifyChange(): void {\n this.onPointsChange?.(this.points, false);\n }\n\n onDeactivate(): void {\n this.cancelDrawing();\n }\n}\n","import type { Viewport, SpatialIndex, CommandHistory } from \"@nex125/seatmap-core\";\nimport { generateId, isDancefloorSection, isStageSection, pointInPolygon } from \"@nex125/seatmap-core\";\nimport type { Row, Seat, Section, Venue } from \"@nex125/seatmap-core\";\nimport type { SeatmapStore } from \"@nex125/seatmap-react\";\nimport { BaseTool, type ToolPointerEvent } from \"./BaseTool\";\n\nconst GRID = 20;\nconst ROW_GAP = GRID;\n\nfunction snapToGrid(v: number): number {\n return Math.round(v / GRID) * GRID;\n}\n\nfunction rowLabelFromIndex(index: number): string {\n let n = index + 1;\n let label = \"\";\n while (n > 0) {\n const rem = (n - 1) % 26;\n label = String.fromCharCode(65 + rem) + label;\n n = Math.floor((n - 1) / 26);\n }\n return label;\n}\n\nexport class AddRowTool extends BaseTool {\n readonly name = \"add-row\";\n readonly cursor = \"cell\";\n\n seatsPerRow = 10;\n rowsCount = 1;\n seatSpacing = 20;\n rowOrientationDeg = 0;\n\n getPlacementPreview(\n worldX: number,\n worldY: number,\n venue: Venue | null,\n ): { worldX: number; worldY: number; worldAngleRad: number } | null {\n if (!venue) return null;\n const section = this.findTargetSection(worldX, worldY, venue);\n if (!section) return null;\n const worldAngleRad = section.rotation + this.getFacingOrientationRad();\n return { worldX, worldY, worldAngleRad };\n }\n\n constructor(\n private history: CommandHistory,\n private spatialIndex: SpatialIndex,\n ) {\n super();\n }\n\n onPointerDown(e: ToolPointerEvent, _viewport: Viewport, store: SeatmapStore): void {\n const venue = store.getState().venue;\n if (!venue) return;\n const section = this.findTargetSection(e.worldX, e.worldY, venue);\n if (!section) return;\n\n // Convert click to section-local coordinates.\n const cos = Math.cos(-section.rotation);\n const sin = Math.sin(-section.rotation);\n const relX = e.worldX - section.position.x;\n const relY = e.worldY - section.position.y;\n const localX = relX * cos - relY * sin;\n const localY = relX * sin + relY * cos;\n\n // Row seats are placed along the row axis, which is perpendicular to the facing direction.\n const orientationRad = this.getRowAxisRad();\n const orientationCos = Math.cos(orientationRad);\n const orientationSin = Math.sin(orientationRad);\n const toOriented = (point: { x: number; y: number }) => ({\n u: point.x * orientationCos + point.y * orientationSin,\n v: -point.x * orientationSin + point.y * orientationCos,\n });\n const fromOriented = (u: number, v: number) => ({\n x: u * orientationCos - v * orientationSin,\n y: u * orientationSin + v * orientationCos,\n });\n\n const clickOriented = toOriented({ x: localX, y: localY });\n // Align row placement to the section snap grid so add-seat and drag snapping\n // use the same lattice inside this section.\n const startU = snapToGrid(clickOriented.u);\n const targetV = snapToGrid(clickOriented.v);\n\n // Collect existing row \"depth\" positions relative to current orientation and snap away from overlap.\n const existingVs = section.rows\n .map((row) => {\n if (row.seats.length === 0) return null;\n const projected = row.seats.map((seat) => toOriented(seat.position).v);\n return projected.reduce((sum, v) => sum + v, 0) / projected.length;\n })\n .filter((v): v is number => v !== null)\n .sort((a, b) => a - b);\n\n const hasOutline = section.outline.length >= 3;\n const rowsToAdd = Math.max(1, Math.floor(this.rowsCount));\n const occupiedVs = [...existingVs];\n const newRows: Row[] = [];\n\n for (let rowIndex = 0; rowIndex < rowsToAdd; rowIndex++) {\n let rowV = targetV + rowIndex * ROW_GAP;\n if (rowIndex > 0) {\n while (occupiedVs.some((v) => Math.abs(rowV - v) < ROW_GAP)) {\n rowV += ROW_GAP;\n }\n }\n occupiedVs.push(rowV);\n\n const seats: Seat[] = [];\n for (let i = 0; i < this.seatsPerRow; i++) {\n const pos = fromOriented(startU + i * this.seatSpacing, rowV);\n if (hasOutline && !pointInPolygon(pos, section.outline)) {\n // Keep placement consistent: fill from the first seat (pointer) to the right only.\n break;\n }\n seats.push({\n id: generateId(),\n label: `${seats.length + 1}`,\n position: pos,\n status: \"available\",\n categoryId: section.categoryId,\n });\n }\n\n if (seats.length === 0) continue;\n\n newRows.push({\n id: generateId(),\n label: rowLabelFromIndex(section.rows.length + newRows.length),\n seats,\n });\n }\n\n if (newRows.length === 0) return;\n\n const sectionId = section.id;\n const rowIds = newRows.map((r) => r.id);\n\n this.history.execute({\n description:\n newRows.length === 1\n ? `Add row ${newRows[0].label} to \"${section.label}\"`\n : `Add ${newRows.length} rows to \"${section.label}\"`,\n execute: () => {\n const v = store.getState().venue;\n if (!v) return;\n store.getState().setVenue({\n ...v,\n sections: v.sections.map((s) =>\n s.id === sectionId ? { ...s, rows: [...s.rows, ...newRows] } : s,\n ),\n });\n },\n undo: () => {\n const v = store.getState().venue;\n if (!v) return;\n store.getState().setVenue({\n ...v,\n sections: v.sections.map((s) =>\n s.id === sectionId\n ? { ...s, rows: s.rows.filter((r) => !rowIds.includes(r.id)) }\n : s,\n ),\n });\n },\n });\n }\n\n private findTargetSection(worldX: number, worldY: number, venue: Venue): Section | null {\n const hits = this.spatialIndex.queryPoint({ x: worldX, y: worldY }, 50);\n const sectionHits = hits.filter((h) => h.type === \"section\");\n if (sectionHits.length === 0) return null;\n\n const sectionIds = [...new Set(sectionHits.map((h) => h.sectionId))];\n const sections = sectionIds\n .map((id) => venue.sections.find((s) => s.id === id))\n .filter((s): s is Section => Boolean(s))\n .filter((section) => !isStageSection(section) && !isDancefloorSection(section));\n if (sections.length === 0) return null;\n\n const containing = sections.find((section) => {\n if (section.outline.length < 3) return true;\n const cos = Math.cos(-section.rotation);\n const sin = Math.sin(-section.rotation);\n const relX = worldX - section.position.x;\n const relY = worldY - section.position.y;\n const local = {\n x: relX * cos - relY * sin,\n y: relX * sin + relY * cos,\n };\n return pointInPolygon(local, section.outline);\n });\n if (containing) return containing;\n\n return sections.sort(\n (a, b) =>\n Math.hypot(worldX - a.position.x, worldY - a.position.y) -\n Math.hypot(worldX - b.position.x, worldY - b.position.y),\n )[0] ?? null;\n }\n\n private getFacingOrientationRad(): number {\n // Facing direction: 0deg points up; 90deg points right.\n return ((this.rowOrientationDeg - 90) * Math.PI) / 180;\n }\n\n private getRowAxisRad(): number {\n return this.getFacingOrientationRad() + Math.PI / 2;\n }\n}\n","import type { Viewport, SpatialIndex, CommandHistory } from \"@nex125/seatmap-core\";\nimport { generateId, isDancefloorSection, isStageSection, pointInPolygon } from \"@nex125/seatmap-core\";\nimport type { Seat, Row } from \"@nex125/seatmap-core\";\nimport type { SeatmapStore } from \"@nex125/seatmap-react\";\nimport { BaseTool, type ToolPointerEvent } from \"./BaseTool\";\n\nconst GRID = 20;\nconst MIN_SEAT_DIST = 16;\n\nfunction snapToGrid(v: number): number {\n return Math.round(v / GRID) * GRID;\n}\n\nexport class AddSeatTool extends BaseTool {\n readonly name = \"add-seat\";\n readonly cursor = \"crosshair\";\n\n constructor(\n private history: CommandHistory,\n private spatialIndex: SpatialIndex,\n ) {\n super();\n }\n\n onPointerDown(e: ToolPointerEvent, _viewport: Viewport, store: SeatmapStore): void {\n const hits = this.spatialIndex.queryPoint({ x: e.worldX, y: e.worldY }, 50);\n\n const venue = store.getState().venue;\n if (!venue) return;\n\n const sectionHits = hits.filter((h) => h.type === \"section\");\n if (sectionHits.length === 0) return;\n\n const sectionIds = [...new Set(sectionHits.map((h) => h.sectionId))];\n let section = sectionIds\n .map((id) => venue.sections.find((s) => s.id === id))\n .filter((s): s is NonNullable<typeof s> => Boolean(s))\n .filter((s) => !isStageSection(s) && !isDancefloorSection(s))\n .find((s) => {\n if (s.outline.length < 3) return true;\n const c = Math.cos(-s.rotation);\n const s2 = Math.sin(-s.rotation);\n const relX = e.worldX - s.position.x;\n const relY = e.worldY - s.position.y;\n const local = {\n x: relX * c - relY * s2,\n y: relX * s2 + relY * c,\n };\n return pointInPolygon(local, s.outline);\n });\n\n if (!section) {\n section = sectionIds\n .map((id) => venue.sections.find((s) => s.id === id))\n .filter((s): s is NonNullable<typeof s> => Boolean(s))\n .filter((s) => !isStageSection(s) && !isDancefloorSection(s))\n .sort(\n (a, b) =>\n Math.hypot(e.worldX - a.position.x, e.worldY - a.position.y) -\n Math.hypot(e.worldX - b.position.x, e.worldY - b.position.y),\n )[0];\n }\n if (!section) return;\n\n const relX = e.worldX - section.position.x;\n const relY = e.worldY - section.position.y;\n const c = Math.cos(-section.rotation);\n const s2 = Math.sin(-section.rotation);\n let lx = snapToGrid(relX * c - relY * s2);\n let ly = snapToGrid(relX * s2 + relY * c);\n\n if (section.outline.length >= 3 && !pointInPolygon({ x: lx, y: ly }, section.outline)) {\n return;\n }\n\n // Collect all existing seat positions in this section\n const existing: Array<{ x: number; y: number }> = [];\n for (const row of section.rows) {\n for (const seat of row.seats) {\n existing.push(seat.position);\n }\n }\n\n // Nudge away from overlapping seats\n lx = this.findNonOverlapping(lx, ly, existing);\n\n // Find the nearest existing row by Y, or create a new one\n let bestRow: Row | null = null;\n let bestDist = Infinity;\n for (const row of section.rows) {\n if (row.seats.length === 0) continue;\n const rowY = row.seats[0].position.y;\n const dist = Math.abs(ly - rowY);\n if (dist < MIN_SEAT_DIST && dist < bestDist) {\n bestDist = dist;\n bestRow = row;\n }\n }\n\n const sectionId = section.id;\n\n if (bestRow) {\n const rowId = bestRow.id;\n const snappedY = bestRow.seats[0].position.y;\n const existingInRow = bestRow.seats.map((s) => s.position);\n const finalX = this.findNonOverlapping(lx, snappedY, existingInRow);\n\n const newSeat: Seat = {\n id: generateId(),\n label: `${bestRow.seats.length + 1}`,\n position: { x: finalX, y: snappedY },\n status: \"available\",\n categoryId: section.categoryId,\n };\n\n this.history.execute({\n description: `Add seat to row \"${bestRow.label}\"`,\n execute: () => {\n const v = store.getState().venue;\n if (!v) return;\n store.getState().setVenue({\n ...v,\n sections: v.sections.map((sec) =>\n sec.id === sectionId\n ? { ...sec, rows: sec.rows.map((r) => r.id === rowId ? { ...r, seats: [...r.seats, newSeat] } : r) }\n : sec,\n ),\n });\n },\n undo: () => {\n const v = store.getState().venue;\n if (!v) return;\n store.getState().setVenue({\n ...v,\n sections: v.sections.map((sec) =>\n sec.id === sectionId\n ? { ...sec, rows: sec.rows.map((r) => r.id === rowId ? { ...r, seats: r.seats.filter((st) => st.id !== newSeat.id) } : r) }\n : sec,\n ),\n });\n },\n });\n } else {\n const rowLabel = String.fromCharCode(65 + section.rows.length);\n const newSeat: Seat = {\n id: generateId(),\n label: \"1\",\n position: { x: lx, y: ly },\n status: \"available\",\n categoryId: section.categoryId,\n };\n const newRow: Row = { id: generateId(), label: rowLabel, seats: [newSeat] };\n\n this.history.execute({\n description: `Add seat in new row ${rowLabel}`,\n execute: () => {\n const v = store.getState().venue;\n if (!v) return;\n store.getState().setVenue({\n ...v,\n sections: v.sections.map((sec) =>\n sec.id === sectionId ? { ...sec, rows: [...sec.rows, newRow] } : sec,\n ),\n });\n },\n undo: () => {\n const v = store.getState().venue;\n if (!v) return;\n store.getState().setVenue({\n ...v,\n sections: v.sections.map((sec) =>\n sec.id === sectionId ? { ...sec, rows: sec.rows.filter((r) => r.id !== newRow.id) } : sec,\n ),\n });\n },\n });\n }\n }\n\n private findNonOverlapping(x: number, y: number, existing: Array<{ x: number; y: number }>): number {\n let candidate = snapToGrid(x);\n for (let attempt = 0; attempt < 20; attempt++) {\n const overlaps = existing.some(\n (p) => Math.hypot(p.x - candidate, p.y - y) < MIN_SEAT_DIST,\n );\n if (!overlaps) return candidate;\n candidate += GRID;\n }\n return candidate;\n }\n}\n","import type { CSSProperties } from \"react\";\nimport type { SVGProps } from \"react\";\n\nexport interface ToolbarProps {\n activeTool: string;\n onToolChange: (tool: string) => void;\n gridEnabled: boolean;\n isGridOptionsOpen: boolean;\n onToggleGridOptions: () => void;\n canUndo: boolean;\n canRedo: boolean;\n onUndo: () => void;\n onRedo: () => void;\n onFitView: () => void;\n onSave: () => void;\n onLoad: () => void;\n showHints: boolean;\n onToggleHints: () => void;\n isEditorSettingsOpen: boolean;\n onToggleEditorSettings: () => void;\n style?: CSSProperties;\n}\n\ntype IconProps = SVGProps<SVGSVGElement>;\n\nfunction PanIcon(props: IconProps) {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.9\" aria-hidden {...props}>\n <path d=\"M8 11V6.6a1.6 1.6 0 1 1 3.2 0V10\" strokeLinecap=\"round\" />\n <path d=\"M11.2 10V5.2a1.6 1.6 0 1 1 3.2 0v5\" strokeLinecap=\"round\" />\n <path d=\"M14.4 10V6.8a1.6 1.6 0 1 1 3.2 0v6.2c0 4-2 6.2-6 6.2h-.4c-3.3 0-5.8-2.2-6.4-5.4l-.7-3.7a1.4 1.4 0 1 1 2.7-.6l.6 2.5\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\nfunction SelectIcon(props: IconProps) {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.9\" aria-hidden {...props}>\n <path d=\"M5 4.5v14l4.4-3 2.5 4.1 2.1-1.3-2.5-4.1 5-.3L5 4.5Z\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n\nfunction SectionIcon(props: IconProps) {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.9\" aria-hidden {...props}>\n <rect x=\"4.5\" y=\"4.5\" width=\"15\" height=\"15\" rx=\"2.5\" />\n <path d=\"M9 9h6M9 15h6\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\nfunction RowIcon(props: IconProps) {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.9\" aria-hidden {...props}>\n <path d=\"M4.5 8h15M4.5 12h15M4.5 16h15\" strokeLinecap=\"round\" />\n <circle cx=\"6.4\" cy=\"8\" r=\"0.8\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"6.4\" cy=\"12\" r=\"0.8\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"6.4\" cy=\"16\" r=\"0.8\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n );\n}\n\nfunction SeatIcon(props: IconProps) {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.9\" aria-hidden {...props}>\n <path d=\"M7 12.5V9.4a2.4 2.4 0 1 1 4.8 0v3.1\" strokeLinecap=\"round\" />\n <path d=\"M5 17v-3.1a1.9 1.9 0 0 1 1.9-1.9h8.2a1.9 1.9 0 0 1 1.9 1.9V17\" strokeLinecap=\"round\" />\n <path d=\"M4.8 17.8h14.4\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\nfunction UndoIcon(props: IconProps) {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.9\" aria-hidden {...props}>\n <path d=\"M8.5 8.5H5v3.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M5.2 8.7c1.8-2 4.2-3.2 7-3.2 5 0 8.8 3.7 8.8 8.5\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\nfunction RedoIcon(props: IconProps) {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.9\" aria-hidden {...props}>\n <path d=\"M15.5 8.5H19v3.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M18.8 8.7c-1.8-2-4.2-3.2-7-3.2C6.8 5.5 3 9.2 3 14\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\nfunction FitIcon(props: IconProps) {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.9\" aria-hidden {...props}>\n <path d=\"M9 4.8H4.8V9M15 4.8h4.2V9M9 19.2H4.8V15M15 19.2h4.2V15\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <rect x=\"8.2\" y=\"8.2\" width=\"7.6\" height=\"7.6\" rx=\"1.4\" />\n </svg>\n );\n}\n\nfunction GridIcon(props: IconProps) {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.9\" aria-hidden {...props}>\n <rect x=\"5\" y=\"5\" width=\"14\" height=\"14\" rx=\"2\" />\n <path d=\"M12 5v14M5 12h14\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\nfunction HintIcon(props: IconProps) {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.9\" aria-hidden {...props}>\n <path d=\"M9.4 9.2a2.7 2.7 0 1 1 4.8 1.6c-.6.8-1.6 1.4-1.8 2.7\" strokeLinecap=\"round\" />\n <path d=\"M12 17.4h.01M8.7 19h6.6\" strokeLinecap=\"round\" />\n <path d=\"M12 3.8a8.2 8.2 0 1 1 0 16.4 8.2 8.2 0 0 1 0-16.4Z\" />\n </svg>\n );\n}\n\nfunction SaveIcon(props: IconProps) {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.9\" aria-hidden {...props}>\n <path d=\"M12 4.5v9.2M8.4 10.7 12 14.3l3.6-3.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <rect x=\"5\" y=\"16.2\" width=\"14\" height=\"3.8\" rx=\"1.2\" />\n </svg>\n );\n}\n\nfunction LoadIcon(props: IconProps) {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.9\" aria-hidden {...props}>\n <path d=\"M12 14.7V5.5M8.4 9.3 12 5.7l3.6 3.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <rect x=\"5\" y=\"16.2\" width=\"14\" height=\"3.8\" rx=\"1.2\" />\n </svg>\n );\n}\n\nfunction SettingsIcon(props: IconProps) {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.9\" aria-hidden {...props}>\n <path d=\"M12 8.2a3.8 3.8 0 1 1 0 7.6 3.8 3.8 0 0 1 0-7.6Z\" />\n <path\n d=\"m18.8 12 .9 1.6-1.5 2.6-1.8-.1a6.8 6.8 0 0 1-1.4.8L14.4 19h-3l-.6-2.1a6.8 6.8 0 0 1-1.4-.8l-1.8.1-1.5-2.6.9-1.6a6.7 6.7 0 0 1 0-1.6l-.9-1.6 1.5-2.6 1.8.1c.4-.3.9-.6 1.4-.8l.6-2.1h3l.6 2.1c.5.2 1 .5 1.4.8l1.8-.1 1.5 2.6-.9 1.6c.1.5.1 1.1 0 1.6Z\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nconst tools = [\n { id: \"pan\", label: \"Pan\", icon: PanIcon },\n { id: \"select\", label: \"Select\", icon: SelectIcon },\n { id: \"add-section\", label: \"Section\", icon: SectionIcon },\n { id: \"add-row\", label: \"Row\", icon: RowIcon },\n { id: \"add-seat\", label: \"Seat\", icon: SeatIcon },\n] as const;\n\nexport function Toolbar({\n activeTool,\n onToolChange,\n gridEnabled,\n isGridOptionsOpen,\n onToggleGridOptions,\n canUndo,\n canRedo,\n onUndo,\n onRedo,\n onFitView,\n onSave,\n onLoad,\n showHints,\n onToggleHints,\n isEditorSettingsOpen,\n onToggleEditorSettings,\n style,\n}: ToolbarProps) {\n const getToolbarButtonClassName = (\n isActive = false,\n isHighlighted = false,\n ) =>\n `seatmap-editor__toolbar-button${isActive ? \" is-active\" : \"\"}${isHighlighted ? \" is-highlighted\" : \"\"}`;\n\n return (\n <div\n className={`seatmap-editor__toolbar${showHints ? \" has-shortcuts-row\" : \"\"}`}\n style={{\n ...style,\n }}\n >\n <div className=\"seatmap-editor__toolbar-row seatmap-editor__toolbar-row--primary\">\n {tools.map((tool) => (\n <button\n key={tool.id}\n type=\"button\"\n onClick={() => onToolChange(tool.id)}\n className={`${getToolbarButtonClassName(activeTool === tool.id)} seatmap-editor__toolbar-tool-button`}\n title={tool.label}\n >\n <tool.icon className=\"seatmap-editor__toolbar-icon\" />\n <span>{tool.label}</span>\n </button>\n ))}\n\n <div className=\"seatmap-editor__toolbar-divider\" />\n\n <button\n type=\"button\"\n onClick={onUndo}\n disabled={!canUndo}\n className={getToolbarButtonClassName()}\n title=\"Undo (Ctrl+Z)\"\n >\n <UndoIcon className=\"seatmap-editor__toolbar-icon\" />\n <span>Undo</span>\n </button>\n <button\n type=\"button\"\n onClick={onRedo}\n disabled={!canRedo}\n className={getToolbarButtonClassName()}\n title=\"Redo (Ctrl+Shift+Z)\"\n >\n <RedoIcon className=\"seatmap-editor__toolbar-icon\" />\n <span>Redo</span>\n </button>\n\n <div className=\"seatmap-editor__toolbar-divider\" />\n\n <button type=\"button\" onClick={onFitView} className={getToolbarButtonClassName()} title=\"Fit to view\">\n <FitIcon className=\"seatmap-editor__toolbar-icon\" />\n <span>Fit</span>\n </button>\n <button\n type=\"button\"\n onClick={onToggleGridOptions}\n className={getToolbarButtonClassName(isGridOptionsOpen, gridEnabled)}\n title=\"Show grid options\"\n >\n <GridIcon className=\"seatmap-editor__toolbar-icon\" />\n <span>Grid</span>\n </button>\n <button\n type=\"button\"\n onClick={onToggleHints}\n className={getToolbarButtonClassName(showHints, showHints)}\n title=\"Toggle inline editor hints\"\n >\n <HintIcon className=\"seatmap-editor__toolbar-icon\" />\n <span>Hints</span>\n </button>\n <button\n type=\"button\"\n onClick={onToggleEditorSettings}\n className={getToolbarButtonClassName(isEditorSettingsOpen, isEditorSettingsOpen)}\n title=\"Editor settings\"\n >\n <SettingsIcon className=\"seatmap-editor__toolbar-icon\" />\n <span>Settings</span>\n </button>\n\n <div className=\"seatmap-editor__toolbar-divider\" />\n\n <button type=\"button\" onClick={onSave} className={getToolbarButtonClassName()} title=\"Export venue as JSON\">\n <SaveIcon className=\"seatmap-editor__toolbar-icon\" />\n <span>Save</span>\n </button>\n <button type=\"button\" onClick={onLoad} className={getToolbarButtonClassName()} title=\"Import venue from JSON\">\n <LoadIcon className=\"seatmap-editor__toolbar-icon\" />\n <span>Load</span>\n </button>\n {showHints && (\n <div className=\"seatmap-editor__toolbar-shortcuts-panel\" aria-label=\"Keyboard shortcuts\">\n <span className=\"seatmap-editor__toolbar-shortcuts-title\">Keyboard shortcuts</span>\n <div className=\"seatmap-editor__toolbar-shortcuts-row\">\n <span><kbd>H</kbd> / <kbd>1</kbd> - Pan</span>\n <span><kbd>V</kbd> / <kbd>2</kbd> - Select</span>\n <span><kbd>S</kbd> / <kbd>3</kbd> - Add Section</span>\n </div>\n <div className=\"seatmap-editor__toolbar-shortcuts-row\">\n <span><kbd>R</kbd> / <kbd>4</kbd> - Add Row</span>\n <span><kbd>A</kbd> / <kbd>5</kbd> - Add Seat</span>\n <span><kbd>Space</kbd> (toggle) - Toggle Pan</span>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}\n","import { useState, useEffect, type CSSProperties } from \"react\";\nimport type { Venue, Section, PricingCategory, CommandHistory, Row, Seat } from \"@nex125/seatmap-core\";\nimport { generateId, isDancefloorSection, isStageSection } from \"@nex125/seatmap-core\";\nimport { AVAILABLE_STATUS_ID } from \"@nex125/seatmap-core\";\nimport type { SeatmapStore } from \"@nex125/seatmap-react\";\n\nexport interface PropertyPanelProps {\n venue: Venue | null;\n selectedSeatIds: Set<string>;\n selectedSectionIds: Set<string>;\n history: CommandHistory;\n store: SeatmapStore;\n onUploadBackground?: () => void;\n onRemoveBackground?: () => void;\n onBackgroundOpacityChange?: (opacity: number) => void;\n onBackgroundSizeChange?: (size: { width?: number; height?: number }) => void;\n onBackgroundKeepAspectRatioChange?: (keepAspectRatio: boolean) => void;\n style?: CSSProperties;\n}\n\nfunction freshVenue(store: SeatmapStore): Venue | null {\n return store.getState().venue;\n}\n\nfunction setVenue(store: SeatmapStore, venue: Venue) {\n store.getState().setVenue(venue);\n}\n\nfunction isSectionSeatLayoutLocked(section: Section): boolean {\n return isStageSection(section) || isDancefloorSection(section);\n}\n\nexport function PropertyPanel({\n venue,\n selectedSeatIds,\n selectedSectionIds,\n history,\n store,\n onUploadBackground,\n onRemoveBackground,\n onBackgroundOpacityChange,\n onBackgroundSizeChange,\n onBackgroundKeepAspectRatioChange,\n style,\n}: PropertyPanelProps) {\n const [selectedSections, setSelectedSections] = useState<Section[]>([]);\n\n useEffect(() => {\n if (!venue) {\n setSelectedSections([]);\n return;\n }\n\n setSelectedSections(venue.sections.filter((section) => selectedSectionIds.has(section.id)));\n }, [venue, selectedSectionIds]);\n\n const updateVenueName = (newName: string) => {\n const v = freshVenue(store);\n if (!v) return;\n const oldName = v.name;\n history.execute({\n description: `Rename venue to \"${newName}\"`,\n execute: () => setVenue(store, { ...v, name: newName }),\n undo: () => setVenue(store, { ...v, name: oldName }),\n });\n };\n\n const updateVenueId = (newId: string) => {\n const v = freshVenue(store);\n if (!v) return;\n const oldId = v.id;\n history.execute({\n description: `Change venue ID to \"${newId}\"`,\n execute: () => setVenue(store, { ...v, id: newId }),\n undo: () => setVenue(store, { ...v, id: oldId }),\n });\n };\n\n const updateSectionLabel = (sectionId: string, newLabel: string) => {\n const v = freshVenue(store);\n if (!v) return;\n const oldLabel = v.sections.find((s) => s.id === sectionId)?.label ?? \"\";\n\n history.execute({\n description: `Rename section to \"${newLabel}\"`,\n execute: () => {\n const cur = freshVenue(store);\n if (!cur) return;\n setVenue(store, {\n ...cur,\n sections: cur.sections.map((s) =>\n s.id === sectionId ? { ...s, label: newLabel } : s,\n ),\n });\n },\n undo: () => {\n const cur = freshVenue(store);\n if (!cur) return;\n setVenue(store, {\n ...cur,\n sections: cur.sections.map((s) =>\n s.id === sectionId ? { ...s, label: oldLabel } : s,\n ),\n });\n },\n });\n };\n\n const updateSectionCategory = (sectionId: string, categoryId: string) => {\n const v = freshVenue(store);\n if (!v) return;\n const targetSection = v.sections.find((s) => s.id === sectionId);\n if (!targetSection || isStageSection(targetSection)) return;\n const oldCatId = targetSection.categoryId;\n\n history.execute({\n description: `Change section category`,\n execute: () => {\n const cur = freshVenue(store);\n if (!cur) return;\n setVenue(store, {\n ...cur,\n sections: cur.sections.map((s) =>\n s.id === sectionId\n ? {\n ...s,\n categoryId,\n rows: s.rows.map((r) => ({\n ...r,\n seats: r.seats.map((seat) => ({ ...seat, categoryId })),\n })),\n }\n : s,\n ),\n });\n },\n undo: () => {\n const cur = freshVenue(store);\n if (!cur) return;\n setVenue(store, {\n ...cur,\n sections: cur.sections.map((s) =>\n s.id === sectionId\n ? {\n ...s,\n categoryId: oldCatId,\n rows: s.rows.map((r) => ({\n ...r,\n seats: r.seats.map((seat) => ({ ...seat, categoryId: oldCatId })),\n })),\n }\n : s,\n ),\n });\n },\n });\n };\n\n const updateSelectedSectionsLabel = (sectionIds: string[], newLabel: string) => {\n if (sectionIds.length === 0) return;\n const v = freshVenue(store);\n if (!v) return;\n const targetIds = new Set(sectionIds);\n const previousLabels = new Map(\n v.sections\n .filter((section) => targetIds.has(section.id))\n .map((section) => [section.id, section.label]),\n );\n\n history.execute({\n description: `Rename ${sectionIds.length} section(s)`,\n execute: () => {\n const cur = freshVenue(store);\n if (!cur) return;\n setVenue(store, {\n ...cur,\n sections: cur.sections.map((section) =>\n targetIds.has(section.id) ? { ...section, label: newLabel } : section,\n ),\n });\n },\n undo: () => {\n const cur = freshVenue(store);\n if (!cur) return;\n setVenue(store, {\n ...cur,\n sections: cur.sections.map((section) =>\n targetIds.has(section.id)\n ? { ...section, label: previousLabels.get(section.id) ?? section.label }\n : section,\n ),\n });\n },\n });\n };\n\n const updateSelectedSectionsCategory = (sectionIds: string[], categoryId: string) => {\n if (sectionIds.length === 0) return;\n const v = freshVenue(store);\n if (!v) return;\n const targetIds = new Set(\n v.sections\n .filter((section) => sectionIds.includes(section.id) && !isStageSection(section))\n .map((section) => section.id),\n );\n if (targetIds.size === 0) return;\n const previousCategoryBySectionId = new Map(\n v.sections\n .filter((section) => targetIds.has(section.id))\n .map((section) => [section.id, section.categoryId]),\n );\n\n history.execute({\n description: `Change category for ${targetIds.size} section(s)`,\n execute: () => {\n const cur = freshVenue(store);\n if (!cur) return;\n setVenue(store, {\n ...cur,\n sections: cur.sections.map((section) => {\n if (!targetIds.has(section.id)) return section;\n return {\n ...section,\n categoryId,\n rows: section.rows.map((row) => ({\n ...row,\n seats: row.seats.map((seat) => ({ ...seat, categoryId })),\n })),\n };\n }),\n });\n },\n undo: () => {\n const cur = freshVenue(store);\n if (!cur) return;\n setVenue(store, {\n ...cur,\n sections: cur.sections.map((section) => {\n if (!targetIds.has(section.id)) return section;\n const previousCategoryId = previousCategoryBySectionId.get(section.id) ?? section.categoryId;\n return {\n ...section,\n categoryId: previousCategoryId,\n rows: section.rows.map((row) => ({\n ...row,\n seats: row.seats.map((seat) => ({ ...seat, categoryId: previousCategoryId })),\n })),\n };\n }),\n });\n },\n });\n };\n\n const deleteRow = (sectionId: string, rowId: string) => {\n const v = freshVenue(store);\n if (!v) return;\n const sec = v.sections.find((s) => s.id === sectionId);\n const removed = sec?.rows.find((r) => r.id === rowId);\n if (!removed) return;\n\n history.execute({\n description: `Delete row \"${removed.label}\"`,\n execute: () => {\n const cur = freshVenue(store);\n if (!cur) return;\n setVenue(store, {\n ...cur,\n sections: cur.sections.map((s) =>\n s.id === sectionId ? { ...s, rows: s.rows.filter((r) => r.id !== rowId) } : s,\n ),\n });\n },\n undo: () => {\n const cur = freshVenue(store);\n if (!cur) return;\n setVenue(store, {\n ...cur,\n sections: cur.sections.map((s) =>\n s.id === sectionId ? { ...s, rows: [...s.rows, removed] } : s,\n ),\n });\n },\n });\n };\n\n const deleteSeat = (sectionId: string, rowId: string, seatId: string) => {\n const v = freshVenue(store);\n if (!v) return;\n const sec = v.sections.find((s) => s.id === sectionId);\n const row = sec?.rows.find((r) => r.id === rowId);\n const removed = row?.seats.find((s) => s.id === seatId);\n if (!removed) return;\n\n history.execute({\n description: `Delete seat \"${removed.label}\"`,\n execute: () => {\n const cur = freshVenue(store);\n if (!cur) return;\n setVenue(store, {\n ...cur,\n sections: cur.sections.map((s) =>\n s.id === sectionId\n ? {\n ...s,\n rows: s.rows.map((r) =>\n r.id === rowId ? { ...r, seats: r.seats.filter((st) => st.id !== seatId) } : r,\n ),\n }\n : s,\n ),\n });\n const sel = store.getState().selectedSeatIds;\n if (sel.has(seatId)) store.getState().deselectSeat(seatId);\n },\n undo: () => {\n const cur = freshVenue(store);\n if (!cur) return;\n setVenue(store, {\n ...cur,\n sections: cur.sections.map((s) =>\n s.id === sectionId\n ? {\n ...s,\n rows: s.rows.map((r) =>\n r.id === rowId ? { ...r, seats: [...r.seats, removed] } : r,\n ),\n }\n : s,\n ),\n });\n },\n });\n };\n\n const deleteSelectedObjects = () => {\n if (selectedSeatIds.size === 0 && selectedSectionIds.size === 0) return;\n const v = freshVenue(store);\n if (!v) return;\n\n const selectedSectionIdSet = new Set(selectedSectionIds);\n const selectedSeatIdSet = new Set(selectedSeatIds);\n const previousVenue = v;\n const nextVenue: Venue = {\n ...v,\n sections: v.sections\n .filter((section) => !selectedSectionIdSet.has(section.id))\n .map((section) => ({\n ...section,\n rows: section.rows.map((row) => ({\n ...row,\n seats: row.seats.filter((seat) => !selectedSeatIdSet.has(seat.id)),\n })),\n })),\n tables: v.tables.map((table) => ({\n ...table,\n seats: table.seats.filter((seat) => !selectedSeatIdSet.has(seat.id)),\n })),\n };\n\n history.execute({\n description: \"Delete selected objects\",\n execute: () => {\n setVenue(store, nextVenue);\n store.getState().clearSelection();\n },\n undo: () => {\n setVenue(store, previousVenue);\n },\n });\n };\n\n const addSingleSeat = (sectionId: string) => {\n const v = freshVenue(store);\n if (!v) return;\n const sec = v.sections.find((s) => s.id === sectionId);\n if (!sec || isSectionSeatLayoutLocked(sec)) return;\n\n let targetRow: Row | undefined = sec.rows[sec.rows.length - 1];\n const newSeat = {\n id: generateId(),\n label: targetRow ? `${targetRow.seats.length + 1}` : \"1\",\n position: {\n x: targetRow ? (targetRow.seats.length > 0 ? targetRow.seats[targetRow.seats.length - 1].position.x + 20 : 0) : 0,\n y: targetRow ? targetRow.seats[0]?.position.y ?? 0 : 0,\n },\n status: \"available\" as const,\n categoryId: sec.categoryId,\n };\n\n if (!targetRow) {\n const newRow: Row = { id: generateId(), label: \"A\", seats: [newSeat] };\n history.execute({\n description: `Add seat to new row`,\n execute: () => {\n const cur = freshVenue(store);\n if (!cur) return;\n setVenue(store, {\n ...cur,\n sections: cur.sections.map((s) =>\n s.id === sectionId ? { ...s, rows: [...s.rows, newRow] } : s,\n ),\n });\n },\n undo: () => {\n const cur = freshVenue(store);\n if (!cur) return;\n setVenue(store, {\n ...cur,\n sections: cur.sections.map((s) =>\n s.id === sectionId ? { ...s, rows: s.rows.filter((r) => r.id !== newRow.id) } : s,\n ),\n });\n },\n });\n return;\n }\n\n const rowId = targetRow.id;\n history.execute({\n description: `Add seat to row \"${targetRow.label}\"`,\n execute: () => {\n const cur = freshVenue(store);\n if (!cur) return;\n setVenue(store, {\n ...cur,\n sections: cur.sections.map((s) =>\n s.id === sectionId\n ? {\n ...s,\n rows: s.rows.map((r) =>\n r.id === rowId ? { ...r, seats: [...r.seats, newSeat] } : r,\n ),\n }\n : s,\n ),\n });\n },\n undo: () => {\n const cur = freshVenue(store);\n if (!cur) return;\n setVenue(store, {\n ...cur,\n sections: cur.sections.map((s) =>\n s.id === sectionId\n ? {\n ...s,\n rows: s.rows.map((r) =>\n r.id === rowId ? { ...r, seats: r.seats.filter((st) => st.id !== newSeat.id) } : r,\n ),\n }\n : s,\n ),\n });\n },\n });\n };\n\n const updateSelectedSeatStatus = (statusId: string) => {\n if (selectedSeatIds.size === 0) return;\n const v = freshVenue(store);\n if (!v) return;\n\n const previousVenue = v;\n const nextVenue: Venue = {\n ...v,\n sections: v.sections.map((section) => ({\n ...section,\n rows: section.rows.map((row) => ({\n ...row,\n seats: row.seats.map((seat) =>\n selectedSeatIds.has(seat.id) ? { ...seat, status: statusId } : seat,\n ),\n })),\n })),\n tables: v.tables.map((table) => ({\n ...table,\n seats: table.seats.map((seat) =>\n selectedSeatIds.has(seat.id) ? { ...seat, status: statusId } : seat,\n ),\n })),\n };\n\n history.execute({\n description: `Set ${selectedSeatIds.size} seat(s) status`,\n execute: () => setVenue(store, nextVenue),\n undo: () => setVenue(store, previousVenue),\n });\n };\n\n if (!venue) {\n return (\n <div className=\"seatmap-editor__panel seatmap-editor__panel-muted\" style={style}>\n No venue loaded\n </div>\n );\n }\n\n const selectedSeatsEverywhere: Seat[] = [];\n for (const section of venue.sections) {\n for (const row of section.rows) {\n for (const seat of row.seats) {\n if (selectedSeatIds.has(seat.id)) selectedSeatsEverywhere.push(seat);\n }\n }\n }\n for (const table of venue.tables) {\n for (const seat of table.seats) {\n if (selectedSeatIds.has(seat.id)) selectedSeatsEverywhere.push(seat);\n }\n }\n\n const selectedSeatStatusIds = new Set(selectedSeatsEverywhere.map((seat) => seat.status));\n const isMixedSeatStatus = selectedSeatStatusIds.size > 1;\n const selectedSeatStatusId =\n selectedSeatStatusIds.size > 0 ? [...selectedSeatStatusIds][0] : AVAILABLE_STATUS_ID;\n const hasMultipleSelectedSections = selectedSections.length > 1;\n const selectedNonStageSections = selectedSections.filter((section) => !isStageSection(section));\n const hasSelectedStage = selectedSections.some((section) => isStageSection(section));\n const selectedSectionIdsList = selectedSections.map((section) => section.id);\n const selectedSectionLabels = new Set(selectedSections.map((section) => section.label));\n const selectedSectionCategoryIds = new Set(selectedNonStageSections.map((section) => section.categoryId));\n const sharedLabelValue = selectedSectionLabels.size === 1 ? selectedSections[0]?.label ?? \"\" : \"\";\n const sharedCategoryValue =\n selectedNonStageSections.length === 0\n ? \"\"\n : selectedSectionCategoryIds.size === 1\n ? selectedNonStageSections[0]?.categoryId ?? \"\"\n : \"__mixed__\";\n\n return (\n <div className=\"seatmap-editor__panel\" style={style}>\n {selectedSeatIds.size > 0 && (\n <div className=\"seatmap-editor__panel-section\">\n <div className=\"seatmap-editor__panel-section-header\">\n <div className=\"seatmap-editor__panel-title\">\n Seat Config ({selectedSeatIds.size} selected)\n </div>\n <button onClick={deleteSelectedObjects} className=\"seatmap-editor__panel-button seatmap-editor__panel-button--danger\" title=\"Delete selected objects\">\n Delete Selected\n </button>\n </div>\n\n <div className=\"seatmap-editor__panel-section\">\n <div className=\"seatmap-editor__panel-label\">Seat Status</div>\n <select\n className=\"seatmap-editor__panel-select\"\n value={isMixedSeatStatus ? \"__mixed__\" : selectedSeatStatusId}\n onChange={(e) => updateSelectedSeatStatus(e.target.value)}\n >\n {isMixedSeatStatus && (\n <option value=\"__mixed__\" disabled>\n Mixed\n </option>\n )}\n {venue.seatStatuses.map((status) => (\n <option key={status.id} value={status.id}>{status.name}</option>\n ))}\n </select>\n </div>\n\n <div className=\"seatmap-editor__panel-section\">\n <div className=\"seatmap-editor__panel-label\">Selected Seats ({selectedSeatIds.size})</div>\n <div className=\"seatmap-editor__panel-list seatmap-editor__panel-scroll seatmap-editor__panel-scroll--sm\">\n {Array.from(selectedSeatIds).map((seatId) => {\n let found: { seat: Seat; row: Row; section: Section } | null = null;\n for (const section of venue.sections) {\n for (const row of section.rows) {\n const seat = row.seats.find((s) => s.id === seatId);\n if (seat) {\n found = { seat, row, section };\n break;\n }\n }\n if (found) break;\n }\n\n if (!found) return null;\n const { seat, row, section } = found;\n return (\n <div\n key={seat.id}\n className=\"seatmap-editor__panel-list-item\"\n >\n <span className=\"seatmap-editor__panel-text seatmap-editor__panel-content-grow\">\n {section.label} · Row {row.label}, Seat {seat.label}\n </span>\n <button\n onClick={() => deleteSeat(section.id, row.id, seat.id)}\n className=\"seatmap-editor__panel-button seatmap-editor__panel-button--danger seatmap-editor__panel-button--tiny\"\n title=\"Delete seat\"\n >\n ✕\n </button>\n </div>\n );\n })}\n </div>\n </div>\n <div className=\"seatmap-editor__panel-divider\" />\n </div>\n )}\n\n {selectedSeatIds.size === 0 && selectedSections.length > 0 && (\n <div className=\"seatmap-editor__panel-section\">\n <div className=\"seatmap-editor__panel-section-header\">\n <div className=\"seatmap-editor__panel-title\">\n Section / Stage / Dancefloor Config{selectedSections.length > 1 ? ` (${selectedSections.length} selected)` : \"\"}\n </div>\n <button onClick={deleteSelectedObjects} className=\"seatmap-editor__panel-button seatmap-editor__panel-button--danger\" title=\"Delete selected objects\">\n Delete Selected\n </button>\n </div>\n\n {hasMultipleSelectedSections && (\n <div className=\"seatmap-editor__panel-section seatmap-editor__panel-section--card\">\n <div className=\"seatmap-editor__panel-section\">\n <div className=\"seatmap-editor__panel-label\">Label (apply to all selected)</div>\n <input\n className=\"seatmap-editor__panel-input\"\n value={sharedLabelValue}\n placeholder=\"Mixed labels\"\n onChange={(e) => updateSelectedSectionsLabel(selectedSectionIdsList, e.target.value)}\n />\n </div>\n <div>\n <div className=\"seatmap-editor__panel-label\">Category (apply to all selected)</div>\n <select\n className=\"seatmap-editor__panel-select\"\n value={sharedCategoryValue}\n onChange={(e) => updateSelectedSectionsCategory(selectedSectionIdsList, e.target.value)}\n disabled={selectedNonStageSections.length === 0}\n >\n {selectedNonStageSections.length === 0 && (\n <option value=\"\" disabled>Not applicable for stage</option>\n )}\n {sharedCategoryValue === \"__mixed__\" && (\n <option value=\"__mixed__\" disabled>Mixed</option>\n )}\n {venue.categories.map((cat: PricingCategory) => (\n <option key={cat.id} value={cat.id}>{cat.name}</option>\n ))}\n </select>\n {hasSelectedStage && (\n <div className=\"seatmap-editor__panel-label\">\n Stage selection is excluded from category changes.\n </div>\n )}\n </div>\n </div>\n )}\n\n {selectedSections.map((selectedSection) => (\n <div key={selectedSection.id} className=\"seatmap-editor__panel-section seatmap-editor__panel-section--card\">\n <div className=\"seatmap-editor__panel-section-header\">\n <div className=\"seatmap-editor__panel-muted\">\n ID: {selectedSection.id}\n </div>\n </div>\n\n {!hasMultipleSelectedSections && (\n <>\n <div className=\"seatmap-editor__panel-section\">\n <div className=\"seatmap-editor__panel-label\">Label</div>\n <input\n className=\"seatmap-editor__panel-input\"\n value={selectedSection.label}\n onChange={(e) => updateSectionLabel(selectedSection.id, e.target.value)}\n />\n </div>\n\n <div className=\"seatmap-editor__panel-section\">\n <div className=\"seatmap-editor__panel-label\">Category</div>\n <select\n className=\"seatmap-editor__panel-select\"\n value={selectedSection.categoryId}\n onChange={(e) => updateSectionCategory(selectedSection.id, e.target.value)}\n disabled={isStageSection(selectedSection)}\n >\n {isStageSection(selectedSection) && (\n <option value=\"\" disabled>Not applicable for stage</option>\n )}\n {venue.categories.map((cat: PricingCategory) => (\n <option key={cat.id} value={cat.id}>{cat.name}</option>\n ))}\n </select>\n {isStageSection(selectedSection) && (\n <div className=\"seatmap-editor__panel-label\">\n Stage does not use pricing category.\n </div>\n )}\n </div>\n </>\n )}\n\n {isStageSection(selectedSection) ? (\n <div className=\"seatmap-editor__panel-section seatmap-editor__panel-section--card seatmap-editor__panel-muted\">\n Stage areas do not support rows or seats.\n </div>\n ) : isDancefloorSection(selectedSection) ? (\n <div className=\"seatmap-editor__panel-section seatmap-editor__panel-section--card seatmap-editor__panel-muted\">\n Dancefloor works as one selectable area seat. Resize the section shape to adjust its footprint.\n </div>\n ) : (\n <>\n <div className=\"seatmap-editor__panel-section\">\n <div className=\"seatmap-editor__panel-section-header\">\n <div className=\"seatmap-editor__panel-label\">\n Rows ({selectedSection.rows.length}) ·{\" \"}\n {selectedSection.rows.reduce((t, r) => t + r.seats.length, 0)} seats\n </div>\n <button onClick={() => addSingleSeat(selectedSection.id)} className=\"seatmap-editor__panel-button\" title=\"Add a single seat to the last row\">\n + Seat\n </button>\n </div>\n </div>\n\n <div className=\"seatmap-editor__panel-list seatmap-editor__panel-scroll seatmap-editor__panel-scroll--md\">\n {selectedSection.rows.map((row) => (\n <div\n key={row.id}\n className=\"seatmap-editor__panel-list-item\"\n >\n <span className=\"seatmap-editor__panel-text seatmap-editor__panel-text--strong seatmap-editor__panel-text--mono-min\">Row {row.label}</span>\n <span className=\"seatmap-editor__panel-muted seatmap-editor__panel-content-grow\">{row.seats.length} seats</span>\n <button\n onClick={() => deleteRow(selectedSection.id, row.id)}\n className=\"seatmap-editor__panel-button seatmap-editor__panel-button--danger seatmap-editor__panel-button--tiny\"\n title={`Delete row ${row.label}`}\n >\n ✕\n </button>\n </div>\n ))}\n </div>\n </>\n )}\n </div>\n ))}\n </div>\n )}\n\n {selectedSections.length === 0 && selectedSeatIds.size === 0 && (\n <div>\n <div className=\"seatmap-editor__panel-title\">\n Venue Config\n </div>\n\n <div className=\"seatmap-editor__panel-section\">\n <div className=\"seatmap-editor__panel-label\">Venue Name</div>\n <input\n className=\"seatmap-editor__panel-input\"\n value={venue.name}\n onChange={(e) => updateVenueName(e.target.value)}\n />\n </div>\n\n <div className=\"seatmap-editor__panel-section\">\n <div className=\"seatmap-editor__panel-label\">Venue ID</div>\n <input\n className=\"seatmap-editor__panel-input\"\n value={venue.id}\n onChange={(e) => updateVenueId(e.target.value)}\n />\n </div>\n\n <div className=\"seatmap-editor__panel-muted seatmap-editor__panel-muted--small\">\n Stats: {venue.sections.length} sections ·{\" \"}\n {venue.sections.reduce((t, s) => t + s.rows.reduce((rt, r) => rt + r.seats.length, 0), 0)} seats\n </div>\n\n <div className=\"seatmap-editor__panel-divider\" />\n <div className=\"seatmap-editor__panel-label\">Background Image</div>\n {venue.backgroundImage ? (\n <div className=\"seatmap-editor__panel-section\">\n <div className=\"seatmap-editor__panel-img-preview\">\n <img src={venue.backgroundImage} alt=\"Background\" />\n </div>\n <div className=\"seatmap-editor__panel-label\">\n Opacity: {Math.round((venue.backgroundImageOpacity ?? 0.5) * 100)}%\n </div>\n <input\n type=\"range\"\n min={0}\n max={100}\n value={Math.round((venue.backgroundImageOpacity ?? 0.5) * 100)}\n onChange={(e) => onBackgroundOpacityChange?.(parseInt(e.target.value) / 100)}\n className=\"seatmap-editor__panel-range\"\n />\n <div className=\"seatmap-editor__panel-grid-2\">\n <div>\n <div className=\"seatmap-editor__panel-label\">Width</div>\n <input\n type=\"number\"\n min={1}\n step={1}\n value={Math.round(venue.backgroundImageWidth ?? venue.bounds.width)}\n onChange={(e) =>\n onBackgroundSizeChange?.({\n width: Math.max(1, Number.parseInt(e.target.value, 10) || 1),\n })\n }\n className=\"seatmap-editor__panel-input\"\n />\n </div>\n <div>\n <div className=\"seatmap-editor__panel-label\">Height</div>\n <input\n type=\"number\"\n min={1}\n step={1}\n value={Math.round(venue.backgroundImageHeight ?? venue.bounds.height)}\n onChange={(e) =>\n onBackgroundSizeChange?.({\n height: Math.max(1, Number.parseInt(e.target.value, 10) || 1),\n })\n }\n className=\"seatmap-editor__panel-input\"\n />\n </div>\n </div>\n <label className=\"seatmap-editor__panel-row seatmap-editor__panel-text\">\n <input\n type=\"checkbox\"\n className=\"seatmap-editor__panel-checkbox\"\n checked={venue.backgroundImageKeepAspectRatio ?? true}\n onChange={(e) => onBackgroundKeepAspectRatioChange?.(e.target.checked)}\n />\n Keep aspect ratio\n </label>\n <div className=\"seatmap-editor__panel-row\">\n <button onClick={onUploadBackground} className=\"seatmap-editor__panel-button\">\n Replace\n </button>\n <button onClick={onRemoveBackground} className=\"seatmap-editor__panel-button seatmap-editor__panel-button--danger\">\n Remove\n </button>\n </div>\n </div>\n ) : (\n <button\n onClick={onUploadBackground}\n className=\"seatmap-editor__panel-button seatmap-editor__panel-button--full\"\n >\n Upload Image\n </button>\n )}\n </div>\n )}\n </div>\n );\n}\n","import { useState, type CSSProperties } from \"react\";\nimport type { Venue, PricingCategory, CommandHistory } from \"@nex125/seatmap-core\";\nimport { generateId, isStageSection } from \"@nex125/seatmap-core\";\nimport type { SeatmapStore } from \"@nex125/seatmap-react\";\n\nexport interface CategoryManagerProps {\n venue: Venue | null;\n history: CommandHistory;\n store: SeatmapStore;\n fetchCategoryPrices?: (categoryIds: string[]) => Promise<Record<string, number>>;\n style?: CSSProperties;\n locale?: string;\n currency?: string;\n}\n\nfunction replaceCategoryInVenue(venue: Venue, categoryId: string, replacementCategoryId: string): Venue {\n return {\n ...venue,\n sections: venue.sections.map((section) => ({\n ...section,\n categoryId: isStageSection(section)\n ? \"\"\n : section.categoryId === categoryId\n ? replacementCategoryId\n : section.categoryId,\n rows: section.rows.map((row) => ({\n ...row,\n seats: row.seats.map((seat) =>\n seat.categoryId === categoryId ? { ...seat, categoryId: replacementCategoryId } : seat,\n ),\n })),\n })),\n gaAreas: venue.gaAreas.map((gaArea) =>\n gaArea.categoryId === categoryId ? { ...gaArea, categoryId: replacementCategoryId } : gaArea,\n ),\n tables: venue.tables.map((table) => ({\n ...table,\n categoryId: table.categoryId === categoryId ? replacementCategoryId : table.categoryId,\n seats: table.seats.map((seat) =>\n seat.categoryId === categoryId ? { ...seat, categoryId: replacementCategoryId } : seat,\n ),\n })),\n };\n}\n\nexport function CategoryManager({\n venue,\n history,\n store,\n fetchCategoryPrices,\n style,\n locale = \"en-US\",\n currency = \"BYN\",\n}: CategoryManagerProps) {\n const [newName, setNewName] = useState(\"\");\n const [newColor, setNewColor] = useState(\"#dfcd72\");\n const [editingId, setEditingId] = useState<string | null>(null);\n const [editingName, setEditingName] = useState(\"\");\n const [editingColor, setEditingColor] = useState(\"#dfcd72\");\n const [isPriceManagerOpen, setIsPriceManagerOpen] = useState(false);\n const [isFetchingPrices, setIsFetchingPrices] = useState(false);\n const [fetchError, setFetchError] = useState<string | null>(null);\n const [syncStatus, setSyncStatus] = useState<\"not-synced\" | \"syncing\" | \"synced\" | \"failed\">(\"not-synced\");\n const [overridePriceDrafts, setOverridePriceDrafts] = useState<Record<string, string>>({});\n\n if (!venue) return null;\n\n const formatPrice = (price?: number) =>\n new Intl.NumberFormat(locale, {\n style: \"currency\",\n currency,\n }).format(Number.isFinite(price) ? (price as number) : 0);\n\n const effectivePrice = (category: PricingCategory) => {\n if (category.isPriceOverridden && Number.isFinite(category.overriddenPrice)) {\n return category.overriddenPrice;\n }\n return Number.isFinite(category.backendPrice) ? category.backendPrice : 0;\n };\n\n const openPriceManager = () => {\n const initialDrafts: Record<string, string> = {};\n for (const category of venue.categories) {\n const value = category.overriddenPrice;\n initialDrafts[category.id] = Number.isFinite(value) ? String(value) : \"\";\n }\n setOverridePriceDrafts(initialDrafts);\n setFetchError(null);\n setSyncStatus(\"not-synced\");\n setIsPriceManagerOpen(true);\n };\n\n const addCategory = () => {\n if (!newName.trim()) return;\n const cat: PricingCategory = {\n id: generateId(),\n name: newName.trim(),\n color: newColor,\n };\n\n history.execute({\n description: `Add category \"${cat.name}\"`,\n execute: () => {\n const cur = store.getState().venue;\n if (!cur) return;\n store.getState().setVenue({ ...cur, categories: [...cur.categories, cat] });\n },\n undo: () => {\n const cur = store.getState().venue;\n if (!cur) return;\n store.getState().setVenue({ ...cur, categories: cur.categories.filter((c) => c.id !== cat.id) });\n },\n });\n\n setNewName(\"\");\n };\n\n const startEdit = (category: PricingCategory) => {\n setEditingId(category.id);\n setEditingName(category.name);\n setEditingColor(category.color);\n };\n\n const saveEdit = () => {\n if (!editingId) return;\n const trimmedName = editingName.trim();\n if (!trimmedName) return;\n\n history.execute({\n description: `Update category \"${trimmedName}\"`,\n execute: () => {\n const cur = store.getState().venue;\n if (!cur) return;\n store.getState().setVenue({\n ...cur,\n categories: cur.categories.map((category) =>\n category.id === editingId\n ? { ...category, name: trimmedName, color: editingColor }\n : category,\n ),\n });\n },\n undo: () => {\n const original = venue.categories.find((category) => category.id === editingId);\n const cur = store.getState().venue;\n if (!cur || !original) return;\n store.getState().setVenue({\n ...cur,\n categories: cur.categories.map((category) =>\n category.id === editingId ? original : category,\n ),\n });\n },\n });\n\n setEditingId(null);\n };\n\n const removeCategory = (catId: string) => {\n const current = store.getState().venue;\n if (!current || current.categories.length <= 1) return;\n const cat = current.categories.find((c) => c.id === catId);\n if (!cat) return;\n const replacementCategory = current.categories.find((c) => c.id !== catId);\n if (!replacementCategory) return;\n\n const previousVenue = current;\n const nextVenue = replaceCategoryInVenue(\n {\n ...previousVenue,\n categories: previousVenue.categories.filter((c) => c.id !== catId),\n },\n catId,\n replacementCategory.id,\n );\n\n history.execute({\n description: `Remove category \"${cat.name}\"`,\n execute: () => {\n store.getState().setVenue(nextVenue);\n },\n undo: () => {\n store.getState().setVenue(previousVenue);\n },\n });\n };\n\n const syncPricesFromBackend = async () => {\n if (!fetchCategoryPrices) return;\n setFetchError(null);\n setIsFetchingPrices(true);\n setSyncStatus(\"syncing\");\n try {\n const currentVenue = store.getState().venue;\n if (!currentVenue) return;\n const categoryIds = currentVenue.categories.map((category) => category.id);\n const backendPrices = await fetchCategoryPrices(categoryIds);\n const previousVenue = currentVenue;\n const nextVenue: Venue = {\n ...currentVenue,\n categories: currentVenue.categories.map((category) => {\n const nextPrice = backendPrices[category.id];\n return { ...category, backendPrice: Number.isFinite(nextPrice) ? nextPrice : 0 };\n }),\n };\n history.execute({\n description: \"Sync prices from backend\",\n execute: () => {\n const cur = store.getState().venue;\n if (!cur) return;\n store.getState().setVenue(nextVenue);\n },\n undo: () => {\n const cur = store.getState().venue;\n if (!cur) return;\n store.getState().setVenue(previousVenue);\n },\n });\n setSyncStatus(\"synced\");\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Failed to load prices.\";\n setFetchError(message);\n const currentVenue = store.getState().venue;\n if (currentVenue) {\n store.getState().setVenue({\n ...currentVenue,\n categories: currentVenue.categories.map((category) => ({\n ...category,\n backendPrice: 0,\n })),\n });\n }\n setSyncStatus(\"failed\");\n } finally {\n setIsFetchingPrices(false);\n }\n };\n\n const toggleOverride = (categoryId: string, enabled: boolean) => {\n const currentVenue = store.getState().venue;\n if (!currentVenue) return;\n const previousVenue = currentVenue;\n const nextVenue: Venue = {\n ...currentVenue,\n categories: currentVenue.categories.map((category) => {\n if (category.id !== categoryId) return category;\n if (!enabled) return { ...category, isPriceOverridden: false };\n const resolvedOverride =\n Number.isFinite(category.overriddenPrice)\n ? category.overriddenPrice\n : Number.isFinite(category.backendPrice)\n ? category.backendPrice\n : 0;\n return {\n ...category,\n isPriceOverridden: true,\n overriddenPrice: Number.isFinite(resolvedOverride) ? resolvedOverride : category.overriddenPrice,\n };\n }),\n };\n history.execute({\n description: `${enabled ? \"Enable\" : \"Disable\"} price override`,\n execute: () => {\n const cur = store.getState().venue;\n if (!cur) return;\n store.getState().setVenue(nextVenue);\n },\n undo: () => {\n const cur = store.getState().venue;\n if (!cur) return;\n store.getState().setVenue(previousVenue);\n },\n });\n };\n\n const commitOverridePrice = (categoryId: string) => {\n const raw = overridePriceDrafts[categoryId] ?? \"\";\n const parsed = Number.parseFloat(raw);\n if (!Number.isFinite(parsed) || parsed < 0) {\n return;\n }\n const currentVenue = store.getState().venue;\n if (!currentVenue) return;\n const previousVenue = currentVenue;\n const nextVenue: Venue = {\n ...currentVenue,\n categories: currentVenue.categories.map((category) =>\n category.id === categoryId\n ? { ...category, isPriceOverridden: true, overriddenPrice: parsed }\n : category,\n ),\n };\n history.execute({\n description: \"Update category override price\",\n execute: () => {\n const cur = store.getState().venue;\n if (!cur) return;\n store.getState().setVenue(nextVenue);\n },\n undo: () => {\n const cur = store.getState().venue;\n if (!cur) return;\n store.getState().setVenue(previousVenue);\n },\n });\n };\n\n const resetOverrideDraft = (category: PricingCategory) => {\n const value = Number.isFinite(category.overriddenPrice) ? category.overriddenPrice : undefined;\n setOverridePriceDrafts((current) => ({\n ...current,\n [category.id]: Number.isFinite(value) ? String(value) : \"\",\n }));\n };\n\n const isDraftChanged = (category: PricingCategory) => {\n const draft = overridePriceDrafts[category.id] ?? \"\";\n const persisted = Number.isFinite(category.overriddenPrice) ? String(category.overriddenPrice) : \"\";\n return draft !== persisted;\n };\n\n const adjustOverrideDraft = (categoryId: string, delta: number) => {\n setOverridePriceDrafts((current) => {\n const raw = current[categoryId] ?? \"\";\n const parsed = Number.parseFloat(raw);\n const baseValue = Number.isFinite(parsed) ? parsed : 0;\n const nextValue = Math.max(0, baseValue + delta);\n return {\n ...current,\n [categoryId]: nextValue.toFixed(2),\n };\n });\n };\n\n return (\n <div className=\"seatmap-editor__panel\" style={style}>\n <div className=\"seatmap-editor__panel-title\">\n Pricing categories\n </div>\n\n {venue.categories.map((cat: PricingCategory) => {\n const isEditing = editingId === cat.id;\n return (\n <div\n key={cat.id}\n className=\"seatmap-editor__panel-list-item\"\n >\n <span className=\"seatmap-editor__color-picker-shell\">\n <span\n aria-hidden=\"true\"\n className=\"seatmap-editor__color-picker-dot\"\n style={{ background: isEditing ? editingColor : cat.color }}\n />\n <input\n type=\"color\"\n value={isEditing ? editingColor : cat.color}\n onChange={(e) => isEditing && setEditingColor(e.target.value)}\n disabled={!isEditing}\n className=\"seatmap-editor__color-picker-input\"\n data-editable={isEditing ? \"true\" : \"false\"}\n title={isEditing ? \"Pick category color\" : \"Enable edit mode to change color\"}\n />\n </span>\n {isEditing ? (\n <input\n value={editingName}\n onChange={(e) => setEditingName(e.target.value)}\n onKeyDown={(e) => e.key === \"Enter\" && saveEdit()}\n className=\"seatmap-editor__panel-input seatmap-editor__panel-input--grow\"\n />\n ) : (\n <div className=\"seatmap-editor__panel-text seatmap-editor__panel-text--truncate\">\n {cat.name}\n </div>\n )}\n {isEditing ? (\n <>\n <button onClick={saveEdit} className=\"seatmap-editor__panel-button seatmap-editor__panel-button--tiny\">\n Save\n </button>\n <button onClick={() => setEditingId(null)} className=\"seatmap-editor__panel-button seatmap-editor__panel-button--tiny\">\n Cancel\n </button>\n </>\n ) : (\n <>\n <span className=\"seatmap-editor__panel-muted seatmap-editor__panel-price\">\n {formatPrice(effectivePrice(cat))}\n </span>\n <button onClick={() => startEdit(cat)} className=\"seatmap-editor__panel-button seatmap-editor__panel-button--tiny\">\n Edit\n </button>\n <button\n onClick={() => removeCategory(cat.id)}\n className=\"seatmap-editor__panel-button seatmap-editor__panel-button--tiny\"\n disabled={venue.categories.length <= 1}\n title={venue.categories.length <= 1 ? \"At least one category is required\" : \"Delete category\"}\n >\n ✕\n </button>\n </>\n )}\n </div>\n );\n })}\n\n <div className=\"seatmap-editor__panel-row seatmap-editor__panel-row--spaced\">\n <span className=\"seatmap-editor__color-picker-shell seatmap-editor__color-picker-shell--lg\">\n <span aria-hidden=\"true\" className=\"seatmap-editor__color-picker-dot\" style={{ background: newColor }} />\n <input\n type=\"color\"\n value={newColor}\n onChange={(e) => setNewColor(e.target.value)}\n className=\"seatmap-editor__color-picker-input\"\n data-editable=\"true\"\n title=\"Pick new category color\"\n />\n </span>\n <input\n placeholder=\"Category name\"\n value={newName}\n onChange={(e) => setNewName(e.target.value)}\n onKeyDown={(e) => e.key === \"Enter\" && addCategory()}\n className=\"seatmap-editor__panel-input seatmap-editor__panel-input--grow\"\n />\n <button onClick={addCategory} className=\"seatmap-editor__panel-button\">\n Add\n </button>\n </div>\n\n <div className=\"seatmap-editor__panel-actions-end\">\n <button onClick={openPriceManager} className=\"seatmap-editor__panel-button\">\n Manage prices\n </button>\n </div>\n\n {isPriceManagerOpen && (\n <div\n className=\"seatmap-editor__modal-backdrop\"\n onClick={() => setIsPriceManagerOpen(false)}\n >\n <div\n className=\"seatmap-editor__modal\"\n onClick={(event) => event.stopPropagation()}\n >\n <div className=\"seatmap-editor__modal-header\">\n <div className=\"seatmap-editor__panel-title\">\n Category prices\n </div>\n <div className=\"seatmap-editor__modal-actions\">\n <button\n onClick={syncPricesFromBackend}\n disabled={!fetchCategoryPrices || isFetchingPrices}\n className=\"seatmap-editor__panel-button\"\n title={fetchCategoryPrices ? \"Load latest prices from backend\" : \"Backend price sync is not configured\"}\n >\n {isFetchingPrices ? \"Syncing...\" : \"Sync with backend\"}\n </button>\n <button onClick={() => setIsPriceManagerOpen(false)} className=\"seatmap-editor__panel-button\">\n Close\n </button>\n </div>\n </div>\n\n <div className=\"seatmap-editor__panel-muted seatmap-editor__panel-muted--spaced\">\n Backend prices are read-only. Override temporarily uses a custom category price for this seatmap.\n </div>\n <div\n className={\n syncStatus === \"synced\"\n ? \"seatmap-editor__status-line seatmap-editor__status-line--success\"\n : syncStatus === \"failed\"\n ? \"seatmap-editor__status-line seatmap-editor__status-line--error\"\n : \"seatmap-editor__status-line seatmap-editor__status-line--idle\"\n }\n >\n Sync status:{\" \"}\n {syncStatus === \"not-synced\"\n ? \"Not synced\"\n : syncStatus === \"syncing\"\n ? \"Syncing...\"\n : syncStatus === \"synced\"\n ? \"Synced\"\n : \"Error\"}\n </div>\n {fetchError && (\n <div className=\"seatmap-editor__status-line seatmap-editor__status-line--error\">\n {fetchError}\n </div>\n )}\n\n <div className=\"seatmap-editor__table-grid\">\n <div className=\"seatmap-editor__table-head\">Category</div>\n <div className=\"seatmap-editor__table-head\">Backend</div>\n <div className=\"seatmap-editor__table-head\">Override</div>\n <div className=\"seatmap-editor__table-head\">Override price</div>\n <div className=\"seatmap-editor__table-head\">Effective price</div>\n\n {venue.categories.map((category) => (\n <div\n key={category.id}\n className=\"seatmap-editor__table-row\"\n >\n <div className=\"seatmap-editor__table-category-cell\">\n <span\n className=\"seatmap-editor__table-category-swatch\"\n aria-hidden=\"true\"\n style={{ background: category.color }}\n />\n <span className=\"seatmap-editor__table-category-name\">{category.name}</span>\n </div>\n <span className=\"seatmap-editor__table-amount\">\n {formatPrice(category.backendPrice)}\n </span>\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={Boolean(category.isPriceOverridden)}\n onClick={() => toggleOverride(category.id, !category.isPriceOverridden)}\n className={`seatmap-editor__switch-track${category.isPriceOverridden ? \" is-checked\" : \"\"}`}\n title={category.isPriceOverridden ? \"Disable override\" : \"Enable override\"}\n >\n <span className=\"seatmap-editor__switch-thumb\" />\n </button>\n <div className=\"seatmap-editor__override-editor\">\n <input\n type=\"text\"\n inputMode=\"decimal\"\n value={overridePriceDrafts[category.id] ?? \"\"}\n disabled={!category.isPriceOverridden}\n onChange={(event) =>\n setOverridePriceDrafts((current) => ({ ...current, [category.id]: event.target.value }))\n }\n onKeyDown={(event) => {\n if (event.key === \"Enter\") {\n commitOverridePrice(category.id);\n }\n if (event.key === \"Escape\") {\n resetOverrideDraft(category);\n }\n }}\n className={`seatmap-editor__override-input${category.isPriceOverridden ? \"\" : \" is-disabled\"}`}\n />\n {category.isPriceOverridden && (\n <div className=\"seatmap-editor__override-actions\">\n <button\n type=\"button\"\n onClick={() => adjustOverrideDraft(category.id, 0.01)}\n className=\"seatmap-editor__table-action-button\"\n title=\"Increase override price\"\n >\n +\n </button>\n <button\n type=\"button\"\n onClick={() => adjustOverrideDraft(category.id, -0.01)}\n className=\"seatmap-editor__table-action-button\"\n title=\"Decrease override price\"\n >\n -\n </button>\n <button\n type=\"button\"\n onClick={() => commitOverridePrice(category.id)}\n disabled={!isDraftChanged(category)}\n className=\"seatmap-editor__table-action-button seatmap-editor__table-action-button--apply\"\n title=\"Apply override price\"\n >\n ✓\n </button>\n <button\n type=\"button\"\n onClick={() => resetOverrideDraft(category)}\n disabled={!isDraftChanged(category)}\n className=\"seatmap-editor__table-action-button seatmap-editor__table-action-button--reset\"\n title=\"Revert override changes\"\n >\n ✕\n </button>\n </div>\n )}\n </div>\n <span className=\"seatmap-editor__table-effective-price\">\n {formatPrice(effectivePrice(category))}\n </span>\n </div>\n ))}\n </div>\n </div>\n </div>\n )}\n </div>\n );\n}\n","import type { CSSProperties } from \"react\";\nimport type { Venue, Section } from \"@nex125/seatmap-core\";\n\nexport interface LayerPanelProps {\n venue: Venue | null;\n selectedSeatIds: Set<string>;\n selectedSectionIds: Set<string>;\n onSelectSection: (sectionId: string, options?: { multi?: boolean }) => void;\n style?: CSSProperties;\n}\n\nexport function LayerPanel({\n venue,\n selectedSeatIds,\n selectedSectionIds: storeSelectedSectionIds,\n onSelectSection,\n style,\n}: LayerPanelProps) {\n if (!venue) return null;\n\n const findSectionForSeat = (seatId: string): string | null => {\n for (const section of venue.sections) {\n for (const row of section.rows) {\n if (row.seats.some((s) => s.id === seatId)) return section.id;\n }\n }\n return null;\n };\n\n const selectedSectionIdFromSeats = selectedSeatIds.size > 0\n ? findSectionForSeat([...selectedSeatIds][0]!)\n : null;\n\n return (\n <div className=\"seatmap-editor__panel\" style={style}>\n <div className=\"seatmap-editor__panel-title\">\n Layers\n </div>\n\n <div\n className=\"seatmap-editor__panel-list\"\n role=\"listbox\"\n aria-label=\"Venue sections\"\n aria-multiselectable=\"true\"\n >\n {venue.sections.map((section: Section) => {\n const seatCount = section.rows.reduce((t, r) => t + r.seats.length, 0);\n const isActive = storeSelectedSectionIds.has(section.id) || section.id === selectedSectionIdFromSeats;\n const catColor =\n venue.categories.find((c) => c.id === section.categoryId)?.color\n ?? \"var(--seatmap-editor-text-muted, #666)\";\n\n return (\n <button\n key={section.id}\n type=\"button\"\n role=\"option\"\n aria-selected={isActive}\n onClick={(event) =>\n onSelectSection(section.id, {\n multi: event.ctrlKey || event.metaKey,\n })\n }\n className={`seatmap-editor__panel-list-item seatmap-editor__panel-list-item--interactive seatmap-editor__panel-list-item--interactive-button${isActive ? \" is-active\" : \"\"}`}\n >\n <div\n className=\"seatmap-editor__table-category-swatch\"\n aria-hidden=\"true\"\n style={{ background: catColor }}\n />\n <div className=\"seatmap-editor__panel-content-grow\">\n <div className=\"seatmap-editor__panel-text seatmap-editor__panel-text--truncate\">\n {section.label}\n </div>\n <div className=\"seatmap-editor__panel-muted seatmap-editor__panel-muted--small\">\n {section.rows.length} rows, {seatCount} seats\n </div>\n </div>\n </button>\n );\n })}\n </div>\n\n {venue.sections.length === 0 && (\n <div className=\"seatmap-editor__panel-muted\">\n No sections yet. Use the Add Section tool.\n </div>\n )}\n </div>\n );\n}\n","import { useMemo, useState, type CSSProperties } from \"react\";\nimport type { Venue, CommandHistory, SeatStatusDefinition } from \"@nex125/seatmap-core\";\nimport { AVAILABLE_STATUS_ID, generateId } from \"@nex125/seatmap-core\";\nimport type { SeatmapStore } from \"@nex125/seatmap-react\";\n\nexport interface StatusManagerProps {\n venue: Venue | null;\n history: CommandHistory;\n store: SeatmapStore;\n style?: CSSProperties;\n}\n\nfunction sanitizeStatusId(name: string): string {\n const slug = name.trim().toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-+|-+$/g, \"\");\n return slug || generateId();\n}\n\nfunction replaceStatusInVenue(venue: Venue, statusId: string, replacementStatusId: string): Venue {\n return {\n ...venue,\n sections: venue.sections.map((section) => ({\n ...section,\n rows: section.rows.map((row) => ({\n ...row,\n seats: row.seats.map((seat) =>\n seat.status === statusId ? { ...seat, status: replacementStatusId } : seat,\n ),\n })),\n })),\n tables: venue.tables.map((table) => ({\n ...table,\n seats: table.seats.map((seat) =>\n seat.status === statusId ? { ...seat, status: replacementStatusId } : seat,\n ),\n })),\n };\n}\n\nexport function StatusManager({ venue, history, store, style }: StatusManagerProps) {\n const [newName, setNewName] = useState(\"\");\n const [newColor, setNewColor] = useState(\"#dfcd72\");\n const [editingId, setEditingId] = useState<string | null>(null);\n const [editingName, setEditingName] = useState(\"\");\n const [editingColor, setEditingColor] = useState(\"#dfcd72\");\n\n const statusIds = useMemo(() => new Set(venue?.seatStatuses.map((status) => status.id) ?? []), [venue]);\n\n if (!venue) return null;\n\n const addStatus = () => {\n const trimmedName = newName.trim();\n if (!trimmedName) return;\n\n let candidateId = sanitizeStatusId(trimmedName);\n while (statusIds.has(candidateId) || candidateId === \"selected\" || candidateId === \"hovered\") {\n candidateId = `${sanitizeStatusId(trimmedName)}-${generateId().slice(-4)}`;\n }\n\n const newStatus: SeatStatusDefinition = {\n id: candidateId,\n name: trimmedName,\n color: newColor,\n };\n\n history.execute({\n description: `Add status \"${newStatus.name}\"`,\n execute: () => {\n const current = store.getState().venue;\n if (!current) return;\n store.getState().setVenue({ ...current, seatStatuses: [...current.seatStatuses, newStatus] });\n },\n undo: () => {\n const current = store.getState().venue;\n if (!current) return;\n store.getState().setVenue({\n ...current,\n seatStatuses: current.seatStatuses.filter((status) => status.id !== newStatus.id),\n });\n },\n });\n\n setNewName(\"\");\n };\n\n const startEdit = (status: SeatStatusDefinition) => {\n setEditingId(status.id);\n setEditingName(status.name);\n setEditingColor(status.color);\n };\n\n const saveEdit = () => {\n if (!editingId) return;\n const trimmedName = editingName.trim();\n if (!trimmedName) return;\n\n history.execute({\n description: `Update status \"${trimmedName}\"`,\n execute: () => {\n const current = store.getState().venue;\n if (!current) return;\n store.getState().setVenue({\n ...current,\n seatStatuses: current.seatStatuses.map((status) =>\n status.id === editingId\n ? { ...status, name: trimmedName, color: editingColor }\n : status,\n ),\n });\n },\n undo: () => {\n const original = venue.seatStatuses.find((status) => status.id === editingId);\n const current = store.getState().venue;\n if (!current || !original) return;\n store.getState().setVenue({\n ...current,\n seatStatuses: current.seatStatuses.map((status) =>\n status.id === editingId ? original : status,\n ),\n });\n },\n });\n\n setEditingId(null);\n };\n\n const removeStatus = (statusId: string) => {\n if (statusId === AVAILABLE_STATUS_ID) return;\n const current = store.getState().venue;\n if (!current) return;\n const status = current.seatStatuses.find((s) => s.id === statusId);\n if (!status) return;\n\n const previousVenue = current;\n const nextVenue = replaceStatusInVenue(\n {\n ...previousVenue,\n seatStatuses: previousVenue.seatStatuses.filter((s) => s.id !== statusId),\n },\n statusId,\n AVAILABLE_STATUS_ID,\n );\n\n history.execute({\n description: `Remove status \"${status.name}\"`,\n execute: () => {\n store.getState().setVenue(nextVenue);\n },\n undo: () => {\n store.getState().setVenue(previousVenue);\n },\n });\n };\n\n return (\n <div className=\"seatmap-editor__panel\" style={style}>\n <div className=\"seatmap-editor__panel-title\">\n Seat Statuses\n </div>\n\n {venue.seatStatuses.map((status) => {\n const isEditing = editingId === status.id;\n return (\n <div\n key={status.id}\n className=\"seatmap-editor__panel-list-item\"\n >\n <span className=\"seatmap-editor__color-picker-shell\">\n <span\n aria-hidden=\"true\"\n className=\"seatmap-editor__color-picker-dot\"\n style={{ background: isEditing ? editingColor : status.color }}\n />\n <input\n type=\"color\"\n value={isEditing ? editingColor : status.color}\n onChange={(e) => isEditing && setEditingColor(e.target.value)}\n disabled={!isEditing}\n className=\"seatmap-editor__color-picker-input\"\n data-editable={isEditing ? \"true\" : \"false\"}\n title={isEditing ? \"Pick status color\" : \"Enable edit to change color\"}\n />\n </span>\n {isEditing ? (\n <input\n value={editingName}\n onChange={(e) => setEditingName(e.target.value)}\n onKeyDown={(e) => e.key === \"Enter\" && saveEdit()}\n className=\"seatmap-editor__panel-input seatmap-editor__panel-input--grow\"\n />\n ) : (\n <div className=\"seatmap-editor__panel-text seatmap-editor__panel-content-grow\">\n {status.name}\n </div>\n )}\n {isEditing ? (\n <>\n <button onClick={saveEdit} className=\"seatmap-editor__panel-button seatmap-editor__panel-button--tiny\">\n Save\n </button>\n <button onClick={() => setEditingId(null)} className=\"seatmap-editor__panel-button seatmap-editor__panel-button--tiny\">\n Cancel\n </button>\n </>\n ) : (\n <>\n <button onClick={() => startEdit(status)} className=\"seatmap-editor__panel-button seatmap-editor__panel-button--tiny\">\n Edit\n </button>\n <button\n onClick={() => removeStatus(status.id)}\n className=\"seatmap-editor__panel-button seatmap-editor__panel-button--tiny\"\n disabled={status.id === AVAILABLE_STATUS_ID}\n title={status.id === AVAILABLE_STATUS_ID ? \"Available status cannot be removed\" : \"Delete status\"}\n >\n ✕\n </button>\n </>\n )}\n </div>\n );\n })}\n\n <div className=\"seatmap-editor__panel-row seatmap-editor__panel-row--spaced\">\n <span className=\"seatmap-editor__color-picker-shell seatmap-editor__color-picker-shell--lg\">\n <span aria-hidden=\"true\" className=\"seatmap-editor__color-picker-dot\" style={{ background: newColor }} />\n <input\n type=\"color\"\n value={newColor}\n onChange={(e) => setNewColor(e.target.value)}\n className=\"seatmap-editor__color-picker-input\"\n data-editable=\"true\"\n title=\"Pick new status color\"\n />\n </span>\n <input\n placeholder=\"Status name\"\n value={newName}\n onChange={(e) => setNewName(e.target.value)}\n onKeyDown={(e) => e.key === \"Enter\" && addStatus()}\n className=\"seatmap-editor__panel-input seatmap-editor__panel-input--grow\"\n />\n <button onClick={addStatus} className=\"seatmap-editor__panel-button\">\n Add\n </button>\n </div>\n </div>\n );\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport type { SectionKind, Venue, Vec2 } from \"@nex125/seatmap-core\";\nimport { CommandHistory, venueAABB, serializeVenue, deserializeVenue, type Viewport } from \"@nex125/seatmap-core\";\nimport { SeatmapProvider, SeatmapCanvas, useSeatmapContext } from \"@nex125/seatmap-react\";\nimport { useStore } from \"zustand\";\nimport { PanTool } from \"./tools/PanTool\";\nimport { SelectTool } from \"./tools/SelectTool\";\nimport { AddSectionTool, type SectionCreationMode } from \"./tools/AddSectionTool\";\nimport { AddRowTool } from \"./tools/AddRowTool\";\nimport { AddSeatTool } from \"./tools/AddSeatTool\";\nimport type { BaseTool, ToolPointerEvent } from \"./tools/BaseTool\";\nimport { Toolbar } from \"./panels/Toolbar\";\nimport { PropertyPanel } from \"./panels/PropertyPanel\";\nimport { CategoryManager } from \"./panels/CategoryManager\";\nimport { LayerPanel } from \"./panels/LayerPanel\";\nimport { StatusManager } from \"./panels/StatusManager\";\nimport \"./SeatmapEditor.css\";\n\nexport interface SeatmapEditorProps {\n venue?: Venue;\n onChange?: (venue: Venue) => void;\n onSave?: (venue: Venue, serializedVenue: string) => void;\n fetchCategoryPrices?: (categoryIds: string[]) => Promise<Record<string, number>>;\n className?: string;\n}\n\nfunction fitBackgroundToBounds(\n boundsWidth: number,\n boundsHeight: number,\n imageWidth: number,\n imageHeight: number,\n) {\n const safeImageWidth = Math.max(1, imageWidth);\n const safeImageHeight = Math.max(1, imageHeight);\n const scale = Math.min(boundsWidth / safeImageWidth, boundsHeight / safeImageHeight);\n return {\n width: Math.max(1, safeImageWidth * scale),\n height: Math.max(1, safeImageHeight * scale),\n aspectRatio: safeImageWidth / safeImageHeight,\n };\n}\n\nfunction easeOutBack(t: number, overshoot: number): number {\n const c1 = Math.max(0, overshoot);\n const c3 = c1 + 1;\n const p = t - 1;\n return 1 + c3 * p * p * p + c1 * p * p;\n}\n\nfunction getViewportStateForFitBounds(\n viewport: Viewport,\n aabb: { minX: number; minY: number; maxX: number; maxY: number },\n padding = 40,\n): { x: number; y: number; zoom: number } | null {\n const contentW = aabb.maxX - aabb.minX;\n const contentH = aabb.maxY - aabb.minY;\n if (contentW <= 0 || contentH <= 0) return null;\n if (viewport.screenWidth <= 0 || viewport.screenHeight <= 0) return null;\n\n const minZoom = 0.05;\n const maxZoom = 4;\n const scaleX = (viewport.screenWidth - padding * 2) / contentW;\n const scaleY = (viewport.screenHeight - padding * 2) / contentH;\n const zoom = Math.min(maxZoom, Math.max(minZoom, Math.min(scaleX, scaleY)));\n const x = -(aabb.minX + contentW / 2) + viewport.screenWidth / (2 * zoom);\n const y = -(aabb.minY + contentH / 2) + viewport.screenHeight / (2 * zoom);\n return { x, y, zoom };\n}\n\nfunction getBackgroundRectInWorld(venue: Venue) {\n const width = Math.max(1, venue.backgroundImageWidth ?? venue.bounds.width);\n const height = Math.max(1, venue.backgroundImageHeight ?? venue.bounds.height);\n const centeredX = (venue.bounds.width - width) / 2;\n const centeredY = (venue.bounds.height - height) / 2;\n return {\n x: venue.backgroundImageX ?? centeredX,\n y: venue.backgroundImageY ?? centeredY,\n width,\n height,\n };\n}\n\ntype ResizeHandle = \"nw\" | \"n\" | \"ne\" | \"e\" | \"se\" | \"s\" | \"sw\" | \"w\";\ntype CanvasGridStyle = \"solid\" | \"dashed\" | \"dotted\";\ntype SectionGridStyle = \"dots\" | \"cross\";\ntype RowDirectionArrowMode = \"row-direction\" | \"viewer-direction\";\ntype MotionSettings = {\n sectionDrawJelly: number;\n fitViewJelly: number;\n panInertiaJelly: number;\n pointerScrollZoomJelly: number;\n useAdvancedMotion: boolean;\n sectionDrawDurationMs: number;\n sectionDrawCenterPullPct: number;\n sectionDrawZoomBoostPct: number;\n sectionDrawOvershootPct: number;\n fitViewDurationMs: number;\n fitViewOvershootPct: number;\n panInertiaCarryPct: number;\n panInertiaFrictionPct: number;\n panInertiaMinSpeedMilli: number;\n panVelocityBlendPct: number;\n panStopDeltaMilli: number;\n panReleaseIdleMs: number;\n pointerScrollZoomDurationMs: number;\n pointerScrollZoomStrengthPct: number;\n pointerScrollZoomDeltaDivisor: number;\n};\n\nconst MOTION_SETTINGS_STORAGE_KEY = \"seatmap-editor-motion-settings-v1\";\nconst DEFAULT_MOTION_SETTINGS: MotionSettings = {\n sectionDrawJelly: 46,\n fitViewJelly: 52,\n panInertiaJelly: 55,\n pointerScrollZoomJelly: 52,\n useAdvancedMotion: false,\n sectionDrawDurationMs: 620,\n sectionDrawCenterPullPct: 22,\n sectionDrawZoomBoostPct: 5,\n sectionDrawOvershootPct: 72,\n fitViewDurationMs: 680,\n fitViewOvershootPct: 90,\n panInertiaCarryPct: 73,\n panInertiaFrictionPct: 92,\n panInertiaMinSpeedMilli: 10,\n panVelocityBlendPct: 30,\n panStopDeltaMilli: 300,\n panReleaseIdleMs: 90,\n pointerScrollZoomDurationMs: 180,\n pointerScrollZoomStrengthPct: 22,\n pointerScrollZoomDeltaDivisor: 680,\n};\n\nfunction clampPercent(n: number): number {\n return Math.max(0, Math.min(100, n));\n}\n\nfunction clampRange(n: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, n));\n}\n\nfunction loadMotionSettings(): MotionSettings {\n if (typeof window === \"undefined\") return DEFAULT_MOTION_SETTINGS;\n try {\n const raw = window.localStorage.getItem(MOTION_SETTINGS_STORAGE_KEY);\n if (!raw) return DEFAULT_MOTION_SETTINGS;\n const parsed = JSON.parse(raw) as Partial<MotionSettings>;\n return {\n sectionDrawJelly: clampPercent(Number(parsed.sectionDrawJelly ?? DEFAULT_MOTION_SETTINGS.sectionDrawJelly)),\n fitViewJelly: clampPercent(Number(parsed.fitViewJelly ?? DEFAULT_MOTION_SETTINGS.fitViewJelly)),\n panInertiaJelly: clampPercent(Number(parsed.panInertiaJelly ?? DEFAULT_MOTION_SETTINGS.panInertiaJelly)),\n pointerScrollZoomJelly: clampPercent(\n Number(parsed.pointerScrollZoomJelly ?? DEFAULT_MOTION_SETTINGS.pointerScrollZoomJelly),\n ),\n useAdvancedMotion: Boolean(parsed.useAdvancedMotion ?? DEFAULT_MOTION_SETTINGS.useAdvancedMotion),\n sectionDrawDurationMs: clampRange(\n Number(parsed.sectionDrawDurationMs ?? DEFAULT_MOTION_SETTINGS.sectionDrawDurationMs),\n 100,\n 3000,\n ),\n sectionDrawCenterPullPct: clampRange(\n Number(parsed.sectionDrawCenterPullPct ?? DEFAULT_MOTION_SETTINGS.sectionDrawCenterPullPct),\n 0,\n 100,\n ),\n sectionDrawZoomBoostPct: clampRange(\n Number(parsed.sectionDrawZoomBoostPct ?? DEFAULT_MOTION_SETTINGS.sectionDrawZoomBoostPct),\n 0,\n 50,\n ),\n sectionDrawOvershootPct: clampRange(\n Number(parsed.sectionDrawOvershootPct ?? DEFAULT_MOTION_SETTINGS.sectionDrawOvershootPct),\n 0,\n 180,\n ),\n fitViewDurationMs: clampRange(\n Number(parsed.fitViewDurationMs ?? DEFAULT_MOTION_SETTINGS.fitViewDurationMs),\n 100,\n 3000,\n ),\n fitViewOvershootPct: clampRange(\n Number(parsed.fitViewOvershootPct ?? DEFAULT_MOTION_SETTINGS.fitViewOvershootPct),\n 0,\n 180,\n ),\n panInertiaCarryPct: clampRange(\n Number(parsed.panInertiaCarryPct ?? DEFAULT_MOTION_SETTINGS.panInertiaCarryPct),\n 0,\n 95,\n ),\n panInertiaFrictionPct: clampRange(\n Number(parsed.panInertiaFrictionPct ?? DEFAULT_MOTION_SETTINGS.panInertiaFrictionPct),\n 70,\n 99,\n ),\n panInertiaMinSpeedMilli: clampRange(\n Number(parsed.panInertiaMinSpeedMilli ?? DEFAULT_MOTION_SETTINGS.panInertiaMinSpeedMilli),\n 1,\n 50,\n ),\n panVelocityBlendPct: clampRange(\n Number(parsed.panVelocityBlendPct ?? DEFAULT_MOTION_SETTINGS.panVelocityBlendPct),\n 5,\n 95,\n ),\n panStopDeltaMilli: clampRange(\n Number(parsed.panStopDeltaMilli ?? DEFAULT_MOTION_SETTINGS.panStopDeltaMilli),\n 0,\n 4000,\n ),\n panReleaseIdleMs: clampRange(\n Number(parsed.panReleaseIdleMs ?? DEFAULT_MOTION_SETTINGS.panReleaseIdleMs),\n 0,\n 400,\n ),\n pointerScrollZoomDurationMs: clampRange(\n Number(parsed.pointerScrollZoomDurationMs ?? DEFAULT_MOTION_SETTINGS.pointerScrollZoomDurationMs),\n 60,\n 600,\n ),\n pointerScrollZoomStrengthPct: clampRange(\n Number(parsed.pointerScrollZoomStrengthPct ?? DEFAULT_MOTION_SETTINGS.pointerScrollZoomStrengthPct),\n 8,\n 55,\n ),\n pointerScrollZoomDeltaDivisor: clampRange(\n Number(parsed.pointerScrollZoomDeltaDivisor ?? DEFAULT_MOTION_SETTINGS.pointerScrollZoomDeltaDivisor),\n 250,\n 1400,\n ),\n };\n } catch {\n return DEFAULT_MOTION_SETTINGS;\n }\n}\n\nfunction PolygonPreviewOverlay({\n points,\n closeable,\n mode,\n viewport,\n}: {\n points: Array<{ x: number; y: number }>;\n closeable: boolean;\n mode: SectionCreationMode;\n viewport: Viewport;\n}) {\n if (points.length === 0) return null;\n\n const screenPoints = points.map((p) => viewport.worldToScreen(p.x, p.y));\n const svgPoints = screenPoints.map((p) => `${p.x},${p.y}`).join(\" \");\n const first = screenPoints[0];\n const last = screenPoints[screenPoints.length - 1];\n const isRectanglePreview = mode === \"rectangle\" && screenPoints.length >= 3;\n\n return (\n <svg\n className=\"seatmap-editor__overlay-svg seatmap-editor__overlay-svg--polygon\"\n >\n {screenPoints.length >= 2 && (\n isRectanglePreview ? (\n <polygon\n className=\"seatmap-editor__overlay-polygon\"\n points={svgPoints}\n />\n ) : (\n <polyline\n className=\"seatmap-editor__overlay-polyline\"\n points={svgPoints}\n />\n )\n )}\n {mode === \"polygon\" && screenPoints.length >= 3 && (\n <line\n className={`seatmap-editor__overlay-close-line ${closeable ? \"seatmap-editor__overlay-close-line--active\" : \"seatmap-editor__overlay-close-line--inactive\"}`}\n x1={last.x} y1={last.y} x2={first.x} y2={first.y}\n strokeDasharray=\"4 4\"\n />\n )}\n {mode === \"polygon\" && screenPoints.map((p, i) => (\n <circle\n className={`seatmap-editor__overlay-point${i === 0 && closeable ? \" seatmap-editor__overlay-point--first-active\" : \"\"}`}\n key={i}\n cx={p.x}\n cy={p.y}\n r={i === 0 && closeable ? 8 : 4}\n />\n ))}\n {mode === \"polygon\" && points.length >= 2 && (\n <text\n className=\"seatmap-editor__overlay-label-text\"\n x={(first.x + last.x) / 2}\n y={(first.y + last.y) / 2 - 10}\n fontSize={12}\n >\n {points.length} points {closeable ? \"(click first point to close)\" : \"\"}\n </text>\n )}\n </svg>\n );\n}\n\nfunction DragPreviewOverlay({\n sectionOutlines,\n seatPoints,\n viewport,\n}: {\n sectionOutlines: Array<Array<{ x: number; y: number }>>;\n seatPoints: Array<{ x: number; y: number }>;\n viewport: Viewport;\n}) {\n if (sectionOutlines.length === 0 && seatPoints.length === 0) return null;\n\n const sectionScreenOutlines = sectionOutlines.map((outline) =>\n outline.map((p) => viewport.worldToScreen(p.x, p.y)),\n );\n const seatScreenPoints = seatPoints.map((p) => viewport.worldToScreen(p.x, p.y));\n\n return (\n <svg\n className=\"seatmap-editor__overlay-svg seatmap-editor__overlay-svg--drag\"\n >\n {sectionScreenOutlines\n .filter((outline) => outline.length >= 3)\n .map((outline, i) => (\n <polygon\n className=\"seatmap-editor__overlay-drag-outline\"\n key={i}\n points={outline.map((p) => `${p.x},${p.y}`).join(\" \")}\n />\n ))}\n {seatScreenPoints.map((p, i) => (\n <circle\n className=\"seatmap-editor__overlay-drag-seat\"\n key={i}\n cx={p.x}\n cy={p.y}\n r={5}\n />\n ))}\n </svg>\n );\n}\n\nfunction EditorInner({\n onChange,\n onSave,\n fetchCategoryPrices,\n}: {\n onChange?: (venue: Venue) => void;\n onSave?: (venue: Venue, serializedVenue: string) => void;\n fetchCategoryPrices?: (categoryIds: string[]) => Promise<Record<string, number>>;\n}) {\n const { store, viewport, spatialIndex } = useSeatmapContext();\n const venue = useStore(store, (s) => s.venue);\n const selectedSeatIds = useStore(store, (s) => s.selectedSeatIds);\n const selectedSectionIds = useStore(store, (s) => s.selectedSectionIds);\n const selectedSectionId = useStore(store, (s) => s.selectedSectionId);\n const [, setViewportVersion] = useState(0);\n const canvasAreaRef = useRef<HTMLDivElement | null>(null);\n const [isBackgroundResizing, setIsBackgroundResizing] = useState(false);\n const [isBackgroundMoving, setIsBackgroundMoving] = useState(false);\n const backgroundResizeHandleRef = useRef<ResizeHandle>(\"se\");\n const backgroundResizeAnchorRef = useRef<{ x: number; y: number } | null>(null);\n const backgroundMoveOffsetRef = useRef<{ x: number; y: number } | null>(null);\n\n const historyRef = useRef(new CommandHistory());\n const fitViewRafRef = useRef<number>(0);\n const applyMotionSyncRafRef = useRef<number>(0);\n const [canUndo, setCanUndo] = useState(false);\n const [canRedo, setCanRedo] = useState(false);\n\n const panTool = useMemo(() => new PanTool(), []);\n const selectTool = useMemo(() => new SelectTool(spatialIndex, historyRef.current), [spatialIndex]);\n const [polygonPoints, setPolygonPoints] = useState<Array<{ x: number; y: number }>>([]);\n const [polygonCloseable, setPolygonCloseable] = useState(false);\n\n const addSectionTool = useMemo(\n () => {\n const tool = new AddSectionTool(historyRef.current);\n const v = store.getState().venue;\n if (v && v.categories.length > 0) tool.setCategoryId(v.categories[0].id);\n tool.onPointsChange = (pts, closeable) => {\n setPolygonPoints([...pts]);\n setPolygonCloseable(closeable);\n };\n return tool;\n },\n [],\n );\n const addRowTool = useMemo(\n () => new AddRowTool(historyRef.current, spatialIndex),\n [spatialIndex],\n );\n const addSeatTool = useMemo(\n () => new AddSeatTool(historyRef.current, spatialIndex),\n [spatialIndex],\n );\n\n const toolMap = useMemo<Record<string, BaseTool>>(\n () => ({\n pan: panTool,\n select: selectTool,\n \"add-section\": addSectionTool,\n \"add-row\": addRowTool,\n \"add-seat\": addSeatTool,\n }),\n [panTool, selectTool, addSectionTool, addRowTool, addSeatTool],\n );\n\n const [activeToolName, setActiveToolName] = useState(\"pan\");\n const activeToolRef = useRef<BaseTool>(panTool);\n const lastNonPanToolNameRef = useRef<string>(\"select\");\n const sectionResizeReturnToAddSectionRef = useRef(false);\n const [, setDragPreviewVersion] = useState(0);\n\n const [sectionMode, setSectionMode] = useState<SectionCreationMode>(\"rectangle\");\n const [sectionKind, setSectionKind] = useState<SectionKind>(\"section\");\n const [sectionResizeEnabled, setSectionResizeEnabled] = useState(false);\n const [autoFocusNewSection, setAutoFocusNewSection] = useState(true);\n const [gridEnabled, setGridEnabled] = useState(false);\n const [isGridOptionsOpen, setIsGridOptionsOpen] = useState(false);\n const [showCanvasGrid, setShowCanvasGrid] = useState(false);\n const [canvasGridStyle, setCanvasGridStyle] = useState<CanvasGridStyle>(\"solid\");\n const [showSectionGrid, setShowSectionGrid] = useState(true);\n const [sectionGridStyle, setSectionGridStyle] = useState<SectionGridStyle>(\"dots\");\n const [showHints, setShowHints] = useState(true);\n const [isEditorSettingsOpen, setIsEditorSettingsOpen] = useState(false);\n const motionSettings = useMemo(() => loadMotionSettings(), []);\n const [sectionDrawJelly, setSectionDrawJelly] = useState(motionSettings.sectionDrawJelly);\n const [fitViewJelly, setFitViewJelly] = useState(motionSettings.fitViewJelly);\n const [panInertiaJelly, setPanInertiaJelly] = useState(motionSettings.panInertiaJelly);\n const [pointerScrollZoomJelly, setPointerScrollZoomJelly] = useState(motionSettings.pointerScrollZoomJelly);\n const [useAdvancedMotion, setUseAdvancedMotion] = useState(motionSettings.useAdvancedMotion);\n const [sectionDrawDurationMs, setSectionDrawDurationMs] = useState(motionSettings.sectionDrawDurationMs);\n const [sectionDrawCenterPullPct, setSectionDrawCenterPullPct] = useState(motionSettings.sectionDrawCenterPullPct);\n const [sectionDrawZoomBoostPct, setSectionDrawZoomBoostPct] = useState(motionSettings.sectionDrawZoomBoostPct);\n const [sectionDrawOvershootPct, setSectionDrawOvershootPct] = useState(motionSettings.sectionDrawOvershootPct);\n const [fitViewDurationMs, setFitViewDurationMs] = useState(motionSettings.fitViewDurationMs);\n const [fitViewOvershootPct, setFitViewOvershootPct] = useState(motionSettings.fitViewOvershootPct);\n const [panInertiaCarryPct, setPanInertiaCarryPct] = useState(motionSettings.panInertiaCarryPct);\n const [panInertiaFrictionPct, setPanInertiaFrictionPct] = useState(motionSettings.panInertiaFrictionPct);\n const [panInertiaMinSpeedMilli, setPanInertiaMinSpeedMilli] = useState(motionSettings.panInertiaMinSpeedMilli);\n const [panVelocityBlendPct, setPanVelocityBlendPct] = useState(motionSettings.panVelocityBlendPct);\n const [panStopDeltaMilli, setPanStopDeltaMilli] = useState(motionSettings.panStopDeltaMilli);\n const [panReleaseIdleMs, setPanReleaseIdleMs] = useState(motionSettings.panReleaseIdleMs);\n const [pointerScrollZoomDurationMs, setPointerScrollZoomDurationMs] = useState(motionSettings.pointerScrollZoomDurationMs);\n const [pointerScrollZoomStrengthPct, setPointerScrollZoomStrengthPct] = useState(motionSettings.pointerScrollZoomStrengthPct);\n const [pointerScrollZoomDeltaDivisor, setPointerScrollZoomDeltaDivisor] = useState(motionSettings.pointerScrollZoomDeltaDivisor);\n const [seatsPerRow, setSeatsPerRow] = useState(10);\n const [rowsCount, setRowsCount] = useState(1);\n const [rowOrientationDeg, setRowOrientationDeg] = useState(0);\n const [rowDirectionArrowMode, setRowDirectionArrowMode] = useState<RowDirectionArrowMode>(\"row-direction\");\n const [rowPreviewPoint, setRowPreviewPoint] = useState<Vec2 | null>(null);\n const [cursorScreenPoint, setCursorScreenPoint] = useState<{ x: number; y: number } | null>(null);\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n const payload: MotionSettings = {\n sectionDrawJelly,\n fitViewJelly,\n panInertiaJelly,\n pointerScrollZoomJelly,\n useAdvancedMotion,\n sectionDrawDurationMs,\n sectionDrawCenterPullPct,\n sectionDrawZoomBoostPct,\n sectionDrawOvershootPct,\n fitViewDurationMs,\n fitViewOvershootPct,\n panInertiaCarryPct,\n panInertiaFrictionPct,\n panInertiaMinSpeedMilli,\n panVelocityBlendPct,\n panStopDeltaMilli,\n panReleaseIdleMs,\n pointerScrollZoomDurationMs,\n pointerScrollZoomStrengthPct,\n pointerScrollZoomDeltaDivisor,\n };\n window.localStorage.setItem(MOTION_SETTINGS_STORAGE_KEY, JSON.stringify(payload));\n }, [\n sectionDrawJelly,\n fitViewJelly,\n panInertiaJelly,\n pointerScrollZoomJelly,\n useAdvancedMotion,\n sectionDrawDurationMs,\n sectionDrawCenterPullPct,\n sectionDrawZoomBoostPct,\n sectionDrawOvershootPct,\n fitViewDurationMs,\n fitViewOvershootPct,\n panInertiaCarryPct,\n panInertiaFrictionPct,\n panInertiaMinSpeedMilli,\n panVelocityBlendPct,\n panStopDeltaMilli,\n panReleaseIdleMs,\n pointerScrollZoomDurationMs,\n pointerScrollZoomStrengthPct,\n pointerScrollZoomDeltaDivisor,\n ]);\n\n useEffect(() => {\n panTool.setInertiaOptions({\n panInertiaJelly,\n panInertiaCarry: useAdvancedMotion ? panInertiaCarryPct / 100 : undefined,\n panInertiaFriction: useAdvancedMotion ? panInertiaFrictionPct / 100 : undefined,\n panInertiaMinSpeed: useAdvancedMotion ? panInertiaMinSpeedMilli / 1000 : undefined,\n panVelocityBlend: useAdvancedMotion ? panVelocityBlendPct / 100 : undefined,\n panStopDelta: useAdvancedMotion ? panStopDeltaMilli / 1000 : undefined,\n panReleaseIdleMs: useAdvancedMotion ? panReleaseIdleMs : undefined,\n });\n }, [\n panTool,\n panInertiaJelly,\n useAdvancedMotion,\n panInertiaCarryPct,\n panInertiaFrictionPct,\n panInertiaMinSpeedMilli,\n panVelocityBlendPct,\n panStopDeltaMilli,\n panReleaseIdleMs,\n ]);\n\n const handleResetMotionSettings = useCallback(() => {\n setSectionDrawJelly(DEFAULT_MOTION_SETTINGS.sectionDrawJelly);\n setFitViewJelly(DEFAULT_MOTION_SETTINGS.fitViewJelly);\n setPanInertiaJelly(DEFAULT_MOTION_SETTINGS.panInertiaJelly);\n setPointerScrollZoomJelly(DEFAULT_MOTION_SETTINGS.pointerScrollZoomJelly);\n setUseAdvancedMotion(DEFAULT_MOTION_SETTINGS.useAdvancedMotion);\n setSectionDrawDurationMs(DEFAULT_MOTION_SETTINGS.sectionDrawDurationMs);\n setSectionDrawCenterPullPct(DEFAULT_MOTION_SETTINGS.sectionDrawCenterPullPct);\n setSectionDrawZoomBoostPct(DEFAULT_MOTION_SETTINGS.sectionDrawZoomBoostPct);\n setSectionDrawOvershootPct(DEFAULT_MOTION_SETTINGS.sectionDrawOvershootPct);\n setFitViewDurationMs(DEFAULT_MOTION_SETTINGS.fitViewDurationMs);\n setFitViewOvershootPct(DEFAULT_MOTION_SETTINGS.fitViewOvershootPct);\n setPanInertiaCarryPct(DEFAULT_MOTION_SETTINGS.panInertiaCarryPct);\n setPanInertiaFrictionPct(DEFAULT_MOTION_SETTINGS.panInertiaFrictionPct);\n setPanInertiaMinSpeedMilli(DEFAULT_MOTION_SETTINGS.panInertiaMinSpeedMilli);\n setPanVelocityBlendPct(DEFAULT_MOTION_SETTINGS.panVelocityBlendPct);\n setPanStopDeltaMilli(DEFAULT_MOTION_SETTINGS.panStopDeltaMilli);\n setPanReleaseIdleMs(DEFAULT_MOTION_SETTINGS.panReleaseIdleMs);\n setPointerScrollZoomDurationMs(DEFAULT_MOTION_SETTINGS.pointerScrollZoomDurationMs);\n setPointerScrollZoomStrengthPct(DEFAULT_MOTION_SETTINGS.pointerScrollZoomStrengthPct);\n setPointerScrollZoomDeltaDivisor(DEFAULT_MOTION_SETTINGS.pointerScrollZoomDeltaDivisor);\n }, []);\n\n const animateBasicKnobValues = useCallback((\n targets: {\n section: number;\n fit: number;\n pan: number;\n pointerZoom: number;\n },\n ) => {\n if (applyMotionSyncRafRef.current) {\n cancelAnimationFrame(applyMotionSyncRafRef.current);\n applyMotionSyncRafRef.current = 0;\n }\n\n const start = {\n section: sectionDrawJelly,\n fit: fitViewJelly,\n pan: panInertiaJelly,\n pointerZoom: pointerScrollZoomJelly,\n };\n const startedAt = performance.now();\n const durationMs = 260;\n const easeOutCubicLocal = (t: number) => 1 - (1 - t) * (1 - t) * (1 - t);\n\n const tick = (now: number) => {\n const progress = Math.min(1, (now - startedAt) / durationMs);\n const eased = easeOutCubicLocal(progress);\n const nextSection = Math.round(start.section + (targets.section - start.section) * eased);\n const nextFit = Math.round(start.fit + (targets.fit - start.fit) * eased);\n const nextPan = Math.round(start.pan + (targets.pan - start.pan) * eased);\n const nextPointerZoom = Math.round(start.pointerZoom + (targets.pointerZoom - start.pointerZoom) * eased);\n\n setSectionDrawJelly(clampPercent(nextSection));\n setFitViewJelly(clampPercent(nextFit));\n setPanInertiaJelly(clampPercent(nextPan));\n setPointerScrollZoomJelly(clampPercent(nextPointerZoom));\n\n if (progress < 1) {\n applyMotionSyncRafRef.current = requestAnimationFrame(tick);\n return;\n }\n applyMotionSyncRafRef.current = 0;\n };\n\n applyMotionSyncRafRef.current = requestAnimationFrame(tick);\n }, [sectionDrawJelly, fitViewJelly, panInertiaJelly, pointerScrollZoomJelly]);\n\n const handleApplyAdvancedToBasic = useCallback(() => {\n const sectionFromZoomBoost = (clampRange(sectionDrawZoomBoostPct, 0, 50) / 100 - 0.01) / 0.08;\n const sectionFromCenterPull = (clampRange(sectionDrawCenterPullPct, 0, 100) / 100 - 0.12) / 0.22;\n const sectionFromDuration = (clampRange(sectionDrawDurationMs, 100, 3000) - 380) / 520;\n const sectionFromOvershoot = (clampRange(sectionDrawOvershootPct, 0, 180) / 100 - 0.08) / 0.48;\n const nextSectionDrawJelly = clampPercent(\n Math.round(((sectionFromZoomBoost + sectionFromCenterPull + sectionFromDuration + sectionFromOvershoot) / 4) * 100),\n );\n\n const fitFromDuration = (clampRange(fitViewDurationMs, 100, 3000) - 360) / 620;\n const fitFromOvershoot = (clampRange(fitViewOvershootPct, 0, 180) / 100 - 0.2) / 0.9;\n const nextFitViewJelly = clampPercent(Math.round(((fitFromDuration + fitFromOvershoot) / 2) * 100));\n\n const panFromCarry = (clampRange(panInertiaCarryPct, 0, 95) / 100 - 0.58) / 0.28;\n const panFromFriction = (clampRange(panInertiaFrictionPct, 70, 99) / 100 - 0.88) / 0.08;\n const panFromMinSpeed = (0.012 - clampRange(panInertiaMinSpeedMilli, 1, 50) / 1000) / 0.004;\n const nextPanInertiaJelly = clampPercent(Math.round(((panFromCarry + panFromFriction + panFromMinSpeed) / 3) * 100));\n\n const zoomFromDuration = (clampRange(pointerScrollZoomDurationMs, 60, 600) - 90) / 220;\n const zoomFromSensitivity = (clampRange(pointerScrollZoomDeltaDivisor, 250, 1400) - 520) / 380;\n const zoomFromStrength = (0.33 - clampRange(pointerScrollZoomStrengthPct, 8, 55) / 100) / 0.14;\n const nextPointerScrollZoomJelly = clampPercent(\n Math.round(((zoomFromDuration + zoomFromSensitivity + zoomFromStrength) / 3) * 100),\n );\n\n animateBasicKnobValues({\n section: nextSectionDrawJelly,\n fit: nextFitViewJelly,\n pan: nextPanInertiaJelly,\n pointerZoom: nextPointerScrollZoomJelly,\n });\n }, [\n animateBasicKnobValues,\n sectionDrawZoomBoostPct,\n sectionDrawCenterPullPct,\n sectionDrawDurationMs,\n sectionDrawOvershootPct,\n fitViewDurationMs,\n fitViewOvershootPct,\n panInertiaCarryPct,\n panInertiaFrictionPct,\n panInertiaMinSpeedMilli,\n pointerScrollZoomDurationMs,\n pointerScrollZoomStrengthPct,\n pointerScrollZoomDeltaDivisor,\n ]);\n\n const handleSeatsPerRowChange = useCallback(\n (n: number) => {\n setSeatsPerRow(n);\n addRowTool.seatsPerRow = n;\n },\n [addRowTool],\n );\n const handleRowsCountChange = useCallback(\n (n: number) => {\n const clamped = Math.max(1, Math.min(100, n));\n setRowsCount(clamped);\n addRowTool.rowsCount = clamped;\n },\n [addRowTool],\n );\n const handleRowOrientationChange = useCallback(\n (deg: number) => {\n const normalized = ((Math.round(deg) % 360) + 360) % 360;\n setRowOrientationDeg(normalized);\n addRowTool.rowOrientationDeg = normalized;\n },\n [addRowTool],\n );\n const handleRotateRowOrientationQuarterTurn = useCallback(\n () => {\n handleRowOrientationChange(rowOrientationDeg + 90);\n },\n [handleRowOrientationChange, rowOrientationDeg],\n );\n const rowOrientationKnobDeg = useMemo(\n () => (\n rowDirectionArrowMode === \"row-direction\"\n ? (((rowOrientationDeg + 90) % 360) + 360) % 360\n : rowOrientationDeg\n ),\n [rowDirectionArrowMode, rowOrientationDeg],\n );\n const handleRowOrientationKnobChange = useCallback(\n (deg: number) => {\n const mapped = rowDirectionArrowMode === \"row-direction\" ? deg - 90 : deg;\n handleRowOrientationChange(mapped);\n },\n [rowDirectionArrowMode, handleRowOrientationChange],\n );\n const handleSectionToolVariantChange = useCallback(\n (kind: SectionKind, mode: SectionCreationMode) => {\n setSectionKind(kind);\n setSectionMode(mode);\n },\n [],\n );\n\n useEffect(() => {\n addSectionTool.setMode(sectionMode);\n }, [addSectionTool, sectionMode]);\n\n useEffect(() => {\n addSectionTool.setSectionKind(sectionKind);\n }, [addSectionTool, sectionKind]);\n\n const focusSectionGently = useCallback(\n (sectionId: string) => {\n const currentVenue = store.getState().venue;\n if (!currentVenue) return;\n const section = currentVenue.sections.find((entry) => entry.id === sectionId);\n if (!section) return;\n if (viewport.screenWidth <= 0 || viewport.screenHeight <= 0) return;\n\n const startX = viewport.x;\n const startY = viewport.y;\n const startZoom = viewport.zoom;\n const jelly = Math.max(0, Math.min(100, sectionDrawJelly)) / 100;\n const zoomBoost = useAdvancedMotion\n ? clampRange(sectionDrawZoomBoostPct, 0, 50) / 100\n : 0.01 + jelly * 0.08;\n const targetZoom = Math.min(4, Math.max(0.05, startZoom * (1 + zoomBoost)));\n const centeredX = viewport.screenWidth / (2 * targetZoom) - section.position.x;\n const centeredY = viewport.screenHeight / (2 * targetZoom) - section.position.y;\n const centerPull = useAdvancedMotion\n ? clampRange(sectionDrawCenterPullPct, 0, 100) / 100\n : 0.12 + jelly * 0.22;\n const targetX = startX + (centeredX - startX) * centerPull;\n const targetY = startY + (centeredY - startY) * centerPull;\n const durationMs = useAdvancedMotion\n ? clampRange(sectionDrawDurationMs, 100, 3000)\n : 380 + jelly * 520;\n const overshoot = useAdvancedMotion\n ? clampRange(sectionDrawOvershootPct, 0, 180) / 100\n : 0.08 + jelly * 0.48;\n const startedAt = performance.now();\n\n const animate = (now: number) => {\n const elapsed = now - startedAt;\n const progress = Math.min(1, elapsed / durationMs);\n const eased = progress >= 1 ? 1 : easeOutBack(progress, overshoot);\n\n viewport.x = startX + (targetX - startX) * eased;\n viewport.y = startY + (targetY - startY) * eased;\n viewport.setZoom(startZoom + (targetZoom - startZoom) * eased);\n\n if (progress < 1) {\n requestAnimationFrame(animate);\n }\n };\n\n requestAnimationFrame(animate);\n },\n [store, viewport, sectionDrawJelly, useAdvancedMotion, sectionDrawZoomBoostPct, sectionDrawCenterPullPct, sectionDrawDurationMs, sectionDrawOvershootPct],\n );\n\n useEffect(() => {\n addSectionTool.onSectionCreated = (sectionId) => {\n if (!autoFocusNewSection) return;\n focusSectionGently(sectionId);\n };\n\n return () => {\n addSectionTool.onSectionCreated = undefined;\n };\n }, [addSectionTool, autoFocusNewSection, focusSectionGently]);\n\n const sectionHintText = useMemo(() => {\n if (activeToolName === \"select\" && sectionResizeEnabled) {\n return \"Resize mode: drag inside section to move it, drag corners to resize, drag sides to move edges, click a side to add a polygon point.\";\n }\n if (activeToolName !== \"add-section\") return null;\n if (sectionMode === \"rectangle\") {\n if (addSectionTool.hasPendingDraft()) {\n return \"Click opposite corner to finish. Esc to cancel.\";\n }\n return \"Click first corner to start rectangle.\";\n }\n if (addSectionTool.hasPendingDraft()) {\n return \"Click to add points. Click first point to close. Esc to cancel.\";\n }\n return \"Click to place first polygon point.\";\n }, [activeToolName, sectionMode, addSectionTool, sectionResizeEnabled]);\n const rowPresetRows = [1, 2, 3, 4];\n const rowPresetSeats = [8, 10, 12, 16];\n\n useEffect(() => {\n selectTool.setSectionResizeEnabled(sectionResizeEnabled);\n }, [selectTool, sectionResizeEnabled]);\n\n useEffect(() => {\n if (activeToolName !== \"add-row\") {\n setRowPreviewPoint(null);\n }\n }, [activeToolName]);\n\n const setActiveTool = useCallback(\n (name: string) => {\n if (name !== \"pan\") {\n lastNonPanToolNameRef.current = name;\n }\n if (name !== activeToolName) {\n setIsGridOptionsOpen(false);\n setIsEditorSettingsOpen(false);\n }\n activeToolRef.current.onDeactivate();\n const tool = toolMap[name] ?? selectTool;\n tool.onActivate(viewport, store);\n activeToolRef.current = tool;\n setActiveToolName(name);\n },\n [activeToolName, toolMap, selectTool, viewport, store],\n );\n const handleToggleSectionResize = useCallback(\n (fromAddSection = false) => {\n if (!sectionResizeEnabled) {\n sectionResizeReturnToAddSectionRef.current = fromAddSection;\n setSectionResizeEnabled(true);\n setActiveTool(\"select\");\n return;\n }\n setSectionResizeEnabled(false);\n const shouldReturnToAddSection = sectionResizeReturnToAddSectionRef.current;\n sectionResizeReturnToAddSectionRef.current = false;\n if (shouldReturnToAddSection) {\n setActiveTool(\"add-section\");\n }\n },\n [sectionResizeEnabled, setActiveTool],\n );\n\n useEffect(() => {\n const unsub = historyRef.current.subscribe(() => {\n setCanUndo(historyRef.current.canUndo);\n setCanRedo(historyRef.current.canRedo);\n });\n return unsub;\n }, []);\n\n useEffect(() => {\n if (venue) {\n spatialIndex.buildFromSections(venue.sections);\n }\n }, [venue, spatialIndex]);\n\n useEffect(() => {\n const unsub = viewport.subscribe(() => {\n setViewportVersion((v) => v + 1);\n });\n return unsub;\n }, [viewport]);\n\n const handleSave = useCallback(() => {\n const v = store.getState().venue;\n if (!v) return;\n const json = serializeVenue(v);\n onChange?.(v);\n if (onSave) {\n onSave(v, json);\n return;\n }\n console.log(v);\n }, [store, onChange, onSave]);\n\n const handleLoad = useCallback(() => {\n const input = document.createElement(\"input\");\n input.type = \"file\";\n input.accept = \".json\";\n input.onchange = () => {\n const file = input.files?.[0];\n if (!file) return;\n const reader = new FileReader();\n reader.onload = () => {\n try {\n const loaded = deserializeVenue(reader.result as string);\n store.getState().setVenue(loaded);\n spatialIndex.buildFromSections(loaded.sections);\n viewport.fitBounds(venueAABB(loaded));\n historyRef.current.clear();\n } catch {\n alert(\"Invalid venue JSON file\");\n }\n };\n reader.readAsText(file);\n };\n input.click();\n }, [store, spatialIndex, viewport]);\n\n const stopFitViewAnimation = useCallback(() => {\n if (fitViewRafRef.current) {\n cancelAnimationFrame(fitViewRafRef.current);\n fitViewRafRef.current = 0;\n }\n }, []);\n\n const animateFitView = useCallback(\n (bounds: { minX: number; minY: number; maxX: number; maxY: number }) => {\n const target = getViewportStateForFitBounds(viewport, bounds, 40);\n if (!target) return;\n\n stopFitViewAnimation();\n const startX = viewport.x;\n const startY = viewport.y;\n const startZoom = viewport.zoom;\n const jelly = Math.max(0, Math.min(100, fitViewJelly)) / 100;\n const durationMs = useAdvancedMotion\n ? clampRange(fitViewDurationMs, 100, 3000)\n : 360 + jelly * 620;\n const overshoot = useAdvancedMotion\n ? clampRange(fitViewOvershootPct, 0, 180) / 100\n : 0.2 + jelly * 0.9;\n const startedAt = performance.now();\n\n const animate = (now: number) => {\n const elapsed = now - startedAt;\n const progress = Math.min(1, elapsed / durationMs);\n const eased = progress >= 1 ? 1 : easeOutBack(progress, overshoot);\n\n viewport.x = startX + (target.x - startX) * eased;\n viewport.y = startY + (target.y - startY) * eased;\n viewport.setZoom(startZoom + (target.zoom - startZoom) * eased);\n\n if (progress < 1) {\n fitViewRafRef.current = requestAnimationFrame(animate);\n return;\n }\n fitViewRafRef.current = 0;\n };\n\n fitViewRafRef.current = requestAnimationFrame(animate);\n },\n [viewport, stopFitViewAnimation, fitViewJelly, useAdvancedMotion, fitViewDurationMs, fitViewOvershootPct],\n );\n\n const handleFitView = useCallback(() => {\n if (!venue) return;\n animateFitView(venueAABB(venue));\n }, [venue, animateFitView]);\n\n useEffect(() => () => stopFitViewAnimation(), [stopFitViewAnimation]);\n useEffect(() => () => {\n if (applyMotionSyncRafRef.current) {\n cancelAnimationFrame(applyMotionSyncRafRef.current);\n applyMotionSyncRafRef.current = 0;\n }\n }, []);\n\n const handleUploadBackground = useCallback(() => {\n const input = document.createElement(\"input\");\n input.type = \"file\";\n input.accept = \"image/*\";\n input.onchange = () => {\n const file = input.files?.[0];\n if (!file) return;\n const reader = new FileReader();\n reader.onload = () => {\n const v = store.getState().venue;\n if (!v) return;\n const dataUrl = reader.result as string;\n const image = new Image();\n image.onload = () => {\n const currentVenue = store.getState().venue;\n if (!currentVenue) return;\n const fitted = fitBackgroundToBounds(\n currentVenue.bounds.width,\n currentVenue.bounds.height,\n image.naturalWidth,\n image.naturalHeight,\n );\n store.getState().setVenue({\n ...currentVenue,\n backgroundImage: dataUrl,\n backgroundImageOpacity: currentVenue.backgroundImageOpacity ?? 0.5,\n backgroundImageWidth: fitted.width,\n backgroundImageHeight: fitted.height,\n backgroundImageX: (currentVenue.bounds.width - fitted.width) / 2,\n backgroundImageY: (currentVenue.bounds.height - fitted.height) / 2,\n backgroundImageAspectRatio: fitted.aspectRatio,\n backgroundImageKeepAspectRatio: currentVenue.backgroundImageKeepAspectRatio ?? true,\n });\n };\n image.onerror = () => {\n const currentVenue = store.getState().venue;\n if (!currentVenue) return;\n store.getState().setVenue({\n ...currentVenue,\n backgroundImage: dataUrl,\n backgroundImageOpacity: currentVenue.backgroundImageOpacity ?? 0.5,\n });\n };\n image.src = dataUrl;\n };\n reader.readAsDataURL(file);\n };\n input.click();\n }, [store]);\n\n const handleRemoveBackground = useCallback(() => {\n const v = store.getState().venue;\n if (!v) return;\n store.getState().setVenue({\n ...v,\n backgroundImage: undefined,\n backgroundImageOpacity: undefined,\n backgroundImageWidth: undefined,\n backgroundImageHeight: undefined,\n backgroundImageX: undefined,\n backgroundImageY: undefined,\n backgroundImageAspectRatio: undefined,\n backgroundImageKeepAspectRatio: undefined,\n });\n }, [store]);\n\n const handleBackgroundOpacityChange = useCallback(\n (opacity: number) => {\n const v = store.getState().venue;\n if (!v) return;\n store.getState().setVenue({ ...v, backgroundImageOpacity: opacity });\n },\n [store],\n );\n\n const handleBackgroundSizeChange = useCallback(\n ({ width, height }: { width?: number; height?: number }) => {\n const v = store.getState().venue;\n if (!v || !v.backgroundImage) return;\n const currentRect = getBackgroundRectInWorld(v);\n const centerX = currentRect.x + currentRect.width / 2;\n const centerY = currentRect.y + currentRect.height / 2;\n\n const currentWidth = Math.max(1, v.backgroundImageWidth ?? v.bounds.width);\n const currentHeight = Math.max(1, v.backgroundImageHeight ?? v.bounds.height);\n const keepAspectRatio = v.backgroundImageKeepAspectRatio ?? true;\n const aspectRatio = v.backgroundImageAspectRatio ?? (currentWidth / currentHeight);\n\n let nextWidth = width ?? currentWidth;\n let nextHeight = height ?? currentHeight;\n\n if (keepAspectRatio) {\n const safeAspectRatio = aspectRatio > 0 ? aspectRatio : (currentWidth / currentHeight);\n if (width !== undefined && height === undefined) {\n nextHeight = nextWidth / safeAspectRatio;\n } else if (height !== undefined && width === undefined) {\n nextWidth = nextHeight * safeAspectRatio;\n } else if (width !== undefined && height !== undefined) {\n const widthFromHeight = nextHeight * safeAspectRatio;\n const heightFromWidth = nextWidth / safeAspectRatio;\n if (widthFromHeight >= nextWidth) {\n nextWidth = widthFromHeight;\n } else {\n nextHeight = heightFromWidth;\n }\n }\n }\n\n nextWidth = Math.max(1, Math.round(nextWidth));\n nextHeight = Math.max(1, Math.round(nextHeight));\n\n store.getState().setVenue({\n ...v,\n backgroundImageWidth: nextWidth,\n backgroundImageHeight: nextHeight,\n backgroundImageX: centerX - nextWidth / 2,\n backgroundImageY: centerY - nextHeight / 2,\n });\n },\n [store],\n );\n\n const handleBackgroundKeepAspectRatioChange = useCallback(\n (keepAspectRatio: boolean) => {\n const v = store.getState().venue;\n if (!v || !v.backgroundImage) return;\n const currentWidth = Math.max(1, v.backgroundImageWidth ?? v.bounds.width);\n const currentHeight = Math.max(1, v.backgroundImageHeight ?? v.bounds.height);\n const originalAspectRatio = v.backgroundImageAspectRatio ?? (currentWidth / currentHeight);\n const safeAspectRatio = originalAspectRatio > 0 ? originalAspectRatio : (currentWidth / currentHeight);\n store.getState().setVenue({\n ...v,\n backgroundImageKeepAspectRatio: keepAspectRatio,\n backgroundImageWidth: keepAspectRatio ? currentWidth : v.backgroundImageWidth,\n backgroundImageHeight: keepAspectRatio ? Math.max(1, Math.round(currentWidth / safeAspectRatio)) : v.backgroundImageHeight,\n });\n },\n [store],\n );\n\n useEffect(() => {\n if (!venue?.backgroundImage) return;\n\n const needsAspectData =\n venue.backgroundImageWidth === undefined ||\n venue.backgroundImageHeight === undefined ||\n venue.backgroundImageAspectRatio === undefined;\n const needsKeepAspectFlag = venue.backgroundImageKeepAspectRatio === undefined;\n const needsPositionData = venue.backgroundImageX === undefined || venue.backgroundImageY === undefined;\n if (!needsAspectData && !needsKeepAspectFlag && !needsPositionData) return;\n\n let cancelled = false;\n const image = new Image();\n image.onload = () => {\n if (cancelled) return;\n const currentVenue = store.getState().venue;\n if (!currentVenue?.backgroundImage) return;\n\n const fitted = fitBackgroundToBounds(\n currentVenue.bounds.width,\n currentVenue.bounds.height,\n image.naturalWidth,\n image.naturalHeight,\n );\n const nextWidth = currentVenue.backgroundImageWidth ?? fitted.width;\n const nextHeight = currentVenue.backgroundImageHeight ?? fitted.height;\n const nextAspectRatio =\n currentVenue.backgroundImageAspectRatio ?? fitted.aspectRatio;\n const nextKeepAspectRatio = currentVenue.backgroundImageKeepAspectRatio ?? true;\n const nextX = currentVenue.backgroundImageX ?? ((currentVenue.bounds.width - nextWidth) / 2);\n const nextY = currentVenue.backgroundImageY ?? ((currentVenue.bounds.height - nextHeight) / 2);\n\n store.getState().setVenue({\n ...currentVenue,\n backgroundImageWidth: nextWidth,\n backgroundImageHeight: nextHeight,\n backgroundImageX: nextX,\n backgroundImageY: nextY,\n backgroundImageAspectRatio: nextAspectRatio,\n backgroundImageKeepAspectRatio: nextKeepAspectRatio,\n });\n };\n image.onerror = () => {\n if (cancelled) return;\n const currentVenue = store.getState().venue;\n if (!currentVenue?.backgroundImage) return;\n const fallbackWidth = currentVenue.backgroundImageWidth ?? currentVenue.bounds.width;\n const fallbackHeight = currentVenue.backgroundImageHeight ?? currentVenue.bounds.height;\n store.getState().setVenue({\n ...currentVenue,\n backgroundImageX: currentVenue.backgroundImageX ?? ((currentVenue.bounds.width - fallbackWidth) / 2),\n backgroundImageY: currentVenue.backgroundImageY ?? ((currentVenue.bounds.height - fallbackHeight) / 2),\n backgroundImageKeepAspectRatio: currentVenue.backgroundImageKeepAspectRatio ?? true,\n });\n };\n image.src = venue.backgroundImage;\n\n return () => {\n cancelled = true;\n };\n }, [\n venue?.backgroundImage,\n venue?.backgroundImageWidth,\n venue?.backgroundImageHeight,\n venue?.backgroundImageX,\n venue?.backgroundImageY,\n venue?.backgroundImageAspectRatio,\n venue?.backgroundImageKeepAspectRatio,\n store,\n ]);\n\n useEffect(() => {\n if (!isBackgroundResizing) return;\n\n const onPointerMove = (e: PointerEvent) => {\n const currentVenue = store.getState().venue;\n const canvasArea = canvasAreaRef.current;\n if (!currentVenue?.backgroundImage || !canvasArea) return;\n const anchor = backgroundResizeAnchorRef.current;\n if (!anchor) return;\n\n const rect = canvasArea.getBoundingClientRect();\n const screenX = e.clientX - rect.left;\n const screenY = e.clientY - rect.top;\n const world = viewport.screenToWorld(screenX, screenY);\n const handle = backgroundResizeHandleRef.current;\n const keepAspectRatio = currentVenue.backgroundImageKeepAspectRatio ?? true;\n const originalAspectRatio =\n currentVenue.backgroundImageAspectRatio ??\n ((currentVenue.backgroundImageWidth ?? currentVenue.bounds.width) /\n (currentVenue.backgroundImageHeight ?? currentVenue.bounds.height));\n const safeAspectRatio = originalAspectRatio > 0 ? originalAspectRatio : 1;\n\n const isLeft = handle === \"nw\" || handle === \"w\" || handle === \"sw\";\n const isRight = handle === \"ne\" || handle === \"e\" || handle === \"se\";\n const isTop = handle === \"nw\" || handle === \"n\" || handle === \"ne\";\n const isBottom = handle === \"sw\" || handle === \"s\" || handle === \"se\";\n\n let nextWidth = Math.max(\n 1,\n isLeft ? (anchor.x - world.x) : isRight ? (world.x - anchor.x) : (currentVenue.backgroundImageWidth ?? currentVenue.bounds.width),\n );\n let nextHeight = Math.max(\n 1,\n isTop ? (anchor.y - world.y) : isBottom ? (world.y - anchor.y) : (currentVenue.backgroundImageHeight ?? currentVenue.bounds.height),\n );\n let nextX = isLeft ? (anchor.x - nextWidth) : isRight ? anchor.x : getBackgroundRectInWorld(currentVenue).x;\n let nextY = isTop ? (anchor.y - nextHeight) : isBottom ? anchor.y : getBackgroundRectInWorld(currentVenue).y;\n\n if (keepAspectRatio) {\n if (handle === \"w\" || handle === \"e\") {\n nextHeight = nextWidth / safeAspectRatio;\n nextY = anchor.y - nextHeight / 2;\n } else if (handle === \"n\" || handle === \"s\") {\n nextWidth = nextHeight * safeAspectRatio;\n nextX = anchor.x - nextWidth / 2;\n } else {\n const widthFromHeight = nextHeight * safeAspectRatio;\n const heightFromWidth = nextWidth / safeAspectRatio;\n if (widthFromHeight >= nextWidth) {\n nextWidth = widthFromHeight;\n } else {\n nextHeight = heightFromWidth;\n }\n nextX = isLeft ? (anchor.x - nextWidth) : anchor.x;\n nextY = isTop ? (anchor.y - nextHeight) : anchor.y;\n }\n }\n\n store.getState().setVenue({\n ...currentVenue,\n backgroundImageWidth: Math.max(1, Math.round(nextWidth)),\n backgroundImageHeight: Math.max(1, Math.round(nextHeight)),\n backgroundImageX: nextX,\n backgroundImageY: nextY,\n });\n };\n\n const onPointerUp = () => {\n backgroundResizeAnchorRef.current = null;\n setIsBackgroundResizing(false);\n };\n\n window.addEventListener(\"pointermove\", onPointerMove);\n window.addEventListener(\"pointerup\", onPointerUp);\n window.addEventListener(\"pointercancel\", onPointerUp);\n return () => {\n window.removeEventListener(\"pointermove\", onPointerMove);\n window.removeEventListener(\"pointerup\", onPointerUp);\n window.removeEventListener(\"pointercancel\", onPointerUp);\n };\n }, [isBackgroundResizing, store, viewport]);\n\n useEffect(() => {\n if (!isBackgroundMoving) return;\n\n const onPointerMove = (e: PointerEvent) => {\n const currentVenue = store.getState().venue;\n const canvasArea = canvasAreaRef.current;\n const offset = backgroundMoveOffsetRef.current;\n if (!currentVenue?.backgroundImage || !canvasArea || !offset) return;\n\n const rect = canvasArea.getBoundingClientRect();\n const screenX = e.clientX - rect.left;\n const screenY = e.clientY - rect.top;\n const world = viewport.screenToWorld(screenX, screenY);\n\n store.getState().setVenue({\n ...currentVenue,\n backgroundImageX: world.x - offset.x,\n backgroundImageY: world.y - offset.y,\n });\n };\n\n const onPointerUp = () => {\n backgroundMoveOffsetRef.current = null;\n setIsBackgroundMoving(false);\n };\n\n window.addEventListener(\"pointermove\", onPointerMove);\n window.addEventListener(\"pointerup\", onPointerUp);\n window.addEventListener(\"pointercancel\", onPointerUp);\n return () => {\n window.removeEventListener(\"pointermove\", onPointerMove);\n window.removeEventListener(\"pointerup\", onPointerUp);\n window.removeEventListener(\"pointercancel\", onPointerUp);\n };\n }, [isBackgroundMoving, store, viewport]);\n\n const renderBackgroundResizeOverlay = () => {\n if (!venue?.backgroundImage) return null;\n if (activeToolName !== \"select\") return null;\n\n const rectWorld = getBackgroundRectInWorld(venue);\n const topLeft = viewport.worldToScreen(rectWorld.x, rectWorld.y);\n const topRight = viewport.worldToScreen(rectWorld.x + rectWorld.width, rectWorld.y);\n const bottomLeft = viewport.worldToScreen(rectWorld.x, rectWorld.y + rectWorld.height);\n const bottomRight = viewport.worldToScreen(rectWorld.x + rectWorld.width, rectWorld.y + rectWorld.height);\n\n const midTop = { x: (topLeft.x + topRight.x) / 2, y: (topLeft.y + topRight.y) / 2 };\n const midBottom = { x: (bottomLeft.x + bottomRight.x) / 2, y: (bottomLeft.y + bottomRight.y) / 2 };\n const midLeft = { x: (topLeft.x + bottomLeft.x) / 2, y: (topLeft.y + bottomLeft.y) / 2 };\n const midRight = { x: (topRight.x + bottomRight.x) / 2, y: (topRight.y + bottomRight.y) / 2 };\n\n const handles: Array<{\n left: number;\n top: number;\n cursor: React.CSSProperties[\"cursor\"];\n handle: ResizeHandle;\n }> = [\n { left: topLeft.x, top: topLeft.y, cursor: \"nwse-resize\", handle: \"nw\" },\n { left: topRight.x, top: topRight.y, cursor: \"nesw-resize\", handle: \"ne\" },\n { left: bottomLeft.x, top: bottomLeft.y, cursor: \"nesw-resize\", handle: \"sw\" },\n { left: bottomRight.x, top: bottomRight.y, cursor: \"nwse-resize\", handle: \"se\" },\n { left: midLeft.x, top: midLeft.y, cursor: \"ew-resize\", handle: \"w\" },\n { left: midRight.x, top: midRight.y, cursor: \"ew-resize\", handle: \"e\" },\n { left: midTop.x, top: midTop.y, cursor: \"ns-resize\", handle: \"n\" },\n { left: midBottom.x, top: midBottom.y, cursor: \"ns-resize\", handle: \"s\" },\n ];\n\n return (\n <div className=\"seatmap-editor__background-overlay\">\n <div\n className=\"seatmap-editor__background-frame\"\n style={{\n left: topLeft.x,\n top: topLeft.y,\n width: Math.max(1, topRight.x - topLeft.x),\n height: Math.max(1, bottomLeft.y - topLeft.y),\n cursor: isBackgroundMoving ? \"grabbing\" : \"grab\",\n }}\n onPointerDown={(e) => {\n if (e.button !== 0) return;\n e.preventDefault();\n e.stopPropagation();\n const currentVenue = store.getState().venue;\n const canvasArea = canvasAreaRef.current;\n if (!currentVenue?.backgroundImage || !canvasArea) return;\n const backgroundRect = getBackgroundRectInWorld(currentVenue);\n const canvasRect = canvasArea.getBoundingClientRect();\n const screenX = e.clientX - canvasRect.left;\n const screenY = e.clientY - canvasRect.top;\n const world = viewport.screenToWorld(screenX, screenY);\n backgroundMoveOffsetRef.current = {\n x: world.x - backgroundRect.x,\n y: world.y - backgroundRect.y,\n };\n setIsBackgroundMoving(true);\n }}\n />\n {handles.map((handle, i) => (\n <div\n key={i}\n className=\"seatmap-editor__background-handle\"\n style={{\n left: handle.left - 5,\n top: handle.top - 5,\n cursor: handle.cursor,\n }}\n onPointerDown={(e) => {\n if (e.button !== 0) return;\n e.preventDefault();\n e.stopPropagation();\n const currentVenue = store.getState().venue;\n if (!currentVenue?.backgroundImage) return;\n const backgroundRect = getBackgroundRectInWorld(currentVenue);\n const centerX = backgroundRect.x + backgroundRect.width / 2;\n const centerY = backgroundRect.y + backgroundRect.height / 2;\n let anchor = { x: backgroundRect.x, y: backgroundRect.y };\n if (handle.handle === \"nw\") anchor = { x: backgroundRect.x + backgroundRect.width, y: backgroundRect.y + backgroundRect.height };\n if (handle.handle === \"ne\") anchor = { x: backgroundRect.x, y: backgroundRect.y + backgroundRect.height };\n if (handle.handle === \"sw\") anchor = { x: backgroundRect.x + backgroundRect.width, y: backgroundRect.y };\n if (handle.handle === \"se\") anchor = { x: backgroundRect.x, y: backgroundRect.y };\n if (handle.handle === \"w\") anchor = { x: backgroundRect.x + backgroundRect.width, y: centerY };\n if (handle.handle === \"e\") anchor = { x: backgroundRect.x, y: centerY };\n if (handle.handle === \"n\") anchor = { x: centerX, y: backgroundRect.y + backgroundRect.height };\n if (handle.handle === \"s\") anchor = { x: centerX, y: backgroundRect.y };\n backgroundResizeHandleRef.current = handle.handle;\n backgroundResizeAnchorRef.current = anchor;\n setIsBackgroundResizing(true);\n }}\n />\n ))}\n </div>\n );\n };\n\n const renderSectionResizeOverlay = () => {\n if (activeToolName !== \"select\" || !sectionResizeEnabled || !venue) return null;\n const resizeOverlay = selectTool.getSectionResizeHandlesPreview(venue, selectedSeatIds, selectedSectionId);\n if (!resizeOverlay) return null;\n\n const corners = resizeOverlay.corners.map((p) => viewport.worldToScreen(p.x, p.y));\n const sideMidpoints = resizeOverlay.sideMidpoints.map((p) => viewport.worldToScreen(p.x, p.y));\n const outlinePoints = corners.map((p) => `${p.x},${p.y}`).join(\" \");\n const hint = resizeOverlay.mergeHint\n ? viewport.worldToScreen(resizeOverlay.mergeHint.position.x, resizeOverlay.mergeHint.position.y)\n : null;\n\n return (\n <svg\n className=\"seatmap-editor__overlay-svg seatmap-editor__overlay-svg--section-resize\"\n >\n <polygon\n className=\"seatmap-editor__overlay-section-outline\"\n points={outlinePoints}\n />\n {sideMidpoints.map((p, i) => (\n <rect\n className=\"seatmap-editor__overlay-section-side\"\n key={`side-${i}`}\n x={p.x - 5}\n y={p.y - 5}\n width={10}\n height={10}\n rx={2}\n />\n ))}\n {corners.map((p, i) => (\n <circle\n className=\"seatmap-editor__overlay-section-corner\"\n key={`corner-${i}`}\n cx={p.x}\n cy={p.y}\n r={5}\n />\n ))}\n {hint && (\n <>\n <rect\n className=\"seatmap-editor__overlay-label-box\"\n x={hint.x - 88}\n y={hint.y - 32}\n width={176}\n height={20}\n rx={6}\n />\n <text\n className=\"seatmap-editor__overlay-label-text\"\n x={hint.x}\n y={hint.y - 18}\n >\n {resizeOverlay.mergeHint?.message}\n </text>\n </>\n )}\n </svg>\n );\n };\n\n const renderRowOrientationOverlay = () => {\n if (activeToolName !== \"add-row\" || !rowPreviewPoint || !venue) return null;\n const preview = addRowTool.getPlacementPreview(rowPreviewPoint.x, rowPreviewPoint.y, venue);\n if (!preview) return null;\n\n const displayAngleRad =\n rowDirectionArrowMode === \"row-direction\"\n ? preview.worldAngleRad + Math.PI / 2\n : preview.worldAngleRad;\n const origin = viewport.worldToScreen(preview.worldX, preview.worldY);\n const lineLengthPx = 78;\n const end = {\n x: origin.x + Math.cos(displayAngleRad) * lineLengthPx,\n y: origin.y + Math.sin(displayAngleRad) * lineLengthPx,\n };\n const arrowSizePx = 11;\n const leftWing = {\n x: end.x - Math.cos(displayAngleRad - Math.PI / 6) * arrowSizePx,\n y: end.y - Math.sin(displayAngleRad - Math.PI / 6) * arrowSizePx,\n };\n const rightWing = {\n x: end.x - Math.cos(displayAngleRad + Math.PI / 6) * arrowSizePx,\n y: end.y - Math.sin(displayAngleRad + Math.PI / 6) * arrowSizePx,\n };\n const displayAngleDeg = ((((displayAngleRad * 180) / Math.PI) + 90) % 360 + 360) % 360;\n const orientationLabel = rowDirectionArrowMode === \"row-direction\" ? \"Row direction\" : \"Viewer direction\";\n\n return (\n <svg\n className=\"seatmap-editor__overlay-svg seatmap-editor__overlay-svg--row-direction\"\n >\n <line\n className=\"seatmap-editor__overlay-row-direction-line\"\n x1={origin.x}\n y1={origin.y}\n x2={end.x}\n y2={end.y}\n strokeWidth={3}\n strokeLinecap=\"round\"\n />\n <polygon\n className=\"seatmap-editor__overlay-row-direction-arrow\"\n points={`${end.x},${end.y} ${leftWing.x},${leftWing.y} ${rightWing.x},${rightWing.y}`}\n />\n <circle\n className=\"seatmap-editor__overlay-row-direction-origin\"\n cx={origin.x}\n cy={origin.y}\n r={5}\n strokeWidth={1.5}\n />\n <rect\n className=\"seatmap-editor__overlay-label-box\"\n x={origin.x + 10}\n y={origin.y - 28}\n width={90}\n height={20}\n rx={5}\n />\n <text\n className=\"seatmap-editor__overlay-label-text\"\n x={origin.x + 55}\n y={origin.y - 14}\n >\n {`${orientationLabel} ${Math.round(displayAngleDeg)}°`}\n </text>\n </svg>\n );\n };\n\n const handleSelectSection = useCallback(\n (sectionId: string, options?: { multi?: boolean }) => {\n if (!venue) return;\n if (options?.multi) {\n store.getState().toggleSection(sectionId);\n return;\n }\n store.getState().clearSelection();\n store.getState().selectSection(sectionId);\n },\n [venue, store],\n );\n\n const handleDeleteSelectedObjects = useCallback(() => {\n const state = store.getState();\n const currentVenue = state.venue;\n if (!currentVenue) return;\n\n const selectedSeatIdSet = new Set(state.selectedSeatIds);\n const selectedSectionIdSet = new Set(state.selectedSectionIds);\n if (selectedSeatIdSet.size === 0 && selectedSectionIdSet.size === 0) return;\n\n const previousVenue = currentVenue;\n const nextVenue: Venue = {\n ...currentVenue,\n sections: currentVenue.sections\n .filter((section) => !selectedSectionIdSet.has(section.id))\n .map((section) => ({\n ...section,\n rows: section.rows.map((row) => ({\n ...row,\n seats: row.seats.filter((seat) => !selectedSeatIdSet.has(seat.id)),\n })),\n })),\n tables: currentVenue.tables.map((table) => ({\n ...table,\n seats: table.seats.filter((seat) => !selectedSeatIdSet.has(seat.id)),\n })),\n };\n\n historyRef.current.execute({\n description: \"Delete selected objects\",\n execute: () => {\n store.getState().setVenue(nextVenue);\n store.getState().clearSelection();\n },\n undo: () => {\n store.getState().setVenue(previousVenue);\n },\n });\n }, [store]);\n\n const renderActiveToolOptionsOverlay = () => {\n const stopPointerPropagation = (e: React.PointerEvent<HTMLDivElement>) => e.stopPropagation();\n const renderOverlay = (content: React.ReactNode) => (\n <div className=\"seatmap-editor__tool-options-overlay\">\n <div\n className=\"seatmap-editor__tool-options-shell\"\n onPointerDown={stopPointerPropagation}\n onPointerMove={stopPointerPropagation}\n onPointerUp={stopPointerPropagation}\n >\n {content}\n </div>\n </div>\n );\n const renderSwitch = (label: string, checked: boolean, onToggle: () => void) => (\n <label className=\"seatmap-editor__switch\">\n <span>{label}</span>\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n onClick={onToggle}\n className={`seatmap-editor__switch-track${checked ? \" is-checked\" : \"\"}`}\n >\n <span className=\"seatmap-editor__switch-thumb\" />\n </button>\n </label>\n );\n const renderRange = (\n label: string,\n value: number,\n onChange: (next: number) => void,\n hint: string,\n options?: {\n min?: number;\n max?: number;\n step?: number;\n valueFormatter?: (n: number) => string;\n disabled?: boolean;\n displayAsKnob?: boolean;\n knobMode?: \"vertical\" | \"dial360\";\n knobFillStartDeg?: number;\n valuePlacement?: \"header\" | \"knob\";\n knobRightContent?: React.ReactNode;\n compactKnobLayout?: boolean;\n knobLayout?: \"default\" | \"label-value-knob\";\n knobNamespace?: \"motion\" | \"tool\";\n },\n ) => {\n const min = options?.min ?? 0;\n const max = options?.max ?? 100;\n const step = options?.step ?? 1;\n const displayValue = options?.valueFormatter ? options.valueFormatter(value) : Math.round(value);\n const normalized = max > min ? (value - min) / (max - min) : 0;\n const clampedNormalized = clampRange(normalized, 0, 1);\n const isDial360 = options?.knobMode === \"dial360\";\n const knobFillStartDeg = options?.knobFillStartDeg ?? (isDial360 ? -90 : -130);\n const knobAngle = isDial360\n ? knobFillStartDeg + clampedNormalized * 360\n : -130 + clampedNormalized * 260;\n const knobFillPercent = isDial360\n ? clampedNormalized * 100\n : clampedNormalized * ((260 / 360) * 100);\n const knobDisabled = Boolean(options?.disabled);\n const showKnob = Boolean(options?.displayAsKnob);\n const valuePlacement = options?.valuePlacement ?? \"header\";\n const compactKnobLayout = Boolean(options?.compactKnobLayout) && showKnob;\n const isLabelValueKnobLayout = showKnob && options?.knobLayout === \"label-value-knob\";\n const knobNamespace = options?.knobNamespace ?? \"motion\";\n const tooltipText = knobDisabled\n ? \"Disabled while advanced overrides are enabled.\"\n : hint;\n const commitClampedValue = (raw: number) => {\n const clamped = clampRange(raw, min, max);\n const stepped = Math.round((clamped - min) / step) * step + min;\n onChange(clampRange(stepped, min, max));\n };\n\n return (\n <label\n className={`seatmap-editor__motion-slider${compactKnobLayout ? \" seatmap-editor__motion-slider--compact-knob\" : \"\"}${isLabelValueKnobLayout ? \" seatmap-editor__motion-slider--label-value-knob\" : \"\"}${knobDisabled ? \" is-disabled\" : \"\"}`}\n >\n {!isLabelValueKnobLayout && (\n <div className=\"seatmap-editor__motion-slider-header\">\n <span className=\"seatmap-editor__label\" title={label}>{label}</span>\n {valuePlacement === \"header\" && (\n <span className=\"seatmap-editor__motion-slider-value\">\n {displayValue}\n </span>\n )}\n </div>\n )}\n {showKnob ? (\n <div className={`seatmap-editor__motion-knob-row${isLabelValueKnobLayout ? \" seatmap-editor__motion-knob-row--label-value-knob\" : \"\"}`}>\n {isLabelValueKnobLayout && (\n <span className=\"seatmap-editor__label\" title={label}>{label}</span>\n )}\n {isLabelValueKnobLayout && (\n <span className=\"seatmap-editor__motion-slider-value\">\n {displayValue}\n </span>\n )}\n <button\n type=\"button\"\n className=\"seatmap-editor__motion-knob\"\n aria-label={label}\n title={tooltipText}\n disabled={knobDisabled}\n onPointerDown={(e) => {\n if (knobDisabled) return;\n e.preventDefault();\n const pointerId = e.pointerId;\n const target = e.currentTarget;\n target.setPointerCapture(pointerId);\n const range = max - min;\n const getDialValue = (clientX: number, clientY: number) => {\n const rect = target.getBoundingClientRect();\n const centerX = rect.left + rect.width / 2;\n const centerY = rect.top + rect.height / 2;\n const angle = Math.atan2(clientY - centerY, clientX - centerX);\n const clockwiseFromUpDeg = ((((angle * 180) / Math.PI) + 90) % 360 + 360) % 360;\n return min + (clockwiseFromUpDeg / 360) * range;\n };\n\n let handleMove: (ev: PointerEvent) => void;\n if (isDial360) {\n commitClampedValue(getDialValue(e.clientX, e.clientY));\n handleMove = (ev: PointerEvent) => {\n commitClampedValue(getDialValue(ev.clientX, ev.clientY));\n };\n } else {\n const startY = e.clientY;\n const startValue = value;\n const dragHeightPx = 180;\n handleMove = (ev: PointerEvent) => {\n const deltaY = startY - ev.clientY;\n commitClampedValue(startValue + (deltaY / dragHeightPx) * range);\n };\n }\n const handleUp = () => {\n target.removeEventListener(\"pointermove\", handleMove);\n target.removeEventListener(\"pointerup\", handleUp);\n target.removeEventListener(\"pointercancel\", handleUp);\n };\n target.addEventListener(\"pointermove\", handleMove);\n target.addEventListener(\"pointerup\", handleUp);\n target.addEventListener(\"pointercancel\", handleUp);\n }}\n >\n <span\n className={`seatmap-editor__motion-knob-ring${knobNamespace === \"tool\" ? \" seatmap-editor__motion-knob-ring--tool\" : \" seatmap-editor__motion-knob-ring--motion\"}`}\n style={{\n [knobNamespace === \"tool\" ? \"--tool-knob-fill\" : \"--motion-knob-fill\"]: `${Math.round(knobFillPercent)}%`,\n [knobNamespace === \"tool\" ? \"--tool-knob-start-angle\" : \"--motion-knob-start-angle\"]: `${knobFillStartDeg}deg`,\n }}\n />\n <span\n className=\"seatmap-editor__motion-knob-indicator\"\n style={{ transform: `translate(-50%, -100%) rotate(${knobAngle}deg)` }}\n />\n </button>\n {valuePlacement === \"knob\" && (\n <span className=\"seatmap-editor__motion-slider-value seatmap-editor__motion-slider-value--knob\">\n {displayValue}\n </span>\n )}\n {options?.knobRightContent && (\n <div className=\"seatmap-editor__motion-knob-right-content\">\n {options.knobRightContent}\n </div>\n )}\n </div>\n ) : (\n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={value}\n onChange={(e) => commitClampedValue(Number(e.target.value) || 0)}\n disabled={knobDisabled}\n className=\"seatmap-editor__panel-range\"\n title={tooltipText}\n />\n )}\n </label>\n );\n };\n const renderOptionCard = (title: string, body: React.ReactNode, className?: string) => (\n <div className={`seatmap-editor__option-card${className ? ` ${className}` : \"\"}`}>\n <span className=\"seatmap-editor__option-card-title seatmap-editor__option-card-title--group\">{title}</span>\n <div className=\"seatmap-editor__option-card-subdivider\" />\n <div className=\"seatmap-editor__option-card-body\">\n {body}\n </div>\n </div>\n );\n const renderGridOptionsCard = () => (\n renderOptionCard(\n \"Grid options\",\n <>\n {renderSwitch(\"Grid\", gridEnabled, () => setGridEnabled((v) => !v))}\n <div className=\"seatmap-editor__option-card-divider\" />\n <div className=\"seatmap-editor__option-row\">\n {renderSwitch(\"Canvas grid\", showCanvasGrid, () => setShowCanvasGrid((v) => !v))}\n <select\n value={canvasGridStyle}\n onChange={(e) => setCanvasGridStyle(e.target.value as CanvasGridStyle)}\n className=\"seatmap-editor__select\"\n disabled={!gridEnabled || !showCanvasGrid}\n >\n <option value=\"solid\">Solid</option>\n <option value=\"dashed\">Dashed</option>\n <option value=\"dotted\">Dotted</option>\n </select>\n </div>\n <div className=\"seatmap-editor__option-row\">\n {renderSwitch(\"Section grid\", showSectionGrid, () => setShowSectionGrid((v) => !v))}\n <select\n value={sectionGridStyle}\n onChange={(e) => setSectionGridStyle(e.target.value as SectionGridStyle)}\n className=\"seatmap-editor__select\"\n disabled={!gridEnabled || !showSectionGrid}\n >\n <option value=\"dots\">Dots</option>\n <option value=\"cross\">Cross</option>\n </select>\n </div>\n </>,\n )\n );\n const renderMotionSettingsCard = () => (\n renderOptionCard(\n \"Editor motion\",\n <div className=\"seatmap-editor__motion-layout\">\n <div className=\"seatmap-editor__motion-column seatmap-editor__motion-column--basic\">\n <span className=\"seatmap-editor__option-card-title\">Basic</span>\n <div className=\"seatmap-editor__motion-control-grid\">\n {renderRange(\n \"Section draw zoom jelly\",\n sectionDrawJelly,\n setSectionDrawJelly,\n \"Controls how floaty auto-focus feels after drawing a section.\",\n { disabled: useAdvancedMotion, displayAsKnob: true, knobLayout: \"label-value-knob\" },\n )}\n {renderRange(\n \"Fit zoom jelly\",\n fitViewJelly,\n setFitViewJelly,\n \"Controls smoothness and duration of Fit action.\",\n { disabled: useAdvancedMotion, displayAsKnob: true, knobLayout: \"label-value-knob\" },\n )}\n {renderRange(\n \"Canvas pan inertia\",\n panInertiaJelly,\n setPanInertiaJelly,\n \"Controls glide amount after you release a pan drag.\",\n { disabled: useAdvancedMotion, displayAsKnob: true, knobLayout: \"label-value-knob\" },\n )}\n {renderRange(\n \"Pointer scroll zoom jelly\",\n pointerScrollZoomJelly,\n setPointerScrollZoomJelly,\n \"Controls how smooth pointer wheel zoom feels.\",\n { disabled: useAdvancedMotion, displayAsKnob: true, knobLayout: \"label-value-knob\" },\n )}\n </div>\n <div className=\"seatmap-editor__option-row seatmap-editor__option-row--end seatmap-editor__motion-basic-actions\">\n <button\n type=\"button\"\n className=\"seatmap-editor__panel-button seatmap-editor__panel-button--tiny\"\n onClick={handleResetMotionSettings}\n >\n Reset to defaults\n </button>\n </div>\n {renderSwitch(\"Use advanced overrides\", useAdvancedMotion, () => setUseAdvancedMotion((v) => !v))}\n </div>\n\n {useAdvancedMotion && (\n <div className=\"seatmap-editor__motion-column seatmap-editor__motion-column--advanced\">\n <div className=\"seatmap-editor__motion-advanced-header\">\n <span className=\"seatmap-editor__option-card-title\">Advanced</span>\n </div>\n <span className=\"seatmap-editor__option-card-title seatmap-editor__option-card-title--subtle\">Section</span>\n <div className=\"seatmap-editor__motion-control-grid is-knob-grid\">\n {renderRange(\n \"Draw duration\",\n sectionDrawDurationMs,\n setSectionDrawDurationMs,\n \"Animation duration in milliseconds.\",\n {\n min: 100,\n max: 3000,\n step: 10,\n valueFormatter: (n) => `${Math.round(n)}ms`,\n displayAsKnob: true,\n compactKnobLayout: true,\n },\n )}\n {renderRange(\n \"Center pull\",\n sectionDrawCenterPullPct,\n setSectionDrawCenterPullPct,\n \"How strongly section draw focus moves toward section center.\",\n {\n min: 0,\n max: 100,\n step: 1,\n valueFormatter: (n) => `${Math.round(n)}%`,\n displayAsKnob: true,\n compactKnobLayout: true,\n },\n )}\n {renderRange(\n \"Zoom boost\",\n sectionDrawZoomBoostPct,\n setSectionDrawZoomBoostPct,\n \"Additional zoom applied during section draw focus.\",\n {\n min: 0,\n max: 50,\n step: 1,\n valueFormatter: (n) => `${Math.round(n)}%`,\n displayAsKnob: true,\n compactKnobLayout: true,\n },\n )}\n {renderRange(\n \"Overshoot\",\n sectionDrawOvershootPct,\n setSectionDrawOvershootPct,\n \"Spring amount near the end of section auto-focus.\",\n {\n min: 0,\n max: 180,\n step: 1,\n valueFormatter: (n) => `${Math.round(n)}%`,\n displayAsKnob: true,\n compactKnobLayout: true,\n },\n )}\n </div>\n <div className=\"seatmap-editor__motion-group-divider\" />\n\n <span className=\"seatmap-editor__option-card-title seatmap-editor__option-card-title--subtle\">Fit</span>\n <div className=\"seatmap-editor__motion-control-grid is-knob-grid\">\n {renderRange(\n \"Duration\",\n fitViewDurationMs,\n setFitViewDurationMs,\n \"Animation duration for Fit action.\",\n {\n min: 100,\n max: 3000,\n step: 10,\n valueFormatter: (n) => `${Math.round(n)}ms`,\n displayAsKnob: true,\n compactKnobLayout: true,\n },\n )}\n {renderRange(\n \"Overshoot\",\n fitViewOvershootPct,\n setFitViewOvershootPct,\n \"Spring amount near the end of Fit movement.\",\n {\n min: 0,\n max: 180,\n step: 1,\n valueFormatter: (n) => `${Math.round(n)}%`,\n displayAsKnob: true,\n compactKnobLayout: true,\n },\n )}\n </div>\n <div className=\"seatmap-editor__motion-group-divider\" />\n\n <span className=\"seatmap-editor__option-card-title seatmap-editor__option-card-title--subtle\">Pan</span>\n <div className=\"seatmap-editor__motion-control-grid is-knob-grid\">\n {renderRange(\n \"Inertia carry\",\n panInertiaCarryPct,\n setPanInertiaCarryPct,\n \"Velocity retained at pan release.\",\n {\n min: 0,\n max: 95,\n step: 1,\n valueFormatter: (n) => `${Math.round(n)}%`,\n displayAsKnob: true,\n compactKnobLayout: true,\n },\n )}\n {renderRange(\n \"Inertia friction\",\n panInertiaFrictionPct,\n setPanInertiaFrictionPct,\n \"Per-frame damping (higher = longer glide).\",\n {\n min: 70,\n max: 99,\n step: 1,\n valueFormatter: (n) => `${Math.round(n)}%`,\n displayAsKnob: true,\n compactKnobLayout: true,\n },\n )}\n {renderRange(\n \"Stop speed\",\n panInertiaMinSpeedMilli,\n setPanInertiaMinSpeedMilli,\n \"Stop threshold in px/ms x1000.\",\n {\n min: 1,\n max: 50,\n step: 1,\n valueFormatter: (n) => `${Math.round(n)}`,\n displayAsKnob: true,\n compactKnobLayout: true,\n },\n )}\n {renderRange(\n \"Velocity blend\",\n panVelocityBlendPct,\n setPanVelocityBlendPct,\n \"How quickly release velocity follows latest drag samples.\",\n {\n min: 5,\n max: 95,\n step: 1,\n valueFormatter: (n) => `${Math.round(n)}%`,\n displayAsKnob: true,\n compactKnobLayout: true,\n },\n )}\n {renderRange(\n \"Stop delta\",\n panStopDeltaMilli,\n setPanStopDeltaMilli,\n \"Treat movement below this px x1000 as stopped while dragging.\",\n {\n min: 0,\n max: 4000,\n step: 10,\n valueFormatter: (n) => `${Math.round(n)}`,\n displayAsKnob: true,\n compactKnobLayout: true,\n },\n )}\n {renderRange(\n \"Release idle\",\n panReleaseIdleMs,\n setPanReleaseIdleMs,\n \"If pointer pauses this long before release, inertia is dropped.\",\n {\n min: 0,\n max: 400,\n step: 5,\n valueFormatter: (n) => `${Math.round(n)}ms`,\n displayAsKnob: true,\n compactKnobLayout: true,\n },\n )}\n </div>\n <div className=\"seatmap-editor__motion-group-divider\" />\n\n <span className=\"seatmap-editor__option-card-title seatmap-editor__option-card-title--subtle\">Pointer scroll zoom</span>\n <div className=\"seatmap-editor__motion-control-grid is-knob-grid\">\n {renderRange(\n \"Duration\",\n pointerScrollZoomDurationMs,\n setPointerScrollZoomDurationMs,\n \"Wheel zoom easing duration.\",\n {\n min: 60,\n max: 600,\n step: 5,\n valueFormatter: (n) => `${Math.round(n)}ms`,\n displayAsKnob: true,\n compactKnobLayout: true,\n },\n )}\n {renderRange(\n \"Strength\",\n pointerScrollZoomStrengthPct,\n setPointerScrollZoomStrengthPct,\n \"Per-frame zoom blend amount (higher = snappier response).\",\n {\n min: 8,\n max: 55,\n step: 1,\n valueFormatter: (n) => `${Math.round(n)}%`,\n displayAsKnob: true,\n compactKnobLayout: true,\n },\n )}\n {renderRange(\n \"Sensitivity\",\n pointerScrollZoomDeltaDivisor,\n setPointerScrollZoomDeltaDivisor,\n \"Wheel delta divisor (higher = less sensitive).\",\n {\n min: 250,\n max: 1400,\n step: 10,\n valueFormatter: (n) => `${Math.round(n)}`,\n displayAsKnob: true,\n compactKnobLayout: true,\n },\n )}\n </div>\n <div className=\"seatmap-editor__motion-advanced-actions\">\n <button\n type=\"button\"\n className=\"seatmap-editor__panel-button seatmap-editor__panel-button--tiny\"\n onClick={handleApplyAdvancedToBasic}\n title=\"Recalculate basic knobs from advanced settings\"\n >\n Apply to basic\n </button>\n </div>\n </div>\n )}\n </div>,\n `seatmap-editor__option-card--motion${useAdvancedMotion ? \" is-advanced-open\" : \"\"}`,\n )\n );\n\n if (activeToolName === \"add-section\") {\n return renderOverlay(\n <>\n <span className=\"seatmap-editor__tool-options-title\">Tool Options</span>\n <div className=\"seatmap-editor__tool-options-divider\" />\n {renderOptionCard(\"Section\", (\n <div className=\"seatmap-editor__option-row\">\n <button\n onClick={() => handleSectionToolVariantChange(\"section\", \"rectangle\")}\n className={`seatmap-editor__segmented-button${sectionKind === \"section\" && sectionMode === \"rectangle\" ? \" is-active\" : \"\"}`}\n >\n Rectangle\n </button>\n <button\n onClick={() => handleSectionToolVariantChange(\"section\", \"polygon\")}\n className={`seatmap-editor__segmented-button${sectionKind === \"section\" && sectionMode === \"polygon\" ? \" is-active\" : \"\"}`}\n >\n Polygon\n </button>\n </div>\n ))}\n {renderOptionCard(\"Stage\", (\n <div className=\"seatmap-editor__option-row\">\n <button\n onClick={() => handleSectionToolVariantChange(\"stage\", \"rectangle\")}\n className={`seatmap-editor__segmented-button${sectionKind === \"stage\" && sectionMode === \"rectangle\" ? \" is-active\" : \"\"}`}\n >\n Rectangle\n </button>\n <button\n onClick={() => handleSectionToolVariantChange(\"stage\", \"polygon\")}\n className={`seatmap-editor__segmented-button${sectionKind === \"stage\" && sectionMode === \"polygon\" ? \" is-active\" : \"\"}`}\n >\n Polygon\n </button>\n </div>\n ))}\n {renderOptionCard(\"Dancefloor\", (\n <div className=\"seatmap-editor__option-row\">\n <button\n onClick={() => handleSectionToolVariantChange(\"dancefloor\", \"rectangle\")}\n className={`seatmap-editor__segmented-button${sectionKind === \"dancefloor\" && sectionMode === \"rectangle\" ? \" is-active\" : \"\"}`}\n >\n Rectangle\n </button>\n <button\n onClick={() => handleSectionToolVariantChange(\"dancefloor\", \"polygon\")}\n className={`seatmap-editor__segmented-button${sectionKind === \"dancefloor\" && sectionMode === \"polygon\" ? \" is-active\" : \"\"}`}\n >\n Polygon\n </button>\n </div>\n ))}\n {renderOptionCard(\"Section resize\", (\n <button\n onClick={() => handleToggleSectionResize(true)}\n className={`seatmap-editor__segmented-button${sectionResizeEnabled ? \" is-active\" : \"\"}`}\n title=\"Enable section corner/side resizing\"\n >\n {sectionResizeEnabled ? \"Resize On\" : \"Resize Off\"}\n </button>\n ))}\n {renderOptionCard(\"Auto focus\", (\n renderSwitch(\"Zoom to new section\", autoFocusNewSection, () =>\n setAutoFocusNewSection((current) => !current),\n )\n ))}\n {isGridOptionsOpen && renderGridOptionsCard()}\n {isEditorSettingsOpen && renderMotionSettingsCard()}\n </>\n );\n }\n\n if (activeToolName === \"select\") {\n return renderOverlay(\n <>\n <span className=\"seatmap-editor__tool-options-title\">Tool Options</span>\n <div className=\"seatmap-editor__tool-options-divider\" />\n {renderOptionCard(\"Section resize\", (\n <button\n onClick={() => handleToggleSectionResize(false)}\n className={`seatmap-editor__segmented-button${sectionResizeEnabled ? \" is-active\" : \"\"}`}\n >\n {sectionResizeEnabled ? \"Resize On\" : \"Resize Off\"}\n </button>\n ))}\n {isGridOptionsOpen && renderGridOptionsCard()}\n {isEditorSettingsOpen && renderMotionSettingsCard()}\n </>\n );\n }\n\n if (activeToolName !== \"add-row\") {\n if (!isGridOptionsOpen && !isEditorSettingsOpen) return null;\n return renderOverlay(\n <>\n <span className=\"seatmap-editor__tool-options-title\">Tool Options</span>\n <div className=\"seatmap-editor__tool-options-divider\" />\n {isGridOptionsOpen && renderGridOptionsCard()}\n {isEditorSettingsOpen && renderMotionSettingsCard()}\n </>\n );\n }\n\n return renderOverlay(\n <>\n <span className=\"seatmap-editor__tool-options-title\">Tool Options</span>\n <div className=\"seatmap-editor__tool-options-divider\" />\n {renderOptionCard(\"Row layout\", (\n <div className=\"seatmap-editor__row-layout-body\">\n <div className=\"seatmap-editor__row-layout-controls\">\n <label className=\"seatmap-editor__label seatmap-editor__option-row\">\n Seats:\n <div className=\"seatmap-editor__input-stepper\">\n <input\n type=\"number\"\n min={1}\n max={100}\n value={seatsPerRow}\n onChange={(e) =>\n handleSeatsPerRowChange(Math.max(1, Math.min(100, parseInt(e.target.value) || 1)))\n }\n className=\"seatmap-editor__input seatmap-editor__input--stepper\"\n />\n <button\n type=\"button\"\n className=\"seatmap-editor__stepper-button\"\n aria-label=\"Increase seats per row\"\n onClick={() => handleSeatsPerRowChange(seatsPerRow + 1)}\n >\n +\n </button>\n <button\n type=\"button\"\n className=\"seatmap-editor__stepper-button\"\n aria-label=\"Decrease seats per row\"\n onClick={() => handleSeatsPerRowChange(seatsPerRow - 1)}\n >\n -\n </button>\n </div>\n </label>\n\n <label className=\"seatmap-editor__label seatmap-editor__option-row\">\n Rows:\n <div className=\"seatmap-editor__input-stepper\">\n <input\n type=\"number\"\n min={1}\n max={100}\n value={rowsCount}\n onChange={(e) =>\n handleRowsCountChange(Math.max(1, Math.min(100, parseInt(e.target.value) || 1)))\n }\n className=\"seatmap-editor__input seatmap-editor__input--stepper\"\n />\n <button\n type=\"button\"\n className=\"seatmap-editor__stepper-button\"\n aria-label=\"Increase rows\"\n onClick={() => handleRowsCountChange(rowsCount + 1)}\n >\n +\n </button>\n <button\n type=\"button\"\n className=\"seatmap-editor__stepper-button\"\n aria-label=\"Decrease rows\"\n onClick={() => handleRowsCountChange(rowsCount - 1)}\n >\n -\n </button>\n </div>\n </label>\n\n <div className=\"seatmap-editor__option-card-title\">\n Total seats to add: {seatsPerRow * Math.max(1, rowsCount)}\n </div>\n </div>\n <div className=\"seatmap-editor__row-layout-separator\" />\n <div className=\"seatmap-editor__row-presets\">\n <table className=\"seatmap-editor__row-presets-table\">\n <tbody>\n {rowPresetRows.map((rowPreset) => (\n <tr key={`row-preset-${rowPreset}`}>\n <th scope=\"row\" className=\"seatmap-editor__row-preset-row-label\">\n {rowPreset}\n </th>\n {rowPresetSeats.map((seatPreset) => {\n const isActive = rowsCount === rowPreset && seatsPerRow === seatPreset;\n return (\n <td key={`${rowPreset}-${seatPreset}`}>\n <button\n type=\"button\"\n className={`seatmap-editor__row-preset-button${isActive ? \" is-active\" : \"\"}`}\n onClick={() => {\n handleRowsCountChange(rowPreset);\n handleSeatsPerRowChange(seatPreset);\n }}\n >\n {seatPreset}\n </button>\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n ))}\n\n {renderOptionCard(\"Orientation\", (\n <>\n <div className=\"seatmap-editor__option-row seatmap-editor__orientation-toggle\">\n <span\n className={`seatmap-editor__orientation-label${rowDirectionArrowMode === \"viewer-direction\" ? \" is-active\" : \"\"}`}\n >\n Viewer direction\n </span>\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={rowDirectionArrowMode === \"row-direction\"}\n onClick={() =>\n setRowDirectionArrowMode((mode) =>\n mode === \"row-direction\" ? \"viewer-direction\" : \"row-direction\",\n )\n }\n className={`seatmap-editor__switch-track seatmap-editor__switch-track--wide${rowDirectionArrowMode === \"row-direction\" ? \" is-checked\" : \"\"}`}\n title=\"Toggle arrow orientation mode\"\n >\n <span\n className=\"seatmap-editor__switch-thumb seatmap-editor__switch-thumb--wide\"\n style={{\n transform:\n rowDirectionArrowMode === \"row-direction\"\n ? \"translateX(22px)\"\n : \"translateX(0)\",\n }}\n />\n </button>\n <span\n className={`seatmap-editor__orientation-label${rowDirectionArrowMode === \"row-direction\" ? \" is-active\" : \"\"}`}\n >\n Row direction\n </span>\n </div>\n\n {renderRange(\n \"Orientation\",\n rowOrientationKnobDeg,\n handleRowOrientationKnobChange,\n \"Drag vertically on the knob to set row orientation.\",\n {\n min: 0,\n max: 359,\n step: 1,\n valueFormatter: (n) => `${Math.round(n)}°`,\n displayAsKnob: true,\n knobMode: \"dial360\",\n knobFillStartDeg: 0,\n knobNamespace: \"tool\",\n valuePlacement: \"knob\",\n knobRightContent: (\n <button\n onClick={handleRotateRowOrientationQuarterTurn}\n className=\"seatmap-editor__segmented-button\"\n title=\"Rotate row direction by 90 degrees\"\n >\n +90°\n </button>\n ),\n },\n )}\n\n <div className=\"seatmap-editor__hint-text\">\n {rowDirectionArrowMode === \"row-direction\"\n ? \"Arrow: row direction (viewer +90°)\"\n : \"Arrow: viewer direction (0° = up, 90° = right)\"}\n </div>\n </>\n ))}\n {isGridOptionsOpen && renderGridOptionsCard()}\n {isEditorSettingsOpen && renderMotionSettingsCard()}\n </>\n );\n };\n\n // Keyboard shortcuts — skip when user is typing in an input field\n useEffect(() => {\n const isTyping = () => {\n const activeElement = document.activeElement as HTMLElement | null;\n if (!activeElement) return false;\n const tag = activeElement.tagName;\n return (\n tag === \"INPUT\" ||\n tag === \"TEXTAREA\" ||\n tag === \"SELECT\" ||\n activeElement.isContentEditable\n );\n };\n const handler = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key === \"z\") {\n e.preventDefault();\n if (e.shiftKey) historyRef.current.redo();\n else historyRef.current.undo();\n return;\n }\n if (isTyping()) return;\n if (e.key === \"Delete\" || e.key === \"Backspace\") {\n e.preventDefault();\n handleDeleteSelectedObjects();\n return;\n }\n if (e.key === \"Escape\" && activeToolName === \"add-section\") {\n e.preventDefault();\n addSectionTool.cancelDrawing();\n return;\n }\n if (e.key === \"v\" || e.key === \"2\") setActiveTool(\"select\");\n if (e.key === \"h\" || e.key === \"1\") setActiveTool(\"pan\");\n if (e.key === \"s\" || e.key === \"3\") setActiveTool(\"add-section\");\n if (e.key === \"r\" || e.key === \"4\") setActiveTool(\"add-row\");\n if (e.key === \"a\" || e.key === \"5\") setActiveTool(\"add-seat\");\n if (e.key === \" \") {\n e.preventDefault();\n }\n };\n const upHandler = (e: KeyboardEvent) => {\n if (isTyping()) return;\n if (e.key === \" \") {\n e.preventDefault();\n setActiveTool(activeToolName === \"pan\" ? lastNonPanToolNameRef.current : \"pan\");\n }\n };\n window.addEventListener(\"keydown\", handler);\n window.addEventListener(\"keyup\", upHandler);\n return () => {\n window.removeEventListener(\"keydown\", handler);\n window.removeEventListener(\"keyup\", upHandler);\n };\n }, [setActiveTool, activeToolName, handleDeleteSelectedObjects, addSectionTool]);\n\n // Tool pointer event adapter for the canvas overlay\n const toToolPointerEvent = useCallback(\n (e: React.PointerEvent<HTMLDivElement>): ToolPointerEvent => {\n const rect = e.currentTarget.getBoundingClientRect();\n const screenX = e.clientX - rect.left;\n const screenY = e.clientY - rect.top;\n const world = viewport.screenToWorld(screenX, screenY);\n return {\n worldX: world.x,\n worldY: world.y,\n screenX: e.clientX,\n screenY: e.clientY,\n shiftKey: e.shiftKey,\n ctrlKey: e.ctrlKey,\n metaKey: e.metaKey,\n button: e.button,\n };\n },\n [viewport],\n );\n\n const bumpDragPreview = useCallback(() => {\n if (activeToolRef.current === selectTool) {\n setDragPreviewVersion((v) => v + 1);\n }\n }, [selectTool]);\n\n const handlePointerRelease = useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n const toolEvent = toToolPointerEvent(e);\n activeToolRef.current.onPointerUp(toolEvent, viewport, store);\n bumpDragPreview();\n },\n [toToolPointerEvent, viewport, store, bumpDragPreview],\n );\n\n const handleCanvasPointerDown = useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n if (e.button !== 0) return;\n // Capture so drag operations complete even if pointer leaves the canvas area\n e.currentTarget.setPointerCapture(e.pointerId);\n const toolEvent = toToolPointerEvent(e);\n activeToolRef.current.onPointerDown(toolEvent, viewport, store);\n bumpDragPreview();\n },\n [toToolPointerEvent, viewport, store, bumpDragPreview],\n );\n\n const handleCanvasPointerMove = useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n const toolEvent = toToolPointerEvent(e);\n activeToolRef.current.onPointerMove(toolEvent, viewport, store);\n const rect = e.currentTarget.getBoundingClientRect();\n setCursorScreenPoint({\n x: e.clientX - rect.left,\n y: e.clientY - rect.top,\n });\n if (activeToolName === \"add-row\") {\n setRowPreviewPoint({ x: toolEvent.worldX, y: toolEvent.worldY });\n }\n bumpDragPreview();\n },\n [toToolPointerEvent, viewport, store, activeToolName, bumpDragPreview],\n );\n\n const handleCanvasPointerUp = useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => handlePointerRelease(e),\n [handlePointerRelease],\n );\n\n const handleCanvasPointerCancel = useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => handlePointerRelease(e),\n [handlePointerRelease],\n );\n\n return (\n <div className=\"seatmap-editor seatmap-editor--root\">\n <Toolbar\n activeTool={activeToolName}\n onToolChange={setActiveTool}\n gridEnabled={gridEnabled}\n isGridOptionsOpen={isGridOptionsOpen}\n onToggleGridOptions={() => setIsGridOptionsOpen((current) => !current)}\n canUndo={canUndo}\n canRedo={canRedo}\n onUndo={() => historyRef.current.undo()}\n onRedo={() => historyRef.current.redo()}\n onFitView={handleFitView}\n onSave={handleSave}\n onLoad={handleLoad}\n showHints={showHints}\n onToggleHints={() => setShowHints((current) => !current)}\n isEditorSettingsOpen={isEditorSettingsOpen}\n onToggleEditorSettings={() => setIsEditorSettingsOpen((current) => !current)}\n />\n\n <div className=\"seatmap-editor__canvas-layout\">\n <div\n ref={canvasAreaRef}\n className=\"seatmap-editor__canvas-area\"\n style={{ cursor: (toolMap[activeToolName] ?? selectTool).cursor }}\n onPointerDown={handleCanvasPointerDown}\n onPointerMove={handleCanvasPointerMove}\n onPointerUp={handleCanvasPointerUp}\n onPointerCancel={handleCanvasPointerCancel}\n onPointerLeave={() => setCursorScreenPoint(null)}\n >\n <SeatmapCanvas\n panOnLeftClick={false}\n showGridLines={gridEnabled && showCanvasGrid}\n showSectionGridDots={gridEnabled && showSectionGrid}\n canvasGridLineStyle={canvasGridStyle}\n sectionGridMarkerStyle={sectionGridStyle}\n panInertiaJelly={panInertiaJelly}\n panInertiaCarry={useAdvancedMotion ? panInertiaCarryPct / 100 : undefined}\n panInertiaFriction={useAdvancedMotion ? panInertiaFrictionPct / 100 : undefined}\n panInertiaMinSpeed={useAdvancedMotion ? panInertiaMinSpeedMilli / 1000 : undefined}\n pointerScrollZoomJelly={pointerScrollZoomJelly}\n pointerScrollZoomDurationMs={useAdvancedMotion ? pointerScrollZoomDurationMs : undefined}\n pointerScrollZoomStrengthPct={useAdvancedMotion ? pointerScrollZoomStrengthPct : undefined}\n pointerScrollZoomDeltaDivisor={useAdvancedMotion ? pointerScrollZoomDeltaDivisor : undefined}\n />\n <DragPreviewOverlay\n sectionOutlines={selectTool.getSectionDragPreviews(venue)}\n seatPoints={selectTool.getSeatDragPreview(venue)}\n viewport={viewport}\n />\n {renderRowOrientationOverlay()}\n {renderSectionResizeOverlay()}\n {renderBackgroundResizeOverlay()}\n {renderActiveToolOptionsOverlay()}\n {polygonPoints.length > 0 && (\n <PolygonPreviewOverlay\n points={polygonPoints}\n closeable={polygonCloseable}\n mode={sectionMode}\n viewport={viewport}\n />\n )}\n {showHints && sectionHintText && cursorScreenPoint && (\n <div\n className=\"seatmap-editor__hint-bubble\"\n style={{\n left: cursorScreenPoint.x + 14,\n top: cursorScreenPoint.y + 14,\n }}\n >\n {sectionHintText}\n </div>\n )}\n </div>\n\n <div className=\"seatmap-editor__sidebar\">\n <PropertyPanel\n venue={venue}\n selectedSeatIds={selectedSeatIds}\n selectedSectionIds={selectedSectionIds}\n history={historyRef.current}\n store={store}\n onUploadBackground={handleUploadBackground}\n onRemoveBackground={handleRemoveBackground}\n onBackgroundOpacityChange={handleBackgroundOpacityChange}\n onBackgroundSizeChange={handleBackgroundSizeChange}\n onBackgroundKeepAspectRatioChange={handleBackgroundKeepAspectRatioChange}\n />\n {selectedSeatIds.size === 0 && (\n <>\n <div className=\"seatmap-editor__sidebar-separator\" />\n <LayerPanel\n venue={venue}\n selectedSeatIds={selectedSeatIds}\n selectedSectionIds={selectedSectionIds}\n onSelectSection={handleSelectSection}\n />\n <div className=\"seatmap-editor__sidebar-separator\" />\n <CategoryManager\n venue={venue}\n history={historyRef.current}\n store={store}\n fetchCategoryPrices={fetchCategoryPrices}\n />\n </>\n )}\n {selectedSeatIds.size === 0 && selectedSectionIds.size === 0 && (\n <>\n <div className=\"seatmap-editor__sidebar-separator\" />\n <StatusManager\n venue={venue}\n history={historyRef.current}\n store={store}\n />\n </>\n )}\n </div>\n </div>\n </div>\n );\n}\n\nexport function SeatmapEditor({ venue, onChange, onSave, fetchCategoryPrices, className }: SeatmapEditorProps) {\n return (\n <SeatmapProvider venue={venue}>\n <div className={className ? `seatmap-editor__host ${className}` : \"seatmap-editor__host\"}>\n <EditorInner onChange={onChange} onSave={onSave} fetchCategoryPrices={fetchCategoryPrices} />\n </div>\n </SeatmapProvider>\n );\n}\n","import type { Viewport, CommandHistory, GeneralAdmissionArea } from \"@nex125/seatmap-core\";\nimport { generateId } from \"@nex125/seatmap-core\";\nimport type { SeatmapStore } from \"@nex125/seatmap-react\";\nimport { BaseTool, type ToolPointerEvent } from \"./BaseTool\";\n\nexport class DrawGATool extends BaseTool {\n readonly name = \"draw-ga\";\n readonly cursor = \"crosshair\";\n\n points: Array<{ x: number; y: number }> = [];\n capacity = 100;\n categoryId = \"\";\n\n constructor(private history: CommandHistory) {\n super();\n }\n\n onPointerDown(e: ToolPointerEvent, _viewport: Viewport, store: SeatmapStore): void {\n if (e.button !== 0) return;\n\n if (e.ctrlKey || e.metaKey) {\n this.finishPolygon(store);\n return;\n }\n\n this.points.push({ x: e.worldX, y: e.worldY });\n }\n\n finishPolygon(store: SeatmapStore): void {\n if (this.points.length < 3) {\n this.points = [];\n return;\n }\n\n const venue = store.getState().venue;\n if (!venue) return;\n\n const area: GeneralAdmissionArea = {\n id: generateId(),\n label: `GA ${Date.now().toString(36).slice(-3).toUpperCase()}`,\n shape: [...this.points],\n capacity: this.capacity,\n categoryId: this.categoryId,\n };\n\n this.history.execute({\n description: `Add GA area \"${area.label}\"`,\n execute: () => {\n const v = store.getState().venue;\n if (!v) return;\n store.getState().setVenue({\n ...v,\n gaAreas: [...v.gaAreas, area],\n });\n },\n undo: () => {\n const v = store.getState().venue;\n if (!v) return;\n store.getState().setVenue({\n ...v,\n gaAreas: v.gaAreas.filter((a) => a.id !== area.id),\n });\n },\n });\n\n this.points = [];\n }\n\n onDeactivate(): void {\n this.points = [];\n }\n}\n","import type { Viewport, CommandHistory, Table, Seat } from \"@nex125/seatmap-core\";\nimport { generateId } from \"@nex125/seatmap-core\";\nimport type { SeatmapStore } from \"@nex125/seatmap-react\";\nimport { BaseTool, type ToolPointerEvent } from \"./BaseTool\";\n\nexport class AddTableTool extends BaseTool {\n readonly name = \"add-table\";\n readonly cursor = \"crosshair\";\n\n shape: \"round\" | \"rectangular\" = \"round\";\n seatsPerTable = 8;\n tableRadius = 40;\n categoryId = \"\";\n\n constructor(private history: CommandHistory) {\n super();\n }\n\n onPointerDown(e: ToolPointerEvent, _viewport: Viewport, store: SeatmapStore): void {\n const venue = store.getState().venue;\n if (!venue) return;\n\n const seats: Seat[] = [];\n for (let i = 0; i < this.seatsPerTable; i++) {\n const angle = (Math.PI * 2 * i) / this.seatsPerTable - Math.PI / 2;\n seats.push({\n id: generateId(),\n label: `${i + 1}`,\n position: {\n x: Math.cos(angle) * this.tableRadius,\n y: Math.sin(angle) * this.tableRadius,\n },\n status: \"available\",\n categoryId: this.categoryId,\n });\n }\n\n const table: Table = {\n id: generateId(),\n label: `Table ${Date.now().toString(36).slice(-3).toUpperCase()}`,\n position: { x: e.worldX, y: e.worldY },\n shape: this.shape,\n seats,\n categoryId: this.categoryId,\n };\n\n this.history.execute({\n description: `Add table \"${table.label}\"`,\n execute: () => {\n const v = store.getState().venue;\n if (!v) return;\n store.getState().setVenue({\n ...v,\n tables: [...v.tables, table],\n });\n },\n undo: () => {\n const v = store.getState().venue;\n if (!v) return;\n store.getState().setVenue({\n ...v,\n tables: v.tables.filter((t) => t.id !== table.id),\n });\n },\n });\n }\n}\n"]}
|