@seatlayer/core 0.68.0 → 0.69.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.
package/dist/index.d.cts CHANGED
@@ -2,13 +2,13 @@ import { C as ChartDoc, P as Point, A as AccessibilityType, m as CategoryTier, g
2
2
  export { v as ACCESSIBILITY_RING_COLOR, w as ACCESSIBILITY_TYPES, x as AccessibilityMeta, y as AuthoringObjectState, B as BoothObject, o as Category, z as ChartLayoutConstraint, d as ChartObject, n as ChartReferenceImage, D as ChartTheme, E as ConfidenceEvidenceScope, t as CubicPath, H as DecorImageObject, F as Floor, G as GAAreaObject, l as GAInventorySegment, I as LABEL_STYLE_MAX_SIZE, J as LABEL_STYLE_MIN_SIZE, K as LabelPresentation, L as LabelStyle, O as ObjectEditorState, M as Physical3dEvidence, N as RadialClearanceLayoutConstraint, f as RectTableSeatCounts, c as RectTableSide, Q as ReferenceAccessibilitySource, U as ReferenceCalibration, V as ReferenceCategorySource, W as ReferenceDerivedScale, X as ReferenceEnrichmentStatus, Y as ReferenceExtractEmptyReason, Z as ReferenceExtractEnrichment, _ as ReferenceExtractInput, $ as ReferenceExtractProposal, a0 as ReferenceExtractRegionSeats, a1 as ReferenceInventoryExclusionSource, a2 as ReferenceInventorySource, a3 as ReferenceMatchReport, a4 as ReferenceScanProposal, a5 as ReferenceScanRowProposal, a6 as ReferenceScanSectionProposal, a7 as ReferenceSeatSeed, a8 as ReferenceSectionTraceBatchInput, a9 as ReferenceSectionTraceBatchProposal, aa as ReferenceSectionTraceInput, ab as ReferenceSectionTraceProposal, h as ResolvedSeatConfidenceEvidence, R as RowObject, ac as SEAT_COMMERCIAL_MARKS, ad as SURROUNDINGS_SHAPE_ROLES, ae as SeatCommercialMark, af as SeatCommercialMeta, ag as SeatConfidenceCoverage, ah as SeatConfidenceEvidence, ai as SeatConfidenceModelLevel, aj as SeatConfidenceModeledTarget, ak as SeatConfidenceRealityLevel, a as SeatGlyphKind, S as SeatOverride, i as SeatViewCoverage, b as SeatViewMetadata, al as SeatViewVariant, e as SectionObject, j as SectionOutlinePath, k as SectionPathSegment, am as SelectionLayer, p as ShapeLineCap, q as ShapeLineEnding, r as ShapeLineJoin, s as ShapeObject, T as TableObject, an as TextAlignment, ao as TextBackground, u as TextObject, ap as TicketTierApplicability, aq as TicketTierEvidence, ar as TicketTierRestriction, as as Venue3DMaterialPalette, at as VenueSurveyRegistrationEvidence, au as ZoneDef, av as accessibilityMeta, aw as accessibilityRingColor, ax as layerOf, ay as seatCommercialMeta } from './types-BjTzKc2D.cjs';
3
3
  import { E as EventConfigurationRef, a as EventConfigurationVersion } from './eventConfigurations-C_dst7Ro.cjs';
4
4
  export { b as EVENT_CONFIGURATION_EXPORT_SCHEMA, c as EVENT_CONFIGURATION_SCHEMA, d as EventConfigurationBaseVenue, e as EventConfigurationCompatibilityIssue, f as EventConfigurationCompatibilityIssueCode, g as EventConfigurationCompatibilityResult, h as EventConfigurationExportEnvelope, i as EventConfigurationLifecycleStatus, j as EventConfigurationOcclusion, k as EventConfigurationOverlay, l as EventConfigurationParseIssue, m as EventConfigurationParseIssueCode, n as EventConfigurationParseResult, o as EventConfigurationProductionElement, p 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_dst7Ro.cjs';
5
- export { E as ExpandChartOptions, R as RowSeatSlot, T as TABLE_SEAT_OFFSET, a as TableSeatSlot, b as allObjects, c as chartBounds, e as expandBooth, d as expandChart, f as expandRow, g as expandRowSlots, h as expandTable, i as expandTableSlots, j as floorObjects, k as floorOverviewTranslations, l as floorsOf, m as floorsShareFootprint, n as layoutFloorOverview, o as layoutFloorRings, p as objectCenter, q as owningSectionForObject, r as pointInPolygon, s as pointInPolygonWithHoles, t as polygonLabelPoint, u as rowInventoryCount, v as rowSeatPositions, w as stackFloors, x as tableInventoryCount, y as tableSeatCountsBySide, z as translateObject } from './layout-BjWtKYJY.cjs';
6
- import { c as TicketSelectionIssue } from './ticketRestrictions-NNo-tPmw.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-NNo-tPmw.cjs';
5
+ export { E as ExpandChartOptions, R as RowSeatSlot, T as TABLE_SEAT_OFFSET, a as TableSeatSlot, b as allObjects, c as chartBounds, e as expandBooth, d as expandChart, f as expandRow, g as expandRowSlots, h as expandTable, i as expandTableSlots, j as floorObjects, k as floorOverviewTranslations, l as floorsOf, m as floorsShareFootprint, n as layoutFloorOverview, o as layoutFloorRings, p as objectCenter, q as owningSectionForObject, r as pointInPolygon, s as pointInPolygonWithHoles, t as polygonLabelPoint, u as rowInventoryCount, v as rowSeatPositions, w as stackFloors, x as tableInventoryCount, y as tableSeatCountsBySide, z as translateObject } from './layout-CpnMRaZF.cjs';
6
+ import { c as TicketSelectionIssue } from './ticketRestrictions-ChYdOguf.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-ChYdOguf.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-BjzyfqGZ.cjs';
9
- export { 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-DoRJqHmW.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-Dg76Jprw.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-Dg76Jprw.cjs';
9
+ export { 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-sc_d2CfA.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-CXwpt_qs.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-CXwpt_qs.cjs';
12
12
  import './segmentedRowModel-jfYcGWPd.cjs';
13
13
 
14
14
  declare class SeatmapRenderer implements ISeatmapRenderer {
@@ -85,6 +85,10 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
85
85
  private selection;
86
86
  /** Seat-contained selection markers: outline + non-colour check cue. */
87
87
  private selectionMarkers;
88
+ /** At most one live pulse ring per seat — a double-tap replaces, never stacks. */
89
+ private seatPulses;
90
+ /** The touch loupe's nodes and the seat they are currently reporting on. */
91
+ private loupe;
88
92
  /** Held by this picker instance, not by another buyer. */
89
93
  private ownedHold;
90
94
  private seatMarks;
@@ -174,6 +178,7 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
174
178
  private lodScale;
175
179
  /** prefers-reduced-motion → hard-swap rungs instead of cross-fading. */
176
180
  private reducedMotion;
181
+ private readonly cameraGlideMs;
177
182
  private fitScale;
178
183
  /** Effective seat radius (base × theme.seatScale), set per chart in setChart. */
179
184
  private seatR;
@@ -349,9 +354,10 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
349
354
  /** Host-pushed GA availability / pending quantity — see {@link paintGAState}. */
350
355
  setGAStates(states: Record<string, GAAreaState>): void;
351
356
  setGAState(areaId: string, state: GAAreaState): void;
352
- /** Frame the currently available inventory that survived a buyer price
353
- * filter. Clearing the filter glides back to the full venue. */
354
- focusCategories(keys: string[] | null): void;
357
+ /** Frame available inventory; narrow maps enter usable seat detail. */
358
+ focusCategories(keys: string[] | null, opts?: {
359
+ animate?: boolean;
360
+ }): void;
355
361
  /**
356
362
  * Switch the projection between flat top-down and the isometric "3D" view
357
363
  * (rotate + y-squash about the chart centre, plus per-elevation lift). Tweens
@@ -513,12 +519,14 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
513
519
  */
514
520
  setClosedSections(ids: string[] | null): void;
515
521
  /**
516
- * AXS section-focus: dim + desaturate every other section, draw a calm backdrop
517
- * panel behind this section's seats, and glide the camera to a padded fit of
518
- * the whole section. A large section may therefore use smaller seat markers,
519
- * but it never clips its outer rows merely to meet a fixed detail scale.
522
+ * Focus one section; narrow phones enter at usable seat detail. `opts.anchor`
523
+ * is the world point the buyer tapped — when the phone entrance has to crop
524
+ * the section, it crops around THAT point instead of the viewport centre.
520
525
  */
521
- focusSection(id: string): void;
526
+ focusSection(id: string, opts?: {
527
+ anchor?: Point;
528
+ }): void;
529
+ private focusSectionCamera;
522
530
  /**
523
531
  * Release only the focus dim + backdrop, keeping the focused-section state
524
532
  * (summary card, adjacent-section navigation, LOD) intact. Called on the
@@ -532,6 +540,13 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
532
540
  clearSectionFocus(): void;
533
541
  /** The currently AXS-focused section id, or null. */
534
542
  getFocusedSection(): string | null;
543
+ /**
544
+ * Are seats what the buyer SEES (and therefore taps)? True inside a section
545
+ * focus and on a floor overview (the melt is forced off there), otherwise
546
+ * once the camera passes the half-melt point. The cache flag is a rendering
547
+ * strategy, not a visual state — never use it to route a tap.
548
+ */
549
+ seatsRevealed(): boolean;
535
550
  /** Draw (or replace) the light backdrop panel behind the focused section. */
536
551
  private drawFocusBackdrop;
537
552
  /** Dim everything outside the active section with one paint-only shape. Group
@@ -600,8 +615,13 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
600
615
  private refreshSectionHeat;
601
616
  private refreshSectionFill;
602
617
  private isSectionClosed;
603
- private sectionAvailabilityState;
604
- private sectionBlockFill;
618
+ /**
619
+ * Display colour of the dominant SELLABLE category across these seats — the
620
+ * hue an overview block is tinted with. Ties break on the stable category key
621
+ * so the same chart always tints the same way. Null when nothing here is for
622
+ * sale: a block with no price keeps the neutral treatment.
623
+ */
624
+ private dominantSellableColor;
605
625
  private get sectionLodPaintContext();
606
626
  /**
607
627
  * Zone rung: one giant screen-constant label per zone (+ optional "FROM $n"),
@@ -638,6 +658,37 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
638
658
  private setSelected;
639
659
  /** Rebuild one marker after selected/held/candidate state changes. */
640
660
  private syncSelectionMarker;
661
+ /**
662
+ * Fade a marker whose seat is no longer the buyer's, then destroy it. Reduced
663
+ * motion (and a hidden tab, where rAF never runs) drops it immediately —
664
+ * a node kept alive by an animation that will never tick is a leak.
665
+ */
666
+ private retireSelectionMarker;
667
+ /**
668
+ * The pick moment: the seat marker pops, and a ring in the seat's own
669
+ * category colour expands out of it and fades. Fired only for the buyer's
670
+ * own tap — a bulk/marquee select would otherwise spawn one animation per
671
+ * seat, and a programmatic selection has no finger to answer.
672
+ *
673
+ * Reduced motion skips both; the persistent halo (which is the part that
674
+ * carries information) is drawn by syncSelectionMarker either way.
675
+ */
676
+ private playSeatPickMoment;
677
+ /**
678
+ * THE FINGER IS ON TOP OF THE SEAT. A fingertip covers roughly 45 screen
679
+ * pixels of a map whose seats are 24, so at the moment of picking, the buyer
680
+ * cannot see the thing they are picking — including whether it is the seat
681
+ * they meant. While a single finger is held down over a seat, a lens floats
682
+ * ~70px above it carrying that seat's colour, name and price.
683
+ *
684
+ * Touch only: nothing occludes a mouse or a pen. Tap semantics are untouched
685
+ * — selection still happens on release, through the same handlers.
686
+ */
687
+ private showTouchLoupe;
688
+ /** Build the lens once and keep it — a press is not the time to allocate. */
689
+ private buildTouchLoupe;
690
+ /** Put the lens away — pointer up, cancel, or the press turning into a pan. */
691
+ private hideTouchLoupe;
641
692
  /**
642
693
  * The stage scale `focusRegion(id)` would settle at — i.e. the zoom that
643
694
  * frames this section in the current viewport. Used to decide whether
@@ -707,8 +758,9 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
707
758
  /** Explicit view of this renderer as the evidence pass's declared surface. */
708
759
  private get renderedQualityContext();
709
760
  getRenderedQualityEvidence(): RendererQualityEvidence;
710
- /** Jump the camera to a rung's zoom band (glided). */
711
761
  setRung(rung: LodRung): void;
762
+ private seatRungScale;
763
+ private narrowSeatDetailFocus;
712
764
  /**
713
765
  * The seat rung must account for labels that auto-fit inside a seat circle.
714
766
  * A short `A-1` remains at the normal 7u target; a table label such as
@@ -865,6 +917,8 @@ interface SeatHoverDetails extends PickerSeat {
865
917
  currency: string;
866
918
  /** Renderer mark (e.g. partly available across performances), when set. */
867
919
  mark?: SeatMark | null;
920
+ /** A deliberate press pins interactive details; hover remains preview-only. */
921
+ interaction?: 'hover' | 'press';
868
922
  }
869
923
  interface PickerGAArea {
870
924
  id: string;
@@ -1588,6 +1642,10 @@ declare class PickerController {
1588
1642
  /** The AXS-focused section id, or null — the widget shows its "−" (back a
1589
1643
  * level) control whenever a focus is active, not only at the seats rung. */
1590
1644
  getFocusedSection(): string | null;
1645
+ /** Seats are the visible, tappable layer (focus, floor overview, or past the
1646
+ * half-melt scale). Drives the widget's "deep" state — the cache-based seats
1647
+ * rung flips at a scale where the chart still reads as section blocks. */
1648
+ seatsRevealed(): boolean;
1591
1649
  /** Jump to a rung; ZONES clears any focused summary (back to overview). */
1592
1650
  setRung(rung: LodRung): void;
1593
1651
  /** Price-band filter (F4): dim free seats whose category is outside `keys`
@@ -1628,7 +1686,10 @@ declare class PickerController {
1628
1686
  /** Read-only browser-render evidence for parity/performance audit tooling. */
1629
1687
  getRenderedQualityEvidence(): RendererQualityEvidence | null;
1630
1688
  /** Glide in on a section and surface its summary (same path as a section tap). */
1631
- focusSection(id: string): void;
1689
+ focusSection(id: string, anchor?: {
1690
+ x: number;
1691
+ y: number;
1692
+ }): void;
1632
1693
  /** Live seat membership count used by buyer section-navigation controls. */
1633
1694
  getSectionSeatCount(id: string): number;
1634
1695
  /** Zoom back out to the whole chart and clear the section-summary card + focus. */
@@ -1645,7 +1706,6 @@ declare class PickerController {
1645
1706
  destroy(): void;
1646
1707
  private toSeat;
1647
1708
  private toTableSeat;
1648
- /** Tooltip payload for a hovered seat — see PickerCallbacks.onSeatHover. */
1649
1709
  private describeSeat;
1650
1710
  private priceFor;
1651
1711
  private tiersFor;
package/dist/index.d.ts CHANGED
@@ -2,13 +2,13 @@ import { C as ChartDoc, P as Point, A as AccessibilityType, m as CategoryTier, g
2
2
  export { v as ACCESSIBILITY_RING_COLOR, w as ACCESSIBILITY_TYPES, x as AccessibilityMeta, y as AuthoringObjectState, B as BoothObject, o as Category, z as ChartLayoutConstraint, d as ChartObject, n as ChartReferenceImage, D as ChartTheme, E as ConfidenceEvidenceScope, t as CubicPath, H as DecorImageObject, F as Floor, G as GAAreaObject, l as GAInventorySegment, I as LABEL_STYLE_MAX_SIZE, J as LABEL_STYLE_MIN_SIZE, K as LabelPresentation, L as LabelStyle, O as ObjectEditorState, M as Physical3dEvidence, N as RadialClearanceLayoutConstraint, f as RectTableSeatCounts, c as RectTableSide, Q as ReferenceAccessibilitySource, U as ReferenceCalibration, V as ReferenceCategorySource, W as ReferenceDerivedScale, X as ReferenceEnrichmentStatus, Y as ReferenceExtractEmptyReason, Z as ReferenceExtractEnrichment, _ as ReferenceExtractInput, $ as ReferenceExtractProposal, a0 as ReferenceExtractRegionSeats, a1 as ReferenceInventoryExclusionSource, a2 as ReferenceInventorySource, a3 as ReferenceMatchReport, a4 as ReferenceScanProposal, a5 as ReferenceScanRowProposal, a6 as ReferenceScanSectionProposal, a7 as ReferenceSeatSeed, a8 as ReferenceSectionTraceBatchInput, a9 as ReferenceSectionTraceBatchProposal, aa as ReferenceSectionTraceInput, ab as ReferenceSectionTraceProposal, h as ResolvedSeatConfidenceEvidence, R as RowObject, ac as SEAT_COMMERCIAL_MARKS, ad as SURROUNDINGS_SHAPE_ROLES, ae as SeatCommercialMark, af as SeatCommercialMeta, ag as SeatConfidenceCoverage, ah as SeatConfidenceEvidence, ai as SeatConfidenceModelLevel, aj as SeatConfidenceModeledTarget, ak as SeatConfidenceRealityLevel, a as SeatGlyphKind, S as SeatOverride, i as SeatViewCoverage, b as SeatViewMetadata, al as SeatViewVariant, e as SectionObject, j as SectionOutlinePath, k as SectionPathSegment, am as SelectionLayer, p as ShapeLineCap, q as ShapeLineEnding, r as ShapeLineJoin, s as ShapeObject, T as TableObject, an as TextAlignment, ao as TextBackground, u as TextObject, ap as TicketTierApplicability, aq as TicketTierEvidence, ar as TicketTierRestriction, as as Venue3DMaterialPalette, at as VenueSurveyRegistrationEvidence, au as ZoneDef, av as accessibilityMeta, aw as accessibilityRingColor, ax as layerOf, ay as seatCommercialMeta } from './types-BjTzKc2D.js';
3
3
  import { E as EventConfigurationRef, a as EventConfigurationVersion } from './eventConfigurations-kZpADDdx.js';
4
4
  export { b as EVENT_CONFIGURATION_EXPORT_SCHEMA, c as EVENT_CONFIGURATION_SCHEMA, d as EventConfigurationBaseVenue, e as EventConfigurationCompatibilityIssue, f as EventConfigurationCompatibilityIssueCode, g as EventConfigurationCompatibilityResult, h as EventConfigurationExportEnvelope, i as EventConfigurationLifecycleStatus, j as EventConfigurationOcclusion, k as EventConfigurationOverlay, l as EventConfigurationParseIssue, m as EventConfigurationParseIssueCode, n as EventConfigurationParseResult, o as EventConfigurationProductionElement, p 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-kZpADDdx.js';
5
- export { E as ExpandChartOptions, R as RowSeatSlot, T as TABLE_SEAT_OFFSET, a as TableSeatSlot, b as allObjects, c as chartBounds, e as expandBooth, d as expandChart, f as expandRow, g as expandRowSlots, h as expandTable, i as expandTableSlots, j as floorObjects, k as floorOverviewTranslations, l as floorsOf, m as floorsShareFootprint, n as layoutFloorOverview, o as layoutFloorRings, p as objectCenter, q as owningSectionForObject, r as pointInPolygon, s as pointInPolygonWithHoles, t as polygonLabelPoint, u as rowInventoryCount, v as rowSeatPositions, w as stackFloors, x as tableInventoryCount, y as tableSeatCountsBySide, z as translateObject } from './layout-pMOP6qgP.js';
6
- import { c as TicketSelectionIssue } from './ticketRestrictions-KwkFXVnM.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-KwkFXVnM.js';
5
+ export { E as ExpandChartOptions, R as RowSeatSlot, T as TABLE_SEAT_OFFSET, a as TableSeatSlot, b as allObjects, c as chartBounds, e as expandBooth, d as expandChart, f as expandRow, g as expandRowSlots, h as expandTable, i as expandTableSlots, j as floorObjects, k as floorOverviewTranslations, l as floorsOf, m as floorsShareFootprint, n as layoutFloorOverview, o as layoutFloorRings, p as objectCenter, q as owningSectionForObject, r as pointInPolygon, s as pointInPolygonWithHoles, t as polygonLabelPoint, u as rowInventoryCount, v as rowSeatPositions, w as stackFloors, x as tableInventoryCount, y as tableSeatCountsBySide, z as translateObject } from './layout-D2zJUmzs.js';
6
+ import { c as TicketSelectionIssue } from './ticketRestrictions-BjEP4hnD.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-BjEP4hnD.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-DCRfHaw4.js';
9
- export { 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-CBmIp6_6.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-BpeegL9d.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-BpeegL9d.js';
9
+ export { 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-TApmHr3Q.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-BiCXjFCG.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-BiCXjFCG.js';
12
12
  import './segmentedRowModel-DQggl3UO.js';
13
13
 
14
14
  declare class SeatmapRenderer implements ISeatmapRenderer {
@@ -85,6 +85,10 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
85
85
  private selection;
86
86
  /** Seat-contained selection markers: outline + non-colour check cue. */
87
87
  private selectionMarkers;
88
+ /** At most one live pulse ring per seat — a double-tap replaces, never stacks. */
89
+ private seatPulses;
90
+ /** The touch loupe's nodes and the seat they are currently reporting on. */
91
+ private loupe;
88
92
  /** Held by this picker instance, not by another buyer. */
89
93
  private ownedHold;
90
94
  private seatMarks;
@@ -174,6 +178,7 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
174
178
  private lodScale;
175
179
  /** prefers-reduced-motion → hard-swap rungs instead of cross-fading. */
176
180
  private reducedMotion;
181
+ private readonly cameraGlideMs;
177
182
  private fitScale;
178
183
  /** Effective seat radius (base × theme.seatScale), set per chart in setChart. */
179
184
  private seatR;
@@ -349,9 +354,10 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
349
354
  /** Host-pushed GA availability / pending quantity — see {@link paintGAState}. */
350
355
  setGAStates(states: Record<string, GAAreaState>): void;
351
356
  setGAState(areaId: string, state: GAAreaState): void;
352
- /** Frame the currently available inventory that survived a buyer price
353
- * filter. Clearing the filter glides back to the full venue. */
354
- focusCategories(keys: string[] | null): void;
357
+ /** Frame available inventory; narrow maps enter usable seat detail. */
358
+ focusCategories(keys: string[] | null, opts?: {
359
+ animate?: boolean;
360
+ }): void;
355
361
  /**
356
362
  * Switch the projection between flat top-down and the isometric "3D" view
357
363
  * (rotate + y-squash about the chart centre, plus per-elevation lift). Tweens
@@ -513,12 +519,14 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
513
519
  */
514
520
  setClosedSections(ids: string[] | null): void;
515
521
  /**
516
- * AXS section-focus: dim + desaturate every other section, draw a calm backdrop
517
- * panel behind this section's seats, and glide the camera to a padded fit of
518
- * the whole section. A large section may therefore use smaller seat markers,
519
- * but it never clips its outer rows merely to meet a fixed detail scale.
522
+ * Focus one section; narrow phones enter at usable seat detail. `opts.anchor`
523
+ * is the world point the buyer tapped — when the phone entrance has to crop
524
+ * the section, it crops around THAT point instead of the viewport centre.
520
525
  */
521
- focusSection(id: string): void;
526
+ focusSection(id: string, opts?: {
527
+ anchor?: Point;
528
+ }): void;
529
+ private focusSectionCamera;
522
530
  /**
523
531
  * Release only the focus dim + backdrop, keeping the focused-section state
524
532
  * (summary card, adjacent-section navigation, LOD) intact. Called on the
@@ -532,6 +540,13 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
532
540
  clearSectionFocus(): void;
533
541
  /** The currently AXS-focused section id, or null. */
534
542
  getFocusedSection(): string | null;
543
+ /**
544
+ * Are seats what the buyer SEES (and therefore taps)? True inside a section
545
+ * focus and on a floor overview (the melt is forced off there), otherwise
546
+ * once the camera passes the half-melt point. The cache flag is a rendering
547
+ * strategy, not a visual state — never use it to route a tap.
548
+ */
549
+ seatsRevealed(): boolean;
535
550
  /** Draw (or replace) the light backdrop panel behind the focused section. */
536
551
  private drawFocusBackdrop;
537
552
  /** Dim everything outside the active section with one paint-only shape. Group
@@ -600,8 +615,13 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
600
615
  private refreshSectionHeat;
601
616
  private refreshSectionFill;
602
617
  private isSectionClosed;
603
- private sectionAvailabilityState;
604
- private sectionBlockFill;
618
+ /**
619
+ * Display colour of the dominant SELLABLE category across these seats — the
620
+ * hue an overview block is tinted with. Ties break on the stable category key
621
+ * so the same chart always tints the same way. Null when nothing here is for
622
+ * sale: a block with no price keeps the neutral treatment.
623
+ */
624
+ private dominantSellableColor;
605
625
  private get sectionLodPaintContext();
606
626
  /**
607
627
  * Zone rung: one giant screen-constant label per zone (+ optional "FROM $n"),
@@ -638,6 +658,37 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
638
658
  private setSelected;
639
659
  /** Rebuild one marker after selected/held/candidate state changes. */
640
660
  private syncSelectionMarker;
661
+ /**
662
+ * Fade a marker whose seat is no longer the buyer's, then destroy it. Reduced
663
+ * motion (and a hidden tab, where rAF never runs) drops it immediately —
664
+ * a node kept alive by an animation that will never tick is a leak.
665
+ */
666
+ private retireSelectionMarker;
667
+ /**
668
+ * The pick moment: the seat marker pops, and a ring in the seat's own
669
+ * category colour expands out of it and fades. Fired only for the buyer's
670
+ * own tap — a bulk/marquee select would otherwise spawn one animation per
671
+ * seat, and a programmatic selection has no finger to answer.
672
+ *
673
+ * Reduced motion skips both; the persistent halo (which is the part that
674
+ * carries information) is drawn by syncSelectionMarker either way.
675
+ */
676
+ private playSeatPickMoment;
677
+ /**
678
+ * THE FINGER IS ON TOP OF THE SEAT. A fingertip covers roughly 45 screen
679
+ * pixels of a map whose seats are 24, so at the moment of picking, the buyer
680
+ * cannot see the thing they are picking — including whether it is the seat
681
+ * they meant. While a single finger is held down over a seat, a lens floats
682
+ * ~70px above it carrying that seat's colour, name and price.
683
+ *
684
+ * Touch only: nothing occludes a mouse or a pen. Tap semantics are untouched
685
+ * — selection still happens on release, through the same handlers.
686
+ */
687
+ private showTouchLoupe;
688
+ /** Build the lens once and keep it — a press is not the time to allocate. */
689
+ private buildTouchLoupe;
690
+ /** Put the lens away — pointer up, cancel, or the press turning into a pan. */
691
+ private hideTouchLoupe;
641
692
  /**
642
693
  * The stage scale `focusRegion(id)` would settle at — i.e. the zoom that
643
694
  * frames this section in the current viewport. Used to decide whether
@@ -707,8 +758,9 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
707
758
  /** Explicit view of this renderer as the evidence pass's declared surface. */
708
759
  private get renderedQualityContext();
709
760
  getRenderedQualityEvidence(): RendererQualityEvidence;
710
- /** Jump the camera to a rung's zoom band (glided). */
711
761
  setRung(rung: LodRung): void;
762
+ private seatRungScale;
763
+ private narrowSeatDetailFocus;
712
764
  /**
713
765
  * The seat rung must account for labels that auto-fit inside a seat circle.
714
766
  * A short `A-1` remains at the normal 7u target; a table label such as
@@ -865,6 +917,8 @@ interface SeatHoverDetails extends PickerSeat {
865
917
  currency: string;
866
918
  /** Renderer mark (e.g. partly available across performances), when set. */
867
919
  mark?: SeatMark | null;
920
+ /** A deliberate press pins interactive details; hover remains preview-only. */
921
+ interaction?: 'hover' | 'press';
868
922
  }
869
923
  interface PickerGAArea {
870
924
  id: string;
@@ -1588,6 +1642,10 @@ declare class PickerController {
1588
1642
  /** The AXS-focused section id, or null — the widget shows its "−" (back a
1589
1643
  * level) control whenever a focus is active, not only at the seats rung. */
1590
1644
  getFocusedSection(): string | null;
1645
+ /** Seats are the visible, tappable layer (focus, floor overview, or past the
1646
+ * half-melt scale). Drives the widget's "deep" state — the cache-based seats
1647
+ * rung flips at a scale where the chart still reads as section blocks. */
1648
+ seatsRevealed(): boolean;
1591
1649
  /** Jump to a rung; ZONES clears any focused summary (back to overview). */
1592
1650
  setRung(rung: LodRung): void;
1593
1651
  /** Price-band filter (F4): dim free seats whose category is outside `keys`
@@ -1628,7 +1686,10 @@ declare class PickerController {
1628
1686
  /** Read-only browser-render evidence for parity/performance audit tooling. */
1629
1687
  getRenderedQualityEvidence(): RendererQualityEvidence | null;
1630
1688
  /** Glide in on a section and surface its summary (same path as a section tap). */
1631
- focusSection(id: string): void;
1689
+ focusSection(id: string, anchor?: {
1690
+ x: number;
1691
+ y: number;
1692
+ }): void;
1632
1693
  /** Live seat membership count used by buyer section-navigation controls. */
1633
1694
  getSectionSeatCount(id: string): number;
1634
1695
  /** Zoom back out to the whole chart and clear the section-summary card + focus. */
@@ -1645,7 +1706,6 @@ declare class PickerController {
1645
1706
  destroy(): void;
1646
1707
  private toSeat;
1647
1708
  private toTableSeat;
1648
- /** Tooltip payload for a hovered seat — see PickerCallbacks.onSeatHover. */
1649
1709
  private describeSeat;
1650
1710
  private priceFor;
1651
1711
  private tiersFor;