@nex125/seatmap-editor 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +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}) &middot;{\" \"}\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"]}
@@ -0,0 +1,178 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { Venue, Viewport, SpatialIndex, CommandHistory, Vec2 } from '@nex125/seatmap-core';
3
+ import { SeatmapStore } from '@nex125/seatmap-react';
4
+ import { CSSProperties } from 'react';
5
+
6
+ interface SeatmapEditorProps {
7
+ venue?: Venue;
8
+ onChange?: (venue: Venue) => void;
9
+ className?: string;
10
+ }
11
+ declare function SeatmapEditor({ venue, onChange, className }: SeatmapEditorProps): react_jsx_runtime.JSX.Element;
12
+
13
+ interface ToolPointerEvent {
14
+ worldX: number;
15
+ worldY: number;
16
+ screenX: number;
17
+ screenY: number;
18
+ shiftKey: boolean;
19
+ ctrlKey: boolean;
20
+ metaKey: boolean;
21
+ button: number;
22
+ }
23
+ declare abstract class BaseTool {
24
+ abstract readonly name: string;
25
+ abstract readonly cursor: string;
26
+ onPointerDown(_e: ToolPointerEvent, _viewport: Viewport, _store: SeatmapStore): void;
27
+ onPointerMove(_e: ToolPointerEvent, _viewport: Viewport, _store: SeatmapStore): void;
28
+ onPointerUp(_e: ToolPointerEvent, _viewport: Viewport, _store: SeatmapStore): void;
29
+ onActivate(_viewport: Viewport, _store: SeatmapStore): void;
30
+ onDeactivate(): void;
31
+ }
32
+
33
+ declare class PanTool extends BaseTool {
34
+ readonly name = "pan";
35
+ readonly cursor = "grab";
36
+ private isPanning;
37
+ private lastX;
38
+ private lastY;
39
+ onPointerDown(e: ToolPointerEvent): void;
40
+ onPointerMove(e: ToolPointerEvent, viewport: Viewport): void;
41
+ onPointerUp(): void;
42
+ onDeactivate(): void;
43
+ }
44
+
45
+ declare class SelectTool extends BaseTool {
46
+ private spatialIndex;
47
+ private history;
48
+ readonly name = "select";
49
+ readonly cursor = "default";
50
+ private isDragging;
51
+ private dragStartWorld;
52
+ private hasDragged;
53
+ private dragMode;
54
+ selectionRect: {
55
+ x: number;
56
+ y: number;
57
+ width: number;
58
+ height: number;
59
+ } | null;
60
+ constructor(spatialIndex: SpatialIndex, history: CommandHistory);
61
+ onPointerDown(e: ToolPointerEvent, _viewport: Viewport, store: SeatmapStore): void;
62
+ onPointerMove(e: ToolPointerEvent, _viewport: Viewport, store: SeatmapStore): void;
63
+ onPointerUp(e: ToolPointerEvent, _viewport: Viewport, store: SeatmapStore): void;
64
+ private commitDrag;
65
+ private reset;
66
+ onDeactivate(): void;
67
+ }
68
+
69
+ declare class AddSectionTool extends BaseTool {
70
+ private history;
71
+ private categoryId;
72
+ readonly name = "add-section";
73
+ readonly cursor = "crosshair";
74
+ points: Vec2[];
75
+ onPointsChange?: (points: Vec2[], closeable: boolean) => void;
76
+ constructor(history: CommandHistory, categoryId?: string);
77
+ setCategoryId(id: string): void;
78
+ onPointerDown(e: ToolPointerEvent, _viewport: Viewport, store: SeatmapStore): void;
79
+ onPointerMove(e: ToolPointerEvent): void;
80
+ private finishPolygon;
81
+ private notifyChange;
82
+ onDeactivate(): void;
83
+ }
84
+
85
+ declare class AddRowTool extends BaseTool {
86
+ private history;
87
+ private spatialIndex;
88
+ readonly name = "add-row";
89
+ readonly cursor = "cell";
90
+ seatsPerRow: number;
91
+ seatSpacing: number;
92
+ constructor(history: CommandHistory, spatialIndex: SpatialIndex);
93
+ onPointerDown(e: ToolPointerEvent, _viewport: Viewport, store: SeatmapStore): void;
94
+ }
95
+
96
+ declare class AddSeatTool extends BaseTool {
97
+ private history;
98
+ private spatialIndex;
99
+ readonly name = "add-seat";
100
+ readonly cursor = "crosshair";
101
+ constructor(history: CommandHistory, spatialIndex: SpatialIndex);
102
+ onPointerDown(e: ToolPointerEvent, _viewport: Viewport, store: SeatmapStore): void;
103
+ private findNonOverlapping;
104
+ }
105
+
106
+ declare class DrawGATool extends BaseTool {
107
+ private history;
108
+ readonly name = "draw-ga";
109
+ readonly cursor = "crosshair";
110
+ points: Array<{
111
+ x: number;
112
+ y: number;
113
+ }>;
114
+ capacity: number;
115
+ categoryId: string;
116
+ constructor(history: CommandHistory);
117
+ onPointerDown(e: ToolPointerEvent, _viewport: Viewport, store: SeatmapStore): void;
118
+ finishPolygon(store: SeatmapStore): void;
119
+ onDeactivate(): void;
120
+ }
121
+
122
+ declare class AddTableTool extends BaseTool {
123
+ private history;
124
+ readonly name = "add-table";
125
+ readonly cursor = "crosshair";
126
+ shape: "round" | "rectangular";
127
+ seatsPerTable: number;
128
+ tableRadius: number;
129
+ categoryId: string;
130
+ constructor(history: CommandHistory);
131
+ onPointerDown(e: ToolPointerEvent, _viewport: Viewport, store: SeatmapStore): void;
132
+ }
133
+
134
+ interface ToolbarProps {
135
+ activeTool: string;
136
+ onToolChange: (tool: string) => void;
137
+ canUndo: boolean;
138
+ canRedo: boolean;
139
+ onUndo: () => void;
140
+ onRedo: () => void;
141
+ onFitView: () => void;
142
+ onSave: () => void;
143
+ onLoad: () => void;
144
+ seatsPerRow: number;
145
+ onSeatsPerRowChange: (n: number) => void;
146
+ style?: CSSProperties;
147
+ }
148
+ declare function Toolbar({ activeTool, onToolChange, canUndo, canRedo, onUndo, onRedo, onFitView, onSave, onLoad, seatsPerRow, onSeatsPerRowChange, style, }: ToolbarProps): react_jsx_runtime.JSX.Element;
149
+
150
+ interface PropertyPanelProps {
151
+ venue: Venue | null;
152
+ selectedSeatIds: Set<string>;
153
+ history: CommandHistory;
154
+ store: SeatmapStore;
155
+ onUploadBackground?: () => void;
156
+ onRemoveBackground?: () => void;
157
+ onBackgroundOpacityChange?: (opacity: number) => void;
158
+ style?: CSSProperties;
159
+ }
160
+ declare function PropertyPanel({ venue, selectedSeatIds, history, store, onUploadBackground, onRemoveBackground, onBackgroundOpacityChange, style, }: PropertyPanelProps): react_jsx_runtime.JSX.Element;
161
+
162
+ interface CategoryManagerProps {
163
+ venue: Venue | null;
164
+ history: CommandHistory;
165
+ store: SeatmapStore;
166
+ style?: CSSProperties;
167
+ }
168
+ declare function CategoryManager({ venue, history, store, style, }: CategoryManagerProps): react_jsx_runtime.JSX.Element | null;
169
+
170
+ interface LayerPanelProps {
171
+ venue: Venue | null;
172
+ selectedSeatIds: Set<string>;
173
+ onSelectSection: (sectionId: string) => void;
174
+ style?: CSSProperties;
175
+ }
176
+ declare function LayerPanel({ venue, selectedSeatIds, onSelectSection, style, }: LayerPanelProps): react_jsx_runtime.JSX.Element | null;
177
+
178
+ export { AddRowTool, AddSeatTool, AddSectionTool, AddTableTool, BaseTool, CategoryManager, DrawGATool, LayerPanel, PanTool, PropertyPanel, SeatmapEditor, type SeatmapEditorProps, SelectTool, type ToolPointerEvent, Toolbar };