@seatlayer/core 0.51.0 → 0.53.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.
Files changed (55) hide show
  1. package/LICENSE +16 -17
  2. package/README.md +8 -18
  3. package/dist/chunk-54A7LIL5.js +1 -0
  4. package/dist/chunk-IJI4WU57.js +1 -0
  5. package/dist/chunk-XPPT3OGQ.js +1 -0
  6. package/dist/core/seatConfidence.cjs +1 -76
  7. package/dist/core/seatConfidence.d.cts +1 -1
  8. package/dist/core/seatConfidence.d.ts +1 -1
  9. package/dist/core/seatConfidence.js +1 -51
  10. package/dist/de-75NWRKC5.js +1 -0
  11. package/dist/es-BM7EJ7PW.js +1 -0
  12. package/dist/fr-HPXQHIB4.js +1 -0
  13. package/dist/index.cjs +1 -12130
  14. package/dist/index.d.cts +169 -70
  15. package/dist/index.d.ts +169 -70
  16. package/dist/index.js +1 -9718
  17. package/dist/picker/minimapGeometry.cjs +1 -0
  18. package/dist/picker/minimapGeometry.d.cts +37 -0
  19. package/dist/picker/minimapGeometry.d.ts +37 -0
  20. package/dist/picker/minimapGeometry.js +1 -0
  21. package/dist/{types-DR54nqKL.d.cts → types-tLOunI-B.d.cts} +131 -1
  22. package/dist/{types-DR54nqKL.d.ts → types-tLOunI-B.d.ts} +131 -1
  23. package/dist/view/panoramaDelivery.cjs +1 -126
  24. package/dist/view/panoramaDelivery.js +1 -17
  25. package/dist/view3d/crossfade/panorama.cjs +1 -459
  26. package/dist/view3d/crossfade/panorama.d.cts +2 -4
  27. package/dist/view3d/crossfade/panorama.d.ts +2 -4
  28. package/dist/view3d/crossfade/panorama.js +1 -30
  29. package/dist/view3d/index.cjs +63 -6930
  30. package/dist/view3d/index.d.cts +82 -33
  31. package/dist/view3d/index.d.ts +82 -33
  32. package/dist/view3d/index.js +63 -6062
  33. package/package.json +15 -7
  34. package/dist/chunk-AZODENEL.js +0 -97
  35. package/dist/chunk-AZODENEL.js.map +0 -1
  36. package/dist/chunk-BE3F7CT3.js +0 -341
  37. package/dist/chunk-BE3F7CT3.js.map +0 -1
  38. package/dist/chunk-GD267BFB.js +0 -1496
  39. package/dist/chunk-GD267BFB.js.map +0 -1
  40. package/dist/core/seatConfidence.cjs.map +0 -1
  41. package/dist/core/seatConfidence.js.map +0 -1
  42. package/dist/de-V53JPFHN.js +0 -292
  43. package/dist/de-V53JPFHN.js.map +0 -1
  44. package/dist/es-37ISLCZA.js +0 -292
  45. package/dist/es-37ISLCZA.js.map +0 -1
  46. package/dist/fr-QKK2T64Q.js +0 -292
  47. package/dist/fr-QKK2T64Q.js.map +0 -1
  48. package/dist/index.cjs.map +0 -1
  49. package/dist/index.js.map +0 -1
  50. package/dist/view/panoramaDelivery.cjs.map +0 -1
  51. package/dist/view/panoramaDelivery.js.map +0 -1
  52. package/dist/view3d/crossfade/panorama.cjs.map +0 -1
  53. package/dist/view3d/crossfade/panorama.js.map +0 -1
  54. package/dist/view3d/index.cjs.map +0 -1
  55. package/dist/view3d/index.js.map +0 -1
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { a as RowObject, A as AccessibilityType, S as SeatOverride, b as SeatViewMetadata, L as LabelStyle, c as RectTableSide, C as ChartDoc, d as ChartObject, B as BoothObject, E as ExpandedSeat, T as TableObject, F as Floor, P as Point, e as SectionObject, f as RectTableSeatCounts, G as GAAreaObject, g as GAInventorySegment, h as RendererQualityEvidence, i as RenderedFreeTextEvidence, I as ISeatmapRenderer, j as RendererOptions, k as SeatStatus, l as RendererViewMode, m as LodRung, n as CategoryTier, o as SeatCommercialAttributes, p as RendererCallbacks } from './types-DR54nqKL.js';
2
- export { q as ACCESSIBILITY_RING_COLOR, r as ACCESSIBILITY_TYPES, s as AccessibilityMeta, t as AuthoringObjectState, u as CHART_STORAGE_KEY, v as Category, w as ChartReferenceImage, x as ChartTheme, y as CubicPath, D as DecorImageObject, z as LABEL_STYLE_MAX_SIZE, H as LABEL_STYLE_MIN_SIZE, J as LabelPresentation, O as ObjectEditorState, K as ReferenceAccessibilitySource, M as ReferenceCalibration, N as ReferenceCategorySource, Q as ReferenceDerivedScale, U as ReferenceInventoryExclusionSource, V as ReferenceInventorySource, W as ReferenceScanProposal, X as ReferenceScanRowProposal, Y as ReferenceScanSectionProposal, Z as ReferenceSeatSeed, _ as ReferenceSectionTraceBatchInput, $ as ReferenceSectionTraceBatchProposal, a0 as ReferenceSectionTraceInput, a1 as ReferenceSectionTraceProposal, a2 as RenderedBookableLabelEvidence, a3 as RenderedGAAreaEvidence, a4 as RenderedHierarchyLabelEvidence, a5 as RenderedLabelHiddenReason, R as ResolvedSeatConfidenceEvidence, a6 as SEAT_COMMERCIAL_MARKS, a7 as SURROUNDINGS_SHAPE_ROLES, a8 as SeatCommercialMark, a9 as SeatCommercialMeta, aa as SeatConfidenceCoverage, ab as SeatConfidenceEvidence, ac as SeatConfidenceModelLevel, ad as SeatConfidenceModeledTarget, ae as SeatConfidenceRealityLevel, af as SeatViewCoverage, ag as SectionOutlinePath, ah as SectionPathSegment, ai as SelectionLayer, aj as ShapeLineCap, ak as ShapeLineEnding, al as ShapeLineJoin, am as ShapeObject, an as TextAlignment, ao as TextBackground, ap as TextObject, aq as ZoneDef, ar as accessibilityMeta, as as accessibilityRingColor, at as layerOf, au as seatCommercialMeta } from './types-DR54nqKL.js';
1
+ import { a as RowObject, A as AccessibilityType, S as SeatOverride, b as SeatViewMetadata, L as LabelStyle, c as RectTableSide, C as ChartDoc, d as ChartObject, B as BoothObject, E as ExpandedSeat, T as TableObject, P as Point, F as Floor, e as SectionObject, f as RectTableSeatCounts, G as GAAreaObject, g as GAInventorySegment, h as RendererQualityEvidence, i as RenderedFreeTextEvidence, I as ISeatmapRenderer, j as RendererOptions, k as SeatStatus, l as RendererViewMode, m as RendererMinimapSnapshot, n as LodRung, o as CategoryTier, p as SeatCommercialAttributes, q as RendererCallbacks } from './types-tLOunI-B.js';
2
+ export { r as ACCESSIBILITY_RING_COLOR, s as ACCESSIBILITY_TYPES, t as AccessibilityMeta, u as AuthoringObjectState, v as CHART_STORAGE_KEY, w as Category, x as ChartLayoutConstraint, y as ChartReferenceImage, z as ChartTheme, D as CubicPath, H as DecorImageObject, J as LABEL_STYLE_MAX_SIZE, K as LABEL_STYLE_MIN_SIZE, M as LabelPresentation, O as ObjectEditorState, N as Physical3dEvidence, Q as RadialClearanceLayoutConstraint, U as ReferenceAccessibilitySource, V as ReferenceCalibration, W as ReferenceCategorySource, X as ReferenceDerivedScale, Y as ReferenceInventoryExclusionSource, Z as ReferenceInventorySource, _ as ReferenceScanProposal, $ as ReferenceScanRowProposal, a0 as ReferenceScanSectionProposal, a1 as ReferenceSeatSeed, a2 as ReferenceSectionTraceBatchInput, a3 as ReferenceSectionTraceBatchProposal, a4 as ReferenceSectionTraceInput, a5 as ReferenceSectionTraceProposal, a6 as RenderedBookableLabelEvidence, a7 as RenderedGAAreaEvidence, a8 as RenderedHierarchyLabelEvidence, a9 as RenderedLabelHiddenReason, aa as RenderedRowLabelEvidence, ab as RendererMinimapSeat, ac as RendererMinimapSection, R as ResolvedSeatConfidenceEvidence, ad as SEAT_COMMERCIAL_MARKS, ae as SURROUNDINGS_SHAPE_ROLES, af as SeatCommercialMark, ag as SeatCommercialMeta, ah as SeatConfidenceCoverage, ai as SeatConfidenceEvidence, aj as SeatConfidenceModelLevel, ak as SeatConfidenceModeledTarget, al as SeatConfidenceRealityLevel, am as SeatViewCoverage, an as SectionOutlinePath, ao as SectionPathSegment, ap as SelectionLayer, aq as ShapeLineCap, ar as ShapeLineEnding, as as ShapeLineJoin, at as ShapeObject, au as TextAlignment, av as TextBackground, aw as TextObject, ax as TicketTierApplicability, ay as TicketTierEvidence, az as TicketTierRestriction, aA as ZoneDef, aB as accessibilityMeta, aC as accessibilityRingColor, aD as layerOf, aE as seatCommercialMeta } from './types-tLOunI-B.js';
3
3
 
4
4
  /**
5
5
  * The segmented-row model — one logical row made of several physical rows.
@@ -165,6 +165,8 @@ declare function floorsOf(doc: ChartDoc): Floor[];
165
165
  declare function floorObjects(doc: ChartDoc, floorId?: string): ChartObject[];
166
166
  /** Every object across ALL floors — the whole venue (single-floor = `doc.objects`). */
167
167
  declare function allObjects(doc: ChartDoc): ChartObject[];
168
+ /** A copy of an object translated by (dx, dy) — every coordinate field shifted. */
169
+ declare function translateObject(o: ChartObject, dx: number, dy: number): ChartObject;
168
170
  /**
169
171
  * Multi-floor 3D stack (Batch 5): flatten every floor into ONE doc with floor `i`
170
172
  * lifted by `i * spread` in −y, so the isometric view shows the floors as stacked
@@ -172,6 +174,26 @@ declare function allObjects(doc: ChartDoc): ChartObject[];
172
174
  * only for the 3D overview render — 2D still shows one floor via `floorObjects`.
173
175
  */
174
176
  declare function stackFloors(doc: ChartDoc, spread?: number): ChartDoc;
177
+ /**
178
+ * Build the buyer-facing 2D overview of a multi-floor chart.
179
+ *
180
+ * Floors commonly reuse the same drawing origin (a balcony is authored over
181
+ * the stalls it overlooks). Flattening those source coordinates makes a valid
182
+ * import look corrupt because every level is painted on top of every other
183
+ * level. This projection packs complete floors into a compact, content-aware
184
+ * grid. Each floor receives one rigid translation: no seat, row, section,
185
+ * annotation, gap, or rotation changes, and the canonical document is never
186
+ * mutated.
187
+ */
188
+ declare function layoutFloorOverview(doc: ChartDoc): ChartDoc;
189
+ /**
190
+ * Rigid per-floor translations used by the buyer's complete-venue overview.
191
+ *
192
+ * Kept as a pure public helper so 2D and 3D can present the same non-overlapping
193
+ * level arrangement without either renderer rewriting the authored chart. A
194
+ * zero translation is returned for a single-floor document.
195
+ */
196
+ declare function floorOverviewTranslations(doc: ChartDoc): Point[];
175
197
  interface ExpandChartOptions {
176
198
  /** Physical height for a single-floor projection extracted from a multi-floor
177
199
  * document. Full multi-floor documents resolve each floor directly. */
@@ -437,16 +459,6 @@ interface RenderedQualityReport {
437
459
  */
438
460
  declare function inspectRenderedQualityEvidence(evidence: RendererQualityEvidence, state?: RenderedEvidenceState, targetCategoryKey?: string | null): RenderedQualityReport;
439
461
 
440
- /**
441
- * SeatmapRenderer — the shared canvas rendering core (buyer picker shell).
442
- *
443
- * Uses Konva directly with per-module imports to keep the bundle lean. The
444
- * whole point of the spike is staying smooth at ~5,000 seats on mobile, so the
445
- * hot paths lean on: layer bitmap caching + listening(false) when zoomed out,
446
- * per-seat fill updates (never full rebuilds) on status change, and viewport-
447
- * only label rendering rebuilt on interaction-end rather than per frame.
448
- */
449
-
450
462
  declare class SeatmapRenderer implements ISeatmapRenderer {
451
463
  private container;
452
464
  private opts;
@@ -472,6 +484,8 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
472
484
  private activeFloorId;
473
485
  /** When true on a multi-floor chart, render ALL floors stacked (3D overview). */
474
486
  private stacked;
487
+ /** Buyer-facing 2D overview: floors are rigidly arranged without altering topology. */
488
+ private floorOverview;
475
489
  /** Interactive node per seat/booth — a Circle for seats, a Rect for booths. */
476
490
  private circleById;
477
491
  /** Booth block geometry, keyed by booth id (= the unit's rowId). */
@@ -621,35 +635,18 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
621
635
  private resizeObs;
622
636
  /** Coalesces bursty view-change sources (pointermove, wheel) into ≤1 callback/frame. */
623
637
  private viewChangeRaf;
624
- private pointers;
625
- private pinch;
626
- private panLast;
627
- private panStart;
628
- private panStarted;
629
- /** Maximum displacement from gesture start — suppress taps only after a real pan/pinch. */
630
- private moved;
631
- /**
632
- * Ghost-click guard. Konva binds `_pointerup` to mouseup, touchend AND
633
- * pointerup, so `on('click tap')` is two handlers for one finger tap unless
634
- * the browser's synthesized compatibility click is suppressed. Konva only
635
- * suppresses it when the touch lands on a LISTENING SHAPE (Stage.js returns
636
- * early before its preventDefault() when `!shape || !shape.isListening()`),
637
- * so a near-miss rescued by nearestSeatToScreen used to fire `tap` (select)
638
- * then `click` (deselect) 1-3ms apart and net to nothing. With
639
- * SEAT_TAP_SLOP_PX=14 against a ~12px seat radius, that broken annulus is
640
- * ~3.7x the area of the seat itself — i.e. most successful mobile taps.
641
- * `touch-action: none` does NOT suppress compatibility mouse events.
642
- */
643
- private lastTapAt;
644
- /**
645
- * True when this is the browser's synthesized compatibility click following a
646
- * finger tap we already handled. Discriminates on `e.type` deliberately —
647
- * `PointerEvent extends MouseEvent`, so an `instanceof MouseEvent` test
648
- * matches genuine pointer taps too. One shared timestamp across the layer and
649
- * stage handlers: a tap consumed at the layer must also suppress the ghost at
650
- * the stage, and only `click` is ever rejected, so bubbling stays intact.
638
+ /**
639
+ * Pan/pinch state machine (`render/interaction/pointer`). Raw pointer events
640
+ * on the container, not Konva stage dragging — its touch pipeline proved
641
+ * unreliable for multi-touch on real devices. Also owns the ghost-click
642
+ * timestamp shared by the layer and stage tap handlers.
651
643
  */
644
+ private gestures;
645
+ /** Displacement of the current gesture — a tap must stay under the slop. */
646
+ private get moved();
652
647
  private isGhostClick;
648
+ /** Behavioural surface the gesture machine calls back into. */
649
+ private get pointerHost();
653
650
  /**
654
651
  * Manage-mode rubber-band marquee (option-gated). `start`/`cur` are WORLD-space
655
652
  * points (overlayLayer rides the stage transform); `rect` is the on-canvas
@@ -661,8 +658,8 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
661
658
  setChart(doc: ChartDoc, opts?: {
662
659
  floorId?: string;
663
660
  }): void;
664
- /** The chart to render: all floors stacked (3D overview), the active floor, or
665
- * the whole chart for single-floor charts. */
661
+ /** The chart to render: authored-coordinate overview, stacked 3D overview,
662
+ * the active floor, or the whole chart for single-floor charts. */
666
663
  private floorView;
667
664
  /** Physical floor height is authored data; the 900-unit stacked overview
668
665
  * spread is presentation-only and must never leak into real 3D geometry. */
@@ -671,6 +668,10 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
671
668
  * single-floor charts. The caller re-applies statuses + animates the iso view. */
672
669
  setStacked(on: boolean): void;
673
670
  isStacked(): boolean;
671
+ /** Toggle the buyer's combined 2D floor overview. Every floor is translated
672
+ * as one rigid group for clarity; its authored internal topology is exact. */
673
+ setFloorOverview(on: boolean): void;
674
+ isFloorOverview(): boolean;
674
675
  /** Switch which floor is shown (2D). Re-renders + re-fits; no-op if unchanged. */
675
676
  setActiveFloor(floorId: string): void;
676
677
  /** Floors for the host's switcher (single-floor charts return one synthetic floor). */
@@ -740,6 +741,12 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
740
741
  /** Pan/zoom so a seat sits on-screen at a legible scale (for keyboard focus). */
741
742
  private ensureVisible;
742
743
  zoomToFit(): void;
744
+ /**
745
+ * Reframe after a host/layout resize without throwing away section context.
746
+ * The stage already represents the usable map area (the picker side panel is
747
+ * a sibling), so measuring it here naturally respects open/closed panels.
748
+ */
749
+ refitCurrentView(): void;
743
750
  /** Step factor for the on-screen +/− buttons (B1) — same clamp path as pinch/wheel. */
744
751
  private static readonly ZOOM_STEP;
745
752
  zoomIn(): void;
@@ -782,6 +789,8 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
782
789
  setViewMode(mode: RendererViewMode): void;
783
790
  /** Current projection — reflects the tween target, not the mid-tween isoT. */
784
791
  getViewMode(): RendererViewMode;
792
+ /** Live ISO projection state handed to the `render/projection` free functions. */
793
+ private get isoState();
785
794
  /** Iso angle (rad) + y-squash for the current isoT. */
786
795
  private isoParams;
787
796
  /** Effective vertical scale = stage scale × iso squash — legibility math uses this. */
@@ -815,6 +824,8 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
815
824
  private resetLayerTransforms;
816
825
  /** Restore section-owned containers before applying another projection. */
817
826
  private resetSectionProjection;
827
+ /** Node/cache context the shared seat-anchor pass reads and updates. */
828
+ private get seatAnchorContext();
818
829
  /** Move native seat/booth hit shapes to or from their exact pinhole anchors. */
819
830
  private applyExactSeatAnchors;
820
831
  /**
@@ -929,10 +940,20 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
929
940
  setClosedSections(ids: string[] | null): void;
930
941
  /**
931
942
  * AXS section-focus: dim + desaturate every other section, draw a calm backdrop
932
- * panel behind this section's seats, and glide the camera in to frame it (the
933
- * seat-pick gate below only lets buyers pick once seats are LABEL_SCALE big).
943
+ * panel behind this section's seats, and glide the camera to a padded fit of
944
+ * the whole section. A large section may therefore use smaller seat markers,
945
+ * but it never clips its outer rows merely to meet a fixed detail scale.
934
946
  */
935
947
  focusSection(id: string): void;
948
+ /**
949
+ * Release only the focus dim + backdrop, keeping the focused-section state
950
+ * (summary card, adjacent-section navigation, LOD) intact. Called on the
951
+ * buyer's first manual pan/pinch/wheel after a section glide: the dim reads
952
+ * as "everything else is disabled", but every seat outside the focus was
953
+ * always hit-testable — free roaming across sections is the product
954
+ * behaviour, the glide is only an entrance.
955
+ */
956
+ private releaseSectionFocusDim;
936
957
  /** Clear an AXS section focus — restore full-bowl brightness + drop the backdrop. */
937
958
  clearSectionFocus(): void;
938
959
  /** The currently AXS-focused section id, or null. */
@@ -960,6 +981,12 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
960
981
  width: number;
961
982
  height: number;
962
983
  };
984
+ /** Live minimap geometry comes from the rendered scene, so a content-aware
985
+ * all-floor layout cannot collapse back onto the source coordinate stack. */
986
+ getMinimapSnapshot(): RendererMinimapSnapshot;
987
+ /** Minimap drag/click navigation: preserve zoom and move one world point to
988
+ * the viewport centre. Works for flat and projected views via worldToScreen. */
989
+ panToWorld(point: Point): void;
963
990
  /** Legend hover: highlight one category (dim the rest), or null to clear. */
964
991
  setCategoryHighlight(key: string | null): void;
965
992
  private renderBackground;
@@ -980,12 +1007,12 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
980
1007
  * single drawImage per frame, and it rides the same layer cache — effectively
981
1008
  * zero per-frame cost. Never listens, so it can't intercept a seat click.
982
1009
  */
1010
+ /** Node/registry surface the `render/objectDrawing` factories draw into. */
1011
+ private get objectDrawContext();
983
1012
  private renderDecorImage;
984
1013
  private renderTable;
985
1014
  private renderText;
986
1015
  private renderShape;
987
- /** Prominent stage caption: uppercase, letter-spaced, larger, softly dimmed. */
988
- private addStageLabel;
989
1016
  private renderGA;
990
1017
  /**
991
1018
  * A section renders in three coordinated layers driven by the LOD melt:
@@ -1066,7 +1093,6 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
1066
1093
  }): string | null;
1067
1094
  /** Seat ids belonging to a section (Slice 5 section-summary card). */
1068
1095
  sectionMembers(id: string): string[];
1069
- private addCentredLabel;
1070
1096
  private isSelectable;
1071
1097
  private toggleSeat;
1072
1098
  /**
@@ -1119,10 +1145,6 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
1119
1145
  * so within-floor elevation offsets don't affect the result. Null if none.
1120
1146
  */
1121
1147
  private deckFloorAt;
1122
- private toLocal;
1123
- private onPointerDown;
1124
- private onPointerMove;
1125
- private onPointerEnd;
1126
1148
  /**
1127
1149
  * Min is chart-relative (never lose the room); max is absolute so seats
1128
1150
  * reach a readable size on any chart, however large the venue.
@@ -1153,6 +1175,8 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
1153
1175
  private cancelGlide;
1154
1176
  /** Current LOD rung derived from effective zoom — drives the ZONES/SECTIONS/SEATS pill. */
1155
1177
  getRung(): LodRung;
1178
+ /** Explicit view of this renderer as the evidence pass's declared surface. */
1179
+ private get renderedQualityContext();
1156
1180
  getRenderedQualityEvidence(): RendererQualityEvidence;
1157
1181
  /** Jump the camera to a rung's zoom band (glided). */
1158
1182
  setRung(rung: LodRung): void;
@@ -1217,21 +1241,14 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
1217
1241
  */
1218
1242
  captureCanvas(): HTMLCanvasElement;
1219
1243
  private updateFreeTextVisibility;
1244
+ /** Geometric association only: importer data remains unchanged. */
1245
+ private nodeBelongsToFocusedSection;
1220
1246
  /** OV-45(a): resolve authored row-letter labels for the buyer/preview map, in
1221
- * world space, matching the Designer's placement contract (start/end/both/none
1222
- * preset, a free-drag `position` that wins over the preset, rotation, and
1223
- * labelStyle colour/size fed through the same auto-contrast guard). Segmented
1224
- * rows keep their own logical-label handling and are resolved by their owner. */
1247
+ * world space (see `render/rowLabelPlan`). */
1225
1248
  private buildRowLabelPlan;
1226
1249
  /** Axis-aligned world bounds of a centred, potentially rotated row label. */
1227
1250
  private rowLabelBox;
1228
- /**
1229
- * Keep an automatic start/end label out of seat markers and already-painted
1230
- * text. The authored point is never altered. Candidates are deliberately
1231
- * bounded and deterministic: the closest clear offset wins; if a chart is so
1232
- * dense that none is clear, the least-colliding candidate wins so the required
1233
- * row label remains present rather than being silently dropped.
1234
- */
1251
+ /** Keep an automatic start/end label out of seats and already-painted text. */
1235
1252
  private resolveAutomaticRowLabelPosition;
1236
1253
  /** Row labels never carry status; the buyer just dims them under the same
1237
1254
  * category/price filters that dim their seats. */
@@ -1242,6 +1259,23 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
1242
1259
  }
1243
1260
  declare function createRenderer(container: HTMLDivElement, opts?: RendererOptions): ISeatmapRenderer;
1244
1261
 
1262
+ interface CompanionSelectionIssue {
1263
+ code: 'companion_pair_required';
1264
+ labels: string[];
1265
+ message: string;
1266
+ }
1267
+ interface TicketOptionApplicabilityIssue {
1268
+ code: 'ticket_option_not_applicable';
1269
+ labels: string[];
1270
+ message: string;
1271
+ }
1272
+ interface NotForSaleSelectionIssue {
1273
+ code: 'not_for_sale';
1274
+ labels: string[];
1275
+ message: string;
1276
+ }
1277
+ type TicketSelectionIssue = CompanionSelectionIssue | TicketOptionApplicabilityIssue | NotForSaleSelectionIssue;
1278
+
1245
1279
  interface PickerSeat {
1246
1280
  id: string;
1247
1281
  label: string;
@@ -1261,6 +1295,8 @@ interface PickerSeat {
1261
1295
  categoryKey: string;
1262
1296
  /** Price for the chosen tier when the category has tiers, else the base price. */
1263
1297
  price: number;
1298
+ /** ISO-4217 event currency carried with SDK selection callbacks. */
1299
+ currency: string;
1264
1300
  /** Ticket tiers the seat's category offers (Adult/Child/…); absent when none. */
1265
1301
  tiers?: CategoryTier[];
1266
1302
  /** The chosen tier's id — defaults to the first tier; absent when no tiers. */
@@ -1322,6 +1358,14 @@ interface HoldConflict {
1322
1358
  label: string;
1323
1359
  status: string;
1324
1360
  }
1361
+ /** A locally detected selection-rule failure. Its public shape mirrors API
1362
+ * problems so SDK hosts can handle client and server enforcement identically. */
1363
+ declare class PickerSelectionError extends Error {
1364
+ readonly status = 422;
1365
+ readonly reason: TicketSelectionIssue['code'];
1366
+ readonly labels: string[];
1367
+ constructor(issue: TicketSelectionIssue);
1368
+ }
1325
1369
  /** An open hold — its id, the labels it covers, and the server's expiry time (ms epoch). */
1326
1370
  interface HoldInfo {
1327
1371
  holdId: string;
@@ -1337,7 +1381,11 @@ interface SectionCategory {
1337
1381
  key: string;
1338
1382
  label: string;
1339
1383
  color: string;
1384
+ /** Cheapest ticket choice in this category. `price` remains this value for
1385
+ * source compatibility with existing SDK hosts. */
1340
1386
  price: number;
1387
+ priceMin: number;
1388
+ priceMax: number;
1341
1389
  count: number;
1342
1390
  }
1343
1391
  /**
@@ -1568,6 +1616,20 @@ interface PickerOptions extends PickerCallbacks {
1568
1616
  */
1569
1617
  mapTheme?: PickerMapTheme | null;
1570
1618
  }
1619
+ /** Privacy-safe timings for one buyer-map load. Values are milliseconds and
1620
+ * contain no chart, seat, hold, buyer, or URL data. Hosts may aggregate these
1621
+ * with coarse chart-size/device dimensions supplied by the widget. */
1622
+ interface PickerRenderPerformanceProfile {
1623
+ loadChart: number;
1624
+ normalizeBuyerModel: number;
1625
+ createRenderer: number;
1626
+ loadStatuses: number;
1627
+ buildScene: number;
1628
+ applyInitialState: number;
1629
+ firstPaint: number;
1630
+ startRealtime: number;
1631
+ controllerTotal: number;
1632
+ }
1571
1633
  /**
1572
1634
  * The subset of `ChartTheme` a HOST may override on the drawn canvas.
1573
1635
  *
@@ -1729,6 +1791,7 @@ declare class PickerController {
1729
1791
  mode?: string;
1730
1792
  /** Absolute event-poster URL, when the server can publicly serve one. */
1731
1793
  posterUrl?: string | null;
1794
+ performanceProfile: PickerRenderPerformanceProfile;
1732
1795
  } | null>;
1733
1796
  getSelection(): PickerSeat[];
1734
1797
  /** Enriched metadata for a seat confirmation card or tooltip. */
@@ -1839,10 +1902,14 @@ declare class PickerController {
1839
1902
  private releaseConfirmed;
1840
1903
  setStatus(ids: string[], status: SeatStatus): void;
1841
1904
  getStatus(id: string): SeatStatus | undefined;
1905
+ /** Seat ids whose category the author marked not-for-sale. */
1906
+ private notForSaleCategorySeatIds;
1842
1907
  flashSeat(id: string, color?: string): void;
1843
1908
  zoomIn(): void;
1844
1909
  zoomOut(): void;
1845
1910
  zoomToFit(): void;
1911
+ /** Preserve section focus while the usable map viewport changes. */
1912
+ refitCurrentView(): void;
1846
1913
  worldToScreen(p: {
1847
1914
  x: number;
1848
1915
  y: number;
@@ -1870,6 +1937,9 @@ declare class PickerController {
1870
1937
  /** 3D all-floors stacked overview ⇄ active floor. Re-applies statuses after. */
1871
1938
  setStacked(on: boolean): void;
1872
1939
  isMultiFloor(): boolean;
1940
+ /** Enter/leave the source-coordinate all-floor buyer overview. */
1941
+ setFloorOverview(on: boolean): void;
1942
+ isFloorOverview(): boolean;
1873
1943
  /** Tap-a-deck-to-enter: leave the 3D stack, drop to flat 2D on `floorId`, and
1874
1944
  * tell the host so it can sync its 2D/3D toggle + floor-switcher state. */
1875
1945
  private handleDeckTap;
@@ -1907,8 +1977,20 @@ declare class PickerController {
1907
1977
  height: number;
1908
1978
  };
1909
1979
  } | null;
1980
+ getMinimapSnapshot(): RendererMinimapSnapshot;
1981
+ panToWorld(point: {
1982
+ x: number;
1983
+ y: number;
1984
+ }): void;
1985
+ /** Leave section-focus dimming without changing the current zoom. Used when
1986
+ * the minimap viewport itself is dragged to a different part of the venue. */
1987
+ clearSectionFocus(): void;
1988
+ /** Read-only browser-render evidence for parity/performance audit tooling. */
1989
+ getRenderedQualityEvidence(): RendererQualityEvidence | null;
1910
1990
  /** Glide in on a section and surface its summary (same path as a section tap). */
1911
1991
  focusSection(id: string): void;
1992
+ /** Live seat membership count used by buyer section-navigation controls. */
1993
+ getSectionSeatCount(id: string): number;
1912
1994
  /** Zoom back out to the whole chart and clear the section-summary card + focus. */
1913
1995
  overview(): void;
1914
1996
  /** Glide the camera into a tapped section and emit its computed summary. Uses
@@ -1927,6 +2009,10 @@ declare class PickerController {
1927
2009
  private describeSeat;
1928
2010
  private priceFor;
1929
2011
  private tiersFor;
2012
+ private tiersForSeat;
2013
+ private seatTierResolution;
2014
+ private tableTierSeat;
2015
+ private tableTierResolution;
1930
2016
  /**
1931
2017
  * Choose a ticket tier for a selected seat (e.g. Adult → Child). Re-emits the
1932
2018
  * selection so the host's cart + the eventual hold carry the new tier + price.
@@ -1937,6 +2023,9 @@ declare class PickerController {
1937
2023
  /** PickerSeats (with chosen tier) for a set of held labels. */
1938
2024
  private seatsForLabels;
1939
2025
  private emitSelectionChange;
2026
+ /** Check explicit tier applicability and companion relationships for the
2027
+ * current (or supplied) seats. Ticket display names are never semantic input. */
2028
+ ticketIssue(labels?: string[]): TicketSelectionIssue | null;
1940
2029
  /** Whether the last emitted hint was non-null (avoids clearing repeatedly). */
1941
2030
  private hintShown;
1942
2031
  /**
@@ -2006,11 +2095,8 @@ declare class PickerController {
2006
2095
  private connect;
2007
2096
  /**
2008
2097
  * Backoff for the PLAIN-socket fallback (a transport with no v1 client of its
2009
- * own). Full jitter, for the same reason BuyerRealtimeClient uses it: a
2010
- * deterministic `2**attempt` schedule brings every browser that lost the same
2011
- * socket back in the same millisecond, and an on-sale crowd reconnecting in
2012
- * lockstep turns one blip into a thundering herd. The ceiling still doubles,
2013
- * so a sustained outage still backs off.
2098
+ * own). Full jitter, for the same reason BuyerRealtimeClient uses it — see
2099
+ * `core/backoff`, which now owns that rationale and the schedule.
2014
2100
  */
2015
2101
  private scheduleReconnect;
2016
2102
  }
@@ -2098,6 +2184,14 @@ declare function setStringOverrides(next: Dict): void;
2098
2184
  declare function t(key: string, vars?: Record<string, string | number>): string;
2099
2185
  /** "1 seat" / "3 seats" without hand-rolled concatenation. */
2100
2186
  declare function tCount(key: string, count: number, vars?: Record<string, string | number>): string;
2187
+ /**
2188
+ * Kept for the SDK surface that imports dates from here. It is a thin pass to
2189
+ * `core/datetime`, which owns every date shape in the app and caches its
2190
+ * formatters per (locale, shape) — the defaults below are the same ones it
2191
+ * uses, so the two were already interchangeable and are now literally the same
2192
+ * code. `active` is passed explicitly so this cannot drift from `t()` even if
2193
+ * something calls `setDateTimeLocale` on its own.
2194
+ */
2101
2195
  declare function formatDate(value: number | Date, opts?: Intl.DateTimeFormatOptions): string;
2102
2196
 
2103
2197
  /**
@@ -2141,9 +2235,14 @@ declare function setMoneyLocale(locale: string | undefined): void;
2141
2235
  /**
2142
2236
  * "€45" / "$1,500" / "45 €" (locale-dependent placement).
2143
2237
  * Whole amounts render without ".00" (design shows "$45", "$120"); pass
2144
- * `fractionDigits` for fixed precision (e.g. 3 for "$0.045 / credit").
2238
+ * `fractionDigits` for fixed precision (e.g. 3 for "$0.045 / credit", or `0`
2239
+ * for a report column that rounds to whole units).
2240
+ *
2241
+ * `locale` overrides the app locale for one call — the buyer-facing website
2242
+ * templates render in the VISITOR's language, which is not necessarily the
2243
+ * dashboard's. Mirrors `DateFormatOptions.locale` in `core/datetime`.
2145
2244
  */
2146
- declare function formatMoney(amount: number, currency?: string, fractionDigits?: number): string;
2245
+ declare function formatMoney(amount: number, currency?: string, fractionDigits?: number, locale?: string): string;
2147
2246
  /**
2148
2247
  * How many decimal places a currency has — 2 for USD/EUR, 0 for JPY/KRW/VND,
2149
2248
  * 3 for KWD/BHD/JOD.
@@ -2167,8 +2266,8 @@ declare function currencyExponent(currency?: string): number;
2167
2266
  */
2168
2267
  declare function fromMinorUnits(minor: number, currency?: string): number;
2169
2268
  /** "$90" / "¥9,000" — a minor-unit integer rendered for display. */
2170
- declare function formatMinor(minor: number, currency?: string): string;
2269
+ declare function formatMinor(minor: number, currency?: string, locale?: string): string;
2171
2270
  /** Bare symbol for input adornments ("€", "$", "₹"). */
2172
2271
  declare function currencySymbol(currency?: string): string;
2173
2272
 
2174
- export { AccessibilityType, type AvailabilityRule, BoothObject, CURRENCY_CHOICES, CategoryTier, ChartDoc, ChartObject, DEFAULT_CURRENCY, type Dict, type ExpandChartOptions, ExpandedSeat, Floor, GAAreaObject, GAInventorySegment, type HoldConflict, type HoldInfo, type HoldSelectionRequest, type HoldServerItem, ISeatmapRenderer, LabelStyle, type Locale, LodRung, MAX_EVENT_INVENTORY, MAX_GA_CAPACITY, type PanoramaResult, type PickerCallbacks, PickerController, type PickerGAArea, type PickerMapTheme, type PickerOptions, type PickerRealtimeConnection, type PickerRealtimeSink, type PickerSeat, type PickerStatusChange, type PickerTransport, Point, RENDERED_QUALITY_REPORT_VERSION, RectTableSeatCounts, RectTableSide, type RenderedEvidenceState, RenderedFreeTextEvidence, type RenderedQualityFinding, type RenderedQualityFindingCode, type RenderedQualityReport, type RenderedQualitySample, RendererCallbacks, RendererOptions, RendererQualityEvidence, RendererViewMode, RowObject, type RowSeatSlot, SUPPORTED_LOCALES, SeatCommercialAttributes, type SeatHoverDetails, SeatOverride, SeatStatus, SeatViewMetadata, SeatmapRenderer, type SectionCategory, type SectionNode, SectionObject, type SectionSummary, TIER_HEIGHT_M, TableObject, type TableSeatSlot, type TableSelectionDetails, UNGROUPED_ID, allObjects, applyHidden, chartBounds, computeSections, createRenderer, currencyExponent, currencySymbol, expandBooth, expandChart, expandRow, expandRowSlots, expandTable, expandTableSlots, floorObjects, floorsOf, formatDate, formatMinor, formatMoney, fromMinorUnits, gaAreasOf, gaInventorySegments, gaUnitLabel, gaUnitLabels, generateSeatPanorama, generateSeatThumb, getLocale, growJoinedGAInventory, hiddenObjectIds, inspectRenderedQualityEvidence, isGaUnitLabel, isSectionHidden, loadLocale, objectCenter, owningSectionForObject, pointInPolygon, pointInPolygonWithHoles, polygonLabelPoint, resolveLocale, rowInventoryCount, rowSeatPositions, sectionGeometry, setLocale, setMoneyLocale, setStringOverrides, stackFloors, t, tCount, tableInventoryCount, tableSeatCountsBySide, validGAInventorySegments };
2273
+ export { AccessibilityType, type AvailabilityRule, BoothObject, CURRENCY_CHOICES, CategoryTier, ChartDoc, ChartObject, DEFAULT_CURRENCY, type Dict, type ExpandChartOptions, ExpandedSeat, Floor, GAAreaObject, GAInventorySegment, type HoldConflict, type HoldInfo, type HoldSelectionRequest, type HoldServerItem, ISeatmapRenderer, LabelStyle, type Locale, LodRung, MAX_EVENT_INVENTORY, MAX_GA_CAPACITY, type PanoramaResult, type PickerCallbacks, PickerController, type PickerGAArea, type PickerMapTheme, type PickerOptions, type PickerRealtimeConnection, type PickerRealtimeSink, type PickerRenderPerformanceProfile, type PickerSeat, PickerSelectionError, type PickerStatusChange, type PickerTransport, Point, RENDERED_QUALITY_REPORT_VERSION, RectTableSeatCounts, RectTableSide, type RenderedEvidenceState, RenderedFreeTextEvidence, type RenderedQualityFinding, type RenderedQualityFindingCode, type RenderedQualityReport, type RenderedQualitySample, RendererCallbacks, RendererMinimapSnapshot, RendererOptions, RendererQualityEvidence, RendererViewMode, RowObject, type RowSeatSlot, SUPPORTED_LOCALES, SeatCommercialAttributes, type SeatHoverDetails, SeatOverride, SeatStatus, SeatViewMetadata, SeatmapRenderer, type SectionCategory, type SectionNode, SectionObject, type SectionSummary, TIER_HEIGHT_M, TableObject, type TableSeatSlot, type TableSelectionDetails, UNGROUPED_ID, allObjects, applyHidden, chartBounds, computeSections, createRenderer, currencyExponent, currencySymbol, expandBooth, expandChart, expandRow, expandRowSlots, expandTable, expandTableSlots, floorObjects, floorOverviewTranslations, floorsOf, formatDate, formatMinor, formatMoney, fromMinorUnits, gaAreasOf, gaInventorySegments, gaUnitLabel, gaUnitLabels, generateSeatPanorama, generateSeatThumb, getLocale, growJoinedGAInventory, hiddenObjectIds, inspectRenderedQualityEvidence, isGaUnitLabel, isSectionHidden, layoutFloorOverview, loadLocale, objectCenter, owningSectionForObject, pointInPolygon, pointInPolygonWithHoles, polygonLabelPoint, resolveLocale, rowInventoryCount, rowSeatPositions, sectionGeometry, setLocale, setMoneyLocale, setStringOverrides, stackFloors, t, tCount, tableInventoryCount, tableSeatCountsBySide, translateObject, validGAInventorySegments };