@seatlayer/core 0.85.2 → 0.86.1

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 (35) hide show
  1. package/dist/{chunk-HEYENCES.js → chunk-D5M3SNMM.js} +1 -1
  2. package/dist/chunk-GI7ZTQ7C.js +1 -0
  3. package/dist/chunk-W53J4FJS.js +1 -0
  4. package/dist/core/chart-ops/index.js +1 -1
  5. package/dist/core/inventory/index.cjs +1 -1
  6. package/dist/core/inventory/index.d.cts +2 -2
  7. package/dist/core/inventory/index.d.ts +2 -2
  8. package/dist/core/inventory/index.js +1 -1
  9. package/dist/core/layout/index.d.cts +2 -2
  10. package/dist/core/layout/index.d.ts +2 -2
  11. package/dist/core/quality/index.cjs +1 -1
  12. package/dist/core/quality/index.d.cts +11 -3
  13. package/dist/core/quality/index.d.ts +11 -3
  14. package/dist/core/quality/index.js +1 -1
  15. package/dist/core/sections/index.d.cts +1 -1
  16. package/dist/core/sections/index.d.ts +1 -1
  17. package/dist/index.cjs +1 -1
  18. package/dist/index.d.cts +71 -7
  19. package/dist/index.d.ts +71 -7
  20. package/dist/index.js +1 -1
  21. package/dist/{renderedQuality-CkrbA7iV.d.ts → renderedQuality-Dy7LBzNF.d.ts} +1 -1
  22. package/dist/{renderedQuality-DL9Nfka1.d.cts → renderedQuality-yRjbcxVe.d.cts} +1 -1
  23. package/dist/{renderer-D9kIJYmd.d.cts → renderer-DbDQtwIH.d.cts} +2 -0
  24. package/dist/{renderer-DUko-vky.d.ts → renderer-xE1rZCGy.d.ts} +2 -0
  25. package/dist/{tableSizing-BGl1e6Bi.d.ts → tableSizing-B3SHwhya.d.ts} +1 -1
  26. package/dist/{tableSizing-CJbozzMS.d.cts → tableSizing-sUnI2XGD.d.cts} +1 -1
  27. package/dist/{ticketRestrictions-BD5hvqtL.d.ts → ticketRestrictions-7N9PC4Q6.d.ts} +1 -1
  28. package/dist/{ticketRestrictions-BEkiPPYg.d.cts → ticketRestrictions-Dtybkrpp.d.cts} +1 -1
  29. package/dist/view3d/index.cjs +21 -21
  30. package/dist/view3d/index.d.cts +1 -1
  31. package/dist/view3d/index.d.ts +1 -1
  32. package/dist/view3d/index.js +19 -19
  33. package/package.json +1 -1
  34. package/dist/chunk-APMDM2YC.js +0 -1
  35. package/dist/chunk-FQ2MMJMH.js +0 -1
package/dist/index.d.cts CHANGED
@@ -2,14 +2,14 @@ import { A as AccessibilityType, b as SeatCommercialAttributes, C as ChartDoc, F
2
2
  export { y as ACCESSIBILITY_RING_COLOR, z as ACCESSIBILITY_TYPES, D as AccessibilityMeta, E as AuthoringObjectState, B as BoothObject, q as Category, H as ChartLayoutConstraint, a as ChartObject, p as ChartReferenceImage, I as ChartTheme, J as ConfidenceEvidenceScope, v as CubicPath, K as DecorImageObject, n as Floor, G as GAAreaObject, j as GAInventorySegment, M as LABEL_STYLE_MAX_SIZE, N as LABEL_STYLE_MIN_SIZE, O as LabelPresentation, L as LabelStyle, Q as ObjectEditorState, U as Physical3dEvidence, V as RadialClearanceLayoutConstraint, o as RectTableSeatCounts, m as RectTableSide, W as ReferenceAccessibilitySource, X as ReferenceCalibration, Y as ReferenceCategorySource, Z as ReferenceDerivedScale, _ as ReferenceDirectAnnotationSource, $ as ReferenceDirectLandmarkCandidate, a0 as ReferenceDirectLandmarkDisposition, a1 as ReferenceDirectLandmarkRole, a2 as ReferenceDirectLandmarkSource, a3 as ReferenceDirectSeatGroup, a4 as ReferenceDirectSeatImportSource, a5 as ReferenceDirectSeatPlan, a6 as ReferenceDirectStageSource, a7 as ReferenceEnrichmentStatus, a8 as ReferenceExtractEmptyReason, a9 as ReferenceExtractEnrichment, aa as ReferenceExtractInput, ab as ReferenceExtractProposal, ac as ReferenceExtractRegionSeats, ad as ReferenceInventoryExclusionSource, ae as ReferenceInventorySource, af as ReferenceMatchReport, ag as ReferenceScanProposal, ah as ReferenceScanRowProposal, ai as ReferenceScanSectionProposal, aj as ReferenceSeatSeed, ak as ReferenceSectionTraceBatchInput, al as ReferenceSectionTraceBatchProposal, am as ReferenceSectionTraceInput, an as ReferenceSectionTraceProposal, d as ResolvedSeatConfidenceEvidence, R as RowObject, ao as SEAT_COMMERCIAL_MARKS, ap as STAGE_LABEL_STYLE_MAX_SIZE, aq as SURROUNDINGS_SHAPE_ROLES, S as SeatCommercialMark, ar as SeatCommercialMeta, as as SeatConfidenceCoverage, at as SeatConfidenceEvidence, au as SeatConfidenceModelLevel, av as SeatConfidenceModeledTarget, aw as SeatConfidenceRealityLevel, e as SeatGlyphKind, l as SeatOverride, f as SeatViewCoverage, c as SeatViewMetadata, ax as SeatViewVariant, i as SectionObject, g as SectionOutlinePath, h as SectionPathSegment, ay as SelectionLayer, r as ShapeLineCap, s as ShapeLineEnding, t as ShapeLineJoin, u as ShapeObject, az as StageLabelStyle, T as TableObject, aA as TextAlignment, aB as TextBackground, w as TextObject, aC as TicketTierApplicability, aD as TicketTierEvidence, aE as TicketTierRestriction, aF as Venue3DMaterialPalette, aG as VenueSurveyRegistrationEvidence, aH as ZoneDef, aI as accessibilityMeta, aJ as accessibilityRingColor, aK as layerOf, aL as seatCommercialMeta } from './types-B97dNRwl.cjs';
3
3
  import { c as EventConfigurationRef, b as EventConfigurationVersion } from './eventConfigurations-C-LVnEGg.cjs';
4
4
  export { d as EVENT_CONFIGURATION_EXPORT_SCHEMA, e as EVENT_CONFIGURATION_SCHEMA, f as EventConfigurationBaseVenue, g as EventConfigurationCompatibilityIssue, h as EventConfigurationCompatibilityIssueCode, i as EventConfigurationCompatibilityResult, j as EventConfigurationExportEnvelope, k as EventConfigurationLifecycleStatus, a as EventConfigurationOcclusion, l as EventConfigurationOverlay, m as EventConfigurationParseIssue, n as EventConfigurationParseIssueCode, o as EventConfigurationParseResult, p as EventConfigurationProductionElement, E as EventConfigurationProductionElementKind, q as EventConfigurationVenueSnapshot, r as EventConfigurationVersionParseResult, s as EventConfigurationVersionSummary, L as LegacyEventConfigurationMigrationResult, t as canTransitionEventConfiguration, u as canonicalEventConfigurationJson, v as inspectEventConfigurationCompatibility, w as migrateLegacyEventConfigurations, x as parseEventConfigurationExport, y as parseEventConfigurationVersion, z as resolveEventConfigurationRollback } from './eventConfigurations-C-LVnEGg.cjs';
5
- export { A as AUTOMATIC_ROUND_TABLE_RADIUS_MAX, a as AUTOMATIC_ROUND_TABLE_RADIUS_MIN, C as ChartBoundsOptions, E as ExpandChartOptions, F as FLOOR_STACK_GAP_RATIO, b as FLOOR_STACK_MIN_SURFACE_PX, c as FloorStackOptions, d as FloorStackPlacement, R as RowSeatSlot, T as TABLE_SEAT_OFFSET, e as TableSeatSlot, f as allObjects, g as automaticRoundTableRadius, h as chartBounds, i as combinedFloorZoneId, j as expandBooth, k as expandChart, l as expandRow, m as expandRowSlots, n as expandTable, o as expandTableSlots, p as floorObjects, q as floorStackPlacements, r as floorsOf, s as initialFloorMode, t as layoutCombinedFloorPlan, u as layoutFloorStack, v as mainFloorId, w as objectCenter, x as owningSectionForObject, y as pointInPolygon, z as pointInPolygonWithHoles, B as polygonLabelPoint, D as rowInventoryCount, G as rowSeatPositions, H as stackFloors, I as tableInventoryCount, J as tableSeatCountsBySide, K as translateObject } from './tableSizing-CJbozzMS.cjs';
6
- import { g as TicketSelectionIssue, b as GroupedTableInventoryUnit } from './ticketRestrictions-BEkiPPYg.cjs';
7
- export { M as MAX_EVENT_INVENTORY, d as MAX_GA_CAPACITY, l as gaAreasOf, m as gaInventorySegments, n as gaUnitLabel, o as gaUnitLabels, q as growJoinedGAInventory, s as isGaUnitLabel, x as validGAInventorySegments } from './ticketRestrictions-BEkiPPYg.cjs';
5
+ export { A as AUTOMATIC_ROUND_TABLE_RADIUS_MAX, a as AUTOMATIC_ROUND_TABLE_RADIUS_MIN, C as ChartBoundsOptions, E as ExpandChartOptions, F as FLOOR_STACK_GAP_RATIO, b as FLOOR_STACK_MIN_SURFACE_PX, c as FloorStackOptions, d as FloorStackPlacement, R as RowSeatSlot, T as TABLE_SEAT_OFFSET, e as TableSeatSlot, f as allObjects, g as automaticRoundTableRadius, h as chartBounds, i as combinedFloorZoneId, j as expandBooth, k as expandChart, l as expandRow, m as expandRowSlots, n as expandTable, o as expandTableSlots, p as floorObjects, q as floorStackPlacements, r as floorsOf, s as initialFloorMode, t as layoutCombinedFloorPlan, u as layoutFloorStack, v as mainFloorId, w as objectCenter, x as owningSectionForObject, y as pointInPolygon, z as pointInPolygonWithHoles, B as polygonLabelPoint, D as rowInventoryCount, G as rowSeatPositions, H as stackFloors, I as tableInventoryCount, J as tableSeatCountsBySide, K as translateObject } from './tableSizing-sUnI2XGD.cjs';
6
+ import { g as TicketSelectionIssue, b as GroupedTableInventoryUnit } from './ticketRestrictions-Dtybkrpp.cjs';
7
+ export { M as MAX_EVENT_INVENTORY, d as MAX_GA_CAPACITY, l as gaAreasOf, m as gaInventorySegments, n as gaUnitLabel, o as gaUnitLabels, q as growJoinedGAInventory, s as isGaUnitLabel, x as validGAInventorySegments } from './ticketRestrictions-Dtybkrpp.cjs';
8
8
  export { S as SEAT_TYPE_ICON_BODY, a as SEAT_TYPE_ICON_VIEWBOX, b as SeatTypeIconKey, c as SeatTypeIconOptions, s as seatTypeIconBody, d as seatTypeIconSvg } from './seatTypeIcons-Bv2xK0xp.cjs';
9
9
  export { A as AvailabilityRule, S as SectionNode, T as TIER_HEIGHT_M, U as UNGROUPED_ID, a as applyHidden, c as computeSections, h as hiddenObjectIds, i as isSectionHidden, s as sectionGeometry } from './sections-B1DzCiqs.cjs';
10
- export { M as MIN_POINTER_TARGET_PX, R as RENDERED_QUALITY_REPORT_VERSION, a as RenderedEvidenceState, b as RenderedQualityFinding, c as RenderedQualityFindingCode, d as RenderedQualityReport, e as RenderedQualitySample, i as inspectRenderedQualityEvidence } from './renderedQuality-DL9Nfka1.cjs';
11
- import { I as ISeatmapRenderer, b as RendererOptions, S as SeatStatus, c as SeatMark, E as ExpandedSeat, G as GAAreaState, d as RendererViewMode, e as RendererMinimapSnapshot, L as LodRung, R as RendererQualityEvidence, f as RendererCallbacks } from './renderer-D9kIJYmd.cjs';
12
- export { C as CHART_STORAGE_KEY, g as RenderedBookableLabelEvidence, a as RenderedFreeTextEvidence, h as RenderedGAAreaEvidence, i as RenderedHierarchyLabelEvidence, j as RenderedLabelHiddenReason, k as RenderedRowLabelEvidence, l as RendererHoverDetails, m as RendererMinimapSeat, n as RendererMinimapSection, o as SeatMarkKind } from './renderer-D9kIJYmd.cjs';
10
+ export { M as MIN_POINTER_TARGET_PX, R as RENDERED_QUALITY_REPORT_VERSION, a as RenderedEvidenceState, b as RenderedQualityFinding, c as RenderedQualityFindingCode, d as RenderedQualityReport, e as RenderedQualitySample, i as inspectRenderedQualityEvidence } from './renderedQuality-yRjbcxVe.cjs';
11
+ import { I as ISeatmapRenderer, b as RendererOptions, S as SeatStatus, c as SeatMark, E as ExpandedSeat, G as GAAreaState, d as RendererViewMode, e as RendererMinimapSnapshot, L as LodRung, R as RendererQualityEvidence, f as RendererCallbacks } from './renderer-DbDQtwIH.cjs';
12
+ export { C as CHART_STORAGE_KEY, g as RenderedBookableLabelEvidence, a as RenderedFreeTextEvidence, h as RenderedGAAreaEvidence, i as RenderedHierarchyLabelEvidence, j as RenderedLabelHiddenReason, k as RenderedRowLabelEvidence, l as RendererHoverDetails, m as RendererMinimapSeat, n as RendererMinimapSection, o as SeatMarkKind } from './renderer-DbDQtwIH.cjs';
13
13
  import './segmentedRowModel-uu0WfRIz.cjs';
14
14
 
15
15
  /**
@@ -418,6 +418,8 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
418
418
  /** Stage pose the last overview fit landed on — see zoomToFit. */
419
419
  private fitPose;
420
420
  private viewportInsets;
421
+ /** Bottom chrome the fit keeps clear when it can — see camera.clearFitChrome. */
422
+ private fitClearanceBottom;
421
423
  /** Effective seat radius (base × theme.seatScale), set per chart in setChart. */
422
424
  private seatR;
423
425
  /** The radius a marker is actually DRAWN at — the authored radius capped by
@@ -514,6 +516,13 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
514
516
  * be overwritten by its next frame.
515
517
  */
516
518
  private activateBeacon;
519
+ /** Re-entrancy guard: sectionFrameScale measures labels through the same
520
+ * camera bounds that ask for this, so a nested read answers "no room". */
521
+ private readingFocusedFrame;
522
+ /** The focused section's frame scale for zoomBounds, or 0 without a focus. */
523
+ private focusedFrameScaleForBounds;
524
+ /** Dive to the buyer's own seats in this section; false when it holds none. */
525
+ private focusOwnedSeatsIn;
517
526
  /** Rebuild the beacons for this camera, and hand their rings to the breath. */
518
527
  private syncBeacons;
519
528
  /** The buyer's own seats in a section, in chart order. */
@@ -705,6 +714,7 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
705
714
  } | null): void;
706
715
  /** In force now; all zero when the host set none. */
707
716
  getViewportInsets(): ViewportInsets;
717
+ setFitClearance(bottom: number): void;
708
718
  private framingViewport;
709
719
  /** Keep a buyer-driven camera move over the venue — see engine/panBounds. */
710
720
  private constrainPan;
@@ -722,7 +732,7 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
722
732
  * The stage already represents the usable map area (the picker side panel is
723
733
  * a sibling), so measuring it here naturally respects open/closed panels.
724
734
  */
725
- refitCurrentView(): void;
735
+ refitCurrentView(keepBuyerCamera?: boolean): void;
726
736
  /** Step factor for the on-screen +/− buttons (B1) — same clamp path as pinch/wheel. */
727
737
  private static readonly ZOOM_STEP;
728
738
  /** The camera as it stands, for a caller rebuilding the scene under a buyer
@@ -1214,6 +1224,26 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
1214
1224
  x: number;
1215
1225
  y: number;
1216
1226
  }): boolean;
1227
+ /**
1228
+ * May a press or a hover on this logical section DO anything?
1229
+ *
1230
+ * False for a block the buyer cannot buy into: one the operator closed for
1231
+ * this event, and one with no free seat left. Owner report 2026-09-07 — the
1232
+ * two closed strips beside the stage on the Ahoy Rotterdam chart (Fb, Fc)
1233
+ * opened a section card and dived the camera exactly like a sellable block,
1234
+ * so the buyer was taken somewhere there was nothing to take.
1235
+ *
1236
+ * The predicate is the minimap's `inactive` one (see getMinimapSnapshot), so
1237
+ * "inert" and "painted as unavailable" can never drift apart. Asked per
1238
+ * LOGICAL section, because that is what a tap resolves to and an arena
1239
+ * section drawn as several polygons is one place: interactive when ANY of
1240
+ * its components still has something.
1241
+ *
1242
+ * The buyer's OWN seats win over both: a block they hold every remaining
1243
+ * seat in reads as sold out, and it must still be possible to get back to
1244
+ * it. That is also the badge-tap path's destination.
1245
+ */
1246
+ sectionInteractive(sectionId: string): boolean;
1217
1247
  /** Seat ids belonging to a section (Slice 5 section-summary card). */
1218
1248
  sectionMembers(id: string): string[];
1219
1249
  private isSelectable;
@@ -1342,6 +1372,16 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
1342
1372
  private retargetRoamingFocus;
1343
1373
  /** rAF-coalesced `onViewChange` — at most one host callback per animation frame. */
1344
1374
  private scheduleViewChange;
1375
+ /**
1376
+ * Labels follow the finger, not the lift. The label pass used to run only in
1377
+ * afterViewChange, i.e. when the gesture ended: every seat number and row
1378
+ * letter panned into view stayed blank until the buyer let go, and a slow
1379
+ * drag across a block read as the map struggling (owner, 2026-09-07, phone).
1380
+ * A throttled pass during the move keeps the newly revealed labels coming;
1381
+ * the settle still runs the full pass.
1382
+ */
1383
+ private movingLabelTimer;
1384
+ private refreshLabelsWhileMoving;
1345
1385
  /** Keep focal labels centred while their world font size tracks camera scale. */
1346
1386
  private sizeLabel;
1347
1387
  private updateLOD;
@@ -2422,6 +2462,26 @@ declare class PickerController {
2422
2462
  * a guest-count change silently re-based the countdown on the server default.
2423
2463
  */
2424
2464
  replaceTableQuantity(label: string, quantity: number, ttlMs?: number): Promise<HoldInfo | null>;
2465
+ /** Narrow (phone) layout, as reported by the host widget; see setNarrowLayout. */
2466
+ private narrowLayout;
2467
+ /**
2468
+ * The host tells the controller which layout it is in. The row-band rung
2469
+ * (rows drawn as category-coloured lines before the seats appear) is a
2470
+ * desktop treatment (owner call, 2026-09-07): on a phone the lines did not
2471
+ * read as rows, and a section tap should land straight on solid seats.
2472
+ * Optional on older hosts — a widget that never calls this keeps bands on.
2473
+ */
2474
+ setNarrowLayout(narrow: boolean): void;
2475
+ /**
2476
+ * Bands are wanted where the host asked, the chart allows, and the rung is
2477
+ * switched on at all. The layout gate exists (`ROW_BANDS_ON_NARROW`): the
2478
+ * owner first wanted the lines desktop-only, then, the same evening
2479
+ * (2026-09-07), on the phone as well — so a phone section tap lands on the
2480
+ * category lines like desktop. Flip the constant to make the rung
2481
+ * desktop-only again; the `sectionDetail` theme knob turns it off per chart.
2482
+ */
2483
+ private rowBandsWanted;
2484
+ private applyRowBandPreview;
2425
2485
  private rendererSelectionCap;
2426
2486
  private selectionGuestCount;
2427
2487
  private handleRendererSelect;
@@ -2532,6 +2592,10 @@ declare class PickerController {
2532
2592
  bottom?: number;
2533
2593
  left?: number;
2534
2594
  } | null): void;
2595
+ private fitClearance;
2596
+ /** Bottom chrome (the phone zoom column) the fit lifts the venue above when
2597
+ * there is room — a soft inset that never shrinks the venue. */
2598
+ setFitClearance(bottom: number): void;
2535
2599
  /** In force now; all zero when the host set none. */
2536
2600
  getViewportInsets(): {
2537
2601
  top: number;
package/dist/index.d.ts CHANGED
@@ -2,14 +2,14 @@ import { A as AccessibilityType, b as SeatCommercialAttributes, C as ChartDoc, F
2
2
  export { y as ACCESSIBILITY_RING_COLOR, z as ACCESSIBILITY_TYPES, D as AccessibilityMeta, E as AuthoringObjectState, B as BoothObject, q as Category, H as ChartLayoutConstraint, a as ChartObject, p as ChartReferenceImage, I as ChartTheme, J as ConfidenceEvidenceScope, v as CubicPath, K as DecorImageObject, n as Floor, G as GAAreaObject, j as GAInventorySegment, M as LABEL_STYLE_MAX_SIZE, N as LABEL_STYLE_MIN_SIZE, O as LabelPresentation, L as LabelStyle, Q as ObjectEditorState, U as Physical3dEvidence, V as RadialClearanceLayoutConstraint, o as RectTableSeatCounts, m as RectTableSide, W as ReferenceAccessibilitySource, X as ReferenceCalibration, Y as ReferenceCategorySource, Z as ReferenceDerivedScale, _ as ReferenceDirectAnnotationSource, $ as ReferenceDirectLandmarkCandidate, a0 as ReferenceDirectLandmarkDisposition, a1 as ReferenceDirectLandmarkRole, a2 as ReferenceDirectLandmarkSource, a3 as ReferenceDirectSeatGroup, a4 as ReferenceDirectSeatImportSource, a5 as ReferenceDirectSeatPlan, a6 as ReferenceDirectStageSource, a7 as ReferenceEnrichmentStatus, a8 as ReferenceExtractEmptyReason, a9 as ReferenceExtractEnrichment, aa as ReferenceExtractInput, ab as ReferenceExtractProposal, ac as ReferenceExtractRegionSeats, ad as ReferenceInventoryExclusionSource, ae as ReferenceInventorySource, af as ReferenceMatchReport, ag as ReferenceScanProposal, ah as ReferenceScanRowProposal, ai as ReferenceScanSectionProposal, aj as ReferenceSeatSeed, ak as ReferenceSectionTraceBatchInput, al as ReferenceSectionTraceBatchProposal, am as ReferenceSectionTraceInput, an as ReferenceSectionTraceProposal, d as ResolvedSeatConfidenceEvidence, R as RowObject, ao as SEAT_COMMERCIAL_MARKS, ap as STAGE_LABEL_STYLE_MAX_SIZE, aq as SURROUNDINGS_SHAPE_ROLES, S as SeatCommercialMark, ar as SeatCommercialMeta, as as SeatConfidenceCoverage, at as SeatConfidenceEvidence, au as SeatConfidenceModelLevel, av as SeatConfidenceModeledTarget, aw as SeatConfidenceRealityLevel, e as SeatGlyphKind, l as SeatOverride, f as SeatViewCoverage, c as SeatViewMetadata, ax as SeatViewVariant, i as SectionObject, g as SectionOutlinePath, h as SectionPathSegment, ay as SelectionLayer, r as ShapeLineCap, s as ShapeLineEnding, t as ShapeLineJoin, u as ShapeObject, az as StageLabelStyle, T as TableObject, aA as TextAlignment, aB as TextBackground, w as TextObject, aC as TicketTierApplicability, aD as TicketTierEvidence, aE as TicketTierRestriction, aF as Venue3DMaterialPalette, aG as VenueSurveyRegistrationEvidence, aH as ZoneDef, aI as accessibilityMeta, aJ as accessibilityRingColor, aK as layerOf, aL as seatCommercialMeta } from './types-B97dNRwl.js';
3
3
  import { c as EventConfigurationRef, b as EventConfigurationVersion } from './eventConfigurations-CSuSanij.js';
4
4
  export { d as EVENT_CONFIGURATION_EXPORT_SCHEMA, e as EVENT_CONFIGURATION_SCHEMA, f as EventConfigurationBaseVenue, g as EventConfigurationCompatibilityIssue, h as EventConfigurationCompatibilityIssueCode, i as EventConfigurationCompatibilityResult, j as EventConfigurationExportEnvelope, k as EventConfigurationLifecycleStatus, a as EventConfigurationOcclusion, l as EventConfigurationOverlay, m as EventConfigurationParseIssue, n as EventConfigurationParseIssueCode, o as EventConfigurationParseResult, p as EventConfigurationProductionElement, E as EventConfigurationProductionElementKind, q as EventConfigurationVenueSnapshot, r as EventConfigurationVersionParseResult, s as EventConfigurationVersionSummary, L as LegacyEventConfigurationMigrationResult, t as canTransitionEventConfiguration, u as canonicalEventConfigurationJson, v as inspectEventConfigurationCompatibility, w as migrateLegacyEventConfigurations, x as parseEventConfigurationExport, y as parseEventConfigurationVersion, z as resolveEventConfigurationRollback } from './eventConfigurations-CSuSanij.js';
5
- export { A as AUTOMATIC_ROUND_TABLE_RADIUS_MAX, a as AUTOMATIC_ROUND_TABLE_RADIUS_MIN, C as ChartBoundsOptions, E as ExpandChartOptions, F as FLOOR_STACK_GAP_RATIO, b as FLOOR_STACK_MIN_SURFACE_PX, c as FloorStackOptions, d as FloorStackPlacement, R as RowSeatSlot, T as TABLE_SEAT_OFFSET, e as TableSeatSlot, f as allObjects, g as automaticRoundTableRadius, h as chartBounds, i as combinedFloorZoneId, j as expandBooth, k as expandChart, l as expandRow, m as expandRowSlots, n as expandTable, o as expandTableSlots, p as floorObjects, q as floorStackPlacements, r as floorsOf, s as initialFloorMode, t as layoutCombinedFloorPlan, u as layoutFloorStack, v as mainFloorId, w as objectCenter, x as owningSectionForObject, y as pointInPolygon, z as pointInPolygonWithHoles, B as polygonLabelPoint, D as rowInventoryCount, G as rowSeatPositions, H as stackFloors, I as tableInventoryCount, J as tableSeatCountsBySide, K as translateObject } from './tableSizing-BGl1e6Bi.js';
6
- import { g as TicketSelectionIssue, b as GroupedTableInventoryUnit } from './ticketRestrictions-BD5hvqtL.js';
7
- export { M as MAX_EVENT_INVENTORY, d as MAX_GA_CAPACITY, l as gaAreasOf, m as gaInventorySegments, n as gaUnitLabel, o as gaUnitLabels, q as growJoinedGAInventory, s as isGaUnitLabel, x as validGAInventorySegments } from './ticketRestrictions-BD5hvqtL.js';
5
+ export { A as AUTOMATIC_ROUND_TABLE_RADIUS_MAX, a as AUTOMATIC_ROUND_TABLE_RADIUS_MIN, C as ChartBoundsOptions, E as ExpandChartOptions, F as FLOOR_STACK_GAP_RATIO, b as FLOOR_STACK_MIN_SURFACE_PX, c as FloorStackOptions, d as FloorStackPlacement, R as RowSeatSlot, T as TABLE_SEAT_OFFSET, e as TableSeatSlot, f as allObjects, g as automaticRoundTableRadius, h as chartBounds, i as combinedFloorZoneId, j as expandBooth, k as expandChart, l as expandRow, m as expandRowSlots, n as expandTable, o as expandTableSlots, p as floorObjects, q as floorStackPlacements, r as floorsOf, s as initialFloorMode, t as layoutCombinedFloorPlan, u as layoutFloorStack, v as mainFloorId, w as objectCenter, x as owningSectionForObject, y as pointInPolygon, z as pointInPolygonWithHoles, B as polygonLabelPoint, D as rowInventoryCount, G as rowSeatPositions, H as stackFloors, I as tableInventoryCount, J as tableSeatCountsBySide, K as translateObject } from './tableSizing-B3SHwhya.js';
6
+ import { g as TicketSelectionIssue, b as GroupedTableInventoryUnit } from './ticketRestrictions-7N9PC4Q6.js';
7
+ export { M as MAX_EVENT_INVENTORY, d as MAX_GA_CAPACITY, l as gaAreasOf, m as gaInventorySegments, n as gaUnitLabel, o as gaUnitLabels, q as growJoinedGAInventory, s as isGaUnitLabel, x as validGAInventorySegments } from './ticketRestrictions-7N9PC4Q6.js';
8
8
  export { S as SEAT_TYPE_ICON_BODY, a as SEAT_TYPE_ICON_VIEWBOX, b as SeatTypeIconKey, c as SeatTypeIconOptions, s as seatTypeIconBody, d as seatTypeIconSvg } from './seatTypeIcons-DUEZapsF.js';
9
9
  export { A as AvailabilityRule, S as SectionNode, T as TIER_HEIGHT_M, U as UNGROUPED_ID, a as applyHidden, c as computeSections, h as hiddenObjectIds, i as isSectionHidden, s as sectionGeometry } from './sections-DcD6uNuO.js';
10
- export { M as MIN_POINTER_TARGET_PX, R as RENDERED_QUALITY_REPORT_VERSION, a as RenderedEvidenceState, b as RenderedQualityFinding, c as RenderedQualityFindingCode, d as RenderedQualityReport, e as RenderedQualitySample, i as inspectRenderedQualityEvidence } from './renderedQuality-CkrbA7iV.js';
11
- import { I as ISeatmapRenderer, b as RendererOptions, S as SeatStatus, c as SeatMark, E as ExpandedSeat, G as GAAreaState, d as RendererViewMode, e as RendererMinimapSnapshot, L as LodRung, R as RendererQualityEvidence, f as RendererCallbacks } from './renderer-DUko-vky.js';
12
- export { C as CHART_STORAGE_KEY, g as RenderedBookableLabelEvidence, a as RenderedFreeTextEvidence, h as RenderedGAAreaEvidence, i as RenderedHierarchyLabelEvidence, j as RenderedLabelHiddenReason, k as RenderedRowLabelEvidence, l as RendererHoverDetails, m as RendererMinimapSeat, n as RendererMinimapSection, o as SeatMarkKind } from './renderer-DUko-vky.js';
10
+ export { M as MIN_POINTER_TARGET_PX, R as RENDERED_QUALITY_REPORT_VERSION, a as RenderedEvidenceState, b as RenderedQualityFinding, c as RenderedQualityFindingCode, d as RenderedQualityReport, e as RenderedQualitySample, i as inspectRenderedQualityEvidence } from './renderedQuality-Dy7LBzNF.js';
11
+ import { I as ISeatmapRenderer, b as RendererOptions, S as SeatStatus, c as SeatMark, E as ExpandedSeat, G as GAAreaState, d as RendererViewMode, e as RendererMinimapSnapshot, L as LodRung, R as RendererQualityEvidence, f as RendererCallbacks } from './renderer-xE1rZCGy.js';
12
+ export { C as CHART_STORAGE_KEY, g as RenderedBookableLabelEvidence, a as RenderedFreeTextEvidence, h as RenderedGAAreaEvidence, i as RenderedHierarchyLabelEvidence, j as RenderedLabelHiddenReason, k as RenderedRowLabelEvidence, l as RendererHoverDetails, m as RendererMinimapSeat, n as RendererMinimapSection, o as SeatMarkKind } from './renderer-xE1rZCGy.js';
13
13
  import './segmentedRowModel-NH_qhgic.js';
14
14
 
15
15
  /**
@@ -418,6 +418,8 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
418
418
  /** Stage pose the last overview fit landed on — see zoomToFit. */
419
419
  private fitPose;
420
420
  private viewportInsets;
421
+ /** Bottom chrome the fit keeps clear when it can — see camera.clearFitChrome. */
422
+ private fitClearanceBottom;
421
423
  /** Effective seat radius (base × theme.seatScale), set per chart in setChart. */
422
424
  private seatR;
423
425
  /** The radius a marker is actually DRAWN at — the authored radius capped by
@@ -514,6 +516,13 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
514
516
  * be overwritten by its next frame.
515
517
  */
516
518
  private activateBeacon;
519
+ /** Re-entrancy guard: sectionFrameScale measures labels through the same
520
+ * camera bounds that ask for this, so a nested read answers "no room". */
521
+ private readingFocusedFrame;
522
+ /** The focused section's frame scale for zoomBounds, or 0 without a focus. */
523
+ private focusedFrameScaleForBounds;
524
+ /** Dive to the buyer's own seats in this section; false when it holds none. */
525
+ private focusOwnedSeatsIn;
517
526
  /** Rebuild the beacons for this camera, and hand their rings to the breath. */
518
527
  private syncBeacons;
519
528
  /** The buyer's own seats in a section, in chart order. */
@@ -705,6 +714,7 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
705
714
  } | null): void;
706
715
  /** In force now; all zero when the host set none. */
707
716
  getViewportInsets(): ViewportInsets;
717
+ setFitClearance(bottom: number): void;
708
718
  private framingViewport;
709
719
  /** Keep a buyer-driven camera move over the venue — see engine/panBounds. */
710
720
  private constrainPan;
@@ -722,7 +732,7 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
722
732
  * The stage already represents the usable map area (the picker side panel is
723
733
  * a sibling), so measuring it here naturally respects open/closed panels.
724
734
  */
725
- refitCurrentView(): void;
735
+ refitCurrentView(keepBuyerCamera?: boolean): void;
726
736
  /** Step factor for the on-screen +/− buttons (B1) — same clamp path as pinch/wheel. */
727
737
  private static readonly ZOOM_STEP;
728
738
  /** The camera as it stands, for a caller rebuilding the scene under a buyer
@@ -1214,6 +1224,26 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
1214
1224
  x: number;
1215
1225
  y: number;
1216
1226
  }): boolean;
1227
+ /**
1228
+ * May a press or a hover on this logical section DO anything?
1229
+ *
1230
+ * False for a block the buyer cannot buy into: one the operator closed for
1231
+ * this event, and one with no free seat left. Owner report 2026-09-07 — the
1232
+ * two closed strips beside the stage on the Ahoy Rotterdam chart (Fb, Fc)
1233
+ * opened a section card and dived the camera exactly like a sellable block,
1234
+ * so the buyer was taken somewhere there was nothing to take.
1235
+ *
1236
+ * The predicate is the minimap's `inactive` one (see getMinimapSnapshot), so
1237
+ * "inert" and "painted as unavailable" can never drift apart. Asked per
1238
+ * LOGICAL section, because that is what a tap resolves to and an arena
1239
+ * section drawn as several polygons is one place: interactive when ANY of
1240
+ * its components still has something.
1241
+ *
1242
+ * The buyer's OWN seats win over both: a block they hold every remaining
1243
+ * seat in reads as sold out, and it must still be possible to get back to
1244
+ * it. That is also the badge-tap path's destination.
1245
+ */
1246
+ sectionInteractive(sectionId: string): boolean;
1217
1247
  /** Seat ids belonging to a section (Slice 5 section-summary card). */
1218
1248
  sectionMembers(id: string): string[];
1219
1249
  private isSelectable;
@@ -1342,6 +1372,16 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
1342
1372
  private retargetRoamingFocus;
1343
1373
  /** rAF-coalesced `onViewChange` — at most one host callback per animation frame. */
1344
1374
  private scheduleViewChange;
1375
+ /**
1376
+ * Labels follow the finger, not the lift. The label pass used to run only in
1377
+ * afterViewChange, i.e. when the gesture ended: every seat number and row
1378
+ * letter panned into view stayed blank until the buyer let go, and a slow
1379
+ * drag across a block read as the map struggling (owner, 2026-09-07, phone).
1380
+ * A throttled pass during the move keeps the newly revealed labels coming;
1381
+ * the settle still runs the full pass.
1382
+ */
1383
+ private movingLabelTimer;
1384
+ private refreshLabelsWhileMoving;
1345
1385
  /** Keep focal labels centred while their world font size tracks camera scale. */
1346
1386
  private sizeLabel;
1347
1387
  private updateLOD;
@@ -2422,6 +2462,26 @@ declare class PickerController {
2422
2462
  * a guest-count change silently re-based the countdown on the server default.
2423
2463
  */
2424
2464
  replaceTableQuantity(label: string, quantity: number, ttlMs?: number): Promise<HoldInfo | null>;
2465
+ /** Narrow (phone) layout, as reported by the host widget; see setNarrowLayout. */
2466
+ private narrowLayout;
2467
+ /**
2468
+ * The host tells the controller which layout it is in. The row-band rung
2469
+ * (rows drawn as category-coloured lines before the seats appear) is a
2470
+ * desktop treatment (owner call, 2026-09-07): on a phone the lines did not
2471
+ * read as rows, and a section tap should land straight on solid seats.
2472
+ * Optional on older hosts — a widget that never calls this keeps bands on.
2473
+ */
2474
+ setNarrowLayout(narrow: boolean): void;
2475
+ /**
2476
+ * Bands are wanted where the host asked, the chart allows, and the rung is
2477
+ * switched on at all. The layout gate exists (`ROW_BANDS_ON_NARROW`): the
2478
+ * owner first wanted the lines desktop-only, then, the same evening
2479
+ * (2026-09-07), on the phone as well — so a phone section tap lands on the
2480
+ * category lines like desktop. Flip the constant to make the rung
2481
+ * desktop-only again; the `sectionDetail` theme knob turns it off per chart.
2482
+ */
2483
+ private rowBandsWanted;
2484
+ private applyRowBandPreview;
2425
2485
  private rendererSelectionCap;
2426
2486
  private selectionGuestCount;
2427
2487
  private handleRendererSelect;
@@ -2532,6 +2592,10 @@ declare class PickerController {
2532
2592
  bottom?: number;
2533
2593
  left?: number;
2534
2594
  } | null): void;
2595
+ private fitClearance;
2596
+ /** Bottom chrome (the phone zoom column) the fit lifts the venue above when
2597
+ * there is room — a soft inset that never shrinks the venue. */
2598
+ setFitClearance(bottom: number): void;
2535
2599
  /** In force now; all zero when the host set none. */
2536
2600
  getViewportInsets(): {
2537
2601
  top: number;