@seatlayer/core 0.35.0 → 0.36.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -1,5 +1,40 @@
1
- import { A as AccessibilityType, S as SeatOverride, R as RowObject, L as LabelStyle, a as RectTableSide, C as ChartDoc, b as ChartObject, B as BoothObject, E as ExpandedSeat, T as TableObject, F as Floor, P as Point, c as SectionObject, d as RectTableSeatCounts, G as GAAreaObject, e as GAInventorySegment, f as RendererQualityEvidence, g as RenderedFreeTextEvidence, I as ISeatmapRenderer, h as RendererOptions, i as SeatStatus, j as RendererViewMode, k as LodRung, l as CategoryTier, m as SeatCommercialAttributes, n as RendererCallbacks } from './types-DO_J5DtX.cjs';
2
- export { o as ACCESSIBILITY_RING_COLOR, p as ACCESSIBILITY_TYPES, q as AccessibilityMeta, r as CHART_STORAGE_KEY, s as Category, t as ChartReferenceImage, u as ChartTheme, v as CubicPath, D as DecorImageObject, w as LABEL_STYLE_MAX_SIZE, x as LABEL_STYLE_MIN_SIZE, y as LabelPresentation, z as ReferenceAccessibilitySource, H as ReferenceCalibration, J as ReferenceCategorySource, K as ReferenceDerivedScale, M as ReferenceInventoryExclusionSource, N as ReferenceInventorySource, O as ReferenceScanProposal, Q as ReferenceScanRowProposal, U as ReferenceScanSectionProposal, V as ReferenceSeatSeed, W as ReferenceSectionTraceBatchInput, X as ReferenceSectionTraceBatchProposal, Y as ReferenceSectionTraceInput, Z as ReferenceSectionTraceProposal, _ as RenderedBookableLabelEvidence, $ as RenderedGAAreaEvidence, a0 as RenderedHierarchyLabelEvidence, a1 as RenderedLabelHiddenReason, a2 as SEAT_COMMERCIAL_MARKS, a3 as SURROUNDINGS_SHAPE_ROLES, a4 as SeatCommercialMark, a5 as SeatCommercialMeta, a6 as SectionOutlinePath, a7 as SectionPathSegment, a8 as SelectionLayer, a9 as ShapeLineCap, aa as ShapeLineEnding, ab as ShapeLineJoin, ac as ShapeObject, ad as TextObject, ae as ZoneDef, af as accessibilityMeta, ag as accessibilityRingColor, ah as layerOf, ai as seatCommercialMeta } from './types-DO_J5DtX.cjs';
1
+ import { R as RowObject, A as AccessibilityType, S as SeatOverride, L as LabelStyle, a as RectTableSide, C as ChartDoc, b as ChartObject, B as BoothObject, E as ExpandedSeat, T as TableObject, F as Floor, P as Point, c as SectionObject, d as RectTableSeatCounts, G as GAAreaObject, e as GAInventorySegment, f as RendererQualityEvidence, g as RenderedFreeTextEvidence, I as ISeatmapRenderer, h as RendererOptions, i as SeatStatus, j as RendererViewMode, k as LodRung, l as CategoryTier, m as SeatCommercialAttributes, n as RendererCallbacks } from './types-DBnRO2hX.cjs';
2
+ export { o as ACCESSIBILITY_RING_COLOR, p as ACCESSIBILITY_TYPES, q as AccessibilityMeta, r as CHART_STORAGE_KEY, s as Category, t as ChartReferenceImage, u as ChartTheme, v as CubicPath, D as DecorImageObject, w as LABEL_STYLE_MAX_SIZE, x as LABEL_STYLE_MIN_SIZE, y as LabelPresentation, z as ReferenceAccessibilitySource, H as ReferenceCalibration, J as ReferenceCategorySource, K as ReferenceDerivedScale, M as ReferenceInventoryExclusionSource, N as ReferenceInventorySource, O as ReferenceScanProposal, Q as ReferenceScanRowProposal, U as ReferenceScanSectionProposal, V as ReferenceSeatSeed, W as ReferenceSectionTraceBatchInput, X as ReferenceSectionTraceBatchProposal, Y as ReferenceSectionTraceInput, Z as ReferenceSectionTraceProposal, _ as RenderedBookableLabelEvidence, $ as RenderedGAAreaEvidence, a0 as RenderedHierarchyLabelEvidence, a1 as RenderedLabelHiddenReason, a2 as SEAT_COMMERCIAL_MARKS, a3 as SURROUNDINGS_SHAPE_ROLES, a4 as SeatCommercialMark, a5 as SeatCommercialMeta, a6 as SectionOutlinePath, a7 as SectionPathSegment, a8 as SelectionLayer, a9 as ShapeLineCap, aa as ShapeLineEnding, ab as ShapeLineJoin, ac as ShapeObject, ad as TextObject, ae as ZoneDef, af as accessibilityMeta, ag as accessibilityRingColor, ah as layerOf, ai as seatCommercialMeta } from './types-DBnRO2hX.cjs';
3
+
4
+ /**
5
+ * The segmented-row model — one logical row made of several physical rows.
6
+ *
7
+ * A segmented row is drawn as a chain of nodes and stored as N physical
8
+ * `RowObject`s tied together by `segmentedRow` metadata. Two questions have to
9
+ * be answered consistently or the feature lies to somebody:
10
+ *
11
+ * 1. **At draft time** — given the author's nodes, exactly which components,
12
+ * seat counts and pitches will be committed? (`segmentedRowComponents`)
13
+ * 2. **At read time** — given stored physical rows, what is the logical row they
14
+ * form, and where does each component sit inside its numbering?
15
+ * (`resolveSegmentedRowGroups`)
16
+ *
17
+ * These lived apart — (1) in `rowDraft.ts` next to the ghost preview, (2) in
18
+ * `layout.ts` next to buyer expansion — which is precisely how the canvas came
19
+ * to number a segmented row `1-7` / `1-6` while buyers correctly saw
20
+ * `A-1…A-13`. They are two halves of one rule, so they live in one module.
21
+ *
22
+ * The standing rule this module exists to enforce: **the ghost preview and the
23
+ * commit share one resolver.** A preview that can lie is a bug.
24
+ */
25
+
26
+ /** Resolved logical placement of one physical component inside a segmented row. */
27
+ interface SegmentedRowPlacement {
28
+ groupId: string;
29
+ /** Buyer adjacency index base (a declared aisle break costs one index). */
30
+ adjacencyOffset: number;
31
+ /** Continuous seat-numbering base across the whole logical row. */
32
+ displayOffset: number;
33
+ displayLabel: string;
34
+ totalSeats: number;
35
+ canonical: RowObject;
36
+ viewFromSeatUrl?: string;
37
+ }
3
38
 
4
39
  /**
5
40
  * Pure geometry helpers — no Konva, no DOM. Turns the parametric chart
@@ -54,12 +89,13 @@ interface TableSeatSlot extends RowSeatSlot {
54
89
  side?: RectTableSide;
55
90
  }
56
91
  /**
57
- * The seat NUMBER part of a row seat's label (the row prefix is prepended by the
58
- * caller). Applies the row's numbering scheme, direction, step, start and label
59
- * prefix. Labels only never geometry. See `RowObject.seatNumbering.scheme`.
92
+ * Seat slots for one physical row.
93
+ *
94
+ * `placement` makes the slots read as part of a logical segmented row: labels
95
+ * continue across components (`A-8`, not a second `A-1`) using the logical row's
96
+ * numbering scheme and total seat count.
60
97
  */
61
- declare function seatLabelPart(row: RowObject, i: number): string;
62
- declare function expandRowSlots(row: RowObject): RowSeatSlot[];
98
+ declare function expandRowSlots(row: RowObject, placement?: SegmentedRowPlacement): RowSeatSlot[];
63
99
  declare function expandRow(row: RowObject): ExpandedSeat[];
64
100
  /**
65
101
  * Expand a table into its perimeter seats.
@@ -408,6 +444,7 @@ declare function inspectRenderedQualityEvidence(evidence: RendererQualityEvidenc
408
444
  declare class SeatmapRenderer implements ISeatmapRenderer {
409
445
  private container;
410
446
  private opts;
447
+ private readonly exportMode;
411
448
  private stage;
412
449
  private bgLayer;
413
450
  private seatLayer;
@@ -566,6 +603,11 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
566
603
  private bounds;
567
604
  private cached;
568
605
  private dpr;
606
+ /** Current chart's buyer-visible image work. Failures are retained until ready(). */
607
+ private assetGeneration;
608
+ private assetPromises;
609
+ private assetErrors;
610
+ private assetCancels;
569
611
  private rafId;
570
612
  private frames;
571
613
  private lastFpsAt;
@@ -915,6 +957,14 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
915
957
  /** Legend hover: highlight one category (dim the rest), or null to clear. */
916
958
  setCategoryHighlight(key: string | null): void;
917
959
  private renderBackground;
960
+ /**
961
+ * Track an image through decode without ever leaving a rejected promise
962
+ * unobserved. Ordinary picker rendering remains best-effort; export ready()
963
+ * turns the retained failures into one actionable error.
964
+ */
965
+ private trackAssetImage;
966
+ /** Cancel and release every image retained by the previous chart/export. */
967
+ private cancelAssetLoads;
918
968
  /** Organizer floor-plan photo, dimmed, at the very bottom of the bg layer. */
919
969
  private renderBackgroundImage;
920
970
  /**
@@ -1138,6 +1188,21 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
1138
1188
  * byte-identical.
1139
1189
  */
1140
1190
  forceDraw(): void;
1191
+ /**
1192
+ * Resolve every buyer-visible image requested by the current chart. Export
1193
+ * callers get a hard error with the affected layer name; the interactive
1194
+ * renderer never calls this and retains its existing best-effort behaviour.
1195
+ */
1196
+ ready(): Promise<void>;
1197
+ /** Exact visible scene bounds in chart coordinates after fonts/assets exist. */
1198
+ private exportSceneBounds;
1199
+ /** Fit exact rendered nodes, including rotated text/decor, with pixel padding. */
1200
+ private fitExportContent;
1201
+ /**
1202
+ * Capture a clean, opaque fixed-size canvas. The CSS host background is
1203
+ * painted explicitly because Konva layers themselves are transparent.
1204
+ */
1205
+ captureCanvas(): HTMLCanvasElement;
1141
1206
  private updateFreeTextVisibility;
1142
1207
  /** OV-45(a): resolve authored row-letter labels for the buyer/preview map, in
1143
1208
  * world space, matching the Designer's placement contract (start/end/both/none
@@ -1145,6 +1210,16 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
1145
1210
  * labelStyle colour/size fed through the same auto-contrast guard). Segmented
1146
1211
  * rows keep their own logical-label handling and are resolved by their owner. */
1147
1212
  private buildRowLabelPlan;
1213
+ /** Axis-aligned world bounds of a centred, potentially rotated row label. */
1214
+ private rowLabelBox;
1215
+ /**
1216
+ * Keep an automatic start/end label out of seat markers and already-painted
1217
+ * text. The authored point is never altered. Candidates are deliberately
1218
+ * bounded and deterministic: the closest clear offset wins; if a chart is so
1219
+ * dense that none is clear, the least-colliding candidate wins so the required
1220
+ * row label remains present rather than being silently dropped.
1221
+ */
1222
+ private resolveAutomaticRowLabelPosition;
1148
1223
  /** Row labels never carry status; the buyer just dims them under the same
1149
1224
  * category/price filters that dim their seats. */
1150
1225
  private objectFilteredOut;
@@ -1334,6 +1409,10 @@ interface PickerTransport {
1334
1409
  extends?: number;
1335
1410
  }>;
1336
1411
  socketUrl(key: string): string;
1412
+ /** Optional — WebSocket subprotocols for the live feed (e.g. a one-use
1413
+ * subscribe ticket via `Sec-WebSocket-Protocol`, realtime-protocol v1).
1414
+ * Absent or empty means today's plain connection. */
1415
+ socketProtocols?(key: string): string[];
1337
1416
  }
1338
1417
  interface PickerCallbacks extends RendererCallbacks {
1339
1418
  /** Selection changed (manual clicks or a server best-available pick). */
@@ -1859,4 +1938,4 @@ declare function formatMoney(amount: number, currency?: string, fractionDigits?:
1859
1938
  /** Bare symbol for input adornments ("€", "$", "₹"). */
1860
1939
  declare function currencySymbol(currency?: string): string;
1861
1940
 
1862
- export { AccessibilityType, type AvailabilityRule, BoothObject, CategoryTier, ChartDoc, ChartObject, DEFAULT_CURRENCY, type Dict, type ExpandChartOptions, ExpandedSeat, Floor, GAAreaObject, GAInventorySegment, type HoldConflict, type HoldInfo, type HoldSelectionRequest, type HoldServerItem, ISeatmapRenderer, LabelStyle, type Locale, LodRung, MAX_EVENT_INVENTORY, MAX_GA_CAPACITY, type PanoramaResult, type PickerCallbacks, PickerController, type PickerGAArea, type PickerOptions, type PickerSeat, type PickerTransport, Point, RENDERED_QUALITY_REPORT_VERSION, RectTableSeatCounts, RectTableSide, type RenderedEvidenceState, RenderedFreeTextEvidence, type RenderedQualityFinding, type RenderedQualityFindingCode, type RenderedQualityReport, type RenderedQualitySample, RendererCallbacks, RendererOptions, RendererQualityEvidence, RendererViewMode, RowObject, type RowSeatSlot, SUPPORTED_LOCALES, SeatCommercialAttributes, type SeatHoverDetails, SeatOverride, SeatStatus, SeatmapRenderer, type SectionCategory, type SectionNode, SectionObject, type SectionSummary, TIER_HEIGHT_M, TableObject, type TableSeatSlot, type TableSelectionDetails, UNGROUPED_ID, allObjects, applyHidden, chartBounds, computeSections, createRenderer, currencySymbol, expandBooth, expandChart, expandRow, expandRowSlots, expandTable, expandTableSlots, floorObjects, floorsOf, formatDate, formatMoney, gaAreasOf, gaInventorySegments, gaUnitLabel, gaUnitLabels, generateSeatPanorama, generateSeatThumb, getLocale, growJoinedGAInventory, hiddenObjectIds, inspectRenderedQualityEvidence, isGaUnitLabel, isSectionHidden, loadLocale, objectCenter, owningSectionForObject, pointInPolygon, pointInPolygonWithHoles, polygonLabelPoint, resolveLocale, rowInventoryCount, rowSeatPositions, seatLabelPart, sectionGeometry, setLocale, setMoneyLocale, setStringOverrides, stackFloors, t, tCount, tableInventoryCount, tableSeatCountsBySide, validGAInventorySegments };
1941
+ export { AccessibilityType, type AvailabilityRule, BoothObject, CategoryTier, ChartDoc, ChartObject, DEFAULT_CURRENCY, type Dict, type ExpandChartOptions, ExpandedSeat, Floor, GAAreaObject, GAInventorySegment, type HoldConflict, type HoldInfo, type HoldSelectionRequest, type HoldServerItem, ISeatmapRenderer, LabelStyle, type Locale, LodRung, MAX_EVENT_INVENTORY, MAX_GA_CAPACITY, type PanoramaResult, type PickerCallbacks, PickerController, type PickerGAArea, type PickerOptions, type PickerSeat, type PickerTransport, Point, RENDERED_QUALITY_REPORT_VERSION, RectTableSeatCounts, RectTableSide, type RenderedEvidenceState, RenderedFreeTextEvidence, type RenderedQualityFinding, type RenderedQualityFindingCode, type RenderedQualityReport, type RenderedQualitySample, RendererCallbacks, RendererOptions, RendererQualityEvidence, RendererViewMode, RowObject, type RowSeatSlot, SUPPORTED_LOCALES, SeatCommercialAttributes, type SeatHoverDetails, SeatOverride, SeatStatus, SeatmapRenderer, type SectionCategory, type SectionNode, SectionObject, type SectionSummary, TIER_HEIGHT_M, TableObject, type TableSeatSlot, type TableSelectionDetails, UNGROUPED_ID, allObjects, applyHidden, chartBounds, computeSections, createRenderer, currencySymbol, expandBooth, expandChart, expandRow, expandRowSlots, expandTable, expandTableSlots, floorObjects, floorsOf, formatDate, formatMoney, gaAreasOf, gaInventorySegments, gaUnitLabel, gaUnitLabels, generateSeatPanorama, generateSeatThumb, getLocale, growJoinedGAInventory, hiddenObjectIds, inspectRenderedQualityEvidence, isGaUnitLabel, isSectionHidden, loadLocale, objectCenter, owningSectionForObject, pointInPolygon, pointInPolygonWithHoles, polygonLabelPoint, resolveLocale, rowInventoryCount, rowSeatPositions, sectionGeometry, setLocale, setMoneyLocale, setStringOverrides, stackFloors, t, tCount, tableInventoryCount, tableSeatCountsBySide, validGAInventorySegments };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,40 @@
1
- import { A as AccessibilityType, S as SeatOverride, R as RowObject, L as LabelStyle, a as RectTableSide, C as ChartDoc, b as ChartObject, B as BoothObject, E as ExpandedSeat, T as TableObject, F as Floor, P as Point, c as SectionObject, d as RectTableSeatCounts, G as GAAreaObject, e as GAInventorySegment, f as RendererQualityEvidence, g as RenderedFreeTextEvidence, I as ISeatmapRenderer, h as RendererOptions, i as SeatStatus, j as RendererViewMode, k as LodRung, l as CategoryTier, m as SeatCommercialAttributes, n as RendererCallbacks } from './types-DO_J5DtX.js';
2
- export { o as ACCESSIBILITY_RING_COLOR, p as ACCESSIBILITY_TYPES, q as AccessibilityMeta, r as CHART_STORAGE_KEY, s as Category, t as ChartReferenceImage, u as ChartTheme, v as CubicPath, D as DecorImageObject, w as LABEL_STYLE_MAX_SIZE, x as LABEL_STYLE_MIN_SIZE, y as LabelPresentation, z as ReferenceAccessibilitySource, H as ReferenceCalibration, J as ReferenceCategorySource, K as ReferenceDerivedScale, M as ReferenceInventoryExclusionSource, N as ReferenceInventorySource, O as ReferenceScanProposal, Q as ReferenceScanRowProposal, U as ReferenceScanSectionProposal, V as ReferenceSeatSeed, W as ReferenceSectionTraceBatchInput, X as ReferenceSectionTraceBatchProposal, Y as ReferenceSectionTraceInput, Z as ReferenceSectionTraceProposal, _ as RenderedBookableLabelEvidence, $ as RenderedGAAreaEvidence, a0 as RenderedHierarchyLabelEvidence, a1 as RenderedLabelHiddenReason, a2 as SEAT_COMMERCIAL_MARKS, a3 as SURROUNDINGS_SHAPE_ROLES, a4 as SeatCommercialMark, a5 as SeatCommercialMeta, a6 as SectionOutlinePath, a7 as SectionPathSegment, a8 as SelectionLayer, a9 as ShapeLineCap, aa as ShapeLineEnding, ab as ShapeLineJoin, ac as ShapeObject, ad as TextObject, ae as ZoneDef, af as accessibilityMeta, ag as accessibilityRingColor, ah as layerOf, ai as seatCommercialMeta } from './types-DO_J5DtX.js';
1
+ import { R as RowObject, A as AccessibilityType, S as SeatOverride, L as LabelStyle, a as RectTableSide, C as ChartDoc, b as ChartObject, B as BoothObject, E as ExpandedSeat, T as TableObject, F as Floor, P as Point, c as SectionObject, d as RectTableSeatCounts, G as GAAreaObject, e as GAInventorySegment, f as RendererQualityEvidence, g as RenderedFreeTextEvidence, I as ISeatmapRenderer, h as RendererOptions, i as SeatStatus, j as RendererViewMode, k as LodRung, l as CategoryTier, m as SeatCommercialAttributes, n as RendererCallbacks } from './types-DBnRO2hX.js';
2
+ export { o as ACCESSIBILITY_RING_COLOR, p as ACCESSIBILITY_TYPES, q as AccessibilityMeta, r as CHART_STORAGE_KEY, s as Category, t as ChartReferenceImage, u as ChartTheme, v as CubicPath, D as DecorImageObject, w as LABEL_STYLE_MAX_SIZE, x as LABEL_STYLE_MIN_SIZE, y as LabelPresentation, z as ReferenceAccessibilitySource, H as ReferenceCalibration, J as ReferenceCategorySource, K as ReferenceDerivedScale, M as ReferenceInventoryExclusionSource, N as ReferenceInventorySource, O as ReferenceScanProposal, Q as ReferenceScanRowProposal, U as ReferenceScanSectionProposal, V as ReferenceSeatSeed, W as ReferenceSectionTraceBatchInput, X as ReferenceSectionTraceBatchProposal, Y as ReferenceSectionTraceInput, Z as ReferenceSectionTraceProposal, _ as RenderedBookableLabelEvidence, $ as RenderedGAAreaEvidence, a0 as RenderedHierarchyLabelEvidence, a1 as RenderedLabelHiddenReason, a2 as SEAT_COMMERCIAL_MARKS, a3 as SURROUNDINGS_SHAPE_ROLES, a4 as SeatCommercialMark, a5 as SeatCommercialMeta, a6 as SectionOutlinePath, a7 as SectionPathSegment, a8 as SelectionLayer, a9 as ShapeLineCap, aa as ShapeLineEnding, ab as ShapeLineJoin, ac as ShapeObject, ad as TextObject, ae as ZoneDef, af as accessibilityMeta, ag as accessibilityRingColor, ah as layerOf, ai as seatCommercialMeta } from './types-DBnRO2hX.js';
3
+
4
+ /**
5
+ * The segmented-row model — one logical row made of several physical rows.
6
+ *
7
+ * A segmented row is drawn as a chain of nodes and stored as N physical
8
+ * `RowObject`s tied together by `segmentedRow` metadata. Two questions have to
9
+ * be answered consistently or the feature lies to somebody:
10
+ *
11
+ * 1. **At draft time** — given the author's nodes, exactly which components,
12
+ * seat counts and pitches will be committed? (`segmentedRowComponents`)
13
+ * 2. **At read time** — given stored physical rows, what is the logical row they
14
+ * form, and where does each component sit inside its numbering?
15
+ * (`resolveSegmentedRowGroups`)
16
+ *
17
+ * These lived apart — (1) in `rowDraft.ts` next to the ghost preview, (2) in
18
+ * `layout.ts` next to buyer expansion — which is precisely how the canvas came
19
+ * to number a segmented row `1-7` / `1-6` while buyers correctly saw
20
+ * `A-1…A-13`. They are two halves of one rule, so they live in one module.
21
+ *
22
+ * The standing rule this module exists to enforce: **the ghost preview and the
23
+ * commit share one resolver.** A preview that can lie is a bug.
24
+ */
25
+
26
+ /** Resolved logical placement of one physical component inside a segmented row. */
27
+ interface SegmentedRowPlacement {
28
+ groupId: string;
29
+ /** Buyer adjacency index base (a declared aisle break costs one index). */
30
+ adjacencyOffset: number;
31
+ /** Continuous seat-numbering base across the whole logical row. */
32
+ displayOffset: number;
33
+ displayLabel: string;
34
+ totalSeats: number;
35
+ canonical: RowObject;
36
+ viewFromSeatUrl?: string;
37
+ }
3
38
 
4
39
  /**
5
40
  * Pure geometry helpers — no Konva, no DOM. Turns the parametric chart
@@ -54,12 +89,13 @@ interface TableSeatSlot extends RowSeatSlot {
54
89
  side?: RectTableSide;
55
90
  }
56
91
  /**
57
- * The seat NUMBER part of a row seat's label (the row prefix is prepended by the
58
- * caller). Applies the row's numbering scheme, direction, step, start and label
59
- * prefix. Labels only never geometry. See `RowObject.seatNumbering.scheme`.
92
+ * Seat slots for one physical row.
93
+ *
94
+ * `placement` makes the slots read as part of a logical segmented row: labels
95
+ * continue across components (`A-8`, not a second `A-1`) using the logical row's
96
+ * numbering scheme and total seat count.
60
97
  */
61
- declare function seatLabelPart(row: RowObject, i: number): string;
62
- declare function expandRowSlots(row: RowObject): RowSeatSlot[];
98
+ declare function expandRowSlots(row: RowObject, placement?: SegmentedRowPlacement): RowSeatSlot[];
63
99
  declare function expandRow(row: RowObject): ExpandedSeat[];
64
100
  /**
65
101
  * Expand a table into its perimeter seats.
@@ -408,6 +444,7 @@ declare function inspectRenderedQualityEvidence(evidence: RendererQualityEvidenc
408
444
  declare class SeatmapRenderer implements ISeatmapRenderer {
409
445
  private container;
410
446
  private opts;
447
+ private readonly exportMode;
411
448
  private stage;
412
449
  private bgLayer;
413
450
  private seatLayer;
@@ -566,6 +603,11 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
566
603
  private bounds;
567
604
  private cached;
568
605
  private dpr;
606
+ /** Current chart's buyer-visible image work. Failures are retained until ready(). */
607
+ private assetGeneration;
608
+ private assetPromises;
609
+ private assetErrors;
610
+ private assetCancels;
569
611
  private rafId;
570
612
  private frames;
571
613
  private lastFpsAt;
@@ -915,6 +957,14 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
915
957
  /** Legend hover: highlight one category (dim the rest), or null to clear. */
916
958
  setCategoryHighlight(key: string | null): void;
917
959
  private renderBackground;
960
+ /**
961
+ * Track an image through decode without ever leaving a rejected promise
962
+ * unobserved. Ordinary picker rendering remains best-effort; export ready()
963
+ * turns the retained failures into one actionable error.
964
+ */
965
+ private trackAssetImage;
966
+ /** Cancel and release every image retained by the previous chart/export. */
967
+ private cancelAssetLoads;
918
968
  /** Organizer floor-plan photo, dimmed, at the very bottom of the bg layer. */
919
969
  private renderBackgroundImage;
920
970
  /**
@@ -1138,6 +1188,21 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
1138
1188
  * byte-identical.
1139
1189
  */
1140
1190
  forceDraw(): void;
1191
+ /**
1192
+ * Resolve every buyer-visible image requested by the current chart. Export
1193
+ * callers get a hard error with the affected layer name; the interactive
1194
+ * renderer never calls this and retains its existing best-effort behaviour.
1195
+ */
1196
+ ready(): Promise<void>;
1197
+ /** Exact visible scene bounds in chart coordinates after fonts/assets exist. */
1198
+ private exportSceneBounds;
1199
+ /** Fit exact rendered nodes, including rotated text/decor, with pixel padding. */
1200
+ private fitExportContent;
1201
+ /**
1202
+ * Capture a clean, opaque fixed-size canvas. The CSS host background is
1203
+ * painted explicitly because Konva layers themselves are transparent.
1204
+ */
1205
+ captureCanvas(): HTMLCanvasElement;
1141
1206
  private updateFreeTextVisibility;
1142
1207
  /** OV-45(a): resolve authored row-letter labels for the buyer/preview map, in
1143
1208
  * world space, matching the Designer's placement contract (start/end/both/none
@@ -1145,6 +1210,16 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
1145
1210
  * labelStyle colour/size fed through the same auto-contrast guard). Segmented
1146
1211
  * rows keep their own logical-label handling and are resolved by their owner. */
1147
1212
  private buildRowLabelPlan;
1213
+ /** Axis-aligned world bounds of a centred, potentially rotated row label. */
1214
+ private rowLabelBox;
1215
+ /**
1216
+ * Keep an automatic start/end label out of seat markers and already-painted
1217
+ * text. The authored point is never altered. Candidates are deliberately
1218
+ * bounded and deterministic: the closest clear offset wins; if a chart is so
1219
+ * dense that none is clear, the least-colliding candidate wins so the required
1220
+ * row label remains present rather than being silently dropped.
1221
+ */
1222
+ private resolveAutomaticRowLabelPosition;
1148
1223
  /** Row labels never carry status; the buyer just dims them under the same
1149
1224
  * category/price filters that dim their seats. */
1150
1225
  private objectFilteredOut;
@@ -1334,6 +1409,10 @@ interface PickerTransport {
1334
1409
  extends?: number;
1335
1410
  }>;
1336
1411
  socketUrl(key: string): string;
1412
+ /** Optional — WebSocket subprotocols for the live feed (e.g. a one-use
1413
+ * subscribe ticket via `Sec-WebSocket-Protocol`, realtime-protocol v1).
1414
+ * Absent or empty means today's plain connection. */
1415
+ socketProtocols?(key: string): string[];
1337
1416
  }
1338
1417
  interface PickerCallbacks extends RendererCallbacks {
1339
1418
  /** Selection changed (manual clicks or a server best-available pick). */
@@ -1859,4 +1938,4 @@ declare function formatMoney(amount: number, currency?: string, fractionDigits?:
1859
1938
  /** Bare symbol for input adornments ("€", "$", "₹"). */
1860
1939
  declare function currencySymbol(currency?: string): string;
1861
1940
 
1862
- export { AccessibilityType, type AvailabilityRule, BoothObject, CategoryTier, ChartDoc, ChartObject, DEFAULT_CURRENCY, type Dict, type ExpandChartOptions, ExpandedSeat, Floor, GAAreaObject, GAInventorySegment, type HoldConflict, type HoldInfo, type HoldSelectionRequest, type HoldServerItem, ISeatmapRenderer, LabelStyle, type Locale, LodRung, MAX_EVENT_INVENTORY, MAX_GA_CAPACITY, type PanoramaResult, type PickerCallbacks, PickerController, type PickerGAArea, type PickerOptions, type PickerSeat, type PickerTransport, Point, RENDERED_QUALITY_REPORT_VERSION, RectTableSeatCounts, RectTableSide, type RenderedEvidenceState, RenderedFreeTextEvidence, type RenderedQualityFinding, type RenderedQualityFindingCode, type RenderedQualityReport, type RenderedQualitySample, RendererCallbacks, RendererOptions, RendererQualityEvidence, RendererViewMode, RowObject, type RowSeatSlot, SUPPORTED_LOCALES, SeatCommercialAttributes, type SeatHoverDetails, SeatOverride, SeatStatus, SeatmapRenderer, type SectionCategory, type SectionNode, SectionObject, type SectionSummary, TIER_HEIGHT_M, TableObject, type TableSeatSlot, type TableSelectionDetails, UNGROUPED_ID, allObjects, applyHidden, chartBounds, computeSections, createRenderer, currencySymbol, expandBooth, expandChart, expandRow, expandRowSlots, expandTable, expandTableSlots, floorObjects, floorsOf, formatDate, formatMoney, gaAreasOf, gaInventorySegments, gaUnitLabel, gaUnitLabels, generateSeatPanorama, generateSeatThumb, getLocale, growJoinedGAInventory, hiddenObjectIds, inspectRenderedQualityEvidence, isGaUnitLabel, isSectionHidden, loadLocale, objectCenter, owningSectionForObject, pointInPolygon, pointInPolygonWithHoles, polygonLabelPoint, resolveLocale, rowInventoryCount, rowSeatPositions, seatLabelPart, sectionGeometry, setLocale, setMoneyLocale, setStringOverrides, stackFloors, t, tCount, tableInventoryCount, tableSeatCountsBySide, validGAInventorySegments };
1941
+ export { AccessibilityType, type AvailabilityRule, BoothObject, CategoryTier, ChartDoc, ChartObject, DEFAULT_CURRENCY, type Dict, type ExpandChartOptions, ExpandedSeat, Floor, GAAreaObject, GAInventorySegment, type HoldConflict, type HoldInfo, type HoldSelectionRequest, type HoldServerItem, ISeatmapRenderer, LabelStyle, type Locale, LodRung, MAX_EVENT_INVENTORY, MAX_GA_CAPACITY, type PanoramaResult, type PickerCallbacks, PickerController, type PickerGAArea, type PickerOptions, type PickerSeat, type PickerTransport, Point, RENDERED_QUALITY_REPORT_VERSION, RectTableSeatCounts, RectTableSide, type RenderedEvidenceState, RenderedFreeTextEvidence, type RenderedQualityFinding, type RenderedQualityFindingCode, type RenderedQualityReport, type RenderedQualitySample, RendererCallbacks, RendererOptions, RendererQualityEvidence, RendererViewMode, RowObject, type RowSeatSlot, SUPPORTED_LOCALES, SeatCommercialAttributes, type SeatHoverDetails, SeatOverride, SeatStatus, SeatmapRenderer, type SectionCategory, type SectionNode, SectionObject, type SectionSummary, TIER_HEIGHT_M, TableObject, type TableSeatSlot, type TableSelectionDetails, UNGROUPED_ID, allObjects, applyHidden, chartBounds, computeSections, createRenderer, currencySymbol, expandBooth, expandChart, expandRow, expandRowSlots, expandTable, expandTableSlots, floorObjects, floorsOf, formatDate, formatMoney, gaAreasOf, gaInventorySegments, gaUnitLabel, gaUnitLabels, generateSeatPanorama, generateSeatThumb, getLocale, growJoinedGAInventory, hiddenObjectIds, inspectRenderedQualityEvidence, isGaUnitLabel, isSectionHidden, loadLocale, objectCenter, owningSectionForObject, pointInPolygon, pointInPolygonWithHoles, polygonLabelPoint, resolveLocale, rowInventoryCount, rowSeatPositions, sectionGeometry, setLocale, setMoneyLocale, setStringOverrides, stackFloors, t, tCount, tableInventoryCount, tableSeatCountsBySide, validGAInventorySegments };