@seatlayer/core 0.51.0 → 0.53.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/chunk-54A7LIL5.js +1 -0
- package/dist/chunk-IJI4WU57.js +1 -0
- package/dist/chunk-XPPT3OGQ.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/de-75NWRKC5.js +1 -0
- package/dist/es-BM7EJ7PW.js +1 -0
- package/dist/fr-HPXQHIB4.js +1 -0
- package/dist/index.cjs +1 -12130
- package/dist/index.d.cts +169 -70
- package/dist/index.d.ts +169 -70
- package/dist/index.js +1 -9718
- package/dist/picker/minimapGeometry.cjs +1 -0
- package/dist/picker/minimapGeometry.d.cts +37 -0
- package/dist/picker/minimapGeometry.d.ts +37 -0
- package/dist/picker/minimapGeometry.js +1 -0
- package/dist/{types-DR54nqKL.d.cts → types-tLOunI-B.d.cts} +131 -1
- package/dist/{types-DR54nqKL.d.ts → types-tLOunI-B.d.ts} +131 -1
- 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 +63 -6930
- package/dist/view3d/index.d.cts +82 -33
- package/dist/view3d/index.d.ts +82 -33
- package/dist/view3d/index.js +63 -6062
- package/package.json +15 -7
- 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-GD267BFB.js +0 -1496
- package/dist/chunk-GD267BFB.js.map +0 -1
- package/dist/core/seatConfidence.cjs.map +0 -1
- package/dist/core/seatConfidence.js.map +0 -1
- package/dist/de-V53JPFHN.js +0 -292
- package/dist/de-V53JPFHN.js.map +0 -1
- package/dist/es-37ISLCZA.js +0 -292
- package/dist/es-37ISLCZA.js.map +0 -1
- package/dist/fr-QKK2T64Q.js +0 -292
- package/dist/fr-QKK2T64Q.js.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var c=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var M=Object.prototype.hasOwnProperty;var x=(n,i)=>{for(var t in i)c(n,t,{get:i[t],enumerable:!0})},l=(n,i,t,o)=>{if(i&&typeof i=="object"||typeof i=="function")for(let e of f(i))!M.call(n,e)&&e!==t&&c(n,e,{get:()=>i[e],enumerable:!(o=b(i,e))||o.enumerable});return n};var y=n=>l(c({},"__esModule",{value:!0}),n);var R={};x(R,{createMinimapTransform:()=>g,minimapPointToWorld:()=>w,minimapViewportPlan:()=>d,worldRectToMinimap:()=>u});module.exports=y(R);function g(n,i,t,o,e=6){let a=e*o,m=Math.min((i-a*2)/Math.max(1,n.width),(t-a*2)/Math.max(1,n.height));return{scale:m,offX:(i-n.width*m)/2-n.x*m,offY:(t-n.height*m)/2-n.y*m,dpr:o}}function u(n,i){return{x:n.x*i.scale+i.offX,y:n.y*i.scale+i.offY,width:n.width*i.scale,height:n.height*i.scale}}function d(n,i,t,o,e=2){let a=u(n,i),m=Math.max(e,a.x),p=Math.max(e,a.y),h=Math.min(t-e,a.x+a.width),r=Math.min(o-e,a.y+a.height);return{raw:a,clipped:h>m&&r>p?{x:m,y:p,width:h-m,height:r-p}:null,clippedEdges:{left:a.x<e,top:a.y<e,right:a.x+a.width>t-e,bottom:a.y+a.height>o-e}}}function w(n,i){return{x:(n.x-i.offX)/i.scale,y:(n.y-i.offY)/i.scale}}0&&(module.exports={createMinimapTransform,minimapPointToWorld,minimapViewportPlan,worldRectToMinimap});
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/** Geometry helpers shared by the buyer minimap renderer and its focused tests. */
|
|
2
|
+
interface MinimapRect {
|
|
3
|
+
x: number;
|
|
4
|
+
y: number;
|
|
5
|
+
width: number;
|
|
6
|
+
height: number;
|
|
7
|
+
}
|
|
8
|
+
interface MinimapTransform {
|
|
9
|
+
scale: number;
|
|
10
|
+
offX: number;
|
|
11
|
+
offY: number;
|
|
12
|
+
dpr: number;
|
|
13
|
+
}
|
|
14
|
+
interface MinimapViewportPlan {
|
|
15
|
+
/** The camera rectangle under the unchanged full-world transform. */
|
|
16
|
+
raw: MinimapRect;
|
|
17
|
+
/** The visible portion of `raw`; drawing it never loses every edge off-canvas. */
|
|
18
|
+
clipped: MinimapRect | null;
|
|
19
|
+
clippedEdges: {
|
|
20
|
+
left: boolean;
|
|
21
|
+
top: boolean;
|
|
22
|
+
right: boolean;
|
|
23
|
+
bottom: boolean;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
declare function createMinimapTransform(world: MinimapRect, pixelWidth: number, pixelHeight: number, dpr: number, cssPadding?: number): MinimapTransform;
|
|
27
|
+
declare function worldRectToMinimap(rect: MinimapRect, transform: MinimapTransform): MinimapRect;
|
|
28
|
+
declare function minimapViewportPlan(visible: MinimapRect, transform: MinimapTransform, pixelWidth: number, pixelHeight: number, strokeInset?: number): MinimapViewportPlan;
|
|
29
|
+
declare function minimapPointToWorld(pixel: {
|
|
30
|
+
x: number;
|
|
31
|
+
y: number;
|
|
32
|
+
}, transform: MinimapTransform): {
|
|
33
|
+
x: number;
|
|
34
|
+
y: number;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export { type MinimapRect, type MinimapTransform, type MinimapViewportPlan, createMinimapTransform, minimapPointToWorld, minimapViewportPlan, worldRectToMinimap };
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/** Geometry helpers shared by the buyer minimap renderer and its focused tests. */
|
|
2
|
+
interface MinimapRect {
|
|
3
|
+
x: number;
|
|
4
|
+
y: number;
|
|
5
|
+
width: number;
|
|
6
|
+
height: number;
|
|
7
|
+
}
|
|
8
|
+
interface MinimapTransform {
|
|
9
|
+
scale: number;
|
|
10
|
+
offX: number;
|
|
11
|
+
offY: number;
|
|
12
|
+
dpr: number;
|
|
13
|
+
}
|
|
14
|
+
interface MinimapViewportPlan {
|
|
15
|
+
/** The camera rectangle under the unchanged full-world transform. */
|
|
16
|
+
raw: MinimapRect;
|
|
17
|
+
/** The visible portion of `raw`; drawing it never loses every edge off-canvas. */
|
|
18
|
+
clipped: MinimapRect | null;
|
|
19
|
+
clippedEdges: {
|
|
20
|
+
left: boolean;
|
|
21
|
+
top: boolean;
|
|
22
|
+
right: boolean;
|
|
23
|
+
bottom: boolean;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
declare function createMinimapTransform(world: MinimapRect, pixelWidth: number, pixelHeight: number, dpr: number, cssPadding?: number): MinimapTransform;
|
|
27
|
+
declare function worldRectToMinimap(rect: MinimapRect, transform: MinimapTransform): MinimapRect;
|
|
28
|
+
declare function minimapViewportPlan(visible: MinimapRect, transform: MinimapTransform, pixelWidth: number, pixelHeight: number, strokeInset?: number): MinimapViewportPlan;
|
|
29
|
+
declare function minimapPointToWorld(pixel: {
|
|
30
|
+
x: number;
|
|
31
|
+
y: number;
|
|
32
|
+
}, transform: MinimapTransform): {
|
|
33
|
+
x: number;
|
|
34
|
+
y: number;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export { type MinimapRect, type MinimapTransform, type MinimapViewportPlan, createMinimapTransform, minimapPointToWorld, minimapViewportPlan, worldRectToMinimap };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function u(i,n,m,o,a=6){let e=a*o,t=Math.min((n-e*2)/Math.max(1,i.width),(m-e*2)/Math.max(1,i.height));return{scale:t,offX:(n-i.width*t)/2-i.x*t,offY:(m-i.height*t)/2-i.y*t,dpr:o}}function r(i,n){return{x:i.x*n.scale+n.offX,y:i.y*n.scale+n.offY,width:i.width*n.scale,height:i.height*n.scale}}function b(i,n,m,o,a=2){let e=r(i,n),t=Math.max(a,e.x),p=Math.max(a,e.y),c=Math.min(m-a,e.x+e.width),h=Math.min(o-a,e.y+e.height);return{raw:e,clipped:c>t&&h>p?{x:t,y:p,width:c-t,height:h-p}:null,clippedEdges:{left:e.x<a,top:e.y<a,right:e.x+e.width>m-a,bottom:e.y+e.height>o-a}}}function f(i,n){return{x:(i.x-n.offX)/n.scale,y:(i.y-n.offY)/n.scale}}export{u as createMinimapTransform,f as minimapPointToWorld,b as minimapViewportPlan,r as worldRectToMinimap};
|
|
@@ -56,6 +56,12 @@ interface Category {
|
|
|
56
56
|
* a single price (the `price` above).
|
|
57
57
|
*/
|
|
58
58
|
tiers?: CategoryTier[];
|
|
59
|
+
/**
|
|
60
|
+
* This category's inventory is never sellable (press, camera platforms,
|
|
61
|
+
* kills, promoter allocations). It needs no price to publish, buyers never
|
|
62
|
+
* see it as a ticket type, and holds on its seats are refused server-side.
|
|
63
|
+
*/
|
|
64
|
+
notForSale?: boolean;
|
|
59
65
|
}
|
|
60
66
|
interface ReferenceCategorySource {
|
|
61
67
|
assetId: string;
|
|
@@ -89,7 +95,35 @@ interface CategoryTier {
|
|
|
89
95
|
id: string;
|
|
90
96
|
name: string;
|
|
91
97
|
price: number;
|
|
98
|
+
/** ISO-4217 currency observed or confirmed for this option. Events still
|
|
99
|
+
* settle in one currency; an importer must ask for review when observed
|
|
100
|
+
* option currencies disagree instead of silently converting them. */
|
|
101
|
+
currency?: string;
|
|
102
|
+
/** Explicit buyer eligibility/booking meaning. Importers must never infer
|
|
103
|
+
* this from the tier's display name. Only `companion` has an automatic
|
|
104
|
+
* inventory pairing rule; the remaining values surface organizer guidance. */
|
|
105
|
+
restriction?: TicketTierRestriction;
|
|
106
|
+
/** Short organizer-authored guidance shown beside this ticket choice. */
|
|
107
|
+
buyerMessage?: string;
|
|
108
|
+
/** Optional evidence-backed scope. Absent means every seat in the category;
|
|
109
|
+
* present fields are ANDed. Booking labels remain the stable public identity. */
|
|
110
|
+
applicability?: TicketTierApplicability;
|
|
111
|
+
/** Why this option's label, price, currency and scope may be trusted. */
|
|
112
|
+
evidence?: TicketTierEvidence;
|
|
113
|
+
}
|
|
114
|
+
interface TicketTierApplicability {
|
|
115
|
+
/** Exact public booking labels for which this option was observed/approved. */
|
|
116
|
+
seatLabels?: string[];
|
|
117
|
+
/** At least one of these authored accommodations must be present. */
|
|
118
|
+
accessibility?: AccessibilityType[];
|
|
92
119
|
}
|
|
120
|
+
interface TicketTierEvidence {
|
|
121
|
+
provenance: 'public-host' | 'public-event' | 'user-confirmed';
|
|
122
|
+
/** Buyer-safe evidence description; never a secret URL or credential. */
|
|
123
|
+
sourceDescription: string;
|
|
124
|
+
capturedAt?: string;
|
|
125
|
+
}
|
|
126
|
+
type TicketTierRestriction = 'companion' | 'child' | 'senior' | 'student' | 'membership' | 'custom';
|
|
93
127
|
/**
|
|
94
128
|
* Accessibility accommodations a seat can carry. Mirrors the taxonomy real
|
|
95
129
|
* venues (and seats.io) expose so buyers can filter for exactly what they need
|
|
@@ -418,6 +452,15 @@ interface RowObject extends AuthoringObjectState {
|
|
|
418
452
|
boundaryBefore: 'start' | 'continuous' | 'break';
|
|
419
453
|
/** Buyer-facing row name; technical component `label` values never change. */
|
|
420
454
|
displayLabel: string;
|
|
455
|
+
/**
|
|
456
|
+
* Some imported venue formats author label placement independently on every
|
|
457
|
+
* physical row component (for example, a split row can show its name on
|
|
458
|
+
* both sides of each aisle). When true, the buyer renderer uses each
|
|
459
|
+
* component's own `labelPresentation` instead of collapsing the group to
|
|
460
|
+
* one logical label. Ordinary SeatLayer-authored segmented rows omit this
|
|
461
|
+
* and retain the single logical-row label contract.
|
|
462
|
+
*/
|
|
463
|
+
repeatLabelOnComponents?: boolean;
|
|
421
464
|
displayType?: string;
|
|
422
465
|
labelPresentation?: LabelPresentation;
|
|
423
466
|
viewFromSeatUrl?: string;
|
|
@@ -865,6 +908,11 @@ interface SectionObject extends AuthoringObjectState {
|
|
|
865
908
|
* the same kind as {@link height} and {@link rake}.
|
|
866
909
|
*/
|
|
867
910
|
surfaceKind?: 'flat' | 'rakedRows';
|
|
911
|
+
/** Evidence for physical 3D values that cannot be read directly from a 2D
|
|
912
|
+
* drawing. Importers mark conservative defaults as inferred; editing any of
|
|
913
|
+
* these properties through Designer/Copilot promotes that property to a
|
|
914
|
+
* reviewed, user-confirmed value without changing the 2D topology. */
|
|
915
|
+
physical3dProvenance?: Partial<Record<'height' | 'rake' | 'surfaceKind', Physical3dEvidence>>;
|
|
868
916
|
/** Uniform scale about the outline centroid (1 = as drawn). Scales members too. */
|
|
869
917
|
scale?: number;
|
|
870
918
|
/** 0–100: reviewed strength last used to bend member rows toward a common fitted arc. */
|
|
@@ -1025,6 +1073,10 @@ interface Floor {
|
|
|
1025
1073
|
* Range 0–120 m.
|
|
1026
1074
|
*/
|
|
1027
1075
|
baseHeightM?: number;
|
|
1076
|
+
/** Evidence for the absolute physical deck height. */
|
|
1077
|
+
physical3dProvenance?: {
|
|
1078
|
+
baseHeightM?: Physical3dEvidence;
|
|
1079
|
+
};
|
|
1028
1080
|
objects: ChartObject[];
|
|
1029
1081
|
focalPoint: Point;
|
|
1030
1082
|
/**
|
|
@@ -1050,6 +1102,12 @@ interface Floor {
|
|
|
1050
1102
|
/** Floor-scoped confidence evidence inherited before the venue default. */
|
|
1051
1103
|
confidenceEvidence?: SeatConfidenceEvidence;
|
|
1052
1104
|
}
|
|
1105
|
+
/** Durable publishing-review evidence for an editable physical 3D property. */
|
|
1106
|
+
interface Physical3dEvidence {
|
|
1107
|
+
status: 'inferred' | 'confirmed';
|
|
1108
|
+
source: 'public-2d-topology' | 'user-review';
|
|
1109
|
+
note: string;
|
|
1110
|
+
}
|
|
1053
1111
|
interface ReferenceCalibration {
|
|
1054
1112
|
type: 'two-point';
|
|
1055
1113
|
/** Points in immutable source-image pixels, selected by a human or trusted detector. */
|
|
@@ -1253,6 +1311,26 @@ interface ChartReferenceImage {
|
|
|
1253
1311
|
/** Server-derived semantic calibration without source-image coordinates. */
|
|
1254
1312
|
derivedScale?: ReferenceDerivedScale;
|
|
1255
1313
|
}
|
|
1314
|
+
/**
|
|
1315
|
+
* Durable responsive-layout rule for a venue arranged around a focal object.
|
|
1316
|
+
* Sections are rigid groups: their internal rows/seats never scale or deform;
|
|
1317
|
+
* only each group's anchor moves radially when the focal footprint needs more
|
|
1318
|
+
* room. Importers and authoring tools can rerun the same rule after a pitch,
|
|
1319
|
+
* stage or court changes size, even for very large section counts.
|
|
1320
|
+
*/
|
|
1321
|
+
interface RadialClearanceLayoutConstraint {
|
|
1322
|
+
id: string;
|
|
1323
|
+
kind: 'radial-clearance-v1';
|
|
1324
|
+
focalObjectIds: string[];
|
|
1325
|
+
sectionIds: string[];
|
|
1326
|
+
clearance: number;
|
|
1327
|
+
movement: 'rigid-section-groups';
|
|
1328
|
+
/** Last solved proportional expansion, retained as useful audit evidence. */
|
|
1329
|
+
resolvedExpansion: number;
|
|
1330
|
+
/** Focal center used for the last solve, allowing the authored ring to be reconstructed after edits. */
|
|
1331
|
+
resolvedFocalCenter?: Point;
|
|
1332
|
+
}
|
|
1333
|
+
type ChartLayoutConstraint = RadialClearanceLayoutConstraint;
|
|
1256
1334
|
interface ChartDoc {
|
|
1257
1335
|
version: 1;
|
|
1258
1336
|
name: string;
|
|
@@ -1270,6 +1348,8 @@ interface ChartDoc {
|
|
|
1270
1348
|
* is kept mirroring floor 0 so single-floor readers never branch. */
|
|
1271
1349
|
floors?: Floor[];
|
|
1272
1350
|
objects: ChartObject[];
|
|
1351
|
+
/** Re-runnable geometric relationships between focal components and sections. */
|
|
1352
|
+
layoutConstraints?: ChartLayoutConstraint[];
|
|
1273
1353
|
/**
|
|
1274
1354
|
* Private floor-plan source used for tracing, calibration, scanning and
|
|
1275
1355
|
* reference-backed generation. Buyer projections always remove this field.
|
|
@@ -1396,6 +1476,15 @@ interface RendererOptions extends RendererCallbacks {
|
|
|
1396
1476
|
exportMode?: boolean;
|
|
1397
1477
|
/** Max seats selectable at once (default 10). */
|
|
1398
1478
|
maxSelection?: number;
|
|
1479
|
+
/**
|
|
1480
|
+
* Buyer-surface fit refinement: on containers much taller than the venue's
|
|
1481
|
+
* projection (phones in portrait), zoomToFit may zoom past the strict
|
|
1482
|
+
* width-contain by a bounded amount (≤30%) so the venue is not a thin band
|
|
1483
|
+
* in a dark field. The overflow crops equally on both sides and the buyer
|
|
1484
|
+
* pans freely. Off for the designer and export pipeline, which must always
|
|
1485
|
+
* show the complete chart.
|
|
1486
|
+
*/
|
|
1487
|
+
portraitFitCrop?: boolean;
|
|
1399
1488
|
/** Only these statuses are clickable (default ['free']). */
|
|
1400
1489
|
selectableStatuses?: SeatStatus[];
|
|
1401
1490
|
/**
|
|
@@ -1509,6 +1598,18 @@ interface RenderedFreeTextEvidence {
|
|
|
1509
1598
|
};
|
|
1510
1599
|
hiddenReason?: 'below-minimum-size' | 'outside-viewport' | 'renderer-hidden';
|
|
1511
1600
|
}
|
|
1601
|
+
interface RenderedRowLabelEvidence {
|
|
1602
|
+
text: string;
|
|
1603
|
+
visible: boolean;
|
|
1604
|
+
renderedFontPx: number;
|
|
1605
|
+
ink: string;
|
|
1606
|
+
screenBox?: {
|
|
1607
|
+
x: number;
|
|
1608
|
+
y: number;
|
|
1609
|
+
width: number;
|
|
1610
|
+
height: number;
|
|
1611
|
+
};
|
|
1612
|
+
}
|
|
1512
1613
|
interface RenderedGAAreaEvidence {
|
|
1513
1614
|
areaId: string;
|
|
1514
1615
|
label: string;
|
|
@@ -1569,6 +1670,7 @@ interface RendererQualityEvidence {
|
|
|
1569
1670
|
gaAreas: RenderedGAAreaEvidence[];
|
|
1570
1671
|
hierarchyLabels: RenderedHierarchyLabelEvidence[];
|
|
1571
1672
|
freeTextLabels: RenderedFreeTextEvidence[];
|
|
1673
|
+
rowLabels: RenderedRowLabelEvidence[];
|
|
1572
1674
|
}
|
|
1573
1675
|
interface ISeatmapRenderer {
|
|
1574
1676
|
/** Replace the chart. Resets selection and statuses, zooms to fit.
|
|
@@ -1654,6 +1756,8 @@ interface ISeatmapRenderer {
|
|
|
1654
1756
|
*/
|
|
1655
1757
|
flashSection?(sectionId: string, color?: string): void;
|
|
1656
1758
|
zoomToFit(): void;
|
|
1759
|
+
/** Refit the active section when focused; otherwise frame the current floor/view. */
|
|
1760
|
+
refitCurrentView?(): void;
|
|
1657
1761
|
/** Zoom in one step about the viewport center, clamped to the usual zoom bounds. */
|
|
1658
1762
|
zoomIn(): void;
|
|
1659
1763
|
/** Zoom out one step about the viewport center, clamped to the usual zoom bounds. */
|
|
@@ -1719,6 +1823,11 @@ interface ISeatmapRenderer {
|
|
|
1719
1823
|
width: number;
|
|
1720
1824
|
height: number;
|
|
1721
1825
|
};
|
|
1826
|
+
/** Current rendered (not raw-source) geometry for an interactive overview.
|
|
1827
|
+
* Multi-floor overview transforms are already applied to these coordinates. */
|
|
1828
|
+
getMinimapSnapshot?(): RendererMinimapSnapshot;
|
|
1829
|
+
/** Pan without changing zoom so `point` becomes the viewport centre. */
|
|
1830
|
+
panToWorld?(point: Point): void;
|
|
1722
1831
|
/**
|
|
1723
1832
|
* Colorblind-safe mode: category hues switch to an Okabe-Ito palette and
|
|
1724
1833
|
* booked seats render hollow (a non-color cue), so seat state never relies
|
|
@@ -1744,6 +1853,9 @@ interface ISeatmapRenderer {
|
|
|
1744
1853
|
/** Render all floors stacked (3D overview) vs the active floor. No-op single-floor. */
|
|
1745
1854
|
setStacked?(on: boolean): void;
|
|
1746
1855
|
isStacked?(): boolean;
|
|
1856
|
+
/** Render every floor in its authored 2D coordinates so the buyer can choose a level. */
|
|
1857
|
+
setFloorOverview?(on: boolean): void;
|
|
1858
|
+
isFloorOverview?(): boolean;
|
|
1747
1859
|
/**
|
|
1748
1860
|
* Section id whose outline contains a container-relative screen point (or null).
|
|
1749
1861
|
* Feeds the far-zoom "tap a section to zoom in" flow (Slice 5).
|
|
@@ -1775,7 +1887,25 @@ interface ISeatmapRenderer {
|
|
|
1775
1887
|
getRenderedQualityEvidence(): RendererQualityEvidence;
|
|
1776
1888
|
destroy(): void;
|
|
1777
1889
|
}
|
|
1890
|
+
interface RendererMinimapSection {
|
|
1891
|
+
id: string;
|
|
1892
|
+
label: string;
|
|
1893
|
+
outline: Point[];
|
|
1894
|
+
floorId?: string;
|
|
1895
|
+
state: 'selected' | 'available' | 'inactive';
|
|
1896
|
+
active: boolean;
|
|
1897
|
+
}
|
|
1898
|
+
interface RendererMinimapSeat {
|
|
1899
|
+
x: number;
|
|
1900
|
+
y: number;
|
|
1901
|
+
categoryKey: string;
|
|
1902
|
+
state: 'selected' | 'available' | 'inactive';
|
|
1903
|
+
}
|
|
1904
|
+
interface RendererMinimapSnapshot {
|
|
1905
|
+
sections: RendererMinimapSection[];
|
|
1906
|
+
seats: RendererMinimapSeat[];
|
|
1907
|
+
}
|
|
1778
1908
|
/** localStorage key the Designer writes and the Picker reads. */
|
|
1779
1909
|
declare const CHART_STORAGE_KEY = "seatmap.chart";
|
|
1780
1910
|
|
|
1781
|
-
export { type
|
|
1911
|
+
export { type ReferenceScanRowProposal as $, type AccessibilityType as A, type BoothObject as B, type ChartDoc as C, type CubicPath as D, type ExpandedSeat as E, type Floor as F, type GAAreaObject as G, type DecorImageObject as H, type ISeatmapRenderer as I, LABEL_STYLE_MAX_SIZE as J, LABEL_STYLE_MIN_SIZE as K, type LabelStyle as L, type LabelPresentation as M, type Physical3dEvidence as N, type ObjectEditorState as O, type Point as P, type RadialClearanceLayoutConstraint as Q, type ResolvedSeatConfidenceEvidence as R, type SeatOverride as S, type TableObject as T, type ReferenceAccessibilitySource as U, type ReferenceCalibration as V, type ReferenceCategorySource as W, type ReferenceDerivedScale as X, type ReferenceInventoryExclusionSource as Y, type ReferenceInventorySource as Z, type ReferenceScanProposal as _, type RowObject as a, type ReferenceScanSectionProposal as a0, type ReferenceSeatSeed as a1, type ReferenceSectionTraceBatchInput as a2, type ReferenceSectionTraceBatchProposal as a3, type ReferenceSectionTraceInput as a4, type ReferenceSectionTraceProposal as a5, type RenderedBookableLabelEvidence as a6, type RenderedGAAreaEvidence as a7, type RenderedHierarchyLabelEvidence as a8, type RenderedLabelHiddenReason as a9, type ZoneDef as aA, accessibilityMeta as aB, accessibilityRingColor as aC, layerOf as aD, seatCommercialMeta as aE, type RenderedRowLabelEvidence as aa, type RendererMinimapSeat as ab, type RendererMinimapSection as ac, SEAT_COMMERCIAL_MARKS as ad, SURROUNDINGS_SHAPE_ROLES as ae, type SeatCommercialMark as af, type SeatCommercialMeta as ag, type SeatConfidenceCoverage as ah, type SeatConfidenceEvidence as ai, type SeatConfidenceModelLevel as aj, type SeatConfidenceModeledTarget as ak, type SeatConfidenceRealityLevel as al, type SeatViewCoverage as am, type SectionOutlinePath as an, type SectionPathSegment as ao, type SelectionLayer as ap, type ShapeLineCap as aq, type ShapeLineEnding as ar, type ShapeLineJoin as as, type ShapeObject as at, type TextAlignment as au, type TextBackground as av, type TextObject as aw, type TicketTierApplicability as ax, type TicketTierEvidence as ay, type TicketTierRestriction as az, type SeatViewMetadata as b, type RectTableSide as c, type ChartObject as d, type SectionObject as e, type RectTableSeatCounts as f, type GAInventorySegment as g, type RendererQualityEvidence as h, type RenderedFreeTextEvidence as i, type RendererOptions as j, type SeatStatus as k, type RendererViewMode as l, type RendererMinimapSnapshot as m, type LodRung as n, type CategoryTier as o, type SeatCommercialAttributes as p, type RendererCallbacks as q, ACCESSIBILITY_RING_COLOR as r, ACCESSIBILITY_TYPES as s, type AccessibilityMeta as t, type AuthoringObjectState as u, CHART_STORAGE_KEY as v, type Category as w, type ChartLayoutConstraint as x, type ChartReferenceImage as y, type ChartTheme as z };
|
|
@@ -56,6 +56,12 @@ interface Category {
|
|
|
56
56
|
* a single price (the `price` above).
|
|
57
57
|
*/
|
|
58
58
|
tiers?: CategoryTier[];
|
|
59
|
+
/**
|
|
60
|
+
* This category's inventory is never sellable (press, camera platforms,
|
|
61
|
+
* kills, promoter allocations). It needs no price to publish, buyers never
|
|
62
|
+
* see it as a ticket type, and holds on its seats are refused server-side.
|
|
63
|
+
*/
|
|
64
|
+
notForSale?: boolean;
|
|
59
65
|
}
|
|
60
66
|
interface ReferenceCategorySource {
|
|
61
67
|
assetId: string;
|
|
@@ -89,7 +95,35 @@ interface CategoryTier {
|
|
|
89
95
|
id: string;
|
|
90
96
|
name: string;
|
|
91
97
|
price: number;
|
|
98
|
+
/** ISO-4217 currency observed or confirmed for this option. Events still
|
|
99
|
+
* settle in one currency; an importer must ask for review when observed
|
|
100
|
+
* option currencies disagree instead of silently converting them. */
|
|
101
|
+
currency?: string;
|
|
102
|
+
/** Explicit buyer eligibility/booking meaning. Importers must never infer
|
|
103
|
+
* this from the tier's display name. Only `companion` has an automatic
|
|
104
|
+
* inventory pairing rule; the remaining values surface organizer guidance. */
|
|
105
|
+
restriction?: TicketTierRestriction;
|
|
106
|
+
/** Short organizer-authored guidance shown beside this ticket choice. */
|
|
107
|
+
buyerMessage?: string;
|
|
108
|
+
/** Optional evidence-backed scope. Absent means every seat in the category;
|
|
109
|
+
* present fields are ANDed. Booking labels remain the stable public identity. */
|
|
110
|
+
applicability?: TicketTierApplicability;
|
|
111
|
+
/** Why this option's label, price, currency and scope may be trusted. */
|
|
112
|
+
evidence?: TicketTierEvidence;
|
|
113
|
+
}
|
|
114
|
+
interface TicketTierApplicability {
|
|
115
|
+
/** Exact public booking labels for which this option was observed/approved. */
|
|
116
|
+
seatLabels?: string[];
|
|
117
|
+
/** At least one of these authored accommodations must be present. */
|
|
118
|
+
accessibility?: AccessibilityType[];
|
|
92
119
|
}
|
|
120
|
+
interface TicketTierEvidence {
|
|
121
|
+
provenance: 'public-host' | 'public-event' | 'user-confirmed';
|
|
122
|
+
/** Buyer-safe evidence description; never a secret URL or credential. */
|
|
123
|
+
sourceDescription: string;
|
|
124
|
+
capturedAt?: string;
|
|
125
|
+
}
|
|
126
|
+
type TicketTierRestriction = 'companion' | 'child' | 'senior' | 'student' | 'membership' | 'custom';
|
|
93
127
|
/**
|
|
94
128
|
* Accessibility accommodations a seat can carry. Mirrors the taxonomy real
|
|
95
129
|
* venues (and seats.io) expose so buyers can filter for exactly what they need
|
|
@@ -418,6 +452,15 @@ interface RowObject extends AuthoringObjectState {
|
|
|
418
452
|
boundaryBefore: 'start' | 'continuous' | 'break';
|
|
419
453
|
/** Buyer-facing row name; technical component `label` values never change. */
|
|
420
454
|
displayLabel: string;
|
|
455
|
+
/**
|
|
456
|
+
* Some imported venue formats author label placement independently on every
|
|
457
|
+
* physical row component (for example, a split row can show its name on
|
|
458
|
+
* both sides of each aisle). When true, the buyer renderer uses each
|
|
459
|
+
* component's own `labelPresentation` instead of collapsing the group to
|
|
460
|
+
* one logical label. Ordinary SeatLayer-authored segmented rows omit this
|
|
461
|
+
* and retain the single logical-row label contract.
|
|
462
|
+
*/
|
|
463
|
+
repeatLabelOnComponents?: boolean;
|
|
421
464
|
displayType?: string;
|
|
422
465
|
labelPresentation?: LabelPresentation;
|
|
423
466
|
viewFromSeatUrl?: string;
|
|
@@ -865,6 +908,11 @@ interface SectionObject extends AuthoringObjectState {
|
|
|
865
908
|
* the same kind as {@link height} and {@link rake}.
|
|
866
909
|
*/
|
|
867
910
|
surfaceKind?: 'flat' | 'rakedRows';
|
|
911
|
+
/** Evidence for physical 3D values that cannot be read directly from a 2D
|
|
912
|
+
* drawing. Importers mark conservative defaults as inferred; editing any of
|
|
913
|
+
* these properties through Designer/Copilot promotes that property to a
|
|
914
|
+
* reviewed, user-confirmed value without changing the 2D topology. */
|
|
915
|
+
physical3dProvenance?: Partial<Record<'height' | 'rake' | 'surfaceKind', Physical3dEvidence>>;
|
|
868
916
|
/** Uniform scale about the outline centroid (1 = as drawn). Scales members too. */
|
|
869
917
|
scale?: number;
|
|
870
918
|
/** 0–100: reviewed strength last used to bend member rows toward a common fitted arc. */
|
|
@@ -1025,6 +1073,10 @@ interface Floor {
|
|
|
1025
1073
|
* Range 0–120 m.
|
|
1026
1074
|
*/
|
|
1027
1075
|
baseHeightM?: number;
|
|
1076
|
+
/** Evidence for the absolute physical deck height. */
|
|
1077
|
+
physical3dProvenance?: {
|
|
1078
|
+
baseHeightM?: Physical3dEvidence;
|
|
1079
|
+
};
|
|
1028
1080
|
objects: ChartObject[];
|
|
1029
1081
|
focalPoint: Point;
|
|
1030
1082
|
/**
|
|
@@ -1050,6 +1102,12 @@ interface Floor {
|
|
|
1050
1102
|
/** Floor-scoped confidence evidence inherited before the venue default. */
|
|
1051
1103
|
confidenceEvidence?: SeatConfidenceEvidence;
|
|
1052
1104
|
}
|
|
1105
|
+
/** Durable publishing-review evidence for an editable physical 3D property. */
|
|
1106
|
+
interface Physical3dEvidence {
|
|
1107
|
+
status: 'inferred' | 'confirmed';
|
|
1108
|
+
source: 'public-2d-topology' | 'user-review';
|
|
1109
|
+
note: string;
|
|
1110
|
+
}
|
|
1053
1111
|
interface ReferenceCalibration {
|
|
1054
1112
|
type: 'two-point';
|
|
1055
1113
|
/** Points in immutable source-image pixels, selected by a human or trusted detector. */
|
|
@@ -1253,6 +1311,26 @@ interface ChartReferenceImage {
|
|
|
1253
1311
|
/** Server-derived semantic calibration without source-image coordinates. */
|
|
1254
1312
|
derivedScale?: ReferenceDerivedScale;
|
|
1255
1313
|
}
|
|
1314
|
+
/**
|
|
1315
|
+
* Durable responsive-layout rule for a venue arranged around a focal object.
|
|
1316
|
+
* Sections are rigid groups: their internal rows/seats never scale or deform;
|
|
1317
|
+
* only each group's anchor moves radially when the focal footprint needs more
|
|
1318
|
+
* room. Importers and authoring tools can rerun the same rule after a pitch,
|
|
1319
|
+
* stage or court changes size, even for very large section counts.
|
|
1320
|
+
*/
|
|
1321
|
+
interface RadialClearanceLayoutConstraint {
|
|
1322
|
+
id: string;
|
|
1323
|
+
kind: 'radial-clearance-v1';
|
|
1324
|
+
focalObjectIds: string[];
|
|
1325
|
+
sectionIds: string[];
|
|
1326
|
+
clearance: number;
|
|
1327
|
+
movement: 'rigid-section-groups';
|
|
1328
|
+
/** Last solved proportional expansion, retained as useful audit evidence. */
|
|
1329
|
+
resolvedExpansion: number;
|
|
1330
|
+
/** Focal center used for the last solve, allowing the authored ring to be reconstructed after edits. */
|
|
1331
|
+
resolvedFocalCenter?: Point;
|
|
1332
|
+
}
|
|
1333
|
+
type ChartLayoutConstraint = RadialClearanceLayoutConstraint;
|
|
1256
1334
|
interface ChartDoc {
|
|
1257
1335
|
version: 1;
|
|
1258
1336
|
name: string;
|
|
@@ -1270,6 +1348,8 @@ interface ChartDoc {
|
|
|
1270
1348
|
* is kept mirroring floor 0 so single-floor readers never branch. */
|
|
1271
1349
|
floors?: Floor[];
|
|
1272
1350
|
objects: ChartObject[];
|
|
1351
|
+
/** Re-runnable geometric relationships between focal components and sections. */
|
|
1352
|
+
layoutConstraints?: ChartLayoutConstraint[];
|
|
1273
1353
|
/**
|
|
1274
1354
|
* Private floor-plan source used for tracing, calibration, scanning and
|
|
1275
1355
|
* reference-backed generation. Buyer projections always remove this field.
|
|
@@ -1396,6 +1476,15 @@ interface RendererOptions extends RendererCallbacks {
|
|
|
1396
1476
|
exportMode?: boolean;
|
|
1397
1477
|
/** Max seats selectable at once (default 10). */
|
|
1398
1478
|
maxSelection?: number;
|
|
1479
|
+
/**
|
|
1480
|
+
* Buyer-surface fit refinement: on containers much taller than the venue's
|
|
1481
|
+
* projection (phones in portrait), zoomToFit may zoom past the strict
|
|
1482
|
+
* width-contain by a bounded amount (≤30%) so the venue is not a thin band
|
|
1483
|
+
* in a dark field. The overflow crops equally on both sides and the buyer
|
|
1484
|
+
* pans freely. Off for the designer and export pipeline, which must always
|
|
1485
|
+
* show the complete chart.
|
|
1486
|
+
*/
|
|
1487
|
+
portraitFitCrop?: boolean;
|
|
1399
1488
|
/** Only these statuses are clickable (default ['free']). */
|
|
1400
1489
|
selectableStatuses?: SeatStatus[];
|
|
1401
1490
|
/**
|
|
@@ -1509,6 +1598,18 @@ interface RenderedFreeTextEvidence {
|
|
|
1509
1598
|
};
|
|
1510
1599
|
hiddenReason?: 'below-minimum-size' | 'outside-viewport' | 'renderer-hidden';
|
|
1511
1600
|
}
|
|
1601
|
+
interface RenderedRowLabelEvidence {
|
|
1602
|
+
text: string;
|
|
1603
|
+
visible: boolean;
|
|
1604
|
+
renderedFontPx: number;
|
|
1605
|
+
ink: string;
|
|
1606
|
+
screenBox?: {
|
|
1607
|
+
x: number;
|
|
1608
|
+
y: number;
|
|
1609
|
+
width: number;
|
|
1610
|
+
height: number;
|
|
1611
|
+
};
|
|
1612
|
+
}
|
|
1512
1613
|
interface RenderedGAAreaEvidence {
|
|
1513
1614
|
areaId: string;
|
|
1514
1615
|
label: string;
|
|
@@ -1569,6 +1670,7 @@ interface RendererQualityEvidence {
|
|
|
1569
1670
|
gaAreas: RenderedGAAreaEvidence[];
|
|
1570
1671
|
hierarchyLabels: RenderedHierarchyLabelEvidence[];
|
|
1571
1672
|
freeTextLabels: RenderedFreeTextEvidence[];
|
|
1673
|
+
rowLabels: RenderedRowLabelEvidence[];
|
|
1572
1674
|
}
|
|
1573
1675
|
interface ISeatmapRenderer {
|
|
1574
1676
|
/** Replace the chart. Resets selection and statuses, zooms to fit.
|
|
@@ -1654,6 +1756,8 @@ interface ISeatmapRenderer {
|
|
|
1654
1756
|
*/
|
|
1655
1757
|
flashSection?(sectionId: string, color?: string): void;
|
|
1656
1758
|
zoomToFit(): void;
|
|
1759
|
+
/** Refit the active section when focused; otherwise frame the current floor/view. */
|
|
1760
|
+
refitCurrentView?(): void;
|
|
1657
1761
|
/** Zoom in one step about the viewport center, clamped to the usual zoom bounds. */
|
|
1658
1762
|
zoomIn(): void;
|
|
1659
1763
|
/** Zoom out one step about the viewport center, clamped to the usual zoom bounds. */
|
|
@@ -1719,6 +1823,11 @@ interface ISeatmapRenderer {
|
|
|
1719
1823
|
width: number;
|
|
1720
1824
|
height: number;
|
|
1721
1825
|
};
|
|
1826
|
+
/** Current rendered (not raw-source) geometry for an interactive overview.
|
|
1827
|
+
* Multi-floor overview transforms are already applied to these coordinates. */
|
|
1828
|
+
getMinimapSnapshot?(): RendererMinimapSnapshot;
|
|
1829
|
+
/** Pan without changing zoom so `point` becomes the viewport centre. */
|
|
1830
|
+
panToWorld?(point: Point): void;
|
|
1722
1831
|
/**
|
|
1723
1832
|
* Colorblind-safe mode: category hues switch to an Okabe-Ito palette and
|
|
1724
1833
|
* booked seats render hollow (a non-color cue), so seat state never relies
|
|
@@ -1744,6 +1853,9 @@ interface ISeatmapRenderer {
|
|
|
1744
1853
|
/** Render all floors stacked (3D overview) vs the active floor. No-op single-floor. */
|
|
1745
1854
|
setStacked?(on: boolean): void;
|
|
1746
1855
|
isStacked?(): boolean;
|
|
1856
|
+
/** Render every floor in its authored 2D coordinates so the buyer can choose a level. */
|
|
1857
|
+
setFloorOverview?(on: boolean): void;
|
|
1858
|
+
isFloorOverview?(): boolean;
|
|
1747
1859
|
/**
|
|
1748
1860
|
* Section id whose outline contains a container-relative screen point (or null).
|
|
1749
1861
|
* Feeds the far-zoom "tap a section to zoom in" flow (Slice 5).
|
|
@@ -1775,7 +1887,25 @@ interface ISeatmapRenderer {
|
|
|
1775
1887
|
getRenderedQualityEvidence(): RendererQualityEvidence;
|
|
1776
1888
|
destroy(): void;
|
|
1777
1889
|
}
|
|
1890
|
+
interface RendererMinimapSection {
|
|
1891
|
+
id: string;
|
|
1892
|
+
label: string;
|
|
1893
|
+
outline: Point[];
|
|
1894
|
+
floorId?: string;
|
|
1895
|
+
state: 'selected' | 'available' | 'inactive';
|
|
1896
|
+
active: boolean;
|
|
1897
|
+
}
|
|
1898
|
+
interface RendererMinimapSeat {
|
|
1899
|
+
x: number;
|
|
1900
|
+
y: number;
|
|
1901
|
+
categoryKey: string;
|
|
1902
|
+
state: 'selected' | 'available' | 'inactive';
|
|
1903
|
+
}
|
|
1904
|
+
interface RendererMinimapSnapshot {
|
|
1905
|
+
sections: RendererMinimapSection[];
|
|
1906
|
+
seats: RendererMinimapSeat[];
|
|
1907
|
+
}
|
|
1778
1908
|
/** localStorage key the Designer writes and the Picker reads. */
|
|
1779
1909
|
declare const CHART_STORAGE_KEY = "seatmap.chart";
|
|
1780
1910
|
|
|
1781
|
-
export { type
|
|
1911
|
+
export { type ReferenceScanRowProposal as $, type AccessibilityType as A, type BoothObject as B, type ChartDoc as C, type CubicPath as D, type ExpandedSeat as E, type Floor as F, type GAAreaObject as G, type DecorImageObject as H, type ISeatmapRenderer as I, LABEL_STYLE_MAX_SIZE as J, LABEL_STYLE_MIN_SIZE as K, type LabelStyle as L, type LabelPresentation as M, type Physical3dEvidence as N, type ObjectEditorState as O, type Point as P, type RadialClearanceLayoutConstraint as Q, type ResolvedSeatConfidenceEvidence as R, type SeatOverride as S, type TableObject as T, type ReferenceAccessibilitySource as U, type ReferenceCalibration as V, type ReferenceCategorySource as W, type ReferenceDerivedScale as X, type ReferenceInventoryExclusionSource as Y, type ReferenceInventorySource as Z, type ReferenceScanProposal as _, type RowObject as a, type ReferenceScanSectionProposal as a0, type ReferenceSeatSeed as a1, type ReferenceSectionTraceBatchInput as a2, type ReferenceSectionTraceBatchProposal as a3, type ReferenceSectionTraceInput as a4, type ReferenceSectionTraceProposal as a5, type RenderedBookableLabelEvidence as a6, type RenderedGAAreaEvidence as a7, type RenderedHierarchyLabelEvidence as a8, type RenderedLabelHiddenReason as a9, type ZoneDef as aA, accessibilityMeta as aB, accessibilityRingColor as aC, layerOf as aD, seatCommercialMeta as aE, type RenderedRowLabelEvidence as aa, type RendererMinimapSeat as ab, type RendererMinimapSection as ac, SEAT_COMMERCIAL_MARKS as ad, SURROUNDINGS_SHAPE_ROLES as ae, type SeatCommercialMark as af, type SeatCommercialMeta as ag, type SeatConfidenceCoverage as ah, type SeatConfidenceEvidence as ai, type SeatConfidenceModelLevel as aj, type SeatConfidenceModeledTarget as ak, type SeatConfidenceRealityLevel as al, type SeatViewCoverage as am, type SectionOutlinePath as an, type SectionPathSegment as ao, type SelectionLayer as ap, type ShapeLineCap as aq, type ShapeLineEnding as ar, type ShapeLineJoin as as, type ShapeObject as at, type TextAlignment as au, type TextBackground as av, type TextObject as aw, type TicketTierApplicability as ax, type TicketTierEvidence as ay, type TicketTierRestriction as az, type SeatViewMetadata as b, type RectTableSide as c, type ChartObject as d, type SectionObject as e, type RectTableSeatCounts as f, type GAInventorySegment as g, type RendererQualityEvidence as h, type RenderedFreeTextEvidence as i, type RendererOptions as j, type SeatStatus as k, type RendererViewMode as l, type RendererMinimapSnapshot as m, type LodRung as n, type CategoryTier as o, type SeatCommercialAttributes as p, type RendererCallbacks as q, ACCESSIBILITY_RING_COLOR as r, ACCESSIBILITY_TYPES as s, type AccessibilityMeta as t, type AuthoringObjectState as u, CHART_STORAGE_KEY as v, type Category as w, type ChartLayoutConstraint as x, type ChartReferenceImage as y, type ChartTheme as z };
|