@seatlayer/core 0.52.0 → 0.54.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/LICENSE +16 -17
- package/README.md +8 -18
- package/dist/categoryInventory-B4xo7hE2.d.ts +109 -0
- package/dist/categoryInventory-lRtu3VjD.d.cts +109 -0
- package/dist/chunk-3QLFGEQY.js +1 -0
- package/dist/chunk-55NOSZK5.js +1 -0
- package/dist/chunk-6LIPQU4G.js +1 -0
- package/dist/chunk-6VTTBC5F.js +1 -0
- package/dist/chunk-7PT7OQUO.js +1 -0
- package/dist/chunk-AQKYUJBX.js +1 -0
- package/dist/chunk-CXF32VPG.js +1 -0
- package/dist/chunk-DDE7IOFT.js +1 -0
- package/dist/chunk-EQM4FFN5.js +1 -0
- package/dist/chunk-EYROIZGQ.js +1 -0
- package/dist/chunk-IJI4WU57.js +1 -0
- package/dist/chunk-QUKWJQLR.js +1 -0
- package/dist/chunk-VDZ24QVV.js +1 -0
- package/dist/chunk-XPPT3OGQ.js +1 -0
- package/dist/core/chart-ops/index.cjs +1 -0
- package/dist/core/chart-ops/index.d.cts +1235 -0
- package/dist/core/chart-ops/index.d.ts +1235 -0
- package/dist/core/chart-ops/index.js +1 -0
- package/dist/core/color.cjs +1 -0
- package/dist/core/color.d.cts +192 -0
- package/dist/core/color.d.ts +192 -0
- package/dist/core/color.js +1 -0
- package/dist/core/inventory/index.cjs +1 -0
- package/dist/core/inventory/index.d.cts +209 -0
- package/dist/core/inventory/index.d.ts +209 -0
- package/dist/core/inventory/index.js +1 -0
- package/dist/core/layout/index.cjs +1 -0
- package/dist/core/layout/index.d.cts +376 -0
- package/dist/core/layout/index.d.ts +376 -0
- package/dist/core/layout/index.js +1 -0
- package/dist/core/quality/index.cjs +1 -0
- package/dist/core/quality/index.d.cts +132 -0
- package/dist/core/quality/index.d.ts +132 -0
- package/dist/core/quality/index.js +1 -0
- package/dist/core/render-assets/index.cjs +1 -0
- package/dist/core/render-assets/index.d.cts +99 -0
- package/dist/core/render-assets/index.d.ts +99 -0
- package/dist/core/render-assets/index.js +1 -0
- package/dist/core/seatConfidence.cjs +1 -76
- package/dist/core/seatConfidence.d.cts +1 -1
- package/dist/core/seatConfidence.d.ts +1 -1
- package/dist/core/seatConfidence.js +1 -51
- package/dist/core/sections/index.cjs +1 -0
- package/dist/core/sections/index.d.cts +346 -0
- package/dist/core/sections/index.d.ts +346 -0
- package/dist/core/sections/index.js +1 -0
- package/dist/de-75NWRKC5.js +1 -0
- package/dist/es-BM7EJ7PW.js +1 -0
- package/dist/fr-HPXQHIB4.js +1 -0
- package/dist/index.cjs +1 -12717
- package/dist/index.d.cts +71 -580
- package/dist/index.d.ts +71 -580
- package/dist/index.js +1 -10235
- package/dist/labeling-CsPt1mC_.d.cts +90 -0
- package/dist/labeling-w8bl86cb.d.ts +90 -0
- package/dist/layout-B5UYbwnv.d.ts +181 -0
- package/dist/layout-YFmuxw_M.d.cts +181 -0
- package/dist/picker/minimapGeometry.cjs +1 -80
- package/dist/picker/minimapGeometry.js +1 -52
- package/dist/renderedQuality-CugJarFp.d.cts +113 -0
- package/dist/renderedQuality-DbZM034G.d.ts +113 -0
- package/dist/renderer-DhUHFtsI.d.cts +531 -0
- package/dist/renderer-IBi9YKWR.d.ts +531 -0
- package/dist/sections-B7cDF0Nq.d.cts +123 -0
- package/dist/sections-mLOZrGrI.d.ts +123 -0
- package/dist/segmentedRowModel-BPTnJ7Tz.d.ts +75 -0
- package/dist/segmentedRowModel-CGoH684F.d.cts +75 -0
- package/dist/ticketRestrictions-BwAebpSK.d.cts +72 -0
- package/dist/ticketRestrictions-ChHJwvTq.d.ts +72 -0
- package/dist/{types-tLOunI-B.d.cts → types-COfJorq_.d.cts} +233 -757
- package/dist/{types-tLOunI-B.d.ts → types-COfJorq_.d.ts} +233 -757
- package/dist/view/panoramaDelivery.cjs +1 -126
- package/dist/view/panoramaDelivery.js +1 -17
- package/dist/view3d/crossfade/panorama.cjs +1 -459
- package/dist/view3d/crossfade/panorama.d.cts +2 -4
- package/dist/view3d/crossfade/panorama.d.ts +2 -4
- package/dist/view3d/crossfade/panorama.js +1 -30
- package/dist/view3d/index.cjs +27 -7929
- package/dist/view3d/index.d.cts +64 -22
- package/dist/view3d/index.d.ts +64 -22
- package/dist/view3d/index.js +27 -7062
- package/package.json +95 -11
- package/dist/chunk-AZODENEL.js +0 -97
- package/dist/chunk-AZODENEL.js.map +0 -1
- package/dist/chunk-BE3F7CT3.js +0 -341
- package/dist/chunk-BE3F7CT3.js.map +0 -1
- package/dist/chunk-UID7KN44.js +0 -1569
- package/dist/chunk-UID7KN44.js.map +0 -1
- package/dist/core/seatConfidence.cjs.map +0 -1
- package/dist/core/seatConfidence.js.map +0 -1
- package/dist/de-YGODYJ3E.js +0 -292
- package/dist/de-YGODYJ3E.js.map +0 -1
- package/dist/es-VMBTGVFQ.js +0 -292
- package/dist/es-VMBTGVFQ.js.map +0 -1
- package/dist/fr-SLBE2ULB.js +0 -292
- package/dist/fr-SLBE2ULB.js.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/picker/minimapGeometry.cjs.map +0 -1
- package/dist/picker/minimapGeometry.js.map +0 -1
- package/dist/view/panoramaDelivery.cjs.map +0 -1
- package/dist/view/panoramaDelivery.js.map +0 -1
- package/dist/view3d/crossfade/panorama.cjs.map +0 -1
- package/dist/view3d/crossfade/panorama.js.map +0 -1
- package/dist/view3d/index.cjs.map +0 -1
- package/dist/view3d/index.js.map +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,463 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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
|
-
viewFromSeatMeta?: RowObject['viewFromSeatMeta'];
|
|
38
|
-
confidenceEvidence?: RowObject['confidenceEvidence'];
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Pure geometry helpers — no Konva, no DOM. Turns the parametric chart
|
|
43
|
-
* document into concrete seat coordinates and computes bounding boxes.
|
|
44
|
-
*/
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Expand a parametric row into seat positions.
|
|
48
|
-
*
|
|
49
|
-
* Straight (curve === 0): seat i sits at local (i·spacing, 0).
|
|
50
|
-
*
|
|
51
|
-
* Curved: seats lie on a circular arc. Per-seat angular step is
|
|
52
|
-
* `curve/(seatCount-1)`; radius is derived so the chord between neighbours
|
|
53
|
-
* equals seatSpacing → radius = spacing / (2·sin(step/2)). Seat 0 sits at the
|
|
54
|
-
* bottom of the arc (local origin) with the circle centre directly above it at
|
|
55
|
-
* (0,-radius); increasing index sweeps toward +x while the ends rise toward -y,
|
|
56
|
-
* i.e. positive curve is concave toward -y (a row wrapping a stage above it).
|
|
57
|
-
* Local points are then rotated by `rotation` and translated to `origin`.
|
|
58
|
-
*
|
|
59
|
-
* Numbering (labels only, never geometry): `seatNumbering.direction === 'rtl'`
|
|
60
|
-
* numbers from the far physical end; `step === 2` produces odd/even numbering
|
|
61
|
-
* (start at 1 → 1,3,5…; start at 2 → 2,4,6…).
|
|
62
|
-
*/
|
|
63
|
-
/** Base (pre-override) seat centre per index — shared by expandRow + designer edit mode. */
|
|
64
|
-
declare function rowSeatPositions(row: RowObject): Point[];
|
|
65
|
-
/** Sellable row slots: skipped slots are absent; empty wheelchair bays remain. */
|
|
66
|
-
declare function rowInventoryCount(row: RowObject): number;
|
|
67
|
-
/**
|
|
68
|
-
* Every seat slot of a row INCLUDING skipped ones (designer seat-edit mode uses
|
|
69
|
-
* this to draw un-skip handles). Overrides (dx/dy/label/categoryKey) are applied
|
|
70
|
-
* but a skipped slot is flagged, not omitted.
|
|
71
|
-
*/
|
|
72
|
-
interface RowSeatSlot {
|
|
73
|
-
index: number;
|
|
74
|
-
x: number;
|
|
75
|
-
y: number;
|
|
76
|
-
label: string;
|
|
77
|
-
displayLabel: string;
|
|
78
|
-
categoryKey: string;
|
|
79
|
-
skipped: boolean;
|
|
80
|
-
accessible: boolean;
|
|
81
|
-
accessibility: AccessibilityType[];
|
|
82
|
-
wheelchairSpaceType?: SeatOverride['wheelchairSpaceType'];
|
|
83
|
-
commercial?: RowObject['commercial'];
|
|
84
|
-
viewUrl?: string;
|
|
85
|
-
viewMeta?: SeatViewMetadata;
|
|
86
|
-
labelStyle?: LabelStyle;
|
|
87
|
-
}
|
|
88
|
-
/** Every authored table-chair slot, including skipped inventory. This mirrors
|
|
89
|
-
* row seat slots so Designer, MCP and buyer/event expansion share one semantic
|
|
90
|
-
* source while retaining the table's stable numeric slot identity. */
|
|
91
|
-
interface TableSeatSlot extends RowSeatSlot {
|
|
92
|
-
side?: RectTableSide;
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Seat slots for one physical row.
|
|
96
|
-
*
|
|
97
|
-
* `placement` makes the slots read as part of a logical segmented row: labels
|
|
98
|
-
* continue across components (`A-8`, not a second `A-1`) using the logical row's
|
|
99
|
-
* numbering scheme and total seat count.
|
|
100
|
-
*/
|
|
101
|
-
declare function expandRowSlots(row: RowObject, placement?: SegmentedRowPlacement): RowSeatSlot[];
|
|
102
|
-
declare function expandRow(row: RowObject): ExpandedSeat[];
|
|
103
|
-
/**
|
|
104
|
-
* Expand a table into its perimeter seats.
|
|
105
|
-
*
|
|
106
|
-
* Round: seats spread evenly on a circle of radius `radius + 16`, the first at
|
|
107
|
-
* angle `rotation` (degrees, clockwise from +x). Rect: seats line the top and
|
|
108
|
-
* bottom edges (split evenly, any remainder to the top), 16u outside the edge,
|
|
109
|
-
* the whole set rotated about the table centre.
|
|
110
|
-
*/
|
|
111
|
-
/** Legacy rect tables distribute aggregate capacity round-robin across enabled
|
|
112
|
-
* sides, then emit chairs in canonical top/bottom/left/right order. */
|
|
113
|
-
declare function tableSeatCountsBySide(t: TableObject): RectTableSeatCounts;
|
|
114
|
-
/** Expand every authored table chair, including skipped slots needed by the
|
|
115
|
-
* Designer to restore inventory. */
|
|
116
|
-
declare function expandTableSlots(t: TableObject): TableSeatSlot[];
|
|
117
|
-
/** Sellable individual table chairs. Grouped tables own one atomic inventory
|
|
118
|
-
* unit elsewhere and therefore retain their full authored chair capacity. */
|
|
119
|
-
declare function tableInventoryCount(t: TableObject): number;
|
|
120
|
-
declare function expandTable(t: TableObject): ExpandedSeat[];
|
|
121
|
-
/** Expand a booth into its single bookable block unit. */
|
|
122
|
-
declare function expandBooth(b: BoothObject): ExpandedSeat[];
|
|
123
|
-
/** Ray-cast point-in-polygon test — odd crossings ⇒ inside. */
|
|
124
|
-
declare function pointInPolygon(p: Point, poly: Point[]): boolean;
|
|
125
|
-
declare function pointInPolygonWithHoles(p: Point, outer: Point[], holes: Point[][] | undefined): boolean;
|
|
126
|
-
/**
|
|
127
|
-
* Stable interior label anchor: the centre of the largest circle that fits in
|
|
128
|
-
* the polygon (holes excluded).
|
|
129
|
-
*
|
|
130
|
-
* This used to return the average-of-vertices centroid whenever that happened
|
|
131
|
-
* to be inside, and only fell back to a coarse 24×24 grid search when it was
|
|
132
|
-
* not. "Inside" is a much weaker property than "has room": on a traced arena
|
|
133
|
-
* the outer arc of a wedge carries dozens of sampled vertices and the radial
|
|
134
|
-
* edges carry two, so the average is dragged onto the arc and the label pill —
|
|
135
|
-
* far wider than a point — straddled the boundary into the next section.
|
|
136
|
-
* Measured on the 36-section traced arena corpus, 15 of 36 anchors had under
|
|
137
|
-
* 75% of the clearance actually available, some as little as 43%.
|
|
138
|
-
*
|
|
139
|
-
* `polygonInscribedAnchor` is deterministic and coordinate-free, so callers may
|
|
140
|
-
* memoize it on geometry alone.
|
|
141
|
-
*/
|
|
142
|
-
declare function polygonLabelPoint(outer: Point[], holes: Point[][] | undefined): Point;
|
|
143
|
-
/**
|
|
144
|
-
* Visual centre of any object — used for spatial section membership and for
|
|
145
|
-
* rotating an object about its centre. Rows: centroid of expanded seats (or
|
|
146
|
-
* origin when empty); tables/booths: centre; GA/section: polygon centroid;
|
|
147
|
-
* shape: bbox centre; text: its position.
|
|
148
|
-
*/
|
|
149
|
-
declare function objectCenter(o: ChartObject): Point;
|
|
150
|
-
/**
|
|
151
|
-
* Resolve one bookable object's owning physical section using the canonical
|
|
152
|
-
* first-match rule. Generated reference inventory may name a logical section,
|
|
153
|
-
* but that provenance is trusted only when the stored geometry confirms it.
|
|
154
|
-
* Keeping this primitive in layout lets section inventory, category painting,
|
|
155
|
-
* and buyer view inheritance share one ownership decision.
|
|
156
|
-
*/
|
|
157
|
-
declare function owningSectionForObject(objects: ChartObject[], object: ChartObject): SectionObject | undefined;
|
|
158
|
-
/**
|
|
159
|
-
* Normalized floor list (Batch 5): a multi-floor chart's `floors`, or a synthetic
|
|
160
|
-
* single floor wrapping a single-floor chart's `objects`. Every consumer that needs
|
|
161
|
-
* to reason about floors goes through this so single-floor charts stay untouched.
|
|
162
|
-
*/
|
|
163
|
-
declare function floorsOf(doc: ChartDoc): Floor[];
|
|
164
|
-
/** Objects of one floor by id (defaults to the first floor). */
|
|
165
|
-
declare function floorObjects(doc: ChartDoc, floorId?: string): ChartObject[];
|
|
166
|
-
/** Every object across ALL floors — the whole venue (single-floor = `doc.objects`). */
|
|
167
|
-
declare function allObjects(doc: ChartDoc): ChartObject[];
|
|
168
|
-
/** A copy of an object translated by (dx, dy) — every coordinate field shifted. */
|
|
169
|
-
declare function translateObject(o: ChartObject, dx: number, dy: number): ChartObject;
|
|
170
|
-
/**
|
|
171
|
-
* Multi-floor 3D stack (Batch 5): flatten every floor into ONE doc with floor `i`
|
|
172
|
-
* lifted by `i * spread` in −y, so the isometric view shows the floors as stacked
|
|
173
|
-
* decks (ground at the bottom). Returns a single-floor doc (no `floors`). Meant
|
|
174
|
-
* only for the 3D overview render — 2D still shows one floor via `floorObjects`.
|
|
175
|
-
*/
|
|
176
|
-
declare function stackFloors(doc: ChartDoc, spread?: number): ChartDoc;
|
|
177
|
-
/**
|
|
178
|
-
* Build the buyer-facing 2D overview of a multi-floor chart.
|
|
179
|
-
*
|
|
180
|
-
* Floors commonly reuse the same drawing origin (a balcony is authored over
|
|
181
|
-
* the stalls it overlooks). Flattening those source coordinates makes a valid
|
|
182
|
-
* import look corrupt because every level is painted on top of every other
|
|
183
|
-
* level. This projection packs complete floors into a compact, content-aware
|
|
184
|
-
* grid. Each floor receives one rigid translation: no seat, row, section,
|
|
185
|
-
* annotation, gap, or rotation changes, and the canonical document is never
|
|
186
|
-
* mutated.
|
|
187
|
-
*/
|
|
188
|
-
declare function layoutFloorOverview(doc: ChartDoc): ChartDoc;
|
|
189
|
-
/**
|
|
190
|
-
* Rigid per-floor translations used by the buyer's complete-venue overview.
|
|
191
|
-
*
|
|
192
|
-
* Kept as a pure public helper so 2D and 3D can present the same non-overlapping
|
|
193
|
-
* level arrangement without either renderer rewriting the authored chart. A
|
|
194
|
-
* zero translation is returned for a single-floor document.
|
|
195
|
-
*/
|
|
196
|
-
declare function floorOverviewTranslations(doc: ChartDoc): Point[];
|
|
197
|
-
interface ExpandChartOptions {
|
|
198
|
-
/** Physical height for a single-floor projection extracted from a multi-floor
|
|
199
|
-
* document. Full multi-floor documents resolve each floor directly. */
|
|
200
|
-
floorBaseHeightM?: number;
|
|
201
|
-
/** Resolve per-seat 3D eye heights (default true). Two-dimensional consumers
|
|
202
|
-
* such as thumbnails can disable this expensive stand-structure pass. */
|
|
203
|
-
resolveEyeHeights?: boolean;
|
|
204
|
-
}
|
|
205
|
-
/** Expand every seat-bearing object across all floors (rows, tables, booths).
|
|
206
|
-
* Multi-floor ownership is resolved one floor at a time: local coordinates may
|
|
207
|
-
* overlap between floors and must never assign a seat to another floor's section. */
|
|
208
|
-
declare function expandChart(doc: ChartDoc, options?: ExpandChartOptions): ExpandedSeat[];
|
|
209
|
-
/** Axis-aligned bounds over every object plus the background image, with padding. */
|
|
210
|
-
declare function chartBounds(doc: ChartDoc): {
|
|
211
|
-
x: number;
|
|
212
|
-
y: number;
|
|
213
|
-
width: number;
|
|
214
|
-
height: number;
|
|
215
|
-
};
|
|
216
|
-
|
|
217
|
-
declare const MAX_GA_CAPACITY = 100000;
|
|
218
|
-
declare const MAX_EVENT_INVENTORY = 100000;
|
|
219
|
-
/** Stable internal inventory label for one unit of a GA area's capacity. */
|
|
220
|
-
declare function gaUnitLabel(areaId: string, index: number): string;
|
|
221
|
-
/** Strict, bounded validation for durable Join Areas inventory provenance. */
|
|
222
|
-
declare function validGAInventorySegments(area: GAAreaObject): boolean;
|
|
223
|
-
/** Canonical source ranges. Invalid explicit provenance intentionally yields no
|
|
224
|
-
* labels: chart validation blocks publication instead of inventing identities. */
|
|
225
|
-
declare function gaInventorySegments(area: GAAreaObject): GAInventorySegment[];
|
|
226
|
-
declare function gaUnitLabels(area: GAAreaObject): string[];
|
|
227
|
-
/** Append-only capacity semantics for an already joined GA surface. */
|
|
228
|
-
declare function growJoinedGAInventory(area: GAAreaObject, nextCapacity: number): GAInventorySegment[] | undefined;
|
|
229
|
-
declare function gaAreasOf(doc: ChartDoc): GAAreaObject[];
|
|
230
|
-
declare function isGaUnitLabel(label: string): boolean;
|
|
231
|
-
|
|
232
|
-
/**
|
|
233
|
-
* Real-world scale primitives — the ONE place the app fixes chart-unit ↔ metre ↔
|
|
234
|
-
* renderer-world scale, and the section 3D-geometry resolver that rides on it.
|
|
235
|
-
*
|
|
236
|
-
* Everything that converts between chart units, metres, and renderer "world"
|
|
237
|
-
* units derives from {@link METRES_PER_CHART_UNIT}. Renderer world units and
|
|
238
|
-
* chart units are 1:1, so metres → world is exactly {@link CHART_UNITS_PER_METRE}
|
|
239
|
-
* (the single m→world conversion constant Phase B consumers use).
|
|
240
|
-
*
|
|
241
|
-
* This is a leaf module (types only) so both `layout.ts` and `sections.ts` can
|
|
242
|
-
* import it without the two forming an import cycle.
|
|
243
|
-
*/
|
|
244
|
-
|
|
245
|
-
/**
|
|
246
|
-
* Metres of front-edge height one elevation tier represents. Chosen (not guessed)
|
|
247
|
-
* so `elevation × TIER_HEIGHT_M` metres, scaled back through
|
|
248
|
-
* {@link CHART_UNITS_PER_METRE}, equals the legacy `elevation × LIFT_PER_STEP`
|
|
249
|
-
* world lift exactly — an un-authored chart stays pixel-identical. ≈ 1.329 m/tier.
|
|
250
|
-
*/
|
|
251
|
-
declare const TIER_HEIGHT_M: number;
|
|
252
|
-
/**
|
|
253
|
-
* Resolve a section's real 3D geometry, applying the legacy-elevation fallback so
|
|
254
|
-
* old charts and new charts share ONE code path. Every consumer (iso lift, 360°
|
|
255
|
-
* eye-height, author lint, any 2D depth cue) must call this and never read the raw
|
|
256
|
-
* {@link SectionObject.height}/{@link SectionObject.rake} fields — that is what
|
|
257
|
-
* keeps un-authored charts rendering identically to today.
|
|
258
|
-
*
|
|
259
|
-
* - `height`: authored absolute metres if present, else owning-floor base height
|
|
260
|
-
* plus `elevation × TIER_HEIGHT_M`.
|
|
261
|
-
* - `rake`: authored degrees if present, else 0 (flat).
|
|
262
|
-
*
|
|
263
|
-
* Malformed values are bounded here as a last defensive barrier. Structural
|
|
264
|
-
* validation still reports them so drafts can be repaired instead of silently
|
|
265
|
-
* persisting a renderer-only interpretation.
|
|
266
|
-
*
|
|
267
|
-
* Pure — no document mutation, no side effects.
|
|
268
|
-
*/
|
|
269
|
-
interface SectionGeometryContext {
|
|
270
|
-
/** Absolute physical height of the owning floor above the venue datum. */
|
|
271
|
-
floorBaseHeightM?: number;
|
|
272
|
-
}
|
|
273
|
-
declare function sectionGeometry(section: Pick<SectionObject, 'elevation' | 'height' | 'rake'>, context?: SectionGeometryContext): {
|
|
274
|
-
height: number;
|
|
275
|
-
rake: number;
|
|
276
|
-
};
|
|
277
|
-
|
|
278
|
-
/**
|
|
279
|
-
* Section membership + hide/show resolution (Batch 3.3).
|
|
280
|
-
*
|
|
281
|
-
* A `SectionObject` is a polygon drawn over existing seat objects; an object
|
|
282
|
-
* "belongs" to a section when its visual centre (`objectCenter`) falls inside
|
|
283
|
-
* the section outline, first section in doc order winning. This is the same
|
|
284
|
-
* spatial notion `objectCenter`'s doc-comment describes, resolved once here so
|
|
285
|
-
* BOTH the event manager (Sections tab counts) and the buyer picker (omit
|
|
286
|
-
* hidden seats) agree on which seats live in which section.
|
|
287
|
-
*
|
|
288
|
-
* Hiding is per-EVENT (the EventDO holds the hidden id set), not a chart edit —
|
|
289
|
-
* so a republish of the chart never disturbs it. A hidden id may be a section
|
|
290
|
-
* id, a zone id (hides every section in the zone), or `UNGROUPED_ID` (the
|
|
291
|
-
* catch-all bucket of seat objects that sit in no section).
|
|
292
|
-
*/
|
|
293
|
-
|
|
294
|
-
/** Synthetic section id for seat objects that fall in no drawn section. */
|
|
295
|
-
declare const UNGROUPED_ID = "__ungrouped__";
|
|
296
|
-
/**
|
|
297
|
-
* A per section/zone availability window (Batch 3.4). Wire-compatible with the
|
|
298
|
-
* EventDO's own `AvailabilityRule`. Absence of a rule for an id = on sale.
|
|
299
|
-
* 'hidden' — manual: hidden until the organizer reveals it (3.3).
|
|
300
|
-
* 'timed' — hidden until `revealAt` (epoch ms), then auto-reveals.
|
|
301
|
-
* 'threshold' — auto-reveals once the on-sale inventory is `thresholdPct`% sold.
|
|
302
|
-
* 'closed' — visible to buyers but not purchasable (rendered flat grey);
|
|
303
|
-
* unlike 'hidden', the seats stay on the map, just off sale.
|
|
304
|
-
* `labels` are the seat labels the id governs, so a threshold's denominator can
|
|
305
|
-
* exclude still-hidden seats.
|
|
306
|
-
*/
|
|
307
|
-
interface AvailabilityRule {
|
|
308
|
-
mode: 'hidden' | 'timed' | 'threshold' | 'closed';
|
|
309
|
-
revealAt?: number;
|
|
310
|
-
thresholdPct?: number;
|
|
311
|
-
labels?: string[];
|
|
312
|
-
}
|
|
313
|
-
interface SectionNode {
|
|
314
|
-
/** Section id (a `SectionObject.id`, or `UNGROUPED_ID`). */
|
|
315
|
-
id: string;
|
|
316
|
-
label: string;
|
|
317
|
-
/** Zone id this section points at (`SectionObject.zone`), if any. */
|
|
318
|
-
zone?: string;
|
|
319
|
-
/** Total seats across the member objects. */
|
|
320
|
-
seatCount: number;
|
|
321
|
-
/** Ids of the seat-bearing objects that belong to this section. */
|
|
322
|
-
objectIds: string[];
|
|
323
|
-
/** Seat labels across the member objects (for availability-rule denominators). */
|
|
324
|
-
seatLabels: string[];
|
|
325
|
-
}
|
|
326
|
-
/**
|
|
327
|
-
* Resolve section membership for a chart. Returns one node per drawn section
|
|
328
|
-
* (doc order), a synthetic "Ungrouped" node for loose seat objects (null when
|
|
329
|
-
* every seat sits in a section), and the object→section id map.
|
|
330
|
-
*/
|
|
331
|
-
declare function computeSections(doc: ChartDoc): {
|
|
332
|
-
sections: SectionNode[];
|
|
333
|
-
ungrouped: SectionNode | null;
|
|
334
|
-
/** seat-object id → owning section id (or `UNGROUPED_ID`). */
|
|
335
|
-
objectToSection: Map<string, string>;
|
|
336
|
-
};
|
|
337
|
-
/** Is a drawn section hidden under `hidden` — directly, or via its zone? */
|
|
338
|
-
declare function isSectionHidden(s: SectionObject, hidden: ReadonlySet<string>): boolean;
|
|
339
|
-
/**
|
|
340
|
-
* The set of seat-object ids to omit from the buyer view for a given hidden id
|
|
341
|
-
* set. An object is hidden when its owning section is hidden (directly or via
|
|
342
|
-
* zone), or it is ungrouped and the catch-all bucket is hidden.
|
|
343
|
-
*/
|
|
344
|
-
declare function hiddenObjectIds(doc: ChartDoc, hidden: ReadonlySet<string>): Set<string>;
|
|
345
|
-
/**
|
|
346
|
-
* A copy of the doc with hidden sections' member objects removed, plus the
|
|
347
|
-
* hidden section overlays themselves (so no empty block renders). Returns the
|
|
348
|
-
* SAME reference when nothing is hidden — callers can skip a re-render on `===`.
|
|
349
|
-
*/
|
|
350
|
-
declare function applyHidden(doc: ChartDoc, hidden: ReadonlySet<string>): ChartDoc;
|
|
351
|
-
|
|
352
|
-
declare const RENDERED_QUALITY_REPORT_VERSION = 3;
|
|
353
|
-
type RenderedEvidenceState = 'overview' | 'interaction';
|
|
354
|
-
type RenderedQualityFindingCode = 'bookable-label-undersized' | 'bookable-label-contrast-low' | 'bookable-label-collision' | 'hierarchy-label-undersized' | 'hierarchy-label-contrast-low' | 'hierarchy-label-outside-section' | 'hierarchy-label-collision' | 'hierarchy-bookable-collision' | 'overview-section-category-paint' | 'overview-category-detail-visible' | 'overview-row-hints-visible' | 'overview-availability-clutter' | 'overview-ga-detail-visible' | 'free-text-undersized' | 'free-text-contrast-low' | 'free-text-collision' | 'free-text-bookable-collision' | 'free-text-hierarchy-collision' | 'ga-contrast-low' | 'detail-rung-missing' | 'detail-inventory-not-visible' | 'pointer-target-undersized' | 'pointer-target-inactive' | 'selected-state-missing' | 'selected-state-contrast-low' | 'held-state-missing' | 'booked-state-missing' | 'status-state-indistinct' | 'section-focus-missing' | 'category-filter-missing' | 'category-filter-ineffective' | 'target-category-not-visible' | 'target-category-filter-mismatch';
|
|
355
|
-
interface RenderedQualitySample {
|
|
356
|
-
primaryId: string;
|
|
357
|
-
primaryLabel: string;
|
|
358
|
-
secondaryId?: string;
|
|
359
|
-
secondaryLabel?: string;
|
|
360
|
-
measured?: number;
|
|
361
|
-
minimum?: number;
|
|
362
|
-
}
|
|
363
|
-
interface RenderedQualityFinding {
|
|
364
|
-
code: RenderedQualityFindingCode;
|
|
365
|
-
message: string;
|
|
366
|
-
count: number;
|
|
367
|
-
samples: RenderedQualitySample[];
|
|
368
|
-
}
|
|
369
|
-
interface RenderedQualityReport {
|
|
370
|
-
version: typeof RENDERED_QUALITY_REPORT_VERSION;
|
|
371
|
-
passed: boolean;
|
|
372
|
-
state: RenderedEvidenceState;
|
|
373
|
-
/** Server-selected category exercised by a category-specific detail scene. */
|
|
374
|
-
targetCategoryKey: string | null;
|
|
375
|
-
/** Exact overview checks discharged by this browser-rendered report. */
|
|
376
|
-
resolvedRules: string[];
|
|
377
|
-
viewport: {
|
|
378
|
-
width: number;
|
|
379
|
-
height: number;
|
|
380
|
-
};
|
|
381
|
-
canvasBackground: string;
|
|
382
|
-
effectiveScale: number;
|
|
383
|
-
rung: RendererQualityEvidence['rung'];
|
|
384
|
-
inventory: {
|
|
385
|
-
totalBookableUnits: number;
|
|
386
|
-
totalLabelledBookableUnits: number;
|
|
387
|
-
visibleBookableLabels: number;
|
|
388
|
-
hiddenBookableLabels: number;
|
|
389
|
-
visibleHierarchyLabels: number;
|
|
390
|
-
visibleFreeTextLabels: number;
|
|
391
|
-
visibleGAAreas: number;
|
|
392
|
-
};
|
|
393
|
-
overviewStyle?: RendererQualityEvidence['overviewStyle'];
|
|
394
|
-
/**
|
|
395
|
-
* Coordinate-free identity evidence from the exact buyer scene. The Worker
|
|
396
|
-
* uses this to compare persisted reference semantics with what Chromium
|
|
397
|
-
* actually painted, without exposing screen boxes or accepting geometry.
|
|
398
|
-
*/
|
|
399
|
-
composition: {
|
|
400
|
-
hierarchy: Array<{
|
|
401
|
-
id: string;
|
|
402
|
-
kind: 'section' | 'zone';
|
|
403
|
-
label: string;
|
|
404
|
-
visible: boolean;
|
|
405
|
-
}>;
|
|
406
|
-
labelledObjects: Array<{
|
|
407
|
-
objectId: string;
|
|
408
|
-
kind: RenderedFreeTextEvidence['kind'];
|
|
409
|
-
text: string;
|
|
410
|
-
visible: boolean;
|
|
411
|
-
}>;
|
|
412
|
-
gaAreas: Array<{
|
|
413
|
-
areaId: string;
|
|
414
|
-
label: string;
|
|
415
|
-
categoryKey: string;
|
|
416
|
-
sectionId?: string;
|
|
417
|
-
visible: boolean;
|
|
418
|
-
}>;
|
|
419
|
-
bookableSectionIds: string[];
|
|
420
|
-
categoryKeys: string[];
|
|
421
|
-
/** Categories whose non-dimmed bookable paint is visible in this scene. */
|
|
422
|
-
activeCategoryKeys: string[];
|
|
423
|
-
};
|
|
424
|
-
metrics: {
|
|
425
|
-
minimumRenderedBookableLabelPx: number | null;
|
|
426
|
-
minimumBookableLabelContrast: number | null;
|
|
427
|
-
minimumRenderedHierarchyLabelPx: number | null;
|
|
428
|
-
minimumHierarchyLabelContrast: number | null;
|
|
429
|
-
minimumRenderedFreeTextPx: number | null;
|
|
430
|
-
minimumFreeTextContrast: number | null;
|
|
431
|
-
minimumGAContrast: number | null;
|
|
432
|
-
minimumEffectivePointerTargetPx: number | null;
|
|
433
|
-
selectedRingContrast: number | null;
|
|
434
|
-
};
|
|
435
|
-
interaction: {
|
|
436
|
-
applicable: {
|
|
437
|
-
detail: boolean;
|
|
438
|
-
pointer: boolean;
|
|
439
|
-
held: boolean;
|
|
440
|
-
booked: boolean;
|
|
441
|
-
sectionFocus: boolean;
|
|
442
|
-
categoryFilter: boolean;
|
|
443
|
-
};
|
|
444
|
-
selectedUnits: number;
|
|
445
|
-
heldUnits: number;
|
|
446
|
-
bookedUnits: number;
|
|
447
|
-
activePointerTargets: number;
|
|
448
|
-
focusedSectionId: string | null;
|
|
449
|
-
focusBackdropVisible: boolean;
|
|
450
|
-
categoryFilterKeys: string[] | null;
|
|
451
|
-
};
|
|
452
|
-
findings: RenderedQualityFinding[];
|
|
453
|
-
}
|
|
454
|
-
/**
|
|
455
|
-
* Inspect what the buyer renderer actually decided to paint at one exact
|
|
456
|
-
* viewport. This is deliberately downstream of ChartDoc validation: screen
|
|
457
|
-
* size, LOD visibility, fitted hierarchy text, transient paint, and label
|
|
458
|
-
* collisions cannot be proven from stored geometry alone.
|
|
459
|
-
*/
|
|
460
|
-
declare function inspectRenderedQualityEvidence(evidence: RendererQualityEvidence, state?: RenderedEvidenceState, targetCategoryKey?: string | null): RenderedQualityReport;
|
|
1
|
+
import { C as ChartDoc, P as Point, A as AccessibilityType, l as CategoryTier, f as SeatCommercialAttributes } from './types-COfJorq_.js';
|
|
2
|
+
export { t as ACCESSIBILITY_RING_COLOR, u as ACCESSIBILITY_TYPES, v as AccessibilityMeta, w as AuthoringObjectState, B as BoothObject, x as Category, y as ChartLayoutConstraint, c as ChartObject, m as ChartReferenceImage, z as ChartTheme, r as CubicPath, D as DecorImageObject, F as Floor, G as GAAreaObject, k as GAInventorySegment, E as LABEL_STYLE_MAX_SIZE, H as LABEL_STYLE_MIN_SIZE, I as LabelPresentation, L as LabelStyle, O as ObjectEditorState, J as Physical3dEvidence, K as RadialClearanceLayoutConstraint, e as RectTableSeatCounts, b as RectTableSide, M as ReferenceAccessibilitySource, N as ReferenceCalibration, Q as ReferenceCategorySource, U as ReferenceDerivedScale, V as ReferenceInventoryExclusionSource, W as ReferenceInventorySource, X as ReferenceScanProposal, Y as ReferenceScanRowProposal, Z as ReferenceScanSectionProposal, _ as ReferenceSeatSeed, $ as ReferenceSectionTraceBatchInput, a0 as ReferenceSectionTraceBatchProposal, a1 as ReferenceSectionTraceInput, a2 as ReferenceSectionTraceProposal, g as ResolvedSeatConfidenceEvidence, R as RowObject, a3 as SEAT_COMMERCIAL_MARKS, a4 as SURROUNDINGS_SHAPE_ROLES, a5 as SeatCommercialMark, a6 as SeatCommercialMeta, a7 as SeatConfidenceCoverage, a8 as SeatConfidenceEvidence, a9 as SeatConfidenceModelLevel, aa as SeatConfidenceModeledTarget, ab as SeatConfidenceRealityLevel, S as SeatOverride, h as SeatViewCoverage, a as SeatViewMetadata, d as SectionObject, i as SectionOutlinePath, j as SectionPathSegment, ac as SelectionLayer, n as ShapeLineCap, o as ShapeLineEnding, p as ShapeLineJoin, q as ShapeObject, T as TableObject, ad as TextAlignment, ae as TextBackground, s as TextObject, af as TicketTierApplicability, ag as TicketTierEvidence, ah as TicketTierRestriction, ai as ZoneDef, aj as accessibilityMeta, ak as accessibilityRingColor, al as layerOf, am as seatCommercialMeta } from './types-COfJorq_.js';
|
|
3
|
+
export { E as ExpandChartOptions, R as RowSeatSlot, T as TableSeatSlot, a as allObjects, c as chartBounds, e as expandBooth, b as expandChart, d as expandRow, f as expandRowSlots, g as expandTable, h as expandTableSlots, i as floorObjects, j as floorOverviewTranslations, k as floorsOf, l as layoutFloorOverview, o as objectCenter, m as owningSectionForObject, p as pointInPolygon, n as pointInPolygonWithHoles, q as polygonLabelPoint, r as rowInventoryCount, s as rowSeatPositions, t as stackFloors, u as tableInventoryCount, v as tableSeatCountsBySide, w as translateObject } from './layout-B5UYbwnv.js';
|
|
4
|
+
import { c as TicketSelectionIssue } from './ticketRestrictions-ChHJwvTq.js';
|
|
5
|
+
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-ChHJwvTq.js';
|
|
6
|
+
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-mLOZrGrI.js';
|
|
7
|
+
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-DbZM034G.js';
|
|
8
|
+
import { I as ISeatmapRenderer, b as RendererOptions, S as SeatStatus, E as ExpandedSeat, c as RendererViewMode, d as RendererMinimapSnapshot, L as LodRung, R as RendererQualityEvidence, e as RendererCallbacks } from './renderer-IBi9YKWR.js';
|
|
9
|
+
export { C as CHART_STORAGE_KEY, f as RenderedBookableLabelEvidence, a as RenderedFreeTextEvidence, g as RenderedGAAreaEvidence, h as RenderedHierarchyLabelEvidence, i as RenderedLabelHiddenReason, j as RenderedRowLabelEvidence, k as RendererMinimapSeat, l as RendererMinimapSection } from './renderer-IBi9YKWR.js';
|
|
10
|
+
import './segmentedRowModel-BPTnJ7Tz.js';
|
|
461
11
|
|
|
462
12
|
declare class SeatmapRenderer implements ISeatmapRenderer {
|
|
463
13
|
private container;
|
|
@@ -635,35 +185,18 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
|
|
|
635
185
|
private resizeObs;
|
|
636
186
|
/** Coalesces bursty view-change sources (pointermove, wheel) into ≤1 callback/frame. */
|
|
637
187
|
private viewChangeRaf;
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
/** Maximum displacement from gesture start — suppress taps only after a real pan/pinch. */
|
|
644
|
-
private moved;
|
|
645
|
-
/**
|
|
646
|
-
* Ghost-click guard. Konva binds `_pointerup` to mouseup, touchend AND
|
|
647
|
-
* pointerup, so `on('click tap')` is two handlers for one finger tap unless
|
|
648
|
-
* the browser's synthesized compatibility click is suppressed. Konva only
|
|
649
|
-
* suppresses it when the touch lands on a LISTENING SHAPE (Stage.js returns
|
|
650
|
-
* early before its preventDefault() when `!shape || !shape.isListening()`),
|
|
651
|
-
* so a near-miss rescued by nearestSeatToScreen used to fire `tap` (select)
|
|
652
|
-
* then `click` (deselect) 1-3ms apart and net to nothing. With
|
|
653
|
-
* SEAT_TAP_SLOP_PX=14 against a ~12px seat radius, that broken annulus is
|
|
654
|
-
* ~3.7x the area of the seat itself — i.e. most successful mobile taps.
|
|
655
|
-
* `touch-action: none` does NOT suppress compatibility mouse events.
|
|
656
|
-
*/
|
|
657
|
-
private lastTapAt;
|
|
658
|
-
/**
|
|
659
|
-
* True when this is the browser's synthesized compatibility click following a
|
|
660
|
-
* finger tap we already handled. Discriminates on `e.type` deliberately —
|
|
661
|
-
* `PointerEvent extends MouseEvent`, so an `instanceof MouseEvent` test
|
|
662
|
-
* matches genuine pointer taps too. One shared timestamp across the layer and
|
|
663
|
-
* stage handlers: a tap consumed at the layer must also suppress the ghost at
|
|
664
|
-
* the stage, and only `click` is ever rejected, so bubbling stays intact.
|
|
188
|
+
/**
|
|
189
|
+
* Pan/pinch state machine (`render/interaction/pointer`). Raw pointer events
|
|
190
|
+
* on the container, not Konva stage dragging — its touch pipeline proved
|
|
191
|
+
* unreliable for multi-touch on real devices. Also owns the ghost-click
|
|
192
|
+
* timestamp shared by the layer and stage tap handlers.
|
|
665
193
|
*/
|
|
194
|
+
private gestures;
|
|
195
|
+
/** Displacement of the current gesture — a tap must stay under the slop. */
|
|
196
|
+
private get moved();
|
|
666
197
|
private isGhostClick;
|
|
198
|
+
/** Behavioural surface the gesture machine calls back into. */
|
|
199
|
+
private get pointerHost();
|
|
667
200
|
/**
|
|
668
201
|
* Manage-mode rubber-band marquee (option-gated). `start`/`cur` are WORLD-space
|
|
669
202
|
* points (overlayLayer rides the stage transform); `rect` is the on-canvas
|
|
@@ -806,6 +339,8 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
|
|
|
806
339
|
setViewMode(mode: RendererViewMode): void;
|
|
807
340
|
/** Current projection — reflects the tween target, not the mid-tween isoT. */
|
|
808
341
|
getViewMode(): RendererViewMode;
|
|
342
|
+
/** Live ISO projection state handed to the `render/projection` free functions. */
|
|
343
|
+
private get isoState();
|
|
809
344
|
/** Iso angle (rad) + y-squash for the current isoT. */
|
|
810
345
|
private isoParams;
|
|
811
346
|
/** Effective vertical scale = stage scale × iso squash — legibility math uses this. */
|
|
@@ -839,6 +374,8 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
|
|
|
839
374
|
private resetLayerTransforms;
|
|
840
375
|
/** Restore section-owned containers before applying another projection. */
|
|
841
376
|
private resetSectionProjection;
|
|
377
|
+
/** Node/cache context the shared seat-anchor pass reads and updates. */
|
|
378
|
+
private get seatAnchorContext();
|
|
842
379
|
/** Move native seat/booth hit shapes to or from their exact pinhole anchors. */
|
|
843
380
|
private applyExactSeatAnchors;
|
|
844
381
|
/**
|
|
@@ -1020,12 +557,12 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
|
|
|
1020
557
|
* single drawImage per frame, and it rides the same layer cache — effectively
|
|
1021
558
|
* zero per-frame cost. Never listens, so it can't intercept a seat click.
|
|
1022
559
|
*/
|
|
560
|
+
/** Node/registry surface the `render/objectDrawing` factories draw into. */
|
|
561
|
+
private get objectDrawContext();
|
|
1023
562
|
private renderDecorImage;
|
|
1024
563
|
private renderTable;
|
|
1025
564
|
private renderText;
|
|
1026
565
|
private renderShape;
|
|
1027
|
-
/** Prominent stage caption: uppercase, letter-spaced, larger, softly dimmed. */
|
|
1028
|
-
private addStageLabel;
|
|
1029
566
|
private renderGA;
|
|
1030
567
|
/**
|
|
1031
568
|
* A section renders in three coordinated layers driven by the LOD melt:
|
|
@@ -1037,62 +574,17 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
|
|
|
1037
574
|
*/
|
|
1038
575
|
private renderSection;
|
|
1039
576
|
private refreshSectionHeat;
|
|
1040
|
-
/** Recompute a section's availability shading + retained availability text. */
|
|
1041
577
|
private refreshSectionFill;
|
|
1042
|
-
/** True when a section/zone is currently in the `closed` event-state. */
|
|
1043
578
|
private isSectionClosed;
|
|
1044
|
-
/** Resolve the four-bucket overview availability state for a section (OV-69).
|
|
1045
|
-
* `closed` (operator) outranks live availability; the availability buckets
|
|
1046
|
-
* only apply to seated sections (GA-only shells have no seat capacity here). */
|
|
1047
579
|
private sectionAvailabilityState;
|
|
1048
|
-
/** Overview shells stay neutral except for the bounded availability shading
|
|
1049
|
-
* (nearly-gone / sold-out) and the operator `closed` slab — never category
|
|
1050
|
-
* or price paint, which is deferred to section focus/seat detail. */
|
|
1051
580
|
private sectionBlockFill;
|
|
581
|
+
private get sectionLodPaintContext();
|
|
1052
582
|
/**
|
|
1053
583
|
* Zone rung: one giant screen-constant label per zone (+ optional "FROM $n"),
|
|
1054
584
|
* shown at the farthest zoom in place of per-section detail. Skipped entirely
|
|
1055
585
|
* when the doc declares no zones — sections then stay the far rung (graceful).
|
|
1056
586
|
*/
|
|
1057
587
|
private renderZones;
|
|
1058
|
-
/**
|
|
1059
|
-
* THE MELT — a continuous, scale-driven cross-fade across the three rungs:
|
|
1060
|
-
* seats ⇄ section blocks ⇄ zone blocks.
|
|
1061
|
-
* `blockT` ramps 0→1 as scale falls through [SECTION_PROMINENT, CACHE_THRESHOLD]
|
|
1062
|
-
* so the solid fill is fully present exactly as seats become the cached bitmap
|
|
1063
|
-
* and fade out; `zoneT` ramps 0→1 across [ZONE_PROMINENT, SECTION_PROMINENT] so
|
|
1064
|
-
* per-section detail hands off to giant zone labels. Reduced-motion hard-swaps.
|
|
1065
|
-
* Section/zone labels are scale-compensated to hold a roughly constant screen size.
|
|
1066
|
-
*/
|
|
1067
|
-
private applySectionLod;
|
|
1068
|
-
/** One semantic section gets one overview label, even across split contours. */
|
|
1069
|
-
private dedupeLogicalSectionLabels;
|
|
1070
|
-
/**
|
|
1071
|
-
* Keep transitional zone pills from covering section names, and keep section
|
|
1072
|
-
* names off each other.
|
|
1073
|
-
*
|
|
1074
|
-
* This used to assume section labels "do not collide by construction",
|
|
1075
|
-
* because each is proven to fit inside its own shell. That holds only while
|
|
1076
|
-
* shells are disjoint. Hand-traced and imported plans routinely produce
|
|
1077
|
-
* shells that touch or overlap slightly along a shared edge, and a label
|
|
1078
|
-
* fitted into one can then land under its neighbour's — which is exactly the
|
|
1079
|
-
* unreadable smear a 36-section arena showed. Section labels now block each
|
|
1080
|
-
* other too, largest shell first so the big stands keep their names.
|
|
1081
|
-
*/
|
|
1082
|
-
private decollideRungLabels;
|
|
1083
|
-
/** Set a centred label's world fontSize (for a target screen px) and re-anchor it. */
|
|
1084
|
-
private sizeLabel;
|
|
1085
|
-
/** Fit one centred section name, rotating narrow shells like the target chart. */
|
|
1086
|
-
private fitSectionRungLabels;
|
|
1087
|
-
/**
|
|
1088
|
-
* Screen-constant chrome must still respect the screen it is constant on:
|
|
1089
|
-
* an 18px zone cap sized for a 900px designer canvas eats a 360px phone map
|
|
1090
|
-
* (owner report, 2026-08-14). Scales the fixed-px chrome down to 66% on the
|
|
1091
|
-
* smallest containers; never up.
|
|
1092
|
-
*/
|
|
1093
|
-
private uiScale;
|
|
1094
|
-
/** Size one screen-constant zone name/price pill around its shared anchor. */
|
|
1095
|
-
private sizeZonePill;
|
|
1096
588
|
/**
|
|
1097
589
|
* Map a container-relative screen point back to world coords. Inverts the
|
|
1098
590
|
* stage (scale/pos) and, in iso view, the iso affine — so screen-space taps
|
|
@@ -1106,7 +598,6 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
|
|
|
1106
598
|
}): string | null;
|
|
1107
599
|
/** Seat ids belonging to a section (Slice 5 section-summary card). */
|
|
1108
600
|
sectionMembers(id: string): string[];
|
|
1109
|
-
private addCentredLabel;
|
|
1110
601
|
private isSelectable;
|
|
1111
602
|
private toggleSeat;
|
|
1112
603
|
/**
|
|
@@ -1159,10 +650,6 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
|
|
|
1159
650
|
* so within-floor elevation offsets don't affect the result. Null if none.
|
|
1160
651
|
*/
|
|
1161
652
|
private deckFloorAt;
|
|
1162
|
-
private toLocal;
|
|
1163
|
-
private onPointerDown;
|
|
1164
|
-
private onPointerMove;
|
|
1165
|
-
private onPointerEnd;
|
|
1166
653
|
/**
|
|
1167
654
|
* Min is chart-relative (never lose the room); max is absolute so seats
|
|
1168
655
|
* reach a readable size on any chart, however large the venue.
|
|
@@ -1193,6 +680,8 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
|
|
|
1193
680
|
private cancelGlide;
|
|
1194
681
|
/** Current LOD rung derived from effective zoom — drives the ZONES/SECTIONS/SEATS pill. */
|
|
1195
682
|
getRung(): LodRung;
|
|
683
|
+
/** Explicit view of this renderer as the evidence pass's declared surface. */
|
|
684
|
+
private get renderedQualityContext();
|
|
1196
685
|
getRenderedQualityEvidence(): RendererQualityEvidence;
|
|
1197
686
|
/** Jump the camera to a rung's zoom band (glided). */
|
|
1198
687
|
setRung(rung: LodRung): void;
|
|
@@ -1208,6 +697,8 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
|
|
|
1208
697
|
private afterViewChange;
|
|
1209
698
|
/** rAF-coalesced `onViewChange` — at most one host callback per animation frame. */
|
|
1210
699
|
private scheduleViewChange;
|
|
700
|
+
/** Keep focal labels centred while their world font size tracks camera scale. */
|
|
701
|
+
private sizeLabel;
|
|
1211
702
|
private updateLOD;
|
|
1212
703
|
/** Rebuild the seat-layer bitmap synchronously (no paint). Shared by the
|
|
1213
704
|
* debounced cacheSeatLayer() and the synchronous forceDraw() catch-up. */
|
|
@@ -1260,46 +751,30 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
|
|
|
1260
751
|
/** Geometric association only: importer data remains unchanged. */
|
|
1261
752
|
private nodeBelongsToFocusedSection;
|
|
1262
753
|
/** OV-45(a): resolve authored row-letter labels for the buyer/preview map, in
|
|
1263
|
-
* world space
|
|
1264
|
-
* preset, a free-drag `position` that wins over the preset, rotation, and
|
|
1265
|
-
* labelStyle colour/size fed through the same auto-contrast guard). Segmented
|
|
1266
|
-
* rows keep their own logical-label handling and are resolved by their owner. */
|
|
754
|
+
* world space (see `render/rowLabelPlan`). */
|
|
1267
755
|
private buildRowLabelPlan;
|
|
1268
756
|
/** Axis-aligned world bounds of a centred, potentially rotated row label. */
|
|
1269
757
|
private rowLabelBox;
|
|
1270
|
-
/**
|
|
1271
|
-
* Keep an automatic start/end label out of seat markers and already-painted
|
|
1272
|
-
* text. The authored point is never altered. Candidates are deliberately
|
|
1273
|
-
* bounded and deterministic: the closest clear offset wins; if a chart is so
|
|
1274
|
-
* dense that none is clear, the least-colliding candidate wins so the required
|
|
1275
|
-
* row label remains present rather than being silently dropped.
|
|
1276
|
-
*/
|
|
758
|
+
/** Keep an automatic start/end label out of seats and already-painted text. */
|
|
1277
759
|
private resolveAutomaticRowLabelPosition;
|
|
1278
760
|
/** Row labels never carry status; the buyer just dims them under the same
|
|
1279
761
|
* category/price filters that dim their seats. */
|
|
1280
762
|
private objectFilteredOut;
|
|
1281
763
|
private updateLabels;
|
|
764
|
+
private get viewportLabelContext();
|
|
1282
765
|
private handleResize;
|
|
1283
766
|
private startFpsLoop;
|
|
1284
767
|
}
|
|
1285
768
|
declare function createRenderer(container: HTMLDivElement, opts?: RendererOptions): ISeatmapRenderer;
|
|
1286
769
|
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
message: string;
|
|
1296
|
-
}
|
|
1297
|
-
interface NotForSaleSelectionIssue {
|
|
1298
|
-
code: 'not_for_sale';
|
|
1299
|
-
labels: string[];
|
|
1300
|
-
message: string;
|
|
1301
|
-
}
|
|
1302
|
-
type TicketSelectionIssue = CompanionSelectionIssue | TicketOptionApplicabilityIssue | NotForSaleSelectionIssue;
|
|
770
|
+
/**
|
|
771
|
+
* Public host contracts for the framework-agnostic buyer picker.
|
|
772
|
+
*
|
|
773
|
+
* Kept separate from `PickerController` so SDK and application consumers can
|
|
774
|
+
* find the integration surface without wading through controller state and
|
|
775
|
+
* transport orchestration. `PickerController` re-exports these names for
|
|
776
|
+
* source compatibility.
|
|
777
|
+
*/
|
|
1303
778
|
|
|
1304
779
|
interface PickerSeat {
|
|
1305
780
|
id: string;
|
|
@@ -1680,6 +1155,7 @@ interface PickerMapTheme {
|
|
|
1680
1155
|
/** Selection / hover ring. */
|
|
1681
1156
|
selectionColor?: string;
|
|
1682
1157
|
}
|
|
1158
|
+
|
|
1683
1159
|
declare class PickerController {
|
|
1684
1160
|
private readonly opts;
|
|
1685
1161
|
private readonly api;
|
|
@@ -2120,11 +1596,8 @@ declare class PickerController {
|
|
|
2120
1596
|
private connect;
|
|
2121
1597
|
/**
|
|
2122
1598
|
* Backoff for the PLAIN-socket fallback (a transport with no v1 client of its
|
|
2123
|
-
* own). Full jitter, for the same reason BuyerRealtimeClient uses it
|
|
2124
|
-
*
|
|
2125
|
-
* socket back in the same millisecond, and an on-sale crowd reconnecting in
|
|
2126
|
-
* lockstep turns one blip into a thundering herd. The ceiling still doubles,
|
|
2127
|
-
* so a sustained outage still backs off.
|
|
1599
|
+
* own). Full jitter, for the same reason BuyerRealtimeClient uses it — see
|
|
1600
|
+
* `core/backoff`, which now owns that rationale and the schedule.
|
|
2128
1601
|
*/
|
|
2129
1602
|
private scheduleReconnect;
|
|
2130
1603
|
}
|
|
@@ -2212,6 +1685,14 @@ declare function setStringOverrides(next: Dict): void;
|
|
|
2212
1685
|
declare function t(key: string, vars?: Record<string, string | number>): string;
|
|
2213
1686
|
/** "1 seat" / "3 seats" without hand-rolled concatenation. */
|
|
2214
1687
|
declare function tCount(key: string, count: number, vars?: Record<string, string | number>): string;
|
|
1688
|
+
/**
|
|
1689
|
+
* Kept for the SDK surface that imports dates from here. It is a thin pass to
|
|
1690
|
+
* `core/datetime`, which owns every date shape in the app and caches its
|
|
1691
|
+
* formatters per (locale, shape) — the defaults below are the same ones it
|
|
1692
|
+
* uses, so the two were already interchangeable and are now literally the same
|
|
1693
|
+
* code. `active` is passed explicitly so this cannot drift from `t()` even if
|
|
1694
|
+
* something calls `setDateTimeLocale` on its own.
|
|
1695
|
+
*/
|
|
2215
1696
|
declare function formatDate(value: number | Date, opts?: Intl.DateTimeFormatOptions): string;
|
|
2216
1697
|
|
|
2217
1698
|
/**
|
|
@@ -2252,12 +1733,22 @@ declare const DEFAULT_CURRENCY = "USD";
|
|
|
2252
1733
|
* express create forms so the two can never offer different lists. */
|
|
2253
1734
|
declare const CURRENCY_CHOICES: string[];
|
|
2254
1735
|
declare function setMoneyLocale(locale: string | undefined): void;
|
|
2255
|
-
|
|
2256
|
-
|
|
2257
|
-
|
|
2258
|
-
|
|
2259
|
-
|
|
2260
|
-
|
|
1736
|
+
interface MoneyFormatOptions {
|
|
1737
|
+
/** BCP 47 locale for this value; takes precedence over `setMoneyLocale`. */
|
|
1738
|
+
locale?: string;
|
|
1739
|
+
/** Leave unset to use the currency's standard exponent (`$45.00`, `¥45`). */
|
|
1740
|
+
minimumFractionDigits?: number;
|
|
1741
|
+
/** Leave unset to use the currency's standard exponent (`$45.00`, `¥45`). */
|
|
1742
|
+
maximumFractionDigits?: number;
|
|
1743
|
+
/**
|
|
1744
|
+
* Rendering for invalid/unknown currency input. Required by buyer SDK
|
|
1745
|
+
* surfaces that must remain usable even when a host supplies a bad code.
|
|
1746
|
+
* Without one, the original `Intl.NumberFormat` error is rethrown.
|
|
1747
|
+
*/
|
|
1748
|
+
fallback?: (amount: number, currency: string) => string;
|
|
1749
|
+
}
|
|
1750
|
+
declare function formatMoney(amount: number, currency: string, options: MoneyFormatOptions): string;
|
|
1751
|
+
declare function formatMoney(amount: number, currency?: string, fractionDigits?: number, locale?: string): string;
|
|
2261
1752
|
/**
|
|
2262
1753
|
* How many decimal places a currency has — 2 for USD/EUR, 0 for JPY/KRW/VND,
|
|
2263
1754
|
* 3 for KWD/BHD/JOD.
|
|
@@ -2281,8 +1772,8 @@ declare function currencyExponent(currency?: string): number;
|
|
|
2281
1772
|
*/
|
|
2282
1773
|
declare function fromMinorUnits(minor: number, currency?: string): number;
|
|
2283
1774
|
/** "$90" / "¥9,000" — a minor-unit integer rendered for display. */
|
|
2284
|
-
declare function formatMinor(minor: number, currency?: string): string;
|
|
1775
|
+
declare function formatMinor(minor: number, currency?: string, locale?: string): string;
|
|
2285
1776
|
/** Bare symbol for input adornments ("€", "$", "₹"). */
|
|
2286
1777
|
declare function currencySymbol(currency?: string): string;
|
|
2287
1778
|
|
|
2288
|
-
export { AccessibilityType,
|
|
1779
|
+
export { AccessibilityType, CURRENCY_CHOICES, CategoryTier, ChartDoc, DEFAULT_CURRENCY, type Dict, ExpandedSeat, type HoldConflict, type HoldInfo, type HoldSelectionRequest, type HoldServerItem, ISeatmapRenderer, type Locale, LodRung, type MoneyFormatOptions, type PanoramaResult, type PickerCallbacks, PickerController, type PickerGAArea, type PickerMapTheme, type PickerOptions, type PickerRealtimeConnection, type PickerRealtimeSink, type PickerRenderPerformanceProfile, type PickerSeat, PickerSelectionError, type PickerStatusChange, type PickerTransport, Point, RendererCallbacks, RendererMinimapSnapshot, RendererOptions, RendererQualityEvidence, RendererViewMode, SUPPORTED_LOCALES, SeatCommercialAttributes, type SeatHoverDetails, SeatStatus, SeatmapRenderer, type SectionCategory, type SectionSummary, type TableSelectionDetails, createRenderer, currencyExponent, currencySymbol, formatDate, formatMinor, formatMoney, fromMinorUnits, generateSeatPanorama, generateSeatThumb, getLocale, loadLocale, resolveLocale, setLocale, setMoneyLocale, setStringOverrides, t, tCount };
|