@seatlayer/core 0.23.0 → 0.25.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
@@ -175,6 +175,16 @@ interface LabelPresentation {
175
175
  style?: 'plain' | 'pill';
176
176
  /** Per-object size/color override for this row's or section's label. */
177
177
  labelStyle?: LabelStyle;
178
+ /**
179
+ * End-position preset for a ROW label — which end(s) of the row show it:
180
+ * - `start` (default/undefined) — the row's numbering-start end (legacy behaviour).
181
+ * - `end` — the far end of the row.
182
+ * - `both` — a label at BOTH ends.
183
+ * - `none` — hidden (kept coherent with `visible: false`).
184
+ * A free-drag `position` overrides the preset (the designer shows a 'custom'
185
+ * state). Ignored for sections (they use `position`/`visible` only).
186
+ */
187
+ positionPreset?: 'start' | 'end' | 'both' | 'none';
178
188
  }
179
189
  /** Brand/venue theming — applied by the renderer in both designer and picker. */
180
190
  interface ChartTheme {
@@ -212,6 +222,12 @@ interface RowObject {
212
222
  label: string;
213
223
  /** Buyer-facing row name. `label` remains the legacy inventory prefix. */
214
224
  displayLabel?: string;
225
+ /**
226
+ * Buyer-facing type word override (seats.io "Displayed type"). Replaces the
227
+ * hardcoded "Row" in the picker tooltip/confirm/cart, e.g. "Table", "Bench",
228
+ * "Aisle". ≤24 chars; absent = the default "Row". Pure presentation.
229
+ */
230
+ displayType?: string;
215
231
  labelPresentation?: LabelPresentation;
216
232
  /** Position of the FIRST seat. */
217
233
  origin: Point;
@@ -263,15 +279,42 @@ interface RowObject {
263
279
  rowIndex: number;
264
280
  segmentIndex: number;
265
281
  };
266
- /** First seat number (default 1). */
282
+ /** First seat number (default 1). Roman/letters read it as a 1-based ordinal
283
+ * (start 1 → I / A). */
267
284
  seatLabelStart?: number;
268
- /** Seat numbering within the row (default ltr, step 1). */
285
+ /** Seat numbering within the row (default decimal, ltr, step 1). */
269
286
  seatNumbering?: {
270
287
  /** ltr / rtl number from an end; `center` numbers outward from the middle
271
288
  * (centre seat lowest — the premium-centre theatre convention). */
272
289
  direction: 'ltr' | 'rtl' | 'center';
273
290
  /** 2 = odd/even numbering (1,3,5… — start at 2 for evens). */
274
291
  step?: 1 | 2;
292
+ /**
293
+ * Label scheme for the seat NUMBER part (the row prefix is separate).
294
+ * Default `decimal`. Composition with `direction`/`step`/`seatLabelStart`:
295
+ * - `decimal` 1,2,3 — honours direction + step + start.
296
+ * - `odd` 1,3,5 — odd numbers from the first odd ≥ start.
297
+ * - `even` 2,4,6 — even numbers from the first even ≥ start.
298
+ * - `updown` 1,3,5,…,6,4,2 — odd-up-even-back; REPLACES direction (uses
299
+ * physical left→right order); start shifts.
300
+ * - `roman` I,II,III — honours direction + step + start (uppercase).
301
+ * - `letters-upper` A,B,C…Z,AA — honours direction + step + start.
302
+ * - `letters-lower` a,b,c…z,aa — honours direction + step + start.
303
+ * Like `step`/`direction` today, the scheme changes the seat's inventory
304
+ * label (its booking identity), by design.
305
+ */
306
+ scheme?: 'decimal' | 'odd' | 'even' | 'updown' | 'roman' | 'letters-upper' | 'letters-lower';
307
+ /** Optional prefix prepended to every seat number, e.g. 'R' → 'R1', 'R2'. */
308
+ prefix?: string;
309
+ /**
310
+ * End-at preset ("useEndAt"): the row's numbering ENDS at this value instead
311
+ * of starting at `seatLabelStart`. The start is derived so the last-numbered
312
+ * seat (highest position rank) lands on `endAt`, respecting the scheme's step
313
+ * (odd/even = 2). When set it WINS over the stored `seatLabelStart` (which is
314
+ * left untouched). For letters it is a 1-based number index (26 → last seat
315
+ * 'Z'); `updown` owns its own sequence and ignores `endAt`.
316
+ */
317
+ endAt?: number;
275
318
  };
276
319
  /**
277
320
  * Per-seat exceptions, keyed by seat index (0-based position in the row).
@@ -292,6 +335,9 @@ interface GAAreaObject {
292
335
  type: 'gaArea';
293
336
  id: string;
294
337
  label: string;
338
+ /** Buyer-facing type word override (seats.io "Displayed type"), ≤24 chars.
339
+ * Absent = the default type word. Pure presentation. */
340
+ displayType?: string;
295
341
  /** Closed polygon, in chart units. */
296
342
  points: Point[];
297
343
  /** Explicit aisles/pillars/cutouts excluded from the sellable GA surface. */
@@ -380,6 +426,9 @@ interface TableObject {
380
426
  id: string;
381
427
  /** e.g. "T1" — seat labels are `${label}-${n}`. */
382
428
  label: string;
429
+ /** Buyer-facing type word override (seats.io "Displayed type"), ≤24 chars.
430
+ * Absent = the default "Row"/"Table" word. Pure presentation. */
431
+ displayType?: string;
383
432
  center: Point;
384
433
  shape: 'round' | 'rect';
385
434
  /** Seats around the perimeter (round) or along the enabled edges (rect). */
@@ -409,6 +458,9 @@ interface BoothObject {
409
458
  type: 'booth';
410
459
  id: string;
411
460
  label: string;
461
+ /** Buyer-facing type word override (seats.io "Displayed type"), ≤24 chars.
462
+ * Absent = the default type word. Pure presentation. */
463
+ displayType?: string;
412
464
  center: Point;
413
465
  width: number;
414
466
  height: number;
@@ -429,6 +481,11 @@ interface SectionObject {
429
481
  label: string;
430
482
  /** Buyer-facing section name; logical/id fields remain stable. */
431
483
  displayLabel?: string;
484
+ /**
485
+ * Buyer-facing entrance/door hint shown in the picker section card
486
+ * ("Entrance X"). ≤40 chars; absent = no entrance line. Pure presentation.
487
+ */
488
+ entrance?: string;
432
489
  labelPresentation?: LabelPresentation;
433
490
  /**
434
491
  * Stable management/inventory identity shared by disconnected visual
@@ -1052,6 +1109,25 @@ declare const CHART_STORAGE_KEY = "seatmap.chart";
1052
1109
  * document into concrete seat coordinates and computes bounding boxes.
1053
1110
  */
1054
1111
 
1112
+ /**
1113
+ * Expand a parametric row into seat positions.
1114
+ *
1115
+ * Straight (curve === 0): seat i sits at local (i·spacing, 0).
1116
+ *
1117
+ * Curved: seats lie on a circular arc. Per-seat angular step is
1118
+ * `curve/(seatCount-1)`; radius is derived so the chord between neighbours
1119
+ * equals seatSpacing → radius = spacing / (2·sin(step/2)). Seat 0 sits at the
1120
+ * bottom of the arc (local origin) with the circle centre directly above it at
1121
+ * (0,-radius); increasing index sweeps toward +x while the ends rise toward -y,
1122
+ * i.e. positive curve is concave toward -y (a row wrapping a stage above it).
1123
+ * Local points are then rotated by `rotation` and translated to `origin`.
1124
+ *
1125
+ * Numbering (labels only, never geometry): `seatNumbering.direction === 'rtl'`
1126
+ * numbers from the far physical end; `step === 2` produces odd/even numbering
1127
+ * (start at 1 → 1,3,5…; start at 2 → 2,4,6…).
1128
+ */
1129
+ /** Base (pre-override) seat centre per index — shared by expandRow + designer edit mode. */
1130
+ declare function rowSeatPositions(row: RowObject): Point[];
1055
1131
  /**
1056
1132
  * Every seat slot of a row INCLUDING skipped ones (designer seat-edit mode uses
1057
1133
  * this to draw un-skip handles). Overrides (dx/dy/label/categoryKey) are applied
@@ -1071,6 +1147,12 @@ interface RowSeatSlot {
1071
1147
  viewUrl?: string;
1072
1148
  labelStyle?: LabelStyle;
1073
1149
  }
1150
+ /**
1151
+ * The seat NUMBER part of a row seat's label (the row prefix is prepended by the
1152
+ * caller). Applies the row's numbering scheme, direction, step, start and label
1153
+ * prefix. Labels only — never geometry. See `RowObject.seatNumbering.scheme`.
1154
+ */
1155
+ declare function seatLabelPart(row: RowObject, i: number): string;
1074
1156
  declare function expandRowSlots(row: RowObject): RowSeatSlot[];
1075
1157
  declare function expandRow(row: RowObject): ExpandedSeat[];
1076
1158
  /**
@@ -1205,6 +1287,116 @@ declare function hiddenObjectIds(doc: ChartDoc, hidden: ReadonlySet<string>): Se
1205
1287
  */
1206
1288
  declare function applyHidden(doc: ChartDoc, hidden: ReadonlySet<string>): ChartDoc;
1207
1289
 
1290
+ declare const RENDERED_QUALITY_REPORT_VERSION = 3;
1291
+ type RenderedEvidenceState = 'overview' | 'interaction';
1292
+ 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';
1293
+ interface RenderedQualitySample {
1294
+ primaryId: string;
1295
+ primaryLabel: string;
1296
+ secondaryId?: string;
1297
+ secondaryLabel?: string;
1298
+ measured?: number;
1299
+ minimum?: number;
1300
+ }
1301
+ interface RenderedQualityFinding {
1302
+ code: RenderedQualityFindingCode;
1303
+ message: string;
1304
+ count: number;
1305
+ samples: RenderedQualitySample[];
1306
+ }
1307
+ interface RenderedQualityReport {
1308
+ version: typeof RENDERED_QUALITY_REPORT_VERSION;
1309
+ passed: boolean;
1310
+ state: RenderedEvidenceState;
1311
+ /** Server-selected category exercised by a category-specific detail scene. */
1312
+ targetCategoryKey: string | null;
1313
+ /** Exact overview checks discharged by this browser-rendered report. */
1314
+ resolvedRules: string[];
1315
+ viewport: {
1316
+ width: number;
1317
+ height: number;
1318
+ };
1319
+ canvasBackground: string;
1320
+ effectiveScale: number;
1321
+ rung: RendererQualityEvidence['rung'];
1322
+ inventory: {
1323
+ totalBookableUnits: number;
1324
+ totalLabelledBookableUnits: number;
1325
+ visibleBookableLabels: number;
1326
+ hiddenBookableLabels: number;
1327
+ visibleHierarchyLabels: number;
1328
+ visibleFreeTextLabels: number;
1329
+ visibleGAAreas: number;
1330
+ };
1331
+ overviewStyle?: RendererQualityEvidence['overviewStyle'];
1332
+ /**
1333
+ * Coordinate-free identity evidence from the exact buyer scene. The Worker
1334
+ * uses this to compare persisted reference semantics with what Chromium
1335
+ * actually painted, without exposing screen boxes or accepting geometry.
1336
+ */
1337
+ composition: {
1338
+ hierarchy: Array<{
1339
+ id: string;
1340
+ kind: 'section' | 'zone';
1341
+ label: string;
1342
+ visible: boolean;
1343
+ }>;
1344
+ labelledObjects: Array<{
1345
+ objectId: string;
1346
+ kind: RenderedFreeTextEvidence['kind'];
1347
+ text: string;
1348
+ visible: boolean;
1349
+ }>;
1350
+ gaAreas: Array<{
1351
+ areaId: string;
1352
+ label: string;
1353
+ categoryKey: string;
1354
+ sectionId?: string;
1355
+ visible: boolean;
1356
+ }>;
1357
+ bookableSectionIds: string[];
1358
+ categoryKeys: string[];
1359
+ /** Categories whose non-dimmed bookable paint is visible in this scene. */
1360
+ activeCategoryKeys: string[];
1361
+ };
1362
+ metrics: {
1363
+ minimumRenderedBookableLabelPx: number | null;
1364
+ minimumBookableLabelContrast: number | null;
1365
+ minimumRenderedHierarchyLabelPx: number | null;
1366
+ minimumHierarchyLabelContrast: number | null;
1367
+ minimumRenderedFreeTextPx: number | null;
1368
+ minimumFreeTextContrast: number | null;
1369
+ minimumGAContrast: number | null;
1370
+ minimumEffectivePointerTargetPx: number | null;
1371
+ selectedRingContrast: number | null;
1372
+ };
1373
+ interaction: {
1374
+ applicable: {
1375
+ detail: boolean;
1376
+ pointer: boolean;
1377
+ held: boolean;
1378
+ booked: boolean;
1379
+ sectionFocus: boolean;
1380
+ categoryFilter: boolean;
1381
+ };
1382
+ selectedUnits: number;
1383
+ heldUnits: number;
1384
+ bookedUnits: number;
1385
+ activePointerTargets: number;
1386
+ focusedSectionId: string | null;
1387
+ focusBackdropVisible: boolean;
1388
+ categoryFilterKeys: string[] | null;
1389
+ };
1390
+ findings: RenderedQualityFinding[];
1391
+ }
1392
+ /**
1393
+ * Inspect what the buyer renderer actually decided to paint at one exact
1394
+ * viewport. This is deliberately downstream of ChartDoc validation: screen
1395
+ * size, LOD visibility, fitted hierarchy text, transient paint, and label
1396
+ * collisions cannot be proven from stored geometry alone.
1397
+ */
1398
+ declare function inspectRenderedQualityEvidence(evidence: RendererQualityEvidence, state?: RenderedEvidenceState, targetCategoryKey?: string | null): RenderedQualityReport;
1399
+
1208
1400
  /**
1209
1401
  * SeatmapRenderer — the shared canvas rendering core (buyer picker shell).
1210
1402
  *
@@ -1238,6 +1430,15 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
1238
1430
  private boothLabelById;
1239
1431
  /** Viewport seat labels are rebuilt after each settled camera change. */
1240
1432
  private seatLabelById;
1433
+ /** Coloured accommodation ring per accessible seat (few per chart). */
1434
+ private accessRingById;
1435
+ /** Centred accessibility glyph per accessible seat — shown once the seat is
1436
+ * big enough on-screen (see {@link SEAT_GLYPH_MIN_PX}); the ring is the
1437
+ * smaller-zoom fallback. Kept in a map so zoom toggles touch only the handful
1438
+ * of accessible seats, never all 13k nodes. */
1439
+ private accessGlyphById;
1440
+ /** Whether the accessibility glyph is legible at the current camera scale. */
1441
+ private accessGlyphVisible;
1241
1442
  /** Authored free-text nodes obey the same rendered-size visibility floor. */
1242
1443
  private freeTextById;
1243
1444
  /** Stage/rink landmarks retain a readable screen-space caption at overview. */
@@ -1503,6 +1704,26 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
1503
1704
  private renderSeats;
1504
1705
  /** A booth renders as a click-selectable rounded block (dims from the doc). */
1505
1706
  private renderBoothUnit;
1707
+ /**
1708
+ * Build the centred accessibility glyph for a seat. Sized relative to the seat
1709
+ * radius (so it always fills the marker at any zoom) and given a contrast-aware
1710
+ * fill against the seat's paint — recomputed per state in {@link paintSeat}.
1711
+ */
1712
+ private buildAccessGlyph;
1713
+ /**
1714
+ * Toggle the accessibility glyphs for the current camera scale: shown once the
1715
+ * effective on-screen seat radius clears {@link SEAT_GLYPH_MIN_PX}, otherwise
1716
+ * hidden so only the ring remains. Iterates the (small) accessible-seat set,
1717
+ * never the full node graph, so it is cheap to call on every view change.
1718
+ */
1719
+ private updateAccessGlyphs;
1720
+ /**
1721
+ * Whether an accessible seat's glyph should show for its current status. It is
1722
+ * hidden on seats a buyer cannot take (sold, or another buyer's hold) where the
1723
+ * overlay status cue (diagonal mark / lock) carries the state instead — mirrors
1724
+ * the `unavailable` test in {@link updateLabels} so the two never collide.
1725
+ */
1726
+ private accessGlyphEligible;
1506
1727
  /** The category's display color — Okabe-Ito hue when colorblind-safe is on. */
1507
1728
  private seatBaseColor;
1508
1729
  /** Per-seat authored label size relative to the neutral default (1 = default),
@@ -1770,6 +1991,9 @@ declare function createRenderer(container: HTMLDivElement, opts?: RendererOption
1770
1991
  interface PickerSeat {
1771
1992
  id: string;
1772
1993
  label: string;
1994
+ /** Buyer-facing label (row `displayLabel` applied). Falls back to `label`;
1995
+ * never use for booking — `label` is the inventory/booking identity. */
1996
+ displayLabel?: string;
1773
1997
  categoryKey: string;
1774
1998
  /** Price for the chosen tier when the category has tiers, else the base price. */
1775
1999
  price: number;
@@ -1796,6 +2020,9 @@ interface SeatHoverDetails extends PickerSeat {
1796
2020
  sectionLabel?: string;
1797
2021
  rowLabel?: string;
1798
2022
  seatNumber?: string;
2023
+ /** Buyer-facing type word for the row/table (seats.io "Displayed type"),
2024
+ * overriding the default "Row" in tooltip/confirm/cart. Absent = "Row". */
2025
+ rowType?: string;
1799
2026
  }
1800
2027
  interface HoldConflict {
1801
2028
  label: string;
@@ -1829,6 +2056,8 @@ interface SectionSummary {
1829
2056
  label: string;
1830
2057
  /** Zone label (from ChartDoc.zones); '' when the section has no zone. */
1831
2058
  zoneLabel: string;
2059
+ /** Buyer-facing entrance/door hint ("Entrance X"); absent when unset. */
2060
+ entrance?: string;
1832
2061
  /** Mix/section colour for the card's dot (section.color → zone colour → dominant category). */
1833
2062
  color: string;
1834
2063
  /** Free member seats right now. */
@@ -2344,4 +2573,4 @@ declare function formatMoney(amount: number, currency?: string, fractionDigits?:
2344
2573
  /** Bare symbol for input adornments ("€", "$", "₹"). */
2345
2574
  declare function currencySymbol(currency?: string): string;
2346
2575
 
2347
- export { ACCESSIBILITY_RING_COLOR, ACCESSIBILITY_TYPES, type AccessibilityMeta, type AccessibilityType, type AvailabilityRule, type BoothObject, CHART_STORAGE_KEY, type Category, type CategoryTier, type ChartDoc, type ChartObject, type ChartReferenceImage, type ChartTheme, type CubicPath, DEFAULT_CURRENCY, type DecorImageObject, type Dict, type ExpandedSeat, type Floor, type GAAreaObject, type HoldConflict, type HoldInfo, type HoldSelectionRequest, type HoldServerItem, type ISeatmapRenderer, LABEL_STYLE_MAX_SIZE, LABEL_STYLE_MIN_SIZE, type LabelPresentation, type LabelStyle, type Locale, type LodRung, MAX_EVENT_INVENTORY, MAX_GA_CAPACITY, type PanoramaResult, type PickerCallbacks, PickerController, type PickerOptions, type PickerSeat, type PickerTransport, type Point, type ReferenceAccessibilitySource, type ReferenceCalibration, type ReferenceCategorySource, type ReferenceDerivedScale, type ReferenceInventoryExclusionSource, type ReferenceInventorySource, type RenderedBookableLabelEvidence, type RenderedFreeTextEvidence, type RenderedGAAreaEvidence, type RenderedHierarchyLabelEvidence, type RenderedLabelHiddenReason, type RendererCallbacks, type RendererOptions, type RendererQualityEvidence, type RowObject, type RowSeatSlot, SUPPORTED_LOCALES, type SeatCommercialAttributes, type SeatHoverDetails, type SeatOverride, type SeatStatus, SeatmapRenderer, type SectionCategory, type SectionNode, type SectionObject, type SectionOutlinePath, type SectionPathSegment, type SectionSummary, type SelectionLayer, type ShapeObject, type TableObject, type TextObject, UNGROUPED_ID, type ZoneDef, accessibilityMeta, accessibilityRingColor, allObjects, applyHidden, chartBounds, computeSections, createRenderer, currencySymbol, expandBooth, expandChart, expandRow, expandRowSlots, expandTable, floorObjects, floorsOf, formatDate, formatMoney, gaAreasOf, gaUnitLabel, gaUnitLabels, generateSeatPanorama, generateSeatThumb, getLocale, hiddenObjectIds, isGaUnitLabel, isSectionHidden, layerOf, loadLocale, objectCenter, pointInPolygon, pointInPolygonWithHoles, polygonLabelPoint, resolveLocale, setLocale, setMoneyLocale, setStringOverrides, stackFloors, t, tCount };
2576
+ export { ACCESSIBILITY_RING_COLOR, ACCESSIBILITY_TYPES, type AccessibilityMeta, type AccessibilityType, type AvailabilityRule, type BoothObject, CHART_STORAGE_KEY, type Category, type CategoryTier, type ChartDoc, type ChartObject, type ChartReferenceImage, type ChartTheme, type CubicPath, DEFAULT_CURRENCY, type DecorImageObject, type Dict, type ExpandedSeat, type Floor, type GAAreaObject, type HoldConflict, type HoldInfo, type HoldSelectionRequest, type HoldServerItem, type ISeatmapRenderer, LABEL_STYLE_MAX_SIZE, LABEL_STYLE_MIN_SIZE, type LabelPresentation, type LabelStyle, type Locale, type LodRung, MAX_EVENT_INVENTORY, MAX_GA_CAPACITY, type PanoramaResult, type PickerCallbacks, PickerController, type PickerOptions, type PickerSeat, type PickerTransport, type Point, RENDERED_QUALITY_REPORT_VERSION, type ReferenceAccessibilitySource, type ReferenceCalibration, type ReferenceCategorySource, type ReferenceDerivedScale, type ReferenceInventoryExclusionSource, type ReferenceInventorySource, type RenderedBookableLabelEvidence, type RenderedEvidenceState, type RenderedFreeTextEvidence, type RenderedGAAreaEvidence, type RenderedHierarchyLabelEvidence, type RenderedLabelHiddenReason, type RenderedQualityFinding, type RenderedQualityFindingCode, type RenderedQualityReport, type RenderedQualitySample, type RendererCallbacks, type RendererOptions, type RendererQualityEvidence, type RowObject, type RowSeatSlot, SUPPORTED_LOCALES, type SeatCommercialAttributes, type SeatHoverDetails, type SeatOverride, type SeatStatus, SeatmapRenderer, type SectionCategory, type SectionNode, type SectionObject, type SectionOutlinePath, type SectionPathSegment, type SectionSummary, type SelectionLayer, type ShapeObject, type TableObject, type TextObject, UNGROUPED_ID, type ZoneDef, accessibilityMeta, accessibilityRingColor, allObjects, applyHidden, chartBounds, computeSections, createRenderer, currencySymbol, expandBooth, expandChart, expandRow, expandRowSlots, expandTable, floorObjects, floorsOf, formatDate, formatMoney, gaAreasOf, gaUnitLabel, gaUnitLabels, generateSeatPanorama, generateSeatThumb, getLocale, hiddenObjectIds, inspectRenderedQualityEvidence, isGaUnitLabel, isSectionHidden, layerOf, loadLocale, objectCenter, pointInPolygon, pointInPolygonWithHoles, polygonLabelPoint, resolveLocale, rowSeatPositions, seatLabelPart, setLocale, setMoneyLocale, setStringOverrides, stackFloors, t, tCount };