@kerusiweb/angular 2.2.0 → 2.3.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kerusiweb/angular",
3
- "version": "2.2.0",
3
+ "version": "2.3.0",
4
4
  "description": "An Angular seat-map component that renders Kerusi Seat Map & Availability Format documents as interactive, accessible inline SVG.",
5
5
  "keywords": [
6
6
  "angular",
@@ -27,7 +27,7 @@
27
27
  "peerDependencies": {
28
28
  "@angular/common": "^22.1.0",
29
29
  "@angular/core": "^22.1.0",
30
- "@kerusiweb/core": "^2.2.0"
30
+ "@kerusiweb/core": "^2.3.0"
31
31
  },
32
32
  "dependencies": {
33
33
  "tslib": "^2.3.0"
@@ -1,7 +1,53 @@
1
1
  import * as _kerusiweb_core from '@kerusiweb/core';
2
- import { KerusiMap, KerusiState, KerusiSession, SeatAriaStrings, KerusiSeatmapColors, RenderSeat, KerusiControlStrings, DisallowedReason, KerusiViolation, KerusiViewport, RenderMap, SectionLayout, RenderSection, PlacedSeat, SeatOccupantVariant, PlacedElement, RenderLegendEntry, SequenceReader, HeldSeat, KerusiStateDelta, DeltaApplication } from '@kerusiweb/core';
2
+ import { KerusiSeatContext, KerusiMap, KerusiState, KerusiSession, SeatAriaStrings, KerusiSeatmapColors, SeatStyleFn, RenderSeat, KerusiControlStrings, DisallowedReason, KerusiViolation, KerusiViewport, RenderMap, SectionLayout, RenderSection, PlacedSeat, PlacedElement, RenderLegendEntry, SeatOccupantVariant, SequenceReader, HeldSeat, KerusiStateDelta, DeltaApplication } from '@kerusiweb/core';
3
3
  import * as _angular_core from '@angular/core';
4
- import { Signal } from '@angular/core';
4
+ import { TemplateRef, Signal } from '@angular/core';
5
+
6
+ /**
7
+ * What a `kerusiSeat` template is handed for each seat (`let-seat`): the seat,
8
+ * whether it is selected, the stock glyph core resolved for it, and the stock
9
+ * drawing itself.
10
+ */
11
+ interface SeatTemplateContext extends KerusiSeatContext {
12
+ /**
13
+ * The library's own drawing of this seat. Render it to keep the stock seat,
14
+ * or alongside your own marks to add to it:
15
+ *
16
+ * ```html
17
+ * <ng-container *ngTemplateOutlet="seat.defaultContent; context: { $implicit: seat }" />
18
+ * ```
19
+ */
20
+ defaultContent: TemplateRef<SeatTemplateOutletContext>;
21
+ }
22
+ /** The context object a seat template is stamped with. */
23
+ interface SeatTemplateOutletContext {
24
+ $implicit: SeatTemplateContext;
25
+ }
26
+ /**
27
+ * Marks an `<ng-template>` inside `<kerusi-seatmap>` as the drawing for every
28
+ * seat. The library keeps each seat's `<g>`, with its role, ARIA state, tab
29
+ * stop, rotation and event handlers, and stamps this template inside it.
30
+ *
31
+ * The template is declared outside any `<svg>`, so Angular cannot tell its
32
+ * elements are SVG: prefix each one with `svg:` (`<svg:path>`, `<svg:image>`),
33
+ * or it is created as an unknown HTML element and draws nothing.
34
+ *
35
+ * ```html
36
+ * <kerusi-seatmap [map]="map">
37
+ * <ng-template kerusiSeat let-seat>
38
+ * <ng-container *ngTemplateOutlet="seat.defaultContent; context: { $implicit: seat }" />
39
+ * <svg:circle [attr.cx]="seat.glyph.box.x" [attr.cy]="seat.glyph.box.y" r="3" />
40
+ * </ng-template>
41
+ * </kerusi-seatmap>
42
+ * ```
43
+ */
44
+ declare class KerusiSeatTemplateDirective {
45
+ readonly template: TemplateRef<SeatTemplateOutletContext>;
46
+ /** Types `let-seat` as a {@link SeatTemplateContext}. */
47
+ static ngTemplateContextGuard(_dir: KerusiSeatTemplateDirective, ctx: unknown): ctx is SeatTemplateOutletContext;
48
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KerusiSeatTemplateDirective, never>;
49
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<KerusiSeatTemplateDirective, "ng-template[kerusiSeat]", never, {}, {}, never, never, true, never>;
50
+ }
5
51
 
6
52
  /** How a document with validation errors is handled. */
7
53
  type ValidationMode =
@@ -69,6 +115,22 @@ declare class KerusiSeatmapComponent {
69
115
  readonly colors: _angular_core.InputSignal<KerusiSeatmapColors>;
70
116
  /** Let an available seat take its `SeatType.color` (§4.7). */
71
117
  readonly typeColors: _angular_core.InputSignal<boolean>;
118
+ /**
119
+ * Styles for every seat of a type, keyed by `SeatType.id`: fill, label colour
120
+ * and classes. Never changes a selected or blocked seat's fill. Also shown in
121
+ * the legend.
122
+ */
123
+ readonly seatTypeStyles: _angular_core.InputSignal<Readonly<Record<string, _kerusiweb_core.KerusiSeatStyle>> | undefined>;
124
+ /**
125
+ * A style for one seat, laid over its `seatTypeStyles` entry; return nothing
126
+ * to leave a seat be. Never changes a selected or blocked seat's fill.
127
+ */
128
+ readonly seatStyle: _angular_core.InputSignal<SeatStyleFn | undefined>;
129
+ /**
130
+ * A `<ng-template kerusiSeat let-seat>` placed inside the map draws the inside
131
+ * of every seat in place of the stock glyph. See {@link KerusiSeatTemplateDirective}.
132
+ */
133
+ protected readonly seatTemplate: _angular_core.Signal<KerusiSeatTemplateDirective | undefined>;
72
134
  /** Grid cell edge, in viewBox units. */
73
135
  readonly seatSize: _angular_core.InputSignal<number>;
74
136
  /** Gap between grid cells, in viewBox units. */
@@ -87,7 +149,7 @@ declare class KerusiSeatmapComponent {
87
149
  readonly sectionIds: _angular_core.InputSignal<readonly string[] | undefined>;
88
150
  readonly sectionOverrides: _angular_core.InputSignal<Readonly<Record<string, SectionRenderOptions>>>;
89
151
  /** Statuses in which a seat may be picked. Default: `['available']`. */
90
- readonly selectableStatuses: _angular_core.InputSignal<readonly ("held" | "booked" | "available" | "blocked")[]>;
152
+ readonly selectableStatuses: _angular_core.InputSignal<readonly ("available" | "blocked" | "held" | "booked")[]>;
91
153
  /** `auto` selects a seat's companion closure together (§4.6). */
92
154
  readonly companionMode: _angular_core.InputSignal<"auto" | "independent">;
93
155
  readonly maxSelection: _angular_core.InputSignal<number | undefined>;
@@ -247,7 +309,7 @@ declare class KerusiSeatmapComponent {
247
309
  private announce;
248
310
  private visibleSectionIds;
249
311
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KerusiSeatmapComponent, never>;
250
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KerusiSeatmapComponent, "kerusi-seatmap", never, { "map": { "alias": "map"; "required": true; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "session": { "alias": "session"; "required": false; "isSignal": true; }; "selection": { "alias": "selection"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "rtl": { "alias": "rtl"; "required": false; "isSignal": true; }; "ariaStrings": { "alias": "ariaStrings"; "required": false; "isSignal": true; }; "colors": { "alias": "colors"; "required": false; "isSignal": true; }; "typeColors": { "alias": "typeColors"; "required": false; "isSignal": true; }; "seatSize": { "alias": "seatSize"; "required": false; "isSignal": true; }; "seatGap": { "alias": "seatGap"; "required": false; "isSignal": true; }; "freeformBasis": { "alias": "freeformBasis"; "required": false; "isSignal": true; }; "unitScale": { "alias": "unitScale"; "required": false; "isSignal": true; }; "showSectionLabels": { "alias": "showSectionLabels"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; "showLegendPrices": { "alias": "showLegendPrices"; "required": false; "isSignal": true; }; "sectionIds": { "alias": "sectionIds"; "required": false; "isSignal": true; }; "sectionOverrides": { "alias": "sectionOverrides"; "required": false; "isSignal": true; }; "selectableStatuses": { "alias": "selectableStatuses"; "required": false; "isSignal": true; }; "companionMode": { "alias": "companionMode"; "required": false; "isSignal": true; }; "maxSelection": { "alias": "maxSelection"; "required": false; "isSignal": true; }; "seatSelectable": { "alias": "seatSelectable"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; "expireHolds": { "alias": "expireHolds"; "required": false; "isSignal": true; }; "expiryIntervalMs": { "alias": "expiryIntervalMs"; "required": false; "isSignal": true; }; "zoomable": { "alias": "zoomable"; "required": false; "isSignal": true; }; "maxZoom": { "alias": "maxZoom"; "required": false; "isSignal": true; }; "showZoomControls": { "alias": "showZoomControls"; "required": false; "isSignal": true; }; "maximizable": { "alias": "maximizable"; "required": false; "isSignal": true; }; "controlStrings": { "alias": "controlStrings"; "required": false; "isSignal": true; }; "validate": { "alias": "validate"; "required": false; "isSignal": true; }; }, { "selection": "selectionChange"; "seatSelect": "seatSelect"; "seatDeselect": "seatDeselect"; "seatDisallowed": "seatDisallowed"; "seatFocus": "seatFocus"; "validationIssues": "validationIssues"; "viewportChange": "viewportChange"; "maximizedChange": "maximizedChange"; }, never, never, true, never>;
312
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KerusiSeatmapComponent, "kerusi-seatmap", never, { "map": { "alias": "map"; "required": true; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "session": { "alias": "session"; "required": false; "isSignal": true; }; "selection": { "alias": "selection"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "rtl": { "alias": "rtl"; "required": false; "isSignal": true; }; "ariaStrings": { "alias": "ariaStrings"; "required": false; "isSignal": true; }; "colors": { "alias": "colors"; "required": false; "isSignal": true; }; "typeColors": { "alias": "typeColors"; "required": false; "isSignal": true; }; "seatTypeStyles": { "alias": "seatTypeStyles"; "required": false; "isSignal": true; }; "seatStyle": { "alias": "seatStyle"; "required": false; "isSignal": true; }; "seatSize": { "alias": "seatSize"; "required": false; "isSignal": true; }; "seatGap": { "alias": "seatGap"; "required": false; "isSignal": true; }; "freeformBasis": { "alias": "freeformBasis"; "required": false; "isSignal": true; }; "unitScale": { "alias": "unitScale"; "required": false; "isSignal": true; }; "showSectionLabels": { "alias": "showSectionLabels"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; "showLegendPrices": { "alias": "showLegendPrices"; "required": false; "isSignal": true; }; "sectionIds": { "alias": "sectionIds"; "required": false; "isSignal": true; }; "sectionOverrides": { "alias": "sectionOverrides"; "required": false; "isSignal": true; }; "selectableStatuses": { "alias": "selectableStatuses"; "required": false; "isSignal": true; }; "companionMode": { "alias": "companionMode"; "required": false; "isSignal": true; }; "maxSelection": { "alias": "maxSelection"; "required": false; "isSignal": true; }; "seatSelectable": { "alias": "seatSelectable"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; "expireHolds": { "alias": "expireHolds"; "required": false; "isSignal": true; }; "expiryIntervalMs": { "alias": "expiryIntervalMs"; "required": false; "isSignal": true; }; "zoomable": { "alias": "zoomable"; "required": false; "isSignal": true; }; "maxZoom": { "alias": "maxZoom"; "required": false; "isSignal": true; }; "showZoomControls": { "alias": "showZoomControls"; "required": false; "isSignal": true; }; "maximizable": { "alias": "maximizable"; "required": false; "isSignal": true; }; "controlStrings": { "alias": "controlStrings"; "required": false; "isSignal": true; }; "validate": { "alias": "validate"; "required": false; "isSignal": true; }; }, { "selection": "selectionChange"; "seatSelect": "seatSelect"; "seatDeselect": "seatDeselect"; "seatDisallowed": "seatDisallowed"; "seatFocus": "seatFocus"; "validationIssues": "validationIssues"; "viewportChange": "viewportChange"; "maximizedChange": "maximizedChange"; }, ["seatTemplate"], never, true, never>;
251
313
  }
252
314
 
253
315
  /**
@@ -273,6 +335,12 @@ declare class KerusiSectionComponent {
273
335
  readonly colors: _angular_core.InputSignal<Required<KerusiSeatmapColors>>;
274
336
  /** Whether an available seat may take its `SeatType.color` (§4.7). */
275
337
  readonly typeColors: _angular_core.InputSignal<boolean>;
338
+ /** Styles for every seat of a type, keyed by `SeatType.id`. */
339
+ readonly seatTypeStyles: _angular_core.InputSignal<Readonly<Record<string, _kerusiweb_core.KerusiSeatStyle>> | undefined>;
340
+ /** A style for one seat, laid over its type's. */
341
+ readonly seatStyle: _angular_core.InputSignal<SeatStyleFn | undefined>;
342
+ /** Draws the inside of each seat in place of the stock glyph. */
343
+ readonly seatTemplate: _angular_core.InputSignal<TemplateRef<SeatTemplateOutletContext> | undefined>;
276
344
  /** When false, seats render but do not respond to pointer or keyboard. */
277
345
  readonly interactive: _angular_core.InputSignal<boolean>;
278
346
  /**
@@ -291,62 +359,19 @@ declare class KerusiSectionComponent {
291
359
  protected readonly viewBox: _angular_core.Signal<string>;
292
360
  /** The section's natural width in CSS pixels; it never draws wider. */
293
361
  protected readonly naturalWidth: _angular_core.Signal<number>;
294
- protected isSelected(placed: PlacedSeat): boolean;
295
- protected fill(placed: PlacedSeat): string;
296
- protected textFill(placed: PlacedSeat): string;
297
- protected backdrop(): string;
298
- /** The seat's outline: square-ish front, tapered back — shape carries facing. */
299
- protected bodyPath(placed: PlacedSeat): string;
300
- /** `null` for an available or blocked seat — nothing to mark. */
301
- protected occupantVariant(placed: PlacedSeat): SeatOccupantVariant | null;
302
362
  /**
303
- * The box a seat's decorative marks are drawn to: the seat's own, or — when
304
- * it is selected — the core plate's, which is inset by the frame width.
305
- *
306
- * Everything over a selected seat sits on the core, so it all has to be
307
- * measured from the core. Drawing to the seat's box instead leaves the
308
- * occupant's hips crossing the frame, where a figure tinted `selectedBg`
309
- * lands on a frame filled `selectedBg` and reads as a hard nub. Since the
310
- * core is an exact scaled copy of the body (see {@link seatSelectedFrame}),
311
- * routing through here reproduces every clearance the mark had against the
312
- * body, scaled — so the frame width stays free to change.
363
+ * Every seat with its glyph resolved, once per change of layout, selection or
364
+ * theme rather than once per binding per change detection.
313
365
  */
314
- private markBox;
315
- /** The bright plate inside a selected seat's frame. */
316
- protected corePath(placed: PlacedSeat): string;
317
- protected coreFill(): string;
318
- /** The dimming wash over a held or booked seat's type colour. */
319
- protected washFill(placed: PlacedSeat): string;
320
- /** The occupant figure for a marked seat, sized to whatever it sits on. */
321
- protected occupantPath(placed: PlacedSeat): string;
322
- protected occupantStroke(placed: PlacedSeat): number;
323
- protected wheelchairCx(placed: PlacedSeat): number;
324
- protected wheelchairCy(placed: PlacedSeat): number;
325
- protected wheelchairRadius(placed: PlacedSeat): number;
326
- /**
327
- * A core-coloured outline behind a selected seat's number, painted under the
328
- * glyphs via `paint-order`.
329
- *
330
- * The label is centred on the occupant's shoulder line, so without this it is
331
- * `selectedBg` over a `selectedBg` silhouette — the figure, not the plate, is
332
- * what it actually has to contrast against. The halo also rescues a label too
333
- * long for the core, which would otherwise run onto the frame and vanish into
334
- * it.
335
- *
336
- * Bound here rather than in the stylesheet on purpose: a CSS
337
- * `var(--kerusi-selected-fg, …)` rule would carry the library default as its
338
- * fallback and silently skip the `[colors]` input tier, which only the
339
- * TypeScript side can resolve.
340
- */
341
- protected labelHalo(placed: PlacedSeat): string;
342
- protected labelHaloWidth(placed: PlacedSeat): number;
343
- /** Solid for selected/booked; `none` for held, which draws hollow instead. */
344
- protected occupantFill(variant: SeatOccupantVariant): string;
345
- protected occupantStrokeColor(variant: SeatOccupantVariant): string;
366
+ protected readonly seats: _angular_core.Signal<{
367
+ placed: PlacedSeat;
368
+ selected: boolean;
369
+ glyph: _kerusiweb_core.SeatGlyph;
370
+ }[]>;
371
+ protected backdrop(): string;
346
372
  /** The section's single tab stop; every other seat is reachable by arrow key. */
347
373
  protected tabIndex(placed: PlacedSeat): number;
348
374
  protected ariaLabel(placed: PlacedSeat): string;
349
- protected seatClasses(placed: PlacedSeat): string;
350
375
  /** SVG rotate() about the item's center; null when it does not rotate. */
351
376
  protected transform(item: PlacedSeat | PlacedElement): string | null;
352
377
  /** Cancels the parent <g>'s rotation so the label stays upright and stays put. */
@@ -365,7 +390,7 @@ declare class KerusiSectionComponent {
365
390
  protected onSeatFocus(placed: PlacedSeat): void;
366
391
  protected onKeydown(event: KeyboardEvent): void;
367
392
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KerusiSectionComponent, never>;
368
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KerusiSectionComponent, "kerusi-section", never, { "section": { "alias": "section"; "required": true; "isSignal": true; }; "layout": { "alias": "layout"; "required": true; "isSignal": true; }; "selection": { "alias": "selection"; "required": false; "isSignal": true; }; "focusedSeatId": { "alias": "focusedSeatId"; "required": false; "isSignal": true; }; "ariaLabels": { "alias": "ariaLabels"; "required": false; "isSignal": true; }; "colors": { "alias": "colors"; "required": false; "isSignal": true; }; "typeColors": { "alias": "typeColors"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; "unitScale": { "alias": "unitScale"; "required": false; "isSignal": true; }; }, { "seatActivate": "seatActivate"; "seatFocused": "seatFocused"; "seatKeydown": "seatKeydown"; }, never, never, true, never>;
393
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KerusiSectionComponent, "kerusi-section", never, { "section": { "alias": "section"; "required": true; "isSignal": true; }; "layout": { "alias": "layout"; "required": true; "isSignal": true; }; "selection": { "alias": "selection"; "required": false; "isSignal": true; }; "focusedSeatId": { "alias": "focusedSeatId"; "required": false; "isSignal": true; }; "ariaLabels": { "alias": "ariaLabels"; "required": false; "isSignal": true; }; "colors": { "alias": "colors"; "required": false; "isSignal": true; }; "typeColors": { "alias": "typeColors"; "required": false; "isSignal": true; }; "seatTypeStyles": { "alias": "seatTypeStyles"; "required": false; "isSignal": true; }; "seatStyle": { "alias": "seatStyle"; "required": false; "isSignal": true; }; "seatTemplate": { "alias": "seatTemplate"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; "unitScale": { "alias": "unitScale"; "required": false; "isSignal": true; }; }, { "seatActivate": "seatActivate"; "seatFocused": "seatFocused"; "seatKeydown": "seatKeydown"; }, never, never, true, never>;
369
394
  }
370
395
 
371
396
  /** Which marks, beyond the body fill, a status swatch draws. */
@@ -398,6 +423,8 @@ declare class KerusiLegendComponent {
398
423
  readonly colors: _angular_core.InputSignal<Required<KerusiSeatmapColors>>;
399
424
  /** Whether an available seat takes its type color — mirrors the seatmap input. */
400
425
  readonly typeColors: _angular_core.InputSignal<boolean>;
426
+ /** Mirrors the seatmap input: a type's style is what its swatch shows. */
427
+ readonly seatTypeStyles: _angular_core.InputSignal<Readonly<Record<string, _kerusiweb_core.KerusiSeatStyle>> | undefined>;
401
428
  readonly showPrices: _angular_core.InputSignal<boolean>;
402
429
  /** Hide types no seat in the rendered map actually uses. */
403
430
  readonly hideUnusedTypes: _angular_core.InputSignal<boolean>;
@@ -406,6 +433,8 @@ declare class KerusiLegendComponent {
406
433
  protected readonly types: _angular_core.Signal<RenderLegendEntry[]>;
407
434
  protected readonly statuses: _angular_core.Signal<StatusEntry[]>;
408
435
  protected swatch(entry: RenderLegendEntry): string;
436
+ /** The swatch outline for a type styled with its own shape; `undefined` keeps the square. */
437
+ protected typeShape(entry: RenderLegendEntry): string | undefined;
409
438
  protected swatchText(entry: RenderLegendEntry): string;
410
439
  /** The swatch's viewBox edge; the seat glyph is drawn to fill it. */
411
440
  protected readonly glyphSize = 16;
@@ -429,7 +458,7 @@ declare class KerusiLegendComponent {
429
458
  protected coreFill(): string;
430
459
  protected price(entry: RenderLegendEntry): string;
431
460
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KerusiLegendComponent, never>;
432
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KerusiLegendComponent, "kerusi-legend", never, { "legend": { "alias": "legend"; "required": true; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "colors": { "alias": "colors"; "required": false; "isSignal": true; }; "typeColors": { "alias": "typeColors"; "required": false; "isSignal": true; }; "showPrices": { "alias": "showPrices"; "required": false; "isSignal": true; }; "hideUnusedTypes": { "alias": "hideUnusedTypes"; "required": false; "isSignal": true; }; "headingSeatTypes": { "alias": "headingSeatTypes"; "required": false; "isSignal": true; }; "headingAvailability": { "alias": "headingAvailability"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
461
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KerusiLegendComponent, "kerusi-legend", never, { "legend": { "alias": "legend"; "required": true; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "colors": { "alias": "colors"; "required": false; "isSignal": true; }; "typeColors": { "alias": "typeColors"; "required": false; "isSignal": true; }; "seatTypeStyles": { "alias": "seatTypeStyles"; "required": false; "isSignal": true; }; "showPrices": { "alias": "showPrices"; "required": false; "isSignal": true; }; "hideUnusedTypes": { "alias": "hideUnusedTypes"; "required": false; "isSignal": true; }; "headingSeatTypes": { "alias": "headingSeatTypes"; "required": false; "isSignal": true; }; "headingAvailability": { "alias": "headingAvailability"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
433
462
  }
434
463
 
435
464
  /**
@@ -478,5 +507,5 @@ declare class KerusiStateStore {
478
507
  startExpiryTicker(intervalMs?: number): () => void;
479
508
  }
480
509
 
481
- export { KerusiLegendComponent, KerusiSeatmapComponent, KerusiSectionComponent, KerusiStateStore };
482
- export type { SeatDisallowed, SeatInteraction, SectionRenderOptions, ValidationMode };
510
+ export { KerusiLegendComponent, KerusiSeatTemplateDirective, KerusiSeatmapComponent, KerusiSectionComponent, KerusiStateStore };
511
+ export type { SeatDisallowed, SeatInteraction, SeatTemplateContext, SeatTemplateOutletContext, SectionRenderOptions, ValidationMode };