@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/README.md +225 -4
- package/fesm2022/kerusiweb-angular.mjs +104 -135
- package/fesm2022/kerusiweb-angular.mjs.map +1 -1
- package/package.json +2 -2
- package/types/kerusiweb-angular.d.ts +88 -59
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kerusiweb/angular",
|
|
3
|
-
"version": "2.
|
|
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.
|
|
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,
|
|
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 ("
|
|
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"; },
|
|
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
|
-
*
|
|
304
|
-
*
|
|
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
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
protected
|
|
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 };
|