@zonetrix/viewer 2.10.0 → 2.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,54 +1,54 @@
1
- import { jsx as b, jsxs as k } from "react/jsx-runtime";
2
- import { useState as M, useEffect as T, useRef as X, useCallback as N, useMemo as V, memo as se } from "react";
3
- import { Stage as ct, Layer as Ee, Group as lt, Rect as De, Text as Fe, Circle as dt } from "react-konva";
4
- import { ref as Se, onValue as Ne, off as ze, get as ut } from "firebase/database";
5
- import { fromFirebaseSeatMap as ht } from "@zonetrix/shared";
6
- function ft(t) {
7
- const [n, s] = M(null), [o, u] = M(!1), [l, r] = M(null), S = async () => {
1
+ import { jsx as y, jsxs as D } from "react/jsx-runtime";
2
+ import { useState as R, useEffect as Y, useRef as T, useCallback as N, useMemo as _, memo as ce } from "react";
3
+ import { Stage as dt, Layer as Fe, Group as ut, Rect as Te, Text as Ie, Circle as ht } from "react-konva";
4
+ import { ref as we, onValue as ze, off as Ae, get as ft } from "firebase/database";
5
+ import { fromFirebaseSeatMap as gt } from "@zonetrix/shared";
6
+ function pt(t) {
7
+ const [n, o] = R(null), [r, u] = R(!1), [l, s] = R(null), x = async () => {
8
8
  if (t) {
9
- u(!0), r(null);
9
+ u(!0), s(null);
10
10
  try {
11
11
  const f = await fetch(t);
12
12
  if (!f.ok)
13
13
  throw new Error(`Failed to fetch config: ${f.statusText}`);
14
14
  const i = await f.json();
15
- s(i);
15
+ o(i);
16
16
  } catch (f) {
17
17
  const i = f instanceof Error ? f : new Error("Unknown error occurred");
18
- r(i), console.error("Failed to fetch seat map config:", i);
18
+ s(i), console.error("Failed to fetch seat map config:", i);
19
19
  } finally {
20
20
  u(!1);
21
21
  }
22
22
  }
23
23
  };
24
- return T(() => {
25
- S();
24
+ return Y(() => {
25
+ x();
26
26
  }, [t]), {
27
27
  config: n,
28
- loading: o,
28
+ loading: r,
29
29
  error: l,
30
- refetch: S
30
+ refetch: x
31
31
  };
32
32
  }
33
- function pt(t) {
34
- const [n, s] = M({ width: 0, height: 0 });
35
- return T(() => {
36
- const o = t.current;
37
- if (!o) return;
38
- const { width: u, height: l } = o.getBoundingClientRect();
39
- u > 0 && l > 0 && s({ width: u, height: l });
40
- const r = new ResizeObserver((S) => {
41
- const f = S[0];
33
+ function yt(t) {
34
+ const [n, o] = R({ width: 0, height: 0 });
35
+ return Y(() => {
36
+ const r = t.current;
37
+ if (!r) return;
38
+ const { width: u, height: l } = r.getBoundingClientRect();
39
+ u > 0 && l > 0 && o({ width: u, height: l });
40
+ const s = new ResizeObserver((x) => {
41
+ const f = x[0];
42
42
  if (!f) return;
43
43
  const { width: i, height: a } = f.contentRect;
44
- i > 0 && a > 0 && s((d) => d.width === i && d.height === a ? d : { width: i, height: a });
44
+ i > 0 && a > 0 && o((d) => d.width === i && d.height === a ? d : { width: i, height: a });
45
45
  });
46
- return r.observe(o), () => {
47
- r.disconnect();
46
+ return s.observe(r), () => {
47
+ s.disconnect();
48
48
  };
49
49
  }, [t]), n;
50
50
  }
51
- function Ie(t, n) {
51
+ function De(t, n) {
52
52
  return Math.sqrt(Math.pow(n.x - t.x, 2) + Math.pow(n.y - t.y, 2));
53
53
  }
54
54
  function ke(t, n) {
@@ -57,43 +57,43 @@ function ke(t, n) {
57
57
  y: (t.y + n.y) / 2
58
58
  };
59
59
  }
60
- function gt(t, n) {
61
- const s = X(null), o = X(null), u = X(1);
62
- T(() => {
60
+ function bt(t, n) {
61
+ const o = T(null), r = T(null), u = T(1);
62
+ Y(() => {
63
63
  const l = t.current;
64
64
  if (!l || !n.enabled) return;
65
- const r = l.container(), S = (a) => {
65
+ const s = l.container(), x = (a) => {
66
66
  if (a.touches.length === 2) {
67
67
  a.preventDefault();
68
68
  const d = { x: a.touches[0].clientX, y: a.touches[0].clientY }, h = { x: a.touches[1].clientX, y: a.touches[1].clientY };
69
- s.current = Ie(d, h), o.current = ke(d, h), u.current = n.currentScale;
69
+ o.current = De(d, h), r.current = ke(d, h), u.current = n.currentScale;
70
70
  }
71
71
  }, f = (a) => {
72
72
  if (a.touches.length !== 2) return;
73
73
  a.preventDefault();
74
- const d = { x: a.touches[0].clientX, y: a.touches[0].clientY }, h = { x: a.touches[1].clientX, y: a.touches[1].clientY }, x = Ie(d, h), m = ke(d, h);
75
- if (s.current !== null && o.current !== null) {
76
- const C = x / s.current, R = Math.min(
74
+ const d = { x: a.touches[0].clientX, y: a.touches[0].clientY }, h = { x: a.touches[1].clientX, y: a.touches[1].clientY }, m = De(d, h), S = ke(d, h);
75
+ if (o.current !== null && r.current !== null) {
76
+ const C = m / o.current, F = Math.min(
77
77
  Math.max(n.currentScale * C, n.minScale),
78
78
  n.maxScale
79
- ), E = r.getBoundingClientRect(), I = m.x - E.left, L = m.y - E.top, W = n.currentScale, P = {
80
- x: (I - n.currentPosition.x) / W,
81
- y: (L - n.currentPosition.y) / W
82
- }, H = m.x - o.current.x, j = m.y - o.current.y, $ = {
83
- x: I - P.x * R + H,
84
- y: L - P.y * R + j
79
+ ), I = s.getBoundingClientRect(), M = S.x - I.left, L = S.y - I.top, z = n.currentScale, X = {
80
+ x: (M - n.currentPosition.x) / z,
81
+ y: (L - n.currentPosition.y) / z
82
+ }, q = S.x - r.current.x, j = S.y - r.current.y, Z = {
83
+ x: M - X.x * F + q,
84
+ y: L - X.y * F + j
85
85
  };
86
- n.onScaleChange(R, $), s.current = x, o.current = m;
86
+ n.onScaleChange(F, Z), o.current = m, r.current = S;
87
87
  }
88
88
  }, i = (a) => {
89
- a.touches.length < 2 && (s.current = null, o.current = null);
89
+ a.touches.length < 2 && (o.current = null, r.current = null);
90
90
  };
91
- return r.addEventListener("touchstart", S, { passive: !1 }), r.addEventListener("touchmove", f, { passive: !1 }), r.addEventListener("touchend", i), () => {
92
- r.removeEventListener("touchstart", S), r.removeEventListener("touchmove", f), r.removeEventListener("touchend", i);
91
+ return s.addEventListener("touchstart", x, { passive: !1 }), s.addEventListener("touchmove", f, { passive: !1 }), s.addEventListener("touchend", i), () => {
92
+ s.removeEventListener("touchstart", x), s.removeEventListener("touchmove", f), s.removeEventListener("touchend", i);
93
93
  };
94
94
  }, [t, n]);
95
95
  }
96
- const bt = {
96
+ const vt = {
97
97
  canvasBackground: "#1a1a1a",
98
98
  stageColor: "#808080",
99
99
  seatAvailable: "#2C2B30",
@@ -103,25 +103,25 @@ const bt = {
103
103
  seatHidden: "#4a4a4a",
104
104
  gridLines: "#404040",
105
105
  currency: "KD"
106
- }, Te = se(({ seat: t, state: n, colors: s, onClick: o, onMouseEnter: u, onMouseLeave: l }) => {
106
+ }, Xe = ce(({ seat: t, state: n, colors: o, onClick: r, onMouseEnter: u, onMouseLeave: l }) => {
107
107
  const f = {
108
- available: s.seatAvailable,
109
- reserved: s.seatReserved,
110
- selected: s.seatSelected,
111
- unavailable: s.seatUnavailable,
112
- hidden: s.seatHidden
108
+ available: o.seatAvailable,
109
+ reserved: o.seatReserved,
110
+ selected: o.seatSelected,
111
+ unavailable: o.seatUnavailable,
112
+ hidden: o.seatHidden
113
113
  // Hidden seats are filtered out, but included for type safety
114
114
  }[n], i = n === "available" || n === "selected", a = N(() => {
115
- i && o(t);
116
- }, [t, o, i]), d = N((m) => {
117
- u(t, m);
118
- const C = m.target.getStage();
115
+ i && r(t);
116
+ }, [t, r, i]), d = N((S) => {
117
+ u(t, S);
118
+ const C = S.target.getStage();
119
119
  C && i && (C.container().style.cursor = "pointer");
120
- }, [t, u, i]), h = N((m) => {
120
+ }, [t, u, i]), h = N((S) => {
121
121
  l();
122
- const C = m.target.getStage();
122
+ const C = S.target.getStage();
123
123
  C && (C.container().style.cursor = "grab");
124
- }, [l]), x = {
124
+ }, [l]), m = {
125
125
  x: t.position.x,
126
126
  y: t.position.y,
127
127
  fill: f,
@@ -132,16 +132,16 @@ const bt = {
132
132
  onMouseEnter: d,
133
133
  onMouseLeave: h
134
134
  };
135
- return t.shape === "circle" ? /* @__PURE__ */ b(
136
- dt,
135
+ return t.shape === "circle" ? /* @__PURE__ */ y(
136
+ ht,
137
137
  {
138
- ...x,
138
+ ...m,
139
139
  radius: 12
140
140
  }
141
- ) : /* @__PURE__ */ b(
142
- De,
141
+ ) : /* @__PURE__ */ y(
142
+ Te,
143
143
  {
144
- ...x,
144
+ ...m,
145
145
  width: 24,
146
146
  height: 24,
147
147
  offsetX: 12,
@@ -150,9 +150,9 @@ const bt = {
150
150
  }
151
151
  );
152
152
  });
153
- Te.displayName = "ViewerSeat";
154
- const Xe = se(({ stage: t, stageColor: n }) => {
155
- const s = (l) => ({
153
+ Xe.displayName = "ViewerSeat";
154
+ const Ye = ce(({ stage: t, stageColor: n }) => {
155
+ const o = (l) => ({
156
156
  stage: "🎭",
157
157
  table: "⬜",
158
158
  wall: "▬",
@@ -161,21 +161,21 @@ const Xe = se(({ stage: t, stageColor: n }) => {
161
161
  bar: "🍷",
162
162
  "entry-exit": "🚪",
163
163
  custom: "➕"
164
- })[l || "stage"] || "🎭", o = t.config.color || n, u = s(t.config.objectType);
165
- return /* @__PURE__ */ k(lt, { x: t.position.x, y: t.position.y, rotation: t.config.rotation || 0, children: [
166
- /* @__PURE__ */ b(
167
- De,
164
+ })[l || "stage"] || "🎭", r = t.config.color || n, u = o(t.config.objectType);
165
+ return /* @__PURE__ */ D(ut, { x: t.position.x, y: t.position.y, rotation: t.config.rotation || 0, children: [
166
+ /* @__PURE__ */ y(
167
+ Te,
168
168
  {
169
169
  width: t.config.width,
170
170
  height: t.config.height,
171
- fill: o + "80",
171
+ fill: r + "80",
172
172
  stroke: "#ffffff",
173
173
  strokeWidth: 2,
174
174
  cornerRadius: 10
175
175
  }
176
176
  ),
177
- /* @__PURE__ */ b(
178
- Fe,
177
+ /* @__PURE__ */ y(
178
+ Ie,
179
179
  {
180
180
  text: u,
181
181
  x: 0,
@@ -188,8 +188,8 @@ const Xe = se(({ stage: t, stageColor: n }) => {
188
188
  verticalAlign: "middle"
189
189
  }
190
190
  ),
191
- /* @__PURE__ */ b(
192
- Fe,
191
+ /* @__PURE__ */ y(
192
+ Ie,
193
193
  {
194
194
  text: t.config.label,
195
195
  x: 0,
@@ -205,18 +205,18 @@ const Xe = se(({ stage: t, stageColor: n }) => {
205
205
  )
206
206
  ] });
207
207
  });
208
- Xe.displayName = "ViewerStage";
209
- const Ye = se(({
208
+ Ye.displayName = "ViewerStage";
209
+ const je = ce(({
210
210
  floors: t,
211
211
  currentFloorId: n,
212
- onFloorChange: s,
213
- showAllOption: o,
212
+ onFloorChange: o,
213
+ showAllOption: r,
214
214
  allLabel: u,
215
215
  position: l,
216
- className: r
216
+ className: s
217
217
  }) => {
218
- const S = V(
219
- () => [...t].sort((h, x) => h.order - x.order),
218
+ const x = _(
219
+ () => [...t].sort((h, m) => h.order - m.order),
220
220
  [t]
221
221
  ), i = {
222
222
  position: "absolute",
@@ -251,21 +251,21 @@ const Ye = se(({
251
251
  backgroundColor: "#3A7DE5",
252
252
  borderColor: "#3A7DE5"
253
253
  };
254
- return /* @__PURE__ */ k("div", { className: r, style: i, children: [
255
- o && /* @__PURE__ */ b(
254
+ return /* @__PURE__ */ D("div", { className: s, style: i, children: [
255
+ r && /* @__PURE__ */ y(
256
256
  "button",
257
257
  {
258
258
  type: "button",
259
- onClick: () => s(null),
259
+ onClick: () => o(null),
260
260
  style: n === null ? d : a,
261
261
  children: u
262
262
  }
263
263
  ),
264
- S.map((h) => /* @__PURE__ */ b(
264
+ x.map((h) => /* @__PURE__ */ y(
265
265
  "button",
266
266
  {
267
267
  type: "button",
268
- onClick: () => s(h.id),
268
+ onClick: () => o(h.id),
269
269
  style: n === h.id ? d : a,
270
270
  children: h.name
271
271
  },
@@ -273,15 +273,15 @@ const Ye = se(({
273
273
  ))
274
274
  ] });
275
275
  });
276
- Ye.displayName = "FloorSelectorBar";
277
- const je = se(({
276
+ je.displayName = "FloorSelectorBar";
277
+ const We = ce(({
278
278
  scale: t,
279
279
  minScale: n,
280
- maxScale: s,
281
- onZoomIn: o,
280
+ maxScale: o,
281
+ onZoomIn: r,
282
282
  onZoomOut: u,
283
283
  position: l,
284
- className: r
284
+ className: s
285
285
  }) => {
286
286
  const f = {
287
287
  position: "absolute",
@@ -320,20 +320,20 @@ const je = se(({
320
320
  ...i,
321
321
  opacity: 0.4,
322
322
  cursor: "not-allowed"
323
- }, d = t < s, h = t > n;
324
- return /* @__PURE__ */ k("div", { className: r, style: f, children: [
325
- /* @__PURE__ */ b(
323
+ }, d = t < o, h = t > n;
324
+ return /* @__PURE__ */ D("div", { className: s, style: f, children: [
325
+ /* @__PURE__ */ y(
326
326
  "button",
327
327
  {
328
328
  type: "button",
329
- onClick: o,
329
+ onClick: r,
330
330
  disabled: !d,
331
331
  style: d ? i : a,
332
332
  title: "Zoom In",
333
333
  children: "+"
334
334
  }
335
335
  ),
336
- /* @__PURE__ */ b(
336
+ /* @__PURE__ */ y(
337
337
  "button",
338
338
  {
339
339
  type: "button",
@@ -346,20 +346,20 @@ const je = se(({
346
346
  )
347
347
  ] });
348
348
  });
349
- je.displayName = "ZoomControls";
350
- const Ae = se(({
349
+ We.displayName = "ZoomControls";
350
+ const Pe = ce(({
351
351
  visible: t,
352
352
  x: n,
353
- y: s,
354
- seat: o,
353
+ y: o,
354
+ seat: r,
355
355
  currency: u,
356
356
  state: l
357
357
  }) => {
358
- if (!t || !o) return null;
359
- const r = o.seatNumber || (o.rowLabel && o.columnLabel ? `${o.rowLabel}-${o.columnLabel}` : "N/A"), S = {
358
+ if (!t || !r) return null;
359
+ const s = r.seatNumber || (r.rowLabel && r.columnLabel ? `${r.rowLabel}-${r.columnLabel}` : "N/A"), x = {
360
360
  position: "fixed",
361
361
  left: `${n + 15}px`,
362
- top: `${s + 15}px`,
362
+ top: `${o + 15}px`,
363
363
  zIndex: 1e3,
364
364
  pointerEvents: "none"
365
365
  }, f = {
@@ -385,468 +385,482 @@ const Ae = se(({
385
385
  textTransform: "capitalize",
386
386
  marginTop: "4px"
387
387
  };
388
- return /* @__PURE__ */ b("div", { style: S, children: /* @__PURE__ */ k("div", { style: f, children: [
389
- o.sectionName && /* @__PURE__ */ k("div", { style: { marginBottom: "4px" }, children: [
390
- /* @__PURE__ */ b("span", { style: i, children: "Section:" }),
391
- /* @__PURE__ */ b("span", { style: { ...a, color: "#3b82f6" }, children: o.sectionName })
388
+ return /* @__PURE__ */ y("div", { style: x, children: /* @__PURE__ */ D("div", { style: f, children: [
389
+ r.sectionName && /* @__PURE__ */ D("div", { style: { marginBottom: "4px" }, children: [
390
+ /* @__PURE__ */ y("span", { style: i, children: "Section:" }),
391
+ /* @__PURE__ */ y("span", { style: { ...a, color: "#3b82f6" }, children: r.sectionName })
392
392
  ] }),
393
- /* @__PURE__ */ k("div", { style: { marginBottom: "4px" }, children: [
394
- /* @__PURE__ */ b("span", { style: i, children: "Seat:" }),
395
- /* @__PURE__ */ b("span", { style: a, children: r })
393
+ /* @__PURE__ */ D("div", { style: { marginBottom: "4px" }, children: [
394
+ /* @__PURE__ */ y("span", { style: i, children: "Seat:" }),
395
+ /* @__PURE__ */ y("span", { style: a, children: s })
396
396
  ] }),
397
- o.price !== void 0 && o.price > 0 && l === "available" && /* @__PURE__ */ k("div", { style: { marginBottom: "4px" }, children: [
398
- /* @__PURE__ */ b("span", { style: i, children: "Price:" }),
399
- /* @__PURE__ */ k("span", { style: d, children: [
397
+ r.price !== void 0 && r.price > 0 && l === "available" && /* @__PURE__ */ D("div", { style: { marginBottom: "4px" }, children: [
398
+ /* @__PURE__ */ y("span", { style: i, children: "Price:" }),
399
+ /* @__PURE__ */ D("span", { style: d, children: [
400
400
  u,
401
401
  " ",
402
- o.price.toFixed(2)
402
+ r.price.toFixed(2)
403
403
  ] })
404
404
  ] }),
405
- /* @__PURE__ */ k("div", { style: h, children: [
405
+ /* @__PURE__ */ D("div", { style: h, children: [
406
406
  "Status: ",
407
407
  l
408
408
  ] })
409
409
  ] }) });
410
410
  });
411
- Ae.displayName = "SeatTooltip";
412
- const Mt = ({
411
+ Pe.displayName = "SeatTooltip";
412
+ const Et = ({
413
413
  config: t,
414
414
  configUrl: n,
415
- floorId: s,
416
- onFloorChange: o,
415
+ floorId: o,
416
+ onFloorChange: r,
417
417
  reservedSeats: u = [],
418
418
  unavailableSeats: l = [],
419
- selectedSeats: r,
420
- myReservedSeats: S = [],
419
+ selectedSeats: s,
420
+ myReservedSeats: x = [],
421
421
  onSeatSelect: f,
422
422
  onSeatDeselect: i,
423
423
  onSelectionChange: a,
424
424
  colorOverrides: d,
425
425
  showTooltip: h = !0,
426
- zoomEnabled: x = !0,
427
- className: m = "",
426
+ zoomEnabled: m = !0,
427
+ className: S = "",
428
428
  onConfigLoad: C,
429
- onError: R,
429
+ onError: F,
430
430
  // Floor selector props
431
- showFloorSelector: E,
432
- floorSelectorPosition: I = "top-left",
431
+ showFloorSelector: I,
432
+ floorSelectorPosition: M = "top-left",
433
433
  floorSelectorClassName: L,
434
- showAllFloorsOption: W = !0,
435
- allFloorsLabel: P = "All",
436
- fitToView: H = !0,
434
+ showAllFloorsOption: z = !0,
435
+ allFloorsLabel: X = "All",
436
+ fitToView: q = !0,
437
437
  fitPadding: j = 40,
438
438
  // Zoom controls
439
- showZoomControls: $ = !0,
440
- zoomControlsPosition: ae = "bottom-right",
441
- zoomControlsClassName: Ce,
442
- minZoom: O,
443
- maxZoom: A = 3,
439
+ showZoomControls: Z = !0,
440
+ zoomControlsPosition: P = "bottom-right",
441
+ zoomControlsClassName: K,
442
+ minZoom: le,
443
+ maxZoom: $ = 3,
444
444
  zoomStep: B = 0.25,
445
445
  // Touch gestures
446
- touchEnabled: ge = !0
446
+ touchEnabled: Me = !0
447
447
  }) => {
448
- const J = X(null), ce = X(null), F = pt(ce), [G, Me] = M(/* @__PURE__ */ new Set()), [D, Q] = M(1), [z, _] = M({ x: 0, y: 0 }), [We, Pe] = M(null), [$e, Be] = M(1), le = X({ width: 0, height: 0 }), [ee, Re] = M({ visible: !1, x: 0, y: 0, seat: null, state: "available" }), { config: Ue, loading: Ve, error: te } = ft(n), p = t || Ue, be = s !== void 0, Y = be ? s || null : We, de = r !== void 0, He = N((e) => {
449
- be || Pe(e), o?.(e);
450
- }, [be, o]), ye = p?.floors || [], Oe = E !== void 0 ? E : ye.length > 1, ue = V(
451
- () => p ? { ...p.colors, ...d } : { ...bt, ...d },
452
- [p, d]
453
- ), Z = V(() => {
454
- if (!p) return [];
455
- let e = p.seats.filter((c) => c.state !== "hidden");
456
- return Y && (e = e.filter(
457
- (c) => c.floorId === Y || !c.floorId && Y === "floor_default"
448
+ const O = T(null), V = T(null), E = yt(V), [U, ye] = R(/* @__PURE__ */ new Set()), [k, te] = R(1), [A, G] = R({ x: 0, y: 0 }), [$e, Be] = R(null), [Oe, Ue] = R(1), de = T({ width: 0, height: 0 }), [ne, Ee] = R({ visible: !1, x: 0, y: 0, seat: null, state: "available" }), { config: Ve, loading: He, error: re } = pt(n), g = t || Ve, be = o !== void 0, W = be ? o || null : $e, ue = s !== void 0, _e = N((e) => {
449
+ be || Be(e), r?.(e);
450
+ }, [be, r]), ve = g?.floors || [], qe = I !== void 0 ? I : ve.length > 1, he = _(
451
+ () => g ? { ...g.colors, ...d } : { ...vt, ...d },
452
+ [g, d]
453
+ ), Q = _(() => {
454
+ if (!g) return [];
455
+ let e = g.seats.filter((c) => c.state !== "hidden");
456
+ return W && (e = e.filter(
457
+ (c) => c.floorId === W || !c.floorId && W === "floor_default"
458
458
  )), e;
459
- }, [p, Y]), he = V(() => p?.stages ? Y ? p.stages.filter(
460
- (e) => e.floorId === Y || !e.floorId && Y === "floor_default"
461
- ) : p.stages : [], [p, Y]), U = V(() => {
462
- if (!p || Z.length === 0 && he.length === 0)
459
+ }, [g, W]), fe = _(() => g?.stages ? W ? g.stages.filter(
460
+ (e) => e.floorId === W || !e.floorId && W === "floor_default"
461
+ ) : g.stages : [], [g, W]), H = _(() => {
462
+ if (!g || Q.length === 0 && fe.length === 0)
463
463
  return null;
464
464
  const e = 12;
465
- let c = 1 / 0, g = 1 / 0, y = -1 / 0, v = -1 / 0;
466
- return Z.forEach((w) => {
467
- c = Math.min(c, w.position.x - e), g = Math.min(g, w.position.y - e), y = Math.max(y, w.position.x + e), v = Math.max(v, w.position.y + e);
468
- }), he.forEach((w) => {
469
- c = Math.min(c, w.position.x), g = Math.min(g, w.position.y), y = Math.max(y, w.position.x + (w.config?.width || 200)), v = Math.max(v, w.position.y + (w.config?.height || 100));
470
- }), { minX: c, minY: g, maxX: y, maxY: v, width: y - c, height: v - g };
471
- }, [p, Z, he]);
472
- T(() => {
473
- if (!H || !p || !U || F.width === 0 || F.height === 0) return;
474
- const e = Math.abs(F.width - le.current.width), c = Math.abs(F.height - le.current.height);
475
- if (!(le.current.width === 0) && e < 10 && c < 10) return;
476
- le.current = F;
477
- const y = F.width, v = F.height, w = y - j * 2, re = v - j * 2, fe = w / U.width, me = re / U.height, pe = Math.min(fe, me, A), nt = U.minX + U.width / 2, ot = U.minY + U.height / 2, rt = y / 2, it = v / 2, st = rt - nt * pe, at = it - ot * pe;
478
- Q(pe), _({ x: st, y: at }), Be(pe);
479
- }, [H, p, U, j, A, F, Y]);
480
- const q = V(() => {
481
- const e = new Set(u), c = new Set(l), g = new Set(S);
482
- return { reserved: e, unavailable: c, myReserved: g };
483
- }, [u, l, S]), ve = V(() => r ? new Set(r) : null, [r]), ne = N((e) => {
484
- const c = e.id, g = e.seatNumber || "";
485
- return q.unavailable.has(c) || q.unavailable.has(g) ? "unavailable" : q.reserved.has(c) || q.reserved.has(g) ? "reserved" : q.myReserved.has(c) || q.myReserved.has(g) || G.has(c) ? "selected" : e.state;
486
- }, [q, G]);
487
- T(() => {
488
- p && C && C(p);
489
- }, [p, C]), T(() => {
490
- te && R && R(te);
491
- }, [te, R]), T(() => {
492
- de && ve && Me(ve);
493
- }, [de, ve]);
494
- const _e = N((e) => {
495
- const c = ne(e);
465
+ let c = 1 / 0, p = 1 / 0, b = -1 / 0, v = -1 / 0;
466
+ return Q.forEach((w) => {
467
+ c = Math.min(c, w.position.x - e), p = Math.min(p, w.position.y - e), b = Math.max(b, w.position.x + e), v = Math.max(v, w.position.y + e);
468
+ }), fe.forEach((w) => {
469
+ c = Math.min(c, w.position.x), p = Math.min(p, w.position.y), b = Math.max(b, w.position.x + (w.config?.width || 200)), v = Math.max(v, w.position.y + (w.config?.height || 100));
470
+ }), { minX: c, minY: p, maxX: b, maxY: v, width: b - c, height: v - p };
471
+ }, [g, Q, fe]);
472
+ Y(() => {
473
+ if (!q || !g || !H || E.width === 0 || E.height === 0) return;
474
+ const e = Math.abs(E.width - de.current.width), c = Math.abs(E.height - de.current.height);
475
+ if (!(de.current.width === 0) && e < 10 && c < 10) return;
476
+ de.current = E;
477
+ const b = E.width, v = E.height, w = b - j * 2, se = v - j * 2, ge = w / H.width, xe = se / H.height, pe = Math.min(ge, xe, $), ot = H.minX + H.width / 2, it = H.minY + H.height / 2, st = b / 2, at = v / 2, ct = st - ot * pe, lt = at - it * pe;
478
+ te(pe), G({ x: ct, y: lt }), Ue(pe);
479
+ }, [q, g, H, j, $, E, W]);
480
+ const J = _(() => {
481
+ const e = new Set(u), c = new Set(l), p = new Set(x);
482
+ return { reserved: e, unavailable: c, myReserved: p };
483
+ }, [u, l, x]), me = _(() => s ? new Set(s) : null, [s]), oe = N((e) => {
484
+ const c = e.id, p = e.seatNumber || "";
485
+ return J.unavailable.has(c) || J.unavailable.has(p) ? "unavailable" : J.reserved.has(c) || J.reserved.has(p) ? "reserved" : J.myReserved.has(c) || J.myReserved.has(p) || U.has(c) ? "selected" : e.state;
486
+ }, [J, U]);
487
+ Y(() => {
488
+ g && C && C(g);
489
+ }, [g, C]), Y(() => {
490
+ re && F && F(re);
491
+ }, [re, F]), Y(() => {
492
+ ue && me && ye(me);
493
+ }, [ue, me]);
494
+ const Ge = N((e) => {
495
+ const c = oe(e);
496
496
  if (c !== "available" && c !== "selected")
497
497
  return;
498
- const g = G.has(e.id);
499
- de || Me((y) => {
500
- const v = new Set(y);
501
- return g ? v.delete(e.id) : v.add(e.id), v;
502
- }), g ? i?.(e) : (f?.(e), f || console.log("Seat selected:", e));
503
- }, [ne, G, de, f, i]), oe = V(() => p ? Z.filter((e) => G.has(e.id)) : [], [Z, G]);
504
- T(() => {
505
- a?.(oe);
506
- }, [oe, a]);
507
- const K = O !== void 0 ? O : $e, qe = N(() => {
508
- if (!x) return;
509
- const e = Math.min(D + B, A);
510
- if (e !== D) {
511
- const c = F.width || p?.canvas.width || 800, g = F.height || p?.canvas.height || 600, y = c / 2, v = g / 2, w = {
512
- x: (y - z.x) / D,
513
- y: (v - z.y) / D
498
+ const p = U.has(e.id);
499
+ ue || ye((b) => {
500
+ const v = new Set(b);
501
+ return p ? v.delete(e.id) : v.add(e.id), v;
502
+ }), p ? i?.(e) : (f?.(e), f || console.log("Seat selected:", e));
503
+ }, [oe, U, ue, f, i]), ie = _(() => g ? Q.filter((e) => U.has(e.id)) : [], [Q, U]);
504
+ Y(() => {
505
+ a?.(ie);
506
+ }, [ie, a]);
507
+ const ee = le !== void 0 ? le : Oe, Je = N(() => {
508
+ if (!m) return;
509
+ const e = Math.min(k + B, $);
510
+ if (e !== k) {
511
+ const c = E.width || g?.canvas.width || 800, p = E.height || g?.canvas.height || 600, b = c / 2, v = p / 2, w = {
512
+ x: (b - A.x) / k,
513
+ y: (v - A.y) / k
514
514
  };
515
- Q(e), _({
516
- x: y - w.x * e,
515
+ te(e), G({
516
+ x: b - w.x * e,
517
517
  y: v - w.y * e
518
518
  });
519
519
  }
520
- }, [x, D, B, A, F, p, z]), Ge = N(() => {
521
- if (!x) return;
522
- const e = Math.max(D - B, K);
523
- if (e !== D) {
524
- const c = F.width || p?.canvas.width || 800, g = F.height || p?.canvas.height || 600, y = c / 2, v = g / 2, w = {
525
- x: (y - z.x) / D,
526
- y: (v - z.y) / D
520
+ }, [m, k, B, $, E, g, A]), Ze = N(() => {
521
+ if (!m) return;
522
+ const e = Math.max(k - B, ee);
523
+ if (e !== k) {
524
+ const c = E.width || g?.canvas.width || 800, p = E.height || g?.canvas.height || 600, b = c / 2, v = p / 2, w = {
525
+ x: (b - A.x) / k,
526
+ y: (v - A.y) / k
527
527
  };
528
- Q(e), _({
529
- x: y - w.x * e,
528
+ te(e), G({
529
+ x: b - w.x * e,
530
530
  y: v - w.y * e
531
531
  });
532
532
  }
533
- }, [x, D, B, K, F, p, z]), Ze = N((e) => {
534
- _({
533
+ }, [m, k, B, ee, E, g, A]), Ke = N((e) => {
534
+ G({
535
535
  x: e.target.x(),
536
536
  y: e.target.y()
537
537
  });
538
- }, []), Ke = N((e) => {
539
- if (!x) return;
538
+ }, []), Qe = N((e) => {
539
+ if (!m) return;
540
540
  e.evt.preventDefault();
541
- const c = J.current;
541
+ const c = O.current;
542
542
  if (!c) return;
543
- const g = c.scaleX(), y = c.getPointerPosition();
544
- if (!y) return;
545
- const v = 1.1, w = e.evt.deltaY > 0 ? g / v : g * v, re = Math.min(Math.max(w, K), A), fe = {
546
- x: (y.x - z.x) / g,
547
- y: (y.y - z.y) / g
548
- }, me = {
549
- x: y.x - fe.x * re,
550
- y: y.y - fe.y * re
543
+ const p = c.scaleX(), b = c.getPointerPosition();
544
+ if (!b) return;
545
+ const v = 1.1, w = e.evt.deltaY > 0 ? p / v : p * v, se = Math.min(Math.max(w, ee), $), ge = {
546
+ x: (b.x - A.x) / p,
547
+ y: (b.y - A.y) / p
548
+ }, xe = {
549
+ x: b.x - ge.x * se,
550
+ y: b.y - ge.y * se
551
551
  };
552
- Q(re), _(me);
553
- }, [x, z, K, A]);
554
- gt(J, {
555
- enabled: ge && x,
556
- minScale: K,
557
- maxScale: A,
558
- currentScale: D,
559
- currentPosition: z,
552
+ te(se), G(xe);
553
+ }, [m, A, ee, $]);
554
+ bt(O, {
555
+ enabled: Me && m,
556
+ minScale: ee,
557
+ maxScale: $,
558
+ currentScale: k,
559
+ currentPosition: A,
560
560
  onScaleChange: (e, c) => {
561
- Q(e), _(c);
561
+ te(e), G(c);
562
562
  },
563
563
  onPositionChange: (e) => {
564
- _(e);
564
+ G(e);
565
565
  }
566
566
  });
567
- const Je = N((e, c) => {
567
+ const et = N((e, c) => {
568
568
  if (!h) return;
569
- const g = c.target.getStage();
570
- if (!g) return;
571
- const y = g.getPointerPosition();
572
- if (!y) return;
573
- const v = g.container().getBoundingClientRect();
574
- Re({
569
+ const p = c.target.getStage();
570
+ if (!p) return;
571
+ const b = p.getPointerPosition();
572
+ if (!b) return;
573
+ const v = p.container().getBoundingClientRect();
574
+ Ee({
575
575
  visible: !0,
576
- x: v.left + y.x,
577
- y: v.top + y.y,
576
+ x: v.left + b.x,
577
+ y: v.top + b.y,
578
578
  seat: e,
579
- state: ne(e)
579
+ state: oe(e)
580
580
  });
581
- }, [h, ne]), Qe = N(() => {
582
- Re((e) => ({ ...e, visible: !1 }));
581
+ }, [h, oe]), tt = N(() => {
582
+ Ee((e) => ({ ...e, visible: !1 }));
583
583
  }, []);
584
- if (Ve)
585
- return /* @__PURE__ */ b("div", { className: `flex items-center justify-center h-full ${m}`, children: /* @__PURE__ */ b("p", { children: "Loading seat map..." }) });
586
- if (te)
587
- return /* @__PURE__ */ b("div", { className: `flex items-center justify-center h-full ${m}`, children: /* @__PURE__ */ k("p", { className: "text-red-500", children: [
584
+ if (He)
585
+ return /* @__PURE__ */ y("div", { className: `flex items-center justify-center h-full ${S}`, children: /* @__PURE__ */ y("p", { children: "Loading seat map..." }) });
586
+ if (re)
587
+ return /* @__PURE__ */ y("div", { className: `flex items-center justify-center h-full ${S}`, children: /* @__PURE__ */ D("p", { className: "text-red-500", children: [
588
588
  "Error loading seat map: ",
589
- te.message
589
+ re.message
590
590
  ] }) });
591
- if (!p)
592
- return /* @__PURE__ */ b("div", { className: `flex items-center justify-center h-full ${m}`, children: /* @__PURE__ */ b("p", { children: "No configuration provided" }) });
593
- const et = F.width || p.canvas.width, tt = F.height || p.canvas.height;
594
- return /* @__PURE__ */ k(
591
+ if (!g)
592
+ return /* @__PURE__ */ y("div", { className: `flex items-center justify-center h-full ${S}`, children: /* @__PURE__ */ y("p", { children: "No configuration provided" }) });
593
+ const nt = E.width || g.canvas.width, rt = E.height || g.canvas.height;
594
+ return /* @__PURE__ */ D(
595
595
  "div",
596
596
  {
597
- ref: ce,
598
- className: `relative ${m}`,
597
+ ref: V,
598
+ className: `relative ${S}`,
599
599
  style: { width: "100%", height: "100%" },
600
600
  children: [
601
- Oe && ye.length > 0 && /* @__PURE__ */ b(
602
- Ye,
601
+ qe && ve.length > 0 && /* @__PURE__ */ y(
602
+ je,
603
603
  {
604
- floors: ye,
605
- currentFloorId: Y,
606
- onFloorChange: He,
607
- showAllOption: W,
608
- allLabel: P,
609
- position: I,
604
+ floors: ve,
605
+ currentFloorId: W,
606
+ onFloorChange: _e,
607
+ showAllOption: z,
608
+ allLabel: X,
609
+ position: M,
610
610
  className: L
611
611
  }
612
612
  ),
613
- /* @__PURE__ */ k(
614
- ct,
613
+ /* @__PURE__ */ D(
614
+ dt,
615
615
  {
616
- ref: J,
617
- width: et,
618
- height: tt,
619
- scaleX: D,
620
- scaleY: D,
621
- x: z.x,
622
- y: z.y,
616
+ ref: O,
617
+ width: nt,
618
+ height: rt,
619
+ scaleX: k,
620
+ scaleY: k,
621
+ x: A.x,
622
+ y: A.y,
623
623
  draggable: !0,
624
- onDragEnd: Ze,
625
- onWheel: Ke,
626
- style: { backgroundColor: p.canvas.backgroundColor, cursor: "grab" },
624
+ onDragEnd: Ke,
625
+ onWheel: Qe,
626
+ style: { backgroundColor: g.canvas.backgroundColor, cursor: "grab" },
627
627
  children: [
628
- /* @__PURE__ */ b(Ee, { listening: !1, children: he.map((e) => /* @__PURE__ */ b(
629
- Xe,
628
+ /* @__PURE__ */ y(Fe, { listening: !1, children: fe.map((e) => /* @__PURE__ */ y(
629
+ Ye,
630
630
  {
631
631
  stage: e,
632
- stageColor: ue.stageColor
632
+ stageColor: he.stageColor
633
633
  },
634
634
  e.id
635
635
  )) }),
636
- /* @__PURE__ */ b(Ee, { children: Z.map((e) => /* @__PURE__ */ b(
637
- Te,
636
+ /* @__PURE__ */ y(Fe, { children: Q.map((e) => /* @__PURE__ */ y(
637
+ Xe,
638
638
  {
639
639
  seat: e,
640
- state: ne(e),
641
- colors: ue,
642
- onClick: _e,
643
- onMouseEnter: Je,
644
- onMouseLeave: Qe
640
+ state: oe(e),
641
+ colors: he,
642
+ onClick: Ge,
643
+ onMouseEnter: et,
644
+ onMouseLeave: tt
645
645
  },
646
646
  e.id
647
647
  )) })
648
648
  ]
649
649
  }
650
650
  ),
651
- h && /* @__PURE__ */ b(
652
- Ae,
651
+ h && /* @__PURE__ */ y(
652
+ Pe,
653
653
  {
654
- visible: ee.visible,
655
- x: ee.x,
656
- y: ee.y,
657
- seat: ee.seat,
658
- currency: ue.currency,
659
- state: ee.state
654
+ visible: ne.visible,
655
+ x: ne.x,
656
+ y: ne.y,
657
+ seat: ne.seat,
658
+ currency: he.currency,
659
+ state: ne.state
660
660
  }
661
661
  ),
662
- $ && x && /* @__PURE__ */ b(
663
- je,
662
+ Z && m && /* @__PURE__ */ y(
663
+ We,
664
664
  {
665
- scale: D,
666
- minScale: K,
667
- maxScale: A,
668
- onZoomIn: qe,
669
- onZoomOut: Ge,
670
- position: ae,
671
- className: Ce
665
+ scale: k,
666
+ minScale: ee,
667
+ maxScale: $,
668
+ onZoomIn: Je,
669
+ onZoomOut: Ze,
670
+ position: P,
671
+ className: K
672
672
  }
673
673
  ),
674
- oe.length > 0 && /* @__PURE__ */ k("div", { className: "absolute top-4 right-4 bg-white dark:bg-gray-800 p-4 rounded shadow-lg", children: [
675
- /* @__PURE__ */ k("h3", { className: "font-semibold mb-2", children: [
674
+ ie.length > 0 && /* @__PURE__ */ D("div", { className: "absolute top-4 right-4 bg-white dark:bg-gray-800 p-4 rounded shadow-lg", children: [
675
+ /* @__PURE__ */ D("h3", { className: "font-semibold mb-2", children: [
676
676
  "Selected Seats (",
677
- oe.length,
677
+ ie.length,
678
678
  ")"
679
679
  ] }),
680
- /* @__PURE__ */ b("div", { className: "max-h-48 overflow-y-auto space-y-1", children: oe.map((e) => /* @__PURE__ */ k("div", { className: "text-sm", children: [
680
+ /* @__PURE__ */ y("div", { className: "max-h-48 overflow-y-auto space-y-1", children: ie.map((e) => /* @__PURE__ */ D("div", { className: "text-sm", children: [
681
681
  e.seatNumber,
682
- e.price && ` - ${ue.currency} ${e.price.toFixed(2)}`
682
+ e.price && ` - ${he.currency} ${e.price.toFixed(2)}`
683
683
  ] }, e.id)) })
684
684
  ] })
685
685
  ]
686
686
  }
687
687
  );
688
688
  };
689
- let ie = null;
690
- function Rt(t) {
691
- ie = t;
689
+ let ae = null;
690
+ function Ft(t) {
691
+ ae = t;
692
692
  }
693
- function xe() {
694
- if (!ie)
693
+ function Ce() {
694
+ if (!ae)
695
695
  throw new Error(
696
696
  "Firebase database not initialized. Call initializeFirebaseForViewer(db) first."
697
697
  );
698
- return ie;
698
+ return ae;
699
+ }
700
+ function Re() {
701
+ return ae !== null;
699
702
  }
700
- function we() {
701
- return ie !== null;
703
+ function It() {
704
+ ae = null;
702
705
  }
703
- function Et() {
704
- ie = null;
706
+ function Se(t, n) {
707
+ if (t.length !== n.length) return !1;
708
+ for (let o = 0; o < t.length; o++)
709
+ if (t[o] !== n[o]) return !1;
710
+ return !0;
705
711
  }
706
712
  function Le(t, n) {
707
- const s = [], o = [], u = [];
708
- return Object.entries(t).forEach(([l, r]) => {
709
- r && typeof r == "object" && r.state && (r.state === "unavailable" ? u.push(l) : r.state === "reserved" && (n && r.userId === n ? s.push(l) : o.push(l)));
710
- }), { myReservedSeats: s, otherReservedSeats: o, unavailableSeats: u };
713
+ return Se(t.myReserved, n.myReserved) && Se(t.otherReserved, n.otherReserved) && Se(t.unavailable, n.unavailable);
711
714
  }
712
- function yt(t) {
713
- const { seatMapId: n, currentUserId: s, enabled: o = !0, onStateChange: u, onError: l } = t, [r, S] = M(null), [f, i] = M(!0), [a, d] = M(null), [h, x] = M(null), [m, C] = M([]), [R, E] = M([]), [I, L] = M([]), W = X(u), P = X(l), H = X(s);
714
- return W.current = u, P.current = l, H.current = s, T(() => {
715
- if (!o || !n) {
715
+ function Ne(t, n) {
716
+ const o = [], r = [], u = [];
717
+ return Object.entries(t).forEach(([l, s]) => {
718
+ s && typeof s == "object" && s.state && (s.state === "unavailable" ? u.push(l) : s.state === "reserved" && (n && s.userId === n ? o.push(l) : r.push(l)));
719
+ }), { myReserved: o, otherReserved: r, unavailable: u };
720
+ }
721
+ function mt(t) {
722
+ const { seatMapId: n, currentUserId: o, enabled: r = !0, onStateChange: u, onError: l } = t, [s, x] = R(null), [f, i] = R(!0), [a, d] = R(null), [h, m] = R(null), [S, C] = R([]), [F, I] = R([]), [M, L] = R([]), z = T(u), X = T(l), q = T(o);
723
+ z.current = u, X.current = l, q.current = o;
724
+ const j = T({
725
+ myReserved: [],
726
+ otherReserved: [],
727
+ unavailable: []
728
+ }), Z = T(null);
729
+ return Y(() => {
730
+ if (!r || !n) {
716
731
  i(!1);
717
732
  return;
718
733
  }
719
- if (!we()) {
734
+ if (!Re()) {
720
735
  i(!1), d(new Error("Firebase not initialized. Call initializeFirebaseForViewer first."));
721
736
  return;
722
737
  }
723
- const j = xe(), $ = Se(j, `seat_states/${n}`);
724
- return i(!0), d(null), Ne($, (O) => {
725
- const B = O.val() || {};
726
- S(B), i(!1), x(Date.now());
727
- const { myReservedSeats: ge, otherReservedSeats: J, unavailableSeats: ce } = Le(B, H.current);
728
- C(ge), E(J), L(ce), W.current?.(B);
729
- }, (O) => {
730
- d(O), i(!1), P.current?.(O);
738
+ const P = Ce(), K = we(P, `seat_states/${n}`);
739
+ return i(!0), d(null), ze(K, (B) => {
740
+ const O = B.val() || {}, V = Ne(O, q.current), E = j.current, U = JSON.stringify(Z.current) !== JSON.stringify(O);
741
+ U && (x(O), Z.current = O), i(!1), !Le(E, V) && (m(Date.now()), C(V.myReserved), I(V.otherReserved), L(V.unavailable), j.current = V), U && z.current?.(O);
742
+ }, (B) => {
743
+ d(B), i(!1), X.current?.(B);
731
744
  }), () => {
732
- ze($);
745
+ Ae(K);
733
746
  };
734
- }, [n, o]), T(() => {
735
- if (r) {
736
- const { myReservedSeats: j, otherReservedSeats: $, unavailableSeats: ae } = Le(r, s);
737
- C(j), E($), L(ae);
747
+ }, [n, r]), Y(() => {
748
+ if (s) {
749
+ const P = Ne(s, o), K = j.current;
750
+ !Le(K, P) && (C(P.myReserved), I(P.otherReserved), L(P.unavailable), j.current = P, m(Date.now()));
738
751
  }
739
- }, [s, r]), {
740
- states: r,
752
+ }, [o]), {
753
+ states: s,
741
754
  loading: f,
742
755
  error: a,
743
756
  lastUpdated: h,
744
- myReservedSeats: m,
745
- otherReservedSeats: R,
746
- unavailableSeats: I,
757
+ myReservedSeats: S,
758
+ otherReservedSeats: F,
759
+ unavailableSeats: M,
747
760
  // Legacy alias
748
- reservedSeats: R
761
+ reservedSeats: F
749
762
  };
750
763
  }
751
- function vt(t) {
764
+ function xt(t) {
752
765
  const {
753
766
  seatMapId: n,
754
- enabled: s = !0,
755
- subscribeToChanges: o = !1,
767
+ enabled: o = !0,
768
+ subscribeToChanges: r = !1,
756
769
  onConfigLoad: u,
757
770
  onError: l
758
- } = t, [r, S] = M(null), [f, i] = M(!0), [a, d] = M(null), h = X(u), x = X(l);
759
- h.current = u, x.current = l;
760
- const m = N(async () => {
771
+ } = t, [s, x] = R(null), [f, i] = R(!0), [a, d] = R(null), h = T(u), m = T(l);
772
+ h.current = u, m.current = l;
773
+ const S = N(async () => {
761
774
  if (!n) return;
762
- if (!we()) {
775
+ if (!Re()) {
763
776
  d(new Error("Firebase not initialized. Call initializeFirebaseForViewer first.")), i(!1);
764
777
  return;
765
778
  }
766
- const C = xe(), R = Se(C, `seatmaps/${n}`);
779
+ const C = Ce(), F = we(C, `seatmaps/${n}`);
767
780
  try {
768
781
  i(!0), d(null);
769
- const I = (await ut(R)).val();
770
- if (I) {
771
- const L = ht(I);
772
- S(L), h.current?.(L);
782
+ const M = (await ft(F)).val();
783
+ if (M) {
784
+ const L = gt(M);
785
+ x(L), h.current?.(L);
773
786
  } else
774
787
  d(new Error(`Seat map ${n} not found in Firebase`));
775
- } catch (E) {
776
- const I = E instanceof Error ? E : new Error("Unknown error");
777
- d(I), x.current?.(I);
788
+ } catch (I) {
789
+ const M = I instanceof Error ? I : new Error("Unknown error");
790
+ d(M), m.current?.(M);
778
791
  } finally {
779
792
  i(!1);
780
793
  }
781
794
  }, [n]);
782
- return T(() => {
783
- if (!s || !n) {
795
+ return Y(() => {
796
+ if (!o || !n) {
784
797
  i(!1);
785
798
  return;
786
799
  }
787
- if (m(), o && we()) {
788
- const C = xe(), R = Se(C, `seatmaps/${n}/meta/updated_at`);
789
- let E = !0;
790
- return Ne(R, (L) => {
791
- if (E) {
792
- E = !1;
800
+ if (S(), r && Re()) {
801
+ const C = Ce(), F = we(C, `seatmaps/${n}/meta/updated_at`);
802
+ let I = !0, M = null;
803
+ return ze(F, (z) => {
804
+ if (I) {
805
+ I = !1, M = z.val();
793
806
  return;
794
807
  }
795
- L.exists() && m();
808
+ const X = z.val();
809
+ z.exists() && X !== M && (M = X, S());
796
810
  }), () => {
797
- ze(R);
811
+ Ae(F);
798
812
  };
799
813
  }
800
- }, [n, s, o, m]), {
801
- config: r,
814
+ }, [n, o, r]), {
815
+ config: s,
802
816
  loading: f,
803
817
  error: a,
804
- refetch: m
818
+ refetch: S
805
819
  };
806
820
  }
807
- function Ft(t) {
821
+ function Dt(t) {
808
822
  const {
809
823
  seatMapId: n,
810
- userId: s,
811
- enabled: o = !0,
824
+ userId: o,
825
+ enabled: r = !0,
812
826
  subscribeToDesignChanges: u = !1,
813
827
  onConfigLoad: l,
814
- onStateChange: r,
815
- onError: S
828
+ onStateChange: s,
829
+ onError: x
816
830
  } = t, {
817
831
  config: f,
818
832
  loading: i,
819
833
  error: a,
820
834
  refetch: d
821
- } = vt({
835
+ } = xt({
822
836
  seatMapId: n,
823
- enabled: o,
837
+ enabled: r,
824
838
  subscribeToChanges: u,
825
839
  onConfigLoad: l,
826
- onError: S
840
+ onError: x
827
841
  }), {
828
842
  states: h,
829
- loading: x,
830
- error: m,
843
+ loading: m,
844
+ error: S,
831
845
  lastUpdated: C,
832
- myReservedSeats: R,
833
- otherReservedSeats: E,
834
- unavailableSeats: I,
846
+ myReservedSeats: F,
847
+ otherReservedSeats: I,
848
+ unavailableSeats: M,
835
849
  reservedSeats: L
836
- } = yt({
850
+ } = mt({
837
851
  seatMapId: n,
838
- currentUserId: s,
839
- enabled: o,
840
- onStateChange: r,
841
- onError: S
852
+ currentUserId: o,
853
+ enabled: r,
854
+ onStateChange: s,
855
+ onError: x
842
856
  });
843
857
  return {
844
858
  config: f,
845
- loading: i || x,
846
- error: a || m,
847
- myReservedSeats: R,
848
- otherReservedSeats: E,
849
- unavailableSeats: I,
859
+ loading: i || m,
860
+ error: a || S,
861
+ myReservedSeats: F,
862
+ otherReservedSeats: I,
863
+ unavailableSeats: M,
850
864
  reservedSeats: L,
851
865
  seatStates: h,
852
866
  lastUpdated: C,
@@ -854,15 +868,15 @@ function Ft(t) {
854
868
  };
855
869
  }
856
870
  export {
857
- bt as DEFAULT_COLORS,
858
- Mt as SeatMapViewer,
859
- Et as clearFirebaseInstance,
860
- Rt as initializeFirebaseForViewer,
861
- we as isFirebaseInitialized,
862
- ft as useConfigFetcher,
863
- pt as useContainerSize,
864
- vt as useFirebaseConfig,
865
- yt as useFirebaseSeatStates,
866
- Ft as useRealtimeSeatMap,
867
- gt as useTouchGestures
871
+ vt as DEFAULT_COLORS,
872
+ Et as SeatMapViewer,
873
+ It as clearFirebaseInstance,
874
+ Ft as initializeFirebaseForViewer,
875
+ Re as isFirebaseInitialized,
876
+ pt as useConfigFetcher,
877
+ yt as useContainerSize,
878
+ xt as useFirebaseConfig,
879
+ mt as useFirebaseSeatStates,
880
+ Dt as useRealtimeSeatMap,
881
+ bt as useTouchGestures
868
882
  };