@zonetrix/viewer 2.6.0 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("react/jsx-runtime"),e=require("react"),L=require("react-konva");function pt(n){const[i,d]=e.useState(null),[r,b]=e.useState(!1),[S,x]=e.useState(null),v=async()=>{if(n){b(!0),x(null);try{const y=await fetch(n);if(!y.ok)throw new Error(`Failed to fetch config: ${y.statusText}`);const a=await y.json();d(a)}catch(y){const a=y instanceof Error?y:new Error("Unknown error occurred");x(a),console.error("Failed to fetch seat map config:",a)}finally{b(!1)}}};return e.useEffect(()=>{v()},[n]),{config:i,loading:r,error:S,refetch:v}}function gt(n){const[i,d]=e.useState({width:0,height:0});return e.useEffect(()=>{const r=n.current;if(!r)return;const{width:b,height:S}=r.getBoundingClientRect();b>0&&S>0&&d({width:b,height:S});const x=new ResizeObserver(v=>{const y=v[0];if(!y)return;const{width:a,height:s}=y.contentRect;a>0&&s>0&&d(g=>g.width===a&&g.height===s?g:{width:a,height:s})});return x.observe(r),()=>{x.disconnect()}},[n]),i}function ft(n,i){return Math.sqrt(Math.pow(i.x-n.x,2)+Math.pow(i.y-n.y,2))}function xt(n,i){return{x:(n.x+i.x)/2,y:(n.y+i.y)/2}}function yt(n,i){const d=e.useRef(null),r=e.useRef(null),b=e.useRef(1);e.useEffect(()=>{const S=n.current;if(!S||!i.enabled)return;const x=S.container(),v=s=>{if(s.touches.length===2){s.preventDefault();const g={x:s.touches[0].clientX,y:s.touches[0].clientY},u={x:s.touches[1].clientX,y:s.touches[1].clientY};d.current=ft(g,u),r.current=xt(g,u),b.current=i.currentScale}},y=s=>{if(s.touches.length!==2)return;s.preventDefault();const g={x:s.touches[0].clientX,y:s.touches[0].clientY},u={x:s.touches[1].clientX,y:s.touches[1].clientY},M=ft(g,u),C=xt(g,u);if(d.current!==null&&r.current!==null){const R=M/d.current,T=Math.min(Math.max(i.currentScale*R,i.minScale),i.maxScale),V=x.getBoundingClientRect(),_=C.x-V.left,G=C.y-V.top,U=i.currentScale,P={x:(_-i.currentPosition.x)/U,y:(G-i.currentPosition.y)/U},W=C.x-r.current.x,ot=C.y-r.current.y,st={x:_-P.x*T+W,y:G-P.y*T+ot};i.onScaleChange(T,st),d.current=M,r.current=C}},a=s=>{s.touches.length<2&&(d.current=null,r.current=null)};return x.addEventListener("touchstart",v,{passive:!1}),x.addEventListener("touchmove",y,{passive:!1}),x.addEventListener("touchend",a),()=>{x.removeEventListener("touchstart",v),x.removeEventListener("touchmove",y),x.removeEventListener("touchend",a)}},[n,i])}const mt={canvasBackground:"#1a1a1a",stageColor:"#808080",seatAvailable:"#2C2B30",seatReserved:"#FCEA00",seatSelected:"#3A7DE5",seatUnavailable:"#6b7280",seatHidden:"#4a4a4a",gridLines:"#404040",currency:"KD"},bt=e.memo(({seat:n,state:i,colors:d,onClick:r,onMouseEnter:b,onMouseLeave:S})=>{const y={available:d.seatAvailable,reserved:d.seatReserved,selected:d.seatSelected,unavailable:d.seatUnavailable,hidden:d.seatHidden}[i],a=i==="available"||i==="selected",s=e.useCallback(()=>{a&&r(n)},[n,r,a]),g=e.useCallback(C=>{b(n,C);const R=C.target.getStage();R&&a&&(R.container().style.cursor="pointer")},[n,b,a]),u=e.useCallback(C=>{S();const R=C.target.getStage();R&&(R.container().style.cursor="grab")},[S]),M={x:n.position.x,y:n.position.y,fill:y,stroke:"#ffffff",strokeWidth:1,onClick:s,onTap:s,onMouseEnter:g,onMouseLeave:u};return n.shape==="circle"?o.jsx(L.Circle,{...M,radius:12}):o.jsx(L.Rect,{...M,width:24,height:24,offsetX:12,offsetY:12,cornerRadius:n.shape==="square"?0:4})});bt.displayName="ViewerSeat";const St=e.memo(({stage:n,stageColor:i})=>o.jsxs(L.Group,{x:n.position.x,y:n.position.y,children:[o.jsx(L.Rect,{width:n.config.width,height:n.config.height,fill:i+"80",stroke:"#ffffff",strokeWidth:2,cornerRadius:10}),o.jsx(L.Text,{text:n.config.label,x:0,y:0,width:n.config.width,height:n.config.height,fontSize:24,fontStyle:"bold",fill:"#ffffff",align:"center",verticalAlign:"middle"})]}));St.displayName="ViewerStage";const vt=e.memo(({floors:n,currentFloorId:i,onFloorChange:d,showAllOption:r,allLabel:b,position:S,className:x})=>{const v=e.useMemo(()=>[...n].sort((u,M)=>u.order-M.order),[n]),a={position:"absolute",display:"flex",alignItems:"center",gap:"8px",padding:"8px 12px",backgroundColor:"rgba(26, 26, 26, 0.95)",borderRadius:"8px",margin:"12px",zIndex:10,...{"top-left":{top:0,left:0},"top-right":{top:0,right:0},"bottom-left":{bottom:0,left:0},"bottom-right":{bottom:0,right:0}}[S]},s={padding:"10px 16px",fontSize:"14px",fontWeight:500,border:"1px solid #444",borderRadius:"6px",backgroundColor:"transparent",color:"#fff",cursor:"pointer",transition:"all 0.2s ease",minHeight:"44px",touchAction:"manipulation"},g={...s,backgroundColor:"#3A7DE5",borderColor:"#3A7DE5"};return o.jsxs("div",{className:x,style:a,children:[r&&o.jsx("button",{type:"button",onClick:()=>d(null),style:i===null?g:s,children:b}),v.map(u=>o.jsx("button",{type:"button",onClick:()=>d(u.id),style:i===u.id?g:s,children:u.name},u.id))]})});vt.displayName="FloorSelectorBar";const wt=e.memo(({scale:n,minScale:i,maxScale:d,onZoomIn:r,onZoomOut:b,position:S,className:x})=>{const y={position:"absolute",display:"flex",flexDirection:"column",gap:"4px",padding:"8px",backgroundColor:"rgba(26, 26, 26, 0.95)",borderRadius:"8px",margin:"12px",zIndex:10,...{"top-left":{top:0,left:0},"top-right":{top:0,right:0},"bottom-left":{bottom:0,left:0},"bottom-right":{bottom:0,right:0}}[S]},a={width:"44px",height:"44px",minWidth:"44px",minHeight:"44px",fontSize:"22px",fontWeight:"bold",border:"1px solid #444",borderRadius:"6px",backgroundColor:"transparent",color:"#fff",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",transition:"all 0.2s ease",touchAction:"manipulation"},s={...a,opacity:.4,cursor:"not-allowed"},g=n<d,u=n>i;return o.jsxs("div",{className:x,style:y,children:[o.jsx("button",{type:"button",onClick:r,disabled:!g,style:g?a:s,title:"Zoom In",children:"+"}),o.jsx("button",{type:"button",onClick:b,disabled:!u,style:u?a:s,title:"Zoom Out",children:"−"})]})});wt.displayName="ZoomControls";const Ct=e.memo(({visible:n,x:i,y:d,seat:r,currency:b,state:S})=>{if(!n||!r)return null;const x=r.seatNumber||(r.rowLabel&&r.columnLabel?`${r.rowLabel}-${r.columnLabel}`:"N/A"),v={position:"fixed",left:`${i+15}px`,top:`${d+15}px`,zIndex:1e3,pointerEvents:"none"},y={backgroundColor:"rgba(26, 26, 26, 0.95)",color:"#fff",border:"1px solid #444",borderRadius:"8px",padding:"8px 12px",fontSize:"13px",boxShadow:"0 4px 12px rgba(0, 0, 0, 0.3)",minWidth:"140px"},a={color:"#9ca3af",marginRight:"4px"},s={fontWeight:600},g={color:"#4ade80",fontWeight:600},u={fontSize:"11px",color:"#6b7280",textTransform:"capitalize",marginTop:"4px"};return o.jsx("div",{style:v,children:o.jsxs("div",{style:y,children:[r.sectionName&&o.jsxs("div",{style:{marginBottom:"4px"},children:[o.jsx("span",{style:a,children:"Section:"}),o.jsx("span",{style:{...s,color:"#3b82f6"},children:r.sectionName})]}),o.jsxs("div",{style:{marginBottom:"4px"},children:[o.jsx("span",{style:a,children:"Seat:"}),o.jsx("span",{style:s,children:x})]}),r.price!==void 0&&r.price>0&&o.jsxs("div",{style:{marginBottom:"4px"},children:[o.jsx("span",{style:a,children:"Price:"}),o.jsxs("span",{style:g,children:[b," ",r.price.toFixed(2)]})]}),o.jsxs("div",{style:u,children:["Status: ",S]})]})})});Ct.displayName="SeatTooltip";const Ut=({config:n,configUrl:i,floorId:d,onFloorChange:r,reservedSeats:b=[],unavailableSeats:S=[],selectedSeats:x,onSeatSelect:v,onSeatDeselect:y,onSelectionChange:a,colorOverrides:s,showTooltip:g=!0,zoomEnabled:u=!0,className:M="",onConfigLoad:C,onError:R,showFloorSelector:T,floorSelectorPosition:V="top-left",floorSelectorClassName:_,showAllFloorsOption:G=!0,allFloorsLabel:U="All",fitToView:P=!0,fitPadding:W=40,showZoomControls:ot=!0,zoomControlsPosition:st="bottom-right",zoomControlsClassName:jt,maxZoom:I=3,zoomStep:Z=.25,touchEnabled:Mt=!0})=>{const it=e.useRef(null),ut=e.useRef(null),w=gt(ut),[X,ht]=e.useState(new Set),[j,A]=e.useState(1),[k,D]=e.useState({x:0,y:0}),[kt,Rt]=e.useState(null),[Et,It]=e.useState(1),K=e.useRef({width:0,height:0}),[B,dt]=e.useState({visible:!1,x:0,y:0,seat:null,state:"available"}),{config:Nt,loading:Lt,error:z}=pt(i),l=n||Nt,rt=d!==void 0,E=rt?d||null:kt,J=x!==void 0,Dt=e.useCallback(t=>{rt||Rt(t),r?.(t)},[rt,r]),ct=l?.floors||[],Tt=T!==void 0?T:ct.length>1,Q=e.useMemo(()=>l?{...l.colors,...s}:{...mt,...s},[l,s]),Y=e.useMemo(()=>{if(!l)return[];let t=l.seats.filter(c=>c.state!=="hidden");return E&&(t=t.filter(c=>c.floorId===E||!c.floorId&&E==="floor_default")),t},[l,E]),tt=e.useMemo(()=>l?.stages?E?l.stages.filter(t=>t.floorId===E||!t.floorId&&E==="floor_default"):l.stages:[],[l,E]),N=e.useMemo(()=>{if(!l||Y.length===0&&tt.length===0)return null;const t=12;let c=1/0,f=1/0,h=-1/0,p=-1/0;return Y.forEach(m=>{c=Math.min(c,m.position.x-t),f=Math.min(f,m.position.y-t),h=Math.max(h,m.position.x+t),p=Math.max(p,m.position.y+t)}),tt.forEach(m=>{c=Math.min(c,m.position.x),f=Math.min(f,m.position.y),h=Math.max(h,m.position.x+(m.config?.width||200)),p=Math.max(p,m.position.y+(m.config?.height||100))}),{minX:c,minY:f,maxX:h,maxY:p,width:h-c,height:p-f}},[l,Y,tt]);e.useEffect(()=>{if(!P||!l||!N||w.width===0||w.height===0)return;const t=Math.abs(w.width-K.current.width),c=Math.abs(w.height-K.current.height);if(!(K.current.width===0)&&t<10&&c<10)return;K.current=w;const h=w.width,p=w.height,m=h-W*2,q=p-W*2,et=m/N.width,lt=q/N.height,nt=Math.min(et,lt,I),Ht=N.minX+N.width/2,Ot=N.minY+N.height/2,qt=h/2,Vt=p/2,_t=qt-Ht*nt,Gt=Vt-Ot*nt;A(nt),D({x:_t,y:Gt}),It(nt)},[P,l,N,W,I,w,E]);const $=e.useMemo(()=>{const t=new Set(b),c=new Set(S);return{reserved:t,unavailable:c}},[b,S]),at=e.useMemo(()=>x?new Set(x):null,[x]),H=e.useCallback(t=>{const c=t.id,f=t.seatNumber||"";return $.unavailable.has(c)||$.unavailable.has(f)?"unavailable":$.reserved.has(c)||$.reserved.has(f)?"reserved":X.has(c)?"selected":t.state},[$,X]);e.useEffect(()=>{l&&C&&C(l)},[l,C]),e.useEffect(()=>{z&&R&&R(z)},[z,R]),e.useEffect(()=>{J&&at&&ht(at)},[J,at]);const Xt=e.useCallback(t=>{const c=H(t);if(c!=="available"&&c!=="selected")return;const f=X.has(t.id);J||ht(h=>{const p=new Set(h);return f?p.delete(t.id):p.add(t.id),p}),f?y?.(t):(v?.(t),v||console.log("Seat selected:",t))},[H,X,J,v,y]),O=e.useMemo(()=>l?Y.filter(t=>X.has(t.id)):[],[Y,X]);e.useEffect(()=>{a?.(O)},[O,a]);const F=Et,Yt=e.useCallback(()=>{if(!u)return;const t=Math.min(j+Z,I);if(t!==j){const c=w.width||l?.canvas.width||800,f=w.height||l?.canvas.height||600,h=c/2,p=f/2,m={x:(h-k.x)/j,y:(p-k.y)/j};A(t),D({x:h-m.x*t,y:p-m.y*t})}},[u,j,Z,I,w,l,k]),Ft=e.useCallback(()=>{if(!u)return;const t=Math.max(j-Z,F);if(t!==j){const c=w.width||l?.canvas.width||800,f=w.height||l?.canvas.height||600,h=c/2,p=f/2,m={x:(h-k.x)/j,y:(p-k.y)/j};A(t),D({x:h-m.x*t,y:p-m.y*t})}},[u,j,Z,F,w,l,k]),Pt=e.useCallback(t=>{D({x:t.target.x(),y:t.target.y()})},[]),Wt=e.useCallback(t=>{if(!u)return;t.evt.preventDefault();const c=it.current;if(!c)return;const f=c.scaleX(),h=c.getPointerPosition();if(!h)return;const p=1.1,m=t.evt.deltaY>0?f/p:f*p,q=Math.min(Math.max(m,F),I),et={x:(h.x-k.x)/f,y:(h.y-k.y)/f},lt={x:h.x-et.x*q,y:h.y-et.y*q};A(q),D(lt)},[u,k,F,I]);yt(it,{enabled:Mt&&u,minScale:F,maxScale:I,currentScale:j,currentPosition:k,onScaleChange:(t,c)=>{A(t),D(c)},onPositionChange:t=>{D(t)}});const At=e.useCallback((t,c)=>{if(!g)return;const f=c.target.getStage();if(!f)return;const h=f.getPointerPosition();if(!h)return;const p=f.container().getBoundingClientRect();dt({visible:!0,x:p.left+h.x,y:p.top+h.y,seat:t,state:H(t)})},[g,H]),Bt=e.useCallback(()=>{dt(t=>({...t,visible:!1}))},[]);if(Lt)return o.jsx("div",{className:`flex items-center justify-center h-full ${M}`,children:o.jsx("p",{children:"Loading seat map..."})});if(z)return o.jsx("div",{className:`flex items-center justify-center h-full ${M}`,children:o.jsxs("p",{className:"text-red-500",children:["Error loading seat map: ",z.message]})});if(!l)return o.jsx("div",{className:`flex items-center justify-center h-full ${M}`,children:o.jsx("p",{children:"No configuration provided"})});const zt=w.width||l.canvas.width,$t=w.height||l.canvas.height;return o.jsxs("div",{ref:ut,className:`relative ${M}`,style:{width:"100%",height:"100%"},children:[Tt&&ct.length>0&&o.jsx(vt,{floors:ct,currentFloorId:E,onFloorChange:Dt,showAllOption:G,allLabel:U,position:V,className:_}),o.jsxs(L.Stage,{ref:it,width:zt,height:$t,scaleX:j,scaleY:j,x:k.x,y:k.y,draggable:!0,onDragEnd:Pt,onWheel:Wt,style:{backgroundColor:l.canvas.backgroundColor,cursor:"grab"},children:[o.jsx(L.Layer,{listening:!1,children:tt.map(t=>o.jsx(St,{stage:t,stageColor:Q.stageColor},t.id))}),o.jsx(L.Layer,{children:Y.map(t=>o.jsx(bt,{seat:t,state:H(t),colors:Q,onClick:Xt,onMouseEnter:At,onMouseLeave:Bt},t.id))})]}),g&&o.jsx(Ct,{visible:B.visible,x:B.x,y:B.y,seat:B.seat,currency:Q.currency,state:B.state}),ot&&u&&o.jsx(wt,{scale:j,minScale:F,maxScale:I,onZoomIn:Yt,onZoomOut:Ft,position:st,className:jt}),O.length>0&&o.jsxs("div",{className:"absolute top-4 right-4 bg-white dark:bg-gray-800 p-4 rounded shadow-lg",children:[o.jsxs("h3",{className:"font-semibold mb-2",children:["Selected Seats (",O.length,")"]}),o.jsx("div",{className:"max-h-48 overflow-y-auto space-y-1",children:O.map(t=>o.jsxs("div",{className:"text-sm",children:[t.seatNumber,t.price&&` - ${Q.currency} ${t.price.toFixed(2)}`]},t.id))})]})]})};exports.DEFAULT_COLORS=mt;exports.SeatMapViewer=Ut;exports.useConfigFetcher=pt;exports.useContainerSize=gt;exports.useTouchGestures=yt;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("react/jsx-runtime"),e=require("react"),I=require("react-konva");function pt(n){const[r,u]=e.useState(null),[i,m]=e.useState(!1),[b,f]=e.useState(null),v=async()=>{if(n){m(!0),f(null);try{const y=await fetch(n);if(!y.ok)throw new Error(`Failed to fetch config: ${y.statusText}`);const a=await y.json();u(a)}catch(y){const a=y instanceof Error?y:new Error("Unknown error occurred");f(a),console.error("Failed to fetch seat map config:",a)}finally{m(!1)}}};return e.useEffect(()=>{v()},[n]),{config:r,loading:i,error:b,refetch:v}}function gt(n){const[r,u]=e.useState({width:0,height:0});return e.useEffect(()=>{const i=n.current;if(!i)return;const{width:m,height:b}=i.getBoundingClientRect();m>0&&b>0&&u({width:m,height:b});const f=new ResizeObserver(v=>{const y=v[0];if(!y)return;const{width:a,height:s}=y.contentRect;a>0&&s>0&&u(g=>g.width===a&&g.height===s?g:{width:a,height:s})});return f.observe(i),()=>{f.disconnect()}},[n]),r}function ft(n,r){return Math.sqrt(Math.pow(r.x-n.x,2)+Math.pow(r.y-n.y,2))}function xt(n,r){return{x:(n.x+r.x)/2,y:(n.y+r.y)/2}}function yt(n,r){const u=e.useRef(null),i=e.useRef(null),m=e.useRef(1);e.useEffect(()=>{const b=n.current;if(!b||!r.enabled)return;const f=b.container(),v=s=>{if(s.touches.length===2){s.preventDefault();const g={x:s.touches[0].clientX,y:s.touches[0].clientY},h={x:s.touches[1].clientX,y:s.touches[1].clientY};u.current=ft(g,h),i.current=xt(g,h),m.current=r.currentScale}},y=s=>{if(s.touches.length!==2)return;s.preventDefault();const g={x:s.touches[0].clientX,y:s.touches[0].clientY},h={x:s.touches[1].clientX,y:s.touches[1].clientY},M=ft(g,h),C=xt(g,h);if(u.current!==null&&i.current!==null){const R=M/u.current,D=Math.min(Math.max(r.currentScale*R,r.minScale),r.maxScale),V=f.getBoundingClientRect(),_=C.x-V.left,G=C.y-V.top,U=r.currentScale,P={x:(_-r.currentPosition.x)/U,y:(G-r.currentPosition.y)/U},W=C.x-i.current.x,ot=C.y-i.current.y,it={x:_-P.x*D+W,y:G-P.y*D+ot};r.onScaleChange(D,it),u.current=M,i.current=C}},a=s=>{s.touches.length<2&&(u.current=null,i.current=null)};return f.addEventListener("touchstart",v,{passive:!1}),f.addEventListener("touchmove",y,{passive:!1}),f.addEventListener("touchend",a),()=>{f.removeEventListener("touchstart",v),f.removeEventListener("touchmove",y),f.removeEventListener("touchend",a)}},[n,r])}const mt={canvasBackground:"#1a1a1a",stageColor:"#808080",seatAvailable:"#2C2B30",seatReserved:"#FCEA00",seatSelected:"#3A7DE5",seatUnavailable:"#6b7280",seatHidden:"#4a4a4a",gridLines:"#404040",currency:"KD"},bt=e.memo(({seat:n,state:r,colors:u,onClick:i,onMouseEnter:m,onMouseLeave:b})=>{const y={available:u.seatAvailable,reserved:u.seatReserved,selected:u.seatSelected,unavailable:u.seatUnavailable,hidden:u.seatHidden}[r],a=r==="available"||r==="selected",s=e.useCallback(()=>{a&&i(n)},[n,i,a]),g=e.useCallback(C=>{m(n,C);const R=C.target.getStage();R&&a&&(R.container().style.cursor="pointer")},[n,m,a]),h=e.useCallback(C=>{b();const R=C.target.getStage();R&&(R.container().style.cursor="grab")},[b]),M={x:n.position.x,y:n.position.y,fill:y,stroke:"#ffffff",strokeWidth:1,onClick:s,onTap:s,onMouseEnter:g,onMouseLeave:h};return n.shape==="circle"?o.jsx(I.Circle,{...M,radius:12}):o.jsx(I.Rect,{...M,width:24,height:24,offsetX:12,offsetY:12,cornerRadius:n.shape==="square"?0:4})});bt.displayName="ViewerSeat";const St=e.memo(({stage:n,stageColor:r})=>{const u=b=>({stage:"🎭",table:"⬜",wall:"▬",barrier:"🛡️","dj-booth":"🎵",bar:"🍷","entry-exit":"🚪",custom:"➕"})[b||"stage"]||"🎭",i=n.config.color||r,m=u(n.config.objectType);return o.jsxs(I.Group,{x:n.position.x,y:n.position.y,rotation:n.config.rotation||0,children:[o.jsx(I.Rect,{width:n.config.width,height:n.config.height,fill:i+"80",stroke:"#ffffff",strokeWidth:2,cornerRadius:10}),o.jsx(I.Text,{text:m,x:0,y:0,width:n.config.width,height:n.config.height*.4,fontSize:32,fill:"#ffffff",align:"center",verticalAlign:"middle"}),o.jsx(I.Text,{text:n.config.label,x:0,y:n.config.height*.4,width:n.config.width,height:n.config.height*.6,fontSize:20,fontStyle:"bold",fill:"#ffffff",align:"center",verticalAlign:"middle"})]})});St.displayName="ViewerStage";const vt=e.memo(({floors:n,currentFloorId:r,onFloorChange:u,showAllOption:i,allLabel:m,position:b,className:f})=>{const v=e.useMemo(()=>[...n].sort((h,M)=>h.order-M.order),[n]),a={position:"absolute",display:"flex",alignItems:"center",gap:"8px",padding:"8px 12px",backgroundColor:"rgba(26, 26, 26, 0.95)",borderRadius:"8px",margin:"12px",zIndex:10,...{"top-left":{top:0,left:0},"top-right":{top:0,right:0},"bottom-left":{bottom:0,left:0},"bottom-right":{bottom:0,right:0}}[b]},s={padding:"10px 16px",fontSize:"14px",fontWeight:500,border:"1px solid #444",borderRadius:"6px",backgroundColor:"transparent",color:"#fff",cursor:"pointer",transition:"all 0.2s ease",minHeight:"44px",touchAction:"manipulation"},g={...s,backgroundColor:"#3A7DE5",borderColor:"#3A7DE5"};return o.jsxs("div",{className:f,style:a,children:[i&&o.jsx("button",{type:"button",onClick:()=>u(null),style:r===null?g:s,children:m}),v.map(h=>o.jsx("button",{type:"button",onClick:()=>u(h.id),style:r===h.id?g:s,children:h.name},h.id))]})});vt.displayName="FloorSelectorBar";const wt=e.memo(({scale:n,minScale:r,maxScale:u,onZoomIn:i,onZoomOut:m,position:b,className:f})=>{const y={position:"absolute",display:"flex",flexDirection:"column",gap:"4px",padding:"8px",backgroundColor:"rgba(26, 26, 26, 0.95)",borderRadius:"8px",margin:"12px",zIndex:10,...{"top-left":{top:0,left:0},"top-right":{top:0,right:0},"bottom-left":{bottom:0,left:0},"bottom-right":{bottom:0,right:0}}[b]},a={width:"44px",height:"44px",minWidth:"44px",minHeight:"44px",fontSize:"22px",fontWeight:"bold",border:"1px solid #444",borderRadius:"6px",backgroundColor:"transparent",color:"#fff",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",transition:"all 0.2s ease",touchAction:"manipulation"},s={...a,opacity:.4,cursor:"not-allowed"},g=n<u,h=n>r;return o.jsxs("div",{className:f,style:y,children:[o.jsx("button",{type:"button",onClick:i,disabled:!g,style:g?a:s,title:"Zoom In",children:"+"}),o.jsx("button",{type:"button",onClick:m,disabled:!h,style:h?a:s,title:"Zoom Out",children:"−"})]})});wt.displayName="ZoomControls";const Ct=e.memo(({visible:n,x:r,y:u,seat:i,currency:m,state:b})=>{if(!n||!i)return null;const f=i.seatNumber||(i.rowLabel&&i.columnLabel?`${i.rowLabel}-${i.columnLabel}`:"N/A"),v={position:"fixed",left:`${r+15}px`,top:`${u+15}px`,zIndex:1e3,pointerEvents:"none"},y={backgroundColor:"rgba(26, 26, 26, 0.95)",color:"#fff",border:"1px solid #444",borderRadius:"8px",padding:"8px 12px",fontSize:"13px",boxShadow:"0 4px 12px rgba(0, 0, 0, 0.3)",minWidth:"140px"},a={color:"#9ca3af",marginRight:"4px"},s={fontWeight:600},g={color:"#4ade80",fontWeight:600},h={fontSize:"11px",color:"#6b7280",textTransform:"capitalize",marginTop:"4px"};return o.jsx("div",{style:v,children:o.jsxs("div",{style:y,children:[i.sectionName&&o.jsxs("div",{style:{marginBottom:"4px"},children:[o.jsx("span",{style:a,children:"Section:"}),o.jsx("span",{style:{...s,color:"#3b82f6"},children:i.sectionName})]}),o.jsxs("div",{style:{marginBottom:"4px"},children:[o.jsx("span",{style:a,children:"Seat:"}),o.jsx("span",{style:s,children:f})]}),i.price!==void 0&&i.price>0&&o.jsxs("div",{style:{marginBottom:"4px"},children:[o.jsx("span",{style:a,children:"Price:"}),o.jsxs("span",{style:g,children:[m," ",i.price.toFixed(2)]})]}),o.jsxs("div",{style:h,children:["Status: ",b]})]})})});Ct.displayName="SeatTooltip";const Ut=({config:n,configUrl:r,floorId:u,onFloorChange:i,reservedSeats:m=[],unavailableSeats:b=[],selectedSeats:f,onSeatSelect:v,onSeatDeselect:y,onSelectionChange:a,colorOverrides:s,showTooltip:g=!0,zoomEnabled:h=!0,className:M="",onConfigLoad:C,onError:R,showFloorSelector:D,floorSelectorPosition:V="top-left",floorSelectorClassName:_,showAllFloorsOption:G=!0,allFloorsLabel:U="All",fitToView:P=!0,fitPadding:W=40,showZoomControls:ot=!0,zoomControlsPosition:it="bottom-right",zoomControlsClassName:jt,maxZoom:N=3,zoomStep:Z=.25,touchEnabled:Mt=!0})=>{const st=e.useRef(null),ut=e.useRef(null),w=gt(ut),[X,ht]=e.useState(new Set),[j,A]=e.useState(1),[k,T]=e.useState({x:0,y:0}),[kt,Rt]=e.useState(null),[Et,It]=e.useState(1),K=e.useRef({width:0,height:0}),[z,dt]=e.useState({visible:!1,x:0,y:0,seat:null,state:"available"}),{config:Nt,loading:Lt,error:B}=pt(r),l=n||Nt,rt=u!==void 0,E=rt?u||null:kt,J=f!==void 0,Tt=e.useCallback(t=>{rt||Rt(t),i?.(t)},[rt,i]),ct=l?.floors||[],Dt=D!==void 0?D:ct.length>1,Q=e.useMemo(()=>l?{...l.colors,...s}:{...mt,...s},[l,s]),Y=e.useMemo(()=>{if(!l)return[];let t=l.seats.filter(c=>c.state!=="hidden");return E&&(t=t.filter(c=>c.floorId===E||!c.floorId&&E==="floor_default")),t},[l,E]),tt=e.useMemo(()=>l?.stages?E?l.stages.filter(t=>t.floorId===E||!t.floorId&&E==="floor_default"):l.stages:[],[l,E]),L=e.useMemo(()=>{if(!l||Y.length===0&&tt.length===0)return null;const t=12;let c=1/0,x=1/0,d=-1/0,p=-1/0;return Y.forEach(S=>{c=Math.min(c,S.position.x-t),x=Math.min(x,S.position.y-t),d=Math.max(d,S.position.x+t),p=Math.max(p,S.position.y+t)}),tt.forEach(S=>{c=Math.min(c,S.position.x),x=Math.min(x,S.position.y),d=Math.max(d,S.position.x+(S.config?.width||200)),p=Math.max(p,S.position.y+(S.config?.height||100))}),{minX:c,minY:x,maxX:d,maxY:p,width:d-c,height:p-x}},[l,Y,tt]);e.useEffect(()=>{if(!P||!l||!L||w.width===0||w.height===0)return;const t=Math.abs(w.width-K.current.width),c=Math.abs(w.height-K.current.height);if(!(K.current.width===0)&&t<10&&c<10)return;K.current=w;const d=w.width,p=w.height,S=d-W*2,q=p-W*2,et=S/L.width,lt=q/L.height,nt=Math.min(et,lt,N),$t=L.minX+L.width/2,Ht=L.minY+L.height/2,qt=d/2,Vt=p/2,_t=qt-$t*nt,Gt=Vt-Ht*nt;A(nt),T({x:_t,y:Gt}),It(nt)},[P,l,L,W,N,w,E]);const O=e.useMemo(()=>{const t=new Set(m),c=new Set(b);return{reserved:t,unavailable:c}},[m,b]),at=e.useMemo(()=>f?new Set(f):null,[f]),$=e.useCallback(t=>{const c=t.id,x=t.seatNumber||"";return O.unavailable.has(c)||O.unavailable.has(x)?"unavailable":O.reserved.has(c)||O.reserved.has(x)?"reserved":X.has(c)?"selected":t.state},[O,X]);e.useEffect(()=>{l&&C&&C(l)},[l,C]),e.useEffect(()=>{B&&R&&R(B)},[B,R]),e.useEffect(()=>{J&&at&&ht(at)},[J,at]);const Xt=e.useCallback(t=>{const c=$(t);if(c!=="available"&&c!=="selected")return;const x=X.has(t.id);J||ht(d=>{const p=new Set(d);return x?p.delete(t.id):p.add(t.id),p}),x?y?.(t):(v?.(t),v||console.log("Seat selected:",t))},[$,X,J,v,y]),H=e.useMemo(()=>l?Y.filter(t=>X.has(t.id)):[],[Y,X]);e.useEffect(()=>{a?.(H)},[H,a]);const F=Et,Yt=e.useCallback(()=>{if(!h)return;const t=Math.min(j+Z,N);if(t!==j){const c=w.width||l?.canvas.width||800,x=w.height||l?.canvas.height||600,d=c/2,p=x/2,S={x:(d-k.x)/j,y:(p-k.y)/j};A(t),T({x:d-S.x*t,y:p-S.y*t})}},[h,j,Z,N,w,l,k]),Ft=e.useCallback(()=>{if(!h)return;const t=Math.max(j-Z,F);if(t!==j){const c=w.width||l?.canvas.width||800,x=w.height||l?.canvas.height||600,d=c/2,p=x/2,S={x:(d-k.x)/j,y:(p-k.y)/j};A(t),T({x:d-S.x*t,y:p-S.y*t})}},[h,j,Z,F,w,l,k]),Pt=e.useCallback(t=>{T({x:t.target.x(),y:t.target.y()})},[]),Wt=e.useCallback(t=>{if(!h)return;t.evt.preventDefault();const c=st.current;if(!c)return;const x=c.scaleX(),d=c.getPointerPosition();if(!d)return;const p=1.1,S=t.evt.deltaY>0?x/p:x*p,q=Math.min(Math.max(S,F),N),et={x:(d.x-k.x)/x,y:(d.y-k.y)/x},lt={x:d.x-et.x*q,y:d.y-et.y*q};A(q),T(lt)},[h,k,F,N]);yt(st,{enabled:Mt&&h,minScale:F,maxScale:N,currentScale:j,currentPosition:k,onScaleChange:(t,c)=>{A(t),T(c)},onPositionChange:t=>{T(t)}});const At=e.useCallback((t,c)=>{if(!g)return;const x=c.target.getStage();if(!x)return;const d=x.getPointerPosition();if(!d)return;const p=x.container().getBoundingClientRect();dt({visible:!0,x:p.left+d.x,y:p.top+d.y,seat:t,state:$(t)})},[g,$]),zt=e.useCallback(()=>{dt(t=>({...t,visible:!1}))},[]);if(Lt)return o.jsx("div",{className:`flex items-center justify-center h-full ${M}`,children:o.jsx("p",{children:"Loading seat map..."})});if(B)return o.jsx("div",{className:`flex items-center justify-center h-full ${M}`,children:o.jsxs("p",{className:"text-red-500",children:["Error loading seat map: ",B.message]})});if(!l)return o.jsx("div",{className:`flex items-center justify-center h-full ${M}`,children:o.jsx("p",{children:"No configuration provided"})});const Bt=w.width||l.canvas.width,Ot=w.height||l.canvas.height;return o.jsxs("div",{ref:ut,className:`relative ${M}`,style:{width:"100%",height:"100%"},children:[Dt&&ct.length>0&&o.jsx(vt,{floors:ct,currentFloorId:E,onFloorChange:Tt,showAllOption:G,allLabel:U,position:V,className:_}),o.jsxs(I.Stage,{ref:st,width:Bt,height:Ot,scaleX:j,scaleY:j,x:k.x,y:k.y,draggable:!0,onDragEnd:Pt,onWheel:Wt,style:{backgroundColor:l.canvas.backgroundColor,cursor:"grab"},children:[o.jsx(I.Layer,{listening:!1,children:tt.map(t=>o.jsx(St,{stage:t,stageColor:Q.stageColor},t.id))}),o.jsx(I.Layer,{children:Y.map(t=>o.jsx(bt,{seat:t,state:$(t),colors:Q,onClick:Xt,onMouseEnter:At,onMouseLeave:zt},t.id))})]}),g&&o.jsx(Ct,{visible:z.visible,x:z.x,y:z.y,seat:z.seat,currency:Q.currency,state:z.state}),ot&&h&&o.jsx(wt,{scale:j,minScale:F,maxScale:N,onZoomIn:Yt,onZoomOut:Ft,position:it,className:jt}),H.length>0&&o.jsxs("div",{className:"absolute top-4 right-4 bg-white dark:bg-gray-800 p-4 rounded shadow-lg",children:[o.jsxs("h3",{className:"font-semibold mb-2",children:["Selected Seats (",H.length,")"]}),o.jsx("div",{className:"max-h-48 overflow-y-auto space-y-1",children:H.map(t=>o.jsxs("div",{className:"text-sm",children:[t.seatNumber,t.price&&` - ${Q.currency} ${t.price.toFixed(2)}`]},t.id))})]})]})};exports.DEFAULT_COLORS=mt;exports.SeatMapViewer=Ut;exports.useConfigFetcher=pt;exports.useContainerSize=gt;exports.useTouchGestures=yt;
package/dist/index.mjs CHANGED
@@ -1,95 +1,95 @@
1
1
  import { jsx as h, jsxs as w } from "react/jsx-runtime";
2
- import { useState as L, useEffect as T, useRef as z, useCallback as N, useMemo as E, memo as U } from "react";
3
- import { Stage as Jt, Layer as mt, Group as Qt, Rect as St, Text as te, Circle as ee } from "react-konva";
2
+ import { useState as E, useEffect as T, useRef as F, useCallback as N, useMemo as Y, memo as U } from "react";
3
+ import { Stage as Qt, Layer as mt, Group as te, Rect as wt, Text as bt, Circle as ee } from "react-konva";
4
4
  function ne(e) {
5
- const [o, d] = L(null), [i, m] = L(!1), [b, f] = L(null), v = async () => {
5
+ const [i, a] = E(null), [n, x] = E(!1), [m, u] = E(null), v = async () => {
6
6
  if (e) {
7
- m(!0), f(null);
7
+ x(!0), u(null);
8
8
  try {
9
9
  const y = await fetch(e);
10
10
  if (!y.ok)
11
11
  throw new Error(`Failed to fetch config: ${y.statusText}`);
12
12
  const s = await y.json();
13
- d(s);
13
+ a(s);
14
14
  } catch (y) {
15
15
  const s = y instanceof Error ? y : new Error("Unknown error occurred");
16
- f(s), console.error("Failed to fetch seat map config:", s);
16
+ u(s), console.error("Failed to fetch seat map config:", s);
17
17
  } finally {
18
- m(!1);
18
+ x(!1);
19
19
  }
20
20
  }
21
21
  };
22
22
  return T(() => {
23
23
  v();
24
24
  }, [e]), {
25
- config: o,
26
- loading: i,
27
- error: b,
25
+ config: i,
26
+ loading: n,
27
+ error: m,
28
28
  refetch: v
29
29
  };
30
30
  }
31
31
  function oe(e) {
32
- const [o, d] = L({ width: 0, height: 0 });
32
+ const [i, a] = E({ width: 0, height: 0 });
33
33
  return T(() => {
34
- const i = e.current;
35
- if (!i) return;
36
- const { width: m, height: b } = i.getBoundingClientRect();
37
- m > 0 && b > 0 && d({ width: m, height: b });
38
- const f = new ResizeObserver((v) => {
34
+ const n = e.current;
35
+ if (!n) return;
36
+ const { width: x, height: m } = n.getBoundingClientRect();
37
+ x > 0 && m > 0 && a({ width: x, height: m });
38
+ const u = new ResizeObserver((v) => {
39
39
  const y = v[0];
40
40
  if (!y) return;
41
- const { width: s, height: n } = y.contentRect;
42
- s > 0 && n > 0 && d((g) => g.width === s && g.height === n ? g : { width: s, height: n });
41
+ const { width: s, height: o } = y.contentRect;
42
+ s > 0 && o > 0 && a((g) => g.width === s && g.height === o ? g : { width: s, height: o });
43
43
  });
44
- return f.observe(i), () => {
45
- f.disconnect();
44
+ return u.observe(n), () => {
45
+ u.disconnect();
46
46
  };
47
- }, [e]), o;
47
+ }, [e]), i;
48
48
  }
49
- function bt(e, o) {
50
- return Math.sqrt(Math.pow(o.x - e.x, 2) + Math.pow(o.y - e.y, 2));
49
+ function vt(e, i) {
50
+ return Math.sqrt(Math.pow(i.x - e.x, 2) + Math.pow(i.y - e.y, 2));
51
51
  }
52
- function vt(e, o) {
52
+ function St(e, i) {
53
53
  return {
54
- x: (e.x + o.x) / 2,
55
- y: (e.y + o.y) / 2
54
+ x: (e.x + i.x) / 2,
55
+ y: (e.y + i.y) / 2
56
56
  };
57
57
  }
58
- function ie(e, o) {
59
- const d = z(null), i = z(null), m = z(1);
58
+ function ie(e, i) {
59
+ const a = F(null), n = F(null), x = F(1);
60
60
  T(() => {
61
- const b = e.current;
62
- if (!b || !o.enabled) return;
63
- const f = b.container(), v = (n) => {
64
- if (n.touches.length === 2) {
65
- n.preventDefault();
66
- const g = { x: n.touches[0].clientX, y: n.touches[0].clientY }, a = { x: n.touches[1].clientX, y: n.touches[1].clientY };
67
- d.current = bt(g, a), i.current = vt(g, a), m.current = o.currentScale;
61
+ const m = e.current;
62
+ if (!m || !i.enabled) return;
63
+ const u = m.container(), v = (o) => {
64
+ if (o.touches.length === 2) {
65
+ o.preventDefault();
66
+ const g = { x: o.touches[0].clientX, y: o.touches[0].clientY }, l = { x: o.touches[1].clientX, y: o.touches[1].clientY };
67
+ a.current = vt(g, l), n.current = St(g, l), x.current = i.currentScale;
68
68
  }
69
- }, y = (n) => {
70
- if (n.touches.length !== 2) return;
71
- n.preventDefault();
72
- const g = { x: n.touches[0].clientX, y: n.touches[0].clientY }, a = { x: n.touches[1].clientX, y: n.touches[1].clientY }, k = bt(g, a), C = vt(g, a);
73
- if (d.current !== null && i.current !== null) {
74
- const D = k / d.current, P = Math.min(
75
- Math.max(o.currentScale * D, o.minScale),
76
- o.maxScale
77
- ), K = f.getBoundingClientRect(), J = C.x - K.left, Q = C.y - K.top, tt = o.currentScale, $ = {
78
- x: (J - o.currentPosition.x) / tt,
79
- y: (Q - o.currentPosition.y) / tt
80
- }, H = C.x - i.current.x, at = C.y - i.current.y, lt = {
81
- x: J - $.x * P + H,
82
- y: Q - $.y * P + at
69
+ }, y = (o) => {
70
+ if (o.touches.length !== 2) return;
71
+ o.preventDefault();
72
+ const g = { x: o.touches[0].clientX, y: o.touches[0].clientY }, l = { x: o.touches[1].clientX, y: o.touches[1].clientY }, k = vt(g, l), C = St(g, l);
73
+ if (a.current !== null && n.current !== null) {
74
+ const D = k / a.current, P = Math.min(
75
+ Math.max(i.currentScale * D, i.minScale),
76
+ i.maxScale
77
+ ), K = u.getBoundingClientRect(), J = C.x - K.left, Q = C.y - K.top, tt = i.currentScale, z = {
78
+ x: (J - i.currentPosition.x) / tt,
79
+ y: (Q - i.currentPosition.y) / tt
80
+ }, $ = C.x - n.current.x, at = C.y - n.current.y, lt = {
81
+ x: J - z.x * P + $,
82
+ y: Q - z.y * P + at
83
83
  };
84
- o.onScaleChange(P, lt), d.current = k, i.current = C;
84
+ i.onScaleChange(P, lt), a.current = k, n.current = C;
85
85
  }
86
- }, s = (n) => {
87
- n.touches.length < 2 && (d.current = null, i.current = null);
86
+ }, s = (o) => {
87
+ o.touches.length < 2 && (a.current = null, n.current = null);
88
88
  };
89
- return f.addEventListener("touchstart", v, { passive: !1 }), f.addEventListener("touchmove", y, { passive: !1 }), f.addEventListener("touchend", s), () => {
90
- f.removeEventListener("touchstart", v), f.removeEventListener("touchmove", y), f.removeEventListener("touchend", s);
89
+ return u.addEventListener("touchstart", v, { passive: !1 }), u.addEventListener("touchmove", y, { passive: !1 }), u.addEventListener("touchend", s), () => {
90
+ u.removeEventListener("touchstart", v), u.removeEventListener("touchmove", y), u.removeEventListener("touchend", s);
91
91
  };
92
- }, [e, o]);
92
+ }, [e, i]);
93
93
  }
94
94
  const re = {
95
95
  canvasBackground: "#1a1a1a",
@@ -101,34 +101,34 @@ const re = {
101
101
  seatHidden: "#4a4a4a",
102
102
  gridLines: "#404040",
103
103
  currency: "KD"
104
- }, wt = U(({ seat: e, state: o, colors: d, onClick: i, onMouseEnter: m, onMouseLeave: b }) => {
104
+ }, Ct = U(({ seat: e, state: i, colors: a, onClick: n, onMouseEnter: x, onMouseLeave: m }) => {
105
105
  const y = {
106
- available: d.seatAvailable,
107
- reserved: d.seatReserved,
108
- selected: d.seatSelected,
109
- unavailable: d.seatUnavailable,
110
- hidden: d.seatHidden
106
+ available: a.seatAvailable,
107
+ reserved: a.seatReserved,
108
+ selected: a.seatSelected,
109
+ unavailable: a.seatUnavailable,
110
+ hidden: a.seatHidden
111
111
  // Hidden seats are filtered out, but included for type safety
112
- }[o], s = o === "available" || o === "selected", n = N(() => {
113
- s && i(e);
114
- }, [e, i, s]), g = N((C) => {
115
- m(e, C);
112
+ }[i], s = i === "available" || i === "selected", o = N(() => {
113
+ s && n(e);
114
+ }, [e, n, s]), g = N((C) => {
115
+ x(e, C);
116
116
  const D = C.target.getStage();
117
117
  D && s && (D.container().style.cursor = "pointer");
118
- }, [e, m, s]), a = N((C) => {
119
- b();
118
+ }, [e, x, s]), l = N((C) => {
119
+ m();
120
120
  const D = C.target.getStage();
121
121
  D && (D.container().style.cursor = "grab");
122
- }, [b]), k = {
122
+ }, [m]), k = {
123
123
  x: e.position.x,
124
124
  y: e.position.y,
125
125
  fill: y,
126
126
  stroke: "#ffffff",
127
127
  strokeWidth: 1,
128
- onClick: n,
129
- onTap: n,
128
+ onClick: o,
129
+ onTap: o,
130
130
  onMouseEnter: g,
131
- onMouseLeave: a
131
+ onMouseLeave: l
132
132
  };
133
133
  return e.shape === "circle" ? /* @__PURE__ */ h(
134
134
  ee,
@@ -137,7 +137,7 @@ const re = {
137
137
  radius: 12
138
138
  }
139
139
  ) : /* @__PURE__ */ h(
140
- St,
140
+ wt,
141
141
  {
142
142
  ...k,
143
143
  width: 24,
@@ -148,47 +148,73 @@ const re = {
148
148
  }
149
149
  );
150
150
  });
151
- wt.displayName = "ViewerSeat";
152
- const Ct = U(({ stage: e, stageColor: o }) => /* @__PURE__ */ w(Qt, { x: e.position.x, y: e.position.y, children: [
153
- /* @__PURE__ */ h(
154
- St,
155
- {
156
- width: e.config.width,
157
- height: e.config.height,
158
- fill: o + "80",
159
- stroke: "#ffffff",
160
- strokeWidth: 2,
161
- cornerRadius: 10
162
- }
163
- ),
164
- /* @__PURE__ */ h(
165
- te,
166
- {
167
- text: e.config.label,
168
- x: 0,
169
- y: 0,
170
- width: e.config.width,
171
- height: e.config.height,
172
- fontSize: 24,
173
- fontStyle: "bold",
174
- fill: "#ffffff",
175
- align: "center",
176
- verticalAlign: "middle"
177
- }
178
- )
179
- ] }));
180
- Ct.displayName = "ViewerStage";
181
- const Mt = U(({
151
+ Ct.displayName = "ViewerSeat";
152
+ const Mt = U(({ stage: e, stageColor: i }) => {
153
+ const a = (m) => ({
154
+ stage: "🎭",
155
+ table: "⬜",
156
+ wall: "▬",
157
+ barrier: "🛡️",
158
+ "dj-booth": "🎵",
159
+ bar: "🍷",
160
+ "entry-exit": "🚪",
161
+ custom: "➕"
162
+ })[m || "stage"] || "🎭", n = e.config.color || i, x = a(e.config.objectType);
163
+ return /* @__PURE__ */ w(te, { x: e.position.x, y: e.position.y, rotation: e.config.rotation || 0, children: [
164
+ /* @__PURE__ */ h(
165
+ wt,
166
+ {
167
+ width: e.config.width,
168
+ height: e.config.height,
169
+ fill: n + "80",
170
+ stroke: "#ffffff",
171
+ strokeWidth: 2,
172
+ cornerRadius: 10
173
+ }
174
+ ),
175
+ /* @__PURE__ */ h(
176
+ bt,
177
+ {
178
+ text: x,
179
+ x: 0,
180
+ y: 0,
181
+ width: e.config.width,
182
+ height: e.config.height * 0.4,
183
+ fontSize: 32,
184
+ fill: "#ffffff",
185
+ align: "center",
186
+ verticalAlign: "middle"
187
+ }
188
+ ),
189
+ /* @__PURE__ */ h(
190
+ bt,
191
+ {
192
+ text: e.config.label,
193
+ x: 0,
194
+ y: e.config.height * 0.4,
195
+ width: e.config.width,
196
+ height: e.config.height * 0.6,
197
+ fontSize: 20,
198
+ fontStyle: "bold",
199
+ fill: "#ffffff",
200
+ align: "center",
201
+ verticalAlign: "middle"
202
+ }
203
+ )
204
+ ] });
205
+ });
206
+ Mt.displayName = "ViewerStage";
207
+ const kt = U(({
182
208
  floors: e,
183
- currentFloorId: o,
184
- onFloorChange: d,
185
- showAllOption: i,
186
- allLabel: m,
187
- position: b,
188
- className: f
209
+ currentFloorId: i,
210
+ onFloorChange: a,
211
+ showAllOption: n,
212
+ allLabel: x,
213
+ position: m,
214
+ className: u
189
215
  }) => {
190
- const v = E(
191
- () => [...e].sort((a, k) => a.order - k.order),
216
+ const v = Y(
217
+ () => [...e].sort((l, k) => l.order - k.order),
192
218
  [e]
193
219
  ), s = {
194
220
  position: "absolute",
@@ -205,8 +231,8 @@ const Mt = U(({
205
231
  "top-right": { top: 0, right: 0 },
206
232
  "bottom-left": { bottom: 0, left: 0 },
207
233
  "bottom-right": { bottom: 0, right: 0 }
208
- }[b]
209
- }, n = {
234
+ }[m]
235
+ }, o = {
210
236
  padding: "10px 16px",
211
237
  fontSize: "14px",
212
238
  fontWeight: 500,
@@ -219,41 +245,41 @@ const Mt = U(({
219
245
  minHeight: "44px",
220
246
  touchAction: "manipulation"
221
247
  }, g = {
222
- ...n,
248
+ ...o,
223
249
  backgroundColor: "#3A7DE5",
224
250
  borderColor: "#3A7DE5"
225
251
  };
226
- return /* @__PURE__ */ w("div", { className: f, style: s, children: [
227
- i && /* @__PURE__ */ h(
252
+ return /* @__PURE__ */ w("div", { className: u, style: s, children: [
253
+ n && /* @__PURE__ */ h(
228
254
  "button",
229
255
  {
230
256
  type: "button",
231
- onClick: () => d(null),
232
- style: o === null ? g : n,
233
- children: m
257
+ onClick: () => a(null),
258
+ style: i === null ? g : o,
259
+ children: x
234
260
  }
235
261
  ),
236
- v.map((a) => /* @__PURE__ */ h(
262
+ v.map((l) => /* @__PURE__ */ h(
237
263
  "button",
238
264
  {
239
265
  type: "button",
240
- onClick: () => d(a.id),
241
- style: o === a.id ? g : n,
242
- children: a.name
266
+ onClick: () => a(l.id),
267
+ style: i === l.id ? g : o,
268
+ children: l.name
243
269
  },
244
- a.id
270
+ l.id
245
271
  ))
246
272
  ] });
247
273
  });
248
- Mt.displayName = "FloorSelectorBar";
249
- const kt = U(({
274
+ kt.displayName = "FloorSelectorBar";
275
+ const It = U(({
250
276
  scale: e,
251
- minScale: o,
252
- maxScale: d,
253
- onZoomIn: i,
254
- onZoomOut: m,
255
- position: b,
256
- className: f
277
+ minScale: i,
278
+ maxScale: a,
279
+ onZoomIn: n,
280
+ onZoomOut: x,
281
+ position: m,
282
+ className: u
257
283
  }) => {
258
284
  const y = {
259
285
  position: "absolute",
@@ -270,7 +296,7 @@ const kt = U(({
270
296
  "top-right": { top: 0, right: 0 },
271
297
  "bottom-left": { bottom: 0, left: 0 },
272
298
  "bottom-right": { bottom: 0, right: 0 }
273
- }[b]
299
+ }[m]
274
300
  }, s = {
275
301
  width: "44px",
276
302
  height: "44px",
@@ -288,19 +314,19 @@ const kt = U(({
288
314
  justifyContent: "center",
289
315
  transition: "all 0.2s ease",
290
316
  touchAction: "manipulation"
291
- }, n = {
317
+ }, o = {
292
318
  ...s,
293
319
  opacity: 0.4,
294
320
  cursor: "not-allowed"
295
- }, g = e < d, a = e > o;
296
- return /* @__PURE__ */ w("div", { className: f, style: y, children: [
321
+ }, g = e < a, l = e > i;
322
+ return /* @__PURE__ */ w("div", { className: u, style: y, children: [
297
323
  /* @__PURE__ */ h(
298
324
  "button",
299
325
  {
300
326
  type: "button",
301
- onClick: i,
327
+ onClick: n,
302
328
  disabled: !g,
303
- style: g ? s : n,
329
+ style: g ? s : o,
304
330
  title: "Zoom In",
305
331
  children: "+"
306
332
  }
@@ -309,29 +335,29 @@ const kt = U(({
309
335
  "button",
310
336
  {
311
337
  type: "button",
312
- onClick: m,
313
- disabled: !a,
314
- style: a ? s : n,
338
+ onClick: x,
339
+ disabled: !l,
340
+ style: l ? s : o,
315
341
  title: "Zoom Out",
316
342
  children: "−"
317
343
  }
318
344
  )
319
345
  ] });
320
346
  });
321
- kt.displayName = "ZoomControls";
322
- const It = U(({
347
+ It.displayName = "ZoomControls";
348
+ const Nt = U(({
323
349
  visible: e,
324
- x: o,
325
- y: d,
326
- seat: i,
327
- currency: m,
328
- state: b
350
+ x: i,
351
+ y: a,
352
+ seat: n,
353
+ currency: x,
354
+ state: m
329
355
  }) => {
330
- if (!e || !i) return null;
331
- const f = i.seatNumber || (i.rowLabel && i.columnLabel ? `${i.rowLabel}-${i.columnLabel}` : "N/A"), v = {
356
+ if (!e || !n) return null;
357
+ const u = n.seatNumber || (n.rowLabel && n.columnLabel ? `${n.rowLabel}-${n.columnLabel}` : "N/A"), v = {
332
358
  position: "fixed",
333
- left: `${o + 15}px`,
334
- top: `${d + 15}px`,
359
+ left: `${i + 15}px`,
360
+ top: `${a + 15}px`,
335
361
  zIndex: 1e3,
336
362
  pointerEvents: "none"
337
363
  }, y = {
@@ -346,55 +372,55 @@ const It = U(({
346
372
  }, s = {
347
373
  color: "#9ca3af",
348
374
  marginRight: "4px"
349
- }, n = {
375
+ }, o = {
350
376
  fontWeight: 600
351
377
  }, g = {
352
378
  color: "#4ade80",
353
379
  fontWeight: 600
354
- }, a = {
380
+ }, l = {
355
381
  fontSize: "11px",
356
382
  color: "#6b7280",
357
383
  textTransform: "capitalize",
358
384
  marginTop: "4px"
359
385
  };
360
386
  return /* @__PURE__ */ h("div", { style: v, children: /* @__PURE__ */ w("div", { style: y, children: [
361
- i.sectionName && /* @__PURE__ */ w("div", { style: { marginBottom: "4px" }, children: [
387
+ n.sectionName && /* @__PURE__ */ w("div", { style: { marginBottom: "4px" }, children: [
362
388
  /* @__PURE__ */ h("span", { style: s, children: "Section:" }),
363
- /* @__PURE__ */ h("span", { style: { ...n, color: "#3b82f6" }, children: i.sectionName })
389
+ /* @__PURE__ */ h("span", { style: { ...o, color: "#3b82f6" }, children: n.sectionName })
364
390
  ] }),
365
391
  /* @__PURE__ */ w("div", { style: { marginBottom: "4px" }, children: [
366
392
  /* @__PURE__ */ h("span", { style: s, children: "Seat:" }),
367
- /* @__PURE__ */ h("span", { style: n, children: f })
393
+ /* @__PURE__ */ h("span", { style: o, children: u })
368
394
  ] }),
369
- i.price !== void 0 && i.price > 0 && /* @__PURE__ */ w("div", { style: { marginBottom: "4px" }, children: [
395
+ n.price !== void 0 && n.price > 0 && /* @__PURE__ */ w("div", { style: { marginBottom: "4px" }, children: [
370
396
  /* @__PURE__ */ h("span", { style: s, children: "Price:" }),
371
397
  /* @__PURE__ */ w("span", { style: g, children: [
372
- m,
398
+ x,
373
399
  " ",
374
- i.price.toFixed(2)
400
+ n.price.toFixed(2)
375
401
  ] })
376
402
  ] }),
377
- /* @__PURE__ */ w("div", { style: a, children: [
403
+ /* @__PURE__ */ w("div", { style: l, children: [
378
404
  "Status: ",
379
- b
405
+ m
380
406
  ] })
381
407
  ] }) });
382
408
  });
383
- It.displayName = "SeatTooltip";
409
+ Nt.displayName = "SeatTooltip";
384
410
  const le = ({
385
411
  config: e,
386
- configUrl: o,
387
- floorId: d,
388
- onFloorChange: i,
389
- reservedSeats: m = [],
390
- unavailableSeats: b = [],
391
- selectedSeats: f,
412
+ configUrl: i,
413
+ floorId: a,
414
+ onFloorChange: n,
415
+ reservedSeats: x = [],
416
+ unavailableSeats: m = [],
417
+ selectedSeats: u,
392
418
  onSeatSelect: v,
393
419
  onSeatDeselect: y,
394
420
  onSelectionChange: s,
395
- colorOverrides: n,
421
+ colorOverrides: o,
396
422
  showTooltip: g = !0,
397
- zoomEnabled: a = !0,
423
+ zoomEnabled: l = !0,
398
424
  className: k = "",
399
425
  onConfigLoad: C,
400
426
  onError: D,
@@ -404,56 +430,56 @@ const le = ({
404
430
  floorSelectorClassName: J,
405
431
  showAllFloorsOption: Q = !0,
406
432
  allFloorsLabel: tt = "All",
407
- fitToView: $ = !0,
408
- fitPadding: H = 40,
433
+ fitToView: z = !0,
434
+ fitPadding: $ = 40,
409
435
  // Zoom controls
410
436
  showZoomControls: at = !0,
411
437
  zoomControlsPosition: lt = "bottom-right",
412
- zoomControlsClassName: Nt,
413
- maxZoom: X = 3,
438
+ zoomControlsClassName: Dt,
439
+ maxZoom: L = 3,
414
440
  zoomStep: et = 0.25,
415
441
  // Touch gestures
416
- touchEnabled: Dt = !0
442
+ touchEnabled: Rt = !0
417
443
  }) => {
418
- const ht = z(null), gt = z(null), S = oe(gt), [B, yt] = L(/* @__PURE__ */ new Set()), [M, j] = L(1), [I, W] = L({ x: 0, y: 0 }), [Rt, Lt] = L(null), [Xt, Yt] = L(1), nt = z({ width: 0, height: 0 }), [O, xt] = L({ visible: !1, x: 0, y: 0, seat: null, state: "available" }), { config: Et, loading: Tt, error: V } = ne(o), c = e || Et, dt = d !== void 0, R = dt ? d || null : Rt, ot = f !== void 0, Wt = N((t) => {
419
- dt || Lt(t), i?.(t);
420
- }, [dt, i]), ut = c?.floors || [], Pt = P !== void 0 ? P : ut.length > 1, it = E(
421
- () => c ? { ...c.colors, ...n } : { ...re, ...n },
422
- [c, n]
423
- ), F = E(() => {
444
+ const ht = F(null), gt = F(null), S = oe(gt), [j, yt] = E(/* @__PURE__ */ new Set()), [M, H] = E(1), [I, W] = E({ x: 0, y: 0 }), [Et, Lt] = E(null), [Xt, Yt] = E(1), nt = F({ width: 0, height: 0 }), [O, xt] = E({ visible: !1, x: 0, y: 0, seat: null, state: "available" }), { config: Tt, loading: Wt, error: V } = ne(i), c = e || Tt, dt = a !== void 0, R = dt ? a || null : Et, ot = u !== void 0, Pt = N((t) => {
445
+ dt || Lt(t), n?.(t);
446
+ }, [dt, n]), ut = c?.floors || [], jt = P !== void 0 ? P : ut.length > 1, it = Y(
447
+ () => c ? { ...c.colors, ...o } : { ...re, ...o },
448
+ [c, o]
449
+ ), A = Y(() => {
424
450
  if (!c) return [];
425
451
  let t = c.seats.filter((r) => r.state !== "hidden");
426
452
  return R && (t = t.filter(
427
453
  (r) => r.floorId === R || !r.floorId && R === "floor_default"
428
454
  )), t;
429
- }, [c, R]), rt = E(() => c?.stages ? R ? c.stages.filter(
455
+ }, [c, R]), rt = Y(() => c?.stages ? R ? c.stages.filter(
430
456
  (t) => t.floorId === R || !t.floorId && R === "floor_default"
431
- ) : c.stages : [], [c, R]), Y = E(() => {
432
- if (!c || F.length === 0 && rt.length === 0)
457
+ ) : c.stages : [], [c, R]), X = Y(() => {
458
+ if (!c || A.length === 0 && rt.length === 0)
433
459
  return null;
434
460
  const t = 12;
435
- let r = 1 / 0, u = 1 / 0, l = -1 / 0, p = -1 / 0;
436
- return F.forEach((x) => {
437
- r = Math.min(r, x.position.x - t), u = Math.min(u, x.position.y - t), l = Math.max(l, x.position.x + t), p = Math.max(p, x.position.y + t);
438
- }), rt.forEach((x) => {
439
- r = Math.min(r, x.position.x), u = Math.min(u, x.position.y), l = Math.max(l, x.position.x + (x.config?.width || 200)), p = Math.max(p, x.position.y + (x.config?.height || 100));
440
- }), { minX: r, minY: u, maxX: l, maxY: p, width: l - r, height: p - u };
441
- }, [c, F, rt]);
461
+ let r = 1 / 0, f = 1 / 0, d = -1 / 0, p = -1 / 0;
462
+ return A.forEach((b) => {
463
+ r = Math.min(r, b.position.x - t), f = Math.min(f, b.position.y - t), d = Math.max(d, b.position.x + t), p = Math.max(p, b.position.y + t);
464
+ }), rt.forEach((b) => {
465
+ r = Math.min(r, b.position.x), f = Math.min(f, b.position.y), d = Math.max(d, b.position.x + (b.config?.width || 200)), p = Math.max(p, b.position.y + (b.config?.height || 100));
466
+ }), { minX: r, minY: f, maxX: d, maxY: p, width: d - r, height: p - f };
467
+ }, [c, A, rt]);
442
468
  T(() => {
443
- if (!$ || !c || !Y || S.width === 0 || S.height === 0) return;
469
+ if (!z || !c || !X || S.width === 0 || S.height === 0) return;
444
470
  const t = Math.abs(S.width - nt.current.width), r = Math.abs(S.height - nt.current.height);
445
471
  if (!(nt.current.width === 0) && t < 10 && r < 10) return;
446
472
  nt.current = S;
447
- const l = S.width, p = S.height, x = l - H * 2, G = p - H * 2, st = x / Y.width, pt = G / Y.height, ct = Math.min(st, pt, X), Zt = Y.minX + Y.width / 2, _t = Y.minY + Y.height / 2, qt = l / 2, Gt = p / 2, Ut = qt - Zt * ct, Kt = Gt - _t * ct;
448
- j(ct), W({ x: Ut, y: Kt }), Yt(ct);
449
- }, [$, c, Y, H, X, S, R]);
450
- const Z = E(() => {
451
- const t = new Set(m), r = new Set(b);
473
+ const d = S.width, p = S.height, b = d - $ * 2, G = p - $ * 2, st = b / X.width, pt = G / X.height, ct = Math.min(st, pt, L), _t = X.minX + X.width / 2, qt = X.minY + X.height / 2, Gt = d / 2, Ut = p / 2, Kt = Gt - _t * ct, Jt = Ut - qt * ct;
474
+ H(ct), W({ x: Kt, y: Jt }), Yt(ct);
475
+ }, [z, c, X, $, L, S, R]);
476
+ const Z = Y(() => {
477
+ const t = new Set(x), r = new Set(m);
452
478
  return { reserved: t, unavailable: r };
453
- }, [m, b]), ft = E(() => f ? new Set(f) : null, [f]), _ = N((t) => {
454
- const r = t.id, u = t.seatNumber || "";
455
- return Z.unavailable.has(r) || Z.unavailable.has(u) ? "unavailable" : Z.reserved.has(r) || Z.reserved.has(u) ? "reserved" : B.has(r) ? "selected" : t.state;
456
- }, [Z, B]);
479
+ }, [x, m]), ft = Y(() => u ? new Set(u) : null, [u]), _ = N((t) => {
480
+ const r = t.id, f = t.seatNumber || "";
481
+ return Z.unavailable.has(r) || Z.unavailable.has(f) ? "unavailable" : Z.reserved.has(r) || Z.reserved.has(f) ? "reserved" : j.has(r) ? "selected" : t.state;
482
+ }, [Z, j]);
457
483
  T(() => {
458
484
  c && C && C(c);
459
485
  }, [c, C]), T(() => {
@@ -461,74 +487,74 @@ const le = ({
461
487
  }, [V, D]), T(() => {
462
488
  ot && ft && yt(ft);
463
489
  }, [ot, ft]);
464
- const Bt = N((t) => {
490
+ const At = N((t) => {
465
491
  const r = _(t);
466
492
  if (r !== "available" && r !== "selected")
467
493
  return;
468
- const u = B.has(t.id);
469
- ot || yt((l) => {
470
- const p = new Set(l);
471
- return u ? p.delete(t.id) : p.add(t.id), p;
472
- }), u ? y?.(t) : (v?.(t), v || console.log("Seat selected:", t));
473
- }, [_, B, ot, v, y]), q = E(() => c ? F.filter((t) => B.has(t.id)) : [], [F, B]);
494
+ const f = j.has(t.id);
495
+ ot || yt((d) => {
496
+ const p = new Set(d);
497
+ return f ? p.delete(t.id) : p.add(t.id), p;
498
+ }), f ? y?.(t) : (v?.(t), v || console.log("Seat selected:", t));
499
+ }, [_, j, ot, v, y]), q = Y(() => c ? A.filter((t) => j.has(t.id)) : [], [A, j]);
474
500
  T(() => {
475
501
  s?.(q);
476
502
  }, [q, s]);
477
- const A = Xt, Ft = N(() => {
478
- if (!a) return;
479
- const t = Math.min(M + et, X);
503
+ const B = Xt, Bt = N(() => {
504
+ if (!l) return;
505
+ const t = Math.min(M + et, L);
480
506
  if (t !== M) {
481
- const r = S.width || c?.canvas.width || 800, u = S.height || c?.canvas.height || 600, l = r / 2, p = u / 2, x = {
482
- x: (l - I.x) / M,
507
+ const r = S.width || c?.canvas.width || 800, f = S.height || c?.canvas.height || 600, d = r / 2, p = f / 2, b = {
508
+ x: (d - I.x) / M,
483
509
  y: (p - I.y) / M
484
510
  };
485
- j(t), W({
486
- x: l - x.x * t,
487
- y: p - x.y * t
511
+ H(t), W({
512
+ x: d - b.x * t,
513
+ y: p - b.y * t
488
514
  });
489
515
  }
490
- }, [a, M, et, X, S, c, I]), At = N(() => {
491
- if (!a) return;
492
- const t = Math.max(M - et, A);
516
+ }, [l, M, et, L, S, c, I]), Ft = N(() => {
517
+ if (!l) return;
518
+ const t = Math.max(M - et, B);
493
519
  if (t !== M) {
494
- const r = S.width || c?.canvas.width || 800, u = S.height || c?.canvas.height || 600, l = r / 2, p = u / 2, x = {
495
- x: (l - I.x) / M,
520
+ const r = S.width || c?.canvas.width || 800, f = S.height || c?.canvas.height || 600, d = r / 2, p = f / 2, b = {
521
+ x: (d - I.x) / M,
496
522
  y: (p - I.y) / M
497
523
  };
498
- j(t), W({
499
- x: l - x.x * t,
500
- y: p - x.y * t
524
+ H(t), W({
525
+ x: d - b.x * t,
526
+ y: p - b.y * t
501
527
  });
502
528
  }
503
- }, [a, M, et, A, S, c, I]), zt = N((t) => {
529
+ }, [l, M, et, B, S, c, I]), zt = N((t) => {
504
530
  W({
505
531
  x: t.target.x(),
506
532
  y: t.target.y()
507
533
  });
508
534
  }, []), $t = N((t) => {
509
- if (!a) return;
535
+ if (!l) return;
510
536
  t.evt.preventDefault();
511
537
  const r = ht.current;
512
538
  if (!r) return;
513
- const u = r.scaleX(), l = r.getPointerPosition();
514
- if (!l) return;
515
- const p = 1.1, x = t.evt.deltaY > 0 ? u / p : u * p, G = Math.min(Math.max(x, A), X), st = {
516
- x: (l.x - I.x) / u,
517
- y: (l.y - I.y) / u
539
+ const f = r.scaleX(), d = r.getPointerPosition();
540
+ if (!d) return;
541
+ const p = 1.1, b = t.evt.deltaY > 0 ? f / p : f * p, G = Math.min(Math.max(b, B), L), st = {
542
+ x: (d.x - I.x) / f,
543
+ y: (d.y - I.y) / f
518
544
  }, pt = {
519
- x: l.x - st.x * G,
520
- y: l.y - st.y * G
545
+ x: d.x - st.x * G,
546
+ y: d.y - st.y * G
521
547
  };
522
- j(G), W(pt);
523
- }, [a, I, A, X]);
548
+ H(G), W(pt);
549
+ }, [l, I, B, L]);
524
550
  ie(ht, {
525
- enabled: Dt && a,
526
- minScale: A,
527
- maxScale: X,
551
+ enabled: Rt && l,
552
+ minScale: B,
553
+ maxScale: L,
528
554
  currentScale: M,
529
555
  currentPosition: I,
530
556
  onScaleChange: (t, r) => {
531
- j(t), W(r);
557
+ H(t), W(r);
532
558
  },
533
559
  onPositionChange: (t) => {
534
560
  W(t);
@@ -536,22 +562,22 @@ const le = ({
536
562
  });
537
563
  const Ht = N((t, r) => {
538
564
  if (!g) return;
539
- const u = r.target.getStage();
540
- if (!u) return;
541
- const l = u.getPointerPosition();
542
- if (!l) return;
543
- const p = u.container().getBoundingClientRect();
565
+ const f = r.target.getStage();
566
+ if (!f) return;
567
+ const d = f.getPointerPosition();
568
+ if (!d) return;
569
+ const p = f.container().getBoundingClientRect();
544
570
  xt({
545
571
  visible: !0,
546
- x: p.left + l.x,
547
- y: p.top + l.y,
572
+ x: p.left + d.x,
573
+ y: p.top + d.y,
548
574
  seat: t,
549
575
  state: _(t)
550
576
  });
551
- }, [g, _]), jt = N(() => {
577
+ }, [g, _]), Ot = N(() => {
552
578
  xt((t) => ({ ...t, visible: !1 }));
553
579
  }, []);
554
- if (Tt)
580
+ if (Wt)
555
581
  return /* @__PURE__ */ h("div", { className: `flex items-center justify-center h-full ${k}`, children: /* @__PURE__ */ h("p", { children: "Loading seat map..." }) });
556
582
  if (V)
557
583
  return /* @__PURE__ */ h("div", { className: `flex items-center justify-center h-full ${k}`, children: /* @__PURE__ */ w("p", { className: "text-red-500", children: [
@@ -560,7 +586,7 @@ const le = ({
560
586
  ] }) });
561
587
  if (!c)
562
588
  return /* @__PURE__ */ h("div", { className: `flex items-center justify-center h-full ${k}`, children: /* @__PURE__ */ h("p", { children: "No configuration provided" }) });
563
- const Ot = S.width || c.canvas.width, Vt = S.height || c.canvas.height;
589
+ const Vt = S.width || c.canvas.width, Zt = S.height || c.canvas.height;
564
590
  return /* @__PURE__ */ w(
565
591
  "div",
566
592
  {
@@ -568,12 +594,12 @@ const le = ({
568
594
  className: `relative ${k}`,
569
595
  style: { width: "100%", height: "100%" },
570
596
  children: [
571
- Pt && ut.length > 0 && /* @__PURE__ */ h(
572
- Mt,
597
+ jt && ut.length > 0 && /* @__PURE__ */ h(
598
+ kt,
573
599
  {
574
600
  floors: ut,
575
601
  currentFloorId: R,
576
- onFloorChange: Wt,
602
+ onFloorChange: Pt,
577
603
  showAllOption: Q,
578
604
  allLabel: tt,
579
605
  position: K,
@@ -581,11 +607,11 @@ const le = ({
581
607
  }
582
608
  ),
583
609
  /* @__PURE__ */ w(
584
- Jt,
610
+ Qt,
585
611
  {
586
612
  ref: ht,
587
- width: Ot,
588
- height: Vt,
613
+ width: Vt,
614
+ height: Zt,
589
615
  scaleX: M,
590
616
  scaleY: M,
591
617
  x: I.x,
@@ -596,22 +622,22 @@ const le = ({
596
622
  style: { backgroundColor: c.canvas.backgroundColor, cursor: "grab" },
597
623
  children: [
598
624
  /* @__PURE__ */ h(mt, { listening: !1, children: rt.map((t) => /* @__PURE__ */ h(
599
- Ct,
625
+ Mt,
600
626
  {
601
627
  stage: t,
602
628
  stageColor: it.stageColor
603
629
  },
604
630
  t.id
605
631
  )) }),
606
- /* @__PURE__ */ h(mt, { children: F.map((t) => /* @__PURE__ */ h(
607
- wt,
632
+ /* @__PURE__ */ h(mt, { children: A.map((t) => /* @__PURE__ */ h(
633
+ Ct,
608
634
  {
609
635
  seat: t,
610
636
  state: _(t),
611
637
  colors: it,
612
- onClick: Bt,
638
+ onClick: At,
613
639
  onMouseEnter: Ht,
614
- onMouseLeave: jt
640
+ onMouseLeave: Ot
615
641
  },
616
642
  t.id
617
643
  )) })
@@ -619,7 +645,7 @@ const le = ({
619
645
  }
620
646
  ),
621
647
  g && /* @__PURE__ */ h(
622
- It,
648
+ Nt,
623
649
  {
624
650
  visible: O.visible,
625
651
  x: O.x,
@@ -629,16 +655,16 @@ const le = ({
629
655
  state: O.state
630
656
  }
631
657
  ),
632
- at && a && /* @__PURE__ */ h(
633
- kt,
658
+ at && l && /* @__PURE__ */ h(
659
+ It,
634
660
  {
635
661
  scale: M,
636
- minScale: A,
637
- maxScale: X,
638
- onZoomIn: Ft,
639
- onZoomOut: At,
662
+ minScale: B,
663
+ maxScale: L,
664
+ onZoomIn: Bt,
665
+ onZoomOut: Ft,
640
666
  position: lt,
641
- className: Nt
667
+ className: Dt
642
668
  }
643
669
  ),
644
670
  q.length > 0 && /* @__PURE__ */ w("div", { className: "absolute top-4 right-4 bg-white dark:bg-gray-800 p-4 rounded shadow-lg", children: [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zonetrix/viewer",
3
- "version": "2.6.0",
3
+ "version": "2.7.0",
4
4
  "type": "module",
5
5
  "description": "Lightweight React component for rendering interactive seat maps",
6
6
  "main": "./dist/index.js",