@seatlayer/core 0.77.1 → 0.78.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 (100) hide show
  1. package/dist/ar-U7RQGDKI.js +1 -0
  2. package/dist/be-AF2KLUPU.js +1 -0
  3. package/dist/bg-KQXVZFP5.js +1 -0
  4. package/dist/ca-2Z6OXARI.js +1 -0
  5. package/dist/{chunk-BXU5D2Q5.js → chunk-SSBMTFAV.js} +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/layout/index.d.cts +2 -2
  9. package/dist/core/layout/index.d.ts +2 -2
  10. package/dist/core/quality/index.cjs +1 -1
  11. package/dist/core/quality/index.d.cts +2 -2
  12. package/dist/core/quality/index.d.ts +2 -2
  13. package/dist/core/quality/index.js +1 -1
  14. package/dist/core/sections/index.d.cts +1 -1
  15. package/dist/core/sections/index.d.ts +1 -1
  16. package/dist/cs-OA5PNXZF.js +1 -0
  17. package/dist/cy-SEZB6CFS.js +1 -0
  18. package/dist/da-WNYFNHJW.js +1 -0
  19. package/dist/de-GZ5KABWX.js +1 -0
  20. package/dist/el-ROWVMGFA.js +1 -0
  21. package/dist/es-WDEEXPGZ.js +1 -0
  22. package/dist/et-UZ6PWBEI.js +1 -0
  23. package/dist/fa-6RECOCDS.js +1 -0
  24. package/dist/fi-W2NFGTLE.js +1 -0
  25. package/dist/fr-TGQU57AA.js +1 -0
  26. package/dist/he-GW4WHBMC.js +1 -0
  27. package/dist/hr-XYCPPQ2E.js +1 -0
  28. package/dist/hu-MXARVYEB.js +1 -0
  29. package/dist/index.cjs +1 -1
  30. package/dist/index.d.cts +112 -6
  31. package/dist/index.d.ts +112 -6
  32. package/dist/index.js +1 -1
  33. package/dist/it-AEJ2XXPK.js +1 -0
  34. package/dist/ja-GEZL7WIS.js +1 -0
  35. package/dist/ku-X2WS563F.js +1 -0
  36. package/dist/localeLoaders-YAOADFDS.js +1 -0
  37. package/dist/lt-O6WX2MFZ.js +1 -0
  38. package/dist/lv-JQH24NH4.js +1 -0
  39. package/dist/nl-OYNNCIHM.js +1 -0
  40. package/dist/no-TJCQIIDH.js +1 -0
  41. package/dist/pl-WWCEGFPX.js +1 -0
  42. package/dist/pt-FWBIZXLG.js +1 -0
  43. package/dist/{renderedQuality-DN8SFFjk.d.ts → renderedQuality-CXWlCsRS.d.ts} +1 -1
  44. package/dist/{renderedQuality-CRLkEGf8.d.cts → renderedQuality-rc4xZnIy.d.cts} +1 -1
  45. package/dist/{renderer-ByLmyQe_.d.ts → renderer-Cqd5w55S.d.ts} +26 -1
  46. package/dist/{renderer-B6kkgOHz.d.cts → renderer-DW7ejcxk.d.cts} +26 -1
  47. package/dist/ro-RHGJMFQQ.js +1 -0
  48. package/dist/ru-6IAWMJIM.js +1 -0
  49. package/dist/sk-2NHU34X2.js +1 -0
  50. package/dist/sl-O2QSGQWN.js +1 -0
  51. package/dist/sr-XK7AKCDR.js +1 -0
  52. package/dist/sv-IPA5ZBAA.js +1 -0
  53. package/dist/{tableSizing-DKygWd7z.d.cts → tableSizing-OzEvBirS.d.cts} +1 -1
  54. package/dist/{tableSizing-B0JegL6B.d.ts → tableSizing-uVEPXCUD.d.ts} +1 -1
  55. package/dist/{ticketRestrictions-Bp7ET0j4.d.ts → ticketRestrictions-BH430to6.d.ts} +1 -1
  56. package/dist/{ticketRestrictions-CvGDnGS8.d.cts → ticketRestrictions-CGD-l3if.d.cts} +1 -1
  57. package/dist/tr-TM3T5KYL.js +1 -0
  58. package/dist/uk-37NGTGA6.js +1 -0
  59. package/dist/view3d/index.d.cts +1 -1
  60. package/dist/view3d/index.d.ts +1 -1
  61. package/dist/zh-Hans-QKYGPQQE.js +1 -0
  62. package/dist/zh-Hant-AUEE5P67.js +1 -0
  63. package/package.json +1 -1
  64. package/dist/ar-ESLFQEY3.js +0 -1
  65. package/dist/be-7WI4WG2B.js +0 -1
  66. package/dist/bg-KKEOOUYL.js +0 -1
  67. package/dist/ca-L36KKI76.js +0 -1
  68. package/dist/cs-2IEWVOHA.js +0 -1
  69. package/dist/cy-A5YBQD5Q.js +0 -1
  70. package/dist/da-IDXUY3QI.js +0 -1
  71. package/dist/de-L5PFY4CY.js +0 -1
  72. package/dist/el-4DPNHJGB.js +0 -1
  73. package/dist/es-IMADA3UR.js +0 -1
  74. package/dist/et-G6PPK4SF.js +0 -1
  75. package/dist/fa-3RYGYXBU.js +0 -1
  76. package/dist/fi-KRSYZSV4.js +0 -1
  77. package/dist/fr-FOSKFLMV.js +0 -1
  78. package/dist/he-RXSGTRSH.js +0 -1
  79. package/dist/hr-IMBN4Z7O.js +0 -1
  80. package/dist/hu-UYWLVBH3.js +0 -1
  81. package/dist/it-ZAWFQCOM.js +0 -1
  82. package/dist/ja-QZGXTROI.js +0 -1
  83. package/dist/ku-ZCTX4KKG.js +0 -1
  84. package/dist/localeLoaders-BZZWN35C.js +0 -1
  85. package/dist/lt-N2OMHLDZ.js +0 -1
  86. package/dist/lv-WLIXXNIX.js +0 -1
  87. package/dist/nl-LZILGXRW.js +0 -1
  88. package/dist/no-2OJ4BSZI.js +0 -1
  89. package/dist/pl-FZUMWN56.js +0 -1
  90. package/dist/pt-R4XWF7UT.js +0 -1
  91. package/dist/ro-WK3CNXGW.js +0 -1
  92. package/dist/ru-AGP7UPXQ.js +0 -1
  93. package/dist/sk-LNR3ENI4.js +0 -1
  94. package/dist/sl-UG367TMJ.js +0 -1
  95. package/dist/sr-IHG5CL3F.js +0 -1
  96. package/dist/sv-RIFQBC5U.js +0 -1
  97. package/dist/tr-LWSQYBXN.js +0 -1
  98. package/dist/uk-ZSWFWCW7.js +0 -1
  99. package/dist/zh-Hans-P4CJH4VJ.js +0 -1
  100. package/dist/zh-Hant-X7CHEXML.js +0 -1
package/dist/index.d.cts CHANGED
@@ -2,13 +2,13 @@ import { C as ChartDoc, F as FloorLabelStyle, P as Point, A as AccessibilityType
2
2
  export { x as ACCESSIBILITY_RING_COLOR, y as ACCESSIBILITY_TYPES, z as AccessibilityMeta, D as AuthoringObjectState, B as BoothObject, p as Category, E as ChartLayoutConstraint, a as ChartObject, o as ChartReferenceImage, H as ChartTheme, I as ConfidenceEvidenceScope, u as CubicPath, J as DecorImageObject, m as Floor, G as GAAreaObject, h as GAInventorySegment, K as LABEL_STYLE_MAX_SIZE, M as LABEL_STYLE_MIN_SIZE, N as LabelPresentation, L as LabelStyle, O as ObjectEditorState, Q as Physical3dEvidence, U as RadialClearanceLayoutConstraint, n as RectTableSeatCounts, l as RectTableSide, V as ReferenceAccessibilitySource, W as ReferenceCalibration, X as ReferenceCategorySource, Y as ReferenceDerivedScale, Z as ReferenceDirectAnnotationSource, _ as ReferenceDirectLandmarkCandidate, $ as ReferenceDirectLandmarkDisposition, a0 as ReferenceDirectLandmarkRole, a1 as ReferenceDirectLandmarkSource, a2 as ReferenceDirectSeatGroup, a3 as ReferenceDirectSeatImportSource, a4 as ReferenceDirectSeatPlan, a5 as ReferenceDirectStageSource, a6 as ReferenceEnrichmentStatus, a7 as ReferenceExtractEmptyReason, a8 as ReferenceExtractEnrichment, a9 as ReferenceExtractInput, aa as ReferenceExtractProposal, ab as ReferenceExtractRegionSeats, ac as ReferenceInventoryExclusionSource, ad as ReferenceInventorySource, ae as ReferenceMatchReport, af as ReferenceScanProposal, ag as ReferenceScanRowProposal, ah as ReferenceScanSectionProposal, ai as ReferenceSeatSeed, aj as ReferenceSectionTraceBatchInput, ak as ReferenceSectionTraceBatchProposal, al as ReferenceSectionTraceInput, am as ReferenceSectionTraceProposal, c as ResolvedSeatConfidenceEvidence, R as RowObject, an as SEAT_COMMERCIAL_MARKS, ao as STAGE_LABEL_STYLE_MAX_SIZE, ap as SURROUNDINGS_SHAPE_ROLES, aq as SeatCommercialMark, ar as SeatCommercialMeta, as as SeatConfidenceCoverage, at as SeatConfidenceEvidence, au as SeatConfidenceModelLevel, av as SeatConfidenceModeledTarget, aw as SeatConfidenceRealityLevel, d as SeatGlyphKind, k as SeatOverride, e as SeatViewCoverage, b as SeatViewMetadata, ax as SeatViewVariant, j as SectionObject, f as SectionOutlinePath, g as SectionPathSegment, ay as SelectionLayer, q as ShapeLineCap, r as ShapeLineEnding, s as ShapeLineJoin, t as ShapeObject, az as StageLabelStyle, T as TableObject, aA as TextAlignment, aB as TextBackground, v 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-Dq-ipTBG.cjs';
3
3
  import { c as EventConfigurationRef, b as EventConfigurationVersion } from './eventConfigurations-vOMFVz7c.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-vOMFVz7c.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 expandBooth, j as expandChart, k as expandRow, l as expandRowSlots, m as expandTable, n as expandTableSlots, o as floorObjects, p as floorStackPlacements, q as floorsOf, r as initialFloorMode, s as layoutFloorStack, t as mainFloorId, u as objectCenter, v as owningSectionForObject, w as pointInPolygon, x as pointInPolygonWithHoles, y as polygonLabelPoint, z as rowInventoryCount, B as rowSeatPositions, D as stackFloors, G as tableInventoryCount, H as tableSeatCountsBySide, I as translateObject } from './tableSizing-DKygWd7z.cjs';
6
- import { c as TicketSelectionIssue } from './ticketRestrictions-CvGDnGS8.cjs';
7
- export { M as MAX_EVENT_INVENTORY, a as MAX_GA_CAPACITY, g as gaAreasOf, h as gaInventorySegments, i as gaUnitLabel, j as gaUnitLabels, k as growJoinedGAInventory, l as isGaUnitLabel, v as validGAInventorySegments } from './ticketRestrictions-CvGDnGS8.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 expandBooth, j as expandChart, k as expandRow, l as expandRowSlots, m as expandTable, n as expandTableSlots, o as floorObjects, p as floorStackPlacements, q as floorsOf, r as initialFloorMode, s as layoutFloorStack, t as mainFloorId, u as objectCenter, v as owningSectionForObject, w as pointInPolygon, x as pointInPolygonWithHoles, y as polygonLabelPoint, z as rowInventoryCount, B as rowSeatPositions, D as stackFloors, G as tableInventoryCount, H as tableSeatCountsBySide, I as translateObject } from './tableSizing-OzEvBirS.cjs';
6
+ import { c as TicketSelectionIssue } from './ticketRestrictions-CGD-l3if.cjs';
7
+ export { M as MAX_EVENT_INVENTORY, a as MAX_GA_CAPACITY, g as gaAreasOf, h as gaInventorySegments, i as gaUnitLabel, j as gaUnitLabels, k as growJoinedGAInventory, l as isGaUnitLabel, v as validGAInventorySegments } from './ticketRestrictions-CGD-l3if.cjs';
8
8
  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-CQ0sd37E.cjs';
9
- 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-CRLkEGf8.cjs';
10
- 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-B6kkgOHz.cjs';
11
- 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-B6kkgOHz.cjs';
9
+ 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-rc4xZnIy.cjs';
10
+ 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-DW7ejcxk.cjs';
11
+ 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-DW7ejcxk.cjs';
12
12
  import './segmentedRowModel-DqFhb-7Q.cjs';
13
13
 
14
14
  /**
@@ -273,6 +273,11 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
273
273
  /** Non-listening visual dim outside the focused section. One overlay replaces
274
274
  * descendant opacity mutations across every seat in the venue. */
275
275
  private focusDimOverlay;
276
+ /** Does entering a section draw the entrance dim + backdrop? Off for narrow
277
+ * (phone) layouts — see {@link setSectionFocusDim}. */
278
+ private sectionFocusDim;
279
+ /** How many camera moves the BUYER has made — see {@link getCameraGestureCount}. */
280
+ private cameraGestures;
276
281
  /** Object id → floor id (multi-floor only) — resolves a deck tap in the 3D stack. */
277
282
  private objectFloor;
278
283
  /** Seats with no owning section, computed once per chart — see
@@ -431,6 +436,18 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
431
436
  private syncBeacons;
432
437
  /** The buyer's own seats in a section, in chart order. */
433
438
  private ownedSeatIds;
439
+ /**
440
+ * Where a section's beacon or badge sits: over the buyer's OWN seats in it.
441
+ *
442
+ * It used to pin to the section's name label. A name is placed by the label
443
+ * planner — pushed clear of its neighbours, moved off a rink — so on a big
444
+ * stand it can sit a whole block away from a front-row pick, and a buyer
445
+ * reading the map saw "2" over the section next door (client report,
446
+ * 2026-09-03). The seats themselves cannot be anywhere but where they are;
447
+ * the mark goes to their centroid, and only a section with no owned seats
448
+ * falls back to its name.
449
+ */
450
+ private ownedAnchor;
434
451
  /** The buyer's seats, still visible once the seats have melted into blocks. */
435
452
  private get owned();
436
453
  /**
@@ -878,6 +895,28 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
878
895
  * behaviour, the glide is only an entrance.
879
896
  */
880
897
  private releaseSectionFocusDim;
898
+ /**
899
+ * Take the entrance dim + backdrop down, leaving every other part of the
900
+ * focus (id, anchor, LOD, camera) alone. Shared by the buyer's first pan and
901
+ * by {@link setSectionFocusDim} switching the treatment off mid-focus.
902
+ */
903
+ private dropFocusDim;
904
+ /**
905
+ * Should entering a section dim the rest of the venue?
906
+ *
907
+ * On a desktop map the entrance dim says "this is the section you are in"
908
+ * against a bowl that is still mostly on screen. On a phone the focused
909
+ * section fills the viewport, so the same treatment only blackens the strip
910
+ * of edges around it — cost without the message (client report, narrow
911
+ * layout). The picker turns it off for `data-layout="narrow"` and back on
912
+ * for wide.
913
+ *
914
+ * Everything else about a focus is untouched: focusedSectionId, focusAnchor,
915
+ * the LOD pass and the camera glide are the same either way, and
916
+ * `focusedSeatOpacity` is already gated on the overlay existing, so seats and
917
+ * their labels simply stay at full brightness.
918
+ */
919
+ setSectionFocusDim(enabled: boolean): void;
881
920
  /** Clear an AXS section focus — restore full-bowl brightness + drop the backdrop. */
882
921
  clearSectionFocus(): void;
883
922
  /** The currently AXS-focused section id, or null. */
@@ -926,6 +965,33 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
926
965
  /** Minimap drag/click navigation: preserve zoom and move one world point to
927
966
  * the viewport centre. Works for flat and projected views via worldToScreen. */
928
967
  panToWorld(point: Point): void;
968
+ /**
969
+ * Pan by a screen-space delta — zoom untouched, nothing reframed.
970
+ *
971
+ * `panToWorld` centres a point, which is the wrong instrument when only ONE
972
+ * axis matters: the phone confirm card is a resting bottom sheet, and a seat
973
+ * tapped under it has to be lifted into the clear band above the sheet with
974
+ * its x exactly where the buyer left it. Centring would slide the map
975
+ * sideways as well, which reads as the map running away from the tap.
976
+ *
977
+ * Animated by default with the camera glide's own easing, so the lift is
978
+ * read as the map moving rather than as a cut; `animate: false` and reduced
979
+ * motion both snap.
980
+ */
981
+ panScreenBy(delta: Point, opts?: {
982
+ animate?: boolean;
983
+ }): void;
984
+ /**
985
+ * How many camera moves the buyer has made with their own hands — a drag, a
986
+ * pinch or a wheel. Monotonic, and it counts GESTURES, not frames: one drag
987
+ * of any length is one.
988
+ *
989
+ * For a host that moved the camera itself and wants to put it back only if
990
+ * the buyer has not since taken over. Comparing camera positions cannot
991
+ * answer that — a programmatic glide is still in flight, and a pan that ends
992
+ * where it started is indistinguishable from no pan at all.
993
+ */
994
+ getCameraGestureCount(): number;
929
995
  /** Legend hover: highlight one category (dim the rest), or null to clear. */
930
996
  setCategoryHighlight(key: string | null): void;
931
997
  private renderBackground;
@@ -2279,6 +2345,9 @@ declare class PickerController {
2279
2345
  getAccessibilityFilter(): AccessibilityType[] | null;
2280
2346
  /** Where {@link focusNextAccessibleSection} last stopped. */
2281
2347
  private accessStepAt;
2348
+ /** The camera a price band took from the buyer — see
2349
+ * {@link PickerFocusContext.bandReturnPose}. */
2350
+ private bandReturnPose;
2282
2351
  /**
2283
2352
  * The state the filter-driven camera rules read and change — see
2284
2353
  * ./pickerFocus. Rebuilt per call; the accessor pair keeps the controller
@@ -2457,12 +2526,49 @@ declare class PickerController {
2457
2526
  * any window in which a silent server could leave the map wrong.
2458
2527
  */
2459
2528
  private lastSnapshotAt;
2529
+ /**
2530
+ * Has `renderer.setChart()` run? `this.renderer` is NOT that answer — it is
2531
+ * assigned the moment the stage is created, which is before the chart fetch
2532
+ * is awaited, so a snapshot can reach a renderer that holds no seats.
2533
+ */
2534
+ private seatsBuilt;
2535
+ /** The authoritative map that arrived before the chart. See ./snapshotOrdering. */
2536
+ private pendingSnapshot;
2537
+ /** Bumped by every LIVE frame applied here. See ./snapshotOrdering. */
2538
+ private socketVersion;
2460
2539
  private snapshotIsFresh;
2461
2540
  /** The live status of one unit, honouring the projection's default. */
2462
2541
  private statusOf;
2463
2542
  private clearBookedHoldIfSettled;
2464
2543
  /** Repaint from truth. Coalesced — see snapshotCoalescer.ts. */
2465
2544
  private resnapshot;
2545
+ /**
2546
+ * Repaint from truth on a realtime client's behalf — coalesced, never forced.
2547
+ *
2548
+ * The public entry point for a transport-owned socket (the widget's
2549
+ * `BuyerRealtimeClient` and its `createControllerSink`). It used to reach for
2550
+ * `refresh()`, which is the FORCED read, so every connect and every section
2551
+ * frame bypassed the coalescer and issued its own `/objects?compact=1` —
2552
+ * two full snapshots per open on the measured DesiPass boot.
2553
+ *
2554
+ * A socket opening is not evidence that anything changed, so a boot snapshot
2555
+ * this young answers for it. `refresh()` stays the forced call for a caller
2556
+ * that just mutated state and needs the server's answer to its own write.
2557
+ */
2558
+ resync(opts?: {
2559
+ reason?: 'connect' | 'frame';
2560
+ }): Promise<void>;
2561
+ /**
2562
+ * Paint a COMPLETE authoritative projection handed over by a live socket.
2563
+ *
2564
+ * The frame the server volunteers on connect already contains everything an
2565
+ * `/objects` read would return, so a sink that can take it never needs the
2566
+ * round trip. Public because the widget's socket lives outside this class.
2567
+ */
2568
+ applyProjection(projection: {
2569
+ default: string;
2570
+ exceptions: Record<string, string>;
2571
+ }): void;
2466
2572
  /**
2467
2573
  * Re-pull the status snapshot on demand. Live surfaces rarely need this (the
2468
2574
  * socket keeps them fresh); local/mock transports with no socket call it
package/dist/index.d.ts CHANGED
@@ -2,13 +2,13 @@ import { C as ChartDoc, F as FloorLabelStyle, P as Point, A as AccessibilityType
2
2
  export { x as ACCESSIBILITY_RING_COLOR, y as ACCESSIBILITY_TYPES, z as AccessibilityMeta, D as AuthoringObjectState, B as BoothObject, p as Category, E as ChartLayoutConstraint, a as ChartObject, o as ChartReferenceImage, H as ChartTheme, I as ConfidenceEvidenceScope, u as CubicPath, J as DecorImageObject, m as Floor, G as GAAreaObject, h as GAInventorySegment, K as LABEL_STYLE_MAX_SIZE, M as LABEL_STYLE_MIN_SIZE, N as LabelPresentation, L as LabelStyle, O as ObjectEditorState, Q as Physical3dEvidence, U as RadialClearanceLayoutConstraint, n as RectTableSeatCounts, l as RectTableSide, V as ReferenceAccessibilitySource, W as ReferenceCalibration, X as ReferenceCategorySource, Y as ReferenceDerivedScale, Z as ReferenceDirectAnnotationSource, _ as ReferenceDirectLandmarkCandidate, $ as ReferenceDirectLandmarkDisposition, a0 as ReferenceDirectLandmarkRole, a1 as ReferenceDirectLandmarkSource, a2 as ReferenceDirectSeatGroup, a3 as ReferenceDirectSeatImportSource, a4 as ReferenceDirectSeatPlan, a5 as ReferenceDirectStageSource, a6 as ReferenceEnrichmentStatus, a7 as ReferenceExtractEmptyReason, a8 as ReferenceExtractEnrichment, a9 as ReferenceExtractInput, aa as ReferenceExtractProposal, ab as ReferenceExtractRegionSeats, ac as ReferenceInventoryExclusionSource, ad as ReferenceInventorySource, ae as ReferenceMatchReport, af as ReferenceScanProposal, ag as ReferenceScanRowProposal, ah as ReferenceScanSectionProposal, ai as ReferenceSeatSeed, aj as ReferenceSectionTraceBatchInput, ak as ReferenceSectionTraceBatchProposal, al as ReferenceSectionTraceInput, am as ReferenceSectionTraceProposal, c as ResolvedSeatConfidenceEvidence, R as RowObject, an as SEAT_COMMERCIAL_MARKS, ao as STAGE_LABEL_STYLE_MAX_SIZE, ap as SURROUNDINGS_SHAPE_ROLES, aq as SeatCommercialMark, ar as SeatCommercialMeta, as as SeatConfidenceCoverage, at as SeatConfidenceEvidence, au as SeatConfidenceModelLevel, av as SeatConfidenceModeledTarget, aw as SeatConfidenceRealityLevel, d as SeatGlyphKind, k as SeatOverride, e as SeatViewCoverage, b as SeatViewMetadata, ax as SeatViewVariant, j as SectionObject, f as SectionOutlinePath, g as SectionPathSegment, ay as SelectionLayer, q as ShapeLineCap, r as ShapeLineEnding, s as ShapeLineJoin, t as ShapeObject, az as StageLabelStyle, T as TableObject, aA as TextAlignment, aB as TextBackground, v 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-Dq-ipTBG.js';
3
3
  import { c as EventConfigurationRef, b as EventConfigurationVersion } from './eventConfigurations-71rHjKl7.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-71rHjKl7.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 expandBooth, j as expandChart, k as expandRow, l as expandRowSlots, m as expandTable, n as expandTableSlots, o as floorObjects, p as floorStackPlacements, q as floorsOf, r as initialFloorMode, s as layoutFloorStack, t as mainFloorId, u as objectCenter, v as owningSectionForObject, w as pointInPolygon, x as pointInPolygonWithHoles, y as polygonLabelPoint, z as rowInventoryCount, B as rowSeatPositions, D as stackFloors, G as tableInventoryCount, H as tableSeatCountsBySide, I as translateObject } from './tableSizing-B0JegL6B.js';
6
- import { c as TicketSelectionIssue } from './ticketRestrictions-Bp7ET0j4.js';
7
- export { M as MAX_EVENT_INVENTORY, a as MAX_GA_CAPACITY, g as gaAreasOf, h as gaInventorySegments, i as gaUnitLabel, j as gaUnitLabels, k as growJoinedGAInventory, l as isGaUnitLabel, v as validGAInventorySegments } from './ticketRestrictions-Bp7ET0j4.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 expandBooth, j as expandChart, k as expandRow, l as expandRowSlots, m as expandTable, n as expandTableSlots, o as floorObjects, p as floorStackPlacements, q as floorsOf, r as initialFloorMode, s as layoutFloorStack, t as mainFloorId, u as objectCenter, v as owningSectionForObject, w as pointInPolygon, x as pointInPolygonWithHoles, y as polygonLabelPoint, z as rowInventoryCount, B as rowSeatPositions, D as stackFloors, G as tableInventoryCount, H as tableSeatCountsBySide, I as translateObject } from './tableSizing-uVEPXCUD.js';
6
+ import { c as TicketSelectionIssue } from './ticketRestrictions-BH430to6.js';
7
+ export { M as MAX_EVENT_INVENTORY, a as MAX_GA_CAPACITY, g as gaAreasOf, h as gaInventorySegments, i as gaUnitLabel, j as gaUnitLabels, k as growJoinedGAInventory, l as isGaUnitLabel, v as validGAInventorySegments } from './ticketRestrictions-BH430to6.js';
8
8
  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-F6wMlVqx.js';
9
- 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-DN8SFFjk.js';
10
- 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-ByLmyQe_.js';
11
- 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-ByLmyQe_.js';
9
+ 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-CXWlCsRS.js';
10
+ 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-Cqd5w55S.js';
11
+ 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-Cqd5w55S.js';
12
12
  import './segmentedRowModel-D-CEgxg7.js';
13
13
 
14
14
  /**
@@ -273,6 +273,11 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
273
273
  /** Non-listening visual dim outside the focused section. One overlay replaces
274
274
  * descendant opacity mutations across every seat in the venue. */
275
275
  private focusDimOverlay;
276
+ /** Does entering a section draw the entrance dim + backdrop? Off for narrow
277
+ * (phone) layouts — see {@link setSectionFocusDim}. */
278
+ private sectionFocusDim;
279
+ /** How many camera moves the BUYER has made — see {@link getCameraGestureCount}. */
280
+ private cameraGestures;
276
281
  /** Object id → floor id (multi-floor only) — resolves a deck tap in the 3D stack. */
277
282
  private objectFloor;
278
283
  /** Seats with no owning section, computed once per chart — see
@@ -431,6 +436,18 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
431
436
  private syncBeacons;
432
437
  /** The buyer's own seats in a section, in chart order. */
433
438
  private ownedSeatIds;
439
+ /**
440
+ * Where a section's beacon or badge sits: over the buyer's OWN seats in it.
441
+ *
442
+ * It used to pin to the section's name label. A name is placed by the label
443
+ * planner — pushed clear of its neighbours, moved off a rink — so on a big
444
+ * stand it can sit a whole block away from a front-row pick, and a buyer
445
+ * reading the map saw "2" over the section next door (client report,
446
+ * 2026-09-03). The seats themselves cannot be anywhere but where they are;
447
+ * the mark goes to their centroid, and only a section with no owned seats
448
+ * falls back to its name.
449
+ */
450
+ private ownedAnchor;
434
451
  /** The buyer's seats, still visible once the seats have melted into blocks. */
435
452
  private get owned();
436
453
  /**
@@ -878,6 +895,28 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
878
895
  * behaviour, the glide is only an entrance.
879
896
  */
880
897
  private releaseSectionFocusDim;
898
+ /**
899
+ * Take the entrance dim + backdrop down, leaving every other part of the
900
+ * focus (id, anchor, LOD, camera) alone. Shared by the buyer's first pan and
901
+ * by {@link setSectionFocusDim} switching the treatment off mid-focus.
902
+ */
903
+ private dropFocusDim;
904
+ /**
905
+ * Should entering a section dim the rest of the venue?
906
+ *
907
+ * On a desktop map the entrance dim says "this is the section you are in"
908
+ * against a bowl that is still mostly on screen. On a phone the focused
909
+ * section fills the viewport, so the same treatment only blackens the strip
910
+ * of edges around it — cost without the message (client report, narrow
911
+ * layout). The picker turns it off for `data-layout="narrow"` and back on
912
+ * for wide.
913
+ *
914
+ * Everything else about a focus is untouched: focusedSectionId, focusAnchor,
915
+ * the LOD pass and the camera glide are the same either way, and
916
+ * `focusedSeatOpacity` is already gated on the overlay existing, so seats and
917
+ * their labels simply stay at full brightness.
918
+ */
919
+ setSectionFocusDim(enabled: boolean): void;
881
920
  /** Clear an AXS section focus — restore full-bowl brightness + drop the backdrop. */
882
921
  clearSectionFocus(): void;
883
922
  /** The currently AXS-focused section id, or null. */
@@ -926,6 +965,33 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
926
965
  /** Minimap drag/click navigation: preserve zoom and move one world point to
927
966
  * the viewport centre. Works for flat and projected views via worldToScreen. */
928
967
  panToWorld(point: Point): void;
968
+ /**
969
+ * Pan by a screen-space delta — zoom untouched, nothing reframed.
970
+ *
971
+ * `panToWorld` centres a point, which is the wrong instrument when only ONE
972
+ * axis matters: the phone confirm card is a resting bottom sheet, and a seat
973
+ * tapped under it has to be lifted into the clear band above the sheet with
974
+ * its x exactly where the buyer left it. Centring would slide the map
975
+ * sideways as well, which reads as the map running away from the tap.
976
+ *
977
+ * Animated by default with the camera glide's own easing, so the lift is
978
+ * read as the map moving rather than as a cut; `animate: false` and reduced
979
+ * motion both snap.
980
+ */
981
+ panScreenBy(delta: Point, opts?: {
982
+ animate?: boolean;
983
+ }): void;
984
+ /**
985
+ * How many camera moves the buyer has made with their own hands — a drag, a
986
+ * pinch or a wheel. Monotonic, and it counts GESTURES, not frames: one drag
987
+ * of any length is one.
988
+ *
989
+ * For a host that moved the camera itself and wants to put it back only if
990
+ * the buyer has not since taken over. Comparing camera positions cannot
991
+ * answer that — a programmatic glide is still in flight, and a pan that ends
992
+ * where it started is indistinguishable from no pan at all.
993
+ */
994
+ getCameraGestureCount(): number;
929
995
  /** Legend hover: highlight one category (dim the rest), or null to clear. */
930
996
  setCategoryHighlight(key: string | null): void;
931
997
  private renderBackground;
@@ -2279,6 +2345,9 @@ declare class PickerController {
2279
2345
  getAccessibilityFilter(): AccessibilityType[] | null;
2280
2346
  /** Where {@link focusNextAccessibleSection} last stopped. */
2281
2347
  private accessStepAt;
2348
+ /** The camera a price band took from the buyer — see
2349
+ * {@link PickerFocusContext.bandReturnPose}. */
2350
+ private bandReturnPose;
2282
2351
  /**
2283
2352
  * The state the filter-driven camera rules read and change — see
2284
2353
  * ./pickerFocus. Rebuilt per call; the accessor pair keeps the controller
@@ -2457,12 +2526,49 @@ declare class PickerController {
2457
2526
  * any window in which a silent server could leave the map wrong.
2458
2527
  */
2459
2528
  private lastSnapshotAt;
2529
+ /**
2530
+ * Has `renderer.setChart()` run? `this.renderer` is NOT that answer — it is
2531
+ * assigned the moment the stage is created, which is before the chart fetch
2532
+ * is awaited, so a snapshot can reach a renderer that holds no seats.
2533
+ */
2534
+ private seatsBuilt;
2535
+ /** The authoritative map that arrived before the chart. See ./snapshotOrdering. */
2536
+ private pendingSnapshot;
2537
+ /** Bumped by every LIVE frame applied here. See ./snapshotOrdering. */
2538
+ private socketVersion;
2460
2539
  private snapshotIsFresh;
2461
2540
  /** The live status of one unit, honouring the projection's default. */
2462
2541
  private statusOf;
2463
2542
  private clearBookedHoldIfSettled;
2464
2543
  /** Repaint from truth. Coalesced — see snapshotCoalescer.ts. */
2465
2544
  private resnapshot;
2545
+ /**
2546
+ * Repaint from truth on a realtime client's behalf — coalesced, never forced.
2547
+ *
2548
+ * The public entry point for a transport-owned socket (the widget's
2549
+ * `BuyerRealtimeClient` and its `createControllerSink`). It used to reach for
2550
+ * `refresh()`, which is the FORCED read, so every connect and every section
2551
+ * frame bypassed the coalescer and issued its own `/objects?compact=1` —
2552
+ * two full snapshots per open on the measured DesiPass boot.
2553
+ *
2554
+ * A socket opening is not evidence that anything changed, so a boot snapshot
2555
+ * this young answers for it. `refresh()` stays the forced call for a caller
2556
+ * that just mutated state and needs the server's answer to its own write.
2557
+ */
2558
+ resync(opts?: {
2559
+ reason?: 'connect' | 'frame';
2560
+ }): Promise<void>;
2561
+ /**
2562
+ * Paint a COMPLETE authoritative projection handed over by a live socket.
2563
+ *
2564
+ * The frame the server volunteers on connect already contains everything an
2565
+ * `/objects` read would return, so a sink that can take it never needs the
2566
+ * round trip. Public because the widget's socket lives outside this class.
2567
+ */
2568
+ applyProjection(projection: {
2569
+ default: string;
2570
+ exceptions: Record<string, string>;
2571
+ }): void;
2466
2572
  /**
2467
2573
  * Re-pull the status snapshot on demand. Live surfaces rarely need this (the
2468
2574
  * socket keeps them fresh); local/mock transports with no socket call it