@seatlayer/angular 0.80.3 → 0.81.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 +49 -8
- package/dist/README.md +49 -8
- package/dist/fesm2022/seatlayer-angular.mjs +23 -2
- package/dist/fesm2022/seatlayer-angular.mjs.map +1 -1
- package/dist/index.d.ts +9 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# SeatLayer Angular Seat Map SDK
|
|
1
|
+
# SeatLayer Angular Seating Chart and Seat Map SDK
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/@seatlayer/angular)
|
|
4
4
|
[](https://www.npmjs.com/package/@seatlayer/angular)
|
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
[](https://www.typescriptlang.org/)
|
|
7
7
|
[](../../LICENSE)
|
|
8
8
|
|
|
9
|
-
The official Angular
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
The official Angular seating chart component for SeatLayer reserved seating.
|
|
10
|
+
Render live seat availability and selection inside an Angular app, then take a
|
|
11
|
+
temporary hold on the inventory the buyer chooses.
|
|
12
12
|
|
|
13
13
|
The buyer modal and iframe integration stay framework-agnostic: this package
|
|
14
14
|
also re-exports the plain JavaScript `SeatPickerWidget` class and the
|
|
@@ -81,6 +81,46 @@ export class CheckoutComponent {
|
|
|
81
81
|
}
|
|
82
82
|
```
|
|
83
83
|
|
|
84
|
+
### Complete buyer picker
|
|
85
|
+
|
|
86
|
+
Use the re-exported `SeatPickerWidget` when you want the ready modal with its
|
|
87
|
+
map, legend, priced tray, hold timer, and checkout hand-off:
|
|
88
|
+
|
|
89
|
+
```ts
|
|
90
|
+
import { Component } from '@angular/core';
|
|
91
|
+
import { SeatPickerWidget } from '@seatlayer/angular';
|
|
92
|
+
|
|
93
|
+
@Component({
|
|
94
|
+
selector: 'app-seat-picker-button',
|
|
95
|
+
standalone: true,
|
|
96
|
+
template: `<button (click)="openSeatPicker()">Choose seats</button>`,
|
|
97
|
+
})
|
|
98
|
+
export class SeatPickerButtonComponent {
|
|
99
|
+
async openSeatPicker() {
|
|
100
|
+
await SeatPickerWidget.open({
|
|
101
|
+
event: 'ev_9f3a',
|
|
102
|
+
publicKey: 'pk_live_your_publishable_key',
|
|
103
|
+
webMcp: true,
|
|
104
|
+
onCheckout: (hold) => {
|
|
105
|
+
void continueCheckoutOnYourServer(hold.holdId).catch(showCheckoutError);
|
|
106
|
+
},
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
`continueCheckoutOnYourServer` and `showCheckoutError` are supplied by your
|
|
113
|
+
application. The first owns the async server request; `.catch(...)` surfaces a
|
|
114
|
+
rejected checkout.
|
|
115
|
+
|
|
116
|
+
On supported browsers, the complete picker includes the Map | 3D buyer view.
|
|
117
|
+
Its opt-in `webMcp: true` setting lets a compatible in-browser assistant
|
|
118
|
+
describe the event, find seats, select them, and read the selection. Use
|
|
119
|
+
`webMcp: { holds: true }` only when the assistant should also place a temporary
|
|
120
|
+
hold. These tools do not take payment or book seats. See the
|
|
121
|
+
[buyer WebMCP seat-selection guide](https://docs.seatlayer.io/buyer-sdk/webmcp-agent-tools/)
|
|
122
|
+
for the full contract and iframe origin controls.
|
|
123
|
+
|
|
84
124
|
### Fixed renewable Season
|
|
85
125
|
|
|
86
126
|
```html
|
|
@@ -261,10 +301,10 @@ that, which books no real inventory.
|
|
|
261
301
|
- [Compare SeatLayer's mobile seat map SDKs](https://docs.seatlayer.io/buyer-sdk/mobile/)
|
|
262
302
|
when the same event also has to render in native iOS, Android, Flutter, or
|
|
263
303
|
React Native apps.
|
|
264
|
-
- [
|
|
265
|
-
|
|
304
|
+
- [Use the separate `@seatlayer/js` EmbeddedDesigner API](https://docs.seatlayer.io/platform/embedded-designer/)
|
|
305
|
+
when organizers need hosted chart editing inside an Angular product.
|
|
266
306
|
- [Explore the 3D seating chart](https://seatlayer.io/3d-seat-map/) for the
|
|
267
|
-
interactive venue view
|
|
307
|
+
interactive venue view available through `SeatPickerWidget` in supported browsers.
|
|
268
308
|
- [Point AI coding agents at the SeatLayer docs index](https://docs.seatlayer.io/llms.txt)
|
|
269
309
|
(`llms.txt`) for an agent-readable map of the documentation.
|
|
270
310
|
|
|
@@ -294,4 +334,5 @@ Source, issues, and contribution guidance live in
|
|
|
294
334
|
|
|
295
335
|
## License
|
|
296
336
|
|
|
297
|
-
MIT
|
|
337
|
+
The Angular wrapper source in this package is MIT licensed. The separately
|
|
338
|
+
distributed SeatLayer runtime is not covered by this package's MIT license.
|
package/dist/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# SeatLayer Angular Seat Map SDK
|
|
1
|
+
# SeatLayer Angular Seating Chart and Seat Map SDK
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/@seatlayer/angular)
|
|
4
4
|
[](https://www.npmjs.com/package/@seatlayer/angular)
|
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
[](https://www.typescriptlang.org/)
|
|
7
7
|
[](../../LICENSE)
|
|
8
8
|
|
|
9
|
-
The official Angular
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
The official Angular seating chart component for SeatLayer reserved seating.
|
|
10
|
+
Render live seat availability and selection inside an Angular app, then take a
|
|
11
|
+
temporary hold on the inventory the buyer chooses.
|
|
12
12
|
|
|
13
13
|
The buyer modal and iframe integration stay framework-agnostic: this package
|
|
14
14
|
also re-exports the plain JavaScript `SeatPickerWidget` class and the
|
|
@@ -81,6 +81,46 @@ export class CheckoutComponent {
|
|
|
81
81
|
}
|
|
82
82
|
```
|
|
83
83
|
|
|
84
|
+
### Complete buyer picker
|
|
85
|
+
|
|
86
|
+
Use the re-exported `SeatPickerWidget` when you want the ready modal with its
|
|
87
|
+
map, legend, priced tray, hold timer, and checkout hand-off:
|
|
88
|
+
|
|
89
|
+
```ts
|
|
90
|
+
import { Component } from '@angular/core';
|
|
91
|
+
import { SeatPickerWidget } from '@seatlayer/angular';
|
|
92
|
+
|
|
93
|
+
@Component({
|
|
94
|
+
selector: 'app-seat-picker-button',
|
|
95
|
+
standalone: true,
|
|
96
|
+
template: `<button (click)="openSeatPicker()">Choose seats</button>`,
|
|
97
|
+
})
|
|
98
|
+
export class SeatPickerButtonComponent {
|
|
99
|
+
async openSeatPicker() {
|
|
100
|
+
await SeatPickerWidget.open({
|
|
101
|
+
event: 'ev_9f3a',
|
|
102
|
+
publicKey: 'pk_live_your_publishable_key',
|
|
103
|
+
webMcp: true,
|
|
104
|
+
onCheckout: (hold) => {
|
|
105
|
+
void continueCheckoutOnYourServer(hold.holdId).catch(showCheckoutError);
|
|
106
|
+
},
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
`continueCheckoutOnYourServer` and `showCheckoutError` are supplied by your
|
|
113
|
+
application. The first owns the async server request; `.catch(...)` surfaces a
|
|
114
|
+
rejected checkout.
|
|
115
|
+
|
|
116
|
+
On supported browsers, the complete picker includes the Map | 3D buyer view.
|
|
117
|
+
Its opt-in `webMcp: true` setting lets a compatible in-browser assistant
|
|
118
|
+
describe the event, find seats, select them, and read the selection. Use
|
|
119
|
+
`webMcp: { holds: true }` only when the assistant should also place a temporary
|
|
120
|
+
hold. These tools do not take payment or book seats. See the
|
|
121
|
+
[buyer WebMCP seat-selection guide](https://docs.seatlayer.io/buyer-sdk/webmcp-agent-tools/)
|
|
122
|
+
for the full contract and iframe origin controls.
|
|
123
|
+
|
|
84
124
|
### Fixed renewable Season
|
|
85
125
|
|
|
86
126
|
```html
|
|
@@ -261,10 +301,10 @@ that, which books no real inventory.
|
|
|
261
301
|
- [Compare SeatLayer's mobile seat map SDKs](https://docs.seatlayer.io/buyer-sdk/mobile/)
|
|
262
302
|
when the same event also has to render in native iOS, Android, Flutter, or
|
|
263
303
|
React Native apps.
|
|
264
|
-
- [
|
|
265
|
-
|
|
304
|
+
- [Use the separate `@seatlayer/js` EmbeddedDesigner API](https://docs.seatlayer.io/platform/embedded-designer/)
|
|
305
|
+
when organizers need hosted chart editing inside an Angular product.
|
|
266
306
|
- [Explore the 3D seating chart](https://seatlayer.io/3d-seat-map/) for the
|
|
267
|
-
interactive venue view
|
|
307
|
+
interactive venue view available through `SeatPickerWidget` in supported browsers.
|
|
268
308
|
- [Point AI coding agents at the SeatLayer docs index](https://docs.seatlayer.io/llms.txt)
|
|
269
309
|
(`llms.txt`) for an agent-readable map of the documentation.
|
|
270
310
|
|
|
@@ -294,4 +334,5 @@ Source, issues, and contribution guidance live in
|
|
|
294
334
|
|
|
295
335
|
## License
|
|
296
336
|
|
|
297
|
-
MIT
|
|
337
|
+
The Angular wrapper source in this package is MIT licensed. The separately
|
|
338
|
+
distributed SeatLayer runtime is not covered by this package's MIT license.
|
|
@@ -365,6 +365,12 @@ class SeatLayerSeasonPickerComponent {
|
|
|
365
365
|
season;
|
|
366
366
|
/** Public API base override. */
|
|
367
367
|
apiBase;
|
|
368
|
+
/** Publishable account key, accepted for snippet parity. Never sent. */
|
|
369
|
+
publicKey;
|
|
370
|
+
/** Who takes the money once the package is held. Default `'handoff'`. */
|
|
371
|
+
checkout;
|
|
372
|
+
/** Where a redirecting gateway returns the buyer, for hosted checkout. */
|
|
373
|
+
returnUrl;
|
|
368
374
|
/** Refreshable one-time browser bearer provider. */
|
|
369
375
|
buyerAccessTokenProvider;
|
|
370
376
|
/** One-time Season browser bearer. */
|
|
@@ -387,13 +393,16 @@ class SeatLayerSeasonPickerComponent {
|
|
|
387
393
|
accessExpired = new EventEmitter();
|
|
388
394
|
/** Buyer access cannot be recovered. */
|
|
389
395
|
accessUnavailable = new EventEmitter();
|
|
396
|
+
/** Hosted checkout only: the gateway webhook landed and the order is paid. */
|
|
397
|
+
orderConfirmed = new EventEmitter();
|
|
390
398
|
/** Buyer-visible operation status changed. */
|
|
391
399
|
statusChange = new EventEmitter();
|
|
392
400
|
/** The Season buyer flow failed. */
|
|
393
401
|
errored = new EventEmitter();
|
|
394
402
|
container;
|
|
395
403
|
static REBUILD_INPUTS = new Set([
|
|
396
|
-
'season', 'apiBase', '
|
|
404
|
+
'season', 'apiBase', 'publicKey', 'checkout', 'returnUrl',
|
|
405
|
+
'buyerAccessTokenProvider', 'buyerAccessToken',
|
|
397
406
|
'initialOperationId', 'recoveryTimeoutMs', 'fetch',
|
|
398
407
|
]);
|
|
399
408
|
zone = inject(NgZone);
|
|
@@ -441,6 +450,9 @@ class SeatLayerSeasonPickerComponent {
|
|
|
441
450
|
container: this.container.nativeElement,
|
|
442
451
|
season: this.season,
|
|
443
452
|
apiBase: this.apiBase,
|
|
453
|
+
publicKey: this.publicKey,
|
|
454
|
+
checkout: this.checkout,
|
|
455
|
+
returnUrl: this.returnUrl,
|
|
444
456
|
buyerAccessTokenProvider: this.buyerAccessTokenProvider,
|
|
445
457
|
buyerAccessToken: this.buyerAccessToken,
|
|
446
458
|
initialOperationId: this.initialOperationId,
|
|
@@ -452,6 +464,7 @@ class SeatLayerSeasonPickerComponent {
|
|
|
452
464
|
onRenewalIntent: (value) => this.zone.run(() => this.renewalIntent.emit(value)),
|
|
453
465
|
onAccessExpired: (value) => this.zone.run(() => this.accessExpired.emit(value)),
|
|
454
466
|
onAccessUnavailable: (value) => this.zone.run(() => this.accessUnavailable.emit(value)),
|
|
467
|
+
onOrderConfirmed: (value) => this.zone.run(() => this.orderConfirmed.emit(value)),
|
|
455
468
|
onStatusChange: (value) => this.zone.run(() => this.statusChange.emit(value)),
|
|
456
469
|
onError: (value) => this.zone.run(() => this.errored.emit(value)),
|
|
457
470
|
});
|
|
@@ -469,7 +482,7 @@ class SeatLayerSeasonPickerComponent {
|
|
|
469
482
|
this.picker = null;
|
|
470
483
|
}
|
|
471
484
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.29", ngImport: i0, type: SeatLayerSeasonPickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
472
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.29", type: SeatLayerSeasonPickerComponent, isStandalone: true, selector: "seatlayer-season-picker", inputs: { season: "season", apiBase: "apiBase", buyerAccessTokenProvider: "buyerAccessTokenProvider", buyerAccessToken: "buyerAccessToken", initialOperationId: "initialOperationId", recoveryTimeoutMs: "recoveryTimeoutMs", fetch: "fetch" }, outputs: { hold: "hold", holdChange: "holdChange", continued: "continued", renewalIntent: "renewalIntent", accessExpired: "accessExpired", accessUnavailable: "accessUnavailable", statusChange: "statusChange", errored: "errored" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: '<div #container class="seatlayer-season-container"></div>', isInline: true, styles: [":host{display:block}.seatlayer-season-container{width:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
485
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.29", type: SeatLayerSeasonPickerComponent, isStandalone: true, selector: "seatlayer-season-picker", inputs: { season: "season", apiBase: "apiBase", publicKey: "publicKey", checkout: "checkout", returnUrl: "returnUrl", buyerAccessTokenProvider: "buyerAccessTokenProvider", buyerAccessToken: "buyerAccessToken", initialOperationId: "initialOperationId", recoveryTimeoutMs: "recoveryTimeoutMs", fetch: "fetch" }, outputs: { hold: "hold", holdChange: "holdChange", continued: "continued", renewalIntent: "renewalIntent", accessExpired: "accessExpired", accessUnavailable: "accessUnavailable", orderConfirmed: "orderConfirmed", statusChange: "statusChange", errored: "errored" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: '<div #container class="seatlayer-season-container"></div>', isInline: true, styles: [":host{display:block}.seatlayer-season-container{width:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
473
486
|
}
|
|
474
487
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.29", ngImport: i0, type: SeatLayerSeasonPickerComponent, decorators: [{
|
|
475
488
|
type: Component,
|
|
@@ -479,6 +492,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.29", ngImpo
|
|
|
479
492
|
args: [{ required: true }]
|
|
480
493
|
}], apiBase: [{
|
|
481
494
|
type: Input
|
|
495
|
+
}], publicKey: [{
|
|
496
|
+
type: Input
|
|
497
|
+
}], checkout: [{
|
|
498
|
+
type: Input
|
|
499
|
+
}], returnUrl: [{
|
|
500
|
+
type: Input
|
|
482
501
|
}], buyerAccessTokenProvider: [{
|
|
483
502
|
type: Input
|
|
484
503
|
}], buyerAccessToken: [{
|
|
@@ -501,6 +520,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.29", ngImpo
|
|
|
501
520
|
type: Output
|
|
502
521
|
}], accessUnavailable: [{
|
|
503
522
|
type: Output
|
|
523
|
+
}], orderConfirmed: [{
|
|
524
|
+
type: Output
|
|
504
525
|
}], statusChange: [{
|
|
505
526
|
type: Output
|
|
506
527
|
}], errored: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seatlayer-angular.mjs","sources":["../../src/seating-chart.component.ts","../../src/season-picker.component.ts","../../src/index.ts","../../src/seatlayer-angular.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnChanges,\n Output,\n SimpleChanges,\n ViewChild,\n inject,\n} from '@angular/core';\nimport {\n SeatingChart as CoreSeatingChart,\n SEATING_CHART_IDENTITY_PROPS,\n bindSeatingChartHandle,\n buildSeatingChartOptions,\n type RendererViewMode,\n type SeatingChartHandle,\n type SeatingChartOptions,\n type SelectedSeat,\n type HoldResult,\n type BestAvailableResult,\n type GAAreaAvailability,\n type SeatHoverDetails,\n type PickerSelectionValidity,\n type PickerSelectionValidator,\n type BuyerAccessToken,\n type BuyerAccessTokenProvider,\n type BuyerAccessExpiredEvent,\n type BuyerAccessUnavailableEvent,\n type SelectedObjectUnavailableEvent,\n} from '@seatlayer/js';\n\n/**\n * Angular wrapper around the framework-agnostic `@seatlayer/js` SDK.\n *\n * Standalone, so it is imported directly rather than through an NgModule.\n *\n * The canvas is created once and torn down on destroy. Only the inputs that\n * change the chart's identity (`SEATING_CHART_IDENTITY_PROPS`: `event`,\n * `apiBase`, `maxSelection`, `numberOfPlacesToSelect`, `publicKey`, `locale`, `currency`,\n * `colorblindSafe`, `initialView`, `errorDisplay`) trigger a rebuild, so an\n * unrelated change-detection pass never destroys the canvas mid-selection.\n *\n * @example\n * ```html\n * <seatlayer-seating-chart\n * #chart\n * event=\"summer-gala\"\n * (selectionChange)=\"onSelectionChange($event)\"\n * (hold)=\"onHold($event)\"\n * />\n * <button (click)=\"chart.hold()\">Continue</button>\n * ```\n */\n@Component({\n selector: 'seatlayer-seating-chart',\n standalone: true,\n template: '<div #container class=\"seatlayer-container\"></div>',\n styles: [':host { display: block; } .seatlayer-container { width: 100%; height: 100%; }'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SeatLayerSeatingChartComponent implements OnChanges {\n /** Event key to render. Changing it rebuilds the chart. */\n @Input({ required: true }) event!: string;\n\n /** API base URL. Defaults to the public API. */\n @Input() apiBase?: string;\n\n /** Cap on how many seats a buyer may select. */\n @Input() maxSelection?: number;\n\n /** Object ids or public labels selected after availability loads. */\n @Input() selectedObjects?: string[];\n\n /** Object ids or public labels the buyer may select. */\n @Input() selectableObjects?: string[] | null;\n\n /** Exact ticket count required for a valid selection. */\n @Input() numberOfPlacesToSelect?: number;\n\n /** Local buyer selection guards. Changing them rebuilds the chart. */\n @Input() selectionValidators?: PickerSelectionValidator[];\n\n /** Publishable key, when your integration uses one. */\n @Input() publicKey?: string;\n\n /** BCP-47 locale for built-in copy. */\n @Input() locale?: string;\n\n /** ISO currency for price formatting. */\n @Input() currency?: string;\n\n /** Render with colorblind-safe seat glyphs. */\n @Input() colorblindSafe?: boolean;\n\n /**\n * Initial canvas projection. Read once when the chart is built, so changing\n * it rebuilds.\n * @deprecated `'isometric'` and `'perspective'` are retired in favour of the\n * real 3D venue view; use `'flat'`.\n */\n @Input() initialView?: RendererViewMode;\n\n /**\n * What the BUYER sees when the chart cannot load: `'message'` (default) is a\n * styleable notice with a Try again button, `'none'` is silent for hosts that\n * render their own failure UI from `errored`.\n */\n @Input() errorDisplay?: 'message' | 'none';\n\n /** Show the built-in seat tooltip. Set false to draw your own from `seatHover`. */\n @Input() seatTooltip?: boolean;\n\n /** Copy overrides, read once per rebuild. */\n @Input() messages?: SeatingChartOptions['messages'];\n\n /**\n * Sales Channels: mint a buyer access session on demand. Called with a\n * `reason`; returns `{ token, expiresAt }` from YOUR backend. The token is\n * held in memory only — never storage, never a URL, never a log.\n */\n @Input() buyerAccessTokenProvider?: BuyerAccessTokenProvider;\n\n /** One-shot session for hosts that own the lifecycle. Cannot be renewed. */\n @Input() buyerAccessToken?: string | BuyerAccessToken;\n\n /** The buyer's selection changed. */\n @Output() readonly selectionChange: EventEmitter<SelectedSeat[]> = new EventEmitter<SelectedSeat[]>();\n\n /** Exact-count state changed. */\n @Output() readonly selectionValidityChange: EventEmitter<PickerSelectionValidity> =\n new EventEmitter<PickerSelectionValidity>();\n\n /** The exact count was reached. */\n @Output() readonly selectionValid: EventEmitter<SelectedSeat[]> = new EventEmitter<SelectedSeat[]>();\n\n /** The selection is not at the exact count. */\n @Output() readonly selectionInvalid: EventEmitter<PickerSelectionValidity> =\n new EventEmitter<PickerSelectionValidity>();\n\n /** The active selection cap was reached. */\n @Output() readonly selectionLimit: EventEmitter<number> = new EventEmitter<number>();\n\n /** A hold succeeded. */\n @Output() readonly hold: EventEmitter<HoldResult> = new EventEmitter<HoldResult>();\n\n /** A previous hold was restored on mount. */\n @Output() readonly holdRestored: EventEmitter<HoldResult> = new EventEmitter<HoldResult>();\n\n /** The active hold lapsed. */\n @Output() readonly holdExpired: EventEmitter<void> = new EventEmitter<void>();\n\n /** A GA area was clicked. */\n @Output() readonly gaClick: EventEmitter<GAAreaAvailability> = new EventEmitter<GAAreaAvailability>();\n\n /** Something failed — a network error, a rejected hold. */\n @Output() readonly errored: EventEmitter<unknown> = new EventEmitter<unknown>();\n\n /** A floor deck was tapped in the 3D view. */\n @Output() readonly deckTap: EventEmitter<string> = new EventEmitter<string>();\n\n /** A transient hint worth showing the buyer, or `null` to clear it. */\n @Output() readonly hint: EventEmitter<string | null> = new EventEmitter<string | null>();\n\n /** The pointer moved onto a seat, or off one (`null`). */\n @Output() readonly seatHover: EventEmitter<SeatHoverDetails | null> = new EventEmitter<SeatHoverDetails | null>();\n\n /** The buyer access session lapsed; `refreshed` says whether it recovered. */\n @Output() readonly accessExpired: EventEmitter<BuyerAccessExpiredEvent> =\n new EventEmitter<BuyerAccessExpiredEvent>();\n\n /** Private inventory is unavailable and refreshing will not fix it. */\n @Output() readonly accessUnavailable: EventEmitter<BuyerAccessUnavailableEvent> =\n new EventEmitter<BuyerAccessUnavailableEvent>();\n\n /** Selected-but-unheld units stopped being selectable. */\n @Output() readonly selectedObjectUnavailable: EventEmitter<SelectedObjectUnavailableEvent> =\n new EventEmitter<SelectedObjectUnavailableEvent>();\n\n @ViewChild('container', { static: true })\n private readonly container!: ElementRef<HTMLDivElement>;\n\n private readonly zone = inject(NgZone);\n private chart: CoreSeatingChart | null = null;\n\n /**\n * Inputs that require tearing the canvas down and rebuilding it. The shared\n * list from `@seatlayer/js`, not a hand-copied one — this is exactly the place\n * Angular fell two inputs behind React.\n */\n private static readonly REBUILD_INPUTS = SEATING_CHART_IDENTITY_PROPS;\n\n /**\n * The canonical forwarding object. Every imperative method below is a\n * one-line delegate to it, so the component cannot forward a method the other\n * wrappers do not, or miss one they do.\n */\n private readonly handle: SeatingChartHandle = bindSeatingChartHandle(() => this.chart);\n\n constructor() {\n inject(DestroyRef).onDestroy(() => this.destroy());\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const needsRebuild = SeatLayerSeatingChartComponent.REBUILD_INPUTS.some((name) => name in changes);\n if (needsRebuild) {\n this.build();\n }\n }\n\n // ---------- imperative API, for a template ref ----------\n\n /** Hold the current selection. Resolves the hold, or `null` on a 409 conflict. */\n holdSelection(options?: { ttlMs?: number }): Promise<HoldResult | null> {\n return this.handle.hold(options);\n }\n\n /** Restore an active hold by its opaque id. */\n resumeHold(holdId: string): Promise<HoldResult | null> {\n return this.handle.resumeHold(holdId);\n }\n\n /** Current active hold known to the chart. */\n getCurrentHold(): HoldResult | null {\n return this.handle.getCurrentHold();\n }\n\n /** GA areas with live remaining capacity. */\n getGAAreas(): GAAreaAvailability[] {\n return this.handle.getGAAreas();\n }\n\n /** Atomically hold a quantity from one GA area. */\n holdGA(\n areaId: string,\n qty: number,\n options?: { tierId?: string | null; ttlMs?: number },\n ): Promise<HoldResult | null> {\n return this.handle.holdGA(areaId, qty, options);\n }\n\n /** Ask the server for the `qty` best free seats and hold them atomically. */\n bestAvailable(qty: number, categoryKey?: string): Promise<BestAvailableResult | null> {\n return this.handle.bestAvailable(qty, categoryKey);\n }\n\n /** Release the current hold (if any). */\n release(): Promise<void> {\n return this.handle.release();\n }\n\n /** Release some held labels while keeping the remainder active. */\n releaseLabels(labels: string[]): Promise<boolean> {\n return this.handle.releaseLabels(labels);\n }\n\n /** The current selection, with prices resolved from the chart categories. */\n getSelection(): SelectedSeat[] {\n return this.handle.getSelection();\n }\n\n selectObjects(objects: string[]): SelectedSeat[] {\n return this.handle.selectObjects(objects);\n }\n\n deselectObjects(objects: string[]): void {\n this.handle.deselectObjects(objects);\n }\n\n clearSelection(): void {\n this.handle.clearSelection();\n }\n\n selectCategories(categoryKeys: string[]): SelectedSeat[] {\n return this.handle.selectCategories(categoryKeys);\n }\n\n deselectCategories(categoryKeys: string[]): void {\n this.handle.deselectCategories(categoryKeys);\n }\n\n setSelectableObjects(objects: string[] | null): void {\n this.handle.setSelectableObjects(objects);\n }\n\n setMaxSelection(maxSelection: number): void {\n this.handle.setMaxSelection(maxSelection);\n }\n\n getSelectionValidity(): PickerSelectionValidity | null {\n return this.handle.getSelectionValidity();\n }\n\n /** Choose a ticket tier for a selected seat; `null` reverts to the default. */\n setSeatTier(seatId: string, tierId: string | null): void {\n this.handle.setSeatTier(seatId, tierId);\n }\n\n /** Floors of a multi-floor chart. Empty before the first render. */\n getFloors(): { id: string; name: string }[] {\n return this.handle.getFloors();\n }\n\n /** Switch the shown floor (2D). No-ops on single-floor charts. */\n setFloor(floorId: string): void {\n this.handle.setFloor(floorId);\n }\n\n /** Toggle colorblind-safe rendering at runtime. */\n setColorblindSafe(on: boolean): void {\n this.handle.setColorblindSafe(on);\n }\n\n /** Zoom in one step (same increment as the wheel/pinch gesture). */\n zoomIn(): void {\n this.handle.zoomIn();\n }\n\n /** Zoom out one step. */\n zoomOut(): void {\n this.handle.zoomOut();\n }\n\n /** Reset the camera so the whole chart fits the container. */\n zoomToFit(): void {\n this.handle.zoomToFit();\n }\n\n /**\n * Re-acquire the buyer access session after your app re-authorizes the buyer\n * (Sales Channels). Resolves false when the chart is not access-scoped.\n */\n refreshAccess(): Promise<boolean> {\n return this.handle.refreshAccess();\n }\n\n // ---------- internals ----------\n\n private build(): void {\n const element = this.container?.nativeElement;\n if (!element) return;\n\n this.destroy();\n\n // The chart runs a rAF render loop and pointer handlers. Left inside the\n // Angular zone, every frame would schedule change detection for the whole\n // application — so it is built outside, and each callback re-enters the zone\n // only to emit, which is the only part Angular needs to see.\n this.zone.runOutsideAngular(() => {\n const emit = <T>(emitter: EventEmitter<T>, value: T) =>\n this.zone.run(() => emitter.emit(value));\n\n const instance = new CoreSeatingChart(buildSeatingChartOptions(\n element,\n {\n event: this.event,\n apiBase: this.apiBase,\n maxSelection: this.maxSelection,\n selectedObjects: this.selectedObjects,\n selectableObjects: this.selectableObjects,\n numberOfPlacesToSelect: this.numberOfPlacesToSelect,\n selectionValidators: this.selectionValidators,\n publicKey: this.publicKey,\n locale: this.locale,\n currency: this.currency,\n colorblindSafe: this.colorblindSafe,\n initialView: this.initialView,\n errorDisplay: this.errorDisplay,\n messages: this.messages,\n seatTooltip: this.seatTooltip,\n buyerAccessTokenProvider: this.buyerAccessTokenProvider,\n buyerAccessToken: this.buyerAccessToken,\n },\n {\n onSelectionChange: (seats) => emit(this.selectionChange, seats),\n onSelectionValidityChange: (state) => emit(this.selectionValidityChange, state),\n onSelectionValid: (seats) => emit(this.selectionValid, seats),\n onSelectionInvalid: (state) => emit(this.selectionInvalid, state),\n onSelectionLimit: (max) => emit(this.selectionLimit, max),\n onHold: (result) => emit(this.hold, result),\n onHoldRestored: (result) => emit(this.holdRestored, result),\n onHoldExpired: () => this.zone.run(() => this.holdExpired.emit()),\n onGAClick: (area) => emit(this.gaClick, area),\n onError: (error) => emit(this.errored, error),\n onDeckTap: (floorId) => emit(this.deckTap, floorId),\n onHint: (message) => emit(this.hint, message),\n onSeatHover: (details) => emit(this.seatHover, details),\n onAccessExpired: (state) => emit(this.accessExpired, state),\n onAccessUnavailable: (state) => emit(this.accessUnavailable, state),\n onSelectedObjectUnavailable: (state) => emit(this.selectedObjectUnavailable, state),\n },\n ));\n\n this.chart = instance;\n void instance.render();\n });\n }\n\n private destroy(): void {\n this.chart?.destroy();\n this.chart = null;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnChanges,\n Output,\n SimpleChanges,\n ViewChild,\n inject,\n} from '@angular/core';\nimport {\n SeasonPicker as CoreSeasonPicker,\n type SeasonAvailability,\n type SeasonCheckoutHandoff,\n type SeasonDescriptor,\n type SeasonPickerOptions,\n type SeasonRenewalIntent,\n type SeasonStatusEvent,\n} from '@seatlayer/js';\n\n/** Standalone Angular adapter for the distinct fixed-inclusion Season buyer flow. */\n@Component({\n selector: 'seatlayer-season-picker',\n standalone: true,\n template: '<div #container class=\"seatlayer-season-container\"></div>',\n styles: [':host { display: block; } .seatlayer-season-container { width: 100%; }'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SeatLayerSeasonPickerComponent implements OnChanges {\n /** Season key to render. */\n @Input({ required: true }) season!: string;\n\n /** Public API base override. */\n @Input() apiBase?: string;\n\n /** Refreshable one-time browser bearer provider. */\n @Input() buyerAccessTokenProvider?: SeasonPickerOptions['buyerAccessTokenProvider'];\n\n /** One-time Season browser bearer. */\n @Input() buyerAccessToken?: SeasonPickerOptions['buyerAccessToken'];\n\n /** Operation restored after an uncertain create response. */\n @Input() initialOperationId?: string;\n\n /** Maximum recovery polling time. */\n @Input() recoveryTimeoutMs?: number;\n\n /** Test or host fetch implementation. */\n @Input() fetch?: typeof fetch;\n\n /** A same-seat hold reached a safe handoff. */\n @Output() readonly hold = new EventEmitter<SeasonCheckoutHandoff>();\n\n /** The active handoff changed or was released. */\n @Output() readonly holdChange = new EventEmitter<SeasonCheckoutHandoff | null>();\n\n /** The buyer continued with an opaque handoff. */\n @Output() readonly continued = new EventEmitter<SeasonCheckoutHandoff>();\n\n /** A returning holder recorded browser intent only. */\n @Output() readonly renewalIntent = new EventEmitter<SeasonRenewalIntent>();\n\n /** Buyer access expired. */\n @Output() readonly accessExpired = new EventEmitter<unknown>();\n\n /** Buyer access cannot be recovered. */\n @Output() readonly accessUnavailable = new EventEmitter<unknown>();\n\n /** Buyer-visible operation status changed. */\n @Output() readonly statusChange = new EventEmitter<SeasonStatusEvent>();\n\n /** The Season buyer flow failed. */\n @Output() readonly errored = new EventEmitter<unknown>();\n\n @ViewChild('container', { static: true })\n private readonly container!: ElementRef<HTMLDivElement>;\n\n private static readonly REBUILD_INPUTS = new Set([\n 'season', 'apiBase', 'buyerAccessTokenProvider', 'buyerAccessToken',\n 'initialOperationId', 'recoveryTimeoutMs', 'fetch',\n ]);\n private readonly zone = inject(NgZone);\n private picker: CoreSeasonPicker | null = null;\n\n constructor() {\n inject(DestroyRef).onDestroy(() => this.destroy());\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (Object.keys(changes).some((name) => SeatLayerSeasonPickerComponent.REBUILD_INPUTS.has(name))) {\n this.build();\n }\n }\n\n /** Holds the same labels across every included occurrence. */\n holdSameSeat(labels: readonly string[], operationId: string): Promise<SeasonCheckoutHandoff> {\n return this.current().holdSameSeat(labels, operationId);\n }\n\n /** Restores a caller-stable Season operation after uncertainty. */\n restoreOperation(operationId: string): Promise<SeasonCheckoutHandoff | null> {\n return this.current().restoreOperation(operationId);\n }\n\n /** Releases the active selection with a caller-stable action id. */\n release(releaseActionId: string): Promise<void> {\n return this.current().release(releaseActionId);\n }\n\n /** Records renewal intent; trusted server code still inspects and commits it. */\n createRenewalIntent(offerId: string): Promise<SeasonRenewalIntent> {\n return this.current().createRenewalIntent(offerId);\n }\n\n /** Current immutable Season descriptor. */\n getDescriptor(): SeasonDescriptor | null {\n return this.picker?.getDescriptor() ?? null;\n }\n\n /** Current same-seat aggregate availability. */\n getAvailability(): SeasonAvailability | null {\n return this.picker?.getAvailability() ?? null;\n }\n\n /** Current opaque checkout handoff. */\n getHandoff(): SeasonCheckoutHandoff | null {\n return this.picker?.getHandoff() ?? null;\n }\n\n private build(): void {\n this.destroy();\n this.zone.runOutsideAngular(() => {\n const picker = new CoreSeasonPicker({\n container: this.container.nativeElement,\n season: this.season,\n apiBase: this.apiBase,\n buyerAccessTokenProvider: this.buyerAccessTokenProvider,\n buyerAccessToken: this.buyerAccessToken,\n initialOperationId: this.initialOperationId,\n recoveryTimeoutMs: this.recoveryTimeoutMs,\n fetch: this.fetch,\n onHold: (value) => this.zone.run(() => this.hold.emit(value)),\n onHoldChange: (value) => this.zone.run(() => this.holdChange.emit(value)),\n onContinue: (value) => this.zone.run(() => this.continued.emit(value)),\n onRenewalIntent: (value) => this.zone.run(() => this.renewalIntent.emit(value)),\n onAccessExpired: (value) => this.zone.run(() => this.accessExpired.emit(value)),\n onAccessUnavailable: (value) => this.zone.run(() => this.accessUnavailable.emit(value)),\n onStatusChange: (value) => this.zone.run(() => this.statusChange.emit(value)),\n onError: (value) => this.zone.run(() => this.errored.emit(value)),\n });\n this.picker = picker;\n void picker.render().catch(() => undefined);\n });\n }\n\n private current(): CoreSeasonPicker {\n if (!this.picker) throw new Error('seatlayer: Angular SeasonPicker is not mounted');\n return this.picker;\n }\n\n private destroy(): void {\n this.picker?.destroy();\n this.picker = null;\n }\n}\n","/**\n * @seatlayer/angular — the Angular wrapper for the SeatLayer embed SDK.\n *\n * The component is standalone; import it directly rather than through an\n * NgModule.\n */\nexport { SeatLayerSeatingChartComponent } from './seating-chart.component';\nexport { SeatLayerSeasonPickerComponent } from './season-picker.component';\n\nexport type {\n SelectedSeat,\n HoldResult,\n BestAvailableResult,\n GAAreaAvailability,\n HoldLineItem,\n SeatHoverDetails,\n SeasonAvailability,\n SeasonCheckoutHandoff,\n SeasonDescriptor,\n SeasonOperation,\n SeasonOperationState,\n SeasonPickerOptions,\n SeasonRenewalIntent,\n SeasonStatusEvent,\n} from '@seatlayer/js';\n\n// Sales Channels — buyer access sessions for private channel inventory.\nexport type {\n BuyerAccessToken,\n BuyerAccessTokenProvider,\n BuyerAccessRefreshReason,\n BuyerAccessUnavailableReason,\n BuyerAccessExpiredEvent,\n BuyerAccessUnavailableEvent,\n SelectedObjectUnavailableEvent,\n} from '@seatlayer/js';\n\n// The framework-agnostic widget class — for the one-call modal (SeatPickerWidget.open()).\nexport { SeatPicker as SeatPickerWidget } from '@seatlayer/js';\n\n// Host-side embed helper: grows the iframe on `seatlayer:height` and pins it on\n// `seatlayer:fullscreen`. Angular hosts depend on this package alone, so it has to\n// be reachable here rather than only from @seatlayer/js.\nexport { attachPickerFrame } from '@seatlayer/js';\nexport type { AttachPickerFrameOptions } from '@seatlayer/js';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["CoreSeatingChart","CoreSeasonPicker"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"seatlayer-angular.mjs","sources":["../../src/seating-chart.component.ts","../../src/season-picker.component.ts","../../src/index.ts","../../src/seatlayer-angular.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnChanges,\n Output,\n SimpleChanges,\n ViewChild,\n inject,\n} from '@angular/core';\nimport {\n SeatingChart as CoreSeatingChart,\n SEATING_CHART_IDENTITY_PROPS,\n bindSeatingChartHandle,\n buildSeatingChartOptions,\n type RendererViewMode,\n type SeatingChartHandle,\n type SeatingChartOptions,\n type SelectedSeat,\n type HoldResult,\n type BestAvailableResult,\n type GAAreaAvailability,\n type SeatHoverDetails,\n type PickerSelectionValidity,\n type PickerSelectionValidator,\n type BuyerAccessToken,\n type BuyerAccessTokenProvider,\n type BuyerAccessExpiredEvent,\n type BuyerAccessUnavailableEvent,\n type SelectedObjectUnavailableEvent,\n} from '@seatlayer/js';\n\n/**\n * Angular wrapper around the framework-agnostic `@seatlayer/js` SDK.\n *\n * Standalone, so it is imported directly rather than through an NgModule.\n *\n * The canvas is created once and torn down on destroy. Only the inputs that\n * change the chart's identity (`SEATING_CHART_IDENTITY_PROPS`: `event`,\n * `apiBase`, `maxSelection`, `numberOfPlacesToSelect`, `publicKey`, `locale`, `currency`,\n * `colorblindSafe`, `initialView`, `errorDisplay`) trigger a rebuild, so an\n * unrelated change-detection pass never destroys the canvas mid-selection.\n *\n * @example\n * ```html\n * <seatlayer-seating-chart\n * #chart\n * event=\"summer-gala\"\n * (selectionChange)=\"onSelectionChange($event)\"\n * (hold)=\"onHold($event)\"\n * />\n * <button (click)=\"chart.hold()\">Continue</button>\n * ```\n */\n@Component({\n selector: 'seatlayer-seating-chart',\n standalone: true,\n template: '<div #container class=\"seatlayer-container\"></div>',\n styles: [':host { display: block; } .seatlayer-container { width: 100%; height: 100%; }'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SeatLayerSeatingChartComponent implements OnChanges {\n /** Event key to render. Changing it rebuilds the chart. */\n @Input({ required: true }) event!: string;\n\n /** API base URL. Defaults to the public API. */\n @Input() apiBase?: string;\n\n /** Cap on how many seats a buyer may select. */\n @Input() maxSelection?: number;\n\n /** Object ids or public labels selected after availability loads. */\n @Input() selectedObjects?: string[];\n\n /** Object ids or public labels the buyer may select. */\n @Input() selectableObjects?: string[] | null;\n\n /** Exact ticket count required for a valid selection. */\n @Input() numberOfPlacesToSelect?: number;\n\n /** Local buyer selection guards. Changing them rebuilds the chart. */\n @Input() selectionValidators?: PickerSelectionValidator[];\n\n /** Publishable key, when your integration uses one. */\n @Input() publicKey?: string;\n\n /** BCP-47 locale for built-in copy. */\n @Input() locale?: string;\n\n /** ISO currency for price formatting. */\n @Input() currency?: string;\n\n /** Render with colorblind-safe seat glyphs. */\n @Input() colorblindSafe?: boolean;\n\n /**\n * Initial canvas projection. Read once when the chart is built, so changing\n * it rebuilds.\n * @deprecated `'isometric'` and `'perspective'` are retired in favour of the\n * real 3D venue view; use `'flat'`.\n */\n @Input() initialView?: RendererViewMode;\n\n /**\n * What the BUYER sees when the chart cannot load: `'message'` (default) is a\n * styleable notice with a Try again button, `'none'` is silent for hosts that\n * render their own failure UI from `errored`.\n */\n @Input() errorDisplay?: 'message' | 'none';\n\n /** Show the built-in seat tooltip. Set false to draw your own from `seatHover`. */\n @Input() seatTooltip?: boolean;\n\n /** Copy overrides, read once per rebuild. */\n @Input() messages?: SeatingChartOptions['messages'];\n\n /**\n * Sales Channels: mint a buyer access session on demand. Called with a\n * `reason`; returns `{ token, expiresAt }` from YOUR backend. The token is\n * held in memory only — never storage, never a URL, never a log.\n */\n @Input() buyerAccessTokenProvider?: BuyerAccessTokenProvider;\n\n /** One-shot session for hosts that own the lifecycle. Cannot be renewed. */\n @Input() buyerAccessToken?: string | BuyerAccessToken;\n\n /** The buyer's selection changed. */\n @Output() readonly selectionChange: EventEmitter<SelectedSeat[]> = new EventEmitter<SelectedSeat[]>();\n\n /** Exact-count state changed. */\n @Output() readonly selectionValidityChange: EventEmitter<PickerSelectionValidity> =\n new EventEmitter<PickerSelectionValidity>();\n\n /** The exact count was reached. */\n @Output() readonly selectionValid: EventEmitter<SelectedSeat[]> = new EventEmitter<SelectedSeat[]>();\n\n /** The selection is not at the exact count. */\n @Output() readonly selectionInvalid: EventEmitter<PickerSelectionValidity> =\n new EventEmitter<PickerSelectionValidity>();\n\n /** The active selection cap was reached. */\n @Output() readonly selectionLimit: EventEmitter<number> = new EventEmitter<number>();\n\n /** A hold succeeded. */\n @Output() readonly hold: EventEmitter<HoldResult> = new EventEmitter<HoldResult>();\n\n /** A previous hold was restored on mount. */\n @Output() readonly holdRestored: EventEmitter<HoldResult> = new EventEmitter<HoldResult>();\n\n /** The active hold lapsed. */\n @Output() readonly holdExpired: EventEmitter<void> = new EventEmitter<void>();\n\n /** A GA area was clicked. */\n @Output() readonly gaClick: EventEmitter<GAAreaAvailability> = new EventEmitter<GAAreaAvailability>();\n\n /** Something failed — a network error, a rejected hold. */\n @Output() readonly errored: EventEmitter<unknown> = new EventEmitter<unknown>();\n\n /** A floor deck was tapped in the 3D view. */\n @Output() readonly deckTap: EventEmitter<string> = new EventEmitter<string>();\n\n /** A transient hint worth showing the buyer, or `null` to clear it. */\n @Output() readonly hint: EventEmitter<string | null> = new EventEmitter<string | null>();\n\n /** The pointer moved onto a seat, or off one (`null`). */\n @Output() readonly seatHover: EventEmitter<SeatHoverDetails | null> = new EventEmitter<SeatHoverDetails | null>();\n\n /** The buyer access session lapsed; `refreshed` says whether it recovered. */\n @Output() readonly accessExpired: EventEmitter<BuyerAccessExpiredEvent> =\n new EventEmitter<BuyerAccessExpiredEvent>();\n\n /** Private inventory is unavailable and refreshing will not fix it. */\n @Output() readonly accessUnavailable: EventEmitter<BuyerAccessUnavailableEvent> =\n new EventEmitter<BuyerAccessUnavailableEvent>();\n\n /** Selected-but-unheld units stopped being selectable. */\n @Output() readonly selectedObjectUnavailable: EventEmitter<SelectedObjectUnavailableEvent> =\n new EventEmitter<SelectedObjectUnavailableEvent>();\n\n @ViewChild('container', { static: true })\n private readonly container!: ElementRef<HTMLDivElement>;\n\n private readonly zone = inject(NgZone);\n private chart: CoreSeatingChart | null = null;\n\n /**\n * Inputs that require tearing the canvas down and rebuilding it. The shared\n * list from `@seatlayer/js`, not a hand-copied one — this is exactly the place\n * Angular fell two inputs behind React.\n */\n private static readonly REBUILD_INPUTS = SEATING_CHART_IDENTITY_PROPS;\n\n /**\n * The canonical forwarding object. Every imperative method below is a\n * one-line delegate to it, so the component cannot forward a method the other\n * wrappers do not, or miss one they do.\n */\n private readonly handle: SeatingChartHandle = bindSeatingChartHandle(() => this.chart);\n\n constructor() {\n inject(DestroyRef).onDestroy(() => this.destroy());\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const needsRebuild = SeatLayerSeatingChartComponent.REBUILD_INPUTS.some((name) => name in changes);\n if (needsRebuild) {\n this.build();\n }\n }\n\n // ---------- imperative API, for a template ref ----------\n\n /** Hold the current selection. Resolves the hold, or `null` on a 409 conflict. */\n holdSelection(options?: { ttlMs?: number }): Promise<HoldResult | null> {\n return this.handle.hold(options);\n }\n\n /** Restore an active hold by its opaque id. */\n resumeHold(holdId: string): Promise<HoldResult | null> {\n return this.handle.resumeHold(holdId);\n }\n\n /** Current active hold known to the chart. */\n getCurrentHold(): HoldResult | null {\n return this.handle.getCurrentHold();\n }\n\n /** GA areas with live remaining capacity. */\n getGAAreas(): GAAreaAvailability[] {\n return this.handle.getGAAreas();\n }\n\n /** Atomically hold a quantity from one GA area. */\n holdGA(\n areaId: string,\n qty: number,\n options?: { tierId?: string | null; ttlMs?: number },\n ): Promise<HoldResult | null> {\n return this.handle.holdGA(areaId, qty, options);\n }\n\n /** Ask the server for the `qty` best free seats and hold them atomically. */\n bestAvailable(qty: number, categoryKey?: string): Promise<BestAvailableResult | null> {\n return this.handle.bestAvailable(qty, categoryKey);\n }\n\n /** Release the current hold (if any). */\n release(): Promise<void> {\n return this.handle.release();\n }\n\n /** Release some held labels while keeping the remainder active. */\n releaseLabels(labels: string[]): Promise<boolean> {\n return this.handle.releaseLabels(labels);\n }\n\n /** The current selection, with prices resolved from the chart categories. */\n getSelection(): SelectedSeat[] {\n return this.handle.getSelection();\n }\n\n selectObjects(objects: string[]): SelectedSeat[] {\n return this.handle.selectObjects(objects);\n }\n\n deselectObjects(objects: string[]): void {\n this.handle.deselectObjects(objects);\n }\n\n clearSelection(): void {\n this.handle.clearSelection();\n }\n\n selectCategories(categoryKeys: string[]): SelectedSeat[] {\n return this.handle.selectCategories(categoryKeys);\n }\n\n deselectCategories(categoryKeys: string[]): void {\n this.handle.deselectCategories(categoryKeys);\n }\n\n setSelectableObjects(objects: string[] | null): void {\n this.handle.setSelectableObjects(objects);\n }\n\n setMaxSelection(maxSelection: number): void {\n this.handle.setMaxSelection(maxSelection);\n }\n\n getSelectionValidity(): PickerSelectionValidity | null {\n return this.handle.getSelectionValidity();\n }\n\n /** Choose a ticket tier for a selected seat; `null` reverts to the default. */\n setSeatTier(seatId: string, tierId: string | null): void {\n this.handle.setSeatTier(seatId, tierId);\n }\n\n /** Floors of a multi-floor chart. Empty before the first render. */\n getFloors(): { id: string; name: string }[] {\n return this.handle.getFloors();\n }\n\n /** Switch the shown floor (2D). No-ops on single-floor charts. */\n setFloor(floorId: string): void {\n this.handle.setFloor(floorId);\n }\n\n /** Toggle colorblind-safe rendering at runtime. */\n setColorblindSafe(on: boolean): void {\n this.handle.setColorblindSafe(on);\n }\n\n /** Zoom in one step (same increment as the wheel/pinch gesture). */\n zoomIn(): void {\n this.handle.zoomIn();\n }\n\n /** Zoom out one step. */\n zoomOut(): void {\n this.handle.zoomOut();\n }\n\n /** Reset the camera so the whole chart fits the container. */\n zoomToFit(): void {\n this.handle.zoomToFit();\n }\n\n /**\n * Re-acquire the buyer access session after your app re-authorizes the buyer\n * (Sales Channels). Resolves false when the chart is not access-scoped.\n */\n refreshAccess(): Promise<boolean> {\n return this.handle.refreshAccess();\n }\n\n // ---------- internals ----------\n\n private build(): void {\n const element = this.container?.nativeElement;\n if (!element) return;\n\n this.destroy();\n\n // The chart runs a rAF render loop and pointer handlers. Left inside the\n // Angular zone, every frame would schedule change detection for the whole\n // application — so it is built outside, and each callback re-enters the zone\n // only to emit, which is the only part Angular needs to see.\n this.zone.runOutsideAngular(() => {\n const emit = <T>(emitter: EventEmitter<T>, value: T) =>\n this.zone.run(() => emitter.emit(value));\n\n const instance = new CoreSeatingChart(buildSeatingChartOptions(\n element,\n {\n event: this.event,\n apiBase: this.apiBase,\n maxSelection: this.maxSelection,\n selectedObjects: this.selectedObjects,\n selectableObjects: this.selectableObjects,\n numberOfPlacesToSelect: this.numberOfPlacesToSelect,\n selectionValidators: this.selectionValidators,\n publicKey: this.publicKey,\n locale: this.locale,\n currency: this.currency,\n colorblindSafe: this.colorblindSafe,\n initialView: this.initialView,\n errorDisplay: this.errorDisplay,\n messages: this.messages,\n seatTooltip: this.seatTooltip,\n buyerAccessTokenProvider: this.buyerAccessTokenProvider,\n buyerAccessToken: this.buyerAccessToken,\n },\n {\n onSelectionChange: (seats) => emit(this.selectionChange, seats),\n onSelectionValidityChange: (state) => emit(this.selectionValidityChange, state),\n onSelectionValid: (seats) => emit(this.selectionValid, seats),\n onSelectionInvalid: (state) => emit(this.selectionInvalid, state),\n onSelectionLimit: (max) => emit(this.selectionLimit, max),\n onHold: (result) => emit(this.hold, result),\n onHoldRestored: (result) => emit(this.holdRestored, result),\n onHoldExpired: () => this.zone.run(() => this.holdExpired.emit()),\n onGAClick: (area) => emit(this.gaClick, area),\n onError: (error) => emit(this.errored, error),\n onDeckTap: (floorId) => emit(this.deckTap, floorId),\n onHint: (message) => emit(this.hint, message),\n onSeatHover: (details) => emit(this.seatHover, details),\n onAccessExpired: (state) => emit(this.accessExpired, state),\n onAccessUnavailable: (state) => emit(this.accessUnavailable, state),\n onSelectedObjectUnavailable: (state) => emit(this.selectedObjectUnavailable, state),\n },\n ));\n\n this.chart = instance;\n void instance.render();\n });\n }\n\n private destroy(): void {\n this.chart?.destroy();\n this.chart = null;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnChanges,\n Output,\n SimpleChanges,\n ViewChild,\n inject,\n} from '@angular/core';\nimport {\n SeasonPicker as CoreSeasonPicker,\n type SeasonAvailability,\n type SeasonCheckoutHandoff,\n type SeasonDescriptor,\n type SeasonPickerOptions,\n type SeasonRenewalIntent,\n type SeasonStatusEvent,\n} from '@seatlayer/js';\n\n/** Standalone Angular adapter for the distinct fixed-inclusion Season buyer flow. */\n@Component({\n selector: 'seatlayer-season-picker',\n standalone: true,\n template: '<div #container class=\"seatlayer-season-container\"></div>',\n styles: [':host { display: block; } .seatlayer-season-container { width: 100%; }'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SeatLayerSeasonPickerComponent implements OnChanges {\n /** Season key to render. */\n @Input({ required: true }) season!: string;\n\n /** Public API base override. */\n @Input() apiBase?: string;\n\n /** Publishable account key, accepted for snippet parity. Never sent. */\n @Input() publicKey?: string;\n\n /** Who takes the money once the package is held. Default `'handoff'`. */\n @Input() checkout?: SeasonPickerOptions['checkout'];\n\n /** Where a redirecting gateway returns the buyer, for hosted checkout. */\n @Input() returnUrl?: string;\n\n /** Refreshable one-time browser bearer provider. */\n @Input() buyerAccessTokenProvider?: SeasonPickerOptions['buyerAccessTokenProvider'];\n\n /** One-time Season browser bearer. */\n @Input() buyerAccessToken?: SeasonPickerOptions['buyerAccessToken'];\n\n /** Operation restored after an uncertain create response. */\n @Input() initialOperationId?: string;\n\n /** Maximum recovery polling time. */\n @Input() recoveryTimeoutMs?: number;\n\n /** Test or host fetch implementation. */\n @Input() fetch?: typeof fetch;\n\n /** A same-seat hold reached a safe handoff. */\n @Output() readonly hold = new EventEmitter<SeasonCheckoutHandoff>();\n\n /** The active handoff changed or was released. */\n @Output() readonly holdChange = new EventEmitter<SeasonCheckoutHandoff | null>();\n\n /** The buyer continued with an opaque handoff. */\n @Output() readonly continued = new EventEmitter<SeasonCheckoutHandoff>();\n\n /** A returning holder recorded browser intent only. */\n @Output() readonly renewalIntent = new EventEmitter<SeasonRenewalIntent>();\n\n /** Buyer access expired. */\n @Output() readonly accessExpired = new EventEmitter<unknown>();\n\n /** Buyer access cannot be recovered. */\n @Output() readonly accessUnavailable = new EventEmitter<unknown>();\n\n /** Hosted checkout only: the gateway webhook landed and the order is paid. */\n @Output() readonly orderConfirmed = new EventEmitter<unknown>();\n\n /** Buyer-visible operation status changed. */\n @Output() readonly statusChange = new EventEmitter<SeasonStatusEvent>();\n\n /** The Season buyer flow failed. */\n @Output() readonly errored = new EventEmitter<unknown>();\n\n @ViewChild('container', { static: true })\n private readonly container!: ElementRef<HTMLDivElement>;\n\n private static readonly REBUILD_INPUTS = new Set([\n 'season', 'apiBase', 'publicKey', 'checkout', 'returnUrl',\n 'buyerAccessTokenProvider', 'buyerAccessToken',\n 'initialOperationId', 'recoveryTimeoutMs', 'fetch',\n ]);\n private readonly zone = inject(NgZone);\n private picker: CoreSeasonPicker | null = null;\n\n constructor() {\n inject(DestroyRef).onDestroy(() => this.destroy());\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (Object.keys(changes).some((name) => SeatLayerSeasonPickerComponent.REBUILD_INPUTS.has(name))) {\n this.build();\n }\n }\n\n /** Holds the same labels across every included occurrence. */\n holdSameSeat(labels: readonly string[], operationId: string): Promise<SeasonCheckoutHandoff> {\n return this.current().holdSameSeat(labels, operationId);\n }\n\n /** Restores a caller-stable Season operation after uncertainty. */\n restoreOperation(operationId: string): Promise<SeasonCheckoutHandoff | null> {\n return this.current().restoreOperation(operationId);\n }\n\n /** Releases the active selection with a caller-stable action id. */\n release(releaseActionId: string): Promise<void> {\n return this.current().release(releaseActionId);\n }\n\n /** Records renewal intent; trusted server code still inspects and commits it. */\n createRenewalIntent(offerId: string): Promise<SeasonRenewalIntent> {\n return this.current().createRenewalIntent(offerId);\n }\n\n /** Current immutable Season descriptor. */\n getDescriptor(): SeasonDescriptor | null {\n return this.picker?.getDescriptor() ?? null;\n }\n\n /** Current same-seat aggregate availability. */\n getAvailability(): SeasonAvailability | null {\n return this.picker?.getAvailability() ?? null;\n }\n\n /** Current opaque checkout handoff. */\n getHandoff(): SeasonCheckoutHandoff | null {\n return this.picker?.getHandoff() ?? null;\n }\n\n private build(): void {\n this.destroy();\n this.zone.runOutsideAngular(() => {\n const picker = new CoreSeasonPicker({\n container: this.container.nativeElement,\n season: this.season,\n apiBase: this.apiBase,\n publicKey: this.publicKey,\n checkout: this.checkout,\n returnUrl: this.returnUrl,\n buyerAccessTokenProvider: this.buyerAccessTokenProvider,\n buyerAccessToken: this.buyerAccessToken,\n initialOperationId: this.initialOperationId,\n recoveryTimeoutMs: this.recoveryTimeoutMs,\n fetch: this.fetch,\n onHold: (value) => this.zone.run(() => this.hold.emit(value)),\n onHoldChange: (value) => this.zone.run(() => this.holdChange.emit(value)),\n onContinue: (value) => this.zone.run(() => this.continued.emit(value)),\n onRenewalIntent: (value) => this.zone.run(() => this.renewalIntent.emit(value)),\n onAccessExpired: (value) => this.zone.run(() => this.accessExpired.emit(value)),\n onAccessUnavailable: (value) => this.zone.run(() => this.accessUnavailable.emit(value)),\n onOrderConfirmed: (value) => this.zone.run(() => this.orderConfirmed.emit(value)),\n onStatusChange: (value) => this.zone.run(() => this.statusChange.emit(value)),\n onError: (value) => this.zone.run(() => this.errored.emit(value)),\n });\n this.picker = picker;\n void picker.render().catch(() => undefined);\n });\n }\n\n private current(): CoreSeasonPicker {\n if (!this.picker) throw new Error('seatlayer: Angular SeasonPicker is not mounted');\n return this.picker;\n }\n\n private destroy(): void {\n this.picker?.destroy();\n this.picker = null;\n }\n}\n","/**\n * @seatlayer/angular — the Angular wrapper for the SeatLayer embed SDK.\n *\n * The component is standalone; import it directly rather than through an\n * NgModule.\n */\nexport { SeatLayerSeatingChartComponent } from './seating-chart.component';\nexport { SeatLayerSeasonPickerComponent } from './season-picker.component';\n\nexport type {\n SelectedSeat,\n HoldResult,\n BestAvailableResult,\n GAAreaAvailability,\n HoldLineItem,\n SeatHoverDetails,\n SeasonAvailability,\n SeasonCheckoutHandoff,\n SeasonDescriptor,\n SeasonOperation,\n SeasonOperationState,\n SeasonPickerOptions,\n SeasonRenewalIntent,\n SeasonStatusEvent,\n} from '@seatlayer/js';\n\n// Sales Channels — buyer access sessions for private channel inventory.\nexport type {\n BuyerAccessToken,\n BuyerAccessTokenProvider,\n BuyerAccessRefreshReason,\n BuyerAccessUnavailableReason,\n BuyerAccessExpiredEvent,\n BuyerAccessUnavailableEvent,\n SelectedObjectUnavailableEvent,\n} from '@seatlayer/js';\n\n// The framework-agnostic widget class — for the one-call modal (SeatPickerWidget.open()).\nexport { SeatPicker as SeatPickerWidget } from '@seatlayer/js';\n\n// Host-side embed helper: grows the iframe on `seatlayer:height` and pins it on\n// `seatlayer:fullscreen`. Angular hosts depend on this package alone, so it has to\n// be reachable here rather than only from @seatlayer/js.\nexport { attachPickerFrame } from '@seatlayer/js';\nexport type { AttachPickerFrameOptions } from '@seatlayer/js';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["CoreSeatingChart","CoreSeasonPicker"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -187,6 +187,12 @@ declare class SeatLayerSeasonPickerComponent implements OnChanges {
|
|
|
187
187
|
season: string;
|
|
188
188
|
/** Public API base override. */
|
|
189
189
|
apiBase?: string;
|
|
190
|
+
/** Publishable account key, accepted for snippet parity. Never sent. */
|
|
191
|
+
publicKey?: string;
|
|
192
|
+
/** Who takes the money once the package is held. Default `'handoff'`. */
|
|
193
|
+
checkout?: SeasonPickerOptions['checkout'];
|
|
194
|
+
/** Where a redirecting gateway returns the buyer, for hosted checkout. */
|
|
195
|
+
returnUrl?: string;
|
|
190
196
|
/** Refreshable one-time browser bearer provider. */
|
|
191
197
|
buyerAccessTokenProvider?: SeasonPickerOptions['buyerAccessTokenProvider'];
|
|
192
198
|
/** One-time Season browser bearer. */
|
|
@@ -209,6 +215,8 @@ declare class SeatLayerSeasonPickerComponent implements OnChanges {
|
|
|
209
215
|
readonly accessExpired: EventEmitter<unknown>;
|
|
210
216
|
/** Buyer access cannot be recovered. */
|
|
211
217
|
readonly accessUnavailable: EventEmitter<unknown>;
|
|
218
|
+
/** Hosted checkout only: the gateway webhook landed and the order is paid. */
|
|
219
|
+
readonly orderConfirmed: EventEmitter<unknown>;
|
|
212
220
|
/** Buyer-visible operation status changed. */
|
|
213
221
|
readonly statusChange: EventEmitter<SeasonStatusEvent>;
|
|
214
222
|
/** The Season buyer flow failed. */
|
|
@@ -237,7 +245,7 @@ declare class SeatLayerSeasonPickerComponent implements OnChanges {
|
|
|
237
245
|
private current;
|
|
238
246
|
private destroy;
|
|
239
247
|
static ɵfac: i0.ɵɵFactoryDeclaration<SeatLayerSeasonPickerComponent, never>;
|
|
240
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<SeatLayerSeasonPickerComponent, "seatlayer-season-picker", never, { "season": { "alias": "season"; "required": true; }; "apiBase": { "alias": "apiBase"; "required": false; }; "buyerAccessTokenProvider": { "alias": "buyerAccessTokenProvider"; "required": false; }; "buyerAccessToken": { "alias": "buyerAccessToken"; "required": false; }; "initialOperationId": { "alias": "initialOperationId"; "required": false; }; "recoveryTimeoutMs": { "alias": "recoveryTimeoutMs"; "required": false; }; "fetch": { "alias": "fetch"; "required": false; }; }, { "hold": "hold"; "holdChange": "holdChange"; "continued": "continued"; "renewalIntent": "renewalIntent"; "accessExpired": "accessExpired"; "accessUnavailable": "accessUnavailable"; "statusChange": "statusChange"; "errored": "errored"; }, never, never, true, never>;
|
|
248
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SeatLayerSeasonPickerComponent, "seatlayer-season-picker", never, { "season": { "alias": "season"; "required": true; }; "apiBase": { "alias": "apiBase"; "required": false; }; "publicKey": { "alias": "publicKey"; "required": false; }; "checkout": { "alias": "checkout"; "required": false; }; "returnUrl": { "alias": "returnUrl"; "required": false; }; "buyerAccessTokenProvider": { "alias": "buyerAccessTokenProvider"; "required": false; }; "buyerAccessToken": { "alias": "buyerAccessToken"; "required": false; }; "initialOperationId": { "alias": "initialOperationId"; "required": false; }; "recoveryTimeoutMs": { "alias": "recoveryTimeoutMs"; "required": false; }; "fetch": { "alias": "fetch"; "required": false; }; }, { "hold": "hold"; "holdChange": "holdChange"; "continued": "continued"; "renewalIntent": "renewalIntent"; "accessExpired": "accessExpired"; "accessUnavailable": "accessUnavailable"; "orderConfirmed": "orderConfirmed"; "statusChange": "statusChange"; "errored": "errored"; }, never, never, true, never>;
|
|
241
249
|
}
|
|
242
250
|
|
|
243
251
|
export { SeatLayerSeasonPickerComponent, SeatLayerSeatingChartComponent };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seatlayer/angular",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.81.0",
|
|
4
4
|
"description": "SeatLayer's official Angular seating chart and seat map SDK — live availability, seat selection, temporary holds, and a typed TypeScript API for ticketing apps.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": {
|
|
@@ -36,8 +36,8 @@
|
|
|
36
36
|
"typescript"
|
|
37
37
|
],
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@seatlayer/core": "0.
|
|
40
|
-
"@seatlayer/js": "0.
|
|
39
|
+
"@seatlayer/core": "0.81.0",
|
|
40
|
+
"@seatlayer/js": "0.81.0",
|
|
41
41
|
"tslib": "^2.8.1"
|
|
42
42
|
},
|
|
43
43
|
"peerDependencies": {
|