@seatlayer/core 0.17.0 → 0.18.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
@@ -109,6 +109,14 @@ interface AccessibilityMeta {
109
109
  declare const ACCESSIBILITY_TYPES: AccessibilityMeta[];
110
110
  /** Metadata for one accessibility key (undefined for unknown keys). */
111
111
  declare function accessibilityMeta(key: AccessibilityType): AccessibilityMeta | undefined;
112
+ /**
113
+ * Outer-ring colour per accommodation. Shared by the buyer picker and the
114
+ * designer canvas so an accessible seat reads with the same hue in both — the
115
+ * seat's first-listed type wins. `wheelchair` blue is the default fallback.
116
+ */
117
+ declare const ACCESSIBILITY_RING_COLOR: Record<AccessibilityType, string>;
118
+ /** Ring colour for a seat's accessibility set (first-listed type wins). */
119
+ declare function accessibilityRingColor(types: AccessibilityType[] | undefined): string;
112
120
  interface SeatOverride {
113
121
  /** 0-based seat index within the row. */
114
122
  index: number;
@@ -119,25 +127,70 @@ interface SeatOverride {
119
127
  dy?: number;
120
128
  /** Replace the computed label entirely. */
121
129
  label?: string;
130
+ /** Buyer-facing copy only. Booking/API identity remains row id + slot index
131
+ * internally and the legacy `label` externally for backwards compatibility. */
132
+ displayLabel?: string;
122
133
  categoryKey?: string;
123
134
  /** @deprecated legacy flag — read as `['wheelchair']`; write `accessibility`. */
124
135
  accessible?: boolean;
125
136
  /** Accessibility accommodations of this seat (empty/absent = none). */
126
137
  accessibility?: AccessibilityType[];
138
+ /** Commercial selling/view attributes are deliberately not accessibility. */
139
+ commercial?: SeatCommercialAttributes;
140
+ /** Seat-specific view photo; falls back to the row photo. */
141
+ viewFromSeatUrl?: string;
142
+ /** Per-seat label size/color override; falls back to the row/theme default.
143
+ * Size is clamped to LABEL_STYLE_MIN_SIZE..MAX_SIZE; color is passed through
144
+ * the shared auto-contrast rule at paint time (see {@link LabelStyle}). */
145
+ labelStyle?: LabelStyle;
146
+ }
147
+ interface SeatCommercialAttributes {
148
+ restrictedView?: boolean;
149
+ obstructedView?: boolean;
150
+ premium?: boolean;
151
+ note?: string;
152
+ }
153
+ /**
154
+ * Per-object label ink + size overrides layered on top of the chart-wide Theme
155
+ * defaults (rowLabelColor / textColor for rows, the section-name ink for
156
+ * sections). Both fields are optional: an absent field means "inherit the theme
157
+ * default". `color` is a preferred hex — renderers still pass it through the
158
+ * shared auto-contrast rule (`stateAwareBookableLabelInk`), so a choice that
159
+ * would be illegible over the seat/section background is switched to black or
160
+ * white at paint time. `size` is a font size in chart units, clamped to
161
+ * LABEL_STYLE_MIN_SIZE..LABEL_STYLE_MAX_SIZE by the shared ops.
162
+ */
163
+ interface LabelStyle {
164
+ size?: number;
165
+ color?: string;
166
+ }
167
+ /** Clamp bounds for a per-object label `size`, shared by ops, MCP, and UI. */
168
+ declare const LABEL_STYLE_MIN_SIZE = 8;
169
+ declare const LABEL_STYLE_MAX_SIZE = 24;
170
+ interface LabelPresentation {
171
+ visible?: boolean;
172
+ /** Exact Designer-owned label anchor; public semantic MCP schemas omit it. */
173
+ position?: Point;
174
+ rotation?: number;
175
+ style?: 'plain' | 'pill';
176
+ /** Per-object size/color override for this row's or section's label. */
177
+ labelStyle?: LabelStyle;
127
178
  }
128
179
  /** Brand/venue theming — applied by the renderer in both designer and picker. */
129
180
  interface ChartTheme {
130
181
  /** Canvas background color (default dark: #0e1117-ish radial). */
131
182
  background?: string;
132
- /** Seat label text color (default dark ink #0b1220). */
183
+ /** Preferred text color for the numbers inside seat markers. */
133
184
  seatLabelColor?: string;
185
+ /** Preferred color for row identifiers such as A, B, C. Falls back to textColor. */
186
+ rowLabelColor?: string;
134
187
  /** Selection ring / accent color (default white ring + brand accent). */
135
188
  selectionColor?: string;
136
189
  /** Décor (stage/shape) default fill. */
137
190
  decorFill?: string;
138
191
  /** Free-text color default. */
139
192
  textColor?: string;
140
- /** Font family (CSS stack) for all rendered text — seat labels, sections, décor text. */
193
+ /** Font family (CSS stack) for all rendered text — row labels, seat numbers, sections, décor text. */
141
194
  fontFamily?: string;
142
195
  /** Seat size multiplier on the base radius (0.7–1.6, default 1) — bigger seats fit longer labels. */
143
196
  seatScale?: number;
@@ -157,6 +210,9 @@ interface RowObject {
157
210
  id: string;
158
211
  /** Row label, e.g. "A". Seat labels are `${label}-${n}`. */
159
212
  label: string;
213
+ /** Buyer-facing row name. `label` remains the legacy inventory prefix. */
214
+ displayLabel?: string;
215
+ labelPresentation?: LabelPresentation;
160
216
  /** Position of the FIRST seat. */
161
217
  origin: Point;
162
218
  /** Degrees, clockwise. 0 = seats laid out along +x. */
@@ -178,6 +234,35 @@ interface RowObject {
178
234
  * inventory. It enables revision-safe replacement without touching manually
179
235
  * authored rows or accepting client coordinates. */
180
236
  referenceInventorySource?: ReferenceInventorySource;
237
+ /** Semantic parameters for a row produced by the shared Arc/Fan operation.
238
+ * Designer can reopen these parameters while every segment in the group
239
+ * still carries the same generation signature. Public MCP tools never accept
240
+ * the stored center/angles as arbitrary model-authored coordinates. */
241
+ arcFanGeneration?: {
242
+ kind: 'arc-fan-v1';
243
+ groupId: string;
244
+ center: Point;
245
+ innerRadius: number;
246
+ rowCount: number;
247
+ rowGap: number;
248
+ startAngle: number;
249
+ endAngle: number;
250
+ seatPitch: number;
251
+ fit: 'seat-pitch' | 'fixed-count';
252
+ seatsPerRow?: number;
253
+ facing: 'inward' | 'outward';
254
+ taperDegrees: number;
255
+ skewDegrees: number;
256
+ aisleGaps: {
257
+ left: number;
258
+ center: number;
259
+ right: number;
260
+ };
261
+ rowLabelStart: number;
262
+ seatLabelStart: number;
263
+ rowIndex: number;
264
+ segmentIndex: number;
265
+ };
181
266
  /** First seat number (default 1). */
182
267
  seatLabelStart?: number;
183
268
  /** Seat numbering within the row (default ltr, step 1). */
@@ -200,6 +285,8 @@ interface RowObject {
200
285
  * generates a synthetic panorama from chart geometry.
201
286
  */
202
287
  viewFromSeatUrl?: string;
288
+ /** Default commercial attributes inherited by seats without an override. */
289
+ commercial?: SeatCommercialAttributes;
203
290
  }
204
291
  interface GAAreaObject {
205
292
  type: 'gaArea';
@@ -340,6 +427,9 @@ interface SectionObject {
340
427
  type: 'section';
341
428
  id: string;
342
429
  label: string;
430
+ /** Buyer-facing section name; logical/id fields remain stable. */
431
+ displayLabel?: string;
432
+ labelPresentation?: LabelPresentation;
343
433
  /**
344
434
  * Stable management/inventory identity shared by disconnected visual
345
435
  * components of one logical section. When absent, `id` is the logical id.
@@ -347,6 +437,9 @@ interface SectionObject {
347
437
  * editing, measured diffs, and source restoration remain exact.
348
438
  */
349
439
  logicalSectionId?: string;
440
+ /** Shared semantic Arc/Fan group wrapped by this section. The section id is
441
+ * preserved when the fan parameters are reopened and regenerated. */
442
+ arcFanGroupId?: string;
350
443
  /** Closed polygon, chart units. */
351
444
  outline: Point[];
352
445
  /** Optional true line/arc/cubic boundary. `outline` is a deterministic sample
@@ -536,6 +629,8 @@ interface ExpandedSeat {
536
629
  id: string;
537
630
  /** Public label: `${rowLabel}-${seatNumber}` */
538
631
  label: string;
632
+ /** Buyer-facing copy; absent on legacy charts, where `label` is displayed. */
633
+ displayLabel?: string;
539
634
  x: number;
540
635
  y: number;
541
636
  rowId: string;
@@ -546,8 +641,11 @@ interface ExpandedSeat {
546
641
  accessible?: boolean;
547
642
  /** Specific accessibility accommodations (absent = none) — picker badges/filters these. */
548
643
  accessibility?: AccessibilityType[];
644
+ commercial?: SeatCommercialAttributes;
549
645
  /** Organizer-supplied view-from-seat image (inherited from the row). */
550
646
  viewUrl?: string;
647
+ /** Per-seat label size/color override; absent = inherit the row/theme default. */
648
+ labelStyle?: LabelStyle;
551
649
  }
552
650
  type SeatStatus = 'free' | 'held' | 'booked' | 'not_for_sale';
553
651
  interface RendererCallbacks {
@@ -964,10 +1062,14 @@ interface RowSeatSlot {
964
1062
  x: number;
965
1063
  y: number;
966
1064
  label: string;
1065
+ displayLabel: string;
967
1066
  categoryKey: string;
968
1067
  skipped: boolean;
969
1068
  accessible: boolean;
970
1069
  accessibility: AccessibilityType[];
1070
+ commercial?: RowObject['commercial'];
1071
+ viewUrl?: string;
1072
+ labelStyle?: LabelStyle;
971
1073
  }
972
1074
  declare function expandRowSlots(row: RowObject): RowSeatSlot[];
973
1075
  declare function expandRow(row: RowObject): ExpandedSeat[];
@@ -1394,9 +1496,16 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
1394
1496
  private renderBoothUnit;
1395
1497
  /** The category's display color — Okabe-Ito hue when colorblind-safe is on. */
1396
1498
  private seatBaseColor;
1397
- /** Authored free fills retain the chart's validated ink. Renderer-owned
1398
- * transient fills choose an ink against the paint that is actually visible. */
1399
- private renderedBookableLabelInk;
1499
+ /** Per-seat authored label size relative to the neutral default (1 = default),
1500
+ * mirroring the section convention (labelStyle.size ?? 18) / 18. Only real
1501
+ * seats carry labelStyle, so booths and unstyled seats resolve to 1. */
1502
+ private seatLabelScale;
1503
+ /** Preferred label ink for a seat: the authored per-seat colour when set,
1504
+ * otherwise today's theme default. Fed through auto-contrast by seatLabelInk. */
1505
+ private seatPreferredLabelInk;
1506
+ /** Resolve a seat's label ink against the paint actually visible, honouring an
1507
+ * authored per-seat colour through the same auto-contrast rule as sections. */
1508
+ private seatLabelInk;
1400
1509
  /** Apply fill/stroke/opacity for a seat's current status + selection. */
1401
1510
  private paintSeat;
1402
1511
  /** True when a seat sits in a section/zone currently marked `closed`. */
@@ -2073,6 +2182,13 @@ declare class PickerController {
2073
2182
  private applySeatsMap;
2074
2183
  private clearBookedHoldIfSettled;
2075
2184
  private resnapshot;
2185
+ /**
2186
+ * Re-pull the status snapshot on demand. Live surfaces rarely need this (the
2187
+ * socket keeps them fresh); local/mock transports with no socket call it
2188
+ * after they mutate state (e.g. the demo books a hold) so the renderer and
2189
+ * every onStatusChange consumer repaint from the new truth.
2190
+ */
2191
+ refresh(): Promise<void>;
2076
2192
  /**
2077
2193
  * Buyer catch-up on tab regain. While a tab is hidden Chrome pauses rAF, so
2078
2194
  * seat-status deltas that arrived over the WS mutated the scene graph but the
@@ -2183,4 +2299,4 @@ declare function formatMoney(amount: number, currency?: string, fractionDigits?:
2183
2299
  /** Bare symbol for input adornments ("€", "$", "₹"). */
2184
2300
  declare function currencySymbol(currency?: string): string;
2185
2301
 
2186
- export { 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, 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 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, 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 };
2302
+ 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 };
package/dist/index.d.ts CHANGED
@@ -109,6 +109,14 @@ interface AccessibilityMeta {
109
109
  declare const ACCESSIBILITY_TYPES: AccessibilityMeta[];
110
110
  /** Metadata for one accessibility key (undefined for unknown keys). */
111
111
  declare function accessibilityMeta(key: AccessibilityType): AccessibilityMeta | undefined;
112
+ /**
113
+ * Outer-ring colour per accommodation. Shared by the buyer picker and the
114
+ * designer canvas so an accessible seat reads with the same hue in both — the
115
+ * seat's first-listed type wins. `wheelchair` blue is the default fallback.
116
+ */
117
+ declare const ACCESSIBILITY_RING_COLOR: Record<AccessibilityType, string>;
118
+ /** Ring colour for a seat's accessibility set (first-listed type wins). */
119
+ declare function accessibilityRingColor(types: AccessibilityType[] | undefined): string;
112
120
  interface SeatOverride {
113
121
  /** 0-based seat index within the row. */
114
122
  index: number;
@@ -119,25 +127,70 @@ interface SeatOverride {
119
127
  dy?: number;
120
128
  /** Replace the computed label entirely. */
121
129
  label?: string;
130
+ /** Buyer-facing copy only. Booking/API identity remains row id + slot index
131
+ * internally and the legacy `label` externally for backwards compatibility. */
132
+ displayLabel?: string;
122
133
  categoryKey?: string;
123
134
  /** @deprecated legacy flag — read as `['wheelchair']`; write `accessibility`. */
124
135
  accessible?: boolean;
125
136
  /** Accessibility accommodations of this seat (empty/absent = none). */
126
137
  accessibility?: AccessibilityType[];
138
+ /** Commercial selling/view attributes are deliberately not accessibility. */
139
+ commercial?: SeatCommercialAttributes;
140
+ /** Seat-specific view photo; falls back to the row photo. */
141
+ viewFromSeatUrl?: string;
142
+ /** Per-seat label size/color override; falls back to the row/theme default.
143
+ * Size is clamped to LABEL_STYLE_MIN_SIZE..MAX_SIZE; color is passed through
144
+ * the shared auto-contrast rule at paint time (see {@link LabelStyle}). */
145
+ labelStyle?: LabelStyle;
146
+ }
147
+ interface SeatCommercialAttributes {
148
+ restrictedView?: boolean;
149
+ obstructedView?: boolean;
150
+ premium?: boolean;
151
+ note?: string;
152
+ }
153
+ /**
154
+ * Per-object label ink + size overrides layered on top of the chart-wide Theme
155
+ * defaults (rowLabelColor / textColor for rows, the section-name ink for
156
+ * sections). Both fields are optional: an absent field means "inherit the theme
157
+ * default". `color` is a preferred hex — renderers still pass it through the
158
+ * shared auto-contrast rule (`stateAwareBookableLabelInk`), so a choice that
159
+ * would be illegible over the seat/section background is switched to black or
160
+ * white at paint time. `size` is a font size in chart units, clamped to
161
+ * LABEL_STYLE_MIN_SIZE..LABEL_STYLE_MAX_SIZE by the shared ops.
162
+ */
163
+ interface LabelStyle {
164
+ size?: number;
165
+ color?: string;
166
+ }
167
+ /** Clamp bounds for a per-object label `size`, shared by ops, MCP, and UI. */
168
+ declare const LABEL_STYLE_MIN_SIZE = 8;
169
+ declare const LABEL_STYLE_MAX_SIZE = 24;
170
+ interface LabelPresentation {
171
+ visible?: boolean;
172
+ /** Exact Designer-owned label anchor; public semantic MCP schemas omit it. */
173
+ position?: Point;
174
+ rotation?: number;
175
+ style?: 'plain' | 'pill';
176
+ /** Per-object size/color override for this row's or section's label. */
177
+ labelStyle?: LabelStyle;
127
178
  }
128
179
  /** Brand/venue theming — applied by the renderer in both designer and picker. */
129
180
  interface ChartTheme {
130
181
  /** Canvas background color (default dark: #0e1117-ish radial). */
131
182
  background?: string;
132
- /** Seat label text color (default dark ink #0b1220). */
183
+ /** Preferred text color for the numbers inside seat markers. */
133
184
  seatLabelColor?: string;
185
+ /** Preferred color for row identifiers such as A, B, C. Falls back to textColor. */
186
+ rowLabelColor?: string;
134
187
  /** Selection ring / accent color (default white ring + brand accent). */
135
188
  selectionColor?: string;
136
189
  /** Décor (stage/shape) default fill. */
137
190
  decorFill?: string;
138
191
  /** Free-text color default. */
139
192
  textColor?: string;
140
- /** Font family (CSS stack) for all rendered text — seat labels, sections, décor text. */
193
+ /** Font family (CSS stack) for all rendered text — row labels, seat numbers, sections, décor text. */
141
194
  fontFamily?: string;
142
195
  /** Seat size multiplier on the base radius (0.7–1.6, default 1) — bigger seats fit longer labels. */
143
196
  seatScale?: number;
@@ -157,6 +210,9 @@ interface RowObject {
157
210
  id: string;
158
211
  /** Row label, e.g. "A". Seat labels are `${label}-${n}`. */
159
212
  label: string;
213
+ /** Buyer-facing row name. `label` remains the legacy inventory prefix. */
214
+ displayLabel?: string;
215
+ labelPresentation?: LabelPresentation;
160
216
  /** Position of the FIRST seat. */
161
217
  origin: Point;
162
218
  /** Degrees, clockwise. 0 = seats laid out along +x. */
@@ -178,6 +234,35 @@ interface RowObject {
178
234
  * inventory. It enables revision-safe replacement without touching manually
179
235
  * authored rows or accepting client coordinates. */
180
236
  referenceInventorySource?: ReferenceInventorySource;
237
+ /** Semantic parameters for a row produced by the shared Arc/Fan operation.
238
+ * Designer can reopen these parameters while every segment in the group
239
+ * still carries the same generation signature. Public MCP tools never accept
240
+ * the stored center/angles as arbitrary model-authored coordinates. */
241
+ arcFanGeneration?: {
242
+ kind: 'arc-fan-v1';
243
+ groupId: string;
244
+ center: Point;
245
+ innerRadius: number;
246
+ rowCount: number;
247
+ rowGap: number;
248
+ startAngle: number;
249
+ endAngle: number;
250
+ seatPitch: number;
251
+ fit: 'seat-pitch' | 'fixed-count';
252
+ seatsPerRow?: number;
253
+ facing: 'inward' | 'outward';
254
+ taperDegrees: number;
255
+ skewDegrees: number;
256
+ aisleGaps: {
257
+ left: number;
258
+ center: number;
259
+ right: number;
260
+ };
261
+ rowLabelStart: number;
262
+ seatLabelStart: number;
263
+ rowIndex: number;
264
+ segmentIndex: number;
265
+ };
181
266
  /** First seat number (default 1). */
182
267
  seatLabelStart?: number;
183
268
  /** Seat numbering within the row (default ltr, step 1). */
@@ -200,6 +285,8 @@ interface RowObject {
200
285
  * generates a synthetic panorama from chart geometry.
201
286
  */
202
287
  viewFromSeatUrl?: string;
288
+ /** Default commercial attributes inherited by seats without an override. */
289
+ commercial?: SeatCommercialAttributes;
203
290
  }
204
291
  interface GAAreaObject {
205
292
  type: 'gaArea';
@@ -340,6 +427,9 @@ interface SectionObject {
340
427
  type: 'section';
341
428
  id: string;
342
429
  label: string;
430
+ /** Buyer-facing section name; logical/id fields remain stable. */
431
+ displayLabel?: string;
432
+ labelPresentation?: LabelPresentation;
343
433
  /**
344
434
  * Stable management/inventory identity shared by disconnected visual
345
435
  * components of one logical section. When absent, `id` is the logical id.
@@ -347,6 +437,9 @@ interface SectionObject {
347
437
  * editing, measured diffs, and source restoration remain exact.
348
438
  */
349
439
  logicalSectionId?: string;
440
+ /** Shared semantic Arc/Fan group wrapped by this section. The section id is
441
+ * preserved when the fan parameters are reopened and regenerated. */
442
+ arcFanGroupId?: string;
350
443
  /** Closed polygon, chart units. */
351
444
  outline: Point[];
352
445
  /** Optional true line/arc/cubic boundary. `outline` is a deterministic sample
@@ -536,6 +629,8 @@ interface ExpandedSeat {
536
629
  id: string;
537
630
  /** Public label: `${rowLabel}-${seatNumber}` */
538
631
  label: string;
632
+ /** Buyer-facing copy; absent on legacy charts, where `label` is displayed. */
633
+ displayLabel?: string;
539
634
  x: number;
540
635
  y: number;
541
636
  rowId: string;
@@ -546,8 +641,11 @@ interface ExpandedSeat {
546
641
  accessible?: boolean;
547
642
  /** Specific accessibility accommodations (absent = none) — picker badges/filters these. */
548
643
  accessibility?: AccessibilityType[];
644
+ commercial?: SeatCommercialAttributes;
549
645
  /** Organizer-supplied view-from-seat image (inherited from the row). */
550
646
  viewUrl?: string;
647
+ /** Per-seat label size/color override; absent = inherit the row/theme default. */
648
+ labelStyle?: LabelStyle;
551
649
  }
552
650
  type SeatStatus = 'free' | 'held' | 'booked' | 'not_for_sale';
553
651
  interface RendererCallbacks {
@@ -964,10 +1062,14 @@ interface RowSeatSlot {
964
1062
  x: number;
965
1063
  y: number;
966
1064
  label: string;
1065
+ displayLabel: string;
967
1066
  categoryKey: string;
968
1067
  skipped: boolean;
969
1068
  accessible: boolean;
970
1069
  accessibility: AccessibilityType[];
1070
+ commercial?: RowObject['commercial'];
1071
+ viewUrl?: string;
1072
+ labelStyle?: LabelStyle;
971
1073
  }
972
1074
  declare function expandRowSlots(row: RowObject): RowSeatSlot[];
973
1075
  declare function expandRow(row: RowObject): ExpandedSeat[];
@@ -1394,9 +1496,16 @@ declare class SeatmapRenderer implements ISeatmapRenderer {
1394
1496
  private renderBoothUnit;
1395
1497
  /** The category's display color — Okabe-Ito hue when colorblind-safe is on. */
1396
1498
  private seatBaseColor;
1397
- /** Authored free fills retain the chart's validated ink. Renderer-owned
1398
- * transient fills choose an ink against the paint that is actually visible. */
1399
- private renderedBookableLabelInk;
1499
+ /** Per-seat authored label size relative to the neutral default (1 = default),
1500
+ * mirroring the section convention (labelStyle.size ?? 18) / 18. Only real
1501
+ * seats carry labelStyle, so booths and unstyled seats resolve to 1. */
1502
+ private seatLabelScale;
1503
+ /** Preferred label ink for a seat: the authored per-seat colour when set,
1504
+ * otherwise today's theme default. Fed through auto-contrast by seatLabelInk. */
1505
+ private seatPreferredLabelInk;
1506
+ /** Resolve a seat's label ink against the paint actually visible, honouring an
1507
+ * authored per-seat colour through the same auto-contrast rule as sections. */
1508
+ private seatLabelInk;
1400
1509
  /** Apply fill/stroke/opacity for a seat's current status + selection. */
1401
1510
  private paintSeat;
1402
1511
  /** True when a seat sits in a section/zone currently marked `closed`. */
@@ -2073,6 +2182,13 @@ declare class PickerController {
2073
2182
  private applySeatsMap;
2074
2183
  private clearBookedHoldIfSettled;
2075
2184
  private resnapshot;
2185
+ /**
2186
+ * Re-pull the status snapshot on demand. Live surfaces rarely need this (the
2187
+ * socket keeps them fresh); local/mock transports with no socket call it
2188
+ * after they mutate state (e.g. the demo books a hold) so the renderer and
2189
+ * every onStatusChange consumer repaint from the new truth.
2190
+ */
2191
+ refresh(): Promise<void>;
2076
2192
  /**
2077
2193
  * Buyer catch-up on tab regain. While a tab is hidden Chrome pauses rAF, so
2078
2194
  * seat-status deltas that arrived over the WS mutated the scene graph but the
@@ -2183,4 +2299,4 @@ declare function formatMoney(amount: number, currency?: string, fractionDigits?:
2183
2299
  /** Bare symbol for input adornments ("€", "$", "₹"). */
2184
2300
  declare function currencySymbol(currency?: string): string;
2185
2301
 
2186
- export { 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, 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 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, 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 };
2302
+ 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 };