@seatlayer/core 0.68.1 → 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-BjkVhn52.cjs';
6
- import { c as TicketSelectionIssue } from './ticketRestrictions-mnICaF5t.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-mnICaF5t.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-C-L_RuPB.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-BHInJ52w.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-BHInJ52w.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,7 +178,6 @@ 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;
177
- /** Touch camera travel follows native mobile timing; desktop keeps the calmer glide. */
178
181
  private readonly cameraGlideMs;
179
182
  private fitScale;
180
183
  /** Effective seat radius (base × theme.seatScale), set per chart in setChart. */
@@ -351,12 +354,7 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
351
354
  /** Host-pushed GA availability / pending quantity — see {@link paintGAState}. */
352
355
  setGAStates(states: Record<string, GAAreaState>): void;
353
356
  setGAState(areaId: string, state: GAAreaState): void;
354
- /** Frame the currently available inventory that survived a buyer price
355
- * filter. A category may span most of a venue, so framing only its bounds
356
- * can leave a phone at the section overview and make the price control look
357
- * inert. Narrow maps enter seat detail around an actual matching seat;
358
- * desktop retains the complete category frame. Clearing the filter glides
359
- * back to the full venue. */
357
+ /** Frame available inventory; narrow maps enter usable seat detail. */
360
358
  focusCategories(keys: string[] | null, opts?: {
361
359
  animate?: boolean;
362
360
  }): void;
@@ -521,15 +519,13 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
521
519
  */
522
520
  setClosedSections(ids: string[] | null): void;
523
521
  /**
524
- * AXS section-focus: dim + desaturate every other section, draw a calm backdrop
525
- * panel behind this section's seats, and glide the camera to a padded fit.
526
- * Wide desktop maps retain the complete-section frame. A narrow phone crops
527
- * a section that cannot reach seat detail as a whole, anchoring the entrance
528
- * on a real available seat so the first tap exposes usable inventory.
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.
529
525
  */
530
- focusSection(id: string): void;
531
- /** Preserve the section-focus camera contract across the initial tap and a
532
- * later host resize (for example when native ticket chrome expands). */
526
+ focusSection(id: string, opts?: {
527
+ anchor?: Point;
528
+ }): void;
533
529
  private focusSectionCamera;
534
530
  /**
535
531
  * Release only the focus dim + backdrop, keeping the focused-section state
@@ -544,6 +540,13 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
544
540
  clearSectionFocus(): void;
545
541
  /** The currently AXS-focused section id, or null. */
546
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;
547
550
  /** Draw (or replace) the light backdrop panel behind the focused section. */
548
551
  private drawFocusBackdrop;
549
552
  /** Dim everything outside the active section with one paint-only shape. Group
@@ -612,8 +615,13 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
612
615
  private refreshSectionHeat;
613
616
  private refreshSectionFill;
614
617
  private isSectionClosed;
615
- private sectionAvailabilityState;
616
- 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;
617
625
  private get sectionLodPaintContext();
618
626
  /**
619
627
  * Zone rung: one giant screen-constant label per zone (+ optional "FROM $n"),
@@ -650,6 +658,37 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
650
658
  private setSelected;
651
659
  /** Rebuild one marker after selected/held/candidate state changes. */
652
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;
653
692
  /**
654
693
  * The stage scale `focusRegion(id)` would settle at — i.e. the zoom that
655
694
  * frames this section in the current viewport. Used to decide whether
@@ -719,13 +758,8 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
719
758
  /** Explicit view of this renderer as the evidence pass's declared surface. */
720
759
  private get renderedQualityContext();
721
760
  getRenderedQualityEvidence(): RendererQualityEvidence;
722
- /** Jump the camera to a rung's zoom band (glided). */
723
761
  setRung(rung: LodRung): void;
724
- /** Minimum zoom at which seat markers and their labels are genuinely usable. */
725
762
  private seatRungScale;
726
- /** On a phone, a wide ring/section can fit completely while its seats remain
727
- * tiny. Crop that automatic entrance around a real matching seat; desktop
728
- * keeps the full authored frame and manual pan/zoom remains unchanged. */
729
763
  private narrowSeatDetailFocus;
730
764
  /**
731
765
  * The seat rung must account for labels that auto-fit inside a seat circle.
@@ -883,6 +917,8 @@ interface SeatHoverDetails extends PickerSeat {
883
917
  currency: string;
884
918
  /** Renderer mark (e.g. partly available across performances), when set. */
885
919
  mark?: SeatMark | null;
920
+ /** A deliberate press pins interactive details; hover remains preview-only. */
921
+ interaction?: 'hover' | 'press';
886
922
  }
887
923
  interface PickerGAArea {
888
924
  id: string;
@@ -1606,6 +1642,10 @@ declare class PickerController {
1606
1642
  /** The AXS-focused section id, or null — the widget shows its "−" (back a
1607
1643
  * level) control whenever a focus is active, not only at the seats rung. */
1608
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;
1609
1649
  /** Jump to a rung; ZONES clears any focused summary (back to overview). */
1610
1650
  setRung(rung: LodRung): void;
1611
1651
  /** Price-band filter (F4): dim free seats whose category is outside `keys`
@@ -1646,7 +1686,10 @@ declare class PickerController {
1646
1686
  /** Read-only browser-render evidence for parity/performance audit tooling. */
1647
1687
  getRenderedQualityEvidence(): RendererQualityEvidence | null;
1648
1688
  /** Glide in on a section and surface its summary (same path as a section tap). */
1649
- focusSection(id: string): void;
1689
+ focusSection(id: string, anchor?: {
1690
+ x: number;
1691
+ y: number;
1692
+ }): void;
1650
1693
  /** Live seat membership count used by buyer section-navigation controls. */
1651
1694
  getSectionSeatCount(id: string): number;
1652
1695
  /** Zoom back out to the whole chart and clear the section-summary card + focus. */
@@ -1663,7 +1706,6 @@ declare class PickerController {
1663
1706
  destroy(): void;
1664
1707
  private toSeat;
1665
1708
  private toTableSeat;
1666
- /** Tooltip payload for a hovered seat — see PickerCallbacks.onSeatHover. */
1667
1709
  private describeSeat;
1668
1710
  private priceFor;
1669
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-BdeBpWf8.js';
6
- import { c as TicketSelectionIssue } from './ticketRestrictions-CtgOd-2p.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-CtgOd-2p.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-Dn6GyPPj.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-BGmZn_bq.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-BGmZn_bq.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,7 +178,6 @@ 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;
177
- /** Touch camera travel follows native mobile timing; desktop keeps the calmer glide. */
178
181
  private readonly cameraGlideMs;
179
182
  private fitScale;
180
183
  /** Effective seat radius (base × theme.seatScale), set per chart in setChart. */
@@ -351,12 +354,7 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
351
354
  /** Host-pushed GA availability / pending quantity — see {@link paintGAState}. */
352
355
  setGAStates(states: Record<string, GAAreaState>): void;
353
356
  setGAState(areaId: string, state: GAAreaState): void;
354
- /** Frame the currently available inventory that survived a buyer price
355
- * filter. A category may span most of a venue, so framing only its bounds
356
- * can leave a phone at the section overview and make the price control look
357
- * inert. Narrow maps enter seat detail around an actual matching seat;
358
- * desktop retains the complete category frame. Clearing the filter glides
359
- * back to the full venue. */
357
+ /** Frame available inventory; narrow maps enter usable seat detail. */
360
358
  focusCategories(keys: string[] | null, opts?: {
361
359
  animate?: boolean;
362
360
  }): void;
@@ -521,15 +519,13 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
521
519
  */
522
520
  setClosedSections(ids: string[] | null): void;
523
521
  /**
524
- * AXS section-focus: dim + desaturate every other section, draw a calm backdrop
525
- * panel behind this section's seats, and glide the camera to a padded fit.
526
- * Wide desktop maps retain the complete-section frame. A narrow phone crops
527
- * a section that cannot reach seat detail as a whole, anchoring the entrance
528
- * on a real available seat so the first tap exposes usable inventory.
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.
529
525
  */
530
- focusSection(id: string): void;
531
- /** Preserve the section-focus camera contract across the initial tap and a
532
- * later host resize (for example when native ticket chrome expands). */
526
+ focusSection(id: string, opts?: {
527
+ anchor?: Point;
528
+ }): void;
533
529
  private focusSectionCamera;
534
530
  /**
535
531
  * Release only the focus dim + backdrop, keeping the focused-section state
@@ -544,6 +540,13 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
544
540
  clearSectionFocus(): void;
545
541
  /** The currently AXS-focused section id, or null. */
546
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;
547
550
  /** Draw (or replace) the light backdrop panel behind the focused section. */
548
551
  private drawFocusBackdrop;
549
552
  /** Dim everything outside the active section with one paint-only shape. Group
@@ -612,8 +615,13 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
612
615
  private refreshSectionHeat;
613
616
  private refreshSectionFill;
614
617
  private isSectionClosed;
615
- private sectionAvailabilityState;
616
- 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;
617
625
  private get sectionLodPaintContext();
618
626
  /**
619
627
  * Zone rung: one giant screen-constant label per zone (+ optional "FROM $n"),
@@ -650,6 +658,37 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
650
658
  private setSelected;
651
659
  /** Rebuild one marker after selected/held/candidate state changes. */
652
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;
653
692
  /**
654
693
  * The stage scale `focusRegion(id)` would settle at — i.e. the zoom that
655
694
  * frames this section in the current viewport. Used to decide whether
@@ -719,13 +758,8 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
719
758
  /** Explicit view of this renderer as the evidence pass's declared surface. */
720
759
  private get renderedQualityContext();
721
760
  getRenderedQualityEvidence(): RendererQualityEvidence;
722
- /** Jump the camera to a rung's zoom band (glided). */
723
761
  setRung(rung: LodRung): void;
724
- /** Minimum zoom at which seat markers and their labels are genuinely usable. */
725
762
  private seatRungScale;
726
- /** On a phone, a wide ring/section can fit completely while its seats remain
727
- * tiny. Crop that automatic entrance around a real matching seat; desktop
728
- * keeps the full authored frame and manual pan/zoom remains unchanged. */
729
763
  private narrowSeatDetailFocus;
730
764
  /**
731
765
  * The seat rung must account for labels that auto-fit inside a seat circle.
@@ -883,6 +917,8 @@ interface SeatHoverDetails extends PickerSeat {
883
917
  currency: string;
884
918
  /** Renderer mark (e.g. partly available across performances), when set. */
885
919
  mark?: SeatMark | null;
920
+ /** A deliberate press pins interactive details; hover remains preview-only. */
921
+ interaction?: 'hover' | 'press';
886
922
  }
887
923
  interface PickerGAArea {
888
924
  id: string;
@@ -1606,6 +1642,10 @@ declare class PickerController {
1606
1642
  /** The AXS-focused section id, or null — the widget shows its "−" (back a
1607
1643
  * level) control whenever a focus is active, not only at the seats rung. */
1608
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;
1609
1649
  /** Jump to a rung; ZONES clears any focused summary (back to overview). */
1610
1650
  setRung(rung: LodRung): void;
1611
1651
  /** Price-band filter (F4): dim free seats whose category is outside `keys`
@@ -1646,7 +1686,10 @@ declare class PickerController {
1646
1686
  /** Read-only browser-render evidence for parity/performance audit tooling. */
1647
1687
  getRenderedQualityEvidence(): RendererQualityEvidence | null;
1648
1688
  /** Glide in on a section and surface its summary (same path as a section tap). */
1649
- focusSection(id: string): void;
1689
+ focusSection(id: string, anchor?: {
1690
+ x: number;
1691
+ y: number;
1692
+ }): void;
1650
1693
  /** Live seat membership count used by buyer section-navigation controls. */
1651
1694
  getSectionSeatCount(id: string): number;
1652
1695
  /** Zoom back out to the whole chart and clear the section-summary card + focus. */
@@ -1663,7 +1706,6 @@ declare class PickerController {
1663
1706
  destroy(): void;
1664
1707
  private toSeat;
1665
1708
  private toTableSeat;
1666
- /** Tooltip payload for a hovered seat — see PickerCallbacks.onSeatHover. */
1667
1709
  private describeSeat;
1668
1710
  private priceFor;
1669
1711
  private tiersFor;