@kerusiweb/core 2.0.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.
Files changed (95) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +68 -0
  3. package/dist/kerusi/index.d.ts +19 -0
  4. package/dist/kerusi/index.d.ts.map +1 -0
  5. package/dist/kerusi/index.js +19 -0
  6. package/dist/kerusi/index.js.map +1 -0
  7. package/dist/kerusi/kerusi-layout-mode.d.ts +58 -0
  8. package/dist/kerusi/kerusi-layout-mode.d.ts.map +1 -0
  9. package/dist/kerusi/kerusi-layout-mode.js +117 -0
  10. package/dist/kerusi/kerusi-layout-mode.js.map +1 -0
  11. package/dist/kerusi/kerusi-locale.d.ts +43 -0
  12. package/dist/kerusi/kerusi-locale.d.ts.map +1 -0
  13. package/dist/kerusi/kerusi-locale.js +111 -0
  14. package/dist/kerusi/kerusi-locale.js.map +1 -0
  15. package/dist/kerusi/kerusi-map.model.d.ts +258 -0
  16. package/dist/kerusi/kerusi-map.model.d.ts.map +1 -0
  17. package/dist/kerusi/kerusi-map.model.js +11 -0
  18. package/dist/kerusi/kerusi-map.model.js.map +1 -0
  19. package/dist/kerusi/kerusi-price.d.ts +22 -0
  20. package/dist/kerusi/kerusi-price.d.ts.map +1 -0
  21. package/dist/kerusi/kerusi-price.js +48 -0
  22. package/dist/kerusi/kerusi-price.js.map +1 -0
  23. package/dist/kerusi/kerusi-rows.d.ts +25 -0
  24. package/dist/kerusi/kerusi-rows.d.ts.map +1 -0
  25. package/dist/kerusi/kerusi-rows.js +36 -0
  26. package/dist/kerusi/kerusi-rows.js.map +1 -0
  27. package/dist/kerusi/kerusi-state.d.ts +85 -0
  28. package/dist/kerusi/kerusi-state.d.ts.map +1 -0
  29. package/dist/kerusi/kerusi-state.js +117 -0
  30. package/dist/kerusi/kerusi-state.js.map +1 -0
  31. package/dist/kerusi/kerusi-state.model.d.ts +79 -0
  32. package/dist/kerusi/kerusi-state.model.d.ts.map +1 -0
  33. package/dist/kerusi/kerusi-state.model.js +7 -0
  34. package/dist/kerusi/kerusi-state.model.js.map +1 -0
  35. package/dist/kerusi/kerusi-validator.d.ts +96 -0
  36. package/dist/kerusi/kerusi-validator.d.ts.map +1 -0
  37. package/dist/kerusi/kerusi-validator.js +525 -0
  38. package/dist/kerusi/kerusi-validator.js.map +1 -0
  39. package/dist/kerusi/kerusi-violation.d.ts +36 -0
  40. package/dist/kerusi/kerusi-violation.d.ts.map +1 -0
  41. package/dist/kerusi/kerusi-violation.js +13 -0
  42. package/dist/kerusi/kerusi-violation.js.map +1 -0
  43. package/dist/public-api.d.ts +4 -0
  44. package/dist/public-api.d.ts.map +1 -0
  45. package/dist/public-api.js +13 -0
  46. package/dist/public-api.js.map +1 -0
  47. package/dist/render/build-render-model.d.ts +36 -0
  48. package/dist/render/build-render-model.d.ts.map +1 -0
  49. package/dist/render/build-render-model.js +258 -0
  50. package/dist/render/build-render-model.js.map +1 -0
  51. package/dist/render/element-shapes.d.ts +34 -0
  52. package/dist/render/element-shapes.d.ts.map +1 -0
  53. package/dist/render/element-shapes.js +41 -0
  54. package/dist/render/element-shapes.js.map +1 -0
  55. package/dist/render/index.d.ts +14 -0
  56. package/dist/render/index.d.ts.map +1 -0
  57. package/dist/render/index.js +14 -0
  58. package/dist/render/index.js.map +1 -0
  59. package/dist/render/navigation-order.d.ts +49 -0
  60. package/dist/render/navigation-order.d.ts.map +1 -0
  61. package/dist/render/navigation-order.js +109 -0
  62. package/dist/render/navigation-order.js.map +1 -0
  63. package/dist/render/render-model.d.ts +151 -0
  64. package/dist/render/render-model.d.ts.map +1 -0
  65. package/dist/render/render-model.js +2 -0
  66. package/dist/render/render-model.js.map +1 -0
  67. package/dist/render/seat-shapes.d.ts +72 -0
  68. package/dist/render/seat-shapes.d.ts.map +1 -0
  69. package/dist/render/seat-shapes.js +161 -0
  70. package/dist/render/seat-shapes.js.map +1 -0
  71. package/dist/render/section-layout.d.ts +66 -0
  72. package/dist/render/section-layout.d.ts.map +1 -0
  73. package/dist/render/section-layout.js +173 -0
  74. package/dist/render/section-layout.js.map +1 -0
  75. package/dist/view/index.d.ts +12 -0
  76. package/dist/view/index.d.ts.map +1 -0
  77. package/dist/view/index.js +12 -0
  78. package/dist/view/index.js.map +1 -0
  79. package/dist/view/kerusi-seatmap-colors.d.ts +176 -0
  80. package/dist/view/kerusi-seatmap-colors.d.ts.map +1 -0
  81. package/dist/view/kerusi-seatmap-colors.js +215 -0
  82. package/dist/view/kerusi-seatmap-colors.js.map +1 -0
  83. package/dist/view/rtl.d.ts +17 -0
  84. package/dist/view/rtl.d.ts.map +1 -0
  85. package/dist/view/rtl.js +29 -0
  86. package/dist/view/rtl.js.map +1 -0
  87. package/dist/view/seat-aria.d.ts +44 -0
  88. package/dist/view/seat-aria.d.ts.map +1 -0
  89. package/dist/view/seat-aria.js +103 -0
  90. package/dist/view/seat-aria.js.map +1 -0
  91. package/dist/view/selection.d.ts +84 -0
  92. package/dist/view/selection.d.ts.map +1 -0
  93. package/dist/view/selection.js +98 -0
  94. package/dist/view/selection.js.map +1 -0
  95. package/package.json +42 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section-layout.js","sourceRoot":"","sources":["../../src/render/section-layout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Presentation policy that is still framework-free: the colour system a
3
+ * renderer resolves seat fills from, the ARIA strings it announces, and the
4
+ * selection rules that decide whether a seat may be toggled.
5
+ *
6
+ * A binding turns these into markup; none of them know how.
7
+ */
8
+ export * from './kerusi-seatmap-colors.js';
9
+ export * from './rtl.js';
10
+ export * from './seat-aria.js';
11
+ export * from './selection.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/view/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,4BAA4B,CAAC;AAC3C,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Presentation policy that is still framework-free: the colour system a
3
+ * renderer resolves seat fills from, the ARIA strings it announces, and the
4
+ * selection rules that decide whether a seat may be toggled.
5
+ *
6
+ * A binding turns these into markup; none of them know how.
7
+ */
8
+ export * from './kerusi-seatmap-colors.js';
9
+ export * from './rtl.js';
10
+ export * from './seat-aria.js';
11
+ export * from './selection.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/view/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,4BAA4B,CAAC;AAC3C,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,176 @@
1
+ import { RenderSeat } from '../render/render-model.js';
2
+ /**
3
+ * Theming for `<kerusi-seatmap>`.
4
+ *
5
+ * Color means seat type; shape means status. The pre-1.0 renderer colored
6
+ * purely by availability, so `SeatType.color` — the spec's own suggested
7
+ * render color (§4.7) — was parsed and then ignored, and a map could not
8
+ * color its own types. A later revision swung the other way and let status
9
+ * override the type color, which hid the type color on every held or booked
10
+ * seat — exactly where a busy map needed it most. Now a seat keeps its type
11
+ * color everywhere; status is read from a dimming wash and an occupant figure
12
+ * instead (see {@link seatFill}). `selected` is the one deliberate exception:
13
+ * it still owns the color outright, so your own picks are never ambiguous.
14
+ *
15
+ * Selection is also the one state drawn from *two* tones rather than one:
16
+ * `selectedBg` frames the seat and `selectedFg` fills a core inside it (see
17
+ * {@link seatCoreFill}). An earlier revision had this the other way round — a
18
+ * near-white rim around a mid-purple middle — which put the low-contrast tone
19
+ * on the outside boundary, so a selected seat dissolved into a light page and
20
+ * sank into a dark one. Holding both a light and a dark tone means one of them
21
+ * always separates from the page, whichever way a consumer has themed it, and
22
+ * the library never has to ask which that is.
23
+ */
24
+ export interface KerusiSeatmapColors {
25
+ /** An available seat with no type color. */
26
+ availableBg?: string;
27
+ availableFg?: string;
28
+ /**
29
+ * A seat the user has picked. The one status that still owns the seat's
30
+ * color outright — see {@link seatFill} — so your own picks always pop out
31
+ * of the map. `selectedBg` frames the seat and `selectedFg` fills the core
32
+ * inside that frame, which is also what the label and the occupant figure
33
+ * are tinted with. Both carry real visual weight, so override them as a
34
+ * pair; swapping the two gives the inverse treatment, a light frame around
35
+ * a dark core, which works just as well.
36
+ */
37
+ selectedBg?: string;
38
+ selectedFg?: string;
39
+ /**
40
+ * Sold. The seat keeps its type color; `bookedBg` is the dimming wash drawn
41
+ * over it and `bookedFg` tints the solid occupant figure that marks it.
42
+ */
43
+ bookedBg?: string;
44
+ bookedFg?: string;
45
+ /**
46
+ * Someone else's checkout in progress. `heldBg` washes the seat's type
47
+ * color and `heldFg` strokes the hollow occupant figure that marks it —
48
+ * hollow because the hold is provisional, not settled.
49
+ */
50
+ heldBg?: string;
51
+ heldFg?: string;
52
+ /** Withheld by the venue: no occupant, so grey is the whole signal. */
53
+ blockedBg?: string;
54
+ blockedFg?: string;
55
+ /** Non-bookable features: screens, stages, lavatories. */
56
+ elementBg?: string;
57
+ elementFg?: string;
58
+ /** Exits and doors, which should stand out from other fixtures. */
59
+ elementAccentBg?: string;
60
+ elementAccentFg?: string;
61
+ /** Aisles, gaps and other deliberately empty space. */
62
+ elementMutedBg?: string;
63
+ elementMutedFg?: string;
64
+ /** The keyboard focus ring. */
65
+ focusRing?: string;
66
+ /** Behind the seating area. `transparent` by default. */
67
+ backdrop?: string;
68
+ }
69
+ export declare const DEFAULT_KERUSI_COLORS: Required<KerusiSeatmapColors>;
70
+ /**
71
+ * Fills the gaps in a partial palette with the library defaults.
72
+ *
73
+ * Every paint function below takes a `Required<KerusiSeatmapColors>`, and a
74
+ * binding's `colors` input is partial, so each one would otherwise open with
75
+ * the same spread. One merge, defined once.
76
+ */
77
+ export declare function resolveColors(colors?: KerusiSeatmapColors): Required<KerusiSeatmapColors>;
78
+ /**
79
+ * A palette value as a CSS custom property, with the resolved `[colors]` value
80
+ * as its fallback.
81
+ *
82
+ * This is what makes the theme reachable from a stylesheet. The palette is
83
+ * still a TypeScript object, but every value it produces is written as
84
+ * `var(--kerusi-selected-bg, #7854af)`, so a consumer has three tiers to work
85
+ * with, in precedence order:
86
+ *
87
+ * a `--kerusi-*` property in their own CSS → the `[colors]` input → the
88
+ * library default
89
+ *
90
+ * The custom property is never set by the library itself, which is what keeps
91
+ * that order honest: if the component wrote the input onto the host, the input
92
+ * would always beat the stylesheet and the CSS tier would be decorative.
93
+ *
94
+ * `SeatType.color` deliberately does not go through here. That is the
95
+ * document's own value under §4.7, not the theme's, and {@link readableOn}
96
+ * still has to be able to parse it.
97
+ */
98
+ export declare function cssVar(key: keyof KerusiSeatmapColors, value: string): string;
99
+ /** `selectedBg` → `--kerusi-selected-bg`. */
100
+ export declare function cssVarName(key: keyof KerusiSeatmapColors): string;
101
+ /**
102
+ * The fill for a seat's body, in precedence order:
103
+ *
104
+ * selected → blocked → `SeatType.color` → available
105
+ *
106
+ * For a selected seat this is the *frame*: {@link seatCoreFill}'s core is drawn
107
+ * inside it and covers most of the body, so `selectedBg` reads as a border
108
+ * rather than as the seat's area.
109
+ *
110
+ * A held or booked seat is deliberately *not* in this list: it keeps its type
111
+ * color, same as an available one, because status is read from
112
+ * {@link seatOccupantVariant}'s figure and {@link seatWashFill}'s wash
113
+ * instead. Hiding the type color behind a status hue was the bug this
114
+ * replaced — see the module doc comment. `blocked` still gets its own fill,
115
+ * because a seat withheld by the venue has no occupant to draw; grey is the
116
+ * whole signal, same as before. Attributes never affect the fill — §4.3.3
117
+ * makes them descriptive tags, not a rendering category.
118
+ */
119
+ export declare function seatFill(seat: RenderSeat, selected: boolean, colors: Required<KerusiSeatmapColors>, useTypeColors: boolean): string;
120
+ /**
121
+ * The bright core inside a selected seat's frame — the second of the two tones
122
+ * selection is drawn from, see the module doc comment. Everything drawn over
123
+ * the core (the label, the occupant figure, the wheelchair marker) is tinted
124
+ * `selectedBg` to read against it.
125
+ */
126
+ export declare function seatCoreFill(colors: Required<KerusiSeatmapColors>): string;
127
+ /**
128
+ * The label color to pair with {@link seatFill} — except for a selected seat,
129
+ * where the label sits on {@link seatCoreFill}'s core rather than on the frame,
130
+ * so the two tones swap round.
131
+ */
132
+ export declare function seatTextFill(seat: RenderSeat, selected: boolean, colors: Required<KerusiSeatmapColors>, useTypeColors: boolean): string;
133
+ /** Which occupant figure marks a seat, if any — see {@link seatFill}. */
134
+ export type SeatOccupantVariant = 'selected' | 'held' | 'booked';
135
+ /**
136
+ * The occupant figure for a seat, or `null` for a seat with nothing to draw:
137
+ * available (nobody there yet) and blocked (nobody ever will be).
138
+ */
139
+ export declare function seatOccupantVariant(seat: RenderSeat, selected: boolean): SeatOccupantVariant | null;
140
+ /**
141
+ * The tint for an occupant figure: solid `selectedBg`/`bookedFg` for a seat
142
+ * that is settled (yours, or someone else's), or `heldFg` for the hollow
143
+ * outline that marks a hold still in progress. A selected seat's figure is
144
+ * drawn on {@link seatCoreFill}'s core, so it takes the frame's color rather
145
+ * than the core's — the opposite way round from every other variant, which
146
+ * sits on the seat's own fill.
147
+ */
148
+ export declare function occupantTint(variant: SeatOccupantVariant, colors: Required<KerusiSeatmapColors>): string;
149
+ /**
150
+ * The dimming wash drawn over a held or booked seat's type color, so a taken
151
+ * seat still recedes even though its hue no longer changes.
152
+ */
153
+ export declare function seatWashFill(status: 'held' | 'booked', colors: Required<KerusiSeatmapColors>): string;
154
+ /**
155
+ * The occupant figure's fill: solid for `selected`/`booked`, `none` for
156
+ * `held` — a hold in progress draws as a hollow outline instead. Pair with
157
+ * {@link occupantStrokeFill}, which is the exact inverse.
158
+ */
159
+ export declare function occupantFillFor(variant: SeatOccupantVariant, colors: Required<KerusiSeatmapColors>): string;
160
+ /** The occupant figure's stroke: only the hollow `held` variant has one. */
161
+ export declare function occupantStrokeFor(variant: SeatOccupantVariant, colors: Required<KerusiSeatmapColors>): string;
162
+ /** Element fill for a shape tone. */
163
+ export declare function elementFill(tone: 'neutral' | 'accent' | 'muted', colors: Required<KerusiSeatmapColors>): string;
164
+ /** Element label color for a shape tone. */
165
+ export declare function elementTextFill(tone: 'neutral' | 'accent' | 'muted', colors: Required<KerusiSeatmapColors>): string;
166
+ /**
167
+ * Black or white, whichever reads better on the given color. Used only for a
168
+ * `SeatType.color` the document chose, where the library cannot know what
169
+ * foreground the author intended.
170
+ *
171
+ * Uses the WCAG relative-luminance formula rather than a naive channel average,
172
+ * so a saturated green and a saturated blue of the same average brightness get
173
+ * the contrast each actually needs.
174
+ */
175
+ export declare function readableOn(background: string): string;
176
+ //# sourceMappingURL=kerusi-seatmap-colors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kerusi-seatmap-colors.d.ts","sourceRoot":"","sources":["../../src/view/kerusi-seatmap-colors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,215 @@
1
+ export const DEFAULT_KERUSI_COLORS = {
2
+ availableBg: '#76d75d',
3
+ availableFg: '#123a08',
4
+ selectedBg: '#7854af',
5
+ selectedFg: '#f3ecff',
6
+ bookedBg: '#5e0c17',
7
+ bookedFg: '#ffc9d0',
8
+ heldBg: '#4a3500',
9
+ heldFg: '#ffe1a8',
10
+ blockedBg: '#5a616e',
11
+ blockedFg: '#d2d7df',
12
+ elementBg: '#d7deea',
13
+ elementFg: '#3a4353',
14
+ elementAccentBg: '#4c8bf5',
15
+ elementAccentFg: '#ffffff',
16
+ elementMutedBg: '#eef1f6',
17
+ elementMutedFg: '#6b7385',
18
+ focusRing: '#1b1f27',
19
+ backdrop: 'transparent',
20
+ };
21
+ /**
22
+ * Fills the gaps in a partial palette with the library defaults.
23
+ *
24
+ * Every paint function below takes a `Required<KerusiSeatmapColors>`, and a
25
+ * binding's `colors` input is partial, so each one would otherwise open with
26
+ * the same spread. One merge, defined once.
27
+ */
28
+ export function resolveColors(colors) {
29
+ return { ...DEFAULT_KERUSI_COLORS, ...colors };
30
+ }
31
+ /**
32
+ * A palette value as a CSS custom property, with the resolved `[colors]` value
33
+ * as its fallback.
34
+ *
35
+ * This is what makes the theme reachable from a stylesheet. The palette is
36
+ * still a TypeScript object, but every value it produces is written as
37
+ * `var(--kerusi-selected-bg, #7854af)`, so a consumer has three tiers to work
38
+ * with, in precedence order:
39
+ *
40
+ * a `--kerusi-*` property in their own CSS → the `[colors]` input → the
41
+ * library default
42
+ *
43
+ * The custom property is never set by the library itself, which is what keeps
44
+ * that order honest: if the component wrote the input onto the host, the input
45
+ * would always beat the stylesheet and the CSS tier would be decorative.
46
+ *
47
+ * `SeatType.color` deliberately does not go through here. That is the
48
+ * document's own value under §4.7, not the theme's, and {@link readableOn}
49
+ * still has to be able to parse it.
50
+ */
51
+ export function cssVar(key, value) {
52
+ return `var(${cssVarName(key)}, ${value})`;
53
+ }
54
+ /** `selectedBg` → `--kerusi-selected-bg`. */
55
+ export function cssVarName(key) {
56
+ return `--kerusi-${key.replace(/[A-Z]/g, (c) => `-${c.toLowerCase()}`)}`;
57
+ }
58
+ /**
59
+ * The fill for a seat's body, in precedence order:
60
+ *
61
+ * selected → blocked → `SeatType.color` → available
62
+ *
63
+ * For a selected seat this is the *frame*: {@link seatCoreFill}'s core is drawn
64
+ * inside it and covers most of the body, so `selectedBg` reads as a border
65
+ * rather than as the seat's area.
66
+ *
67
+ * A held or booked seat is deliberately *not* in this list: it keeps its type
68
+ * color, same as an available one, because status is read from
69
+ * {@link seatOccupantVariant}'s figure and {@link seatWashFill}'s wash
70
+ * instead. Hiding the type color behind a status hue was the bug this
71
+ * replaced — see the module doc comment. `blocked` still gets its own fill,
72
+ * because a seat withheld by the venue has no occupant to draw; grey is the
73
+ * whole signal, same as before. Attributes never affect the fill — §4.3.3
74
+ * makes them descriptive tags, not a rendering category.
75
+ */
76
+ export function seatFill(seat, selected, colors, useTypeColors) {
77
+ if (selected) {
78
+ return cssVar('selectedBg', colors.selectedBg);
79
+ }
80
+ if (seat.status === 'blocked') {
81
+ return cssVar('blockedBg', colors.blockedBg);
82
+ }
83
+ return (useTypeColors && seat.typeColor) || cssVar('availableBg', colors.availableBg);
84
+ }
85
+ /**
86
+ * The bright core inside a selected seat's frame — the second of the two tones
87
+ * selection is drawn from, see the module doc comment. Everything drawn over
88
+ * the core (the label, the occupant figure, the wheelchair marker) is tinted
89
+ * `selectedBg` to read against it.
90
+ */
91
+ export function seatCoreFill(colors) {
92
+ return cssVar('selectedFg', colors.selectedFg);
93
+ }
94
+ /**
95
+ * The label color to pair with {@link seatFill} — except for a selected seat,
96
+ * where the label sits on {@link seatCoreFill}'s core rather than on the frame,
97
+ * so the two tones swap round.
98
+ */
99
+ export function seatTextFill(seat, selected, colors, useTypeColors) {
100
+ if (selected) {
101
+ return cssVar('selectedBg', colors.selectedBg);
102
+ }
103
+ if (seat.status === 'blocked') {
104
+ return cssVar('blockedFg', colors.blockedFg);
105
+ }
106
+ return useTypeColors && seat.typeColor
107
+ ? readableOn(seat.typeColor)
108
+ : cssVar('availableFg', colors.availableFg);
109
+ }
110
+ /**
111
+ * The occupant figure for a seat, or `null` for a seat with nothing to draw:
112
+ * available (nobody there yet) and blocked (nobody ever will be).
113
+ */
114
+ export function seatOccupantVariant(seat, selected) {
115
+ if (selected) {
116
+ return 'selected';
117
+ }
118
+ if (seat.status === 'held' || seat.status === 'booked') {
119
+ return seat.status;
120
+ }
121
+ return null;
122
+ }
123
+ /**
124
+ * The tint for an occupant figure: solid `selectedBg`/`bookedFg` for a seat
125
+ * that is settled (yours, or someone else's), or `heldFg` for the hollow
126
+ * outline that marks a hold still in progress. A selected seat's figure is
127
+ * drawn on {@link seatCoreFill}'s core, so it takes the frame's color rather
128
+ * than the core's — the opposite way round from every other variant, which
129
+ * sits on the seat's own fill.
130
+ */
131
+ export function occupantTint(variant, colors) {
132
+ switch (variant) {
133
+ case 'selected':
134
+ return cssVar('selectedBg', colors.selectedBg);
135
+ case 'held':
136
+ return cssVar('heldFg', colors.heldFg);
137
+ case 'booked':
138
+ return cssVar('bookedFg', colors.bookedFg);
139
+ }
140
+ }
141
+ /**
142
+ * The dimming wash drawn over a held or booked seat's type color, so a taken
143
+ * seat still recedes even though its hue no longer changes.
144
+ */
145
+ export function seatWashFill(status, colors) {
146
+ return status === 'held' ? cssVar('heldBg', colors.heldBg) : cssVar('bookedBg', colors.bookedBg);
147
+ }
148
+ /**
149
+ * The occupant figure's fill: solid for `selected`/`booked`, `none` for
150
+ * `held` — a hold in progress draws as a hollow outline instead. Pair with
151
+ * {@link occupantStrokeFill}, which is the exact inverse.
152
+ */
153
+ export function occupantFillFor(variant, colors) {
154
+ return variant === 'held' ? 'none' : occupantTint(variant, colors);
155
+ }
156
+ /** The occupant figure's stroke: only the hollow `held` variant has one. */
157
+ export function occupantStrokeFor(variant, colors) {
158
+ return variant === 'held' ? occupantTint(variant, colors) : 'none';
159
+ }
160
+ /** Element fill for a shape tone. */
161
+ export function elementFill(tone, colors) {
162
+ return tone === 'accent'
163
+ ? cssVar('elementAccentBg', colors.elementAccentBg)
164
+ : tone === 'muted'
165
+ ? cssVar('elementMutedBg', colors.elementMutedBg)
166
+ : cssVar('elementBg', colors.elementBg);
167
+ }
168
+ /** Element label color for a shape tone. */
169
+ export function elementTextFill(tone, colors) {
170
+ return tone === 'accent'
171
+ ? cssVar('elementAccentFg', colors.elementAccentFg)
172
+ : tone === 'muted'
173
+ ? cssVar('elementMutedFg', colors.elementMutedFg)
174
+ : cssVar('elementFg', colors.elementFg);
175
+ }
176
+ /**
177
+ * Black or white, whichever reads better on the given color. Used only for a
178
+ * `SeatType.color` the document chose, where the library cannot know what
179
+ * foreground the author intended.
180
+ *
181
+ * Uses the WCAG relative-luminance formula rather than a naive channel average,
182
+ * so a saturated green and a saturated blue of the same average brightness get
183
+ * the contrast each actually needs.
184
+ */
185
+ export function readableOn(background) {
186
+ const rgb = parseHex(background);
187
+ if (!rgb) {
188
+ return '#000000';
189
+ }
190
+ const [r, g, b] = rgb.map((channel) => {
191
+ const c = channel / 255;
192
+ return c <= 0.03928 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;
193
+ });
194
+ const luminance = 0.2126 * r + 0.7152 * g + 0.0722 * b;
195
+ return luminance > 0.179 ? '#000000' : '#ffffff';
196
+ }
197
+ /** `#rgb` or `#rrggbb` to channel values. Returns `undefined` for anything else. */
198
+ function parseHex(color) {
199
+ const hex = color.trim().replace(/^#/, '');
200
+ const full = hex.length === 3
201
+ ? hex
202
+ .split('')
203
+ .map((c) => c + c)
204
+ .join('')
205
+ : hex;
206
+ if (!/^[0-9a-f]{6}$/i.test(full)) {
207
+ return undefined;
208
+ }
209
+ return [
210
+ Number.parseInt(full.slice(0, 2), 16),
211
+ Number.parseInt(full.slice(2, 4), 16),
212
+ Number.parseInt(full.slice(4, 6), 16),
213
+ ];
214
+ }
215
+ //# sourceMappingURL=kerusi-seatmap-colors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kerusi-seatmap-colors.js","sourceRoot":"","sources":["../../src/view/kerusi-seatmap-colors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Which locales are written right-to-left.
3
+ *
4
+ * A binding needs this to decide whether to mirror a grid section and swap the
5
+ * left/right arrow keys, and it would be written identically in every one —
6
+ * so it belongs here rather than in any of them.
7
+ */
8
+ /** BCP-47 language subtags written right-to-left. */
9
+ export declare const RTL_LANGUAGES: ReadonlySet<string>;
10
+ /**
11
+ * True when the locale's language subtag is written right-to-left.
12
+ *
13
+ * Only the primary subtag is consulted, so `ar-EG` and `AR` both resolve the
14
+ * same way as `ar`.
15
+ */
16
+ export declare function isRtlLocale(locale: string): boolean;
17
+ //# sourceMappingURL=rtl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rtl.d.ts","sourceRoot":"","sources":["../../src/view/rtl.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,qDAAqD;AACrD,eAAO,MAAM,aAAa,EAAE,WAAW,CAAC,MAAM,CAU5C,CAAC;AAEH;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEnD"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Which locales are written right-to-left.
3
+ *
4
+ * A binding needs this to decide whether to mirror a grid section and swap the
5
+ * left/right arrow keys, and it would be written identically in every one —
6
+ * so it belongs here rather than in any of them.
7
+ */
8
+ /** BCP-47 language subtags written right-to-left. */
9
+ export const RTL_LANGUAGES = new Set([
10
+ 'ar',
11
+ 'he',
12
+ 'fa',
13
+ 'ur',
14
+ 'ps',
15
+ 'dv',
16
+ 'yi',
17
+ 'ku',
18
+ 'sd',
19
+ ]);
20
+ /**
21
+ * True when the locale's language subtag is written right-to-left.
22
+ *
23
+ * Only the primary subtag is consulted, so `ar-EG` and `AR` both resolve the
24
+ * same way as `ar`.
25
+ */
26
+ export function isRtlLocale(locale) {
27
+ return RTL_LANGUAGES.has(locale.toLowerCase().split('-')[0]);
28
+ }
29
+ //# sourceMappingURL=rtl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rtl.js","sourceRoot":"","sources":["../../src/view/rtl.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,qDAAqD;AACrD,MAAM,CAAC,MAAM,aAAa,GAAwB,IAAI,GAAG,CAAC;IACxD,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;CACL,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,OAAO,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;AAChE,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { RenderSeat } from '../render/render-model.js';
2
+ import { DisallowedReason } from './selection.js';
3
+ /**
4
+ * What a screen reader says about a seat.
5
+ *
6
+ * The pre-1.0 renderer drew seats as bare clickable `<g>` elements with no
7
+ * accessible name at all, so everything the document knew about a seat — its
8
+ * type, its price, whether it was even bookable, and every §4.3.4 accessibility
9
+ * property — was invisible to anyone not looking at the picture.
10
+ *
11
+ * Selection state is deliberately absent from the label: it rides on
12
+ * `aria-pressed`, and repeating it here would make every toggle announce twice.
13
+ */
14
+ /** Strings a caller may translate. Defaults are English. */
15
+ export interface SeatAriaStrings {
16
+ rowSeat: (row: string, seat: string) => string;
17
+ seatOnly: (seat: string) => string;
18
+ noPrice: string;
19
+ available: string;
20
+ booked: string;
21
+ held: string;
22
+ heldUntil: (time: string) => string;
23
+ blocked: string;
24
+ wheelchairAccessible: string;
25
+ transferArmrest: (side: string) => string;
26
+ aisleChairCompatible: string;
27
+ companionRequired: string;
28
+ /** How a selection total is announced. */
29
+ selectionSummary: (count: number, total: string) => string;
30
+ selectionEmpty: string;
31
+ disallowed: Record<DisallowedReason, string>;
32
+ }
33
+ export declare const DEFAULT_SEAT_ARIA_STRINGS: SeatAriaStrings;
34
+ /**
35
+ * Builds a seat's accessible name, in the order a listener needs it: where the
36
+ * seat is, what kind it is, what it costs, whether it can be had, what
37
+ * accessibility it offers, and finally its descriptive tags.
38
+ */
39
+ export declare function seatAriaLabel(seat: RenderSeat, locale: string, strings?: SeatAriaStrings): string;
40
+ /** A hold expiry as a local clock time; falls back to the raw value. */
41
+ export declare function formatTime(iso: string, locale: string): string;
42
+ /** The live-region announcement when a seat cannot be selected. */
43
+ export declare function disallowedAnnouncement(seat: RenderSeat, reason: DisallowedReason, strings?: SeatAriaStrings): string;
44
+ //# sourceMappingURL=seat-aria.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seat-aria.d.ts","sourceRoot":"","sources":["../../src/view/seat-aria.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD;;;;;;;;;;GAUG;AAEH,4DAA4D;AAC5D,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/C,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1C,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,0CAA0C;IAC1C,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3D,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;CAC9C;AAED,eAAO,MAAM,yBAAyB,EAAE,eAwBvC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,eAA2C,GACnD,MAAM,CAsBR;AAwCD,wEAAwE;AACxE,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAU9D;AAED,mEAAmE;AACnE,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,gBAAgB,EACxB,OAAO,GAAE,eAA2C,GACnD,MAAM,CAKR"}