{"version":3,"sources":["../src/zustand/store/eventGuiStore.ts","../src/components/createObject/applyCustomStyles.ts","../src/hooks/useClipboardActions.ts","../src/hooks/useUndoRedo.ts","../src/hooks/useLockSelection.ts","../src/components/ui/Modal.tsx","../src/components/modals/index.tsx","../src/components/ui/Toast.tsx","../src/components/toolbar/index.tsx","../src/components/ui/select/index.tsx","../src/components/sidebar/hooks/useObjectProperties.ts","../src/components/sidebar/hooks/useObjectUpdater.ts","../src/utils/index.ts","../src/components/sidebar/components/commonProperties/index.tsx","../src/components/sidebar/components/circleProperties/index.tsx","../src/components/sidebar/components/rectangleProperties/index.tsx","../src/components/sidebar/components/textProperties/index.tsx","../src/components/sidebar/components/colorProperties/index.tsx","../src/components/sidebar/components/seatAttributes/CurrencySelect.tsx","../src/components/sidebar/components/seatAttributes/index.tsx","../src/components/sidebar/components/gridSpacing/index.tsx","../src/components/sidebar/index.tsx","../src/components/createObject/index.ts","../src/hooks/useCanvasSetup.ts","../src/hooks/useSelectionHandler.ts","../src/hooks/useMultipleSeatCreator.ts","../src/hooks/useObjectDeletion.ts","../src/hooks/useObjectCreator.ts","../src/hooks/useKeyboardShortcuts.ts","../src/hooks/useSmartSnap.ts","../src/fabricCustomRegistration.ts","../src/components/index.tsx","../src/components/SeatLayoutRenderer.tsx"],"names":["create","uuidv4","fabric","useCallback","useEffect","useState","jsxs","jsx","LuX","LuFolderOpen","LuSave","LuDownload","LuMousePointer","LuGrid2X2","LuLayoutDashboard","RiText","RiShapeLine","LuPlus","RiApps2AddLine","LuUndo","LuRedo","LuScissors","LuCopy","LuClipboardCheck","LuTrash2","React","LuZoomOut","LuZoomIn","LuLock","RiLockUnlockLine","useRef","_a","_b","Fragment","Select","strokeWidthOptions","LuCircleFadingPlus","LuCommand","width","height"],"mappings":"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","file":"index.cjs","sourcesContent":["import { create } from 'zustand';\nimport { fabric } from 'fabric';\nimport { v4 as uuidv4 } from 'uuid';\n\ninterface Seat {\n  id: string;\n  left: number;\n  top: number;\n  radius: number;\n  fill: string;\n  stroke: string;\n  text: string;\n  textSize: number;\n  textColor: string;\n}\n\ninterface Zone {\n  id: string;\n  name: string;\n  isChecked: boolean;\n}\n\nexport type Mode =\n  | 'select'\n  | 'one-seat'\n  | 'multiple-seat'\n  | 'shape-square'\n  | 'text';\nexport type Action = null | 'delete' | 'copy' | 'cut' | 'paste';\n\ninterface EventGuiState {\n  // ::::::::::: Loading state\n  loading: boolean;\n\n  // ::::::::::: Canvas\n  canvas: fabric.Canvas | null;\n  setCanvas: (canvas: fabric.Canvas) => void;\n  seats: Seat[];\n  addSeat: (seat: Seat) => void;\n  updateSeat: (id: string, updates: Partial<Seat>) => void;\n  deleteSeat: (id: string) => void;\n  selectedSeatIds: string[];\n\n  // ::::::::::: Mode\n  toolMode: Mode;\n  setToolMode: (mode: Mode) => void;\n\n  // ::::::::::: Action\n  toolAction: Action;\n  setToolAction: (action: Action) => void;\n\n  setSelectedSeatIds: (ids: string[]) => void;\n  isMultipleSeatMode: boolean;\n  setIsMultipleSeatMode: (isCreating: boolean) => void;\n  zones: Zone[];\n  addZone: (name: string) => void;\n  updateZone: (id: string, updates: Partial<Zone>) => void;\n  deleteZone: (id: string) => void;\n  zoomLevel: number;\n  setZoomLevel: (level: number) => void;\n\n  // :::::::::::::::: Clipboard\n  clipboard: fabric.Object[] | null;\n  setClipboard: (objects: fabric.Object[] | null) => void;\n  lastClickedPoint: { x: number; y: number } | null;\n  setLastClickedPoint: (point: { x: number; y: number } | null) => void;\n\n  // New properties for undo/redo functionality\n  undoStack: string[];\n  redoStack: string[];\n  addToUndoStack: (state: string) => void;\n  undo: () => void;\n  redo: () => void;\n\n  snapEnabled: boolean;\n  setSnapEnabled: (enabled: boolean) => void;\n}\n\nexport const useEventGuiStore = create<EventGuiState>((set, get) => ({\n  // ::::::::::::::::::: Loading state\n  loading: false,\n\n  // ::::::::::::::::::: Canvas state\n  canvas: null,\n  setCanvas: (canvas) => set({ canvas }),\n\n  // ::::::::::::::::::: Seat states\n  seats: [],\n  // ::::::::::::::::::: Add Seat\n  addSeat: (seat) => set((state) => ({ seats: [...state.seats, seat] })),\n  // ::::::::::::::::::: Update Seat\n  updateSeat: (id, updates) =>\n    set((state) => ({\n      seats: state.seats.map((seat) =>\n        seat.id === id ? { ...seat, ...updates } : seat\n      ),\n    })),\n  // ::::::::::::::::::: Delete Seat\n  deleteSeat: (id) =>\n    set((state) => ({\n      seats: state.seats.filter((seat) => seat.id !== id),\n    })),\n\n  // ::::::::::::::::::: Selected Seat ID\n  selectedSeatIds: [],\n  setSelectedSeatIds: (ids) => set({ selectedSeatIds: ids }),\n\n  // ::::::::::::::::::: Multiple seat creation mode state\n  isMultipleSeatMode: false,\n  setIsMultipleSeatMode: (isCreating) =>\n    set({ isMultipleSeatMode: isCreating }),\n\n  // ::::::::::::::::::: Zone states\n  zones: [{ id: uuidv4(), name: 'Ground floor', isChecked: true }],\n  // ::::::::::::::::::: Add zone\n  addZone: (name) =>\n    set((state) => ({\n      zones: [...state.zones, { id: uuidv4(), name, isChecked: true }],\n    })),\n  // ::::::::::::::::::: Update zone\n  updateZone: (id, updates) =>\n    set((state) => ({\n      zones: state.zones.map((zone) =>\n        zone.id === id ? { ...zone, ...updates } : zone\n      ),\n    })),\n  // ::::::::::::::::::: Delete zone\n  deleteZone: (id) =>\n    set((state) => ({\n      zones: state.zones.filter((zone) => zone.id !== id),\n    })),\n\n  // ::::::::::::::::::: Zoom level state\n  zoomLevel: 100,\n  setZoomLevel: (level) => set({ zoomLevel: level }),\n\n  // ::::::::::::::::::: Mode state\n  toolMode: 'select',\n  setToolMode: (mode: Mode) => set({ toolMode: mode }),\n\n  // ::::::::::::::::::: Action state\n  toolAction: null,\n  setToolAction: (action: Action) => set({ toolAction: action }),\n\n  // ::::::::::::::::::: Clipboard state\n  clipboard: null,\n  setClipboard: (objects) => set({ clipboard: objects }),\n  lastClickedPoint: null,\n  setLastClickedPoint: (point) => set({ lastClickedPoint: point }),\n\n  // ::::::::::::::::::::: Undo/redo functionality\n  undoStack: [],\n  redoStack: [],\n  addToUndoStack: (state) => {\n    const { loading, undoStack } = get();\n    const lastState = undoStack[undoStack.length - 1];\n\n    if (lastState !== state && !loading) {\n      set((prevState) => ({\n        undoStack: [...prevState.undoStack, state],\n        redoStack: [],\n      }));\n    }\n  },\n\n  // ::::::::::::::: Function: UNDO\n  undo: () => {\n    const { canvas, undoStack, redoStack } = get();\n\n    if (undoStack.length > 1 && canvas) {\n      // :::::::::::::::: set loading to true\n      set({ loading: true });\n\n      const currentState = JSON.stringify(canvas.toJSON());\n      const previousState = undoStack[undoStack.length - 2];\n\n      // ::::::::::::: update the canvas\n      canvas.loadFromJSON(previousState, () => {\n        canvas.getObjects().forEach((obj) => {\n          if (obj instanceof fabric.Circle) {\n            obj.setControlsVisibility({\n              mt: false,\n              mb: false,\n              ml: false,\n              mr: false,\n            });\n          }\n        });\n        canvas.renderAll();\n        set({\n          undoStack: undoStack.slice(0, -1),\n          redoStack: [currentState, ...redoStack],\n        });\n      });\n\n      // ::::::::::::::::: set loading to false\n      set({ loading: false });\n\n      // console.log('\\n\\nundo func: ', undoStack);\n    }\n  },\n\n  // :::::::::::::: Function: REDO\n  redo: () => {\n    const { canvas, undoStack, redoStack } = get();\n\n    if (redoStack.length > 0 && canvas) {\n      // :::::::::::::::: set loading to true\n      set({ loading: true });\n\n      const nextState = redoStack[0];\n\n      // :::::::::::::::: update the canvas\n      canvas.loadFromJSON(nextState, () => {\n        canvas.getObjects().forEach((obj) => {\n          if (obj instanceof fabric.Circle) {\n            obj.setControlsVisibility({\n              mt: false,\n              mb: false,\n              ml: false,\n              mr: false,\n            });\n          }\n        });\n        canvas.renderAll();\n        const currentState = JSON.stringify(\n          canvas.toJSON([\n            'id',\n            'borderColor',\n            'borderDashArray',\n            'cornerColor',\n            'cornerSize',\n            'cornerStrokeColor',\n            'transparentCorners',\n            'rx',\n            'ry',\n          ])\n        );\n        set({\n          undoStack: [...undoStack, currentState],\n          redoStack: redoStack.slice(1),\n        });\n      });\n\n      // ::::::::::::::::: set loading to false\n      set({ loading: false });\n\n      // console.log('\\n\\nredo func: ', undoStack, '\\n\\nredo stack: ', redoStack);\n    }\n  },\n\n  snapEnabled: false,\n  setSnapEnabled: (enabled) => set({ snapEnabled: enabled }),\n}));\n","import { fabric } from 'fabric';\r\n\r\nexport function applyCustomStyles(obj: fabric.Object) {\r\n  obj.set({\r\n    borderColor: 'green',\r\n    borderDashArray: [2, 4],\r\n    padding: 2,\r\n    cornerColor: 'lightblue',\r\n    cornerSize: 5,\r\n    cornerStrokeColor: 'blue',\r\n    transparentCorners: false,\r\n    strokeUniform: true,\r\n  });\r\n  obj.setControlsVisibility &&\r\n    obj.setControlsVisibility({\r\n      mt: false,\r\n      mb: false,\r\n      ml: false,\r\n      mr: false,\r\n    });\r\n}\r\n","import { useEventGuiStore } from '@/zustand';\nimport { fabric } from 'fabric';\nimport { v4 as uuidv4 } from 'uuid';\nimport { applyCustomStyles } from '@/components/createObject/applyCustomStyles';\n\nconst useClipboardActions = () => {\n  const { canvas, clipboard, setClipboard, lastClickedPoint, setToolAction } =\n    useEventGuiStore();\n\n  // :::::::::::::::::::::::::: Function: copy objects\n  const copySelectedObjects = async () => {\n    if (!canvas) return;\n\n    const activeObjects = canvas.getActiveObjects();\n    if (activeObjects.length === 0) return;\n\n    // ::::::::::::: Set action to copy\n    setToolAction('copy');\n\n    const clonedObjects: fabric.Object[] = [];\n    for (const obj of activeObjects) {\n      await new Promise<void>((resolve) => {\n        obj.clone((cloned: fabric.Object) => {\n          // Assign a new ID if needed\n          if ('id' in cloned) (cloned as any).id = uuidv4();\n          clonedObjects.push(cloned);\n          resolve();\n        });\n      });\n    }\n    setClipboard(clonedObjects);\n  };\n\n  // :::::::::::::::::::::::::: Function: cut objects\n  const cutSelectedObjects = async () => {\n    if (!canvas) return;\n\n    const activeObjects = canvas.getActiveObjects();\n    if (activeObjects.length === 0) return;\n\n    // ::::::::::::: Set action to cut\n    setToolAction('cut');\n\n    const clonedObjects: fabric.Object[] = [];\n    for (const obj of activeObjects) {\n      await new Promise<void>((resolve) => {\n        obj.clone((cloned: fabric.Object) => {\n          if ('id' in cloned) (cloned as any).id = uuidv4();\n          clonedObjects.push(cloned);\n          resolve();\n        });\n      });\n    }\n    setClipboard(clonedObjects);\n\n    canvas.remove(...activeObjects);\n    canvas.discardActiveObject();\n    canvas.renderAll();\n  };\n\n  // :::::::::::::::::::::::::: Function: paste objects\n  const pasteObjects = async () => {\n    if (!canvas || !clipboard || !lastClickedPoint) return;\n\n    setToolAction('paste');\n\n    const pastedObjects: fabric.Object[] = [];\n    for (const obj of clipboard) {\n      await new Promise<void>((resolve) => {\n        obj.clone((cloned: fabric.Object) => {\n          if ('id' in cloned) (cloned as any).id = uuidv4();\n          applyCustomStyles(cloned);\n          // Offset the new object so it's not directly on top\n          cloned.set({\n            left: (cloned.left || 0) + 20,\n            top: (cloned.top || 0) + 20,\n            evented: true,\n          });\n          canvas.add(cloned);\n          pastedObjects.push(cloned);\n          resolve();\n        });\n      });\n    }\n\n    if (pastedObjects.length === 1) {\n      canvas.setActiveObject(pastedObjects[0]);\n    } else if (pastedObjects.length > 1) {\n      const selection = new fabric.ActiveSelection(pastedObjects, { canvas });\n      canvas.setActiveObject(selection);\n    }\n    canvas.requestRenderAll();\n  };\n\n  const getBoundingBox = (objects: fabric.Object[]) => {\n    let minX = Infinity,\n      minY = Infinity,\n      maxX = -Infinity,\n      maxY = -Infinity;\n\n    objects.forEach((obj) => {\n      const objBoundingRect = obj.getBoundingRect();\n      minX = Math.min(minX, objBoundingRect.left);\n      minY = Math.min(minY, objBoundingRect.top);\n      maxX = Math.max(maxX, objBoundingRect.left + objBoundingRect.width);\n      maxY = Math.max(maxY, objBoundingRect.top + objBoundingRect.height);\n    });\n\n    return { left: minX, top: minY, width: maxX - minX, height: maxY - minY };\n  };\n\n  return { copySelectedObjects, cutSelectedObjects, pasteObjects };\n};\n\nexport default useClipboardActions;\n\n// // import '../fabricCustomRegistration';\n// import { useEventGuiStore } from '@/zustand';\n// import { fabric } from 'fabric';\n// import React, { useRef } from 'react';\n\n// function useRegisterFabricCustomClasses() {\n//   const registered = useRef(false);\n//   if (!registered.current) {\n//     if (!(fabric as any).CustomRect) {\n//       (fabric as any).CustomRect = CustomRect;\n//       (CustomRect as any).fromObject = function (object: any, callback: any) {\n//         return fabric.Object._fromObject(CustomRect, object, callback);\n//       };\n//     }\n//     if (!(fabric as any).CustomCircle) {\n//       (fabric as any).CustomCircle = CustomCircle;\n//       (CustomCircle as any).fromObject = function (object: any, callback: any) {\n//         return fabric.Object._fromObject(CustomCircle, object, callback);\n//       };\n//     }\n//     if (!(fabric as any).CustomText) {\n//       (fabric as any).CustomText = CustomText;\n//       (CustomText as any).fromObject = function (object: any, callback: any) {\n//         return fabric.Object._fromObject(CustomText, object, callback);\n//       };\n//     }\n//     registered.current = true;\n//   }\n// }\n\n// const PASTE_OFFSET = 25;\n\n// const useClipboardActions = () => {\n//   useRegisterFabricCustomClasses();\n//   const { canvas, setToolAction } = useEventGuiStore();\n//   // Local clipboard and paste count\n//   const clipboardRef = React.useRef<fabric.Object[] | null>(null);\n//   const pasteCountRef = React.useRef(0);\n\n//   // Copy selected objects\n//   const copySelectedObjects = () => {\n//     if (!canvas) return;\n//     const activeObjects = canvas.getActiveObjects();\n//     if (activeObjects.length === 0) return;\n//     setToolAction('copy');\n//     // Deep clone for clipboard\n//     clipboardRef.current = activeObjects.map((obj) =>\n//       obj.clone ? obj.clone() : fabric.util.object.clone(obj)\n//     );\n//     pasteCountRef.current = 0;\n//   };\n\n//   // Cut selected objects\n//   const cutSelectedObjects = () => {\n//     if (!canvas) return;\n//     const activeObjects = canvas.getActiveObjects();\n//     if (activeObjects.length === 0) return;\n//     setToolAction('cut');\n//     clipboardRef.current = activeObjects.map((obj) =>\n//       obj.clone ? obj.clone() : fabric.util.object.clone(obj)\n//     );\n//     pasteCountRef.current = 0;\n//     canvas.remove(...activeObjects);\n//     canvas.discardActiveObject();\n//     canvas.renderAll();\n//   };\n\n//   // Paste objects with offset\n//   const pasteObjects = () => {\n//     if (!canvas || !clipboardRef.current || clipboardRef.current.length === 0)\n//       return;\n//     setToolAction('paste');\n//     // Clone objects for pasting\n//     const pastedObjects = clipboardRef.current.map((obj) =>\n//       obj.clone ? obj.clone() : fabric.util.object.clone(obj)\n//     );\n//     // Compute bounding box of originals\n//     const boundingBox = getBoundingBox(pastedObjects);\n//     const canvasWidth = canvas.getWidth();\n//     const canvasHeight = canvas.getHeight();\n//     // Offset increases with each paste\n//     const offset = PASTE_OFFSET * (pasteCountRef.current + 1);\n//     let newLeft = boundingBox.left + offset;\n//     let newTop = boundingBox.top + offset;\n//     // Clamp to canvas\n//     if (newLeft + boundingBox.width > canvasWidth)\n//       newLeft = canvasWidth - boundingBox.width;\n//     if (newLeft < 0) newLeft = 0;\n//     if (newTop + boundingBox.height > canvasHeight)\n//       newTop = canvasHeight - boundingBox.height;\n//     if (newTop < 0) newTop = 0;\n//     const actualOffsetX = newLeft - boundingBox.left;\n//     const actualOffsetY = newTop - boundingBox.top;\n//     // Place and add to canvas\n//     pastedObjects.forEach((obj) => {\n//       obj.set({\n//         left: (obj.left || 0) + actualOffsetX,\n//         top: (obj.top || 0) + actualOffsetY,\n//         evented: true,\n//         selectable: true,\n//       });\n//       canvas.add(obj);\n//     });\n//     // Select pasted objects\n//     canvas.discardActiveObject();\n//     if (pastedObjects.length === 1) {\n//       canvas.setActiveObject(pastedObjects[0]);\n//     } else if (pastedObjects.length > 1) {\n//       const group = new fabric.ActiveSelection(pastedObjects, { canvas });\n//       canvas.setActiveObject(group);\n//     }\n//     canvas.requestRenderAll();\n//     pasteCountRef.current += 1;\n//   };\n\n//   // Helper: get bounding box\n//   const getBoundingBox = (objects: fabric.Object[]) => {\n//     let minX = Infinity,\n//       minY = Infinity,\n//       maxX = -Infinity,\n//       maxY = -Infinity;\n//     objects.forEach((obj) => {\n//       const rect = obj.getBoundingRect();\n//       minX = Math.min(minX, rect.left);\n//       minY = Math.min(minY, rect.top);\n//       maxX = Math.max(maxX, rect.left + rect.width);\n//       maxY = Math.max(maxY, rect.top + rect.height);\n//     });\n//     return { left: minX, top: minY, width: maxX - minX, height: maxY - minY };\n//   };\n\n//   return { copySelectedObjects, cutSelectedObjects, pasteObjects };\n// };\n\n// export default useClipboardActions;\n// export { useRegisterFabricCustomClasses };\n","// import '../fabricCustomRegistration';\nimport { useEffect, useCallback } from 'react';\nimport { useEventGuiStore } from '@/zustand';\n\nconst useUndoRedo = () => {\n  const { canvas, addToUndoStack, undo, redo, undoStack } = useEventGuiStore();\n\n  // :::::::::::::::: Function: appends undo state\n  const handleObjectModified = useCallback(() => {\n    if (canvas) {\n      const jsonState = JSON.stringify(\n        canvas.toJSON([\n          'id',\n          'borderColor',\n          'borderDashArray',\n          'cornerColor',\n          'cornerSize',\n          'cornerStrokeColor',\n          'transparentCorners',\n          'rx',\n          'ry',\n        ])\n      );\n      addToUndoStack(jsonState);\n    }\n  }, [canvas, addToUndoStack]);\n\n  useEffect(() => {\n    if (!canvas) return;\n\n    const eventsToListen = [\n      'object:modified',\n      'object:added',\n      'object:removed',\n    ];\n\n    // ::::::::::::::: Loop through events to call function\n    eventsToListen.forEach((event) => {\n      canvas.on(event, handleObjectModified);\n    });\n\n    return () => {\n      eventsToListen.forEach((event) => {\n        canvas.off(event, handleObjectModified);\n      });\n    };\n  }, [canvas, addToUndoStack]);\n\n  return { undo, redo };\n};\n\nexport default useUndoRedo;\n","import { useCallback, useEffect, useState } from 'react';\r\nimport { fabric } from 'fabric';\r\n\r\nexport function useLockSelection(canvas: fabric.Canvas | null) {\r\n  // Returns true if all selected objects are locked\r\n  const isSelectionLocked = useCallback(() => {\r\n    if (!canvas) return false;\r\n    const selected = canvas.getActiveObjects();\r\n    return (\r\n      selected.length > 0 &&\r\n      selected.every((obj) => obj.lockMovementX && obj.lockMovementY)\r\n    );\r\n  }, [canvas]);\r\n\r\n  // Toggle lock state for all selected objects\r\n  const toggleLockSelection = useCallback(() => {\r\n    if (!canvas) return;\r\n    const selected = canvas.getActiveObjects();\r\n    if (selected.length === 0) return;\r\n    const shouldLock = !isSelectionLocked();\r\n    selected.forEach((obj) => {\r\n      obj.set({\r\n        lockMovementX: shouldLock,\r\n        lockMovementY: shouldLock,\r\n      });\r\n    });\r\n    canvas.requestRenderAll();\r\n    // If multiple objects, re-select the group to update controls\r\n    if (selected.length > 1) {\r\n      canvas.discardActiveObject();\r\n      const group = new fabric.ActiveSelection(selected, { canvas });\r\n      canvas.setActiveObject(group);\r\n      canvas.requestRenderAll();\r\n    }\r\n    // Fire a custom event so UI can update immediately\r\n    canvas.fire('lock:changed');\r\n  }, [canvas, isSelectionLocked]);\r\n\r\n  // State for forcing re-render on selection/lock change\r\n  const [selectionVersion, setSelectionVersion] = useState(0);\r\n  useEffect(() => {\r\n    if (!canvas) return;\r\n    const update = () => setSelectionVersion((v) => v + 1);\r\n    canvas.on('selection:created', update);\r\n    canvas.on('selection:updated', update);\r\n    canvas.on('lock:changed', update);\r\n    return () => {\r\n      canvas.off('selection:created', update);\r\n      canvas.off('selection:updated', update);\r\n      canvas.off('lock:changed', update);\r\n    };\r\n  }, [canvas]);\r\n\r\n  return { isSelectionLocked, toggleLockSelection, selectionVersion };\r\n}\r\n","import { SeatData } from '@/types/data.types';\r\nimport React from 'react';\r\n\r\ninterface ModalProps {\r\n  open: boolean;\r\n  onClose: () => void;\r\n  title?: string;\r\n  children: React.ReactNode;\r\n}\r\n\r\nconst Modal: React.FC<ModalProps> = ({ open, onClose, title, children }) => {\r\n  if (!open) return null;\r\n  return (\r\n    <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/30\">\r\n      <div className=\"min-w-[320px] max-w-[90vw] rounded-lg bg-white p-6 shadow-lg\">\r\n        {title && <h2 className=\"mb-4 text-lg font-semibold\">{title}</h2>}\r\n        {children}\r\n        <button\r\n          className=\"mt-4 w-full rounded border border-solid border-gray-300 bg-gray-200 px-4 py-1 text-sm hover:bg-gray-300\"\r\n          onClick={onClose}\r\n        >\r\n          Cancel\r\n        </button>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport const DefaultSeatModal = ({\r\n  selectedSeat,\r\n  setSelectedSeat,\r\n  mergedLabels,\r\n  handleSeatAction,\r\n}: {\r\n  selectedSeat: SeatData | null;\r\n  setSelectedSeat: (seat: SeatData | null) => void;\r\n  mergedLabels: any;\r\n  handleSeatAction: (action: string) => void;\r\n}) => {\r\n  return (\r\n    <Modal\r\n      open={!!selectedSeat}\r\n      onClose={() => setSelectedSeat(null)}\r\n      title=\"Seat Details\"\r\n    >\r\n      {selectedSeat && (\r\n        <div className=\"space-y-4\">\r\n          <div className=\"grid grid-cols-2 gap-4\">\r\n            <div>\r\n              <label className=\"text-sm font-medium text-gray-600\">\r\n                {mergedLabels.seatNumber}\r\n              </label>\r\n              <p className=\"text-lg font-semibold\">{selectedSeat.number}</p>\r\n            </div>\r\n            <div>\r\n              <label className=\"text-sm font-medium text-gray-600\">\r\n                {mergedLabels.category}\r\n              </label>\r\n              <p className=\"text-lg font-semibold\">{selectedSeat.category}</p>\r\n            </div>\r\n            <div>\r\n              <label className=\"text-sm font-medium text-gray-600\">\r\n                {mergedLabels.price}\r\n              </label>\r\n              <p className=\"text-lg font-semibold\">\r\n                {selectedSeat.currencySymbol}\r\n                {selectedSeat.price}{' '}\r\n                <span className=\"text-sm text-gray-500\">\r\n                  ({selectedSeat.currencyCode})\r\n                </span>\r\n              </p>\r\n            </div>\r\n            <div>\r\n              <label className=\"text-sm font-medium text-gray-600\">\r\n                {mergedLabels.status}\r\n              </label>\r\n              <p className=\"text-lg font-semibold\">{selectedSeat.status}</p>\r\n            </div>\r\n          </div>\r\n          <div className=\"mt-6 flex gap-3\">\r\n            <button\r\n              onClick={() => handleSeatAction('buy')}\r\n              className=\"flex-1 rounded-md bg-gray-700 px-4 py-2 text-sm font-semibold text-white shadow-sm transition-colors hover:bg-gray-800 focus:outline-none focus:ring-2 focus:ring-gray-400\"\r\n            >\r\n              {mergedLabels.buyButton}\r\n            </button>\r\n            <button\r\n              onClick={() => setSelectedSeat(null)}\r\n              className=\"flex-1 rounded-md border border-gray-300 bg-white px-4 py-2 text-sm font-semibold text-gray-700 shadow-sm transition-colors hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-gray-400\"\r\n            >\r\n              {mergedLabels.cancelButton}\r\n            </button>\r\n          </div>\r\n        </div>\r\n      )}\r\n    </Modal>\r\n  );\r\n};\r\n\r\nexport default Modal;\r\n","import React from 'react';\r\nimport Modal from '@/components/ui/Modal';\r\n\r\n// Export Modal\r\nexport const ExportModal: React.FC<{\r\n  open: boolean;\r\n  onClose: () => void;\r\n  fileName: string;\r\n  setFileName: (name: string) => void;\r\n  onExport: (e: React.FormEvent) => void;\r\n}> = ({ open, onClose, fileName, setFileName, onExport }) => (\r\n  <Modal open={open} onClose={onClose} title=\"Export as JSON\">\r\n    <form onSubmit={onExport} className=\"flex flex-col gap-4\">\r\n      <label className=\"text-sm font-medium text-gray-700\">File Name</label>\r\n      <input\r\n        type=\"text\"\r\n        value={fileName}\r\n        onChange={(e) => setFileName(e.target.value)}\r\n        className=\"rounded-md border border-gray-300 border-solid bg-gray-100 px-3 py-2 text-sm text-gray-800 focus:border-gray-400 focus:outline-none focus:ring-2 focus:ring-gray-300\"\r\n        placeholder=\"seats.json\"\r\n        required\r\n      />\r\n      <button\r\n        type=\"submit\"\r\n        className=\"rounded-md bg-gray-700 px-4 py-2 text-sm font-semibold text-white shadow-sm transition-colors hover:bg-gray-800 focus:outline-none focus:ring-2 focus:ring-gray-400\"\r\n      >\r\n        Export\r\n      </button>\r\n    </form>\r\n  </Modal>\r\n);\r\n\r\n// Open File Modal\r\nexport const OpenFileModal: React.FC<{\r\n  open: boolean;\r\n  onClose: () => void;\r\n  file: File | null;\r\n  setFile: (file: File | null) => void;\r\n  error: string;\r\n  onFileChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\r\n  onDrop: (e: React.DragEvent<HTMLDivElement>) => void;\r\n  onDragOver: (e: React.DragEvent<HTMLDivElement>) => void;\r\n  onSubmit: (e: React.FormEvent) => void;\r\n}> = ({\r\n  open,\r\n  onClose,\r\n  file,\r\n  setFile,\r\n  error,\r\n  onFileChange,\r\n  onDrop,\r\n  onDragOver,\r\n  onSubmit,\r\n}) => (\r\n  <Modal\r\n    open={open}\r\n    onClose={() => {\r\n      onClose();\r\n      setFile(null);\r\n    }}\r\n    title=\"Open Seating Arrangement\"\r\n  >\r\n    <form onSubmit={onSubmit} className=\"flex flex-col gap-4\">\r\n      <label className=\"text-sm font-medium text-gray-700\">\r\n        Select or drag a JSON file\r\n      </label>\r\n      <div\r\n        className={`flex flex-col items-center justify-center rounded-lg border-2 border-dashed ${error ? 'border-red-400' : 'border-gray-300'} bg-gray-100 px-6 py-8 transition-colors hover:bg-gray-200`}\r\n        onDrop={onDrop}\r\n        onDragOver={onDragOver}\r\n      >\r\n        <input\r\n          type=\"file\"\r\n          accept=\"application/json,.json\"\r\n          onChange={onFileChange}\r\n          className=\"hidden\"\r\n          id=\"open-file-input\"\r\n        />\r\n        <label\r\n          htmlFor=\"open-file-input\"\r\n          className=\"cursor-pointer text-sm rounded-md bg-gray-700 px-4 py-2 text-white shadow-sm transition-colors hover:bg-gray-800\"\r\n        >\r\n          {file ? 'Change File' : 'Choose File'}\r\n        </label>\r\n        <span className=\"mt-2 text-xs text-gray-500\">\r\n          or drag and drop here\r\n        </span>\r\n        {file && (\r\n          <span className=\"mt-2 text-sm font-medium text-gray-700\">\r\n            {file.name}\r\n          </span>\r\n        )}\r\n        {error && <span className=\"mt-2 text-xs text-red-500\">{error}</span>}\r\n      </div>\r\n      <button\r\n        type=\"submit\"\r\n        className=\"rounded-md bg-gray-700 px-4 py-2 text-sm font-semibold text-white shadow-sm transition-colors hover:bg-gray-800 disabled:bg-gray-300\"\r\n        disabled={!file}\r\n      >\r\n        Open\r\n      </button>\r\n    </form>\r\n  </Modal>\r\n);\r\n","import React from 'react';\r\nimport { LuX } from 'react-icons/lu';\r\n\r\ninterface ToastProps {\r\n  open: boolean;\r\n  message: string;\r\n  type?: 'success' | 'error' | 'info';\r\n  onClose: () => void;\r\n}\r\n\r\nconst typeStyles = {\r\n  success: 'bg-green-500/50 border-green-600',\r\n  error: 'bg-red-600 text-white',\r\n  info: 'bg-blue-600 text-white',\r\n};\r\n\r\nconst Toast: React.FC<ToastProps> = ({\r\n  open,\r\n  message,\r\n  type = 'info',\r\n  onClose,\r\n}) => {\r\n  if (!open) return null;\r\n  return (\r\n    <div\r\n      className={`fixed bottom-6 left-1/2 z-[100] flex h-12 -translate-x-1/2 transform items-center justify-center rounded-md px-6 shadow-lg backdrop-blur-sm ${typeStyles[type]} border border-solid`}\r\n      role=\"alert\"\r\n      onClick={onClose}\r\n    >\r\n      <span>{message}</span>\r\n      <button\r\n        className=\"ease-250 ml-2 -mr-2 rounded border border-solid border-black/20 p-1 text-black/40 hover:border-black/40 hover:text-black/80 active:scale-110\"\r\n        onClick={onClose}\r\n      >\r\n        <LuX />\r\n      </button>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default Toast;\r\n","import React, { useState, useEffect } from 'react';\nimport { useEventGuiStore } from '@/zustand';\nimport useClipboardActions from '@/hooks/useClipboardActions';\nimport useUndoRedo from '@/hooks/useUndoRedo';\nimport { useLockSelection } from '@/hooks/useLockSelection';\nimport {\n  LuFile,\n  LuFolderOpen,\n  LuSave,\n  LuMousePointer,\n  LuClipboardCheck,\n  LuLayoutDashboard,\n  LuPlus,\n  LuGrid2X2,\n  LuUndo,\n  LuRedo,\n  LuScissors,\n  LuCopy,\n  LuTrash2,\n  LuZoomIn,\n  LuZoomOut,\n  LuLock,\n  LuDownload,\n} from 'react-icons/lu';\nimport {\n  RiText,\n  RiShapeLine,\n  RiApps2AddLine,\n  RiLockUnlockLine,\n} from 'react-icons/ri';\nimport { ExportModal, OpenFileModal } from '@/components/modals';\nimport Toast from '@/components/ui/Toast';\nimport { applyCustomStyles } from '@/components/createObject/applyCustomStyles';\nimport { CanvasObject } from '@/types/data.types';\n\ninterface ToolbarProps {\n  onSave?: (json: any) => void;\n  onBgLayout?: () => void;\n}\n\nconst Toolbar: React.FC<ToolbarProps> = ({ onSave, onBgLayout }) => {\n  const {\n    toolMode,\n    setToolMode,\n    toolAction,\n    setToolAction,\n    canvas,\n    snapEnabled,\n    setSnapEnabled,\n  } = useEventGuiStore();\n\n  const [zoomLevel, setZoomLevel] = useState(100);\n\n  const { copySelectedObjects, cutSelectedObjects, pasteObjects } =\n    useClipboardActions();\n  const { undo, redo } = useUndoRedo();\n\n  const { isSelectionLocked, toggleLockSelection } = useLockSelection(canvas);\n\n  const [showExportModal, setShowExportModal] = useState(false);\n  const [exportFileName, setExportFileName] = useState('seats.json');\n  const [showOpenModal, setShowOpenModal] = useState(false);\n  const [openFile, setOpenFile] = useState<File | null>(null);\n  const [openFileError, setOpenFileError] = useState('');\n  const [showToast, setShowToast] = useState(false);\n  const [toastMsg, setToastMsg] = useState('');\n  const [toastType, setToastType] = useState<'success' | 'error' | 'info'>(\n    'info'\n  );\n\n  // Update canvas zoom when zoomLevel changes\n  useEffect(() => {\n    if (!canvas) return;\n\n    const zoom = zoomLevel / 100;\n    canvas.setZoom(zoom);\n\n    // Always center the canvas content in the viewport after zoom\n    const viewportWidth = canvas.getWidth();\n    const viewportHeight = canvas.getHeight();\n    const contentWidth = canvas.width! * zoom;\n    const contentHeight = canvas.height! * zoom;\n\n    canvas.absolutePan({\n      x: (viewportWidth - contentWidth) / 2,\n      y: (viewportHeight - contentHeight) / 2,\n    });\n\n    canvas.renderAll();\n  }, [zoomLevel, canvas]);\n\n  // Export handler\n  const handleExport = (e: React.FormEvent) => {\n    e.preventDefault();\n    if (!canvas) return;\n    const json = JSON.stringify(canvas.toJSON());\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 = exportFileName.endsWith('.json')\n      ? exportFileName\n      : exportFileName + '.json';\n    document.body.appendChild(a);\n    a.click();\n    document.body.removeChild(a);\n    URL.revokeObjectURL(url);\n    setShowExportModal(false);\n  };\n\n  // ::::::::::::::::::: Function: toggle create multiple seats mode\n  const toggleMultipleSeatMode = () => {\n    setToolMode(toolMode === 'multiple-seat' ? 'select' : 'multiple-seat');\n  };\n\n  // Handle file input\n  const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n    const file = e.target.files?.[0];\n    if (file) setOpenFile(file);\n  };\n\n  // Handle drag and drop\n  const handleDrop = (e: React.DragEvent<HTMLDivElement>) => {\n    e.preventDefault();\n    if (e.dataTransfer.files && e.dataTransfer.files[0]) {\n      setOpenFile(e.dataTransfer.files[0]);\n    }\n  };\n  const handleDragOver = (e: React.DragEvent<HTMLDivElement>) => {\n    e.preventDefault();\n  };\n\n  // Handle open file submit\n  const handleOpenFile = async (e: React.FormEvent) => {\n    e.preventDefault();\n    if (!canvas || !openFile) return;\n    try {\n      const text = await openFile.text();\n      const json = JSON.parse(text);\n      canvas.loadFromJSON(json, () => {\n        canvas.getObjects().forEach((obj) => {\n          if (\n            obj.type === 'circle' ||\n            obj.type === 'rect' ||\n            obj.type === 'i-text'\n          ) {\n            applyCustomStyles(obj);\n          }\n        });\n        canvas.renderAll();\n        setShowOpenModal(false);\n        setOpenFile(null);\n        setToastMsg('Seating arrangement loaded!');\n        setToastType('success');\n        setShowToast(true);\n      });\n    } catch (err) {\n      setOpenFileError(\n        'Invalid JSON file. Please select a valid seating arrangement file.'\n      );\n      setToastMsg('Invalid JSON file.');\n      setToastType('error');\n      setShowToast(true);\n    }\n  };\n\n  const handleZoomIn = () => {\n    setZoomLevel(Math.min(zoomLevel + 10, 120)); // Max zoom 120%\n  };\n\n  const handleZoomOut = () => {\n    setZoomLevel(Math.max(zoomLevel - 10, 80)); // Min zoom 80%\n  };\n\n  // ::::::::::::::::::: Buttons data\n  const buttonGroups = [\n    [\n      {\n        icon: LuFolderOpen,\n        tooltip: 'Open File',\n        onClick: () => setShowOpenModal(true),\n        state: false,\n      },\n      {\n        icon: LuSave,\n        tooltip: 'Save',\n        onClick: () => {\n          if (canvas && onSave) {\n            const json = {\n              type: 'canvas',\n              ...canvas.toJSON(['customType', 'seatData', 'zoneData']),\n            } as unknown as CanvasObject;\n            onSave(json);\n          }\n        },\n        state: false,\n      },\n      {\n        icon: LuDownload,\n        tooltip: 'Download',\n        onClick: () => setShowExportModal(true),\n        state: false,\n      },\n    ],\n    [\n      {\n        icon: LuMousePointer,\n        tooltip: 'Select',\n        onClick: () => setToolMode('select'),\n        state: toolMode === 'select',\n      },\n      {\n        icon: LuGrid2X2,\n        tooltip: snapEnabled ? 'Remove Grid' : 'Smart Grid',\n        onClick: () => setSnapEnabled(!snapEnabled),\n        state: snapEnabled,\n      },\n      {\n        icon: LuLayoutDashboard,\n        tooltip: 'Layout View',\n        onClick: onBgLayout,\n        state: false,\n      },\n    ],\n    [\n      {\n        icon: RiText,\n        tooltip: 'Add Text',\n        onClick: () => setToolMode('text'),\n        state: toolMode === 'text',\n      },\n      {\n        icon: RiShapeLine,\n        tooltip: 'Add Square',\n        onClick: () => setToolMode('shape-square'),\n        state: toolMode === 'shape-square',\n      },\n      {\n        icon: LuPlus,\n        tooltip: 'Add Seat',\n        onClick: () => setToolMode('one-seat'),\n        state: toolMode === 'one-seat',\n      },\n      {\n        icon: RiApps2AddLine,\n        tooltip: 'Add Rows',\n        onClick: toggleMultipleSeatMode,\n        state: toolMode === 'multiple-seat',\n      },\n    ],\n    [\n      { icon: LuUndo, tooltip: 'Undo', onClick: undo, state: false },\n      { icon: LuRedo, tooltip: 'Redo', onClick: redo, state: false },\n    ],\n    [\n      {\n        icon: LuScissors,\n        tooltip: 'Cut',\n        onClick: cutSelectedObjects,\n        state: toolAction === 'cut',\n      },\n      {\n        icon: LuCopy,\n        tooltip: 'Copy',\n        onClick: copySelectedObjects,\n        state: toolAction === 'copy',\n      },\n      {\n        icon: LuClipboardCheck,\n        tooltip: 'Paste',\n        onClick: pasteObjects,\n        state: toolAction === 'paste',\n      },\n      {\n        icon: LuTrash2,\n        tooltip: 'Delete',\n        onClick: () => setToolAction('delete'),\n        state: false,\n      },\n    ],\n  ];\n\n  return (\n    <div className=\"fixed left-0 top-0 z-[200] flex w-full items-center justify-center gap-1 bg-white px-[1rem] py-[0.5rem] shadow\">\n      {/* :::::::::::::::: add space */}\n      <div className=\"flex-1\" />\n\n      {buttonGroups.map((group, groupIdx) => (\n        <React.Fragment key={groupIdx}>\n          {groupIdx > 0 && <Separator />}\n          {group.map((item, idx) => (\n            <Button\n              key={`button-${groupIdx}-${idx}`}\n              icon={<item.icon className=\"h-4 w-4\" />}\n              tooltip={item.tooltip}\n              onClick={item.onClick}\n              state={item.state}\n            />\n          ))}\n        </React.Fragment>\n      ))}\n\n      {/* :::::::::::::: add seperator */}\n      <Separator />\n\n      {/* :::::::::::::: zoom button */}\n      <Button\n        icon={<LuZoomOut className=\"h-4 w-4\" />}\n        tooltip=\"Zoom Out\"\n        onClick={handleZoomOut}\n      />\n      <div className=\"flex h-8 w-12 items-center justify-center text-sm font-medium\">\n        {zoomLevel}%\n      </div>\n      <Button\n        icon={<LuZoomIn className=\"h-4 w-4\" />}\n        tooltip=\"Zoom In\"\n        onClick={handleZoomIn}\n      />\n\n      {/* ::::::::::::::: add space */}\n      <div className=\"flex-1\" />\n\n      {/* ::::::::::::::: Lock/Unlock button */}\n      <Button\n        icon={\n          isSelectionLocked() ? (\n            <LuLock className=\"h-4 w-4\" />\n          ) : (\n            <RiLockUnlockLine className=\"h-4 w-4\" />\n          )\n        }\n        tooltip={isSelectionLocked() ? 'Unlock Selection' : 'Lock Selection'}\n        onClick={toggleLockSelection}\n      />\n\n      {/* Export Modal */}\n      <ExportModal\n        open={showExportModal}\n        onClose={() => setShowExportModal(false)}\n        fileName={exportFileName}\n        setFileName={setExportFileName}\n        onExport={handleExport}\n      />\n\n      {/* Open File Modal */}\n      <OpenFileModal\n        open={showOpenModal}\n        onClose={() => {\n          setShowOpenModal(false);\n          setOpenFile(null);\n          setOpenFileError('');\n        }}\n        file={openFile}\n        setFile={setOpenFile}\n        error={openFileError}\n        onFileChange={handleFileChange}\n        onDrop={handleDrop}\n        onDragOver={handleDragOver}\n        onSubmit={handleOpenFile}\n      />\n\n      {/* Toast */}\n      <Toast\n        open={showToast}\n        message={toastMsg}\n        type={toastType}\n        onClose={() => setShowToast(false)}\n      />\n    </div>\n  );\n};\n\nexport default Toolbar;\n\ninterface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n  icon: React.ReactNode;\n  tooltip: string;\n  state?: boolean;\n}\n\nconst Button: React.FC<ButtonProps> = ({ icon, tooltip, state, ...props }) => {\n  const [showTooltip, setShowTooltip] = useState(false);\n\n  return (\n    <div className=\"relative\">\n      <button\n        className={`rounded-md p-2 hover:bg-gray-200/60 ${\n          state ? 'shadow-sm shadow-gray-400 ring-1 ring-gray-400' : ''\n        } ease-250 active:bg-gray-200 `}\n        onMouseEnter={() => setShowTooltip(true)}\n        onMouseLeave={() => setShowTooltip(false)}\n        {...props}\n      >\n        {icon}\n      </button>\n\n      <div\n        className={`absolute left-1/2 -translate-x-1/2 transform ${\n          showTooltip\n            ? 'top-[calc(100%+0.5rem)] opacity-100'\n            : 'top-[100%] opacity-0'\n        } ease-250 whitespace-nowrap rounded bg-gray-200 px-2 py-1 text-[0.625rem] text-gray-900 shadow-md`}\n      >\n        {tooltip}\n      </div>\n    </div>\n  );\n};\n\nconst Separator: React.FC = () => (\n  <div className=\"mx-[1rem] h-6 w-px bg-gray-300 \" />\n);\n","import React, { useState, useRef, useEffect } from 'react';\n\ninterface SelectOption {\n  value: string;\n  label: string;\n}\n\ninterface SelectProps {\n  options: SelectOption[];\n  value: string;\n  onChange: (value: string) => void;\n  placeholder?: string;\n}\n\nconst Select: React.FC<SelectProps> = ({\n  options,\n  value,\n  onChange,\n  placeholder = 'Select an option',\n}) => {\n  const [isOpen, setIsOpen] = useState(false);\n  const selectRef = useRef<HTMLDivElement>(null);\n  const [dropdownPosition, setDropdownPosition] = useState<'top' | 'bottom'>(\n    'bottom'\n  );\n\n  const handleToggle = () => setIsOpen(!isOpen);\n\n  const handleOptionClick = (optionValue: string) => {\n    onChange(optionValue);\n    setIsOpen(false);\n  };\n\n  const handleClickOutside = (event: MouseEvent) => {\n    if (\n      selectRef.current &&\n      !selectRef.current.contains(event.target as Node)\n    ) {\n      setIsOpen(false);\n    }\n  };\n\n  useEffect(() => {\n    document.addEventListener('mousedown', handleClickOutside);\n    return () => {\n      document.removeEventListener('mousedown', handleClickOutside);\n    };\n  }, []);\n\n  const selectedOption = options.find((option) => option.value === value);\n\n  // :::::::::::::::::::: Set dropdown position based on bottom space\n  const calculateDropdownPosition = () => {\n    if (selectRef.current) {\n      const { bottom } = selectRef.current.getBoundingClientRect();\n      const windowHeight = window.innerHeight;\n\n      // :::::::::::::::::::::: Check if there is enough space below\n      if (windowHeight - bottom < 120) {\n        setDropdownPosition('top');\n      } else {\n        setDropdownPosition('bottom');\n      }\n    }\n  };\n\n  useEffect(() => {\n    if (isOpen) {\n      calculateDropdownPosition();\n    }\n  }, [isOpen]);\n\n  return (\n    <div ref={selectRef} className=\"relative\">\n      <div\n        className=\"flex w-full cursor-pointer items-center justify-between rounded-md border border-solid border-gray-300 bg-white px-3 py-2 text-sm shadow-sm focus:border-gray-500 focus:outline-none focus:ring-2 focus:ring-gray-500\"\n        onClick={handleToggle}\n      >\n        <span className=\"block truncate\">\n          {selectedOption ? selectedOption.label : placeholder}\n        </span>\n        <span className=\"pointer-events-none\">\n          <svg\n            className=\"h-5 w-5 text-gray-400\"\n            viewBox=\"0 0 20 20\"\n            fill=\"none\"\n            stroke=\"currentColor\"\n          >\n            <path\n              d=\"M7 7l3-3 3 3m0 6l-3 3-3-3\"\n              strokeWidth=\"1.5\"\n              strokeLinecap=\"round\"\n              strokeLinejoin=\"round\"\n            />\n          </svg>\n        </span>\n      </div>\n      {/* {isOpen && ( */}\n      <div\n        className={`absolute z-10 mt-1 w-full overflow-hidden rounded-[8px] border border-solid border-gray-300 bg-white shadow-lg ${dropdownPosition === 'top' ? 'bottom-full mb-1' : 'top-full mt-1'} ${isOpen ? 'user-select-auto visible opacity-100' : 'user-select-none invisible select-none opacity-0'} ease-250`}\n      >\n        <ul className=\"max-h-60 overflow-auto text-base focus:outline-none sm:text-sm\">\n          {options.map((option) => (\n            <li\n              key={option.value}\n              className={`relative cursor-pointer select-none py-2 pl-3 pr-9 ${\n                value === option.value\n                  ? 'bg-gray-100 text-gray-600'\n                  : 'text-gray-900 hover:bg-gray-50'\n              }`}\n              onClick={() => handleOptionClick(option.value)}\n            >\n              <span className=\"block truncate\">{option.label}</span>\n              {value === option.value && (\n                <span className=\"absolute inset-y-0 right-0 flex items-center pr-4 text-gray-600\">\n                  <svg\n                    className=\"h-5 w-5\"\n                    viewBox=\"0 0 20 20\"\n                    fill=\"currentColor\"\n                  >\n                    <path\n                      fillRule=\"evenodd\"\n                      d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\"\n                      clipRule=\"evenodd\"\n                    />\n                  </svg>\n                </span>\n              )}\n            </li>\n          ))}\n        </ul>\n      </div>\n      {/* )} */}\n    </div>\n  );\n};\n\nexport default Select;\n","import { useState, useEffect } from 'react';\nimport { fabric } from 'fabric';\nimport { Pattern, Gradient } from 'fabric/fabric-impl';\nimport { CustomFabricObject } from '@/types/fabric-types';\n\nexport interface Properties {\n  angle: number;\n  radius: number | 'mixed';\n  width: number;\n  height: number;\n  fill: string | Pattern | Gradient | undefined;\n  stroke: string | Pattern | Gradient | undefined;\n  text: string;\n  fontSize: number;\n  fontWeight: string;\n  fontFamily: string;\n  left: number;\n  top: number;\n  rx?: number;\n  ry?: number;\n  seatNumber?: string | 'mixed';\n  category?: string | 'mixed';\n  price?: number | 'mixed';\n  status?: 'available' | 'reserved' | 'sold' | 'mixed';\n  currencySymbol?: string | 'mixed';\n  currencyCode?: string | 'mixed';\n  currencyCountry?: string | 'mixed';\n}\n\nexport const useObjectProperties = (\n  canvas: fabric.Canvas | null,\n  selectedObjects: CustomFabricObject[]\n) => {\n  // ::::::::::::::::::: Properties state\n  const [properties, setProperties] = useState<Properties>({\n    angle: 0,\n    radius: 10,\n    width: 100,\n    height: 100,\n    fill: 'transparent' as string | undefined,\n    stroke: '#000000' as string | undefined,\n    text: '',\n    fontSize: 20,\n    fontWeight: 'normal',\n    fontFamily: 'sans-serif',\n    left: 0,\n    top: 0,\n  });\n\n  function getMergedValue<T>(objs: any[], key: string) {\n    if (objs.length === 0) return '';\n    const first = objs[0][key];\n    return objs.every((obj) => obj[key] === first) ? first : 'mixed';\n  }\n\n  useEffect(() => {\n    if (!selectedObjects || selectedObjects.length === 0) return;\n    const objs = selectedObjects;\n    setProperties({\n      angle: getMergedValue(objs, 'angle'),\n      radius: getMergedValue(objs, 'radius'),\n      width:\n        getMergedValue(objs, 'width') * (getMergedValue(objs, 'scaleX') || 1),\n      height:\n        getMergedValue(objs, 'height') * (getMergedValue(objs, 'scaleY') || 1),\n      fill: getMergedValue(objs, 'fill'),\n      stroke: getMergedValue(objs, 'stroke'),\n      text: getMergedValue(objs, 'text'),\n      fontSize: getMergedValue(objs, 'fontSize'),\n      fontWeight: getMergedValue(objs, 'fontWeight'),\n      fontFamily: getMergedValue(objs, 'fontFamily'),\n      left: getMergedValue(objs, 'left'),\n      top: getMergedValue(objs, 'top'),\n      rx: getMergedValue(objs, 'rx'),\n      ry: getMergedValue(objs, 'ry'),\n      seatNumber: getMergedValue(objs, 'seatNumber'),\n      category: getMergedValue(objs, 'category'),\n      price: getMergedValue(objs, 'price'),\n      status: getMergedValue(objs, 'status'),\n      currencySymbol: getMergedValue(objs, 'currencySymbol'),\n      currencyCode: getMergedValue(objs, 'currencyCode'),\n      currencyCountry: getMergedValue(objs, 'currencyCountry'),\n    });\n  }, [selectedObjects]);\n\n  return { properties, setProperties };\n};\n","import { fabric } from 'fabric';\nimport { CustomFabricObject } from '@/types/fabric-types';\nimport { Properties } from './useObjectProperties';\nimport { useEffect } from 'react';\n\nexport const useObjectUpdater = (\n  canvas: fabric.Canvas | null,\n  setProperties: React.Dispatch<React.SetStateAction<Properties>>,\n  lockAspect: boolean = false\n) => {\n  // --- Effect: Listen for scaling circles and update radius ---\n  useEffect(() => {\n    if (!canvas) return;\n    const handleScaling = (e: fabric.IEvent) => {\n      const obj = e.target as CustomFabricObject;\n      if (!obj) return;\n      if (obj.type === 'circle') {\n        // Single circle scaling\n        const newRadius =\n          (obj.radius || (obj.width ? obj.width / 2 : 0)) * (obj.scaleX || 1);\n        obj.set({\n          radius: newRadius,\n          scaleX: 1,\n          scaleY: 1,\n          width: newRadius * 2,\n          height: newRadius * 2,\n        });\n        obj.setCoords();\n        canvas.renderAll();\n        setProperties((prev) => ({ ...prev, radius: newRadius }));\n      } else if (obj.type === 'activeSelection' && 'getObjects' in obj) {\n        // Group scaling\n        const selection = obj as fabric.ActiveSelection;\n        const circles = (selection.getObjects() as CustomFabricObject[]).filter(\n          (o) => o.type === 'circle'\n        );\n        let radii: number[] = [];\n        circles.forEach((circle) => {\n          const newRadius =\n            (circle.radius || (circle.width ? circle.width / 2 : 0)) *\n            (circle.scaleX || 1);\n          circle.set({\n            radius: newRadius,\n            scaleX: 1,\n            scaleY: 1,\n            width: newRadius * 2,\n            height: newRadius * 2,\n          });\n          circle.setCoords();\n          radii.push(newRadius);\n        });\n        canvas.renderAll();\n        // If all radii are the same, show it, else show 'mixed'\n        const allSame = radii.every((r) => r === radii[0]);\n        setProperties((prev) => ({\n          ...prev,\n          radius: allSame ? radii[0] : 'mixed',\n        }));\n      }\n    };\n    canvas.on('object:scaling', handleScaling);\n    return () => {\n      canvas.off('object:scaling', handleScaling);\n    };\n  }, [canvas, setProperties]);\n\n  const updateObject = (updates: Partial<Properties>) => {\n    if (!canvas) return;\n\n    const activeObject = canvas.getActiveObject();\n    const activeObjects = canvas.getActiveObjects() as CustomFabricObject[];\n    if (activeObjects.length === 0) return;\n\n    // Handle group move and rotation\n    if (activeObject && activeObject.type === 'activeSelection') {\n      const group = activeObject as fabric.ActiveSelection;\n      // Handle group move\n      if ('left' in updates || 'top' in updates) {\n        const deltaX =\n          'left' in updates && typeof updates.left === 'number'\n            ? updates.left - (group.left ?? 0)\n            : 0;\n        const deltaY =\n          'top' in updates && typeof updates.top === 'number'\n            ? updates.top - (group.top ?? 0)\n            : 0;\n        group.getObjects().forEach((obj: fabric.Object) => {\n          obj.set({\n            left: (obj.left ?? 0) + deltaX,\n            top: (obj.top ?? 0) + deltaY,\n          });\n          obj.setCoords();\n        });\n        group.setCoords();\n        canvas.renderAll();\n        setProperties((prev) => ({\n          ...prev,\n          left: updates.left ?? prev.left,\n          top: updates.top ?? prev.top,\n        }));\n        return;\n      }\n      // Handle group rotation\n      if ('angle' in updates && typeof updates.angle === 'number') {\n        group.set('angle', updates.angle);\n        group.setCoords();\n        canvas.renderAll();\n        setProperties((prev) => ({\n          ...prev,\n          angle: updates.angle ?? prev.angle,\n        }));\n        return;\n      }\n    }\n\n    activeObjects.forEach((selectedObject) => {\n      const updatedProperties: Partial<CustomFabricObject> = {};\n      for (const [key, value] of Object.entries(updates)) {\n        if (selectedObject[key as keyof CustomFabricObject] !== value) {\n          updatedProperties[key as keyof CustomFabricObject] = value;\n        }\n      }\n\n      // Ensure stroke is always a string when it's being updated\n      if (\n        'stroke' in updatedProperties &&\n        updatedProperties.stroke !== undefined\n      ) {\n        updatedProperties.stroke = String(updatedProperties.stroke);\n      }\n\n      // Special handling for circle objects - only use radius\n      if (selectedObject.type === 'circle') {\n        if ('width' in updates || 'height' in updates) {\n          const currentRadius = selectedObject.radius || 0;\n          const newRadius = updates.width\n            ? updates.width / 2\n            : updates.height\n              ? updates.height / 2\n              : currentRadius;\n          selectedObject.set({\n            radius: newRadius,\n            scaleX: 1,\n            scaleY: 1,\n            width: newRadius * 2,\n            height: newRadius * 2,\n          });\n          delete updatedProperties.width;\n          delete updatedProperties.height;\n        }\n      } else {\n        // Special handling for width/height for non-circle objects\n        if ('width' in updates && updates.width !== undefined) {\n          const renderedWidth = updates.width;\n          const currentScaleX = selectedObject.scaleX || 1;\n          selectedObject.set({\n            width: renderedWidth / currentScaleX,\n            scaleX: 1,\n            height: lockAspect\n              ? renderedWidth / currentScaleX\n              : selectedObject.height,\n          });\n          delete updatedProperties.width;\n        }\n        if ('height' in updates && updates.height !== undefined) {\n          const renderedHeight = updates.height;\n          const currentScaleY = selectedObject.scaleY || 1;\n          selectedObject.set({\n            height: renderedHeight / currentScaleY,\n            scaleY: 1,\n            width: lockAspect\n              ? renderedHeight / currentScaleY\n              : selectedObject.width,\n          });\n          delete updatedProperties.height;\n        }\n      }\n\n      selectedObject.set(updatedProperties);\n\n      // :::::::::::: Ensures the text's scales remains 1, only font-size should change\n      if (selectedObject.type === 'i-text') {\n        selectedObject.set({\n          scaleX: 1,\n          scaleY: 1,\n        });\n      }\n\n      // --- Improved auto-snap to canvas edge after rotation ---\n      if (Object.prototype.hasOwnProperty.call(updates, 'angle')) {\n        selectedObject.setCoords(); // recalculate coords after rotation\n        const rect = selectedObject.getBoundingRect();\n        const canvasWidth = canvas.getWidth();\n        const canvasHeight = canvas.getHeight();\n        let dx = 0,\n          dy = 0;\n        // Snap left/right\n        if (rect.left < 0) {\n          dx = -rect.left;\n        } else if (rect.left + rect.width > canvasWidth) {\n          dx = canvasWidth - (rect.left + rect.width);\n        }\n        // Snap top/bottom\n        if (rect.top < 0) {\n          dy = -rect.top;\n        } else if (rect.top + rect.height > canvasHeight) {\n          dy = canvasHeight - (rect.top + rect.height);\n        }\n        if (dx !== 0 || dy !== 0) {\n          // Move by offset, using current origin\n          const originX = selectedObject.originX || 'center';\n          const originY = selectedObject.originY || 'center';\n          // Calculate new center position\n          const newCenter = new fabric.Point(\n            (selectedObject.left ?? 0) + dx,\n            (selectedObject.top ?? 0) + dy\n          );\n          selectedObject.setPositionByOrigin(newCenter, originX, originY);\n          selectedObject.setCoords();\n        }\n      }\n\n      canvas.renderAll();\n\n      setProperties((prev) => ({\n        ...prev,\n        ...updatedProperties,\n      }));\n    });\n  };\n\n  return { updateObject };\n};\n","import { Pattern, Gradient } from 'fabric/fabric-impl';\n\n// :::::::::::::::::::: Converts number to float conditionally\nexport const toFloat = (num: any) => {\n  if (typeof num !== 'number' || isNaN(num)) return '';\n  return num % 1 !== 0 ? Number(num.toFixed(2)) : num;\n};\n\n// ::::::::::::::::::: Object Properties type\nexport interface PropertiesType {\n  angle?: number;\n  radius?: number;\n  width?: number;\n  height?: number;\n  fill?: string | Pattern | Gradient | undefined;\n  stroke?: string | Pattern | Gradient | undefined;\n  text?: string;\n  fontSize?: number;\n  fontWeight?: string;\n  fontFamily?: string;\n  left?: number;\n  top?: number;\n}\n","import { toFloat } from '@/utils';\n\ninterface Properties {\n  angle: number;\n  left: number;\n  top: number;\n  width?: number;\n  height?: number;\n  type?: string;\n}\n\ninterface CommonPropertiesProps {\n  properties: Properties;\n  updateObject: (updates: Partial<Properties>) => void;\n}\n\nconst angleOptions = [\n  { value: 45, label: '45°' },\n  { value: 90, label: '90°' },\n  { value: 180, label: '180°' },\n  { value: 270, label: '270°' },\n];\n\nconst CommonProperties: React.FC<CommonPropertiesProps> = ({\n  properties,\n  updateObject,\n}) => (\n  <div className=\"space-y-2\">\n    <div className=\"grid grid-cols-2 gap-2\">\n      <div>\n        <label className=\"mb-1 block text-xs font-medium text-gray-600\">\n          Position X\n        </label>\n        <div className=\"flex items-center gap-1\">\n          <button\n            className=\"flex h-6 w-6 items-center justify-center rounded border border-solid border-gray-200 text-xs transition-colors hover:bg-gray-100\"\n            onClick={() => {\n              if (typeof properties.left === 'number') {\n                updateObject({ left: properties.left - 1 });\n              }\n            }}\n            disabled={typeof properties.left !== 'number'}\n          >\n            -\n          </button>\n          <input\n            type=\"number\"\n            value={toFloat(properties.left)}\n            onChange={(e) => updateObject({ left: Number(e.target.value) })}\n            className=\"w-16 rounded border border-solid border-gray-200 bg-white px-1 py-0.5 text-center text-xs [appearance:textfield] focus:outline-none focus:ring-1 focus:ring-gray-500 [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none\"\n          />\n          <button\n            className=\"flex h-6 w-6 items-center justify-center rounded border border-solid border-gray-200 text-xs transition-colors hover:bg-gray-100\"\n            onClick={() => {\n              if (typeof properties.left === 'number') {\n                updateObject({ left: properties.left + 1 });\n              }\n            }}\n            disabled={typeof properties.left !== 'number'}\n          >\n            +\n          </button>\n        </div>\n      </div>\n      <div>\n        <label className=\"mb-1 block text-xs font-medium text-gray-600\">\n          Position Y\n        </label>\n        <div className=\"flex items-center gap-1\">\n          <button\n            className=\"flex h-6 w-6 items-center justify-center rounded border border-solid border-gray-200 text-xs transition-colors hover:bg-gray-100\"\n            onClick={() => {\n              if (typeof properties.top === 'number') {\n                updateObject({ top: properties.top - 1 });\n              }\n            }}\n            disabled={typeof properties.top !== 'number'}\n          >\n            -\n          </button>\n          <input\n            type=\"number\"\n            value={toFloat(properties.top)}\n            onChange={(e) => updateObject({ top: Number(e.target.value) })}\n            className=\"w-16 rounded border border-solid border-gray-200 bg-white px-1 py-0.5 text-center text-xs [appearance:textfield] focus:outline-none focus:ring-1 focus:ring-gray-500 [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none\"\n          />\n          <button\n            className=\"flex h-6 w-6 items-center justify-center rounded border border-solid border-gray-200 text-xs transition-colors hover:bg-gray-100\"\n            onClick={() => {\n              if (typeof properties.top === 'number') {\n                updateObject({ top: properties.top + 1 });\n              }\n            }}\n            disabled={typeof properties.top !== 'number'}\n          >\n            +\n          </button>\n        </div>\n      </div>\n      {properties.type !== 'circle' && (\n        <>\n          <div>\n            <label className=\"mb-1 block text-xs font-medium text-gray-600\">\n              Width\n            </label>\n            <div className=\"flex items-center gap-1\">\n              <button\n                className=\"flex h-6 w-6 items-center justify-center rounded border border-solid border-gray-200 text-xs transition-colors hover:bg-gray-100\"\n                onClick={() => {\n                  if (typeof properties.width === 'number') {\n                    updateObject({ width: properties.width - 1 });\n                  }\n                }}\n                disabled={typeof properties.width !== 'number'}\n              >\n                -\n              </button>\n              <input\n                type=\"number\"\n                value={toFloat(properties.width ?? 0)}\n                onChange={(e) =>\n                  updateObject({ width: Number(e.target.value) })\n                }\n                className=\"w-16 rounded border border-solid border-gray-200 bg-white px-1 py-0.5 text-center text-xs [appearance:textfield] focus:outline-none focus:ring-1 focus:ring-gray-500 [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none\"\n              />\n              <button\n                className=\"flex h-6 w-6 items-center justify-center rounded border border-solid border-gray-200 text-xs transition-colors hover:bg-gray-100\"\n                onClick={() => {\n                  if (typeof properties.width === 'number') {\n                    updateObject({ width: properties.width + 1 });\n                  }\n                }}\n                disabled={typeof properties.width !== 'number'}\n              >\n                +\n              </button>\n            </div>\n          </div>\n          <div>\n            <label className=\"mb-1 block text-xs font-medium text-gray-600\">\n              Height\n            </label>\n            <div className=\"flex items-center gap-1\">\n              <button\n                className=\"flex h-6 w-6 items-center justify-center rounded border border-solid border-gray-200 text-xs transition-colors hover:bg-gray-100\"\n                onClick={() => {\n                  if (typeof properties.height === 'number') {\n                    updateObject({ height: properties.height - 1 });\n                  }\n                }}\n                disabled={typeof properties.height !== 'number'}\n              >\n                -\n              </button>\n              <input\n                type=\"number\"\n                value={toFloat(properties.height ?? 0)}\n                onChange={(e) =>\n                  updateObject({ height: Number(e.target.value) })\n                }\n                className=\"w-16 rounded border border-solid border-gray-200 bg-white px-1 py-0.5 text-center text-xs [appearance:textfield] focus:outline-none focus:ring-1 focus:ring-gray-500 [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none\"\n              />\n              <button\n                className=\"flex h-6 w-6 items-center justify-center rounded border border-solid border-gray-200 text-xs transition-colors hover:bg-gray-100\"\n                onClick={() => {\n                  if (typeof properties.height === 'number') {\n                    updateObject({ height: properties.height + 1 });\n                  }\n                }}\n                disabled={typeof properties.height !== 'number'}\n              >\n                +\n              </button>\n            </div>\n          </div>\n        </>\n      )}\n    </div>\n    <div>\n      <label className=\"mb-1 block text-xs font-medium text-gray-600\">\n        Angle\n      </label>\n      <div className=\"flex items-center gap-1\">\n        <button\n          className=\"flex h-6 w-6 items-center justify-center rounded border border-solid border-gray-200 text-xs transition-colors hover:bg-gray-100\"\n          onClick={() => {\n            if (typeof properties.angle === 'number') {\n              updateObject({ angle: properties.angle - 1 });\n            }\n          }}\n          disabled={typeof properties.angle !== 'number'}\n        >\n          -\n        </button>\n        <input\n          type=\"number\"\n          value={toFloat(properties.angle)}\n          onChange={(e) => updateObject({ angle: Number(e.target.value) })}\n          className=\"w-16 rounded border border-solid border-gray-200 bg-white px-1 py-0.5 text-center text-xs [appearance:textfield] focus:outline-none focus:ring-1 focus:ring-gray-500 [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none\"\n        />\n        <button\n          className=\"flex h-6 w-6 items-center justify-center rounded border border-solid border-gray-200 text-xs transition-colors hover:bg-gray-100\"\n          onClick={() => {\n            if (typeof properties.angle === 'number') {\n              updateObject({ angle: properties.angle + 1 });\n            }\n          }}\n          disabled={typeof properties.angle !== 'number'}\n        >\n          +\n        </button>\n        <div className=\"ml-1 flex items-center gap-1\">\n          {angleOptions.map(({ value, label }) => (\n            <button\n              key={value}\n              className=\"flex h-6 w-6 items-center justify-center rounded border border-solid border-gray-200 text-xs transition-colors hover:bg-gray-100\"\n              onClick={() => updateObject({ angle: value })}\n              title={label}\n            >\n              <svg\n                xmlns=\"http://www.w3.org/2000/svg\"\n                width=\"12\"\n                height=\"12\"\n                viewBox=\"0 0 24 24\"\n                fill=\"none\"\n                stroke=\"currentColor\"\n                strokeWidth=\"2\"\n                strokeLinecap=\"round\"\n                strokeLinejoin=\"round\"\n                style={{ transform: `rotate(${value + 90}deg)` }}\n              >\n                <path d=\"M12 2v20M2 12h20\" />\n                <path d=\"M2 12l4-4M2 12l4 4\" />\n              </svg>\n            </button>\n          ))}\n        </div>\n      </div>\n    </div>\n  </div>\n);\n\nexport default CommonProperties;\n","import { toFloat, PropertiesType } from '@/utils';\n// import { toFloat } from '../utils';\nimport React from 'react';\nimport { Properties as SidebarProperties } from '../../hooks';\n\ninterface Properties {\n  radius: number | 'mixed';\n  seatNumber?: string | 'mixed';\n  category?: string | 'mixed';\n  price?: number | 'mixed';\n  status?: 'available' | 'reserved' | 'sold' | 'mixed';\n}\n\ninterface CirclePropertiesProps {\n  properties: Properties;\n  updateObject: (updates: Partial<SidebarProperties>) => void;\n  Select: React.FC<{\n    options: { value: string; label: string }[];\n    value: string;\n    onChange: (value: string) => void;\n  }>;\n}\n\nconst statusOptions = [\n  { value: 'available', label: 'Available' },\n  { value: 'reserved', label: 'Reserved' },\n  { value: 'sold', label: 'Sold' },\n];\n\nconst categoryOptions = [\n  { value: 'standard', label: 'Standard' },\n  { value: 'vip', label: 'VIP' },\n  { value: 'premium', label: 'Premium' },\n];\n\nconst SeatAttributes: React.FC<CirclePropertiesProps> = ({\n  properties,\n  updateObject,\n  Select,\n}) => (\n  <div className=\"space-y-4\">\n    <div>\n      <label className=\"block text-sm font-medium text-gray-700\">\n        Seat Number\n      </label>\n      <input\n        type=\"text\"\n        value={properties.seatNumber || ''}\n        onChange={(e) => updateObject({ seatNumber: e.target.value })}\n        className=\"mt-1 w-full rounded-md border px-2 py-1\"\n      />\n    </div>\n    <div>\n      <label className=\"block text-sm font-medium text-gray-700\">\n        Category\n      </label>\n      <Select\n        options={categoryOptions}\n        value={properties.category || 'standard'}\n        onChange={(value) => updateObject({ category: value })}\n      />\n    </div>\n    <div>\n      <label className=\"block text-sm font-medium text-gray-700\">Price</label>\n      <input\n        type=\"number\"\n        value={properties.price || 0}\n        onChange={(e) => updateObject({ price: Number(e.target.value) })}\n        className=\"mt-1 w-full rounded-md border px-2 py-1\"\n      />\n    </div>\n    <div>\n      <label className=\"block text-sm font-medium text-gray-700\">Status</label>\n      <Select\n        options={statusOptions}\n        value={properties.status || 'available'}\n        onChange={(value) =>\n          updateObject({ status: value as Properties['status'] })\n        }\n      />\n    </div>\n  </div>\n);\n\nconst CircleProperties: React.FC<CirclePropertiesProps> = ({\n  properties,\n  updateObject,\n  Select,\n}) => {\n  const [activeTab, setActiveTab] = React.useState<'basic' | 'attributes'>(\n    'basic'\n  );\n\n  return (\n    <div className=\"space-y-4\">\n      <label className=\"block text-sm font-medium text-gray-700\">Radius</label>\n      <div className=\"flex items-center justify-between\">\n        <div className=\"flex items-center gap-1\">\n          <button\n            className=\"flex h-6 w-6 items-center justify-center rounded border border-solid border-gray-200 text-xs transition-colors hover:bg-gray-100\"\n            onClick={() => {\n              if (typeof properties.radius === 'number') {\n                updateObject({ radius: properties.radius - 1 });\n              }\n            }}\n            disabled={properties.radius === 'mixed'}\n          >\n            -\n          </button>\n          <input\n            type=\"number\"\n            value={\n              properties.radius === 'mixed' ? '' : toFloat(properties.radius)\n            }\n            placeholder={properties.radius === 'mixed' ? '—' : ''}\n            onChange={(e) => updateObject({ radius: Number(e.target.value) })}\n            className=\"w-12 rounded border border-solid border-gray-200 bg-white px-1 py-0.5 text-center text-xs [appearance:textfield] focus:outline-none focus:ring-1 focus:ring-gray-500 [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none\"\n          />\n          <button\n            className=\"flex h-6 w-6 items-center justify-center rounded border border-solid border-gray-200 text-xs transition-colors hover:bg-gray-100\"\n            onClick={() => {\n              if (typeof properties.radius === 'number') {\n                updateObject({ radius: properties.radius + 1 });\n              }\n            }}\n            disabled={properties.radius === 'mixed'}\n          >\n            +\n          </button>\n        </div>\n        <div className=\"mb-1 flex items-center gap-1\">\n          <button\n            className={`flex h-6 w-6 items-center justify-center rounded border border-solid border-gray-200 ${\n              properties.radius === 0 ? 'bg-gray-200' : 'bg-white'\n            } transition-colors`}\n            onClick={() => updateObject({ radius: 6 })}\n            title=\"None\"\n          >\n            <svg\n              width=\"14\"\n              height=\"14\"\n              viewBox=\"0 0 14 14\"\n              fill=\"none\"\n              stroke=\"currentColor\"\n              strokeWidth=\"2\"\n            >\n              <rect x=\"2\" y=\"2\" width=\"10\" height=\"10\" rx=\"0\" />\n            </svg>\n          </button>\n          <button\n            className={`flex h-6 w-6 items-center justify-center rounded border border-solid border-gray-200 ${\n              properties.radius === 4 ? 'bg-gray-200' : 'bg-white'\n            } text-xs transition-colors`}\n            onClick={() => updateObject({ radius: 8 })}\n            title=\"Small\"\n          >\n            sm\n          </button>\n          <button\n            className={`flex h-6 w-6 items-center justify-center rounded border border-solid border-gray-200 ${\n              properties.radius === 10 ? 'bg-gray-200' : 'bg-white'\n            } text-xs transition-colors`}\n            onClick={() => updateObject({ radius: 10 })}\n            title=\"Medium\"\n          >\n            md\n          </button>\n          <button\n            className={`flex h-6 w-6 items-center justify-center rounded border border-solid border-gray-200 ${\n              properties.radius === 20 ? 'bg-gray-200' : 'bg-white'\n            } text-xs transition-colors`}\n            onClick={() => updateObject({ radius: 16 })}\n            title=\"Large\"\n          >\n            lg\n          </button>\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport default CircleProperties;\n","import { toFloat, PropertiesType } from '@/utils';\n// import { toFloat } from '../utils';\nimport { Pattern, Gradient } from 'fabric/fabric-impl';\nimport { useState, useEffect } from 'react';\nimport { useEventGuiStore } from '@/zustand';\n\ninterface Properties {\n  width: number;\n  height: number;\n  fill?: string | Pattern | Gradient;\n  stroke?: string | Pattern | Gradient;\n  strokeWidth?: number;\n  rx?: number;\n  ry?: number;\n}\n\ninterface RectanglePropertiesProps {\n  properties: Properties;\n  updateObject: (updates: Partial<Properties>) => void;\n  Select: React.FC<{\n    options: { value: string; label: string }[];\n    value: string;\n    onChange: (value: string) => void;\n  }>;\n}\n\nconst strokeWidthOptions = [\n  { value: '0', label: 'None' },\n  { value: '1', label: 'Thin' },\n  { value: '2', label: 'Medium' },\n  { value: '3', label: 'Thick' },\n  { value: '4', label: 'Extra Thick' },\n];\n\nconst RectangleProperties: React.FC<RectanglePropertiesProps> = ({\n  properties,\n  updateObject,\n  Select,\n}) => {\n  const [lockAspect, setLockAspect] = useState(true);\n  const { canvas } = useEventGuiStore();\n\n  useEffect(() => {\n    if (!canvas) return;\n    const activeObject = canvas.getActiveObject && canvas.getActiveObject();\n    if (activeObject && activeObject.type === 'rect') {\n      activeObject.set('lockUniScaling', lockAspect);\n      activeObject.setControlsVisibility({\n        mt: !lockAspect,\n        mb: !lockAspect,\n        ml: !lockAspect,\n        mr: !lockAspect,\n      });\n      canvas.renderAll && canvas.renderAll();\n    }\n  }, [lockAspect, canvas]);\n\n  return (\n    <>\n      <div className=\"mt-2 flex items-center\">\n        <input\n          type=\"checkbox\"\n          checked={lockAspect}\n          onChange={(e) => setLockAspect(e.target.checked)}\n          className=\"mr-2\"\n        />\n        <span className=\"text-xs text-gray-600\">Lock aspect ratio</span>\n      </div>\n      <div>\n        <label className=\"mb-1 block text-sm font-medium text-gray-700\">\n          Stroke Width\n        </label>\n        <Select\n          options={strokeWidthOptions}\n          value={properties.strokeWidth?.toString() || '1'}\n          onChange={(value) => updateObject({ strokeWidth: Number(value) })}\n        />\n      </div>\n      <div className=\"mt-2\">\n        <label className=\"mb-1 block text-sm font-medium text-gray-700\">\n          Border Radius\n        </label>\n        <div className=\"flex items-center justify-between\">\n          <div className=\"flex items-center gap-1\">\n            <button\n              className=\"flex h-6 w-6 items-center justify-center rounded border border-solid border-gray-200 text-xs transition-colors hover:bg-gray-100\"\n              onClick={() =>\n                updateObject({\n                  rx: Number(toFloat((properties as any).rx ?? 0)) - 1,\n                  ry: Number(toFloat((properties as any).ry ?? 0)) - 1,\n                })\n              }\n            >\n              -\n            </button>\n            <input\n              type=\"number\"\n              value={toFloat((properties as any).rx ?? 0)}\n              onChange={(e) =>\n                updateObject({\n                  rx: Number(e.target.value),\n                  ry: Number(e.target.value),\n                })\n              }\n              className=\"w-12 rounded border border-solid border-gray-200 bg-white px-1 py-0.5 text-center text-xs [appearance:textfield] focus:outline-none focus:ring-1 focus:ring-gray-500 [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none\"\n            />\n            <button\n              className=\"flex h-6 w-6 items-center justify-center rounded border border-solid border-gray-200 text-xs transition-colors hover:bg-gray-100\"\n              onClick={() =>\n                updateObject({\n                  rx: Number(toFloat((properties as any).rx ?? 0)) + 1,\n                  ry: Number(toFloat((properties as any).ry ?? 0)) + 1,\n                })\n              }\n            >\n              +\n            </button>\n          </div>\n          <div className=\"mb-1 flex items-center gap-1\">\n            <button\n              className={`flex h-6 w-6 items-center justify-center rounded border border-solid border-gray-200 ${\n                ((properties as any).rx ?? 0) === 0 ? 'bg-gray-200' : 'bg-white'\n              } transition-colors`}\n              onClick={() => updateObject({ rx: 0, ry: 0 })}\n              title=\"None\"\n            >\n              <svg\n                width=\"14\"\n                height=\"14\"\n                viewBox=\"0 0 14 14\"\n                fill=\"none\"\n                stroke=\"currentColor\"\n                strokeWidth=\"2\"\n              >\n                <rect x=\"2\" y=\"2\" width=\"10\" height=\"10\" rx=\"0\" />\n              </svg>\n            </button>\n            <button\n              className={`flex h-6 w-6 items-center justify-center rounded border border-solid border-gray-200 ${\n                ((properties as any).rx ?? 0) === 4 ? 'bg-gray-200' : 'bg-white'\n              } text-xs transition-colors`}\n              onClick={() => updateObject({ rx: 4, ry: 4 })}\n              title=\"Small\"\n            >\n              sm\n            </button>\n            <button\n              className={`flex h-6 w-6 items-center justify-center rounded border border-solid border-gray-200 ${\n                ((properties as any).rx ?? 0) === 10\n                  ? 'bg-gray-200'\n                  : 'bg-white'\n              } text-xs transition-colors`}\n              onClick={() => updateObject({ rx: 10, ry: 10 })}\n              title=\"Medium\"\n            >\n              md\n            </button>\n            <button\n              className={`flex h-6 w-6 items-center justify-center rounded border border-solid border-gray-200 ${\n                ((properties as any).rx ?? 0) === 20\n                  ? 'bg-gray-200'\n                  : 'bg-white'\n              } text-xs transition-colors`}\n              onClick={() => updateObject({ rx: 20, ry: 20 })}\n              title=\"Large\"\n            >\n              lg\n            </button>\n          </div>\n        </div>\n      </div>\n    </>\n  );\n};\n\nexport default RectangleProperties;\n","import { toFloat, PropertiesType } from '@/utils';\n// import { toFloat } from '../utils';\n\ninterface Properties {\n  text: string;\n  fontSize: number;\n  fontWeight: string;\n  fontFamily: string;\n  strokeWidth?: number;\n}\n\ninterface TextPropertiesProps {\n  properties: Properties;\n  updateObject: (updates: Partial<Properties>) => void;\n  Select: React.ComponentType<{\n    options: Array<{ value: string; label: string }>;\n    value: string;\n    onChange: (value: string) => void;\n  }>;\n}\n\nconst fontWeightOptions = [\n  { value: '100', label: 'Thin' },\n  { value: '200', label: 'Extra Light' },\n  { value: '300', label: 'Light' },\n  { value: '400', label: 'Regular' },\n  { value: '500', label: 'Medium' },\n  { value: '600', label: 'Semi Bold' },\n  { value: '700', label: 'Bold' },\n  { value: '800', label: 'Extra Bold' },\n  { value: '900', label: 'Black' },\n];\n\nconst fontFamilyOptions = [\n  { value: 'sans-serif', label: 'Sans-serif' },\n  { value: 'serif', label: 'Serif' },\n  { value: 'monospace', label: 'Monospace' },\n  { value: 'poppins', label: 'Poppins' },\n];\n\nconst strokeWidthOptions = [\n  { value: 0, label: 'None' },\n  { value: 1, label: 'Thin' },\n  { value: 2, label: 'Medium' },\n  { value: 3, label: 'Thick' },\n  { value: 4, label: 'Extra Thick' },\n];\n\nconst TextProperties: React.FC<TextPropertiesProps> = ({\n  properties,\n  updateObject,\n  Select,\n}) => (\n  <>\n    <div>\n      <label className=\"block text-sm font-medium text-gray-700\">Text</label>\n      <input\n        type=\"text\"\n        value={properties.text}\n        onChange={(e) => updateObject({ text: e.target.value })}\n        className=\"mt-1 w-full rounded-md border border-solid border-gray-300 px-2 py-1\"\n      />\n    </div>\n    <div>\n      <label className=\"block text-sm font-medium text-gray-700\">\n        Font Size\n      </label>\n      <div className=\"mt-1 flex gap-1 items-center\">\n        <button\n          className=\"flex h-6 w-6 items-center justify-center rounded border border-solid border-gray-200 text-xs transition-colors hover:bg-gray-100\"\n          onClick={() =>\n            updateObject({ fontSize: Number(toFloat(properties.fontSize)) - 1 })\n          }\n        >\n          -\n        </button>\n        <input\n          type=\"number\"\n          value={toFloat(properties.fontSize)}\n          onChange={(e) => updateObject({ fontSize: Number(e.target.value) })}\n          className=\"w-12 rounded border border-solid border-gray-200 bg-white px-1 py-0.5 text-center text-xs [appearance:textfield] focus:outline-none focus:ring-1 focus:ring-gray-500 [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none\"\n        />\n        <button\n          className=\"flex h-6 w-6 items-center justify-center rounded border border-solid border-gray-200 text-xs transition-colors hover:bg-gray-100\"\n          onClick={() =>\n            updateObject({ fontSize: Number(toFloat(properties.fontSize)) + 1 })\n          }\n        >\n          +\n        </button>\n      </div>\n    </div>\n    <div>\n      <label className=\"block text-sm font-medium text-gray-700\">\n        Font Weight\n      </label>\n      <Select\n        options={fontWeightOptions}\n        value={properties.fontWeight}\n        onChange={(value) => updateObject({ fontWeight: value })}\n      />\n    </div>\n    <div>\n      <label className=\"block text-sm font-medium text-gray-700\">\n        Font Family\n      </label>\n      <Select\n        options={fontFamilyOptions}\n        value={properties.fontFamily}\n        onChange={(value) => updateObject({ fontFamily: value })}\n      />\n    </div>\n    <div>\n      <label className=\"block text-sm font-medium text-gray-700\">\n        Stroke Width\n      </label>\n      <Select\n        options={strokeWidthOptions.map((option) => ({\n          value: option.value.toString(),\n          label: option.label,\n        }))}\n        value={properties.strokeWidth?.toString() || '0'}\n        onChange={(value) => updateObject({ strokeWidth: Number(value) })}\n      />\n    </div>\n  </>\n);\n\nexport default TextProperties;\n","import { Properties } from '../../hooks';\nimport { useState, useEffect } from 'react';\n\ninterface ColorPropertiesProps {\n  properties: Properties;\n  updateObject: (updates: Partial<Properties>) => void;\n  objectType: string | null;\n}\n\nconst ColorProperties: React.FC<ColorPropertiesProps> = ({\n  properties,\n  updateObject,\n  objectType,\n}) => {\n  const [syncColors, setSyncColors] = useState(false);\n\n  useEffect(() => {\n    // Check if stroke matches fill initially\n    setSyncColors(properties.stroke === properties.fill);\n  }, [properties.stroke, properties.fill]);\n\n  const handleFillChange = (value: string) => {\n    updateObject({ fill: value });\n    if (syncColors) {\n      updateObject({ stroke: value });\n    }\n  };\n\n  return (\n    <>\n      <div>\n        <label className=\"block text-sm font-medium text-gray-700\">\n          Fill Color\n        </label>\n        <div className=\"mt-1 flex items-center\">\n          <input\n            type=\"color\"\n            value={\n              typeof properties.fill === 'string' &&\n              /^#([0-9A-Fa-f]{6})$/.test(properties.fill)\n                ? properties.fill\n                : '#ffffff'\n            }\n            onChange={(e) => handleFillChange(e.target.value)}\n            className=\"h-8 w-8 bg-transparent rounded-md\"\n          />\n          <input\n            type=\"text\"\n            value={(properties.fill?.toString() || '').toUpperCase()}\n            onChange={(e) => handleFillChange(e.target.value)}\n            className=\"ml-2 w-full rounded-md text-sm border border-solid border-gray-200 px-2 py-1 shadow-sm\"\n          />\n        </div>\n      </div>\n\n      <div>\n        <div className=\"flex items-center justify-between\">\n          <label className=\"block text-sm font-medium text-gray-700\">\n            Stroke Color\n          </label>\n          <label className=\"flex items-center space-x-1 text-xs text-gray-600\">\n            <input\n              type=\"checkbox\"\n              checked={syncColors}\n              onChange={(e) => {\n                setSyncColors(e.target.checked);\n                if (e.target.checked) {\n                  updateObject({ stroke: properties.fill });\n                }\n              }}\n              className=\"h-3 w-3 rounded border-gray-300\"\n            />\n            <span>Sync with fill</span>\n          </label>\n        </div>\n        <div className=\"mt-1 flex items-center\">\n          <input\n            type=\"color\"\n            value={\n              properties?.stroke === 'transparent'\n                ? '#ffffff'\n                : properties.stroke?.toString() || '#000000'\n            }\n            onChange={(e) => updateObject({ stroke: e.target.value })}\n            disabled={syncColors}\n            className={`h-8 w-8 rounded-md bg-transparent ${syncColors ? 'opacity-50' : ''}`}\n          />\n          <input\n            type=\"text\"\n            value={\n              properties.stroke === 'transparent'\n                ? 'transparent'\n                : (properties.stroke?.toString() || '').toUpperCase()\n            }\n            onChange={(e) => updateObject({ stroke: e.target.value })}\n            disabled={syncColors}\n            className={`ml-2 w-full text-sm rounded-md border border-solid border-gray-200 px-2 py-1 shadow-sm ${\n              syncColors ? 'opacity-50' : ''\n            }`}\n          />\n        </div>\n      </div>\n    </>\n  );\n};\n\nexport default ColorProperties;\n","import React, { useEffect, useState } from 'react';\r\nimport { LuX } from 'react-icons/lu';\r\n\r\ninterface CurrencyOption {\r\n  label: string;\r\n  value: string;\r\n  country: string;\r\n  code: string;\r\n  symbol: string;\r\n}\r\n\r\ninterface CurrencySelectProps {\r\n  value: string;\r\n  onChange: (symbol: string, code: string, country: string) => void;\r\n}\r\n\r\nconst CurrencySelect: React.FC<CurrencySelectProps> = ({ value, onChange }) => {\r\n  const [options, setOptions] = useState<CurrencyOption[]>([]);\r\n  const [input, setInput] = useState('');\r\n  const [show, setShow] = useState(false);\r\n\r\n  useEffect(() => {\r\n    // Fetch currency data from restcountries\r\n    fetch('https://restcountries.com/v3.1/all')\r\n      .then((res) => res.json())\r\n      .then((data) => {\r\n        const opts: CurrencyOption[] = [];\r\n        data.forEach((country: any) => {\r\n          if (country.currencies) {\r\n            Object.entries(country.currencies).forEach(([code, cur]: any) => {\r\n              opts.push({\r\n                label: `${cur.name} (${cur.symbol || code}) - ${country.name.common}`,\r\n                value: cur.symbol || code,\r\n                country: country.name.common,\r\n                code,\r\n                symbol: cur.symbol || code,\r\n              });\r\n            });\r\n          }\r\n        });\r\n        // Remove duplicates by code+country\r\n        const unique = Array.from(\r\n          new Map(opts.map((o) => [o.code + o.country, o])).values()\r\n        );\r\n        setOptions(unique);\r\n      });\r\n  }, []);\r\n\r\n  const filtered = input\r\n    ? options.filter(\r\n        (o) =>\r\n          o.label.toLowerCase().includes(input.toLowerCase()) ||\r\n          o.code.toLowerCase().includes(input.toLowerCase()) ||\r\n          o.symbol.toLowerCase().includes(input.toLowerCase())\r\n      )\r\n    : options;\r\n\r\n  const showClear = !!(value || input);\r\n\r\n  return (\r\n    <div className=\"relative\">\r\n      <input\r\n        type=\"text\"\r\n        value={input || value}\r\n        onChange={(e) => setInput(e.target.value)}\r\n        onFocus={() => setShow(true)}\r\n        placeholder=\"Search currency...\"\r\n        className=\"w-full rounded border border-solid border-gray-300 bg-white px-2 py-2 pr-8 text-sm focus:outline-none focus:ring-2 focus:ring-gray-400\"\r\n      />\r\n      {showClear && (\r\n        <button\r\n          type=\"button\"\r\n          className=\"absolute right-2 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-700\"\r\n          onClick={() => {\r\n            setInput('');\r\n            onChange('', '', '');\r\n          }}\r\n          tabIndex={-1}\r\n        >\r\n          <LuX size={16} />\r\n        </button>\r\n      )}\r\n      {show && (\r\n        <div className=\"absolute z-10 mt-1 max-h-48 w-full overflow-auto rounded border border-solid border-gray-200 bg-white shadow-lg\">\r\n          {filtered.length === 0 && (\r\n            <div className=\"px-3 py-2 text-sm text-gray-500\">No results</div>\r\n          )}\r\n          {filtered.slice(0, 30).map((opt) => (\r\n            <div\r\n              key={opt.code + opt.country}\r\n              className=\"cursor-pointer px-3 py-2 text-sm hover:bg-gray-100\"\r\n              onClick={() => {\r\n                onChange(opt.symbol, opt.code, opt.country);\r\n                setInput(`${opt.symbol} - ${opt.country}`);\r\n                setShow(false);\r\n              }}\r\n            >\r\n              {opt.label}\r\n            </div>\r\n          ))}\r\n        </div>\r\n      )}\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default CurrencySelect;\r\n","import React, { useState } from 'react';\nimport { Properties } from '../../hooks';\nimport { useEventGuiStore } from '@/zustand';\nimport CurrencySelect from './CurrencySelect';\n\ninterface SeatAttributesProps {\n  properties: Properties;\n  updateObject: (updates: Partial<Properties>) => void;\n  Select: React.FC<{\n    options: { value: string; label: string }[];\n    value: string;\n    onChange: (value: string) => void;\n  }>;\n  selectedObjects?: any[];\n}\n\nconst statusOptions = [\n  { value: 'available', label: 'Available' },\n  { value: 'reserved', label: 'Reserved' },\n  { value: 'sold', label: 'Sold' },\n];\n\nconst categoryOptions = [\n  { value: 'standard', label: 'Standard' },\n  { value: 'vip', label: 'VIP' },\n  { value: 'premium', label: 'Premium' },\n];\n\nconst SeatAttributes: React.FC<SeatAttributesProps> = ({\n  properties,\n  updateObject,\n  Select,\n}) => {\n  const { canvas } = useEventGuiStore();\n  const [error, setError] = useState('');\n\n  // Helper to check if a seat number is unique\n  function isSeatNumberUnique(num: string) {\n    if (!canvas || !num) return true;\n    const allSeats = canvas.getObjects('circle');\n    return !allSeats.some(\n      (obj: any) => obj.seatNumber === num && obj !== canvas.getActiveObject()\n    );\n  }\n\n  function handleSeatNumberChange(e: React.ChangeEvent<HTMLInputElement>) {\n    const value = e.target.value;\n    if (value && !isSeatNumberUnique(value)) {\n      setError('Seat number already used');\n    } else {\n      setError('');\n      updateObject({ seatNumber: value });\n    }\n  }\n\n  return (\n    <div className=\"space-y-4\">\n      <div>\n        <label className=\"block text-sm font-medium text-gray-700\">\n          Seat Number\n        </label>\n        <input\n          type=\"text\"\n          value={\n            properties.seatNumber === 'mixed' ? '' : properties.seatNumber || ''\n          }\n          placeholder={properties.seatNumber === 'mixed' ? '—' : ''}\n          onChange={handleSeatNumberChange}\n          className=\"mt-1 w-full rounded-md border border-solid border-gray-300 px-2 py-1\"\n        />\n        {error && <div className=\"mt-1 text-xs text-red-500\">{error}</div>}\n      </div>\n      <div>\n        <label className=\"mb-2 block text-sm font-medium text-gray-700\">\n          Category\n        </label>\n        <Select\n          options={categoryOptions}\n          value={\n            properties.category === 'mixed'\n              ? ''\n              : properties.category || 'standard'\n          }\n          onChange={(value) => updateObject({ category: value })}\n        />\n      </div>\n      <div>\n        <label className=\"mb-2 block text-sm font-medium text-gray-700\">\n          Price\n        </label>\n        <input\n          type=\"number\"\n          value={properties.price === 'mixed' ? '' : properties.price || 0}\n          placeholder={properties.price === 'mixed' ? '—' : ''}\n          onChange={(e) => updateObject({ price: Number(e.target.value) })}\n          className=\"mt-1 w-full rounded-md border border-solid border-gray-300 px-2 py-1\"\n        />\n      </div>\n      <div>\n        <label className=\"mb-2 block text-sm font-medium text-gray-700\">\n          Status\n        </label>\n        <Select\n          options={statusOptions}\n          value={\n            properties.status === 'mixed'\n              ? ''\n              : properties.status || 'available'\n          }\n          onChange={(value) =>\n            updateObject({ status: value as Properties['status'] })\n          }\n        />\n      </div>\n      <div>\n        <label className=\"mb-2 block text-sm font-medium text-gray-700\">\n          Currency\n        </label>\n        <CurrencySelect\n          value={properties.currencySymbol || ''}\n          onChange={(symbol, code, country) =>\n            updateObject({\n              currencySymbol: symbol,\n              currencyCode: code,\n              currencyCountry: country,\n            })\n          }\n        />\n      </div>\n    </div>\n  );\n};\n\nexport default SeatAttributes;\n","import React, { useState, useCallback, useEffect } from 'react';\nimport { LuGrid2X2 } from 'react-icons/lu';\nimport { fabric } from 'fabric';\nimport { CustomFabricObject } from '@/types/fabric-types';\n\ninterface GridSpacingProps {\n  canvas: fabric.Canvas | null;\n  selectedObjects: CustomFabricObject[];\n}\n\nconst GridSpacing: React.FC<GridSpacingProps> = ({\n  canvas,\n  selectedObjects,\n}) => {\n  const [gridSpacing, setGridSpacing] = useState({ row: 65, column: 65 });\n  const [gridLayout, setGridLayout] = useState({ rows: 2, columns: 2 });\n\n  // Calculate optimal initial grid layout based on number of selected objects\n  useEffect(() => {\n    if (selectedObjects.length <= 1) return;\n\n    const total = selectedObjects.length;\n    const sqrt = Math.sqrt(total);\n    const rows = Math.ceil(sqrt);\n    const columns = Math.ceil(total / rows);\n\n    setGridLayout({ rows, columns });\n  }, [selectedObjects.length]);\n\n  const updateGridLayout = useCallback(() => {\n    if (!canvas || selectedObjects.length <= 1) return;\n\n    const objects = canvas.getActiveObjects();\n    if (objects.length > 1) {\n      const firstObj = objects[0];\n      const { rows, columns } = gridLayout;\n      const { row: rowSpacing, column: columnSpacing } = gridSpacing;\n\n      objects.forEach((obj, index) => {\n        if (index === 0) return;\n        const row = Math.floor(index / columns);\n        const col = index % columns;\n\n        obj.set({\n          left: firstObj.left! + col * columnSpacing,\n          top: firstObj.top! + row * rowSpacing,\n        });\n      });\n\n      canvas.renderAll();\n    }\n  }, [canvas, selectedObjects, gridLayout, gridSpacing]);\n\n  const handleGridSpacingChange = useCallback(\n    (type: 'row' | 'column', value: number) => {\n      if (!canvas || selectedObjects.length <= 1) return;\n\n      // Ensure spacing is never negative and has a reasonable minimum\n      const minSpacing = 5;\n      const maxSpacing = 200;\n      const clampedValue = Math.max(minSpacing, Math.min(maxSpacing, value));\n\n      setGridSpacing((prev) => ({ ...prev, [type]: clampedValue }));\n      updateGridLayout();\n    },\n    [canvas, selectedObjects, updateGridLayout]\n  );\n\n  const handleGridLayoutChange = useCallback(\n    (type: 'rows' | 'columns', value: number) => {\n      if (!canvas || selectedObjects.length <= 1) return;\n\n      const total = selectedObjects.length;\n      let newValue = Math.max(1, Math.min(total, value));\n\n      // Ensure the other dimension is adjusted to accommodate all objects\n      if (type === 'rows') {\n        const columns = Math.ceil(total / newValue);\n        setGridLayout((prev) => ({ rows: newValue, columns }));\n      } else {\n        const rows = Math.ceil(total / newValue);\n        setGridLayout((prev) => ({ rows, columns: newValue }));\n      }\n\n      updateGridLayout();\n    },\n    [canvas, selectedObjects, updateGridLayout]\n  );\n\n  if (selectedObjects.length <= 1) return null;\n\n  return (\n    <>\n      <div className=\"mb-2 text-xs font-semibold text-gray-500\">\n        Editing {selectedObjects.length} seats\n      </div>\n      <div className=\"rounded-md bg-white p-4 shadow\">\n        <div className=\"mb-4 flex items-center gap-2\">\n          <LuGrid2X2 className=\"h-5 w-5 text-gray-500\" />\n          <h3 className=\"font-semibold\">Grid Layout</h3>\n        </div>\n        <div className=\"space-y-4\">\n          <div className=\"grid grid-cols-2 gap-4\">\n            <div>\n              <label className=\"mb-1 block text-sm text-gray-600\">Rows</label>\n              <div className=\"mt-1 flex items-center gap-1\">\n                <button\n                  className=\"flex h-6 w-6 items-center justify-center rounded border border-solid border-gray-200 text-xs transition-colors hover:bg-gray-100 disabled:opacity-50\"\n                  onClick={() =>\n                    handleGridLayoutChange('rows', gridLayout.rows - 1)\n                  }\n                  disabled={gridLayout.rows <= 1}\n                  title=\"Decrease rows\"\n                >\n                  -\n                </button>\n                <input\n                  type=\"number\"\n                  value={gridLayout.rows}\n                  onChange={(e) =>\n                    handleGridLayoutChange('rows', Number(e.target.value))\n                  }\n                  className=\"w-12 rounded border border-solid border-gray-200 bg-white px-1 py-0.5 text-center text-xs [appearance:textfield] focus:outline-none focus:ring-1 focus:ring-gray-500 [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none\"\n                  min=\"1\"\n                  max={selectedObjects.length}\n                  step=\"1\"\n                  title={`Enter number of rows (1-${selectedObjects.length})`}\n                />\n                <button\n                  className=\"flex h-6 w-6 items-center justify-center rounded border border-solid border-gray-200 text-xs transition-colors hover:bg-gray-100 disabled:opacity-50\"\n                  onClick={() =>\n                    handleGridLayoutChange('rows', gridLayout.rows + 1)\n                  }\n                  disabled={gridLayout.rows >= selectedObjects.length}\n                  title=\"Increase rows\"\n                >\n                  +\n                </button>\n              </div>\n              <div className=\"mt-1 text-xs text-gray-500\">\n                {gridLayout.rows * gridLayout.columns >= selectedObjects.length\n                  ? `${gridLayout.rows} rows × ${gridLayout.columns} columns`\n                  : 'Not enough space for all seats'}\n              </div>\n            </div>\n            <div>\n              <label className=\"mb-1 block text-sm text-gray-600\">\n                Columns\n              </label>\n              <div className=\"mt-1 flex items-center gap-1\">\n                <button\n                  className=\"flex h-6 w-6 items-center justify-center rounded border border-solid border-gray-200 text-xs transition-colors hover:bg-gray-100 disabled:opacity-50\"\n                  onClick={() =>\n                    handleGridLayoutChange('columns', gridLayout.columns - 1)\n                  }\n                  disabled={gridLayout.columns <= 1}\n                  title=\"Decrease columns\"\n                >\n                  -\n                </button>\n                <input\n                  type=\"number\"\n                  value={gridLayout.columns}\n                  onChange={(e) =>\n                    handleGridLayoutChange('columns', Number(e.target.value))\n                  }\n                  className=\"w-12 rounded border border-solid border-gray-200 bg-white px-1 py-0.5 text-center text-xs [appearance:textfield] focus:outline-none focus:ring-1 focus:ring-gray-500 [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none\"\n                  min=\"1\"\n                  max={selectedObjects.length}\n                  step=\"1\"\n                  title={`Enter number of columns (1-${selectedObjects.length})`}\n                />\n                <button\n                  className=\"flex h-6 w-6 items-center justify-center rounded border border-solid border-gray-200 text-xs transition-colors hover:bg-gray-100 disabled:opacity-50\"\n                  onClick={() =>\n                    handleGridLayoutChange('columns', gridLayout.columns + 1)\n                  }\n                  disabled={gridLayout.columns >= selectedObjects.length}\n                  title=\"Increase columns\"\n                >\n                  +\n                </button>\n              </div>\n            </div>\n          </div>\n          <div className=\"grid grid-cols-2 gap-4\">\n            <div>\n              <label className=\"mb-1 block text-sm text-gray-600\">\n                Row Spacing\n              </label>\n              <div className=\"mt-1 flex items-center gap-1\">\n                <button\n                  className=\"flex h-6 w-6 items-center justify-center rounded border border-solid border-gray-200 text-xs transition-colors hover:bg-gray-100 disabled:opacity-50\"\n                  onClick={() =>\n                    handleGridSpacingChange('row', gridSpacing.row - 5)\n                  }\n                  disabled={gridSpacing.row <= 5}\n                  title=\"Decrease row spacing\"\n                >\n                  -\n                </button>\n                <input\n                  type=\"number\"\n                  value={gridSpacing.row}\n                  onChange={(e) =>\n                    handleGridSpacingChange('row', Number(e.target.value))\n                  }\n                  className=\"w-12 rounded border border-solid border-gray-200 bg-white px-1 py-0.5 text-center text-xs [appearance:textfield] focus:outline-none focus:ring-1 focus:ring-gray-500 [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none\"\n                  min=\"5\"\n                  max=\"200\"\n                  step=\"5\"\n                  title=\"Enter row spacing (5-200)\"\n                />\n                <button\n                  className=\"flex h-6 w-6 items-center justify-center rounded border border-solid border-gray-200 text-xs transition-colors hover:bg-gray-100 disabled:opacity-50\"\n                  onClick={() =>\n                    handleGridSpacingChange('row', gridSpacing.row + 5)\n                  }\n                  disabled={gridSpacing.row >= 200}\n                  title=\"Increase row spacing\"\n                >\n                  +\n                </button>\n              </div>\n            </div>\n            <div>\n              <label className=\"mb-1 block text-sm text-gray-600\">\n                Column Spacing\n              </label>\n              <div className=\"mt-1 flex items-center gap-1\">\n                <button\n                  className=\"flex h-6 w-6 items-center justify-center rounded border border-solid border-gray-200 text-xs transition-colors hover:bg-gray-100 disabled:opacity-50\"\n                  onClick={() =>\n                    handleGridSpacingChange('column', gridSpacing.column - 5)\n                  }\n                  disabled={gridSpacing.column <= 5}\n                  title=\"Decrease column spacing\"\n                >\n                  -\n                </button>\n                <input\n                  type=\"number\"\n                  value={gridSpacing.column}\n                  onChange={(e) =>\n                    handleGridSpacingChange('column', Number(e.target.value))\n                  }\n                  className=\"w-12 rounded border border-solid border-gray-200 bg-white px-1 py-0.5 text-center text-xs [appearance:textfield] focus:outline-none focus:ring-1 focus:ring-gray-500 [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none\"\n                  min=\"5\"\n                  max=\"200\"\n                  step=\"5\"\n                  title=\"Enter column spacing (5-200)\"\n                />\n                <button\n                  className=\"flex h-6 w-6 items-center justify-center rounded border border-solid border-gray-200 text-xs transition-colors hover:bg-gray-100 disabled:opacity-50\"\n                  onClick={() =>\n                    handleGridSpacingChange('column', gridSpacing.column + 5)\n                  }\n                  disabled={gridSpacing.column >= 200}\n                  title=\"Increase column spacing\"\n                >\n                  +\n                </button>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </>\n  );\n};\n\nexport default GridSpacing;\n","import { useEffect, useState } from 'react';\r\nimport {\r\n  LuCircleFadingPlus,\r\n  LuCirclePlus,\r\n  LuCommand,\r\n  LuPlus,\r\n} from 'react-icons/lu';\r\nimport { useEventGuiStore } from '@/zustand';\r\nimport { CustomFabricObject } from '@/types/fabric-types';\r\nimport { Select } from '@/components/ui';\r\nimport { useObjectProperties, useObjectUpdater } from './hooks';\r\nimport CommonProperties from './components/commonProperties';\r\nimport CircleProperties from './components/circleProperties';\r\nimport RectangleProperties from './components/rectangleProperties';\r\nimport TextProperties from './components/textProperties';\r\nimport ColorProperties from './components/colorProperties';\r\nimport SeatAttributes from './components/seatAttributes';\r\nimport GridSpacing from './components/gridSpacing';\r\n\r\nexport type Mode =\r\n  | 'select'\r\n  | 'one-seat'\r\n  | 'multiple-seat'\r\n  | 'shape-square'\r\n  | 'text';\r\n\r\nconst Sidebar: React.FC = () => {\r\n  const { canvas } = useEventGuiStore();\r\n  const [selectedObjects, setSelectedObjects] = useState<CustomFabricObject[]>(\r\n    []\r\n  );\r\n  const [objectTypes, setObjectTypes] = useState<string[]>([]);\r\n  const [selectedObject, setSelectedObject] =\r\n    useState<CustomFabricObject | null>(null);\r\n  const [objectType, setObjectType] = useState<\r\n    'circle' | 'rect' | 'i-text' | null\r\n  >(null);\r\n  const [activeTab, setActiveTab] = useState<'basic' | 'attributes'>('basic');\r\n\r\n  const { properties, setProperties } = useObjectProperties(\r\n    canvas,\r\n    selectedObjects\r\n  );\r\n  const [lockAspect, setLockAspect] = useState(true);\r\n  const { updateObject } = useObjectUpdater(canvas, setProperties, lockAspect);\r\n\r\n  // Listen for object selection\r\n  useEffect(() => {\r\n    if (!canvas) return;\r\n\r\n    const updateSelectedObjects = () => {\r\n      const activeObjects = canvas.getActiveObjects() as CustomFabricObject[];\r\n      const activeObject = canvas.getActiveObject();\r\n      setSelectedObjects(activeObjects);\r\n      setSelectedObject(activeObjects[0] || null);\r\n      setObjectType(\r\n        activeObjects[0]?.type as 'circle' | 'rect' | 'i-text' | null\r\n      );\r\n      setObjectTypes(\r\n        Array.from(\r\n          new Set(\r\n            activeObjects\r\n              .map((obj) => obj.type)\r\n              .filter((type): type is string => typeof type === 'string')\r\n          )\r\n        )\r\n      );\r\n      // --- Sync sidebar properties with group if group is selected ---\r\n      if (activeObject && activeObject.type === 'activeSelection') {\r\n        setProperties((prev) => ({\r\n          ...prev,\r\n          angle: activeObject.angle ?? prev.angle,\r\n          radius: (activeObject as any).radius ?? prev.radius,\r\n          width:\r\n            (activeObject.width ?? prev.width) * (activeObject.scaleX ?? 1),\r\n          height:\r\n            (activeObject.height ?? prev.height) * (activeObject.scaleY ?? 1),\r\n          fill: activeObject.fill ?? prev.fill,\r\n          stroke: activeObject.stroke ?? prev.stroke,\r\n          text: (activeObject as any).text ?? prev.text,\r\n          fontSize: (activeObject as any).fontSize ?? prev.fontSize,\r\n          fontWeight: (activeObject as any).fontWeight ?? prev.fontWeight,\r\n          fontFamily: (activeObject as any).fontFamily ?? prev.fontFamily,\r\n          left: activeObject.left ?? prev.left,\r\n          top: activeObject.top ?? prev.top,\r\n          rx: (activeObject as any).rx ?? prev.rx,\r\n          ry: (activeObject as any).ry ?? prev.ry,\r\n        }));\r\n      } else if (activeObjects[0]) {\r\n        setProperties((prev) => ({\r\n          ...prev,\r\n          angle: activeObjects[0].angle ?? prev.angle,\r\n          radius: (activeObjects[0] as any).radius ?? prev.radius,\r\n          width:\r\n            (activeObjects[0].width ?? prev.width) *\r\n            (activeObjects[0].scaleX ?? 1),\r\n          height:\r\n            (activeObjects[0].height ?? prev.height) *\r\n            (activeObjects[0].scaleY ?? 1),\r\n          fill: activeObjects[0].fill ?? prev.fill,\r\n          stroke: activeObjects[0].stroke ?? prev.stroke,\r\n          text: (activeObjects[0] as any).text ?? prev.text,\r\n          fontSize: (activeObjects[0] as any).fontSize ?? prev.fontSize,\r\n          fontWeight: (activeObjects[0] as any).fontWeight ?? prev.fontWeight,\r\n          fontFamily: (activeObjects[0] as any).fontFamily ?? prev.fontFamily,\r\n          left: activeObjects[0].left ?? prev.left,\r\n          top: activeObjects[0].top ?? prev.top,\r\n          rx: (activeObjects[0] as any).rx ?? prev.rx,\r\n          ry: (activeObjects[0] as any).ry ?? prev.ry,\r\n        }));\r\n      }\r\n    };\r\n\r\n    const handleGroupTransform = (e: fabric.IEvent) => {\r\n      const obj = e.target;\r\n      if (obj && obj.type === 'activeSelection') {\r\n        setProperties((prev) => ({\r\n          ...prev,\r\n          left: obj.left ?? prev.left,\r\n          top: obj.top ?? prev.top,\r\n          angle: obj.angle ?? prev.angle,\r\n        }));\r\n      }\r\n    };\r\n\r\n    const eventsToListen = [\r\n      'selection:created',\r\n      'selection:updated',\r\n      'object:moving',\r\n      'object:rotating',\r\n      'object:scaling',\r\n      'object:modified',\r\n    ];\r\n\r\n    eventsToListen.forEach((event) => {\r\n      canvas.on(event, updateSelectedObjects);\r\n    });\r\n\r\n    canvas.on('object:moving', handleGroupTransform);\r\n    canvas.on('object:rotating', handleGroupTransform);\r\n\r\n    canvas.on('selection:cleared', () => {\r\n      setSelectedObjects([]);\r\n      setSelectedObject(null);\r\n      setObjectType(null);\r\n      setObjectTypes([]);\r\n    });\r\n\r\n    return () => {\r\n      eventsToListen.forEach((event) => {\r\n        canvas.off(event, updateSelectedObjects);\r\n      });\r\n      canvas.off('object:moving', handleGroupTransform);\r\n      canvas.off('object:rotating', handleGroupTransform);\r\n      canvas.off('selection:cleared');\r\n    };\r\n  }, [canvas]);\r\n\r\n  return (\r\n    <div className=\"h-full w-[20rem] space-y-4 border-0 border-l border-solid border-gray-200 bg-gray-50 p-4\">\r\n      {selectedObjects.length > 1 &&\r\n        objectTypes.length === 1 &&\r\n        objectTypes[0] === 'circle' && (\r\n          <GridSpacing canvas={canvas} selectedObjects={selectedObjects} />\r\n        )}\r\n\r\n      {/* Show placeholder when nothing is selected */}\r\n      {selectedObjects.length === 0 && !selectedObject && (\r\n        <div className=\"flex h-full select-none flex-col items-center py-8 text-gray-400\">\r\n          <LuCircleFadingPlus className=\"h-10 w-10 text-gray-400\" />\r\n          <div className=\"text-center\">\r\n            <div className=\"mb-1 font-semibold text-gray-500\">No selection</div>\r\n            <div className=\"text-sm\">\r\n              Select a seat or shape to edit its properties.\r\n            </div>\r\n            <div className=\"mt-2 text-xs text-gray-400\">\r\n              Tip: Use the toolbar above to add new items.\r\n            </div>\r\n          </div>\r\n          <div className=\"mt-8 w-full max-w-xs rounded-lg border border-solid border-gray-200 bg-white/80 p-4\">\r\n            <div className=\"mb-2 flex items-center gap-2 text-sm font-semibold text-gray-700\">\r\n              <LuCommand className=\"\" />\r\n              Command Palette\r\n            </div>\r\n            <ul className=\"mt-2 grid grid-cols-2 space-y-1 text-xs text-gray-500\">\r\n              <li className=\"flex items-center\">\r\n                <span className=\"flex font-semibold text-gray-700\">\r\n                  <LuCommand className=\"text-[0.875rem]\" /> + Z\r\n                </span>{' '}\r\n                — Undo\r\n              </li>\r\n              <li className=\"flex items-center\">\r\n                <span className=\"flex font-semibold text-gray-700\">\r\n                  <LuCommand className=\"text-[0.875rem]\" /> + Y\r\n                </span>{' '}\r\n                — Redo\r\n              </li>\r\n              <li className=\"flex items-center\">\r\n                <span className=\"font-semibold text-gray-700\">Delete</span> —\r\n                Remove\r\n              </li>\r\n              <li className=\"flex items-center\">\r\n                <span className=\"flex font-semibold text-gray-700\">\r\n                  <LuCommand className=\"text-[0.875rem]\" /> + S\r\n                </span>{' '}\r\n                — Save\r\n              </li>\r\n            </ul>\r\n          </div>\r\n        </div>\r\n      )}\r\n\r\n      {selectedObject && (\r\n        <div className=\"space-y-4 rounded-md bg-white p-4 shadow\">\r\n          {objectType === 'circle' && (\r\n            <div className=\"mb-4 flex items-center gap-2 border-0 border-b border-solid border-gray-200\">\r\n              <button\r\n                className={`px-3 py-1.5 text-sm font-medium ${\r\n                  activeTab === 'basic'\r\n                    ? 'border-0 border-b-2 border-solid border-gray-500 text-gray-600'\r\n                    : 'text-gray-500 hover:text-gray-700'\r\n                }`}\r\n                onClick={() => setActiveTab('basic')}\r\n              >\r\n                Properties\r\n              </button>\r\n              <button\r\n                className={`px-3 py-1.5 text-sm font-medium ${\r\n                  activeTab === 'attributes'\r\n                    ? 'border-0 border-b-2 border-solid border-gray-500 text-gray-600'\r\n                    : 'text-gray-500 hover:text-gray-700'\r\n                }`}\r\n                onClick={() => setActiveTab('attributes')}\r\n              >\r\n                Attributes\r\n              </button>\r\n            </div>\r\n          )}\r\n\r\n          {objectTypes.length === 1 &&\r\n          objectTypes[0] === 'circle' &&\r\n          activeTab === 'attributes' ? (\r\n            <SeatAttributes\r\n              properties={properties}\r\n              updateObject={updateObject}\r\n              Select={Select}\r\n              selectedObjects={selectedObjects}\r\n            />\r\n          ) : (\r\n            <>\r\n              {objectType !== 'circle' && (\r\n                <h3 className=\"font-semibold\">Properties</h3>\r\n              )}\r\n              <CommonProperties\r\n                properties={{ ...properties, type: objectType || undefined }}\r\n                updateObject={updateObject}\r\n              />\r\n\r\n              {objectType === 'circle' && (\r\n                <CircleProperties\r\n                  properties={properties}\r\n                  updateObject={updateObject}\r\n                  Select={Select}\r\n                />\r\n              )}\r\n\r\n              {objectType === 'rect' && (\r\n                <RectangleProperties\r\n                  properties={properties}\r\n                  updateObject={updateObject}\r\n                  Select={Select}\r\n                />\r\n              )}\r\n\r\n              {objectType === 'i-text' && (\r\n                <TextProperties\r\n                  properties={properties}\r\n                  updateObject={updateObject}\r\n                  Select={Select}\r\n                />\r\n              )}\r\n\r\n              <ColorProperties\r\n                properties={properties}\r\n                updateObject={updateObject}\r\n                objectType={objectType}\r\n              />\r\n            </>\r\n          )}\r\n        </div>\r\n      )}\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default Sidebar;\r\n","import { fabric } from 'fabric';\nimport { v4 as uuidv4 } from 'uuid';\n\n// ::::::::::::::: Create rectangle object\nconst createRect = (left: number, top: number) => {\n  const rect = new fabric.Rect({\n    left,\n    top,\n    fill: '#cccccc',\n    stroke: 'black',\n    strokeWidth: 1,\n    width: 100,\n    height: 100,\n    selectable: true,\n    borderColor: 'green',\n    borderDashArray: [2, 4],\n    padding: 2,\n    cornerColor: 'lightblue',\n    cornerSize: 5,\n    cornerStrokeColor: 'blue',\n    transparentCorners: false,\n    id: uuidv4(),\n    strokeUniform: true,\n    rx: 0,\n    ry: 0,\n  });\n\n  rect.setControlsVisibility({\n    mt: false,\n    mb: false,\n    ml: false,\n    mr: false,\n  });\n  \n  return rect;    \n};\n\n// ::::::::::::::: Create seat object\nconst createSeat = (\n  left: number,\n  top: number,\n  canvas?: fabric.Canvas | null\n) => {\n  const seatNumber = getNextSeatNumber(canvas);\n  const seat = new fabric.Circle({\n    left,\n    top,\n    fill: 'transparent',\n    stroke: 'black',\n    strokeWidth: 1,\n    radius: 10,\n    selectable: true,\n    borderColor: 'green',\n    borderDashArray: [2, 4],\n    padding: 2,\n    cornerColor: 'lightblue',\n    cornerSize: 5,\n    cornerStrokeColor: 'blue',\n    transparentCorners: false,\n    rx: 0.25,\n    ry: 0.25,\n    id: uuidv4(),\n    strokeUniform: true,\n    seatNumber: String(seatNumber),\n  });\n\n  seat.setControlsVisibility({\n    mt: false,\n    mb: false,\n    ml: false,\n    mr: false,\n  });\n  \n  return seat;    \n};\n\n// ::::::::::::::: Create text object\nconst createText = (left: number, top: number, text: string = 'Type here') => {\n  const textObject = new fabric.IText(text, {\n    left,\n    top,\n    fontSize: 20,\n    fill: 'black',\n    selectable: true,\n    borderColor: 'green',\n    borderDashArray: [2, 4],\n    padding: 2,\n    cornerColor: 'lightblue',\n    cornerSize: 5,\n    cornerStrokeColor: 'blue',\n    transparentCorners: false,\n    fontFamily: 'sans-serif',\n    id: uuidv4(),\n    strokeUniform: true,\n  });\n\n  textObject.setControlsVisibility({\n    mt: false,\n    mb: false,\n    ml: false,\n    mr: false,\n  });\n  \n  return textObject;\n};\n\n// Helper to get the next available seat number from the canvas\nfunction getNextSeatNumber(canvas?: fabric.Canvas | null) {\n  if (!canvas) return 1;\n  const allSeats = canvas.getObjects('circle');\n  const numbers = allSeats\n    .map((obj) => parseInt((obj as any).seatNumber || '', 10))\n    .filter((n) => !isNaN(n));\n  return numbers.length ? Math.max(...numbers) + 1 : 1;\n}\n\nexport {\n  createRect,\n  createSeat,\n  createText,\n};\n","import { useEffect } from 'react';\nimport { fabric } from 'fabric';\nimport { createSeat } from '../components/createObject';\n\nconst useCanvasSetup = (\n  canvasRef: React.RefObject<HTMLCanvasElement>,\n  canvasParent: React.RefObject<HTMLDivElement>,\n  setCanvas: (c: fabric.Canvas) => void,\n  width: number = 800,\n  height: number = 600,\n  backgroundColor: string = '#f8fafc',\n  allowSelection: boolean = true\n) => {\n  useEffect(() => {\n    if (!canvasRef.current || !canvasParent.current) return;\n\n    const c = new fabric.Canvas(canvasRef.current, {\n      width,\n      height,\n      backgroundColor,\n      selection: allowSelection,\n    });\n    setCanvas(c);\n\n    const resizeCanvas = () => {\n      if (canvasParent.current) {\n        const parent = canvasParent.current;\n        if (parent) {\n          const { width, height } = parent.getBoundingClientRect();\n          c.setDimensions({ width, height }, { cssOnly: false });\n        }\n      }\n    };\n\n    resizeCanvas();\n    window.addEventListener('resize', resizeCanvas);\n\n    const seat = createSeat(100, 100);\n    seat.angle = 45;\n    // c.add(seat);\n\n    c.on('object:moving', (event) => {\n      const obj = event.target;\n      const { width: canvasWidth, height: canvasHeight } = c;\n\n      if (obj) {\n        obj.setCoords(); // Ensure bounding box is up to date\n        const rect = obj.getBoundingRect();\n        let dx = 0,\n          dy = 0;\n        // Clamp left/right\n        if (rect.left < 0) {\n          dx = -rect.left;\n        } else if (rect.left + rect.width > (canvasWidth ?? 0)) {\n          dx = (canvasWidth ?? 0) - (rect.left + rect.width);\n        }\n        // Clamp top/bottom\n        if (rect.top < 0) {\n          dy = -rect.top;\n        } else if (rect.top + rect.height > (canvasHeight ?? 0)) {\n          dy = (canvasHeight ?? 0) - (rect.top + rect.height);\n        }\n        if (dx !== 0 || dy !== 0) {\n          obj.left = (obj.left ?? 0) + dx;\n          obj.top = (obj.top ?? 0) + dy;\n          obj.setCoords();\n        }\n      }\n    });\n\n    // Enforce strokeUniform: true for all supported objects on selection\n    c.on('selection:created', (event) => {\n      const objs = event.selected || (event.target ? [event.target] : []);\n      objs.forEach((obj) => {\n        if (\n          typeof obj.type === 'string' &&\n          ['rect', 'circle', 'i-text'].includes(obj.type)\n        ) {\n          obj.strokeUniform = true;\n        }\n      });\n    });\n    // Also enforce after loading from JSON (if needed)\n    c.on('after:render', () => {\n      c.getObjects().forEach((obj) => {\n        if (\n          typeof obj.type === 'string' &&\n          ['rect', 'circle', 'i-text'].includes(obj.type)\n        ) {\n          obj.strokeUniform = true;\n        }\n      });\n    });\n\n    return () => {\n      window.removeEventListener('resize', resizeCanvas);\n      c.dispose();\n    };\n  }, [canvasRef, canvasParent, setCanvas, width, height]);\n};\n\nexport default useCanvasSetup;\n","import { useEffect } from 'react';\nimport { fabric } from 'fabric';\n\nconst useSelectionHandler = (canvas: fabric.Canvas | null) => {\n  useEffect(() => {\n    if (!canvas) return;\n\n    const handleSelection = () => {\n      const activeObject = canvas.getActiveObject();\n\n      if (activeObject && activeObject.type === 'activeSelection') {\n        activeObject.setControlsVisibility({\n          mt: false,\n          mb: false,\n          ml: false,\n          mr: false,\n        });\n\n        activeObject.borderColor = 'green';\n        activeObject.borderDashArray = [2, 4];\n        activeObject.padding = 4;\n        activeObject.cornerColor = 'lightblue';\n        activeObject.cornerSize = 7;\n        activeObject.cornerStrokeColor = 'blue';\n\n        canvas.requestRenderAll();\n      }\n    };\n\n    canvas.on('selection:created', handleSelection);\n    canvas.on('selection:updated', handleSelection);\n\n    return () => {\n      canvas.off('selection:created', handleSelection);\n      canvas.off('selection:updated', handleSelection);\n    };\n  }, [canvas]);\n};\n\nexport default useSelectionHandler;","import { useEffect, useRef } from 'react';\nimport { fabric } from 'fabric';\nimport { createSeat } from '../components/createObject';\nimport { Mode } from '@/zustand/store/eventGuiStore';\n\nconst useMultipleSeatCreator = (\n  canvas: fabric.Canvas | null,\n  toolMode: Mode,\n  setToolMode: (mode: Mode) => void\n) => {\n  const startPointRef = useRef<{ x: number; y: number } | null>(null);\n  const highlightRectRef = useRef<fabric.Rect | null>(null);\n\n  useEffect(() => {\n    if (!canvas) return;\n\n    const handleMouseDown = (event: fabric.IEvent) => {\n      if (toolMode !== 'multiple-seat') return;\n      const pointer = canvas.getPointer(event.e);\n      startPointRef.current = { x: pointer.x, y: pointer.y };\n\n      // Create highlight rectangle\n      const rect = new fabric.Rect({\n        left: pointer.x,\n        top: pointer.y,\n        width: 1,\n        height: 1,\n        fill: 'rgba(0,0,255,0.1)',\n        stroke: 'blue',\n        strokeDashArray: [4, 4],\n        selectable: false,\n        evented: false,\n        excludeFromExport: true,\n      });\n      highlightRectRef.current = rect;\n      canvas.add(rect);\n      canvas.bringToFront(rect);\n    };\n\n    const handleMouseMove = (event: fabric.IEvent) => {\n      if (\n        toolMode !== 'multiple-seat' ||\n        !startPointRef.current ||\n        !highlightRectRef.current\n      )\n        return;\n      const pointer = canvas.getPointer(event.e);\n      const rect = highlightRectRef.current;\n      rect.set({\n        width: Math.abs(pointer.x - startPointRef.current.x),\n        height: Math.abs(pointer.y - startPointRef.current.y),\n        left: Math.min(pointer.x, startPointRef.current.x),\n        top: Math.min(pointer.y, startPointRef.current.y),\n      });\n      canvas.requestRenderAll();\n      canvas.bringToFront(rect);\n    };\n\n    const handleMouseUp = (event: fabric.IEvent) => {\n      if (toolMode !== 'multiple-seat' || !startPointRef.current) return;\n      const endPoint = canvas.getPointer(event.e);\n      const startPoint = startPointRef.current;\n      const width = Math.abs(endPoint.x - startPoint.x);\n      const height = Math.abs(endPoint.y - startPoint.y);\n      const rows = Math.floor(height / 60);\n      const cols = Math.floor(width / 60);\n      for (let i = 0; i < rows; i++) {\n        for (let j = 0; j < cols; j++) {\n          const left = startPoint.x + j * 60;\n          const top = startPoint.y + i * 60;\n          const seat = createSeat(left, top, canvas);\n          canvas.add(seat);\n        }\n      }\n      canvas.renderAll();\n      // Remove highlight rectangle\n      if (highlightRectRef.current) {\n        canvas.remove(highlightRectRef.current);\n        highlightRectRef.current = null;\n      }\n      startPointRef.current = null;\n      setToolMode('select');\n    };\n\n    canvas.on('mouse:down', handleMouseDown);\n    canvas.on('mouse:move', handleMouseMove);\n    canvas.on('mouse:up', handleMouseUp);\n\n    return () => {\n      canvas.off('mouse:down', handleMouseDown);\n      canvas.off('mouse:move', handleMouseMove);\n      canvas.off('mouse:up', handleMouseUp);\n    };\n  }, [canvas, toolMode, setToolMode]);\n};\n\nexport default useMultipleSeatCreator;\n","import { useEffect } from 'react';\nimport { fabric } from 'fabric';\n\nconst useObjectDeletion = (\n  canvas: fabric.Canvas | null,\n  toolAction: string | null\n) => {\n  useEffect(() => {\n    if (!canvas) return;\n\n    const deleteFunction = () => {\n      const activeObject = canvas.getActiveObject();\n      if (!activeObject) return;\n\n      if (activeObject.type === 'activeSelection') {\n        const activeSelection = activeObject as fabric.ActiveSelection;\n        const objects = [...activeSelection.getObjects()];\n        objects.forEach((obj) => canvas.remove(obj));\n      } else {\n        canvas.remove(activeObject);\n      }\n\n      canvas.discardActiveObject();\n      canvas.renderAll();\n    };\n\n    const handleKeyDown = (event: KeyboardEvent) => {\n      if (\n        event.key === 'Delete' ||\n        (event.ctrlKey && event.key.toLowerCase() === 'd')\n      ) {\n        deleteFunction();\n      }\n    };\n\n    if (toolAction === 'delete') {\n      deleteFunction();\n    }\n\n    window.addEventListener('keydown', handleKeyDown);\n\n    return () => {\n      window.removeEventListener('keydown', handleKeyDown);\n    };\n  }, [canvas, toolAction]);\n};\n\nexport default useObjectDeletion;\n","import { useEffect, useRef } from 'react';\nimport { fabric } from 'fabric';\nimport { createSeat, createRect, createText } from '../components/createObject';\nimport { Mode } from '@/zustand/store/eventGuiStore';\n\nconst useObjectCreator = (\n  canvas: fabric.Canvas | null,\n  toolMode: Mode,\n  setToolMode: (mode: Mode) => void\n) => {\n  const startPointRef = useRef<{ x: number; y: number } | null>(null);\n  const rectRef = useRef<fabric.Rect | null>(null);\n  const isDraggingRef = useRef(false);\n\n  useEffect(() => {\n    if (!canvas) return;\n\n    const handleMouseDown = (event: fabric.IEvent) => {\n      const pointer = canvas.getPointer(event.e);\n\n      if (toolMode === 'one-seat') {\n        const seat = createSeat(pointer.x, pointer.y, canvas);\n        canvas.add(seat);\n        canvas.renderAll();\n      } else if (toolMode === 'shape-square') {\n        const rect = createRect(pointer.x, pointer.y);\n        rectRef.current = rect;\n        isDraggingRef.current = false;\n        canvas.add(rect);\n        canvas.setActiveObject(rect);\n        startPointRef.current = { x: pointer.x, y: pointer.y };\n      } else if (toolMode === 'text') {\n        const text = createText(pointer.x, pointer.y);\n        canvas.add(text);\n        canvas.setActiveObject(text);\n        text.enterEditing();\n        text.selectAll();\n      }\n    };\n\n    const handleMouseMove = (event: fabric.IEvent) => {\n      if (\n        toolMode === 'shape-square' &&\n        startPointRef.current &&\n        rectRef.current\n      ) {\n        const pointer = canvas.getPointer(event.e);\n        const width = Math.abs(pointer.x - startPointRef.current.x);\n        const height = Math.abs(pointer.y - startPointRef.current.y);\n        rectRef.current.set({\n          width: width,\n          height: height,\n        });\n        isDraggingRef.current = true;\n        canvas.renderAll();\n      }\n    };\n\n    const handleMouseUp = () => {\n      if (toolMode === 'shape-square' && rectRef.current) {\n        if (!isDraggingRef.current) {\n          // If not dragged, set to default size\n          rectRef.current.set({ width: 100, height: 100 });\n          canvas.renderAll();\n        }\n        startPointRef.current = null;\n        rectRef.current = null;\n        isDraggingRef.current = false;\n      }\n      setToolMode('select');\n    };\n\n    canvas.on('mouse:down', handleMouseDown);\n    canvas.on('mouse:move', handleMouseMove);\n    canvas.on('mouse:up', handleMouseUp);\n\n    return () => {\n      canvas.off('mouse:down', handleMouseDown);\n      canvas.off('mouse:move', handleMouseMove);\n      canvas.off('mouse:up', handleMouseUp);\n    };\n  }, [canvas, toolMode, setToolMode]);\n};\n\nexport default useObjectCreator;\n","import { useEffect } from 'react';\nimport { useEventGuiStore } from '@/zustand';\nimport useClipboardActions from './useClipboardActions';\nimport { CanvasObject } from '@/types/data.types';\n\nconst useKeyboardShortcuts = (onSave?: (json: any) => void) => {\n  const { canvas, setLastClickedPoint, undo, redo } = useEventGuiStore();\n  const { copySelectedObjects, cutSelectedObjects, pasteObjects } =\n    useClipboardActions();\n\n  useEffect(() => {\n    if (!canvas) return;\n\n    const handleKeyDown = (e: KeyboardEvent) => {\n      if (e.ctrlKey) {\n        switch (e.key.toLowerCase()) {\n          case 'c':\n            e.preventDefault();\n            copySelectedObjects();\n            break;\n          case 'x':\n            e.preventDefault();\n            cutSelectedObjects();\n            break;\n          case 'v':\n            e.preventDefault();\n            pasteObjects();\n            break;\n          case 'z':\n            e.preventDefault();\n            if (e.shiftKey) {\n              redo();\n            } else {\n              undo();\n            }\n            break;\n          case 'y':\n            e.preventDefault();\n            redo();\n            break;\n          case 's':\n            e.preventDefault();\n            if (onSave) {\n              const json = {\n                type: 'canvas',\n                ...canvas.toJSON(['customType', 'seatData', 'zoneData']),\n              } as unknown as CanvasObject;\n              onSave(json);\n            }\n            break;\n        }\n      }\n    };\n\n    const handleMouseDown = (event: fabric.IEvent) => {\n      const pointer = canvas.getPointer(event.e);\n      setLastClickedPoint({ x: pointer.x, y: pointer.y });\n    };\n\n    document.addEventListener('keydown', handleKeyDown);\n    canvas.on('mouse:down', handleMouseDown);\n\n    return () => {\n      document.removeEventListener('keydown', handleKeyDown);\n      canvas.off('mouse:down', handleMouseDown);\n    };\n  }, [\n    canvas,\n    copySelectedObjects,\n    cutSelectedObjects,\n    pasteObjects,\n    setLastClickedPoint,\n    undo,\n    redo,\n    onSave,\n  ]);\n};\n\nexport default useKeyboardShortcuts;\n","import { useEffect, useRef } from 'react';\r\nimport { fabric } from 'fabric';\r\n\r\nconst SNAP_THRESHOLD = 10;\r\n\r\nfunction getSnapPoints(obj: fabric.Object) {\r\n  const left = obj.left ?? 0;\r\n  const top = obj.top ?? 0;\r\n  const width = (obj.width ?? 0) * (obj.scaleX ?? 1);\r\n  const height = (obj.height ?? 0) * (obj.scaleY ?? 1);\r\n  return {\r\n    left,\r\n    right: left + width,\r\n    top,\r\n    bottom: top + height,\r\n    centerX: left + width / 2,\r\n    centerY: top + height / 2,\r\n  };\r\n}\r\n\r\nexport function useSmartSnap(\r\n  canvas: fabric.Canvas | null,\r\n  snapEnabled: boolean\r\n) {\r\n  const guideLines = useRef<fabric.Line[]>([]);\r\n\r\n  useEffect(() => {\r\n    if (!canvas || !snapEnabled) return;\r\n\r\n    function clearGuides() {\r\n      guideLines.current.forEach((line) => canvas.remove(line));\r\n      guideLines.current = [];\r\n    }\r\n\r\n    const handleMoving = (e: fabric.IEvent) => {\r\n      clearGuides();\r\n      const moving = e.target;\r\n      if (!moving) return;\r\n      const movingPoints = getSnapPoints(moving);\r\n      let snapX = moving.left ?? 0;\r\n      let snapY = moving.top ?? 0;\r\n      let snappedX = false;\r\n      let snappedY = false;\r\n      const others = canvas\r\n        .getObjects()\r\n        .filter((obj) => obj !== moving && obj.selectable !== false);\r\n      for (const obj of others) {\r\n        const pts = getSnapPoints(obj);\r\n        // X axis (vertical guides)\r\n        [pts.left, pts.centerX, pts.right].forEach((x) => {\r\n          if (Math.abs(movingPoints.left - x) < SNAP_THRESHOLD) {\r\n            snapX = x;\r\n            snappedX = true;\r\n            // Draw guide\r\n            const line = new fabric.Line([x, 0, x, canvas.height ?? 1000], {\r\n              stroke: 'rgba(0,0,255,0.5)',\r\n              selectable: false,\r\n              evented: false,\r\n              strokeDashArray: [4, 4],\r\n              excludeFromExport: true,\r\n            });\r\n            canvas.add(line);\r\n            guideLines.current.push(line);\r\n          }\r\n          if (Math.abs(movingPoints.centerX - x) < SNAP_THRESHOLD) {\r\n            snapX = x - ((moving.width ?? 0) * (moving.scaleX ?? 1)) / 2;\r\n            snappedX = true;\r\n            const line = new fabric.Line([x, 0, x, canvas.height ?? 1000], {\r\n              stroke: 'rgba(0,0,255,0.5)',\r\n              selectable: false,\r\n              evented: false,\r\n              strokeDashArray: [4, 4],\r\n              excludeFromExport: true,\r\n            });\r\n            canvas.add(line);\r\n            guideLines.current.push(line);\r\n          }\r\n          if (Math.abs(movingPoints.right - x) < SNAP_THRESHOLD) {\r\n            snapX = x - (moving.width ?? 0) * (moving.scaleX ?? 1);\r\n            snappedX = true;\r\n            const line = new fabric.Line([x, 0, x, canvas.height ?? 1000], {\r\n              stroke: 'rgba(0,0,255,0.5)',\r\n              selectable: false,\r\n              evented: false,\r\n              strokeDashArray: [4, 4],\r\n              excludeFromExport: true,\r\n            });\r\n            canvas.add(line);\r\n            guideLines.current.push(line);\r\n          }\r\n        });\r\n        // Y axis (horizontal guides)\r\n        [pts.top, pts.centerY, pts.bottom].forEach((y) => {\r\n          if (Math.abs(movingPoints.top - y) < SNAP_THRESHOLD) {\r\n            snapY = y;\r\n            snappedY = true;\r\n            const line = new fabric.Line([0, y, canvas.width ?? 1000, y], {\r\n              stroke: 'rgba(0,0,255,0.5)',\r\n              selectable: false,\r\n              evented: false,\r\n              strokeDashArray: [4, 4],\r\n              excludeFromExport: true,\r\n            });\r\n            canvas.add(line);\r\n            guideLines.current.push(line);\r\n          }\r\n          if (Math.abs(movingPoints.centerY - y) < SNAP_THRESHOLD) {\r\n            snapY = y - ((moving.height ?? 0) * (moving.scaleY ?? 1)) / 2;\r\n            snappedY = true;\r\n            const line = new fabric.Line([0, y, canvas.width ?? 1000, y], {\r\n              stroke: 'rgba(0,0,255,0.5)',\r\n              selectable: false,\r\n              evented: false,\r\n              strokeDashArray: [4, 4],\r\n              excludeFromExport: true,\r\n            });\r\n            canvas.add(line);\r\n            guideLines.current.push(line);\r\n          }\r\n          if (Math.abs(movingPoints.bottom - y) < SNAP_THRESHOLD) {\r\n            snapY = y - (moving.height ?? 0) * (moving.scaleY ?? 1);\r\n            snappedY = true;\r\n            const line = new fabric.Line([0, y, canvas.width ?? 1000, y], {\r\n              stroke: 'rgba(0,0,255,0.5)',\r\n              selectable: false,\r\n              evented: false,\r\n              strokeDashArray: [4, 4],\r\n              excludeFromExport: true,\r\n            });\r\n            canvas.add(line);\r\n            guideLines.current.push(line);\r\n          }\r\n        });\r\n      }\r\n      if (snappedX) moving.set({ left: snapX });\r\n      if (snappedY) moving.set({ top: snapY });\r\n      canvas.requestRenderAll();\r\n    };\r\n\r\n    const handleModified = () => {\r\n      clearGuides();\r\n      canvas.requestRenderAll();\r\n    };\r\n\r\n    canvas.on('object:moving', handleMoving);\r\n    canvas.on('object:modified', handleModified);\r\n    canvas.on('mouse:up', handleModified);\r\n    return () => {\r\n      canvas.off('object:moving', handleMoving);\r\n      canvas.off('object:modified', handleModified);\r\n      canvas.off('mouse:up', handleModified);\r\n      clearGuides();\r\n    };\r\n  }, [canvas, snapEnabled]);\r\n}\r\n","import { fabric } from 'fabric';\r\n\r\ndeclare module 'fabric/fabric-impl' {\r\n  interface Circle {\r\n    attributes?: {\r\n      number?: string | number;\r\n      price?: string | number;\r\n      category?: string;\r\n      status?: string;\r\n      currencySymbol?: string;\r\n      currencyCode?: string;\r\n      currencyCountry?: string;\r\n    };\r\n    seatNumber?: string | number;\r\n    price?: string | number;\r\n    category?: string;\r\n    status?: string;\r\n    currencySymbol?: string;\r\n    currencyCode?: string;\r\n    currencyCountry?: string;\r\n  }\r\n}\r\n\r\n// Extend Circle (seat) to include attributes object\r\nfabric.Circle.prototype.toObject = (function (toObject) {\r\n  return function (this: fabric.Circle, propertiesToInclude = []) {\r\n    return {\r\n      ...toObject.call(this, propertiesToInclude),\r\n      attributes: {\r\n        number: this.attributes?.number ?? this.seatNumber ?? '',\r\n        price: this.attributes?.price ?? this.price ?? '',\r\n        category: this.attributes?.category ?? this.category ?? '',\r\n        status: this.attributes?.status ?? this.status ?? '',\r\n        currencySymbol:\r\n          this.attributes?.currencySymbol ?? this.currencySymbol ?? '',\r\n        currencyCode: this.attributes?.currencyCode ?? this.currencyCode ?? '',\r\n        currencyCountry:\r\n          this.attributes?.currencyCountry ?? this.currencyCountry ?? '',\r\n      },\r\n    };\r\n  };\r\n})(fabric.Circle.prototype.toObject);\r\n\r\n// Restore attributes on fromObject/initialize\r\nconst origInitialize = fabric.Circle.prototype.initialize;\r\nfabric.Circle.prototype.initialize = function (\r\n  this: fabric.Circle,\r\n  options: any\r\n) {\r\n  origInitialize.call(this, options);\r\n  if (options && options.attributes) {\r\n    this.attributes = { ...options.attributes };\r\n    this.seatNumber = options.attributes.number;\r\n    this.price = options.attributes.price;\r\n    this.category = options.attributes.category;\r\n    this.status = options.attributes.status;\r\n    this.currencySymbol = options.attributes.currencySymbol;\r\n    this.currencyCode = options.attributes.currencyCode;\r\n    this.currencyCountry = options.attributes.currencyCountry;\r\n  }\r\n  return this;\r\n};\r\n","import { useRef, useEffect, useState } from 'react';\nimport { fabric } from 'fabric';\nimport Toolbar from './toolbar';\nimport Sidebar from './sidebar';\nimport { useEventGuiStore } from '@/zustand';\nimport useCanvasSetup from '@/hooks/useCanvasSetup';\nimport useSelectionHandler from '@/hooks/useSelectionHandler';\nimport useMultipleSeatCreator from '@/hooks/useMultipleSeatCreator';\nimport useObjectDeletion from '@/hooks/useObjectDeletion';\nimport useObjectCreator from '@/hooks/useObjectCreator';\nimport useKeyboardShortcuts from '@/hooks/useKeyboardShortcuts';\nimport useUndoRedo from '@/hooks/useUndoRedo';\nimport { useSmartSnap } from '@/hooks/useSmartSnap';\nimport '@/index.css';\nimport '../fabricCustomRegistration';\nimport { CanvasObject, SeatCanvasProps, SeatData } from '@/types/data.types';\nimport Modal, { DefaultSeatModal } from './ui/Modal';\n\nconst defaultStyle = {\n  width: 800,\n  height: 600,\n  backgroundColor: '#f8fafc',\n  showSeatNumbers: true,\n  seatNumberStyle: {\n    fontSize: 14,\n    fill: '#222',\n    fontWeight: 'bold',\n    fontFamily: 'Arial',\n  },\n  seatStyle: {\n    fill: 'transparent',\n    stroke: 'black',\n    strokeWidth: 1,\n    radius: 10,\n  },\n};\n\nconst defaultLabels = {\n  buyButton: 'Buy Seat',\n  cancelButton: 'Cancel',\n  seatNumber: 'Seat Number',\n  category: 'Category',\n  price: 'Price',\n  status: 'Status',\n};\n\nconst SeatPicker: React.FC<SeatCanvasProps> = ({\n  className = '',\n  onChange,\n  onSave,\n  layout,\n  readOnly = false,\n  style = {},\n  renderToolbar,\n  renderSidebar,\n  renderSeatDetails,\n  onSeatClick,\n  onSeatAction,\n  labels = {},\n}) => {\n  const canvasRef = useRef<HTMLCanvasElement | null>(null);\n  const canvasParent = useRef<HTMLDivElement>(null);\n  const bgInputRef = useRef<HTMLInputElement>(null);\n  const { canvas, setCanvas, toolMode, setToolMode, toolAction, snapEnabled } =\n    useEventGuiStore();\n  const [selectedSeat, setSelectedSeat] = useState<SeatData | null>(null);\n  const [bgImage, setBgImage] = useState<string | null>(null);\n  const [bgOpacity] = useState(0.3);\n\n  // Merge default styles with custom styles\n  const mergedStyle = {\n    ...defaultStyle,\n    ...style,\n    seatNumberStyle: {\n      ...defaultStyle.seatNumberStyle,\n      ...style.seatNumberStyle,\n    },\n    seatStyle: {\n      ...defaultStyle.seatStyle,\n      ...style.seatStyle,\n    },\n  };\n\n  // Merge default labels with custom labels\n  const mergedLabels = {\n    ...defaultLabels,\n    ...labels,\n  };\n\n  // Handle background image upload\n  const handleBgImageUpload = (file: File) => {\n    const reader = new FileReader();\n    reader.onload = (e) => {\n      setBgImage(e.target?.result as string);\n      if (canvas && canvas.getElement && canvas.getElement()) {\n        fabric.Image.fromURL(e.target?.result as string, (img) => {\n          img.set({ opacity: bgOpacity });\n\n          // Calculate scale to fit while maintaining aspect ratio\n          const canvasRatio = canvas.width! / canvas.height!;\n          const imgRatio = img.width! / img.height!;\n\n          let scaleX, scaleY;\n          if (imgRatio > canvasRatio) {\n            // Image is wider than canvas\n            scaleX = canvas.width! / img.width!;\n            scaleY = scaleX;\n          } else {\n            // Image is taller than canvas\n            scaleY = canvas.height! / img.height!;\n            scaleX = scaleY;\n          }\n\n          // Center the image\n          const scaledWidth = img.width! * scaleX;\n          const scaledHeight = img.height! * scaleY;\n          const left = (canvas.width! - scaledWidth) / 2;\n          const top = (canvas.height! - scaledHeight) / 2;\n\n          canvas.setBackgroundImage(img, canvas.renderAll.bind(canvas), {\n            scaleX,\n            scaleY,\n            left,\n            top,\n          });\n        });\n      }\n    };\n    reader.readAsDataURL(file);\n  };\n\n  // Remove background image\n  const handleRemoveBgImage = () => {\n    setBgImage(null);\n    if (canvas && canvas.getElement && canvas.getElement()) {\n      canvas.setBackgroundImage(null as any, canvas.renderAll.bind(canvas));\n    }\n  };\n\n  // Keep background image in sync with canvas\n  useEffect(() => {\n    if (bgImage && canvas && canvas.getElement && canvas.getElement()) {\n      fabric.Image.fromURL(bgImage, (img) => {\n        img.set({ opacity: bgOpacity });\n        canvas.setBackgroundImage(img, canvas.renderAll.bind(canvas), {\n          scaleX: canvas.width! / img.width!,\n          scaleY: canvas.height! / img.height!,\n        });\n      });\n    }\n    if (!bgImage && canvas && canvas.getElement && canvas.getElement()) {\n      canvas.setBackgroundImage(null as any, canvas.renderAll.bind(canvas));\n    }\n  }, [bgImage, canvas, bgOpacity]);\n\n  useCanvasSetup(\n    canvasRef,\n    canvasParent,\n    setCanvas,\n    mergedStyle.width,\n    mergedStyle.height,\n    mergedStyle.backgroundColor,\n    !readOnly\n  );\n  useSelectionHandler(canvas);\n  useMultipleSeatCreator(canvas, toolMode, setToolMode);\n  useObjectDeletion(canvas, toolAction);\n  useObjectCreator(canvas, toolMode, setToolMode);\n  if (!readOnly) {\n    useUndoRedo();\n    useKeyboardShortcuts(onSave);\n    useSmartSnap(canvas, snapEnabled);\n  }\n\n  // Load layout if provided\n  useEffect(() => {\n    if (!canvas || !layout) return;\n\n    // Remove background image if present when layout changes\n    setBgImage(null);\n    canvas.setBackgroundImage(null as any, canvas.renderAll.bind(canvas));\n    canvas.clear();\n\n    // Store handler reference so we can remove it\n    let readOnlyMouseDownHandler: ((options: any) => void) | null = null;\n\n    canvas.loadFromJSON(layout, () => {\n      if (readOnly) {\n        // Label each seat by number if enabled\n        if (mergedStyle.showSeatNumbers) {\n          canvas.getObjects('circle').forEach((seat: any) => {\n            // Remove any previous label\n            if (seat.labelObj) {\n              canvas.remove(seat.labelObj);\n              seat.labelObj = null;\n            }\n            const label = new fabric.Text(\n              seat.attributes?.number?.toString() ||\n                seat.seatNumber?.toString() ||\n                '',\n              {\n                left:\n                  (seat.left ?? 0) +\n                  (seat.radius ?? mergedStyle.seatStyle.radius),\n                top:\n                  (seat.top ?? 0) +\n                  (seat.radius ?? mergedStyle.seatStyle.radius),\n                ...mergedStyle.seatNumberStyle,\n                originX: 'center',\n                originY: 'center',\n                selectable: false,\n                evented: false,\n              }\n            );\n            seat.labelObj = label;\n            canvas.add(label);\n            canvas.bringToFront(label);\n          });\n        }\n\n        // Make all objects not selectable/editable, only seats (circles) are clickable\n        canvas.getObjects().forEach((obj: any) => {\n          obj.selectable = false;\n          obj.evented = obj.type === 'circle';\n        });\n        canvas.selection = false;\n\n        // Add click handler for seats (read-only mode only)\n        readOnlyMouseDownHandler = (options) => {\n          if (!options.target || options.target.type !== 'circle') return;\n\n          const seat = options.target as any;\n          const seatData: SeatData = {\n            number: seat.attributes?.number ?? seat.seatNumber ?? '',\n            price: seat.attributes?.price ?? seat.price ?? '',\n            category: seat.attributes?.category ?? seat.category ?? '',\n            status: seat.attributes?.status ?? seat.status ?? '',\n            currencySymbol:\n              seat.attributes?.currencySymbol ?? seat.currencySymbol ?? '',\n            currencyCode:\n              seat.attributes?.currencyCode ?? seat.currencyCode ?? '',\n            currencyCountry:\n              seat.attributes?.currencyCountry ?? seat.currencyCountry ?? '',\n          };\n\n          if (onSeatClick) {\n            onSeatClick(seatData);\n          } else {\n            setSelectedSeat(seatData);\n          }\n        };\n        canvas.on('mouse:down', readOnlyMouseDownHandler);\n      } else {\n        // Remove any previous read-only handler\n        if (readOnlyMouseDownHandler) {\n          canvas.off('mouse:down', readOnlyMouseDownHandler);\n        }\n        // Enable selection and make objects selectable in edit mode\n        canvas.selection = true;\n        canvas.getObjects().forEach((obj: any) => {\n          obj.selectable = true;\n          obj.evented = true;\n        });\n        // Debug log to check object properties\n        console.log(\n          'Edit mode objects:',\n          canvas.getObjects().map((obj) => ({\n            type: obj.type,\n            selectable: obj.selectable,\n            evented: obj.evented,\n          }))\n        );\n      }\n      canvas.renderAll();\n    });\n\n    // Cleanup: always remove the handler when effect cleans up\n    return () => {\n      if (readOnlyMouseDownHandler) {\n        canvas.off('mouse:down', readOnlyMouseDownHandler);\n      }\n    };\n  }, [canvas, layout, readOnly, mergedStyle, onSeatClick]);\n\n  useEffect(() => {\n    if (!canvas || readOnly) return;\n\n    const handleCanvasChange = () => {\n      if (onChange) {\n        const json = {\n          type: 'canvas',\n          ...canvas.toJSON(['customType', 'seatData', 'zoneData']),\n        } as unknown as CanvasObject;\n        onChange(json);\n      }\n    };\n\n    // Listen to all relevant canvas events\n    const events = [\n      'object:modified',\n      'object:added',\n      'object:removed',\n      'object:moving',\n      'object:scaling',\n      'object:rotating',\n      'object:skewing',\n      'path:created',\n      'selection:created',\n      'selection:updated',\n      'selection:cleared',\n    ];\n\n    events.forEach((event) => {\n      canvas.on(event, handleCanvasChange);\n    });\n\n    return () => {\n      events.forEach((event) => {\n        canvas.off(event, handleCanvasChange);\n      });\n    };\n  }, [canvas, onChange, readOnly]);\n\n  const handleSeatAction = (action: string) => {\n    if (selectedSeat) {\n      if (onSeatAction) {\n        onSeatAction(action, selectedSeat);\n      }\n      setSelectedSeat(null);\n    }\n  };\n\n  // Save handler that excludes background image from saved file\n  const handleSave = () => {\n    if (!canvas || !onSave) return;\n    // Temporarily remove background image\n    const currentBg = canvas.backgroundImage;\n    canvas.setBackgroundImage(null as any, canvas.renderAll.bind(canvas), {\n      dirty: false,\n    });\n    const json = {\n      type: 'canvas',\n      ...canvas.toJSON(['customType', 'seatData', 'zoneData']),\n    } as unknown as CanvasObject;\n    // Restore background image\n    if (currentBg) {\n      canvas.setBackgroundImage(currentBg, canvas.renderAll.bind(canvas));\n    }\n    onSave(json);\n  };\n\n  // Default seat details modal\n  const defaultSeatDetails = (\n    <DefaultSeatModal\n      selectedSeat={selectedSeat}\n      setSelectedSeat={setSelectedSeat}\n      mergedLabels={mergedLabels}\n      handleSeatAction={handleSeatAction}\n    />\n  );\n\n  return (\n    <div\n      className={`relative flex h-full w-full flex-col bg-gray-200 ${className}`}\n    >\n      <input\n        type=\"file\"\n        accept=\"image/*\"\n        style={{ display: 'none' }}\n        ref={bgInputRef}\n        onChange={(e) => {\n          if (e.target.files && e.target.files[0]) {\n            handleBgImageUpload(e.target.files[0]);\n          }\n        }}\n      />\n      {!readOnly &&\n        (renderToolbar ? (\n          renderToolbar({\n            onSave: handleSave,\n            onBgLayout: () => {\n              if (bgImage) {\n                handleRemoveBgImage();\n              } else {\n                bgInputRef.current?.click();\n              }\n            },\n          })\n        ) : (\n          <Toolbar\n            onSave={handleSave}\n            onBgLayout={() => {\n              if (bgImage) {\n                handleRemoveBgImage();\n              } else {\n                bgInputRef.current?.click();\n              }\n            }}\n          />\n        ))}\n      <div className=\"flex h-0 w-full flex-1 overflow-hidden pt-12\">\n        <div\n          className=\"m-auto flex flex-1 items-center justify-center overflow-auto bg-gray-100\"\n          ref={canvasParent}\n          style={{\n            width: '100%',\n            height: '100%',\n            maxWidth: mergedStyle.width,\n            maxHeight: mergedStyle.height,\n          }}\n        >\n          <canvas ref={canvasRef} />\n        </div>\n        {!readOnly && (renderSidebar ? renderSidebar() : <Sidebar />)}\n      </div>\n      {/* Only show the default modal if renderSeatDetails is not provided */}\n      {renderSeatDetails\n        ? renderSeatDetails({\n            seat: selectedSeat!,\n            onClose: () => setSelectedSeat(null),\n            onAction: handleSeatAction,\n          })\n        : defaultSeatDetails}\n    </div>\n  );\n};\n\nexport default SeatPicker;\n","import React, { useEffect, useRef, useState } from 'react';\r\nimport { fabric } from 'fabric';\r\nimport Modal from '@/components/ui/Modal';\r\n\r\ninterface SeatDetails {\r\n  number: string | number;\r\n  price: string | number;\r\n  category: string;\r\n  status: string;\r\n  currencySymbol: string;\r\n  currencyCode: string;\r\n  currencyCountry: string;\r\n}\r\n\r\ninterface SeatLayoutRendererProps {\r\n  layout: any; // JSON object exported from the editor\r\n  style?: { width?: number; height?: number; backgroundColor?: string };\r\n}\r\n\r\nconst SeatLayoutRenderer: React.FC<SeatLayoutRendererProps> = ({\r\n  layout,\r\n  style = { width: 800, height: 600, backgroundColor: '#f8fafc' },\r\n}) => {\r\n  const canvasRef = useRef<HTMLCanvasElement | null>(null);\r\n  const [canvas, setCanvas] = useState<fabric.Canvas | null>(null);\r\n  const [selectedSeat, setSelectedSeat] = useState<SeatDetails | null>(null);\r\n\r\n  useEffect(() => {\r\n    if (!canvasRef.current) return;\r\n    const c = new fabric.Canvas(canvasRef.current, {\r\n      width: style.width,\r\n      height: style.height,\r\n      backgroundColor: style.backgroundColor,\r\n      selection: false,\r\n    });\r\n    setCanvas(c);\r\n    return () => {\r\n      c.dispose();\r\n    };\r\n    // eslint-disable-next-line\r\n  }, [style]);\r\n\r\n  useEffect(() => {\r\n    if (!canvas || !layout) return;\r\n    canvas.clear();\r\n    canvas.loadFromJSON(layout, () => {\r\n      // Label each seat by number\r\n      canvas.getObjects('circle').forEach((seat: any) => {\r\n        // Remove any previous label\r\n        if (seat.labelObj) {\r\n          canvas.remove(seat.labelObj);\r\n          seat.labelObj = null;\r\n        }\r\n        const label = new fabric.Text(\r\n          seat.attributes?.number?.toString() ||\r\n            seat.seatNumber?.toString() ||\r\n            '',\r\n          {\r\n            left: (seat.left ?? 0) + (seat.radius ?? 0),\r\n            top: (seat.top ?? 0) + (seat.radius ?? 0),\r\n            fontSize: 14,\r\n            fill: '#222',\r\n            originX: 'center',\r\n            originY: 'center',\r\n            selectable: false,\r\n            evented: false,\r\n            fontWeight: 'bold',\r\n          }\r\n        );\r\n        seat.labelObj = label;\r\n        canvas.add(label);\r\n        canvas.bringToFront(label);\r\n      });\r\n\r\n      // Make all objects not selectable/editable, only seats (circles) are clickable\r\n      canvas.getObjects().forEach((obj: any) => {\r\n        obj.selectable = false;\r\n        obj.evented = obj.type === 'circle';\r\n      });\r\n      canvas.selection = false;\r\n\r\n      // Add click handler for seats\r\n      canvas.on('mouse:down', (options) => {\r\n        if (!options.target || options.target.type !== 'circle') return;\r\n        const seat = options.target as any;\r\n        setSelectedSeat({\r\n          number: seat.attributes?.number ?? seat.seatNumber ?? '',\r\n          price: seat.attributes?.price ?? seat.price ?? '',\r\n          category: seat.attributes?.category ?? seat.category ?? '',\r\n          status: seat.attributes?.status ?? seat.status ?? '',\r\n          currencySymbol:\r\n            seat.attributes?.currencySymbol ?? seat.currencySymbol ?? '',\r\n          currencyCode:\r\n            seat.attributes?.currencyCode ?? seat.currencyCode ?? '',\r\n          currencyCountry:\r\n            seat.attributes?.currencyCountry ?? seat.currencyCountry ?? '',\r\n        });\r\n      });\r\n\r\n      canvas.renderAll();\r\n    });\r\n  }, [canvas, layout]);\r\n\r\n  const handleBuy = () => {\r\n    // TODO: Implement buy functionality\r\n    setSelectedSeat(null);\r\n  };\r\n\r\n  return (\r\n    <div className=\"rounded-lg border bg-white p-4 shadow\">\r\n      <canvas ref={canvasRef} />\r\n      <Modal\r\n        open={!!selectedSeat}\r\n        onClose={() => setSelectedSeat(null)}\r\n        title=\"Seat Details\"\r\n      >\r\n        {selectedSeat && (\r\n          <div className=\"space-y-4\">\r\n            <div className=\"grid grid-cols-2 gap-4\">\r\n              <div>\r\n                <label className=\"text-sm font-medium text-gray-600\">\r\n                  Seat Number\r\n                </label>\r\n                <p className=\"text-lg font-semibold\">{selectedSeat.number}</p>\r\n              </div>\r\n              <div>\r\n                <label className=\"text-sm font-medium text-gray-600\">\r\n                  Category\r\n                </label>\r\n                <p className=\"text-lg font-semibold\">{selectedSeat.category}</p>\r\n              </div>\r\n              <div>\r\n                <label className=\"text-sm font-medium text-gray-600\">\r\n                  Price\r\n                </label>\r\n                <p className=\"text-lg font-semibold\">\r\n                  {selectedSeat.currencySymbol}\r\n                  {selectedSeat.price}{' '}\r\n                  <span className=\"text-sm text-gray-500\">\r\n                    ({selectedSeat.currencyCode})\r\n                  </span>\r\n                </p>\r\n              </div>\r\n              <div>\r\n                <label className=\"text-sm font-medium text-gray-600\">\r\n                  Status\r\n                </label>\r\n                <p className=\"text-lg font-semibold\">{selectedSeat.status}</p>\r\n              </div>\r\n            </div>\r\n            <div className=\"mt-6 flex gap-3\">\r\n              <button\r\n                onClick={handleBuy}\r\n                className=\"flex-1 rounded-md bg-gray-700 px-4 py-2 text-sm font-semibold text-white shadow-sm transition-colors hover:bg-gray-800 focus:outline-none focus:ring-2 focus:ring-gray-400\"\r\n              >\r\n                Buy Seat\r\n              </button>\r\n              <button\r\n                onClick={() => setSelectedSeat(null)}\r\n                className=\"flex-1 rounded-md border border-gray-300 bg-white px-4 py-2 text-sm font-semibold text-gray-700 shadow-sm transition-colors hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-gray-400\"\r\n              >\r\n                Cancel\r\n              </button>\r\n            </div>\r\n          </div>\r\n        )}\r\n      </Modal>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default SeatLayoutRenderer;\r\n"]}