@seatlayer/core 0.30.1 → 0.31.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.
@@ -104,7 +104,7 @@ interface Theme3D {
104
104
  * unreadable confetti.
105
105
  */
106
106
 
107
- type LabelKind = 'zone' | 'section' | 'annotation' | 'booth';
107
+ type LabelKind = 'zone' | 'section' | 'ga' | 'annotation' | 'booth' | 'row' | 'seat';
108
108
  interface SceneLabel {
109
109
  id: string;
110
110
  kind: LabelKind;
@@ -217,6 +217,23 @@ interface SceneZone {
217
217
  /** What this zone faces — its authored focal, else the venue's. */
218
218
  focalWorld: [number, number, number];
219
219
  }
220
+ /**
221
+ * One seated section, resolved for navigation — the middle rung of the venue
222
+ * ladder, between a zone and a seat. A chart with no zones authored still has
223
+ * sections, so this is the level at which every venue can be navigated.
224
+ */
225
+ interface SceneSection {
226
+ id: string;
227
+ /** Buyer-facing name, matching the section label. */
228
+ label: string;
229
+ seatCount: number;
230
+ /** World-metre centre of the section's seats (camera target). */
231
+ center: [number, number, number];
232
+ /** Half-diagonal of its seat footprint, world metres (camera fit). */
233
+ radius: number;
234
+ /** What this section faces — the camera approaches from this side. */
235
+ focalWorld: [number, number, number];
236
+ }
220
237
  /** A navigable floor — a logical level of the venue. */
221
238
  interface SceneFloor {
222
239
  index: number;
@@ -246,6 +263,8 @@ interface SceneModel {
246
263
  focalWorld: [number, number, number];
247
264
  /** The venue's zones, in authored order. Empty when the chart has none. */
248
265
  zones: SceneZone[];
266
+ /** Seated sections, in authored order — the navigable middle rung. */
267
+ sections: SceneSection[];
249
268
  /**
250
269
  * The venue's floors, in authored order. A single-floor chart reports one.
251
270
  *
@@ -367,6 +386,15 @@ interface Venue3DHandle {
367
386
  * means the seats face the camera rather than presenting their backs.
368
387
  */
369
388
  focusZone(zoneId: string): boolean;
389
+ /** The venue's seated sections (id, name, seat count) in authored order. */
390
+ sections(): SceneSection[];
391
+ /**
392
+ * Frame a section — the middle rung of the venue ladder, and the one every
393
+ * chart has. Zones are optional and a chart may author none or one; sections
394
+ * are what a buyer picks between when "which part of the venue" has already
395
+ * been answered. Returns false for an unknown or empty section.
396
+ */
397
+ focusSection(sectionId: string): boolean;
370
398
  /** The venue's floors (id, name, seat count) in authored order. */
371
399
  floors(): SceneFloor[];
372
400
  /**
@@ -104,7 +104,7 @@ interface Theme3D {
104
104
  * unreadable confetti.
105
105
  */
106
106
 
107
- type LabelKind = 'zone' | 'section' | 'annotation' | 'booth';
107
+ type LabelKind = 'zone' | 'section' | 'ga' | 'annotation' | 'booth' | 'row' | 'seat';
108
108
  interface SceneLabel {
109
109
  id: string;
110
110
  kind: LabelKind;
@@ -217,6 +217,23 @@ interface SceneZone {
217
217
  /** What this zone faces — its authored focal, else the venue's. */
218
218
  focalWorld: [number, number, number];
219
219
  }
220
+ /**
221
+ * One seated section, resolved for navigation — the middle rung of the venue
222
+ * ladder, between a zone and a seat. A chart with no zones authored still has
223
+ * sections, so this is the level at which every venue can be navigated.
224
+ */
225
+ interface SceneSection {
226
+ id: string;
227
+ /** Buyer-facing name, matching the section label. */
228
+ label: string;
229
+ seatCount: number;
230
+ /** World-metre centre of the section's seats (camera target). */
231
+ center: [number, number, number];
232
+ /** Half-diagonal of its seat footprint, world metres (camera fit). */
233
+ radius: number;
234
+ /** What this section faces — the camera approaches from this side. */
235
+ focalWorld: [number, number, number];
236
+ }
220
237
  /** A navigable floor — a logical level of the venue. */
221
238
  interface SceneFloor {
222
239
  index: number;
@@ -246,6 +263,8 @@ interface SceneModel {
246
263
  focalWorld: [number, number, number];
247
264
  /** The venue's zones, in authored order. Empty when the chart has none. */
248
265
  zones: SceneZone[];
266
+ /** Seated sections, in authored order — the navigable middle rung. */
267
+ sections: SceneSection[];
249
268
  /**
250
269
  * The venue's floors, in authored order. A single-floor chart reports one.
251
270
  *
@@ -367,6 +386,15 @@ interface Venue3DHandle {
367
386
  * means the seats face the camera rather than presenting their backs.
368
387
  */
369
388
  focusZone(zoneId: string): boolean;
389
+ /** The venue's seated sections (id, name, seat count) in authored order. */
390
+ sections(): SceneSection[];
391
+ /**
392
+ * Frame a section — the middle rung of the venue ladder, and the one every
393
+ * chart has. Zones are optional and a chart may author none or one; sections
394
+ * are what a buyer picks between when "which part of the venue" has already
395
+ * been answered. Returns false for an unknown or empty section.
396
+ */
397
+ focusSection(sectionId: string): boolean;
370
398
  /** The venue's floors (id, name, seat count) in authored order. */
371
399
  floors(): SceneFloor[];
372
400
  /**