@seatlayer/js 0.93.0 → 0.95.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/README.md +9 -0
- package/dist/{channelsMode-B41tbE29.d.cts → channelsMode-7x0h8OuH.d.cts} +286 -28
- package/dist/{channelsMode-B41tbE29.d.ts → channelsMode-7x0h8OuH.d.ts} +286 -28
- package/dist/channelsMode-YJO6FOPD.js +1 -0
- package/dist/{chunk-5VGXB6GJ.js → chunk-DR5JXWLO.js} +208 -228
- package/dist/chunk-JELR6YYZ.js +1 -0
- package/dist/index.cjs +18 -18
- package/dist/index.d.cts +93 -25
- package/dist/index.d.ts +93 -25
- package/dist/index.js +19 -19
- package/dist/manager.cjs +549 -347
- package/dist/manager.d.cts +2 -2
- package/dist/manager.d.ts +2 -2
- package/dist/manager.js +341 -119
- package/package.json +2 -2
- package/dist/channelsMode-KZU235GN.js +0 -1
package/README.md
CHANGED
|
@@ -302,6 +302,15 @@ source compatibility, but new code should use the manager subpath consistently.
|
|
|
302
302
|
managed sales from trusted server code through the inventory booking API; the
|
|
303
303
|
cockpit's public methods are limited to operations it can actually complete.
|
|
304
304
|
|
|
305
|
+
A host that sells from the map—a counter that brings its own search, totals and
|
|
306
|
+
payment—can mount just the map with `chrome: 'minimal'` (the live map, zoom and
|
|
307
|
+
Venue; no tool bar, side rail, legend or mini-map). In Select mode,
|
|
308
|
+
`onAreaClick({ id, label, name })` reports a tap on a standing area, which is
|
|
309
|
+
sold by quantity rather than selected, and `focusSection(label)` frames a
|
|
310
|
+
section without filtering, dimming or touching the selection (`zoomToFit()`
|
|
311
|
+
returns to the whole venue). A table sold as one unit paints all its chairs
|
|
312
|
+
with the table's status.
|
|
313
|
+
|
|
305
314
|
Switching tools and rotating tokens happen in place: the renderer, camera,
|
|
306
315
|
selection, WebSocket, and DOM are not remounted. Give the container a height;
|
|
307
316
|
the cockpit responds to its container rather than the browser viewport.
|
|
@@ -644,6 +644,16 @@ interface EventCategoryAssignmentResult {
|
|
|
644
644
|
categoryKey: string;
|
|
645
645
|
revision: number;
|
|
646
646
|
}
|
|
647
|
+
/** GET /category-assignments: what differs from the chart (list capped, count exact). */
|
|
648
|
+
interface EventCategoryDifferences {
|
|
649
|
+
chartAvailable: boolean;
|
|
650
|
+
differing: number;
|
|
651
|
+
units: Array<{
|
|
652
|
+
label: string;
|
|
653
|
+
categoryKey: string;
|
|
654
|
+
chartCategoryKey: string;
|
|
655
|
+
}>;
|
|
656
|
+
}
|
|
647
657
|
type EventTableBookingMode = 'individual' | 'whole' | 'variable';
|
|
648
658
|
interface EventTableBookingResult {
|
|
649
659
|
ok: true;
|
|
@@ -901,6 +911,15 @@ declare class ManageApi {
|
|
|
901
911
|
* snapshots retain their original configured value; future selection uses
|
|
902
912
|
* the new category. Requires `event:categories:manage`. */
|
|
903
913
|
setCategory(key: string, labels: string[], categoryKey: string): Promise<EventCategoryAssignmentResult>;
|
|
914
|
+
/**
|
|
915
|
+
* The inventory units this event sells under a different category than the
|
|
916
|
+
* chart currently does — what "Reset to chart defaults" would put back.
|
|
917
|
+
* Requires `event:view`.
|
|
918
|
+
*/
|
|
919
|
+
categoryDifferences(key: string): Promise<EventCategoryDifferences>;
|
|
920
|
+
/** Put every unit (or only `labels`) back on the chart's category, in one
|
|
921
|
+
* write. Requires `event:categories:manage`. */
|
|
922
|
+
resetCategoriesToChart(key: string, labels?: string[]): Promise<EventCategoryAssignmentResult>;
|
|
904
923
|
/** Change event-only table booking identity. The server refuses tables with
|
|
905
924
|
* held/booked/blocked inventory or channel assignments that would be lost. */
|
|
906
925
|
setTableBooking(key: string, tableIds: string[], mode: EventTableBookingMode, bounds?: {
|
|
@@ -1118,6 +1137,56 @@ declare class ManageApi {
|
|
|
1118
1137
|
reportCsv(key: string): Promise<Blob>;
|
|
1119
1138
|
}
|
|
1120
1139
|
|
|
1140
|
+
/**
|
|
1141
|
+
* blockPaint — the organizer's paint for a section block (plan item 7, slice C).
|
|
1142
|
+
*
|
|
1143
|
+
* What a block says to the organizer at the overview: its name, and an
|
|
1144
|
+
* availability tint — the share of seats still free, in three bands the
|
|
1145
|
+
* legend beside the map spells out — the way every ops board with sixty
|
|
1146
|
+
* blocks does it. Text on every block is noise at low zoom; a tint reads
|
|
1147
|
+
* at a glance; the exact figure belongs on the hover card and the crumb.
|
|
1148
|
+
* A closed or hidden section (the Sections tool's rules) wears the neutral
|
|
1149
|
+
* and its state word; sold out is its own word.
|
|
1150
|
+
*
|
|
1151
|
+
* Pure: the engine hands a reading, this answers a paint. SeatManager wires
|
|
1152
|
+
* it and re-asks on every tally or rule change.
|
|
1153
|
+
*/
|
|
1154
|
+
|
|
1155
|
+
/**
|
|
1156
|
+
* What the map's colours mean: how full each place is, or its ticket type.
|
|
1157
|
+
* ONE setting drives the blocks, the seats and the minimap together, so a
|
|
1158
|
+
* colour never changes meaning as the organizer zooms. It is the View menu's
|
|
1159
|
+
* category-colours state, shown as a choice (`type` = category colours on).
|
|
1160
|
+
*/
|
|
1161
|
+
type ColourBy = 'full' | 'type';
|
|
1162
|
+
|
|
1163
|
+
/**
|
|
1164
|
+
* The control room's View menu (plan item 5, slice D).
|
|
1165
|
+
*
|
|
1166
|
+
* Toggles that change how the map READS, never what it holds: seat labels,
|
|
1167
|
+
* row labels, channel colours, booking momentum — and category colours, which
|
|
1168
|
+
* the legend offers as "Colour by: How full · Ticket type".
|
|
1169
|
+
* The letters are the ones seats.io operators already know (S · R · G · H ·
|
|
1170
|
+
* M), ridden on Shift because the tool tabs own the bare letters (S is
|
|
1171
|
+
* Sections, G is Categories, M is Monitor).
|
|
1172
|
+
*
|
|
1173
|
+
* The set is remembered per browser: an operator who works with labels off
|
|
1174
|
+
* keeps them off tomorrow. Storage is a convenience, never a dependency —
|
|
1175
|
+
* a private window or a blocked store simply starts from the defaults.
|
|
1176
|
+
*
|
|
1177
|
+
* Pure where it can be: the model, the markup and the storage rules are
|
|
1178
|
+
* here and tested without a cockpit; SeatManager owns the state and the
|
|
1179
|
+
* renderer calls.
|
|
1180
|
+
*/
|
|
1181
|
+
|
|
1182
|
+
interface MapView {
|
|
1183
|
+
seatLabels: boolean;
|
|
1184
|
+
rowLabels: boolean;
|
|
1185
|
+
categoryColours: boolean;
|
|
1186
|
+
channelColours: boolean;
|
|
1187
|
+
momentum: boolean;
|
|
1188
|
+
}
|
|
1189
|
+
|
|
1121
1190
|
/**
|
|
1122
1191
|
* managerTypes — the SeatManager cockpit's public contract (options, the
|
|
1123
1192
|
* capability set, the tallies/activity/connection payloads a host subscribes to)
|
|
@@ -1180,7 +1249,7 @@ interface SeatManagerActivity {
|
|
|
1180
1249
|
}
|
|
1181
1250
|
/** Fired after a successful organizer action, for host toasts/telemetry. */
|
|
1182
1251
|
interface SeatManagerActionResult {
|
|
1183
|
-
action: 'block' | 'unblock' | 'unblockAll' | 'cancelBooking' | 'setHoldTtl' | 'setCategory' | 'setTableBooking';
|
|
1252
|
+
action: 'block' | 'unblock' | 'unblockAll' | 'cancelBooking' | 'setHoldTtl' | 'setCategory' | 'resetCategories' | 'setTableBooking';
|
|
1184
1253
|
labels: string[];
|
|
1185
1254
|
count: number;
|
|
1186
1255
|
}
|
|
@@ -1199,6 +1268,13 @@ interface SeatManagerFilteredSection {
|
|
|
1199
1268
|
seatCount: number;
|
|
1200
1269
|
zone?: string;
|
|
1201
1270
|
}
|
|
1271
|
+
/** A standing (GA) area as the host sees it. */
|
|
1272
|
+
interface SeatManagerArea {
|
|
1273
|
+
id: string;
|
|
1274
|
+
label: string;
|
|
1275
|
+
/** The buyer-facing name (`displayLabel`, else `label`). */
|
|
1276
|
+
name: string;
|
|
1277
|
+
}
|
|
1202
1278
|
interface SeatManagerOptions {
|
|
1203
1279
|
/** CSS selector or element to mount into. */
|
|
1204
1280
|
container: string | HTMLElement;
|
|
@@ -1224,6 +1300,13 @@ interface SeatManagerOptions {
|
|
|
1224
1300
|
* it is the fail-closed fallback for every refused mode.
|
|
1225
1301
|
*/
|
|
1226
1302
|
tools?: SeatManagerMode[];
|
|
1303
|
+
/**
|
|
1304
|
+
* `minimal`: just the live map, its zoom buttons and Venue — no tool bar,
|
|
1305
|
+
* side rail, seat-search chip, block legend or mini-map. For a host that
|
|
1306
|
+
* brings its own search, totals and actions around the map (a box office).
|
|
1307
|
+
* Default `full`, the control room.
|
|
1308
|
+
*/
|
|
1309
|
+
chrome?: 'full' | 'minimal';
|
|
1227
1310
|
/** Public labels to preselect after live inventory has loaded in Select mode. */
|
|
1228
1311
|
selectedObjects?: string[];
|
|
1229
1312
|
/**
|
|
@@ -1269,6 +1352,12 @@ interface SeatManagerOptions {
|
|
|
1269
1352
|
* the camera and the realtime socket.
|
|
1270
1353
|
*/
|
|
1271
1354
|
themeMode?: ThemeMode;
|
|
1355
|
+
/**
|
|
1356
|
+
* What the map's colours mean when it opens: `full` (how full each block and
|
|
1357
|
+
* seat is) or `type` (ticket type, as buyers see it). Defaults to the
|
|
1358
|
+
* organizer's last choice, else `full`. The legend beside the map switches it.
|
|
1359
|
+
*/
|
|
1360
|
+
colourBy?: 'full' | 'type';
|
|
1272
1361
|
/**
|
|
1273
1362
|
* Keep the canvas painting even when the tab is hidden/backgrounded (a war-room
|
|
1274
1363
|
* board on a second monitor). Calls `forceDraw()` after each delta so Chrome's
|
|
@@ -1311,6 +1400,12 @@ interface SeatManagerOptions {
|
|
|
1311
1400
|
onSelectionInvalid?: (state: SeatManagerSelectionValidity) => void;
|
|
1312
1401
|
/** A Select-mode attempt reached the active exact/max cap. */
|
|
1313
1402
|
onSelectionLimit?: (max: number) => void;
|
|
1403
|
+
/**
|
|
1404
|
+
* Select mode: a standing (GA) area was tapped. Areas are sold by quantity,
|
|
1405
|
+
* not selected, so the host decides what a tap means (a box office adds the
|
|
1406
|
+
* area to its sale). `id` is the chart object id the inventory uses.
|
|
1407
|
+
*/
|
|
1408
|
+
onAreaClick?: (area: SeatManagerArea) => void;
|
|
1314
1409
|
/** Filter Sections changed by map interaction or an imperative method. */
|
|
1315
1410
|
onFilteredSectionChange?: (sections: SeatManagerFilteredSection[]) => void;
|
|
1316
1411
|
/** A block/unblock/cancel action completed successfully. */
|
|
@@ -1330,8 +1425,15 @@ interface SeatManagerOptions {
|
|
|
1330
1425
|
}
|
|
1331
1426
|
/** Realtime link state, as reported to the embedding host. */
|
|
1332
1427
|
interface SeatManagerConnection {
|
|
1333
|
-
/**
|
|
1334
|
-
|
|
1428
|
+
/**
|
|
1429
|
+
* `live` while the socket is open; `reconnecting` from drop until reopen;
|
|
1430
|
+
* `ended` once the manage session cannot be renewed — the host's
|
|
1431
|
+
* `onTokenRefresh` kept failing (three times running, or with a refusal),
|
|
1432
|
+
* or a 401 arrived with no refresher wired. Nothing polls in `ended`: the
|
|
1433
|
+
* cockpit shows its own "session ended" card with a Try again, and a host
|
|
1434
|
+
* that mints tokens can call `retrySession()` after signing the user in.
|
|
1435
|
+
*/
|
|
1436
|
+
status: 'live' | 'reconnecting' | 'ended';
|
|
1335
1437
|
/**
|
|
1336
1438
|
* `Date.now()` of the last snapshot or delta accepted from the server, or
|
|
1337
1439
|
* null before the first one. This is the honest "as of" for whatever the host
|
|
@@ -1380,6 +1482,8 @@ declare class SeatManager {
|
|
|
1380
1482
|
private activityPanel;
|
|
1381
1483
|
private navigation;
|
|
1382
1484
|
private movingMap;
|
|
1485
|
+
/** How a drag on the map chooses seats in the bulk tools: a box, or a freehand lasso (item 5, slice C). */
|
|
1486
|
+
private marqueeShape;
|
|
1383
1487
|
private socketSnapshotSeen;
|
|
1384
1488
|
private monitorRefreshTimer;
|
|
1385
1489
|
/** `'auto'` is kept as asked, not as resolved — see {@link getThemeMode}. */
|
|
@@ -1404,6 +1508,12 @@ declare class SeatManager {
|
|
|
1404
1508
|
* Free under-reported by GA capacity and SOLD% could exceed 100%.
|
|
1405
1509
|
*/
|
|
1406
1510
|
private gaUnitLabelSet;
|
|
1511
|
+
/**
|
|
1512
|
+
* A table sold as ONE unit ('3') is a label the server speaks and the map
|
|
1513
|
+
* cannot paint: what is drawn are its chairs. Status for the unit paints
|
|
1514
|
+
* every chair, so a sold whole table reads as sold, not as eight free seats.
|
|
1515
|
+
*/
|
|
1516
|
+
private tableChairIds;
|
|
1407
1517
|
private status;
|
|
1408
1518
|
/** Live non-free counters, moved by each delta rather than re-walked. */
|
|
1409
1519
|
private counts;
|
|
@@ -1434,6 +1544,12 @@ declare class SeatManager {
|
|
|
1434
1544
|
private paintHandle;
|
|
1435
1545
|
private trendWindowMinutes;
|
|
1436
1546
|
private heatEnabled;
|
|
1547
|
+
/** The View menu (plan item 5, slice D): labels, colours, momentum — remembered per browser. */
|
|
1548
|
+
private mapView;
|
|
1549
|
+
/** The bar's Find box — its chooser reads every seat, not just the tool's selectable ones. */
|
|
1550
|
+
private barFind;
|
|
1551
|
+
/** The venue overview in the map's corner (plan item 7); null under the compact breakpoint. */
|
|
1552
|
+
private minimap;
|
|
1437
1553
|
private followLive;
|
|
1438
1554
|
private lastKpiValues;
|
|
1439
1555
|
private activeKpiDeltas;
|
|
@@ -1459,6 +1575,10 @@ declare class SeatManager {
|
|
|
1459
1575
|
private tokenExpiresAt;
|
|
1460
1576
|
private tokenRefreshTimer;
|
|
1461
1577
|
private tokenRefreshInFlight;
|
|
1578
|
+
/** Consecutive failed `onTokenRefresh` calls; three in a row end the session. */
|
|
1579
|
+
private tokenRefreshFailures;
|
|
1580
|
+
/** The manage session cannot be renewed: every poll and socket is down until `retrySession()`. */
|
|
1581
|
+
private sessionEnded;
|
|
1462
1582
|
private sectionByObject;
|
|
1463
1583
|
private sectionLabelById;
|
|
1464
1584
|
private sectionsBase;
|
|
@@ -1489,6 +1609,16 @@ declare class SeatManager {
|
|
|
1489
1609
|
* they do not for as long as a network fetch takes.
|
|
1490
1610
|
*/
|
|
1491
1611
|
private channels;
|
|
1612
|
+
/**
|
|
1613
|
+
* The shared seat chooser for the tools that choose seats without a mode
|
|
1614
|
+
* object of their own (Block, Categories, Select) — plan item 5. Built per
|
|
1615
|
+
* rail paint, because what is selectable depends on the tool; its dialogs
|
|
1616
|
+
* mount through the manager's one modal primitive.
|
|
1617
|
+
*/
|
|
1618
|
+
private chooser;
|
|
1619
|
+
private chooserDialog;
|
|
1620
|
+
/** GET /category-assignments for the Categories tool's Reset count; null until read. */
|
|
1621
|
+
private categoryDifferences;
|
|
1492
1622
|
private channelCaps;
|
|
1493
1623
|
private categoryCanManage;
|
|
1494
1624
|
private tableCanManage;
|
|
@@ -1535,6 +1665,32 @@ declare class SeatManager {
|
|
|
1535
1665
|
* has no channels", which is a lie about inventory.
|
|
1536
1666
|
*/
|
|
1537
1667
|
private ensureChannels;
|
|
1668
|
+
/**
|
|
1669
|
+
* The adapter between the cockpit's internals and the shared seat chooser.
|
|
1670
|
+
* Every list the chooser offers is filtered to what THIS tool may select, so
|
|
1671
|
+
* a picker never adds a seat the tool would then refuse.
|
|
1672
|
+
*/
|
|
1673
|
+
private buildChooserHost;
|
|
1674
|
+
/**
|
|
1675
|
+
* The bar's Find (plan item 5, slice D): one box for every tool. Its host
|
|
1676
|
+
* reads EVERY seat — an organizer looking for D-12 does not care whether
|
|
1677
|
+
* the current tool could select it — and Enter selects on the choosing
|
|
1678
|
+
* tools, frames on Inspect and Monitor. Highlight rides the renderer.
|
|
1679
|
+
*/
|
|
1680
|
+
private wireBarFind;
|
|
1681
|
+
private isChoosingTool;
|
|
1682
|
+
/** Move the camera to these seats — Enter in the bar's Find on Inspect/Monitor. */
|
|
1683
|
+
private frameLabels;
|
|
1684
|
+
/** Find's highlight on the map: labels → ids; null clears. */
|
|
1685
|
+
private highlightLabels;
|
|
1686
|
+
/** A fresh chooser for the rail being painted (selectability is per tool). */
|
|
1687
|
+
private toolChooser;
|
|
1688
|
+
/**
|
|
1689
|
+
* The one line under every chooser: the count, what the tool says about the
|
|
1690
|
+
* selection, Select all and Clear. `data-ref` names are the tool's own so
|
|
1691
|
+
* its painters keep addressing them.
|
|
1692
|
+
*/
|
|
1693
|
+
private toolSelectionBar;
|
|
1538
1694
|
/** The adapter between the cockpit's internals and Channels mode. */
|
|
1539
1695
|
private buildChannelsHost;
|
|
1540
1696
|
/** Actual on-screen seat diameter, for the channel overlay's marks. The
|
|
@@ -1544,6 +1700,22 @@ declare class SeatManager {
|
|
|
1544
1700
|
private seatPixelSize;
|
|
1545
1701
|
/** Toggle the normalized sales-velocity outline overlay without changing seat colors. */
|
|
1546
1702
|
setHeatOverlay(enabled: boolean): void;
|
|
1703
|
+
/**
|
|
1704
|
+
* The View menu (plan item 5, slice D): seat labels, row labels, category
|
|
1705
|
+
* colours, channel colours, booking momentum. Each is a toggle the map
|
|
1706
|
+
* applies at once; the whole set is remembered per browser so an operator
|
|
1707
|
+
* who works with labels off keeps them off tomorrow.
|
|
1708
|
+
*/
|
|
1709
|
+
setMapView(patch: Partial<MapView>): void;
|
|
1710
|
+
/** What the map's colours mean now: how full, or ticket type (the legend's switch). */
|
|
1711
|
+
getColourBy(): ColourBy;
|
|
1712
|
+
setColourBy(mode: ColourBy): void;
|
|
1713
|
+
getMapView(): MapView;
|
|
1714
|
+
private toggleMapView;
|
|
1715
|
+
/** Channel colours are the Channels tool's overlay; outside it there is nothing to colour by. */
|
|
1716
|
+
private channelColoursAvailable;
|
|
1717
|
+
private applyMapView;
|
|
1718
|
+
private paintMapViewMenu;
|
|
1547
1719
|
/** Toggle opt-in camera following for new buyer hold/book events. */
|
|
1548
1720
|
setFollowLive(enabled: boolean): void;
|
|
1549
1721
|
/** Update background-tab repaint policy without rebuilding the board. */
|
|
@@ -1609,6 +1781,18 @@ declare class SeatManager {
|
|
|
1609
1781
|
setToken(token: EventScopedManageToken, expiresAt?: number): void;
|
|
1610
1782
|
private scheduleTokenRefresh;
|
|
1611
1783
|
private rotateToken;
|
|
1784
|
+
/**
|
|
1785
|
+
* The manage session cannot be renewed. Every timer, poll and socket
|
|
1786
|
+
* stops; the map stays painted as it was, under a card that says so and
|
|
1787
|
+
* offers one Try again. The host hears `status: 'ended'` once.
|
|
1788
|
+
*/
|
|
1789
|
+
private endSession;
|
|
1790
|
+
/**
|
|
1791
|
+
* Ask the host for a token once more — after it signed the user back in —
|
|
1792
|
+
* and, if it answers, pick the live stream up where it stopped.
|
|
1793
|
+
*/
|
|
1794
|
+
retrySession(): Promise<boolean>;
|
|
1795
|
+
private paintSessionEnded;
|
|
1612
1796
|
/** Bulk block the given labels (or the current selection when omitted). */
|
|
1613
1797
|
block(labels?: string[], opts?: {
|
|
1614
1798
|
releaseAt?: number;
|
|
@@ -1632,6 +1816,14 @@ declare class SeatManager {
|
|
|
1632
1816
|
selectSection(sectionId: string): ExpandedSeat[];
|
|
1633
1817
|
/** Filter every section whose public label matches, then frame their union. */
|
|
1634
1818
|
setFilteredSection(label: string): SeatManagerFilteredSection[];
|
|
1819
|
+
/**
|
|
1820
|
+
* Frame every section whose public label matches, in ANY mode: no filtering,
|
|
1821
|
+
* no dimming, the selection untouched. A host that picks seats (a box office
|
|
1822
|
+
* jumping to "Block 104", or to the section of a seat it just added) uses
|
|
1823
|
+
* this; `zoomToFit()` returns to the whole venue. An unknown label frames
|
|
1824
|
+
* nothing and returns [], because host labels can outlive a chart edit.
|
|
1825
|
+
*/
|
|
1826
|
+
focusSection(label: string): SeatManagerFilteredSection[];
|
|
1635
1827
|
/** Clear section filtering and restore the full event frame. */
|
|
1636
1828
|
clearFilteredSection(): void;
|
|
1637
1829
|
getFilteredSections(): SeatManagerFilteredSection[];
|
|
@@ -1676,11 +1868,63 @@ declare class SeatManager {
|
|
|
1676
1868
|
}>;
|
|
1677
1869
|
setHoldTtl(ms: number | null): Promise<void>;
|
|
1678
1870
|
zoomToFit(): void;
|
|
1871
|
+
/**
|
|
1872
|
+
* "−" walks back one level — seats → the section → the venue — the way the
|
|
1873
|
+
* buyer picker's does; leaving a focused section also drops the focus. A
|
|
1874
|
+
* renderer without the level walk falls back to the factor step.
|
|
1875
|
+
*/
|
|
1876
|
+
private zoomOutStep;
|
|
1877
|
+
/**
|
|
1878
|
+
* What the map chrome reads: the camera, the focus, the floor, and the
|
|
1879
|
+
* live counts the minimap snapshot carries (plan item 7). Painted on every
|
|
1880
|
+
* view change, so the crumb and the pills never lag the camera.
|
|
1881
|
+
*/
|
|
1882
|
+
private paintMapChrome;
|
|
1883
|
+
/** Section id → the ticket type most of its seats carry, rebuilt with the sections. */
|
|
1884
|
+
private typeKeyBySection;
|
|
1885
|
+
private typeKeyBase;
|
|
1886
|
+
private sectionTypeKeys;
|
|
1887
|
+
/** A block's ticket-type colour, exactly as the map paints that type. */
|
|
1888
|
+
private sectionTypeTint;
|
|
1889
|
+
/** The ticket types this chart sells, named and coloured as the map shows them. */
|
|
1890
|
+
private legendTypes;
|
|
1891
|
+
/**
|
|
1892
|
+
* Re-ask the block paint and carry it to the minimap. The minimap paints
|
|
1893
|
+
* from the renderer's snapshot, which holds the paint each block is wearing,
|
|
1894
|
+
* so it only needs telling when that paint has moved.
|
|
1895
|
+
*/
|
|
1896
|
+
private refreshBlockPaint;
|
|
1897
|
+
/** The renderer as a {@link MapCamera}, for the minimap and any other map chrome. */
|
|
1898
|
+
private mapCamera;
|
|
1899
|
+
/**
|
|
1900
|
+
* The venue overview in the map's corner. Not under the compact breakpoint
|
|
1901
|
+
* — the pills stay, the thumbnail goes — and rebuilt with the renderer so a
|
|
1902
|
+
* chart change never leaves a stale outline behind.
|
|
1903
|
+
*/
|
|
1904
|
+
private syncMinimap;
|
|
1905
|
+
private cssVar;
|
|
1679
1906
|
destroy(): void;
|
|
1680
1907
|
private buildRenderer;
|
|
1908
|
+
/**
|
|
1909
|
+
* The organizer's facts on the map's hover card (plan item 5, slice D):
|
|
1910
|
+
* STATUS · CHANNEL · FOR SALE, in one glance. CHANNEL appears once the
|
|
1911
|
+
* Channels list has loaded — a guess would be worse than a missing cell.
|
|
1912
|
+
* FOR SALE is the buyer's truth: free, its section open and shown, and its
|
|
1913
|
+
* category sellable.
|
|
1914
|
+
*/
|
|
1915
|
+
private hoverFactsFor;
|
|
1681
1916
|
/** Block always uses a marquee. Channels only enables its marquee after the
|
|
1682
1917
|
* organizer deliberately chooses Assign seats; Pan map keeps desktop drag
|
|
1683
1918
|
* available for large charts. */
|
|
1919
|
+
/** A tap on a row label takes the row in every tool that chooses seats. */
|
|
1920
|
+
private rowLabelSelectable;
|
|
1921
|
+
/**
|
|
1922
|
+
* The two map intents a choosing tool offers beside the chooser's pickers:
|
|
1923
|
+
* drag a box, or draw a lasso. One is always on; the choice survives a
|
|
1924
|
+
* repaint and a tool switch (an operator who prefers the lasso keeps it).
|
|
1925
|
+
*/
|
|
1926
|
+
private marqueeShapeChipsHtml;
|
|
1927
|
+
private wireMarqueeShapeChips;
|
|
1684
1928
|
private isBulkSelectMode;
|
|
1685
1929
|
/**
|
|
1686
1930
|
* Block never touches held or booked inventory, so it cannot select it.
|
|
@@ -1705,6 +1949,8 @@ declare class SeatManager {
|
|
|
1705
1949
|
private buildUnitUniverse;
|
|
1706
1950
|
/** Every sellable unit the client knows: seats + GA capacity. */
|
|
1707
1951
|
private unitTotal;
|
|
1952
|
+
/** What to paint for a label: its seat, or every chair of a table sold whole. */
|
|
1953
|
+
private paintIds;
|
|
1708
1954
|
/** Every label the client models, whether or not it can be painted. */
|
|
1709
1955
|
private knownLabels;
|
|
1710
1956
|
private repaintAll;
|
|
@@ -1818,6 +2064,8 @@ declare class SeatManager {
|
|
|
1818
2064
|
private sectionOptions;
|
|
1819
2065
|
private filterableSections;
|
|
1820
2066
|
private applyFilteredSectionCanvas;
|
|
2067
|
+
/** Frame the union of these sections' seats (or the first section's region). */
|
|
2068
|
+
private frameSections;
|
|
1821
2069
|
private buildSectionOptions;
|
|
1822
2070
|
/**
|
|
1823
2071
|
* A tool is offered when the token's capability permits it AND the host has
|
|
@@ -1845,6 +2093,7 @@ declare class SeatManager {
|
|
|
1845
2093
|
*/
|
|
1846
2094
|
private railHeader;
|
|
1847
2095
|
private paintFollowLiveButton;
|
|
2096
|
+
/** Booking momentum lives in the View menu now; this keeps the item and the status line current. */
|
|
1848
2097
|
private paintHeatButton;
|
|
1849
2098
|
private paintMomentumHelp;
|
|
1850
2099
|
private paintFullscreenButton;
|
|
@@ -1866,6 +2115,15 @@ declare class SeatManager {
|
|
|
1866
2115
|
/** Seats in a chart category that the operator may act on in this mode. */
|
|
1867
2116
|
private categorySeats;
|
|
1868
2117
|
private renderCategoriesRail;
|
|
2118
|
+
/**
|
|
2119
|
+
* "Reset to chart defaults" says how many seats it would move BEFORE it is
|
|
2120
|
+
* pressed, and is disabled when the answer is none — a button that says
|
|
2121
|
+
* "reset" over a chart-identical event would be a lie.
|
|
2122
|
+
*/
|
|
2123
|
+
private loadCategoryDifferences;
|
|
2124
|
+
private paintCategoryReset;
|
|
2125
|
+
/** One click, no confirm (owner, 2026-09-20): the button already says what it will move. */
|
|
2126
|
+
resetCategoriesToChart(): Promise<void>;
|
|
1869
2127
|
private paintCategorySelection;
|
|
1870
2128
|
private renderTablesRail;
|
|
1871
2129
|
private renderInspectRail;
|
|
@@ -1898,13 +2156,11 @@ declare class SeatManager {
|
|
|
1898
2156
|
private paintLegend;
|
|
1899
2157
|
private paintFeed;
|
|
1900
2158
|
private renderBlockRail;
|
|
1901
|
-
private toggleCategory;
|
|
1902
2159
|
/** A category/filter is a real toggle: add the missing seats, or remove the
|
|
1903
2160
|
* whole group when every eligible seat in it is already selected. */
|
|
1904
2161
|
private toggleLabels;
|
|
1905
2162
|
private isBlockSelectable;
|
|
1906
2163
|
private paintSelBar;
|
|
1907
|
-
private paintCategoryControls;
|
|
1908
2164
|
private filteredBlockedSeats;
|
|
1909
2165
|
private paintBlockedInventory;
|
|
1910
2166
|
private confirmUnblockAll;
|
|
@@ -2132,7 +2388,14 @@ declare class ChannelsMode {
|
|
|
2132
2388
|
private conflict;
|
|
2133
2389
|
private dialog;
|
|
2134
2390
|
private detent;
|
|
2135
|
-
|
|
2391
|
+
/**
|
|
2392
|
+
* The shared seat chooser (plan item 5): the sections/rows dialog, the
|
|
2393
|
+
* category picker, the seat list and Find. Channels was the first caller —
|
|
2394
|
+
* those dialogs were written here and moved out unchanged — and paints its
|
|
2395
|
+
* dialogs through this mode's own scrim so every Channels sheet shares one
|
|
2396
|
+
* focus trap.
|
|
2397
|
+
*/
|
|
2398
|
+
private readonly chooser;
|
|
2136
2399
|
/**
|
|
2137
2400
|
* Hosted-link STATUS for the channel whose detail panel is open. This is the
|
|
2138
2401
|
* listing projection — it carries no url and no capability, because no route
|
|
@@ -2167,6 +2430,7 @@ declare class ChannelsMode {
|
|
|
2167
2430
|
private pollTimer;
|
|
2168
2431
|
private layer;
|
|
2169
2432
|
private canvas;
|
|
2433
|
+
private overlayVisible;
|
|
2170
2434
|
/** undefined = not resolved yet, null = this environment has no 2d canvas. */
|
|
2171
2435
|
private ctx;
|
|
2172
2436
|
private bannerEl;
|
|
@@ -2177,10 +2441,6 @@ declare class ChannelsMode {
|
|
|
2177
2441
|
private stagedDoneTimer;
|
|
2178
2442
|
private lastSelectionCount;
|
|
2179
2443
|
private lastCounts;
|
|
2180
|
-
/** Rows are structural chart data — they do not move while the organizer is
|
|
2181
|
-
* allocating. Deriving them walks every seat, so the view is cached for the
|
|
2182
|
-
* lifetime of this mode entry and ordinary selection repaints stay O(1). */
|
|
2183
|
-
private assignmentRowsCache;
|
|
2184
2444
|
/** The markup currently in the rail. An identical repaint is skipped, which is
|
|
2185
2445
|
* what keeps the organizer's scroll position (and open <select>) alive. */
|
|
2186
2446
|
private railHtml;
|
|
@@ -2232,6 +2492,12 @@ declare class ChannelsMode {
|
|
|
2232
2492
|
private loadAllocation;
|
|
2233
2493
|
private channelById;
|
|
2234
2494
|
private nameOf;
|
|
2495
|
+
/**
|
|
2496
|
+
* The channel a seat is allocated to, by name, for the map's hover card —
|
|
2497
|
+
* null until the list has loaded (the card then shows no CHANNEL cell rather
|
|
2498
|
+
* than a wrong "Public sale"). Unallocated = the public sale channel.
|
|
2499
|
+
*/
|
|
2500
|
+
channelNameForLabel(label: string): string | null;
|
|
2235
2501
|
private markerFor;
|
|
2236
2502
|
/** Channels an organizer may assign INTO: public sale plus every live channel. */
|
|
2237
2503
|
private assignableChannels;
|
|
@@ -2245,6 +2511,13 @@ declare class ChannelsMode {
|
|
|
2245
2511
|
* the guards, the memoised 2D context, and the command the section hit targets
|
|
2246
2512
|
* fire back into the rail.
|
|
2247
2513
|
*/
|
|
2514
|
+
/**
|
|
2515
|
+
* The View menu's "Channel colours" (plan item 5, slice D): the letter
|
|
2516
|
+
* flags and section tints are this tool's overlay, and the menu can put
|
|
2517
|
+
* them away while the tool stays open. Hidden = the canvas is cleared and
|
|
2518
|
+
* the flags are gone; the staged bar, banner and live line stay.
|
|
2519
|
+
*/
|
|
2520
|
+
setOverlayVisible(visible: boolean): void;
|
|
2248
2521
|
private paintOverlay;
|
|
2249
2522
|
private setStaged;
|
|
2250
2523
|
private paintStagedBar;
|
|
@@ -2348,24 +2621,8 @@ declare class ChannelsMode {
|
|
|
2348
2621
|
/** Open a channel's detail panel and start its buyer-link read. */
|
|
2349
2622
|
private openChannel;
|
|
2350
2623
|
private railAction;
|
|
2351
|
-
/** Derived once per mode entry — see `assignmentRowsCache`. */
|
|
2352
|
-
private assignmentRows;
|
|
2353
2624
|
private pickCategory;
|
|
2354
|
-
/**
|
|
2355
|
-
private promptChoice;
|
|
2356
|
-
/**
|
|
2357
|
-
* Add several whole sections, or several whole rows, in one operation.
|
|
2358
|
-
*
|
|
2359
|
-
* ADDITIVE by contract: the chooser starts from the labels already selected
|
|
2360
|
-
* and only ever grows that set, so opening it never destroys a hard-won
|
|
2361
|
-
* marquee or seat-list selection. The confirm button always states the net
|
|
2362
|
-
* number of seats it will add, and refuses to exceed `MAX_ASSIGNMENT_UNITS`.
|
|
2363
|
-
*
|
|
2364
|
-
* Rows get the richer variant. A large venue has thousands of them, so they
|
|
2365
|
-
* arrive collapsed under their section, with a section-level tri-state
|
|
2366
|
-
* checkbox, a search across every row, and a render cap — the flat list used
|
|
2367
|
-
* for sections would be an unusable wall of buttons.
|
|
2368
|
-
*/
|
|
2625
|
+
/** The additive sections/rows chooser — shared (seatChooser.ts); the dialog state keeps it re-renderable. */
|
|
2369
2626
|
private renderScopeDialog;
|
|
2370
2627
|
private openDialog;
|
|
2371
2628
|
private renderDialog;
|
|
@@ -2461,6 +2718,7 @@ declare class ChannelsMode {
|
|
|
2461
2718
|
* equivalent of canvas click / marquee / brush, grouped by section with
|
|
2462
2719
|
* per-section select actions.
|
|
2463
2720
|
*/
|
|
2721
|
+
/** The keyboard seat list — shared (seatChooser.ts), with the channel beside each seat. */
|
|
2464
2722
|
private renderSeatListDialog;
|
|
2465
2723
|
private reloadLinks;
|
|
2466
2724
|
/**
|
|
@@ -2553,4 +2811,4 @@ declare class ChannelsMode {
|
|
|
2553
2811
|
handleBack(): boolean;
|
|
2554
2812
|
}
|
|
2555
2813
|
|
|
2556
|
-
export { ManageApiError as $, type AccessIntentForbidsDetails as A, type BucketRow as B, type ChannelAccessIntent as C, type ChannelsClient as D, ChannelsMode as E, type ChannelsModeHost as F, type ChannelsRowView as G, type ChannelsSeatView as H, type ControlRoomActivityEntry as I, type ControlRoomSectionMetric as J, type ControlRoomSnapshot as K, type EventCategoryAssignmentResult as L, type EventScopedManageToken as M, type EventTableBookingMode as N, type EventTableBookingResult as O, type IntentSwitchBlockedDetails as P, type InventoryBooking as Q, type InventoryBookingActivity as R, type InventoryBookingDetail as S, type ThemeMode as T, type InventoryBookingObject as U, type InventoryBookingState as V, type InventoryBookingsPage as W, type InventoryBookingsQuery as X, type LogEntry as Y, type LogPage as Z, ManageApi as _, type AccessLinkRecord as a, type ReportByStatus as a0, type ReportCategoryMeta as a1, type ReportCategoryRow as a2, type ReportResult as a3, SeatManager as a4, type SeatManagerActionResult as a5, type SeatManagerActivity as a6, type
|
|
2814
|
+
export { ManageApiError as $, type AccessIntentForbidsDetails as A, type BucketRow as B, type ChannelAccessIntent as C, type ChannelsClient as D, ChannelsMode as E, type ChannelsModeHost as F, type ChannelsRowView as G, type ChannelsSeatView as H, type ControlRoomActivityEntry as I, type ControlRoomSectionMetric as J, type ControlRoomSnapshot as K, type EventCategoryAssignmentResult as L, type EventScopedManageToken as M, type EventTableBookingMode as N, type EventTableBookingResult as O, type IntentSwitchBlockedDetails as P, type InventoryBooking as Q, type InventoryBookingActivity as R, type InventoryBookingDetail as S, type ThemeMode as T, type InventoryBookingObject as U, type InventoryBookingState as V, type InventoryBookingsPage as W, type InventoryBookingsQuery as X, type LogEntry as Y, type LogPage as Z, ManageApi as _, type AccessLinkRecord as a, type ReportByStatus as a0, type ReportCategoryMeta as a1, type ReportCategoryRow as a2, type ReportResult as a3, SeatManager as a4, type SeatManagerActionResult as a5, type SeatManagerActivity as a6, type SeatManagerArea as a7, type SeatManagerCapability as a8, type SeatManagerConnection as a9, retryAfterCopy as aA, selectionSources as aB, stateBadge as aC, suggestMarker as aD, type SeatManagerFilteredSection as aa, type SeatManagerMode as ab, type SeatManagerOptions as ac, type SeatManagerSelectionValidity as ad, type SeatManagerTallies as ae, type SelectionSourceRow as af, ACCESS_LINK_DEFAULTS as ag, PUBLIC_CHANNEL_ID as ah, PUBLIC_CHANNEL_NAME as ai, accessIntentDescription as aj, accessIntentLabel as ak, accessLine as al, accessLinkBadge as am, accessLinkErrorCopy as an, accessLinkIsLive as ao, accessLinkPolicyLines as ap, bucketRows as aq, dropReviewRows as ar, intentForbidsCopy as as, intentSwitchBlockedCopy as at, isPublicChannelId as au, markerLetter as av, markerOf as aw, mutationCount as ax, needsMoveConfirmation as ay, planAssignment as az, type AccessLinkReveal as b, type AccessLinkState as c, type AccessLinkStatus as d, type AccessLinkStatusRecord as e, type ArchiveBlockedDetails as f, type AssignmentBuckets as g, type AssignmentDropDetails as h, type AssignmentResult as i, type ChannelAccessSummary as j, type ChannelAllocationPage as k, type ChannelAttribution as l, type ChannelAuditEntry as m, type ChannelAuditPage as n, type ChannelCounts as o, type ChannelListResult as p, type ChannelPreviewProjection as q, type ChannelRecord as r, type ChannelReport as s, type ChannelReportLinkRecord as t, type ChannelReportLinkReveal as u, type ChannelReportResult as v, type ChannelReportRow as w, type ChannelSeatStatus as x, type ChannelState as y, type ChannelsCapabilities as z };
|