@nex125/seatmap-editor 0.1.0 → 0.1.2
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 +3968 -570
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +95 -12
- package/dist/index.d.ts +95 -12
- package/dist/index.js +3970 -572
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
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/SeatmapEditor.tsx","../src/tools/DrawGATool.ts","../src/tools/AddTableTool.ts"],"names":["clampToPolygon","generateId","pointInPolygon","GRID","snapToGrid","jsxs","jsx","Fragment","useState","useEffect","btnSmall","useSeatmapContext","useStore","useRef","CommandHistory","useMemo","useCallback","serializeVenue","deserializeVenue","venueAABB","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 { clampToPolygon } from \"@nex125/seatmap-core\";\nimport type { Vec2 } from \"@nex125/seatmap-core\";\nimport type { SeatmapStore } from \"@nex125/seatmap-react\";\nimport { BaseTool, type ToolPointerEvent } from \"./BaseTool\";\n\nconst GRID = 20;\n\nfunction snapToGrid(v: number): number {\n return Math.round(v / GRID) * GRID;\n}\n\ntype DragMode =\n | { type: \"none\" }\n | { type: \"seats\"; sectionId: string; originals: Map<string, { rowId: string; pos: Vec2 }> }\n | { type: \"section\"; sectionId: string; origPos: Vec2 }\n | { type: \"rect\" };\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\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 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 hits = this.spatialIndex.queryPoint({ x: e.worldX, y: e.worldY }, 12);\n const seatHit = hits.find((h) => h.type === \"seat\" && h.seatId);\n const sectionHit = hits.find((h) => h.type === \"section\");\n\n const venue = store.getState().venue;\n if (!venue) return;\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 = { type: \"seats\", sectionId, originals };\n return;\n }\n }\n\n // Mode 2: Dragging a section (clicked on section background, not a seat)\n if (sectionHit && !seatHit) {\n const section = venue.sections.find((s) => s.id === sectionHit.sectionId);\n if (section) {\n this.dragMode = {\n type: \"section\",\n sectionId: section.id,\n origPos: { ...section.position },\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 === \"seats\") {\n const { sectionId, originals } = this.dragMode;\n const section = venue.sections.find((s) => s.id === sectionId);\n if (!section) return;\n\n const c = Math.cos(-section.rotation);\n const s2 = Math.sin(-section.rotation);\n const localDx = dx * c - dy * s2;\n const localDy = dx * s2 + dy * c;\n\n const outline = section.outline;\n store.getState().setVenue({\n ...venue,\n sections: venue.sections.map((sec) => {\n if (sec.id !== sectionId) return sec;\n return {\n ...sec,\n rows: sec.rows.map((r) => ({\n ...r,\n seats: r.seats.map((st) => {\n const orig = originals.get(st.id);\n if (!orig) return st;\n let pos = {\n x: orig.pos.x + localDx,\n y: orig.pos.y + localDy,\n };\n if (outline.length >= 3) {\n pos = clampToPolygon(pos, outline);\n }\n return { ...st, position: pos };\n }),\n })),\n };\n }),\n });\n return;\n }\n\n if (this.dragMode.type === \"section\") {\n const { sectionId, origPos } = this.dragMode;\n store.getState().setVenue({\n ...venue,\n sections: venue.sections.map((sec) =>\n sec.id === sectionId\n ? { ...sec, position: { x: origPos.x + dx, y: origPos.y + dy } }\n : sec,\n ),\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);\n } else {\n // Click without drag — select/deselect\n const hits = this.spatialIndex.queryPoint({ x: e.worldX, y: e.worldY }, 12);\n const seatHit = hits.find((h) => h.type === \"seat\" && h.seatId);\n if (seatHit?.seatId) {\n if (e.shiftKey || e.ctrlKey || e.metaKey) {\n store.getState().toggleSeat(seatHit.seatId);\n } else {\n store.getState().setSelection([seatHit.seatId]);\n }\n } else if (!e.shiftKey && !e.ctrlKey && !e.metaKey) {\n store.getState().clearSelection();\n }\n }\n\n this.reset();\n }\n\n private commitDrag(store: SeatmapStore): void {\n const venue = store.getState().venue;\n if (!venue) return;\n\n if (this.dragMode.type === \"seats\") {\n const { sectionId, originals } = this.dragMode;\n const section = venue.sections.find((s) => s.id === sectionId);\n if (!section) return;\n\n // Snap final positions to grid on commit\n const finals = new Map<string, Vec2>();\n for (const row of section.rows) {\n for (const seat of row.seats) {\n if (originals.has(seat.id)) {\n finals.set(seat.id, {\n x: snapToGrid(seat.position.x),\n y: snapToGrid(seat.position.y),\n });\n }\n }\n }\n\n // Apply snapped positions immediately so the user sees the snap\n store.getState().setVenue({\n ...venue,\n sections: venue.sections.map((sec) =>\n sec.id === sectionId\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 this.history.execute({\n description: `Move ${originals.size} seat(s)`,\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 ? {\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 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 ? {\n ...sec,\n rows: sec.rows.map((r) => ({\n ...r,\n seats: r.seats.map((st) => {\n const op = originals.get(st.id);\n return op ? { ...st, position: op.pos } : st;\n }),\n })),\n }\n : sec,\n ),\n });\n },\n });\n }\n\n if (this.dragMode.type === \"section\") {\n const { sectionId, origPos } = this.dragMode;\n const section = venue.sections.find((s) => s.id === sectionId);\n if (!section) return;\n const finalPos = { ...section.position };\n\n this.history.execute({\n description: `Move section`,\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, position: finalPos } : 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 ? { ...s, position: origPos } : 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 }\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 class AddSectionTool extends BaseTool {\n readonly name = \"add-section\";\n readonly cursor = \"crosshair\";\n\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 onPointerDown(e: ToolPointerEvent, _viewport: Viewport, store: SeatmapStore): void {\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.finishPolygon(store);\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.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 finishPolygon(store: SeatmapStore): void {\n if (this.points.length < 3) {\n this.points = [];\n this.notifyChange();\n return;\n }\n\n // Compute centroid\n let cx = 0, cy = 0;\n for (const p of this.points) { cx += p.x; cy += p.y; }\n cx /= this.points.length;\n cy /= this.points.length;\n\n const outline: Vec2[] = this.points.map((p) => ({\n x: p.x - cx,\n y: p.y - cy,\n }));\n\n const newSection: Section = {\n id: generateId(\"sec\"),\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 this.points = [];\n this.notifyChange();\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 } from \"@nex125/seatmap-core\";\nimport type { SeatmapStore } from \"@nex125/seatmap-react\";\nimport { BaseTool, type ToolPointerEvent } from \"./BaseTool\";\n\nconst ROW_GAP = 22;\n\nexport class AddRowTool extends BaseTool {\n readonly name = \"add-row\";\n readonly cursor = \"cell\";\n\n seatsPerRow = 10;\n seatSpacing = 20;\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 const sectionHit = hits.find((h) => h.type === \"section\");\n if (!sectionHit) return;\n\n const venue = store.getState().venue;\n if (!venue) return;\n\n const section = venue.sections.find((s) => s.id === sectionHit.sectionId);\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 let targetY = relX * sin + relY * cos;\n\n // Collect existing row Y positions and snap away from them to avoid overlap\n const existingYs = section.rows\n .flatMap((r) => r.seats.map((s) => s.position.y))\n .filter((y, i, arr) => arr.indexOf(y) === i)\n .sort((a, b) => a - b);\n\n for (const ey of existingYs) {\n if (Math.abs(targetY - ey) < ROW_GAP) {\n targetY = ey + ROW_GAP;\n }\n }\n\n const hasOutline = section.outline.length >= 3;\n const allSeats: Seat[] = [];\n const startX = -((this.seatsPerRow - 1) * this.seatSpacing) / 2;\n for (let i = 0; i < this.seatsPerRow; i++) {\n const pos = { x: startX + i * this.seatSpacing, y: targetY };\n if (hasOutline && !pointInPolygon(pos, section.outline)) continue;\n allSeats.push({\n id: generateId(\"seat\"),\n label: `${allSeats.length + 1}`,\n position: pos,\n status: \"available\",\n categoryId: section.categoryId,\n });\n }\n const seats = allSeats;\n if (seats.length === 0) return;\n\n const rowLabel = String.fromCharCode(65 + section.rows.length);\n const newRow: Row = {\n id: generateId(\"row\"),\n label: rowLabel,\n seats,\n };\n\n const sectionId = section.id;\n\n this.history.execute({\n description: `Add row ${rowLabel} 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, newRow] } : 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) => r.id !== newRow.id) }\n : s,\n ),\n });\n },\n });\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 const sectionHit = hits.find((h) => h.type === \"section\");\n if (!sectionHit) return;\n\n const venue = store.getState().venue;\n if (!venue) return;\n\n const section = venue.sections.find((s) => s.id === sectionHit.sectionId);\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(\"seat\"),\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(\"seat\"),\n label: \"1\",\n position: { x: lx, y: ly },\n status: \"available\",\n categoryId: section.categoryId,\n };\n const newRow: Row = { id: generateId(\"row\"), 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 canUndo: boolean;\n canRedo: boolean;\n onUndo: () => void;\n onRedo: () => void;\n onFitView: () => void;\n onSave: () => void;\n onLoad: () => void;\n seatsPerRow: number;\n onSeatsPerRowChange: (n: number) => 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 border: \"1px solid #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 canUndo,\n canRedo,\n onUndo,\n onRedo,\n onFitView,\n onSave,\n onLoad,\n seatsPerRow,\n onSeatsPerRowChange,\n style,\n}: ToolbarProps) {\n return (\n <div\n style={{\n display: \"flex\",\n gap: 4,\n padding: \"8px 12px\",\n background: \"#1a1a2e\",\n borderBottom: \"1px solid #2a2a4a\",\n alignItems: \"center\",\n flexWrap: \"wrap\",\n ...style,\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 {activeTool === \"add-row\" && (\n <>\n <div style={{ width: 1, height: 24, background: \"#3a3a5a\", margin: \"0 6px\" }} />\n <label style={{ color: \"#9e9e9e\", fontSize: 12, fontFamily: \"system-ui\", display: \"flex\", alignItems: \"center\", gap: 4 }}>\n Seats/row:\n <input\n type=\"number\"\n min={1}\n max={100}\n value={seatsPerRow}\n onChange={(e) => onSeatsPerRowChange(Math.max(1, Math.min(100, parseInt(e.target.value) || 1)))}\n style={{\n width: 50,\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 )}\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\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 );\n}\n","import { useState, useEffect, type CSSProperties } from \"react\";\nimport type { Venue, Section, PricingCategory, CommandHistory, Row } from \"@nex125/seatmap-core\";\nimport { generateId } from \"@nex125/seatmap-core\";\nimport type { SeatmapStore } from \"@nex125/seatmap-react\";\n\nexport interface PropertyPanelProps {\n venue: Venue | null;\n selectedSeatIds: Set<string>;\n history: CommandHistory;\n store: SeatmapStore;\n onUploadBackground?: () => void;\n onRemoveBackground?: () => void;\n onBackgroundOpacityChange?: (opacity: number) => 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 history,\n store,\n onUploadBackground,\n onRemoveBackground,\n onBackgroundOpacityChange,\n style,\n}: PropertyPanelProps) {\n const [selectedSection, setSelectedSection] = useState<Section | null>(null);\n\n useEffect(() => {\n if (!venue || selectedSeatIds.size === 0) {\n setSelectedSection(null);\n return;\n }\n\n const firstSeatId = [...selectedSeatIds][0];\n for (const section of venue.sections) {\n for (const row of section.rows) {\n if (row.seats.some((s) => s.id === firstSeatId)) {\n setSelectedSection(section);\n return;\n }\n }\n }\n setSelectedSection(null);\n }, [venue, selectedSeatIds]);\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 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(\"seat\"),\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(\"row\"), 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 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 if (!selectedSection) {\n return (\n <div style={{ padding: 16, ...style }}>\n <div style={{ color: \"#9e9e9e\", fontSize: 13, fontFamily: \"system-ui\", marginBottom: 12 }}>\n {selectedSeatIds.size === 0\n ? \"Select seats to edit section properties\"\n : `${selectedSeatIds.size} seat(s) selected`}\n </div>\n <div style={labelStyle}>Venue</div>\n <div style={{ color: \"#e0e0e0\", fontSize: 14, fontFamily: \"system-ui\" }}>{venue.name}</div>\n <div style={{ ...labelStyle, marginTop: 12 }}>Sections: {venue.sections.length}</div>\n <div style={{ ...labelStyle, marginTop: 4 }}>\n Seats: {venue.sections.reduce((t, s) => t + s.rows.reduce((rt, r) => rt + r.seats.length, 0), 0)}\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: 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 }\n\n const selectedSeatList: Array<{ seat: typeof selectedSection.rows[0][\"seats\"][0]; row: Row }> = [];\n for (const row of selectedSection.rows) {\n for (const seat of row.seats) {\n if (selectedSeatIds.has(seat.id)) {\n selectedSeatList.push({ seat, row });\n }\n }\n }\n\n return (\n <div style={{ padding: 16, ...style }}>\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\n </div>\n <button onClick={() => deleteSection(selectedSection.id)} style={btnDanger} title=\"Delete section\">\n Delete\n </button>\n </div>\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 <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: 200, overflowY: \"auto\", marginBottom: 10 }}>\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\n {selectedSeatList.length > 0 && selectedSeatList.length <= 10 && (\n <div style={{ marginBottom: 10 }}>\n <div style={labelStyle}>Selected Seats ({selectedSeatList.length})</div>\n <div style={{ maxHeight: 120, overflowY: \"auto\" }}>\n {selectedSeatList.map(({ seat, row }) => (\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 }}\n >\n <span style={{ flex: 1 }}>Row {row.label}, Seat {seat.label}</span>\n <button\n onClick={() => deleteSeat(selectedSection.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 </div>\n </div>\n )}\n {selectedSeatList.length > 10 && (\n <div style={{ ...labelStyle, marginBottom: 10 }}>\n {selectedSeatList.length} seats selected\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 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\nexport function CategoryManager({\n venue,\n history,\n store,\n style,\n}: CategoryManagerProps) {\n const [newName, setNewName] = useState(\"\");\n const [newColor, setNewColor] = useState(\"#4caf50\");\n\n if (!venue) return null;\n\n const addCategory = () => {\n if (!newName.trim()) return;\n const cat: PricingCategory = {\n id: generateId(\"cat\"),\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 removeCategory = (catId: string) => {\n const cat = venue.categories.find((c) => c.id === catId);\n if (!cat) return;\n\n history.execute({\n description: `Remove category \"${cat.name}\"`,\n execute: () => {\n const cur = store.getState().venue;\n if (!cur) return;\n store.getState().setVenue({ ...cur, categories: cur.categories.filter((c) => c.id !== catId) });\n },\n undo: () => {\n const cur = store.getState().venue;\n if (!cur) return;\n store.getState().setVenue({ ...cur, categories: [...cur.categories, cat] });\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 Pricing Categories\n </div>\n\n {venue.categories.map((cat: PricingCategory) => (\n <div\n key={cat.id}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n marginBottom: 6,\n padding: \"4px 8px\",\n borderRadius: 4,\n background: \"#2a2a4a\",\n }}\n >\n <div style={{ width: 14, height: 14, borderRadius: 3, background: cat.color, flexShrink: 0 }} />\n <div style={{ flex: 1, color: \"#e0e0e0\", fontSize: 13, fontFamily: \"system-ui\" }}>{cat.name}</div>\n <button\n onClick={() => removeCategory(cat.id)}\n style={{ ...btnSmall, padding: \"1px 6px\", fontSize: 11 }}\n >\n ✕\n </button>\n </div>\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 </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 onSelectSection: (sectionId: string) => void;\n style?: CSSProperties;\n}\n\nexport function LayerPanel({\n venue,\n selectedSeatIds,\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 selectedSectionId = 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 = section.id === selectedSectionId;\n const catColor = venue.categories.find((c) => c.id === section.categoryId)?.color ?? \"#666\";\n\n return (\n <div\n key={section.id}\n onClick={() => onSelectSection(section.id)}\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 { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport type { Venue } 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 } 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\";\n\nexport interface SeatmapEditorProps {\n venue?: Venue;\n onChange?: (venue: Venue) => void;\n className?: string;\n}\n\nfunction PolygonPreviewOverlay({\n points,\n closeable,\n viewport,\n}: {\n points: Array<{ x: number; y: number }>;\n closeable: boolean;\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 {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 {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 {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 EditorInner({ onChange }: { onChange?: (venue: Venue) => void }) {\n const { store, viewport, spatialIndex } = useSeatmapContext();\n const venue = useStore(store, (s) => s.venue);\n const selectedSeatIds = useStore(store, (s) => s.selectedSeatIds);\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\n const [seatsPerRow, setSeatsPerRow] = useState(10);\n const handleSeatsPerRowChange = useCallback(\n (n: number) => {\n setSeatsPerRow(n);\n addRowTool.seatsPerRow = n;\n },\n [addRowTool],\n );\n\n const setActiveTool = useCallback(\n (name: string) => {\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\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 onChange?.(venue);\n }\n }, [venue, spatialIndex, onChange]);\n\n const handleSave = useCallback(() => {\n const v = store.getState().venue;\n if (!v) return;\n const json = serializeVenue(v);\n const blob = new Blob([json], { type: \"application/json\" });\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = `${v.name.replace(/\\s+/g, \"_\").toLowerCase()}.json`;\n a.click();\n URL.revokeObjectURL(url);\n }, [store]);\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 store.getState().setVenue({\n ...v,\n backgroundImage: dataUrl,\n backgroundImageOpacity: v.backgroundImageOpacity ?? 0.5,\n });\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 });\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 handleSelectSection = useCallback(\n (sectionId: string) => {\n if (!venue) return;\n const section = venue.sections.find((s) => s.id === sectionId);\n if (!section) return;\n const allSeatIds = section.rows.flatMap((r) => r.seats.map((s) => s.id));\n store.getState().setSelection(allSeatIds);\n },\n [venue, store],\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 setActiveTool(\"pan\");\n }\n };\n const upHandler = (e: KeyboardEvent) => {\n if (isTyping()) return;\n if (e.key === \" \") {\n setActiveTool(\"select\");\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]);\n\n // Tool pointer event adapter for the canvas overlay\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 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 const toolEvent: ToolPointerEvent = {\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 activeToolRef.current.onPointerDown(toolEvent, viewport, store);\n },\n [viewport, store],\n );\n\n const handleCanvasPointerMove = useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\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 const toolEvent: ToolPointerEvent = {\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 activeToolRef.current.onPointerMove(toolEvent, viewport, store);\n },\n [viewport, store],\n );\n\n const handleCanvasPointerUp = useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\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 const toolEvent: ToolPointerEvent = {\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 activeToolRef.current.onPointerUp(toolEvent, viewport, store);\n },\n [viewport, store],\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 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 seatsPerRow={seatsPerRow}\n onSeatsPerRowChange={handleSeatsPerRowChange}\n />\n\n <div style={{ display: \"flex\", flex: 1, overflow: \"hidden\" }}>\n <div\n style={{ flex: 1, position: \"relative\", cursor: (toolMap[activeToolName] ?? selectTool).cursor }}\n onPointerDown={handleCanvasPointerDown}\n onPointerMove={handleCanvasPointerMove}\n onPointerUp={handleCanvasPointerUp}\n >\n <SeatmapCanvas panOnLeftClick={false} />\n {polygonPoints.length > 0 && (\n <PolygonPreviewOverlay\n points={polygonPoints}\n closeable={polygonCloseable}\n viewport={viewport}\n />\n )}\n </div>\n\n <div style={sidebarStyle}>\n <PropertyPanel\n venue={venue}\n selectedSeatIds={selectedSeatIds}\n history={historyRef.current}\n store={store}\n onUploadBackground={handleUploadBackground}\n onRemoveBackground={handleRemoveBackground}\n onBackgroundOpacityChange={handleBackgroundOpacityChange}\n />\n <div style={{ height: 1, background: \"#2a2a4a\", margin: \"0 16px\" }} />\n <LayerPanel\n venue={venue}\n selectedSeatIds={selectedSeatIds}\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 />\n </div>\n </div>\n </div>\n );\n}\n\nexport function SeatmapEditor({ venue, onChange, className }: SeatmapEditorProps) {\n return (\n <SeatmapProvider venue={venue}>\n <div className={className} style={{ width: \"100%\", height: \"100%\" }}>\n <EditorInner onChange={onChange} />\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(\"ga\"),\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(\"seat\"),\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(\"tbl\"),\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":["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"]}
|